附录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 代表当前未指定的操作码

==目录==

简介
前言
第1章 介绍
第2章 比特币的原理
第3章 比特币客户端
第4章 密钥、地址、钱包
第4章 高级密钥和地址
第5章 买卖
第6章 比特币网络
第7章 区块链
第8章 挖矿与一致
第8章 区块链分叉、矿池、一致攻击
第9章 竞赛币、竞赛块链和应用程序
第10章 比特币安全

附录1 买卖脚本的操作符、常量和符号
附录2 比特币改进协议
附录3 pycoin库、ku程序和tx买卖程序
附录4 sx工具下一些的命令

本文原链接:http://zhibimo.com/read/wang-miao/Mastering-Bitcoin/Appendix1.html

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注