script 總結(jié)
廢話不多說砸民,直接上干貨,每一個(gè)腳本的中文翻譯,可以當(dāng)個(gè)詞典查閱:
關(guān)鍵字 |
操作碼 |
十六進(jìn)制 |
輸入 |
輸出 |
描述 |
OP_0,OP_FALSE |
0 |
0×00 |
無 |
空 |
一個(gè)字節(jié)空串被推到堆棧中(并非no-op操作崇众,有一個(gè)元素壓入堆棧) |
N/A |
1-75 |
0×01-0x4b |
(特殊) |
數(shù)據(jù) |
下一個(gè)操作碼字節(jié)是要被壓入堆棧的數(shù)據(jù) |
OP_PUSHDATA1 |
76 |
0x4c |
(特殊) |
數(shù)據(jù) |
下一字節(jié)是要被壓入堆棧的數(shù)據(jù)的長(zhǎng)度 |
OP_PUSHDATA2 |
77 |
0x4d |
(特殊) |
數(shù)據(jù) |
下兩個(gè)字節(jié)是要被壓入堆棧的數(shù)據(jù)的長(zhǎng)度 |
OP_PUSHDATA4 |
78 |
0x4e |
(特殊) |
數(shù)據(jù) |
下四個(gè)字節(jié)是要被壓入堆棧的數(shù)據(jù)的長(zhǎng)度 |
OP_1NEGATE |
79 |
0x4f |
無 |
-1 |
數(shù)字-1被壓入堆棧 |
OP_1,OP_TRUE |
81 |
0×51 |
無 |
1 |
數(shù)字1被壓入堆棧 |
OP_2-OP_16 |
82-96 |
0×52-0×60 |
無 |
2-16 |
與關(guān)鍵名相對(duì)應(yīng)的數(shù)字被壓入堆棧 |
關(guān)鍵字 |
操作碼 |
十六進(jìn)制 |
輸入 |
輸出 |
描述 |
OP_NOP |
97 |
0×61 |
無 |
無 |
無任何操作 |
OP_IF |
99 |
0×63 |
<expression> if [statements] [else [statements]]* endif |
|
如果棧項(xiàng)元素值不為0掂僵,語句將被執(zhí)行,棧項(xiàng)元素值被刪除顷歌。 |
OP_NOTIF |
100 |
0×64 |
<expression> if [statements] [else [statements]]* endif |
|
如果棧項(xiàng)元素值為0锰蓬,語句將被執(zhí)行,棧項(xiàng)元素值被刪除眯漩。 |
OP_ELSE |
103 |
0×67 |
<expression> if [statements] [else [statements]]* endif |
|
如果前述的OP_IF或 OP_NOTIF或OP_ELSE 未被執(zhí)行芹扭,這些語句就會(huì)被執(zhí)行;如果前述的OP_IF或 OP_NOTIF或OP_ELSE被執(zhí)行赦抖,這些語句就不會(huì)被執(zhí)行 |
OP_ENDIF |
104 |
0×68 |
<expression> if [statements] [else [statements]]* endif |
|
結(jié)束if/else語言塊 |
OP_VERIFY |
105 |
0×69 |
True / false |
無 / False |
如果棧項(xiàng)元素值非真舱卡,則標(biāo)記交易無效。True會(huì)被刪除队萤,F(xiàn)alse不會(huì)被刪除轮锥。 |
OP_RETURN |
106 |
0x6a |
無 |
無 |
標(biāo)記交易無效 |
關(guān)鍵字 |
操作碼 |
十六進(jìn)制 |
輸入 |
輸出 |
描述 |
OP_TOALTSTACK |
107 |
0x6b |
x1 |
(alt)x1 |
把輸入壓入輔堆棧的項(xiàng)部,從主堆棧刪除要尔。 |
OP_FROMALTSTACK |
108 |
0x6c |
(alt)x1 |
x1 |
把輸入壓入主堆棧的項(xiàng)部舍杜,從輔堆棧刪除。 |
OP_IFDUP |
115 |
0×73 |
x |
x / x x |
如果棧項(xiàng)元素值不為0赵辕,復(fù)制該元素值 |
OP_DEPTH |
116 |
0×74 |
無 |
<堆棧大小> |
把堆棧元素個(gè)數(shù)壓入堆棧 |
OP_DROP |
117 |
0×75 |
x |
無 |
刪除棧頂元素 |
OP_DUP |
118 |
0×76 |
x |
x x |
復(fù)制棧頂元素 |
OP_NIP |
119 |
0×77 |
x1 |
x2 x2 |
刪除棧頂?shù)南乱粋€(gè)元素 |
OP_OVER |
120 |
0×78 |
x1 x2 |
x1 x2 x1 |
復(fù)制棧頂?shù)南乱粋€(gè)元素到棧頂 |
OP_PICK |
121 |
0×79 |
xn … x2 x1 x0 <n> |
xn … x2 x1 x0 xn |
把堆棧的第n個(gè)元素拷貝到棧頂 |
OP_ROLL |
122 |
0x7a |
xn … x2 x1 x0 <n> |
… x2 x1 x0 xn |
把堆棧的第n個(gè)元素移動(dòng)到棧頂 |
OP_ROT |
123 |
0x7b |
x1 x2 x3 |
x2 x3 x1 |
棧頂?shù)娜齻€(gè)元素向左翻轉(zhuǎn) |
OP_SWAP |
124 |
0x7c |
x1 x2 |
x2 x1 |
棧頂?shù)膬蓚€(gè)元素交換 |
OP_TUCK |
125 |
0x7d |
x1 x2 |
x2 x1 x2 |
把棧頂元素拷貝并插入到棧頂下一個(gè)元素之后既绩。注意:原文為“插入到棧頂下一個(gè)元素之前”,可能有誤还惠,翻譯時(shí)改為“之后” |
OP_2DROP |
109 |
0x6d |
x1 x2 |
無 |
刪除棧頂兩個(gè)元素 |
OP_2DUP |
110 |
0x6e |
x1 x2 |
x1 x2 x1 x2 |
復(fù)制棧頂兩個(gè)元素 |
OP_3DUP |
111 |
0x6f |
x1 x2 x3 |
x1 x2 x3 x1 x2 x3 |
復(fù)制棧頂三個(gè)元素 |
OP_2OVER |
112 |
0×70 |
x1 x2 x3 x4 |
x1 x2 x3 x4 x1 x2 |
把棧底的兩個(gè)元素拷貝到棧頂 |
OP_2ROT |
113 |
0×71 |
x1 x2 x3 x4 x5 x6 |
x3 x4 x5 x6 x1 x2 |
以一對(duì)元素為單位饲握,向左翻轉(zhuǎn)。注意:原文大意“把第五和第六元素移動(dòng)到棧頂”吸重,明顯有誤 |
OP_2SWAP |
114 |
0×72 |
x1 x2 x3 x4 |
x3 x4 x1 x2 |
以一對(duì)元素為單位互拾,交換棧頂?shù)膬蓪?duì)元素的位置。 |
如果標(biāo)記為已禁用的操作碼出現(xiàn)在交易中嚎幸,必須終止和失敗返回颜矿。
關(guān)鍵字 |
操作碼 |
十六進(jìn)制 |
輸入 |
輸出 |
描述 |
OP_CAT |
126 |
0x7e |
x1 x2 |
out |
連接兩個(gè)字符串,已禁用 |
OP_SUBSTR |
127 |
0x7f |
in begin size |
out |
返回字符串的一部分嫉晶,已禁用 |
OP_LEFT |
128 |
0×80 |
in size |
out |
在一個(gè)字符串中保留左邊指定長(zhǎng)度的子串骑疆,已禁用 |
OP_RIGHT |
129 |
0×81 |
in size |
out |
在一個(gè)字符串中保留右邊指定長(zhǎng)度的子串,已禁用 |
OP_SIZE |
130 |
0×82 |
in |
in size |
把棧頂元素的字符串長(zhǎng)度壓入堆棧(無需彈出元素) |
如果標(biāo)記為已禁用的操作碼出現(xiàn)在交易中替废,必須終止和失敗返回箍铭。
關(guān)鍵字 |
操作碼 |
十六進(jìn)制 |
輸入 |
輸出 |
描述 |
OP_INVERT |
131 |
0×83 |
in |
out |
所有輸入的位取反,已禁用. |
OP_AND |
132 |
0×84 |
x1 x2 |
out |
對(duì)輸入的所有位進(jìn)行布爾與運(yùn)算椎镣,已禁用 |
OP_OR |
133 |
0×85 |
x1 x2 |
out |
對(duì)輸入的每一位進(jìn)行布爾或運(yùn)算诈火,已禁用 |
OP_XOR |
134 |
0×86 |
x1 x2 |
out |
對(duì)輸入的每一位進(jìn)行布爾異或運(yùn)算,已禁用 |
OP_EQUAL |
135 |
0×87 |
x1 x2 |
True/false |
如果輸入的兩個(gè)數(shù)相等状答,返回1冷守,否則返回0刀崖。 |
OP_EQUALVERIFY |
136 |
0×88 |
x1 x2 |
True/false |
與OP_EQUAL一樣,之后運(yùn)行OP_VERIFY 拍摇。 |
注意:算術(shù)邏輯的輸入限于有符號(hào)32位長(zhǎng)整數(shù)亮钦,但輸出有可能會(huì)溢出。
如果任何命令的輸入值長(zhǎng)度超過4字節(jié)充活,腳本必須中止和失敗返回蜂莉。如果標(biāo)記為已禁用的操作碼出現(xiàn)在交易中,也必須終止和失敗返回
關(guān)鍵字 |
操作碼 |
十六進(jìn)制 |
輸入 |
輸出 |
描述 |
OP_1ADD |
139 |
0x8b |
in |
out |
輸入值加1 |
OP_1SUB |
140 |
0x8c |
in |
out |
輸入值減1 |
OP_2MUL |
141 |
0x8d |
in |
out |
輸入值乘2混卵,已禁用 |
OP_2DIV |
142 |
0x8e |
in |
out |
輸入值除2映穗,已禁用 |
OP_NEGATE |
143 |
0x8f |
in |
out |
輸入值符號(hào)取反 |
OP_ABS |
144 |
0×90 |
in |
out |
輸入值符號(hào)取正 |
OP_NOT |
145 |
0×91 |
in |
out |
如果輸入值為0或1,則輸出1或0幕随;否則輸出0男公。I |
OP_0NOTEQUAL |
146 |
0×92 |
in |
out |
輸入值為0輸出0;否則輸出1合陵。 |
OP_ADD |
147 |
0×93 |
a b |
out |
輸出a+b |
OP_SUB |
148 |
0×94 |
a b |
out |
輸出a-b |
OP_MUL |
149 |
0×95 |
a b |
out |
輸出a*b枢赔,已禁用 |
OP_DIV |
150 |
0×96 |
a b |
out |
輸出a/b, 已禁用 |
OP_MOD |
151 |
0×97 |
a b |
out |
輸出a/b的余數(shù),已禁用 |
OP_LSHIFT |
152 |
0×98 |
a b |
out |
把a(bǔ)向左移動(dòng)b位拥知,保留符號(hào)踏拜,已禁用 |
OP_RSHIFT |
153 |
0×99 |
a b |
out |
把a(bǔ)向右移動(dòng)b位,保留符號(hào)低剔,已禁用 |
OP_BOOLAND |
154 |
0x9a |
a b |
out |
如果a和b都不為0速梗,輸出1,否則輸出0 |
OP_BOOLOR |
155 |
0x9b |
a b |
out |
如果a或b不為0襟齿,輸出1姻锁,否則輸出0 |
OP_NUMEQUAL |
156 |
0x9c |
a b |
out |
如果a=b則輸出1,否則輸出0猜欺。 |
OP_NUMEQUALVERIFY |
157 |
0x9d |
a b |
out |
與OP_NUMEQUAL一樣位隶,之后要運(yùn)行OP_VERIFY |
OP_NUMNOTEQUAL |
158 |
0x9e |
a b |
out |
如果a!=b則輸出1,否則輸出0开皿。 |
OP_LESSTHAN |
159 |
0x9f |
a b |
out |
如果a<b則輸出1涧黄,否則輸出0。 |
OP_GREATERTHAN |
160 |
0xa0 |
a b |
out |
如果a>b則輸出1赋荆,否則輸出0笋妥。 |
OP_LESSTHANOREQUAL |
161 |
0xa1 |
a b |
out |
如果a<=b則輸出1,否則輸出0 |
OP_GREATERTHANOREQUAL |
162 |
0xa2 |
a b |
out |
如果a>=b則輸出1窄潭,否則輸出0 |
OP_MIN |
163 |
0xa3 |
a b |
out |
輸出a,b中的最小值 |
OP_MAX |
164 |
0xa4 |
a b |
out |
輸出a,b中的最大值 |
OP_WITHIN |
165 |
0xa5 |
x min max |
out |
如果x在min和max之間春宣,則輸出1,否則輸出 |
關(guān)鍵字 |
操作碼 |
十六進(jìn)制 |
輸入 |
輸出 |
描述 |
OP_RIPEMD160 |
166 |
0xa6 |
in |
hash |
輸入用RIPEMD-160算法HASH |
OP_SHA1 |
167 |
0xa7 |
in |
hash |
輸入用SHA-1算法HASH. |
OP_SHA256 |
168 |
0xa8 |
in |
hash |
輸入用SHA-256算法HASH. |
OP_HASH160 |
169 |
0xa9 |
in |
hash |
輸入被HASH兩次,先用 SHA-256月帝,再用 RIPEMD-160. |
OP_HASH256 |
170 |
0xaa |
in |
hash |
輸入用SHA-256算法HASH兩次. |
OP_CODESEPARATOR |
171 |
0xab |
無 |
無 |
所有簽名檢查只需匹配最近一次執(zhí)行的OP_CODESEPARATOR 操作數(shù)據(jù)的簽名即可材义。 |
OP_CHECKSIG |
172 |
0xac |
sig pubkey |
True / false |
全部交易的輸出、輸入和腳本(從最近執(zhí)行的OP_CODESEPARATOR操作到最)都被HASH嫁赏,OP_CHECKSIG使用的簽名必須是該HASH值和公鑰的有效簽名,如果是真則返回1油挥,否則返回0潦蝇。 |
OP_CHECKSIGVERIFY |
173 |
0xad |
sig pubkey |
True / false |
與OP_CHECKSIG一樣,但之后執(zhí)行 OP_VERIFY |
OP_CHECKMULTISIG |
174 |
0xae |
x sig1 sig2 … <number of signatures> pub1 pub2 <number of public keys> |
True / False |
對(duì)于每個(gè)簽名和公鑰對(duì)深寥,OP_CHECKSIG 都會(huì)被執(zhí)行攘乒,如果公鑰列得比簽名多,一些公鑰/簽名對(duì)會(huì)失敗惋鹅。所有的簽名要與公鑰匹配则酝。如果所有簽名有效,輸出1闰集,否則返回0沽讹。因?yàn)榇嬖贐UG,一個(gè)未使用的外部值會(huì)從堆棧中刪除武鲁。 |
OP_CHECKMULTISIGVERIFY |
175 |
0xaf |
x sig1 sig2 … <number of signatures> pub1 pub2 … <number of public keys> |
True / False |
與 OP_CHECKMULTISIG,一樣爽雄,但是之后運(yùn)行 OP_VERIFY。 |
這些關(guān)鍵字僅供內(nèi)部使用沐鼠,用輔助進(jìn)行交易匹配挚瘟,如果使用在實(shí)際的交易中則是無效的。
關(guān)鍵字 |
操作碼 |
十六進(jìn)制 |
描述 |
OP_PUBKEYHASH |
253 |
0xfd |
表示公鑰用OP_HASH160操作碼HASH |
OP_PUBKEY |
254 |
0xfe |
表示與OP_CHECKSIG.兼容的一個(gè)公鑰 |
OP_INVALIDOPCODE |
255 |
0xff |
匹配任何未指定的操作碼 |
關(guān)鍵字 |
操作碼 |
十六進(jìn)制 |
描述 |
OP_RESERVED |
80 |
0×50 |
交易無效饲梭,除非發(fā)生在未執(zhí)行的OP_IF 分支 |
OP_VER |
98 |
0×62 |
交易無效乘盖,除非發(fā)生在未執(zhí)行的OP_IF 分支 |
OP_VERIF |
101 |
0×65 |
交易無效,即使發(fā)生在未執(zhí)行的OP_IF 分支 |
OP_VERNOTIF |
102 |
0×66 |
交易無效憔涉,即使發(fā)生在未執(zhí)行的OP_IF 分支 |
OP_RESERVED1 |
137 |
0×89 |
交易無效订框,除非發(fā)生在未執(zhí)行的OP_IF 分支 |
OP_RESERVED2 |
138 |
0x8a |
交易無效,除非發(fā)生在未執(zhí)行的OP_IF 分支 |
OP_NOP1-OP_NOP10 |
176-185 |
0xb0-0xb9 |
這些關(guān)鍵字被忽略 |
本文由Copernicus 團(tuán)隊(duì) 冉小龍
總結(jié)兜叨,轉(zhuǎn)載無需授權(quán)布蔗。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者