¿Puedo gastar una moneda que me enviaron antes de que se confirme?

Si gasto todo el saldo de mi billetera en otra dirección de mi propia billetera, ¿tengo que esperar hasta que reciba una confirmación para gastarlo o el cliente sabe que son mis propios fondos y que se pueden gastar?

Esto se puede hacer a través de RPC , pero esta pregunta se refiere específicamente al uso del cliente bitcoin-qt para esto.

Respuestas (2)

Sí. A diferencia de otras transacciones, no necesita esperar las confirmaciones.

Desde el código que selecciona qué monedas usar para financiar una transacción en src/wallet.cpp:

bool CWallet::SelectCoins(int64 nTargetValue, [...])
{
    vector<COutput> vCoins;
    AvailableCoins(vCoins);

    return (SelectCoinsMinConf(nTargetValue, 1, 6, vCoins, setCoinsRet, nValueRet) ||
            SelectCoinsMinConf(nTargetValue, 1, 1, vCoins, setCoinsRet, nValueRet) ||
            SelectCoinsMinConf(nTargetValue, 0, 1, vCoins, setCoinsRet, nValueRet));
}

donde SelectCoinsMinConflos argumentos 2 y 3 son "número de confirmaciones que necesita una moneda si es de mí" y "número de confirmaciones que necesita una moneda si es de otra persona" respectivamente:

bool CWallet::SelectCoinsMinConf(int64 nTargetValue, int nConfMine, int nConfTheirs, [...])
{
    [...]
}

Entonces, lo que sucede es que el código primero intenta financiar la transacción utilizando solo monedas que usted mismo se envió y que tienen al menos 1 confirmación y monedas de otros con al menos 6 confirmaciones. Si no puede encontrar suficiente de esa manera, vuelve a intentarlo, pero solo requiere 1 confirmación de las monedas, sin importar de dónde provengan. Y si eso también falla, relaja el requisito de confirmación de las monedas que se envió a sí mismo.

Yo creo que puedes. Definitivamente puede hacerlo desde bitcoind (y fue posible con wxbitcoin), y no veo ningún código adicional que lo impida. No hay razón para que se prevenga. Aunque no lo he probado.