比特幣學習筆記————附錄1 交易指令碼的操作符、常量和符號

FLy_鵬程萬里發表於2018-06-13

表A-1列出了將指令碼壓入堆疊的操作符。

表A-1 入棧操作

關鍵字值(十六進位制)描述
OP_0 or OP_FALSE0x00一個位元組空串被壓入堆疊中
1-750x01-0x4b把接下來的N個位元組壓入堆疊中,N 的取值在 1 到 75 之間
OP_PUSHDATA10x4c下一個指令碼位元組包括N,會將接下來的N個位元組壓入堆疊
OP_PUSHDATA20x4d下兩個指令碼位元組包括N,會將接下來的N個位元組壓入堆疊
OP_PUSHDATA40x4e下四個指令碼位元組包括N,會將接下來的N個位元組壓入堆疊
OP_1NEGATE0x4f將指令碼-1壓入堆疊
OP_RESERVED0x50終止 - 交易無效(除非在未執行的 OP_IF 語句中)
OP_1 or OP_TRUE0x51將指令碼1壓入堆疊
OP_2 to OP_160x52將指令碼N壓入堆疊,例如 OP_2 壓入指令碼“2”

表A-2列出了有條件的流量控制的操作符。

表A-2 有條件的流量控制操作

關鍵字值(十六進位制)描述
OP_NOP0x61無操作
OP_VER0x62終止 - 交易無效(除非在未執行的 OP_IF 語句中)
OP_I0x63如果棧項元素值為0,語句將被執行
OP_NOTIF0x64如果棧項元素值不為0,語句將被執行
OP_VERIF0x65終止 - 交易無效
OP_VERNOTIF0x66終止 - 交易無效
OP_ELSE0x67如果前述的OP_IF或OP_NOTIF或OP_ELSE未被執行,這些語句就會被執行
OP_ENDIF0x68終止 OP_IF, OP_NOTIF, OP_ELSE 區塊
OP_VERIFY0x69如果棧項元素值非真,則標記交易無效
OP_RETURN0x6a標記交易無效

表A-3列出了控制堆疊的操作符。

表A-3 堆疊操作

關鍵字值(十六進位制)描述
OP_TOALTSTACK0x6b從主堆疊中取出元素,推入輔堆疊。
OP_FROMALTSTACK0x6c從輔堆疊中取出元素,推入主堆疊
OP_2DROP0x6d刪除棧頂兩個元素
OP_2DUP0x6e複製棧頂兩個元素
OP_3DUP0x6f複製棧頂三個元素
OP_2OVER0x70把棧底的第三、第四個元素拷貝到棧頂
OP_2ROT0x71移動第五、第六元素到棧頂
OP_2SWAP0x72如果棧項元素值不為0,複製該元素值
OP_IFDUP0x73如果棧項元素值不為0,複製該元素值
OP_DEPTH0x74把堆疊元素的個數壓入堆疊
OP_DROP0x75刪除棧頂元素
OP_DUP0x76複製棧頂元素
OP_NIP0x77刪除棧頂的下一個元素
OP_OVER0x78複製棧頂的下一個元素到棧頂
OP_PICK0x79把堆疊的第n個元素拷貝到棧頂
OP_ROLL0x7a把堆疊的第n個元素移動到棧頂
OP_ROT0x7b翻轉棧頂的三個元素
OP_SWAP0x7c棧頂的三個元素交換
OP_TUCK0x7d拷貝棧頂元素並插入到棧頂第二個元素之後

表A-4列出了字串操作符。

表A-4 字串接操作

關鍵字值(十六進位制)描述
OP_CAT0x7e連線兩個字串,已禁用
OP_SUBSTR0x7f返回字串的一部分,已禁用
OP_LEFT0x80在一個字串中保留左邊指定長度的子串,已禁用
OP_RIGHT0x81在一個字串中保留右邊指定長度的子串,已禁用
OP_SIZE0x82把棧頂元素的字串長度壓入堆疊

表A-5列出了二進位制算術和布林邏輯運算子演示。

表A-5 二進位制算術和條件

關鍵字值(十六進位制)描述
OP_INVERT0x83所有輸入的位取反,已禁用
OP_AND0x84對輸入的所有位進行布林與運算,已禁用
OP_OR0x85對輸入的每一位進行布林或運算,已禁用
OP_XOR0x86對輸入的每一位進行布林異或運算,已禁用
OP_EQUAL0x87如果輸入的兩個數相等,返回1,否則返回0
OP_EQUALVERIFY0x88與OP_EQUAL一樣,如結果為0,之後執行OP_VERIFY
OP_RESERVED10x89終止 - 無效交易(除非在未執行的OP_IF語句中)
OP_RESERVED20x8a終止-無效交易(除非在未執行的OP_IF語句中)

表A-6列出了數值(演算法)操作符。

表A-6 數值操作

關鍵字值(十六進位制)描述
OP_1ADD0x8b輸入值加1
OP_1SUB0x8c輸入值減1
OP_2MUL0x8d無效(輸入值乘2)
OP_2DIV0x8e無效 (輸入值除2)
OP_NEGATE0x8f輸入值符號取反
OP_ABS0x90輸入值符號取正
OP_NOT0x91如果輸入值為0或1,則輸出1或0;否則輸出0
OP_0NOTEQUAL0x92輸入值為0輸出0;否則輸出1
OP_ADD0x93輸出輸入兩項之和
OP_SUB0x94輸出輸入(第二項減去第一項)之差
OP_MUL0x95禁用(輸出輸入兩項的積)
OP_DIV0x96禁用(輸出用第二項除以第一項的倍數)
OP_MOD0x97禁用(輸出用第二項除以第一項得到的餘數)
OP_LSHIFT0x98禁用(左移第二項,移動位數為第一項的位元組數)
OP_RSHIFT0x99禁用(右移第二項,移動位數為第一項的位元組數)
OP_BOOLAND0x9a兩項都不會為0,輸出1,否則輸出0
OP_BOOLOR0x9b兩項有一個不為0,輸出1,否則輸出0
OP_NUMEQUAL0x9c兩項相等則輸出1,否則輸出為0
OP_NUMEQUALVERIFY0x9d和 NUMEQUAL 相同,如結果為0執行OP_VERIFY
OP_NUMNOTEQUAL0x9e如果棧頂兩項不是相等數的話,則輸出1
OP_LESSTHAN0x9f如果第二項小於棧頂項,則輸出1
OP_GREATERTHAN0xa0如果第二項大於棧頂項,則輸出1
OP_LESSTHANOREQUAL0xa1如果第二項小於或等於第一項,則輸出1
OP_GREATERTHANOREQUAL0xa2如果第二項大於或等於第一項,則輸出1
OP_MIN1:26輸出棧頂兩項中較小的一項
OP_MAX1:27輸出棧頂兩項中較大的一項
OP_WITHIN1:28如果第三項的數值介於前兩項之間,則輸出1

表A-7列出了加密函式操作符。

表A-7 加密和雜湊操作

關鍵字值(十六進位制)描述
OP_RIPEMD1600xa6返回棧頂項的 RIPEMD160 雜湊值
OP_SHA10xa7返回棧頂項 SHA1 雜湊值
OP_SHA2560xa8返回棧頂項 SHA256 雜湊值
OP_HASH1600xa9棧頂項進行兩次HASH,先用SHA-256,再用RIPEMD-160
OP_HASH2560xaa棧頂項用SHA-256演算法HASH兩次
OP_CODESEPARATOR0xab標記已進行簽名驗證的資料
OP_CHECKSIG0xac交易所用的簽名必須是雜湊值和公鑰的有效簽名,如果為真,則返回1
OP_CHECKSIGVERIFY0xad與CHECKSIG一樣,但之後執行OP_VERIFY
OP_VERIFY0xae對於每對簽名和公鑰執行CHECKSIG。所有的簽名要與公鑰匹配。因為存在BUG,一個未使用的外部值會從堆疊中刪除。
OP_CHECKMULTISIGVERIFY0xaf與 CHECKMULTISIG 一樣,但之後執行OP_VERIFY

表A-8列出了非操作符。

表A-8 非操作

關鍵字值(十六進位制)描述
OP_NOP1-OP_NOP100xb0-0xb9無操作 忽略

表A-9保留關鍵字,僅供內部指令碼除錯。

表A-9 僅供內部使用的保留關鍵字

關鍵字值(十六進位制)描述
OP_SMALLDATA0xf9代表小資料域
OP_SMALLINTEGER0xfa代表小整數資料域
OP_PUBKEYS0xfb代表公鑰域
OP_PUBKEYHASH0xfd代表公鑰雜湊域
OP_PUBKEY0xfe代表公鑰域
OP_INVALIDOPCODE0xff代表當前未指定的操作碼

相關文章