В качестве небольшого проекта по обучению/хобби я пишу небольшую программу на C++ для извлечения списка транзакций из blockchain.info и отображения его визуально.
Я надеялся, что смогу перебирать блоки, принимая каждый TX, а затем извлекать в массив список транзакций. т.е. блок/идентификатор транзакции/адрес_отправки/количество/адрес_получения и т. д.
Я подключился к blockchain.info и могу перебирать каждый блок с помощью jsoncpp. Но если я посмотрю на такой пример:
https://blockchain.info/block-height/100001?format=json
... и, в частности, такие транзакции: https://blockchain.info/rawtx/8131ffb0a2c945ecaf9b9063e59558784f9c3a74741ce6ae2a18d0571dac15bb
Всегда ли сумма входов будет соответствовать сумме выходов? Как мне жениться, какой вход отправил какую сумму на каждый выход, когда в каждом больше 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 евро.
Рагхав Суд