当前位置:首页 > 经典书库 > 正文

附录1 交易脚本的操作符、常量和符号

来源: 互联网时间:2020-05-13 15:55:47

表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代表当前未指定的操作码
标签: 精通比特币

免责声明:

1.本文内容综合整理自互联网,观点仅代表作者本人,不代表本站立场。

2.资讯内容不构成投资建议,投资者应独立决策并自行承担风险。

你可能感兴趣

    源站错误 | www.528btc.com

    如果您是网站管理员,点击查看如何修复

    502网关错误,连接源站失败

    DuEdge Event ID: c55f3dc1d74d3394
    你的IP: 121.40.136.53

    您的浏览器 工作正常

    CDN节点 工作正常

    源站 网关错误