主页 > imtoken转账手续费 > 比特币脚本指南(一)
比特币脚本指南(一)
比特币脚本简介
脚本是一种类似于 Forth、基于堆栈、逆波兰、图灵不完整的语言。一一解释:
图灵不完整
图灵不完备语言功能有限,无法跳转或循环,因此不会进入无限循环。图灵完备性意味着程序可以解决给定资源和内存的任何问题。 Solidity 语言是图灵完备的。
为什么比特币脚本图灵不完整?
因为没有必要。
比特币脚本不像以太坊智能合约那么复杂。该脚本是图灵完备的,相当于为恶意方打开了一扇自由之门,可以随意创建复杂的交易,其后果就是耗尽比特币网络的算力,拖慢整个网络。
反向抛光
reverse-Polish 表达式的语法指定表达式必须作为 reverse-Polish 表达式给出。逆波兰表达式也称为后缀表达式。
意思是:
•3+4 成长为 34+。
较长的算术如下所示:
•5*3+4 增长到 534+*。
基于堆栈操作
栈是一种非常流行的数据结构,可以理解为线性结构,一堆那个。数据只能在一端插入或删除,称为栈顶。
或者这样理解:最后一个进去比特币合约交易指南,第一个出去。
如图所示,三本书是按什么顺序放在桌子上的?
那么,把这三本书从桌子上拿下来,按什么顺序?
最后一个进去,第一个出去,对吧?
有两个堆栈操作要理解:
•Push:入栈的动作
•Flick:从堆栈中移除的动作,LIFO,不要忘记。
图片来源:维基媒体
第四课
这很简单。 Bitcoin Script 类似于 Forth,也恰好是基于堆栈的。
脚本被定义和解析。进入下面的比特币交易。
插曲,比特币交易原理请参考:
请来加密行业的老外李磊韩美美。
假设 Alice 想再次将比特币转移给 Bob。
与法币交易不同,当 Alice 想给 Bob 两美元时,她必须先从钱包里取出两张钞票,然后再给 Bob。
比特币并非如此,因为比特币不是硬币,也不是实体。爱丽丝有几个证明她持有比特币。
还有:
•矿工将交易打包进出块的过程是确认交易的过程。作为服务商,矿工可以收取一定的费用。
•在法定货币体系中,纸币的来源一般是不被追查的。比如现在打开钱包,里面有35元:一个10元,一个20、,三个1元,两个50分币,10个一分币。你还记得这些纸币和硬币是怎么来的吗?通常不会那么小心。但是比特币不一样,每一笔交易都有清晰的记录。
现在回到 Alice 和 Bob 的例子。事务有两个方面:输入和输出。
交易输入
如上所述,每个比特币都有一条可循的路径。然后 Alice 首先查看之前的交易,例如,如果她想买东西,她的口袋里至少要有足够的钱。
Alice 环顾四周,发现前三笔交易刚好够(或多于)转移 Bob。我们将这三个事务称为 TX(0)、TX(1)和 TX(2))。三个事务的总和称为 TX(输入)。
如果用图表来解释,会是这样的:
是加法。
交易输出
输出表示 Bob 收到的比特币数量。
上面说了,Alice收集的比特币可能会大于转给Bob的金额,多余的比特币会以找零的形式返还给Alice,留着以后用。
p>
使用图片如果你解释一下比特币合约交易指南,它会是这样的:
这是最简单的例子,只有一个输出和一个变化。请注意,许多事务可能有多个输出。
比特币交易就是这样一个过程。但是,要使交易成功,必须满足一些条件。
交易条件
•TX(输入)> TX(输出)。
这个很简单,首先,1元买不到5元。其次,这里还涉及交易费用。在任何交易中,输入输出(包括找零)的差额就是矿工收取的交易费用。
交易费用=TX(输入)-[TX(输出)+零钱]
•输入端:TX(0)+TX(1)+TX(2)=TX(输入)。如果Alice的资金不够,矿工直接拒绝处理交易。
•Alice 将使用 Bob 的公共地址锁定转账金额。如果 Bob 想要得到比特币,他必须使用他的私钥来解锁它。
•当然,Alice 还必须证明她是她自己并且她已经花费了它。具体来说,就是用自己的数字签名(私钥)对交易进行签名。其他人可以使用 Alice 的公钥来验证签名信息,这意味着可以确定该交易是 Alice 自己发出的。这个“签名数据”记住了“的概念,后面会用到。
那么,整个事务应该怎么调用呢?
输入(包括签名数据)、输出数据放在一起,然后通过SHA-256哈希算法计算出来的结果就是交易的名字。
在下一节中,我们将深入幕后,看看交易的真实情况。
待续
p>