Script

什麼 OP_CODE 會推送 254 字節的數據?

  • August 18, 2022

BIP62 開始,我希望使用OP_PUSHDATA1後跟 uint8_t:

推送 76 到 255 字節必須使用 OP_PUSHDATA1。

但是從這個答案來看,到可變長度整數的連結使得 253 (0xfd) 的值似乎應該由 0xFD 編碼,後跟長度為 uint16_t。

EDIT-1:這是我試圖解析的虛擬事務。

在這裡,我有一個 252 字節 scriptSig 的 tx(所有1s)。我必須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 編碼。

引用自:https://bitcoin.stackexchange.com/questions/114953