他们说,靠音乐的力量,造一个桃源。我说,让我们靠文字的力量,造一个桃源。
比特币,究竟是一场颠覆现有金融体系的伟大互联网金融试验?还是一个由极客主导的庞氏骗局?比特币到底是什么?我们能做的是人云亦云还是有自己的独立判断?
一起来读《精通比特币》,全面了解比特币的工作原理,从而理解其他数字货币,走向数字货币新旅程。
每天早上10:24发文,欢迎关注支持,一起加油!
《精通比特币》一书,英文原名为Mastering Bitcoin ,本书中英文电子版链接如下,点击蓝色字可跳转阅读:
今天我们一起来读《精通比特币》一书的第5章交易第6节的2 、3、4小节
5.6 比特币交易脚本和脚本语言
比特币客户端,通过执行一个用类Forth脚本语言编写的脚本,来验证比特币交易。当一笔比特币交易被验证时,每一个输入值中的解锁脚本,都被与其对应的锁定脚本,同时互不干扰地执行,从而查看这笔交易是否满足使用条件。
简单的说比特币世界里的钱,是一串数字签名链条。
我们把这一串数字签名链条,叫做一个数字货币。
数字货币,也就是这一串数字签名链条,可以理解为一个巨大的活页账本。
第一页写的是『中本聪的钱』;第二页写的是『中本聪把钱给张3啦』和中本聪的亲笔签名;第三页写的是『张3把钱给李4啦』和『张3』的签名……
每次交易,在这个活页账本上再加上一页,让这个钱的上一个主人,写上把钱给了谁,以及附加上自己的签名,这样就使得数字货币得以流转起来。并且,这期间活页账本上再加上一页,每一步变化都由比特币网络中的所有人,做了记录和见证,因而无法造假,或者因为造假成本太大,比如黑掉全网51%的账本,才能改变之前的账本,而变成事实上的无法造假。
比特币交易验证,并不基于一个不变的模式,而是通过运行脚本语言来实现。这种语言,可以表达出无数个条件变种。这也是比特币作为一种“可编程的货币”所拥有的权力。
昨天我们学习了5.6.1 脚本创建,了解了锁定与解锁脚本,今天我们继续学习第六节余下内容。
5.6.2 脚本语言
比特币脚本语言使用的数据结构,被称为栈。栈,可以被理解为一堆卡片。
栈,允许两类操作:入栈和出栈。
入栈,是在栈顶部增加一个项目,出栈,则是从栈顶部移除一个项目。
我们来看一个脚本的简单例子,用来验证2+3是否等于5:
2 3 OP_ADD 5 OP_EQUAL
OP_ADD,是算术加法操作符。
它从堆栈移除最顶部的两个数2和3,将二者相加,并将相加之和,再推送到堆栈。
OP_EQUAL,用来验算两数之和,是否等于5。
二者相等,则推送真,用数字1表示;二者不等,则推送为假,用数字0表示。
上面这个简单算术运算,是一个有效的锁定脚本,这一行代码简单模拟了锁定交易输出的比特币代码。
在比特币交易中,也同样处理,如果堆栈顶部的结果显示为真(标记为{0×01}),则交易有效。如果堆栈顶部的结果,显示为假(0字节空值,标记为{}),或脚本执行被操作符禁止,则交易无效。
5.6.3 图灵非完备性
比特币脚本语言包含许多操作,但都故意限定为一种重要的方式——没有循环,或者复杂流控制功能以外的其他条件的流控制。从而保证了脚本语言的复杂性有限,交易可执行的次数也可预见,这就是我们常说的图灵非完备性。
脚本并不是一种通用语言,它是一个受限制的语言。
施加的这些限制,就能防止交易激活机制,被人当作薄弱环节而加以利用。确保该语言不被用于创造无限循环或其它类型的逻辑炸弹,这样的炸弹可以植入在一笔交易中,通过引起拒绝服务的方式攻击比特币网络。
5.6.4 非主权验证
比特币交易脚本语言,是无国家主权的。
也就是,没有国家能凌驾于脚本之上,需要执行脚本的所有信息,都已包含在脚本之中。
一个脚本,能在任何系统上以相同的方式执行。
如果某个系统对一个脚本进行验证,可以确信的是,每一个比特币网络中的其他系统,也将对其进行验证,这意味着一个有效的交易对每个人而言都是有效的,而且每一个人都明白这一点。这种对于结果的可预见性,是比特币系统的一项重要良性特征。
第五章全部内容思维导图如下:
第五章第六节全部内容到此结束,明天我们开始《5.7 标准交易》的学习。
今天就到这里吧,明天我们继续,祝大家夏天快乐!
286/365
20180816首发简书
参考文献:
1、 知笔墨《精通比特币》中文
2、比特币白皮书英文原版:Bitcoin: A Peer-to-Peer Electronic Cash System
4、《15分钟彻底读懂中本聪比特币白皮书》作者:任鑫Mars
5、Scalers:《比特币白皮书解析 | 从零开始区块链》
照搬的信念,无法抵御波动的冲击,只有行动铸就的思想体系,并在行进中不断修正,才能让我们不断变得更好。——Scalers《投资赚钱就是信念变现》
网友评论