Массив отдельных транзакций из blockchain.info

В качестве небольшого проекта по обучению/хобби я пишу небольшую программу на C++ для извлечения списка транзакций из blockchain.info и отображения его визуально.

Я надеялся, что смогу перебирать блоки, принимая каждый TX, а затем извлекать в массив список транзакций. т.е. блок/идентификатор транзакции/адрес_отправки/количество/адрес_получения и т. д.

Я подключился к blockchain.info и могу перебирать каждый блок с помощью jsoncpp. Но если я посмотрю на такой пример:

https://blockchain.info/block-height/100001?format=json

... и, в частности, такие транзакции: https://blockchain.info/rawtx/8131ffb0a2c945ecaf9b9063e59558784f9c3a74741ce6ae2a18d0571dac15bb

Всегда ли сумма входов будет соответствовать сумме выходов? Как мне жениться, какой вход отправил какую сумму на каждый выход, когда в каждом больше 1?

Большое спасибо.

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

Ответы (1)

приятно - но я обещаю, что это не будет "маленький" проект :-)

Всегда ли сумма входов будет соответствовать сумме выходов?

нет! Существует общее правило, что какой бы ни была разница, это будет комиссией майнера. Точнее, майнер может брать их в качестве вознаграждения. Так что это причина, по которой вы всегда должны иметь «обратные» адреса в своих транзакциях.

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

Идея биткойн-транзакций заключается в том, что они связаны не напрямую с адресами, а с предыдущими транзакциями. И они не "делимые", а скорее "дополнительные". Пытаюсь объяснить: средства переводятся с предыдущей транзакции на новое место. Программное обеспечение вашего кошелька может легко обрабатывать несколько адресов. Если вы отправляете из своего кошелька на новую цель, кошельку, возможно, придется принять 2, 3 или 4 предыдущих транзакция, чтобы отправить на новый адрес, потому что средств на один транзакцию недостаточно для общей суммы. В этом смысле вы (ваш код C++) можете только «сопоставлять» входные данные с выходными (с производными адресами). Многие огромные транзакции имеют сотни входов и/или выходов — представьте сборщики или биржи: они создают 1 транзакцию со многими выплатами разным владельцам/пользователям (например,https://blockchain.info/de/tx/2062a2717ca2f77c6935ff685d33086aa5db2f554ecd4d5232432cf9cb6a4006 ).

На вашем примере видно, что потребовалось 5 входов, чтобы потратить 250 BTC на 15xif4SjXiFi3NDEsmMZCfTdE9jvvVQrjU и 1 млн сатоши на 1NkKLMgbSjXrT7oHagnGmYFhXAWXjJsKCj. Это почти все, что вы можете сказать о том, что произошло в этом TX. Аналогия от Андреаса (и его книги «Освоение биткойнов», которую можно читать онлайн, настоятельно рекомендуется) — это деньги FIAT. У вас в кошельке могут быть купюры в 10, 20 и 50 евро, но вы не знаете, от кого. Теперь вы хотите заплатить 35 евро. Таким образом, вы даете 50 и получаете, может быть, 3 раза по 5 евро в качестве сдачи. Вы еще не знаете, от кого они пришли, а только количество. Эти «три раза по 5 евро» можно было бы затем использовать в качестве 3 входных данных для новой транзакции на 15 евро.

(1) Не дополнительная транзакция, а дополнительный выход из той же транзакции. (2) Да. (3) Да, когда выход указан как вход другой транзакции, этот выход помечается как израсходованный, и любая дальнейшая транзакция, в которой он указан как вход, будет считаться недействительной. Таким образом, эти выходные данные отображаются как «израсходованные», потому что была другая транзакция, показывающая их как входные данные. В приведенном вами примере вывод 0 этой транзакции был потрачен как ввод 4 транзакции 2b62b3c433bda7a845466e4ec100cad9347f8c039bcc6d78d56f52d8ecb7671e.