Могу ли я потратить монету, отправленную самому себе, до ее подтверждения?

Если я потрачу весь баланс в своем кошельке на другой адрес в своем кошельке, нужно ли мне ждать, пока он получит одно подтверждение, чтобы потратить его, или клиент знает, что это мои собственные средства и что их можно потратить?

Это можно сделать через RPC , но этот вопрос конкретно относится к использованию для этого клиента bitcoin-qt.

Ответы (2)

Да. В отличие от других транзакций, вам не нужно ждать подтверждения.

Из кода, который выбирает, какие монеты использовать для финансирования транзакции в 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));
}

где SelectCoinsMinConf2-й и 3-й аргументы — это «количество подтверждений, которые нужны монете, если она от меня» и «количество подтверждений, которые нужны монете, если она от кого-то другого» соответственно:

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

Так что происходит, код сначала пытается профинансировать транзакцию, используя только монеты, которые вы отправили себе, которые имеют по крайней мере 1 подтверждение, и монеты от других с по крайней мере 6 подтверждениями. Если он не может найти достаточно таким образом, он пытается снова, но требует только 1 подтверждения для монет, независимо от того, откуда они пришли. И если это также не удается, это ослабляет требования к подтверждениям монет, которые вы отправили себе.

Я думаю, вы можете. Вы определенно можете сделать это из bitcoind (и это было возможно с wxbitcoin), и я не вижу никакого лишнего кода, который бы помешал этому. Нет никаких причин для предотвращения этого. Но я не пробовал.