`

Script(脚本)字段

 
阅读更多
1.常见关键字段
OP_0/OP_FALSE(0):一个字节空串被推到堆栈中
N/A(1-75):下一个操作码字节是要被压入堆栈的数据
OP_PUSHDATA1(76):下一个字节是要被压入堆栈的数据的长度
OP_PUSHDATA2(77):下两个字节是要被压入堆栈的数据的长度
OP_PUSHDATA4(78):下四个字节是要被压入堆栈的数据的长度
OP_1NEGATE(79):数字-1被压入堆栈
OP_1,OP_TRUE(81):数字1被压入堆栈
OP_2-OP_16(82-96):与关键名相对应的数字被压入堆栈

2.脚本的流程控制
OP_NOP(97):无任何操作
OP_IF(99):如果栈顶元素值不为0,则语句将被执行,栈顶元素值将被删除
OP_NOTIFY(100):如果栈顶元素值为0,则语句将被执行,栈顶元素值将被删除
OP_ELSE(103):如果OP_NOP,OP_IF,NO_NOTIFY执行则这些语句不执行,如果OP_NOP_OP_IF,OP_NOTIFY不执行,则这些语句执行
OP_ENDIF(104):结束if/else语言块
OP_VERIFY(105):如果栈顶元素值非真,则标记交易无效.true会被删除,false不会被删除
OP_RETURN(106):标记交易无效

3.脚本的堆栈处理
OP_TOALTSTACK(107):把输入辅堆栈的顶部,从主堆栈删除
OP_FROMALTSTACK(108):把输入压入主堆栈的顶部,从辅堆栈删除
OP_IFDUP(115):如果栈顶元素值不为0,则复制该元素值
OP_DEPTH(116):把堆栈元素个数压入堆栈
OP_DROP(117):删除栈顶元素
OP_DUP(118):复制栈顶元素
OP_NIP(119):删除栈顶的下一个元素
OP_OVER(120):复制栈顶的下一个元素到栈顶
OP_PICK(121):把堆栈的第n个元素复制到栈顶
OP_ROLL(122):把堆栈的第n个元素移动到栈顶
OP_ROT(123):栈顶的三个元素向左翻转
OP_SWAP(124):栈顶的两个元素交换
OP_TUCK(125):把栈顶元素复制并插入到栈顶下一个元素之前
OP_2DROP(109):删除栈顶两个元素
OP_2DUP(110):复制栈顶两个元素
OP_3DUP(111):复制栈顶三个元素
OP_2OVER(112):把栈底的两个元素复制到栈顶
OP_2ROT(113):把第五和第六个元素移动到栈顶
OP_2SWAP(114):以一对元素为单位,交换栈顶的两对元素的位置

4.字符串操作码
OP_CAT(126):连接两个字符串,已禁用
OP_SUBSTR(127):返回字符串的一部分,已禁用
OP_LEFT(128):在一个字符串中保留左边指定长度的子串,已禁用
OP_RIGHT(129):在一个字符串中保留右边指定长度的子串,已禁用
OP_SIZE(130):把栈顶元素的字符串长度压入堆栈(无需弹出元素)

5.位操作码
OP_INVERT(131):所有输入的位取反,已禁用
OP_AND(132):对输入的所有位进行布尔与运算,已禁用
OP_OR(133):对输入的每一位进行布尔或运算,已禁用
OP_XOR(134):对输入的每一位进行布尔异或运算,已禁用
OP_EQUAL(135):如果输入的两个数相等,则返回1,否则返回0
OP_EQUALVERIFY(136):与OP_EQUAL一样,之后运行OP_VERIFY

6.算术逻辑操作码
OP_1ADD(139):输入值加1
OP_1SUB(140):输入值减1
OP_2MUL(141):输入值乘2,已禁用
OP_2DIV(142):输入值除2,已禁用
OP_NEGATE(143):输入值符号取反
OP_ABS(144):输入值符号取正
OP_NOT(145):如果输入值为0或1,则输出1或0;否则输出0
OP_0NOTEQUAL(146):输入值为0输出0;否则输出1
OP_ADD(147):输出a+b
OP_SUB(148):输出a-b
OP_MUL(149):输出a*b,已禁用
OP_DIV(150):输出a/b,已禁用
OP_MOD(151):输出a/b的余数,已禁用
OP_LSHIFT(152):把a向左移动b位,保留符号,已禁用
OP_RSHIFT(153):把a向右移动b位,保留符号,已禁用
OP_BOOLAND(154):如果a和b都不为0,则输出1,否则输出0
OP_BOOLOR(155):如果a或b不为0,则输出1,否则输出0
OP_NUMEQUAL(156):如果a=b,则输出1,否则输出0
OP_NUMEQUALVERIFY(157):与OP_NUMEQUAL一样,之后要运行OP_VERIFY
OP_NUMNOTEQUAL(158):如果a!=b则输出1,否则输出0
OP_LESSTHAN(159):如果a<b则输出1,否则输出0
OP_GREATERTHAN(160):如果a>b则输出1,否则输出0
OP_LESSTHANOREQUAL(161):如果a<=b则输出1,否则输出0
OP_GREATERTHANOREQUAL(162):如果a>=b则输出1,否则输出0
OP_MIN(163):输出a,b中的最小值
OP_MAX(164):输出a,b中的最大值
OP_WITHIN(165):如果x在min和max之间,则输出1,否则输出0

7.脚本的加密码
OP_RIPEMD160(166):输入用RIPEMD-160算法散列
OP_SHA1(167):输入用SHA-1算法散列
OP_SHA256(168):输入用SHA-256算法散列
OP_HASH160(169):输入被散列两次,先用SHA-256,再用RIPEMD-160
OP_HASH256(170):输入用SHA-256算法散列两次
OP_CODESEPARATOR(171):所有签名检查只需要匹配最近一次执行的OP_CODESEPARTOR操作数据的签名即可
OP_CHECKSIG(172):全部交易的输出,输入和脚本都被散列,OP_CHECKSIG使用的签名必须是该HASH值和公钥的有效签名,如果是真则返回1,否则返回0
OP_CHECKSIGVERIFY(173):与OP_CHECKSIG一样,但之后执行OP_VERIFY
OP_CHECKMULTISIG(174):对于每个签名和公钥对,OP_CHECKSIG都会被执行,如果公钥数量比签名多,那么一些公钥/签名对会失败.所有的签名要与公钥匹配.如果所有签名都有效,则输出1,否则返回0.因为存在BUG,因此一个未使用的外部值会从堆栈中删除
OP_CHECKMULTISIGVERIFY(175):与OP_CHECKMULTISIG一样,但是之后运行OP_VERIFY

8.脚本中的伪关键字
OP_PUBKEYHASH(253):表示公钥用OP_HASH160操作码散列
OP_PUBKEY(254):表示与OP_CHECKSIG兼容的一个公钥
OP_INVALIDOPCODE(255):匹配任何未指定的操作码

9.保留关键字
OP_RESERVED(80):交易无效,除非发生在未执行的OP_IF分支
OP_VER(98):交易无效,除非发生在未执行的OP_IF分支
OP_VERIF(101):交易无效,除非发生在未执行的OP_IF分支
OP_VERNOTIFY(102):交易无效,除非发生在未执行的OP_IF分支
OP_RESERVED1(137):交易无效,除非发生在未执行的OP_IF分支
OP_RESERVED2(138):交易无效,除非发生在未执行的OP_IF分支
OP_NOP1-OP_NOP10(176-185):这些关键字被忽略





分享到:
评论

相关推荐

    Jira ScriptRunner脚本-根据子任务修改父任务自定义字段状态

    Jira ScriptRunner脚本-根据子任务修改父任务自定义字段状态

    sort-script:elasticsearch排序脚本

    在搜索请求中,你可以定义一个"script"字段,指定排序使用的脚本。脚本可以计算某个字段的值,或者涉及多个字段的运算。例如,假设我们有一个商品索引,希望根据商品的销售量和用户评价综合排序,可以编写一个脚本来...

    使用CANAPE脚本script周期性发送报文.zip

    在压缩包文件"使用CANAPE脚本script周期性发送报文"中,很可能包含了一个示例脚本或者教程文档,通过阅读和理解这些内容,你可以更好地掌握如何实际操作。请根据提供的资源,结合CANAPE用户手册,逐步实践每个步骤,...

    ArcGIS教程:脚本环境

    例如,在上面给出的示例脚本中,通过`env.workspace="e:/data/script.gdb"`这一行代码,我们可以看到当前工作空间被设置为一个新的路径,从而覆盖了传递下来的默认工作空间。这样做的好处是可以确保所有的数据操作都...

    PowerDesigner批量生成SQL脚本时将name生成数据库中字段的comment

    在本篇中,我们将探讨如何使用PowerDesigner批量生成SQL脚本来将name属性转换为数据库中字段的comment。 首先,我们需要了解PowerDesigner中的PDM(Physical Data Model),这是一个物理数据模型,它包含了数据库的...

    Linux+Script+CSV+awk+对比两个CSV文件中指定字段差异

    使用Bash Shell 脚本对比两个CSV文件中指定字段差异

    SAP脚本工具

    SAP脚本工具是一款专为SAP系统设计的高级开发工具,它提供了更直观、用户友好的界面,相比原生的SAP Script,使得开发者在编写和调试SAP脚本时能够更加高效和便捷。这款工具的核心优势在于其内置的Analyser模块,它...

    elasticsearch脚本实现先聚合后过滤

    在 Elasticsearch 中,可以使用脚本字段(Script Fields)来为每个文档动态生成一个字段值。这在预处理数据时非常有用,可以作为后续聚合和过滤的基础。 2. **管道聚合**(Pipeline Aggregations): 管道聚合是...

    基于java的面向对象的脚本语言 ObjectScript.zip

    ObjectScript是一种基于Java的面向对象的脚本语言,它的设计目标是提供一种高效、灵活且易于学习的语言,以便开发者能够快速构建和维护复杂的系统。它结合了Java的强大功能与脚本语言的便捷性,使得开发过程更为高效...

    Unity3D禁止脚本运行代码2

    在Unity中,每个游戏对象(GameObject)都可以包含多个组件,其中就包括脚本组件(Script Component)。这些脚本通常负责处理游戏逻辑、响应事件等。当我们说“禁止脚本运行”,实际上就是指停止脚本组件的Update()...

    定时导出Oracle数据库数据并上传到FTP目录脚本

    创建一个名为`ftp_script.txt`的FTP脚本文件,内容如下: ```ftp open %FTP_SERVER% user %FTP_USER% %FTP_PWD% cd %FTP_DIR% put %OUTPUT_FILE% bye ``` 这个FTP脚本连接到服务器,切换到指定目录,并上传刚刚...

    ado 帮助和Script5.6

    "JScript、VBScript、Windows 脚本宿主、Windows 脚本部件、远程脚本、Script 控制和脚本调试程序"这些是与脚本编程相关的技术,它们在ASP(Active Server Pages)中广泛使用,是Web开发中的重要组成部分。...

    ArcGIS字段计算器快速的提取多个坐落单位名称中的乡镇名称或村名

    在ArcGIS中,我们可以使用Python表达式或VBScript(Visual Basic Script)来完成这个任务,因为字段计算器支持这两种脚本语言。 以Python为例,假设坐落单位名称字段名为"LocationName",我们需要创建一个新的字段...

    为一个域用户设置登陆脚本

    2. **指定脚本名称**:在域用户的属性中指定登录脚本时,应当使用UNC路径(Universal Naming Convention)格式,即`\\server\path\to\script.bat`。这是因为登录脚本是在用户登录时从域控制器下载并执行的,所以必须...

    GuiXT commands-SAP脚本

    1. 打开 GuiXT,点击“Script”按钮打开屏幕脚本编辑器。 2. 使用“del”命令删除不必要的字段。 3. 使用“pos”命令重新排列屏幕元素。 GuiXT 命令的实例 例如,在 transaction MM03,Material Master,Basic ...

    PowerDesigner中自动生成sqlserver字段备注

    - **访问脚本编辑器**:选择菜单栏中的“工具(Tools)” &gt; “执行命令(Execute Commands)” &gt; “编辑/运行脚本(Edit/Run Script)”,打开PowerDesigner的脚本编辑窗口。 - **编写脚本**:在编辑窗口中,输入...

    MAXScript的初步知识

    1. **对话框创建**:通过MAXScript可以创建自定义的对话框,如按钮和输入字段,这在交互式用户界面设计中非常有用。例如,一个简单的按钮可以被编程来显示消息框,实现与用户的互动。 2. **脚本执行**:MAXScript...

    MYSQL数据库加载脚本方法

    确保脚本中的SQL语法正确,数据库名、表名以及字段名的拼写无误。 6. **性能优化** - 对于大型脚本,可能需要考虑批量插入数据以提高性能,避免频繁的磁盘I/O操作。还可以使用`BEGIN`和`COMMIT`语句开启和提交一个...

Global site tag (gtag.js) - Google Analytics