Script
OP_PUSHBYTES 和 OP_PUSHDATA 之間有區別嗎
在一些關於 Script 的文件中,我們有時必須使用
OP_PUSHBYTESx
或OP_PUSHDATAx
指示某些字節數將是要讀取的元素。他們似乎做同樣的事情,所以他們有不同的名字是有原因的嗎?
在什麼文件中?我相信您在談論如何
rust-bitcoin
指代 OP> OP_FALSE
,< OP_PUSHDATA1
並且會這樣回答。有多個 OP 程式碼將字節推入堆棧,定義為整數。
特殊情況:推小整數
有專用的 OP 程式碼用於將整數從
-1
to16
(namedOP_1NEGATE
,OP_0
andOP_1
toOP_16
and valued0x4f
,Ox00
and0x51
to0x60
) 推送。例如,它們用於(小型)多重簽名,因為與使用“真實”推送操作碼相比,每個推送的數字可以為您節省 1 個字節。
"
PUSHBYTES
": 推送小字節數組(在參考實現中未命名)OP 程式碼的值來自
0x01
,0x4b
允許將 1 (0x01
) 到 75 (0x4b
) 個字節推送到堆棧。它們通常用於推送公鑰和簽名。
PUSHADATA
: 推送字節數組,和(
PUSHDATA1
, )操作數PUSHDATA2``PUSHDATA4``0x4c``0x4d``0x4e
用於將字節數組壓入堆棧,其大小定義為可變長度整數。進一步:編碼太多!
這種編碼的靈活性在 中引入了延展性
scriptSig
,它不受簽名(它攜帶)的保護。BIP62建議限制這種編碼以避免可能的濫用。