比特幣學習筆記————附錄1 交易指令碼的操作符、常量和符號
表A-1列出了將指令碼壓入堆疊的操作符。
表A-1 入棧操作
關鍵字 | 值(十六進位制) | 描述 |
---|---|---|
OP_0 or OP_FALSE | 0x00 | 一個位元組空串被壓入堆疊中 |
1-75 | 0x01-0x4b | 把接下來的N個位元組壓入堆疊中,N 的取值在 1 到 75 之間 |
OP_PUSHDATA1 | 0x4c | 下一個指令碼位元組包括N,會將接下來的N個位元組壓入堆疊 |
OP_PUSHDATA2 | 0x4d | 下兩個指令碼位元組包括N,會將接下來的N個位元組壓入堆疊 |
OP_PUSHDATA4 | 0x4e | 下四個指令碼位元組包括N,會將接下來的N個位元組壓入堆疊 |
OP_1NEGATE | 0x4f | 將指令碼-1壓入堆疊 |
OP_RESERVED | 0x50 | 終止 - 交易無效(除非在未執行的 OP_IF 語句中) |
OP_1 or OP_TRUE | 0x51 | 將指令碼1壓入堆疊 |
OP_2 to OP_16 | 0x52 | 將指令碼N壓入堆疊,例如 OP_2 壓入指令碼“2” |
表A-2列出了有條件的流量控制的操作符。
表A-2 有條件的流量控制操作
關鍵字 | 值(十六進位制) | 描述 |
---|---|---|
OP_NOP | 0x61 | 無操作 |
OP_VER | 0x62 | 終止 - 交易無效(除非在未執行的 OP_IF 語句中) |
OP_I | 0x63 | 如果棧項元素值為0,語句將被執行 |
OP_NOTIF | 0x64 | 如果棧項元素值不為0,語句將被執行 |
OP_VERIF | 0x65 | 終止 - 交易無效 |
OP_VERNOTIF | 0x66 | 終止 - 交易無效 |
OP_ELSE | 0x67 | 如果前述的OP_IF或OP_NOTIF或OP_ELSE未被執行,這些語句就會被執行 |
OP_ENDIF | 0x68 | 終止 OP_IF, OP_NOTIF, OP_ELSE 區塊 |
OP_VERIFY | 0x69 | 如果棧項元素值非真,則標記交易無效 |
OP_RETURN | 0x6a | 標記交易無效 |
表A-3列出了控制堆疊的操作符。
表A-3 堆疊操作
關鍵字 | 值(十六進位制) | 描述 |
---|---|---|
OP_TOALTSTACK | 0x6b | 從主堆疊中取出元素,推入輔堆疊。 |
OP_FROMALTSTACK | 0x6c | 從輔堆疊中取出元素,推入主堆疊 |
OP_2DROP | 0x6d | 刪除棧頂兩個元素 |
OP_2DUP | 0x6e | 複製棧頂兩個元素 |
OP_3DUP | 0x6f | 複製棧頂三個元素 |
OP_2OVER | 0x70 | 把棧底的第三、第四個元素拷貝到棧頂 |
OP_2ROT | 0x71 | 移動第五、第六元素到棧頂 |
OP_2SWAP | 0x72 | 如果棧項元素值不為0,複製該元素值 |
OP_IFDUP | 0x73 | 如果棧項元素值不為0,複製該元素值 |
OP_DEPTH | 0x74 | 把堆疊元素的個數壓入堆疊 |
OP_DROP | 0x75 | 刪除棧頂元素 |
OP_DUP | 0x76 | 複製棧頂元素 |
OP_NIP | 0x77 | 刪除棧頂的下一個元素 |
OP_OVER | 0x78 | 複製棧頂的下一個元素到棧頂 |
OP_PICK | 0x79 | 把堆疊的第n個元素拷貝到棧頂 |
OP_ROLL | 0x7a | 把堆疊的第n個元素移動到棧頂 |
OP_ROT | 0x7b | 翻轉棧頂的三個元素 |
OP_SWAP | 0x7c | 棧頂的三個元素交換 |
OP_TUCK | 0x7d | 拷貝棧頂元素並插入到棧頂第二個元素之後 |
表A-4列出了字串操作符。
表A-4 字串接操作
關鍵字 | 值(十六進位制) | 描述 |
---|---|---|
OP_CAT | 0x7e | 連線兩個字串,已禁用 |
OP_SUBSTR | 0x7f | 返回字串的一部分,已禁用 |
OP_LEFT | 0x80 | 在一個字串中保留左邊指定長度的子串,已禁用 |
OP_RIGHT | 0x81 | 在一個字串中保留右邊指定長度的子串,已禁用 |
OP_SIZE | 0x82 | 把棧頂元素的字串長度壓入堆疊 |
表A-5列出了二進位制算術和布林邏輯運算子演示。
表A-5 二進位制算術和條件
關鍵字 | 值(十六進位制) | 描述 |
---|---|---|
OP_INVERT | 0x83 | 所有輸入的位取反,已禁用 |
OP_AND | 0x84 | 對輸入的所有位進行布林與運算,已禁用 |
OP_OR | 0x85 | 對輸入的每一位進行布林或運算,已禁用 |
OP_XOR | 0x86 | 對輸入的每一位進行布林異或運算,已禁用 |
OP_EQUAL | 0x87 | 如果輸入的兩個數相等,返回1,否則返回0 |
OP_EQUALVERIFY | 0x88 | 與OP_EQUAL一樣,如結果為0,之後執行OP_VERIFY |
OP_RESERVED1 | 0x89 | 終止 - 無效交易(除非在未執行的OP_IF語句中) |
OP_RESERVED2 | 0x8a | 終止-無效交易(除非在未執行的OP_IF語句中) |
表A-6列出了數值(演算法)操作符。
表A-6 數值操作
關鍵字 | 值(十六進位制) | 描述 |
---|---|---|
OP_1ADD | 0x8b | 輸入值加1 |
OP_1SUB | 0x8c | 輸入值減1 |
OP_2MUL | 0x8d | 無效(輸入值乘2) |
OP_2DIV | 0x8e | 無效 (輸入值除2) |
OP_NEGATE | 0x8f | 輸入值符號取反 |
OP_ABS | 0x90 | 輸入值符號取正 |
OP_NOT | 0x91 | 如果輸入值為0或1,則輸出1或0;否則輸出0 |
OP_0NOTEQUAL | 0x92 | 輸入值為0輸出0;否則輸出1 |
OP_ADD | 0x93 | 輸出輸入兩項之和 |
OP_SUB | 0x94 | 輸出輸入(第二項減去第一項)之差 |
OP_MUL | 0x95 | 禁用(輸出輸入兩項的積) |
OP_DIV | 0x96 | 禁用(輸出用第二項除以第一項的倍數) |
OP_MOD | 0x97 | 禁用(輸出用第二項除以第一項得到的餘數) |
OP_LSHIFT | 0x98 | 禁用(左移第二項,移動位數為第一項的位元組數) |
OP_RSHIFT | 0x99 | 禁用(右移第二項,移動位數為第一項的位元組數) |
OP_BOOLAND | 0x9a | 兩項都不會為0,輸出1,否則輸出0 |
OP_BOOLOR | 0x9b | 兩項有一個不為0,輸出1,否則輸出0 |
OP_NUMEQUAL | 0x9c | 兩項相等則輸出1,否則輸出為0 |
OP_NUMEQUALVERIFY | 0x9d | 和 NUMEQUAL 相同,如結果為0執行OP_VERIFY |
OP_NUMNOTEQUAL | 0x9e | 如果棧頂兩項不是相等數的話,則輸出1 |
OP_LESSTHAN | 0x9f | 如果第二項小於棧頂項,則輸出1 |
OP_GREATERTHAN | 0xa0 | 如果第二項大於棧頂項,則輸出1 |
OP_LESSTHANOREQUAL | 0xa1 | 如果第二項小於或等於第一項,則輸出1 |
OP_GREATERTHANOREQUAL | 0xa2 | 如果第二項大於或等於第一項,則輸出1 |
OP_MIN | 1:26 | 輸出棧頂兩項中較小的一項 |
OP_MAX | 1:27 | 輸出棧頂兩項中較大的一項 |
OP_WITHIN | 1:28 | 如果第三項的數值介於前兩項之間,則輸出1 |
表A-7列出了加密函式操作符。
表A-7 加密和雜湊操作
關鍵字 | 值(十六進位制) | 描述 |
---|---|---|
OP_RIPEMD160 | 0xa6 | 返回棧頂項的 RIPEMD160 雜湊值 |
OP_SHA1 | 0xa7 | 返回棧頂項 SHA1 雜湊值 |
OP_SHA256 | 0xa8 | 返回棧頂項 SHA256 雜湊值 |
OP_HASH160 | 0xa9 | 棧頂項進行兩次HASH,先用SHA-256,再用RIPEMD-160 |
OP_HASH256 | 0xaa | 棧頂項用SHA-256演算法HASH兩次 |
OP_CODESEPARATOR | 0xab | 標記已進行簽名驗證的資料 |
OP_CHECKSIG | 0xac | 交易所用的簽名必須是雜湊值和公鑰的有效簽名,如果為真,則返回1 |
OP_CHECKSIGVERIFY | 0xad | 與CHECKSIG一樣,但之後執行OP_VERIFY |
OP_VERIFY | 0xae | 對於每對簽名和公鑰執行CHECKSIG。所有的簽名要與公鑰匹配。因為存在BUG,一個未使用的外部值會從堆疊中刪除。 |
OP_CHECKMULTISIGVERIFY | 0xaf | 與 CHECKMULTISIG 一樣,但之後執行OP_VERIFY |
表A-8列出了非操作符。
表A-8 非操作
關鍵字 | 值(十六進位制) | 描述 |
---|---|---|
OP_NOP1-OP_NOP10 | 0xb0-0xb9 | 無操作 忽略 |
表A-9保留關鍵字,僅供內部指令碼除錯。
表A-9 僅供內部使用的保留關鍵字
關鍵字 | 值(十六進位制) | 描述 |
---|---|---|
OP_SMALLDATA | 0xf9 | 代表小資料域 |
OP_SMALLINTEGER | 0xfa | 代表小整數資料域 |
OP_PUBKEYS | 0xfb | 代表公鑰域 |
OP_PUBKEYHASH | 0xfd | 代表公鑰雜湊域 |
OP_PUBKEY | 0xfe | 代表公鑰域 |
OP_INVALIDOPCODE | 0xff | 代表當前未指定的操作碼 |
相關文章
- 比特幣學習筆記————附錄7、染色幣比特幣筆記
- 比特幣學習筆記——————5、 交易比特幣筆記
- 比特幣學習筆記————附錄2 比特幣改進協議比特幣筆記協議
- 比特幣學習筆記————附錄6、比特幣瀏覽器命令比特幣筆記瀏覽器
- 比特幣學習筆記——————1、比特幣簡介比特幣筆記
- 比特幣學習筆記————附錄3 pycoin庫、實用金鑰程式ku和交易程式tx比特幣筆記
- RxJava 學習筆記 -- 條件操作符和布林操作符RxJava筆記
- 比特幣學習筆記————附錄5、隔離見證比特幣筆記
- 比特幣學習筆記——————2、比特幣原理比特幣筆記
- 比特幣學習筆記————10、比特幣安全比特幣筆記
- Rxjs TakeUntil 操作符的學習筆記JS筆記
- 比特幣學習筆記——————6、比特幣網路比特幣筆記
- RxJava2操作符學習筆記RxJava筆記
- RxJava 學習筆記 -- 變換操作符RxJava筆記
- RxJava 學習筆記 -- 過濾操作符RxJava筆記
- 比特幣學習筆記——————3、比特幣客戶端比特幣筆記客戶端
- 比特幣學習筆記————附錄4、比特幣白皮書:一種 點對點的電子現金系統比特幣筆記
- shell指令碼學習筆記-1指令碼筆記
- TensorFlow常量、變數和佔位符詳解(學習筆記)變數筆記
- RxJava2.X 學習筆記 -- 建立操作符RxJava筆記
- 比特幣學習筆記——————7、區塊鏈比特幣筆記區塊鏈
- 操作符offset 和 jmp指令
- 學習筆記:勒讓德(Legendre)符號筆記符號
- 比特幣學習筆記——————9、競爭幣、競爭塊鏈和應用程式比特幣筆記
- 比特幣學習筆記——————4、金鑰、地址、錢包比特幣筆記
- 比特幣學習筆記——————8、挖礦與共識比特幣筆記
- 比特幣指令碼語言比特幣指令碼
- JPG學習筆記1(附完整程式碼)筆記
- 學習筆記 - 知識圖譜的符號表示方法筆記符號
- MATLAB符號數學筆記(一)Matlab符號筆記
- PHP 手冊 (類與物件) 學習筆記八:範圍解析操作符 ( :: )PHP物件筆記
- JavaScript (,)逗號操作符JavaScript
- 變數與常量 - Go 學習記錄變數Go
- Solidity語言學習筆記————4、常量Solid筆記
- [go 學習筆記] 二、變數、常量Go筆記變數
- QT學習筆記1(安裝、建立和訊號與槽)QT筆記
- Angularjs學習筆記指令AngularJS筆記
- Vue 學習筆記——指令Vue筆記