Script

OP_PUSHBYTES 和 OP_PUSHDATA 之間有區別嗎

  • January 24, 2021

在一些關於 Script 的文件中,我們有時必須使用OP_PUSHBYTESxOP_PUSHDATAx指示某些字節數將是要讀取的元素。

他們似乎做同樣的事情,所以他們有不同的名字是有原因的嗎?

在什麼文件中?我相信您在談論如何rust-bitcoin指代 OP > OP_FALSE< OP_PUSHDATA1並且會這樣回答。

有多個 OP 程式碼將字節推入堆棧,定義為整數。

特殊情況:推小整數

有專用的 OP 程式碼用於將整數從-1to 16(named OP_1NEGATE, OP_0and OP_1 to OP_16and valued 0x4f, Ox00and 0x51to0x60 ) 推送。

例如,它們用於(小型)多重簽名,因為與使用“真實”推送操作碼相比,每個推送的數字可以為您節省 1 個字節。

" PUSHBYTES": 推送小字節數組

(在參考實現中未命名)OP 程式碼的值來自0x010x4b允許將 1 ( 0x01) 到 75 ( 0x4b) 個字節推送到堆棧

它們通常用於推送公鑰和簽名。

PUSHADATA: 推送字節數組

,( PUSHDATA1, )操作數PUSHDATA2``PUSHDATA4``0x4c``0x4d``0x4e用於將字節數組壓入堆棧,其大小定義為可變長度整數

進一步:編碼太多!

這種編碼的靈活性在 中引入了延展性scriptSig,它不受簽名(它攜帶)的保護。

BIP62建議限制這種編碼以避免可能的濫用。

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