38. ecdsa-подпись не подписывает реальное содержимое поля SigScript (просто потому, что она там находится — подпись не может подписать сама себя, не изменившись при этом). А вот хэш транзакции учитывает это поле. Соответственно, можно изменить/дополнить SigScript так, чтобы подписи остались корректны, хэш при этом изменится. При модификации получается другая транзакция, являющаяся конкурентом первой. Только одна из них будет включена в блок (какой первой повезёт). Если повезёт модифицированной, и при этом отправитель следит за транзакцией по txid, а не по неизменяющимся полям, то отправителя можно ввести в заблуждение, сказав, что перевода не было, и потребовав повторный. В самом же кошельке (bitcoin-qt) модифицированная транзакция просто перекроет начальную — у меня так было один раз при отправке.
39.
33.Не до конца при этом понятно, где хранится информация о номинале текущего входа. Она прямо в этой самой строке и зашифрована?
В выходе, на который ссылается данный вход. Как в моём примере:
Tx12: (Tx02/1:1BTC)+(Tx11/0:1.5BTC)+(Tx01/1:0.19BTC)→(A8:2.68BTC)
последний вход транзакции Tx12 ссылается на выход номер 0 транзакции Tx11 (т.е. именно этот выход он и тратит, целиком). Соответственно,
номинал данного входа закодирован в выходе 0 транзакции Tx11 (эти номиналы не могут отличаться, именно это и означает фраза «вход в точности соответствует выходу»).
Заметьте: входы транзакций Tx11 и Tx12 ссылаются на выходы предыдущих транзакций, и суммы во входах в точности соответствуют суммам в выходах. Собственно, в реальной транзакции суммы во входах не записываются, в данном примере я это сделал лишь для удобства восприятия.
Если вы имеете в виду, где номинал хранится в выходе — 8-байтное поле Value (целочисленное, в сатоши (сатошах
)).