Почему тот же выходной адрес недействителен в транзакции на Bitcoin Core?

В настоящее время я изучаю Bitcoin Core. Я нашел непонятный код, который показывает, что транзакция отклоняется, если в транзакции есть одинаковые выходные адреса.

См. рис. 1, рис. 2.

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

Исходный код источника: https://github.com/bitcoin/bitcoin/blob/8aac85d71e218783bc7ce06e5bf8bc660e24079d/src/rpc/rawtransaction_util.cpp#L95

Таким образом, транзакция, показанная на рис. 1, будет отклонена, как показано на рис. 3.введите описание изображения здесь

Можете ли вы объяснить политику, описанную в этом посте?

Ответы (2)

Это не является недействительным.

Код, который вы ищете, не связан с проверкой и ретрансляцией фактических транзакций. Вы смотрите на код RPC, который предназначен только для пользователей. RPC запрещает отправку на адрес несколько раз, поскольку это неэффективно и обычно является ошибкой пользователя.

Но это только для создания необработанной транзакции с использованием Bitcoin Core RPC. Транзакция, полученная по сети или в блоке с повторяющимися адресами в выходных данных, не будет отклонена или недействительна каким-либо образом.

Чтобы немного расширить ответ Эндрю, многие приложения, взаимодействующие с сетью Биткойн, включают в себя какие-то «нормальные значения по умолчанию». В случае с Bitcoin Core это проявляется в запрете транзакций с очень высокой комиссией, обеспечении отсутствия повторяющихся адресов в выходных данных, попытках использовать адреса для сдачи того же типа, что и адрес, на который вы отправляете монеты, в попытке сохранить конфиденциальность и так далее.

Во многих из этих случаев эти правила отличаются от фактического Биткойн-протокола. Например, хотя Bitcoin Core пытается предотвратить абсурдно высокие комиссии, были многочисленные случаи майнинга транзакций с очень высокими комиссиями (оплата нескольких BTC в качестве комиссий).

Точно так же, хотя протокол допускает несколько выходов на один адрес, Bitcoin Core пытается предотвратить это на уровне RPC, чтобы уменьшить количество ошибок пользователя, непреднамеренно стоящих им денег. Сам биткойн-протокол не имеет никаких правил против этого и позволит вам совершить такую ​​транзакцию и майнить ее без каких-либо жалоб.