美文网首页Nervos Fans
比特币脚本指南(一)

比特币脚本指南(一)

作者: 526ba0512193 | 来源:发表于2018-07-06 16:23 被阅读4次

比特币脚本简介

脚本是一种类Forth、基于栈操作、逆波兰式、图灵不完整语言。 挨个解释下:

图灵不完备

图灵不完备语言的功能有限,无法跳跃或循环,因此不会进入无限循环。图灵完备,意味着给定资源及内存,程序能解决任何问题。Solidity语言就是图灵完备的。

为什么比特币脚本是图灵不完备的?

因为没必要。

比特币脚本不用像以太坊智能合约那么复杂。脚本图灵完备,相当于为恶意方开启随意创建复杂交易的自由门,后果就是耗尽比特币网络算力从而拖慢整个网络。

逆波兰式

逆波兰表达式的语法规定,表达式必须以逆波兰表达式的方式给出。 逆波兰表达式又叫做后缀表达式。

意思是:

• 3+4 长成34+。

长一点的算术长这样:

• 5*3+4 长成 534+*。

基于栈操作

堆栈是种很流行的数据结构,可以理解成是线性结构,一堆那种。 只能在一端插入或删除数据,这个端叫栈顶。

或者这么理解:最后一个进,第一个出。

如图,三本书什么顺序被放桌上的?

那么,把这三本书从桌上拿开,什么顺序?

最后一个进,第一个出对吧。

有两种堆栈操作了解下:

• 推:添加至堆栈的动作

• 弹:从堆栈移除的动作,后进先出,别忘了。

Image Credit: Wikimedia  

类Forth

这个简单明了。 比特币脚本类似Forth语言,然后Forth语言碰巧也是基于堆栈操作的。

脚本定义及解析完毕。下面挪入比特币交易。

插播一句,有关比特币交易原理,可参看一下:

How Do Bitcoin Transactions Actually Work? - Blockgeeks​blockgeeks.com

有请加密界的外国李雷韩梅梅。

说Alice又想给Bob转比特币了。

与法币交易不同,Alice想给Bob两块钱的时候,首先得从钱包了掏出两块纸币,然后给Bob。

比特币不是这样的,因为比特币不是币,不是实体。Alice有的是自己持有比特币的若干证明。

还有:

• 矿工把交易打包进挖出区块的过程,就是确认交易的过程。作为服务方,矿工可以收取一定费用。

• 法币体系中,一般不会追踪纸币来源。好比,现在打开钱包,里边有35块钱:有一张10块、一张20、三张1块、两个5毛硬币、10个一毛硬币。 能记住这些纸币硬币都怎么来的么? 一般不会注意的这么仔细。 但是,比特币不一样了,每笔交易都记录的清清楚楚。

现在回到Alice、Bob的例子。 交易有两方面:输入、输出。

交易输入

上面说过,每个比特币都有迹可循。那么Alice首先要看一圈之前的交易,好比想买东西,口袋里钱至少得够吧。

Alice看了一圈,发现之前的三笔交易凑一块,正好(或大于)够给Bob转账,我们把这三笔交易叫TX(0)、TX(1)和TX(2)。 三笔交易之和,叫TX(输入)。

用图解释的话,长这样:

就是加法其实。

交易输出

输出意思就是Bob内边收到的比特币数量。

上面说了,Alice凑出来的比特币有可能大于要转给Bob的金额,那么多出来的比特币,会以找零的形式返回给Alice,留着以后花。

用图解释的话,长这样:

这是个最简单的例子了,只有一个输出和一个找零。要知道,很多交易可能有多个输出的。

比特币交易就这么个流程。 但是,为交易成功,必须满足一些条件。

交易条件

• TX(输入)> TX(输出)。

这个简单了,首先,1块钱买不了5块的东西。 其次,这里边还涉及交易费。任何交易中,输入和输出(含找零)之间的差额是矿工收取的交易费。

交易费 = TX(输入) - 【TX(输出)+ 找零】

• 输入侧:TX(0)+ TX(1)+ TX(2)= TX(输入)。若Alice的资金不够,矿工直接拒绝处理交易。

• Alice会用Bob的公共地址锁住转账金额。Bob想拿到比特币的话,就得用自己的私钥进行解锁操作。

•当然了, Alice还要证明下自己是自己,花的也是自己的钱。 具体来说,就是要用自己的数字签名(私钥)签署交易。 其他人可以用Alice的公钥验证签名信息,意思是说能判断出签发交易的是Alice本人。 这个“签名数据”的概念记住了,后面还要用的。

那么,整个交易该怎么称呼?

输入(包括签名数据)、输出数据被放在一起,然后用SHA-256哈希算法计算出的结果,就是此交易的名称。

下节,我们到幕后看看交易真实的样子。

未完待续

The Best Step-by-Step Bitcoin Script Guide: Part One (Blockgeeks)​blockgeeks.com

相关文章

网友评论

    本文标题:比特币脚本指南(一)

    本文链接:https://www.haomeiwen.com/subject/qibpuftx.html