Raw-Transaction
當相應的scriptsig長於256字節時如何花費一個utxo?
我正在嘗試將 utxo 發送到 p2sh 地址。scriptsig(包括兌換腳本)超過 256 個字節。當交易被序列化時,只有一個字節來指示腳本的大小。我應該怎麼做?提前謝謝。
尺寸編碼為緊湊尺寸。這些最長可達 9 個字節,編碼的大小為 0 到 18446744073709551615 字節之間的任何值。
規則是(根據
serialize.h
):/** * Compact Size * size < 253 -- 1 byte * size <= USHRT_MAX -- 3 bytes (253 + 2 bytes) * size <= UINT_MAX -- 5 bytes (254 + 4 bytes) * size > UINT_MAX -- 9 bytes (255 + 8 bytes) */ inline unsigned int GetSizeOfCompactSize(uint64_t nSize) { if (nSize < 253) return sizeof(unsigned char); else if (nSize <= std::numeric_limits<unsigned short>::max()) return sizeof(unsigned char) + sizeof(unsigned short); else if (nSize <= std::numeric_limits<unsigned int>::max()) return sizeof(unsigned char) + sizeof(unsigned int); else return sizeof(unsigned char) + sizeof(uint64_t); }
這基本上意味著,對於任何長度
L
以字節為單位的數據,如果
L < 253
,編碼就是值本身。0x00
和之間的任何東西0xFC
。對於更大的尺寸,我們在編碼前加上一個字節
0xFD
,0xFE
或者0xFF
取決於編碼它需要多少字節。大小253
,254
和255
是一個例外(很容易理解為什麼。它們的字節用於編碼本身)並被視為兩字節大小。大小字節本身以小端編碼。如果
253 <= L < 65535
,編碼首先是 byte0xFD
,然後是構成實際大小的兩個字節。您的特定值256
在此範圍內,並將被編碼為:
FD0001
FD
因為它在第二個範圍內,並且0001
是0100
.其餘範圍的行為相同,它們的範圍顯示在程式碼片段中。