Как бы я закодировал биткойн-транзакцию

Форма Биткойн Вики — Транзакции Я вижу, что транзакция имеет следующий формат.

Input:
Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6
Index: 0
scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10
90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501

Output:
Value: 5000000000
scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d
OP_EQUALVERIFY OP_CHECKSIG

Ввод в этой транзакции импортирует 50 BTC из вывода #0 в транзакции f5d8... Затем вывод отправляет 50 BTC на биткойн-адрес (выраженный здесь в шестнадцатеричном формате 4043... вместо обычного base58). Когда получатель захочет потратить эти деньги, он будет ссылаться на выход #0 этой транзакции во входе своей собственной транзакции.

Я предполагаю, что могу использовать BlockExplorer, чтобы найти Previous txи Index.

  1. Как бы я сгенерировал scriptSig? Это что-то, что можно сделать в командной строке, например openssl.

  2. Это OP_DUP OP_HASH160буквально помещено в текст транзакции или это псевдоним?

  3. В 40437...scriptPubkey, как мне это создать?

Хм, я также ищу руководство о том, как это сделать, и не могу найти никаких ресурсов.
bitcoin.stackexchange.com/questions/3374/… Включает довольно полное описание того, какие данные из транзакции подписываются и как это сделать.

Ответы (1)

  1. Технически ScriptSig зависит от конкретного типа вывода транзакции, который вы пытаетесь получить, но для всех стандартных скриптов он состоит из подписи этой транзакции и (обычно) открытого ключа, соответствующего закрытому ключу, которым была сделана подпись. . Открытый ключ должен быть правильным, чтобы заявить о выводе транзакции, который утверждает этот вывод, то есть тот, на который были отправлены монеты.

  2. Биткойн-скрипты используют коды операций. Они описаны в вики .

  3. Это биткойн-адрес, который может претендовать на этот вывод (в необработанной двоичной форме), при условии, что транзакция является переводом на биткойн-адрес .

Дэвид, если я правильно вас понял, эта транзакция включает ScriptSig, который включает в себя подпись этой транзакции. Как это может работать? Я не могу подписать транзакцию, пока она не будет завершена, а транзакция не будет завершена, пока она не будет содержать собственную подпись. Есть ли точное описание того, что именно где-то подписывается?
@ChrisMoore У вас нет другого выбора, кроме как разместить подписи после их создания, поэтому при создании транзакции не возникает проблем. Когда вы проверяете подпись транзакции, вы сначала удаляете подписи.
Это имеет смысл. Какова процедура: создать транзакцию без подписей, хешировать частично завершенную транзакцию, подписать этот хэш каждым из закрытых ключей, необходимых для расходования входных данных, и вставить эти подписи в частичную транзакцию? Я не понимаю, что именно подписывается. Включает ли сигнатура каждого входа все входы или только те входные данные, для которых в данный момент написан ScriptSig?
Подпись состоит из хэша всей транзакции, при этом все подписи удалены.
Я пытался читать источник, и там похоже, что открытые ключи удалены из SigScripts, а также подписи. В комментарии говорится: «Скрыть подписи других входов», но код говорит: «txTmp.vin[i].scriptSig = CScript();». Я думаю, что комментарий немного неправильный.