成功没有捷径,只有一遍一遍的练习。——《明日之子》
比特币究竟是一场颠覆现有金融体系的伟大的互联网金融试验,还是一个由极客主导的庞氏骗局?
到底比特币是什么?难道我们能做的就是人云亦云?如何能有自己的独立判断?
让我们一起来读《精通比特币》,走向数字货币新旅程,这本书就能帮助您全面了解比特币,而且有助于理解其他数字货币。
正如书中前言所说:
无论你是正在构建下一个杀手级应用、投资创业,还是单纯对技术好奇,这本实用的书都是你不可或缺的阅读材料。
《精通比特币》这本书会让每位读者深刻理解比特币的工作原理,还会帮助读者为写出下一代神奇加密货币的应用程序做好充分准备。”
每天早上10:24发文,欢迎关注支持,一起加油!
《精通比特币》一书,英文原名为Mastering Bitcoin ,国内译做《精通比特币》。本书第五章中英文电子版链接如下,点击蓝色字可跳转阅读:
今天我们一起来读《精通比特币》一书的 第5章 交易5.6 比特币交易脚本和脚本语言——5.6.1 脚本创建(锁定与解锁)
5.6 比特币交易脚本和脚本语言
比特币客户端,通过执行一个用类Forth脚本语言编写的脚本,来验证比特币交易。
当一笔比特币交易被验证时,每一个输入值中的解锁脚本,都被与其对应的锁定脚本同时互不干扰地执行,从而查看这笔交易是否满足使用条件。
这一节内容,将会全面展示比特币交易脚本语言的各个组成部分;同时,也会演示如何使用它,去表达复杂的使用条件,以及解锁脚本如何去满足这些花费条件。
比特币交易验证,并不基于一个不变的模式,而是通过运行脚本语言来实现。这种语言,可以表达出无数个条件变种。
这也是比特币作为一种“可编程的货币”所拥有的权力。
5.6.1 脚本创建(锁定与解锁)
比特币的交易验证引擎,依赖于两类脚本来验证比特币交易:一个锁定脚本和一个解锁脚本。
锁定脚本,明确了今后花费这笔输出的条件。
由于锁定脚本往往含有一个公钥(即比特币地址),在大多数比特币应用源代码中,它被称作脚本公钥代码。
由于这种脚本技术存在着更为宽泛的可能性,在本书中,我们将它称为一个“锁定脚本”。
解锁脚本,是每一笔比特币交易输出的一部分,而且往往含有一个通过用户的私钥,被用户的比特币钱包生成的数字签名。
解锁脚本,常常包含一个数字签名,因此它在大多数比特币应用的源代码中,被称作ScriptSig。
考虑到更宽泛的锁定脚本要求,在本书中,称为“解锁脚本”。但,注意并非所有解锁脚本都一定会包含签名。
每一个比特币客户端,会通过同时执行锁定和解锁脚本,来验证一笔交易。
对于比特币交易中的每一个输入,验证软件都会先检索输入所指向的UTXO。这个UTXO,包含一个定义了花费条件的锁定脚本。
接下来,验证软件会读取这个UTXO的输入中,所包含的解锁脚本,并执行这两个脚本。
在早期的比特币客户端中,解锁和锁定脚本是以连锁的形式存在的,并且是被依次执行的。
出于安全因素考虑,在2010年比特币开发者们修改了这个特性——因为存在“允许异常解锁脚本推送数据入栈并且污染锁定脚本”的漏洞。
在当今的比特币世界中,这两个脚本是随着堆栈的传递被分别执行的,后续将会详细介绍。
UTXO是永久性地记录在区块链中的,因此它不会因为一笔新交易所发起的无效尝试,而产生变化或者受到影响。
只有一笔有效的、能准确满足UTXO条件的交易,才会导致UTXO被标记为“已使用”,然后从未使用的UTXO集中被移除。
每一个比特币客户端,都会通过同时执行锁定和解锁脚本来验证一笔交易。
验证的方法是:首先,使用堆栈执行引擎,来执行解锁脚本。如果解锁脚本在执行过程中未报错,则主堆栈将被复制,然后脚本将被执行。
如果采用解锁脚本数据,执行锁定脚本的结果为真,那么解锁脚本就成功地满足了锁定脚本设置的条件,因而,该输入是一个有效授权。
如果在执行完组合脚本后的结果不是真,那么输入就不是有效的,也就未能满足使用该笔资金的条件。
下图是最为常见类型的比特币交易的解锁和锁定脚本样本,该样本展示了在脚本验证之前,将解锁脚本和锁定脚本串联而成的组合脚本。
第五章全部内容思维导图如下:
《5.6.1 脚本创建(锁定与解锁)》内容到此结束,明天我们开始《5.6.2 脚本语言》的学习。
今天就到这里吧,明天我们继续,祝大家夏天快乐!
285/365
20180815首发简书
参考文献:
3、比特币白皮书原版:Bitcoin: A Peer-to-Peer Electronic Cash System
5、Scalers:《比特币白皮书解析 | 从零开始区块链》a
照搬的信念,无法抵御波动的冲击,只有行动铸就的思想体系,并在行进中不断修正,才能让我们不断变得更好。——Scalers《投资赚钱就是信念变现》
网友评论