其实我们可以这样看待比特币的交易:『交易的发起者悬赏若干比特币,在网络上贴出了一到数学题,谁解出了这道数学题,悬赏就归谁了』。
顺着这个思路,Alice对Bob的转账可以理解为『Alice把一道只有Bob才能解开的数学题发到网络上,Bob解出题并拿走了悬赏』。那么,每个交易数据中都会出现的『脚本』就是题和解,『脚本语言』就是用来描述题和解的工具。
『输入脚本』和『输出脚本』
在这里我们先讨论单输入单输出的比特币交易,因为这样描述起来更方便且不影响对『脚本』的理解。
这是一个单输入单输出交易,看下我们要关注的数据:
前导输入的Hash:
输入脚本 scriptSig:
转账值:
0.05010000 btc
输出脚本 scriptPubKey:
假设Alice是转账发送者,Bob是接受者。那么『输入交易』表明了Alice要动用的比特币的来源,『输出交易』表明了Alice要转账的数额和转账对象——Bob。那么,你可能要问,数据中的『输入脚本』和『输出脚本』是不是就是题和解?对了一半!
比特币脚本是一个功能比较少的编程语言,满足比特币系统的正常运行需求,同时**化保证了安全性。
比特币脚本是图令不完备的。所谓图灵不完备意思就是缺少当代语言所必须的一些功能,例如循环。但是,功能的有限也**化的减小了系统的受攻击面积,例如,可以防止有人利用无线循环来给系统安一个**。
比特币脚本是一种基于栈的语言。可以把栈想象成堆叠到一起的几本书,push 操作相当于添加一本书,pop
操作相当于抽出一本书。每次执行的都是最顶部的操作,每个操作都对应一个操作码,简称 opcode 。
总之,比特币脚本是一个图灵不完备的基于栈的语言。
免责声明: 文章源于会员发布,不作为任何投资建议,如有侵权请联系我们删除!
文章标题:比特币的脚本是做什么的?
文章链接:https://www.btchangqing.cn/446055.html
更新时间:2023年01月22日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。