什麼 OP_CODE 會推送 254 字節的數據?
從BIP62 開始,我希望使用
OP_PUSHDATA1
後跟 uint8_t:推送 76 到 255 字節必須使用 OP_PUSHDATA1。
但是從這個答案來看,到可變長度整數的連結使得 253 (0xfd) 的值似乎應該由 0xFD 編碼,後跟長度為 uint16_t。
EDIT-1:這是我試圖解析的虛擬事務。
在這裡,我有一個 252 字節 scriptSig 的 tx(所有
1
s)。我必須fc
對其長度進行編碼並解析:0200000001517adf7ba2ab9fd2c514687b0774c93d87d3e959d202b66fed76782d832a94f800000000fc111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111ffffffff0280d1f008000000001976a9143bc28d6d92d9073fb5e3adf481795eaf446bceed88ac80f0fa02000000001976a914cc1b07838e387deacd0e5232e1e8b49f4c29e48488ac00000000
然後我嘗試在 scriptSig (
2222
) 的開頭添加兩個字節,使其長度為 254 個字節,並將長度替換為fc
(4cfe
)OP_PUSHDATA1
fe
,但它不再解析:
0200000001517adf7ba2ab9fd2c514687b0774c93d87d3e959d202b66fed76782d832a94f8000000004cfe2222111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111ffffffff0280d1f008000000001976a9143bc28d6d92d9073fb5e3adf481795eaf446bceed88ac80f0fa02000000001976a914cc1b07838e387deacd0e5232e1e8b49f4c29e48488ac00000000
EDIT-2:答案是對 scriptSig 長度的編碼是 varint 而不是 push OP_CODE。因此,解析它的正確方法是將 sigScript 長度設置為
0xfd
0xfe
0x00
:
0200000001517adf7ba2ab9fd2c514687b0774c93d87d3e959d202b66fed76782d832a94f800000000fdfe002222111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111ffffffff0280d1f008000000001976a9143bc28d6d92d9073fb5e3adf481795eaf446bceed88ac80f0fa02000000001976a914cc1b07838e387deacd0e5232e1e8b49f4c29e48488ac00000000
比特幣腳本操作碼和 P2P 可變長度整數是不同的概念。
要在比特幣腳本中推送 254 字節的元素,請使用
OP_PUSHDATA1 0xfe
(後跟要推送的 254 字節)。例如,要對具有 254 個輸入的事務進行編碼
0xfd 0xfe 0x00
,將使用其 varint 編碼。