Когда несколько транзакций, тратящих один и тот же вывод в одном блоке, считаются двойными тратами?

Вот пример нескольких транзакций в одном блоке, все расходы из одного и того же вывода. Я создал их с помощью кошелька Electrum, сказав Electrum каждый раз тратить немного BTC с одного и того же адреса 1AD9xV6aeQMPMzfv5Nzk8yNDgtyV3LaUkB.

См.: https://blockchain.info/address/1AD9xV6aeQMPMzfv5Nzk8yNDgtyV3LaUkB .

Похоже на двойную трату

Когда я пытаюсь сделать то же самое с Python и библиотекой Pycoin, вторая транзакция помечается как «двойная трата», когда я отправляю ее на blockchain.info/pushtx. Я получаю ответ:

An outpoint is already spent in [DBBitcoinTx [txIndex=101360418, getEstimatedBTCSent()=0, isGeneratedBlockReward()=false, getTotalBTCSent()=0, getHash()=1766bb1b732db7b3eef1bea27a572651ee343d79ca6c5b9e866e2f97e8df85aa, getVersion()=1, getSize()=258, toString ()=BitcoinTx{хэш=1766bb1b732db7b3eef1bea27a572651ee343d79ca6c5b9e866e2f97e8df85aa, версия=1, lockTime=0, in=[], out=[]}, getClass()=class piuk.blockchain_db.DBBitcoinTx]] [(101351)273]

Как и в первом примере, общая сумма, потраченная на все транзакции, никогда не превышает общую сумму, доступную по этому адресу, поэтому мне любопытно, почему это считается «двойной тратой».

Как вы должны структурировать серию транзакций с одним и тем же адресом, чтобы не было двойного расходования?

Три транзакции, которые вы показываете, тратят разные выходные данные.
Blockchain.info не является авторитетом ни в чем, их правила не являются правилами биткойнов.
тот же адрес не означает тот же выход . Это только двойная трата, если она тратит те же результаты. Адреса могут иметь более одного выхода.

Ответы (2)

Добавление моего собственного ответа после некоторых исследований: адрес и вывод - разные вещи. Транзакция может иметь много входов и много выходов. Вот хорошая визуализация с сайта bitcoin.org:

введите описание изображения здесь

Двойная трата возникает, когда один и тот же BTC используется для оплаты двумя разными людьми. Этого никогда не произойдет в блокчейне, потому что сеть Биткойн гарантирует непротиворечивый реестр. Но как насчет неподтвержденных транзакций, которые живут в мемпулах майнеров?

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

Отправленная транзакция, имеющая точно такие же входы и выходы, как и другая неподтвержденная транзакция в мемпуле, отклоняется сетью Биткойн (даже если это была действительная финансовая транзакция). Например, я мог бы отправить 1 BTC из A в B, и, пока транзакция не подтверждена, отправить еще 2 BTC из A в B. Пока у A есть 3 BTC для покрытия переводов, эти транзакции согласуются, но консервативно отклоняются горняки.

Вы можете сами убедиться в этом с помощью кошелька Electrum, используя опцию «Отправить». Обычно Electrum выбирает для вас допустимые входные данные, но вы можете переопределить это. Создайте транзакцию, указав адреса отправителя и получателя. Затем создайте еще одну транзакцию с такими же отправителями и получателями (но сумма может отличаться). Если первая транзакция еще не завершена, вы получите следующую ошибку:

введите описание изображения здесь

Поскольку суммы различаются (23,75 долл. США, 23,89 долл. США и 24,03 долл. США), они не могут быть одинаковыми выходными данными.