在本文中,我们探索区块链技术背后的历史。从20世纪80年代的拜占庭将军问题到今天复杂的智慧契约,区块链是如何一步一步走到今天的?
区块链基金会
区块链是随着比特币等数字加密货币的日益普及而逐渐兴起的一种全新技术。它提供了一种无信任积累的去中心化信用建设范式,受到了金融行业、科研机构、政府部门、投资公司的高度关注和广泛关注。
区块链技术通过建立一个共同维护、不可篡改的数据库,记录所有过去的交易记录和历史数据。所有数据都是公开透明地分发和存储的。在这种技术下,任何互不认识的网络用户都可以通过契约、点对点记账、数字加密等方式达成信用共识。没有任何中央信托组织。通过这项技术,我们可以建立数字货币、数字资产、智能财产和智能合同。
通过上一章的介绍,相信你对区块链和比特币有了初步的了解。在这一章中,我们将继续探索区块链的技术细节。
本章将首先介绍区块链的基本概念和操作原理,然后介绍可以在区块链上进行的操作和相关细节,最后讨论区块链上的交易流程及其验证过程。
区块链技术
区块链本质上是一个点对点的分布式账本数据库。比特币的底层采用了区块链的技术架构。
区块链本身实际上是一系列链接的数据块,其链接指针是用密码哈希算法处理块头生成的块头哈希值。每个数据块记录一组由哈希算法组成的树状交易状态信息,保证每个块中的交易数据不可篡改,区块链中链接的块也不可篡改。
1.基本概念
一个完整的区块链系统包含了很多技术,包括用于存储数据的数据块,其上的数字签名和时间戳,支持P2P网络和维护系统的共识算法,挖掘和工作量证明机制,匿名交易机制和比特币钱包,以及链龄、UTXO、Merkle树和花双等相关技术概念。
正是这些技术使得区块链在无中心网络上形成了一个运行的引擎,为区块链的交易、验证、链接等功能提供源源不断的动力。
2.数据块
比特币的交易记录会存储在数据块中,比特币系统中大约每10分钟就会生成一个块。每个数据块通常包含两个部分:头部和主体。
块头封装了当前版本号(Version)、前一个块地址(Prev-block)、时间戳(Timestamp)、随机数(Nonce)、当前块的目标哈希值(Bits)、Merkle树的根值(Merkle-root)和其他信息。
块主要包含交易计数和交易明细。交易明细是比特币系统中的记账本。每一笔交易都会永久记录在数据块中,任何人都可以查询。
区块中的Merkle tree会对每一笔交易进行数字签名,可以保证每一笔交易都无法伪造,没有重复交易。所有的事务都会通过Merkle树的哈希过程生成一个唯一的Merkle根值,并记录在块头中。Merkle树将在本章后面详细描述。
如果你使用的是比特币核心钱包,那么无论何时打开客户端,块数据文件都会同步到你电脑的硬盘上,你可以在blocks文件夹下找到它们。
我们也可以使用hexdump命令在终端上以十六进制显示数据块。我们可以通过分析这些数据得到交易记录、区块大小等基本信息,所以我们说区块链的数据是完全公开透明的。我们用指令hexdump -n 10000 -C blk00000.dat打开了编号为00000(比特币第一个区块链)的创造块。
3.挖掘和分歧问题
这种石块是在开采过程中产生的。所谓挖掘,其实就是穷举随机数算法。最后一个块的哈希值加上10分钟内的所有交易订单打包,然后加上一个随机数,计算出一个256位的字符串哈希值。输入随机数Nonce使hash值满足一定条件获得本块的交易记账权。
生成的块需要快速广播,以便其他节点可以验证它以防止欺诈。每个块存储前一个块的哈希值,可以追溯到源。只有通过验证,才能最终获得该区块的交易记账权。比特币系统将允许矿工争夺记账权(主链中链接区块的权利)。这种竞争机制就是工作量证明机制。
挖矿需要大量的精力和时间,谁付出的劳动多,谁就能以更大的概率获得一块的记账权。获得簿记权的矿工会将当前块链接到前一个块,形成最新的块主链。矿工还将获得系统奖励的一定数量的比特币(2009年至2013年每10分钟产生50个比特币,2014年至今每10分钟产生的比特币将减半至25个)。所有的积木都连接在一起,形成了区块链的主链。从创建块到当前块,区块链以上的所有数据历史都可以跟踪和查询。
需要注意的是,不同地区的两个矿工可能会同时“挖出”两个新块来链接,然后主链上就会出现“分叉”。系统不会立即确认哪个区块不合理,但会同意后续矿工将始终选择累积工作量最大的区块链。因此,在主链分支后,后续区块中的矿工会将其区块链接到通过计算和比较证明其当前累积工作量最大化的备选链,形成更长的新主链,并自动放弃分支处的短链,从而解决分叉问题。
4.时间戳和不可篡改性
时间戳是指从1970年1月1日格林尼治时间00: 00: 00(北京时间1970年1月1日08: 00: 00)到现在的总秒数。它通常是一个字符序列,唯一地标识某一时刻的时间。在比特币系统中,拥有记账权限的节点在链接块时需要在块头加盖一个时间戳,用来记录当前块数据的写入时间。
每个后续块中的时间戳将增强前一个时间戳,形成一个随时间增加的链。这项技术本身并不复杂,但是时间戳在区块链技术中的应用是一项重大创新。时间戳为未来基于区块链的互联网和大数据增加了一个时间维度,使追踪数据变得更容易,并有可能重现历史。
同时,时间戳可以作为存在性证明的重要参数,可以证明某个数据在某个时刻一定存在,保证了区块链数据库不可被篡改和伪造,这也为区块链技术应用于公证、知识产权登记等时间敏感领域提供了可能。
5.分布式数据库
比特币系统中的区块就像一本记账本,记录着比特币的所有交易信息。每个比特币用户的收入和支出都永久嵌入数据块中,供他人查询。这些数据块中的交易数据存储在每个比特币用户的客户端节点中,所有这些节点构成了比特币及其坚韧的分布式数据库系统。任何一个节点的数据被破坏都不会影响整个数据库的正常运行,因为其他健康的节点保存着完整的数据库。
6.UTXO交易模式
UTXO(未使用的交易输出)是未使用的交易输出,是比特币交易过程中的基本单位。在除创世块之外的所有块中的交易(Tx)中都有几个输入(Tx _ IN,也叫资金来源)和几个输出(Tx_out,也叫资金目的地)。在奖励创世区块矿工的交易和后来采矿产生的交易中没有投入。况且在比特币系统中,一个交易的输入一定是另一个交易未使用的输出,这个输入也需要前一个。
当前区块链网络中的UTXO将被存储在每个节点中,只有满足从UTXO和数字签名导出的条件的交易才是合法的。因此,区块链系统中的新交易可以确认当前交易是否合法,而无需追溯整个交易历史。
7.散列函数
哈希函数在比特币系统中也有重要应用。区块链中的数据不仅是原始数据或交易记录,还有它们的散列函数值,即原始数据被编码成一串特定长度的数字和字母,然后记录在区块链中。有许多适合存储区块链数据的散列函数。
优势:
1)哈希函数处理的数据是单向的,从处理后的输出值几乎不可能计算出原来的输入值;
2)哈希函数处理不同长度的数据耗时相同,输出值固定;
3)即使散列函数的输入值仅相差一个字节,输出值的结果也将大不相同。比特币系统中最常用的哈希函数是双SHA256哈希函数。一般来说,不同长度的原始数据经过两次SHA256哈希函数处理,然后输出长度为256的二进制数,进行统一识别和存储。
总之,哈希函数是比特币系统中的关键技术,为比特币系统提供了很多便利。本书后面的章节会详细介绍哈希函数,这里就不赘述了。
8.Merkle树
Merkle树是数据结构中的一种树,可以是二叉树,也可以是多叉树。它具有树结构的所有特征。如图2-4所示,比特币区块链系统采用了Merkle二叉树。其主要功能是快速汇总和验证块数据的完整性。它将在区块链中散列数据包,并向上递归生成新的散列节点。最后,只剩下一个Merkle根存储在块头中,每个哈希节点总是包含两个相邻的数据块或它们的哈希值。
在比特币系统中使用Merkle树有很多优点:首先,它大大提高了区块链的运行效率和可扩展性,使得块头只需要包含根哈希值,而不需要封装所有底层数据,使得哈希运算在智能手机甚至物联网设备上高效运行;其次,Merkle tree可以支持“简化支付验证协议”(SPV),即它也可以在不运行完整的区块链网络节点的情况下检查交易数据。因此,在区块链使用Merkle树作为数据结构是非常有意义的。Merkle树将在本书后面的章节中详细介绍。
9.双重付款
双重支付问题也叫“双花”问题,即利用货币的数字特性,用“同一笔钱”进行两次或两次以上的支付。在传统的金融货币体系中,由于货币是一种物理实体,具有客观唯一的属性,所以可以避免重复支付。但是,在其他电子货币系统中,需要一个可信的第三方管理机构来提供担保。
而区块链技术则在去中心化的系统中,不借助任何第三方机构,只通过分布式节点之间的相互验证和共识机制,有效解决了重复支付问题,完成了信息传递同时的价值转移。区块链技术通过区块链形成的时间戳技术,验证比特币是否满足UTXO(未使用交易)和数字签名,有效避免了重复支付的问题。如果有人用同一个UTXO构造了两个支付给不同方的交易,比特币客户端只会转发先被拦截的那一个。矿商将选择把这笔交易打包成未来的区块。当其中一个交易所所在的街区后面有五个链接街区时,该交易已确认六次。在比特币区块链上,经过6次确认,基本可以保证比特币不会双开花。
10.P2P网络
对等网络(Peer-to-peer network,P2P)是一种将任务和工作负载分布在对等节点之间的分布式应用架构,是应用层对等计算模型形成的一种组网或网络形式。所以从字面上看,P2P可以理解为对等计算或者对等网络。P2P网络示意图如图2-5所示。中国的迅雷软件采用P2P技术。
区块链系统基于IP通信协议和分布式网络。它不是依靠传统的电路交换,而是基于网络通信,通过互联网交换信息。网络中所有节点地位相同,没有专门的中心节点和层次结构,每个节点将承担网络路由和数据块校验的功能。根据存储的数据量,的网络节点可以分为完全节点和轻量级节点。自区块创建以来,所有节点存储所有区块链数据(比特币网络现在有大约几十GB,并且仍在增长)。
所有节点的优点是不需要依赖其他节点进行数据验证,只需要自己完成验证和更新操作,缺点是硬件成本高。轻量级节点只需要存储一些数据信息,当需要其他数据时,可以使用简单的支付验证(Simplif?ied付款验证?cision(SPV)从相邻节点请求所需的数据来完成验证更新。
1.编码算法
除了哈希算法,比特币中还有一种非对称加密算法(椭圆曲线加密算法)来加密交易。非对称加密算法是指存在一对数学上相关的密钥。用一个密钥加密的数据信息只能用另一个密钥解密。在这些密钥中,公钥称为公钥,私钥称为私钥。比如公钥就像银行账户,私钥就像账户的密码或者账户所有人的签名。
区块链上的有效交易具有由交易发起者的私钥签署的有效数字签名,并且可以使用交易发起者的公钥来验证交易的签名。公钥可以通过算法从私钥计算出来,但私钥不能从公钥推导出来。比特币系统中使用的是典型的非对称加密算法——椭圆曲线加密算法(ECC)。
比特币系统一般从操作系统底层一个密码安全的随机源中取一个256位随机数作为私钥。私钥的总数是2256个,所以遍历所有可能的私钥很难得到公钥对应的私钥。用户的私钥也会被SHA256和Base58转换成易于书写和识别的50位私钥,公钥会先由私钥和Secp256k1椭圆曲线算法生成一个65字节的随机数。
一般比特币钱包的地址也是由公钥生成的。生成过程是公钥先用SHA256和RIPEMD160哈希,生成一个20字节的摘要结果(即Hash160结果)。这将作为比特币地址的主体信息,后面是版本前缀0x00和4字节的地址校验码。通过对汇总结果执行两次SHA256运算并取哈希值的前4位来生成地址校验码。最后,连接的版本前缀、正文信息和校验码通过Base58处理转换成人们容易识别的比特币字符地址。
12.数字签名
数字签名是在消息中添加另一段内容,作为发送方的证明,证明消息没有被篡改。通常,发送方使用哈希算法处理信息以获得哈希值,然后使用私钥加密哈希值以获得签名。然后,发送方将信息与签名一起发送给接收方。利用接收方和发送方的公钥对签名进行解密并恢复哈希值,然后利用哈希算法验证信息的哈希值与解密后的签名恢复的哈希值是否一致,从而识别信息是否来自发送方或者信息是否被篡改。
13.比特币的隐私模型
传统的隐私模式为交易的参与者提供了一定程度的隐私保护,第三方不会交出交易者的个人身份信息。公众只知道有人给了另一个人一定的钱,但是很难把交易和某个人联系起来,公众无法知道这个人到底是谁。这个信息类似于证券交易所发布的信息。每只股票的时间和交易量都有记录,可供查询,但不公开交易双方的身份信息。但实际上,交易双方的个人信息都存储在第三方机构,所以在某种程度上,交易参与者的隐私信息还是会有泄露的风险。
在比特币的隐私模式中,所有交易都不需要第三方操纵,也不需要提供任何身份信息。只要提供比特币的地址,就可以和任何人完成准匿名交易。在一定程度上,交易无法追溯到交易者本身,所以比特币上的交易可以在一定程度上摆脱监管。但是,通过对区块链上交易的地址和交易金额的相关性分析,我们也可以得到关于交易者的线索。所以比特币的交易不是纯粹的匿名交易机制,而是伪匿名交易机制。
框架和特征
1.框架介绍
目前大部分区块链技术的应用与比特币类似,大多是基于比特币架构的扩展。目前,区块链技术在金融行业受到广泛关注,被认为可以用来从最底层重构传统金融行业现有的IT基础设施。我们将把区块链的基础设施分为三层来解释。
首先,在网络层,区块链是一个基于IP通信协议和对等网络的分布式系统。与传统的有中心的分布式系统不同,它不依赖于集中式的服务器节点转发消息,而是每个节点都参与消息转发。因此,P2P网络比传统网络具有更高的安全性。任何一个节点被攻击都不会影响整个网络,所有节点都保留着整个系统的状态信息。
其次,在数据层面,区块链是分布式数据库系统,只能追加,不能更改。这是一个分布式分类帐。如果是开放的区块链,也就是公链,那么这个账本任何人任何地方都可以查询,完全公开透明。在区块链网络中,节点通过一致性算法维护网络中总账数据库的一致性。
同时采用密码签名和哈希算法,保证数据库不可篡改、不可伪造和可追踪。比如在比特币系统中,只有在控制了51%的网络计算能力的情况下,才有可能重组区块链修改账本信息。比特币系统的设计者中本聪在系统设计中巧妙地加入了具有经济激励的挖矿工作量证明(PoW)机制,使得即使是网络上拥有51%以上计算能力的人也不会损害自身利益,对网络发起攻击。因此,比特币系统已经正常运行了7年多,没有出现过因比特币系统本身的缺陷而导致的安全故障。
第三,在应用层面,我们可以用区块链取代传统的登记和结算系统。2016年6月22日,波士顿咨询公司指出,到2030年,全球支付业务收入有望达到8070亿美元。基于区块链技术的交换支付属于区块链的1.0应用版本,其安全性、交易时间和成本将对传统支付业务做出颠覆性的改进。花旗银行也明确指出,到2020年,如果所有主要金融机构都使用区块链技术,每年可以节省超过200亿美元的成本。
国鑫证券分析报告指出,时间前后安排、区块链点对点分布式时间戳服务器记录的电子交易凭证的生成,可以解决重复支付问题,从而带来结算成本归零的可能性。德国银行援引波士顿咨询的一份研究报告显示,欧洲银行的IT成本平均占银行整体运营成本的16%[5]。一个重要原因是传统银行在账簿维护、支付交易结算清算方面的结构过于复杂,维护成本过高。
在应用方面,区块链平台可以为用户提供编写智能合同的编程环境。通过智能合同,业务规则可以转化为在区块链平台上自动执行的合同。本合同的执行不依赖于可信的第三方,不受人为干预。
理论上,一旦部署,一旦满足合同执行的条件,就会自动执行。执行结果也可以在区块链上公开查询,保证了合同的公平性和透明性。因此,智能合同可以降低中介机构参与合同建立、执行和仲裁的成本。区块链的智能契约为未来构建可编程货币、可编程金融乃至可编程社会奠定了基础。
2.建筑特色
区块链具有去中心化、数据库可靠、开源可编程、集体维护、安全可信、交易准匿名等特点。如果一个系统不具备上述特征,它就不能被视为基于区块链技术的应用。
(1)权力下放
区块链数据存储、传输、验证等过程基于分布式体系结构,整个网络不依赖于一个集中的硬件或管理机构。作为区块链的一种部署模式,公链网络中的所有参与节点可以具有相同的权利和义务。
(2)可靠的数据库
区块链系统的数据库采用分布式存储,任何参与节点都可以拥有数据库的完整副本。除非能控制系统中一半以上的计算能力,否则对节点上数据库的任何修改都是无效的。
系统中涉及的节点越多,数据库的安全性就越高。此外,区块链数据的存储也带有时间戳,这为数据增加了一个时间维度,具有高度的可追溯性。
(3)开源可编程性
区块链系统通常是开源的,代码高度透明。公链的数据和程序对所有人开放,任何人都可以通过接口查询系统中的数据。区块链平台还提供了灵活的脚本代码系统,支持用户创建高级智能合约、货币和分散式应用。
比如以太坊平台提供图灵完整的脚本语言,供用户构建任何可以精确定义的智能合约或交易类型。有关以太坊的更多信息,请参考第2.2节。
(4)集体维护
系统中的数据块由整个系统中所有具有计费功能的节点共同维护,任何一个节点的损坏或丢失都不会影响整个系统的运行。
(5)安全可信。
区块链技术采用非对称密码原理对交易进行签名,使交易无法被伪造;同时,使用哈希算法保证交易数据不容易被篡改。最后,借助分布式系统中各节点的工作量证明等共识算法,形成强大的计算能力,抵御破坏者的攻击,区块链中的块和块内的交易数据不可篡改和伪造,具有极高的安全性。
(6)准匿名
区块链系统使用链接到用户公钥的地址作为用户标识,不需要传统的第三方认证中心(Certif?证书颁发机构(CA)颁发数字证书来确认身份。通过在全网节点运行共识算法,建立诚实节点对全网状态的共识,间接建立节点间的信任。
用户只需要公开自己的地址,不需要公开真实身份,同一个用户可以不断更换地址。因此,区块链上的交易不与用户的真实身份相关联,而仅与用户的地址相关联,这使得交易是准匿名的。
区块链技术的核心优势是去中心化,通过哈希算法、数字签名、时间戳、分布式共识和经济激励等手段,在节点不需要相互信任的分布式系统中建立信用,实现点对点的交易和协作,从而为集中式机构普遍存在的成本高、效率低、数据存储不安全等问题提供解决方案。
近年来,随着国内外研究机构对区块链技术的研究和应用,区块链的应用前景受到了各界的高度重视。被认为是继大型机、个人电脑、互联网、移动/社交网络之后的第5次计算范式的颠覆性创新,是继血缘信用、贵金属信用、央行纸币信用之后,人类信用进化史上的第4个里程碑。被视为下一代云计算的雏形,有望彻底重塑人类社会活动的形态,实现从当前的信息互联网向价值互联网的转变。
区块链运营的核心技术
1.区块链的链接
顾名思义,区块链是由积木组成的链条。每个块分为两部分:块头和块体(包括交易数据)。块头包括用于实现块链接的前一个块的PrevHash值(也叫Hash值)和用于计算挖掘难度的nonce。前一个块的哈希值实际上是前一个块头的哈希值,计算随机数的规则决定了哪个矿工可以获得记录该块的权利。
2.共识机制
区块链伴随比特币诞生,是比特币的基础技术架构。区块链可以理解为基于互联网的去中心化记账系统。像比特币这种去中心化的数字货币系统,要求所有诚实节点的记账一致,没有一个中心节点,这就需要区块链来完成。因此,区块链技术的核心是一种共识机制,在没有中央控制的情况下,在没有信任基础的个人之间就交易的合法性达成共识。
目前,区块链主要有四种一致性机制:PoW、PoS、DPoS和分布式一致性算法。
(1)权力
PoW(proof of of workload),即类似比特币的挖掘机制,挖掘者将网络中尚未记录的已有交易打包成一个块,然后不断遍历尝试寻找一个随机数,使新块的哈希值加上随机数满足一定的难度条件,比如前10位为零。找到一个满足条件的随机数,就相当于确定了区块链的最新区块,也相当于获得了区块链的当前记账权。
矿工在网络中广播满足开采难度条件的区块。在验证块满足挖掘难度条件且块中的事务数据满足协议规范后,全网其他节点会将块链接到自己版本的区块链,从而在全网形成对当前网络状态的共识
优点:完全去中心化,节点自由接入,避免了建立和维护集中式信贷机构的成本。只要网络破坏者的计算能力不超过网络总功率的50%,就可以约定网络的交易状态。
缺点:目前比特币挖矿造成大量资源浪费;此外,挖矿的激励机制也造成了矿池计算权力的高度集中,背离了当初分散设计的初衷。更大的问题是PoW机制需要很长时间才能达成共识,每秒最多只能进行7次交易,不适合商业应用。
(2)位置
PoS权限证明(proof of rights),一种分布式共识机制,要求节点提供一定数量的令牌证书,以获得竞争区块链的记账权限。如果仅仅依靠代币的余额来决定记账人,富者胜,会导致记账权的集中化,降低共识的公平性。因此,不同的PoS机制采用不同的方式,在权益证明的基础上增加记账权的随意性,以避免集权。
比如PeerCoin)PoS机制中,链龄最大的比特币获得记账权的概率更大。NXT和黑币用一个公式来预测下一个记账节点。令牌越多,被选为计费节点的概率越大。未来以太坊会从现在的PoW机制变成PoS机制。从目前我们看到的信息来看,以太坊的PoS机制会用节点赌下一个区块。下注者将获得额外以太币奖励,不下注者将被扣除以太币以达成下一个区块的共识。
优点:在一定程度上缩短了达成共识的时间,减少了PoW机制的资源浪费。
缺点:破坏者网络攻击成本低,网络安全性有待验证。此外,拥有大量令牌的节点更容易获得记账权,这将使网络的共识被少数富裕账户所主导,从而失去公正性。
(3)残疾人组织
DPoS(股票授权证书)机制,类似于董事会投票。bitshares采用的PoS机制是股东投票选出一定数量的见证人,每个见证人有两秒钟的权限依次生成区块。如果见证人不能在给定的时间片内生成块,则块生成权限将给予对应于下一个时间片的见证人。股东可以随时通过投票改变这些证人。DPoS的这种设计使得块生成更快、更节能。
优点:大幅减少验证和核算涉及的节点数量,可实现秒级共识验证。
缺点:选择固定数量的见证人作为簿记候选人可能不适合完全分散的场景。另外,在网络节点数量较少的场景下,选举见证人的代表性不强。
(4)分布式一致性算法
分布式一致性算法基于传统的分布式一致性技术。其中,有拜占庭容错算法解决拜占庭将军问题,如PBFT。另外,解决非拜占庭问题的分布式一致性算法(Pasox,Raft)在本书第五章的consensus算法中有详细介绍。这种算法是目前联盟链和私有链场景下常见的共识机制。
优点:实现秒级快速共识机制,保证一致性。
缺点:去中心化程度不如公链上的共识机制;更适合多方参与的多中心商业模式。
3.解锁脚本
它是实现区块链自动验证和合同执行的重要技术。严格来说,每个事务的每个输出都不是指向一个地址,而是指向一个脚本。该脚本类似于一组规则,限制接收者如何在该输出上使用锁定的资产。
交易的有效性验证也依赖于脚本。目前,它依赖于两种脚本:锁定脚本和解锁脚本。锁定是添加到输出事务中的一个条件,由脚本语言实现,位于事务的输出端。解锁脚本对应于锁定脚本。只有当满足锁定脚本的条件时,相应的
目前比特币常用的脚本有两种。一种是普通的P2PKH(Pay-to-Public-Key-Hash),即支付给公钥的哈希地址。接收者只需要用对应于地址的私钥对输出进行签名,就可以花掉输出。另一个是P2SH(Pay-to-Script-Hash),是支付脚本的哈希。以多重签名为例,它要求输出必须由N个私钥中的M个私钥(MN)同时签名才能花费资产。它类似于现实生活中需要多把钥匙同时开启的保险箱,或者一个条约可以通过多次签字生效,但自动执行。
比如在比特币中,P2PKH的脚本规则如下:
Pubkey脚本:OP _ DUP OP _ hash 160 OP _ equal verify OP _ check SIG
签名脚本:
P2SH脚本规则如下:
Pubkey脚本:OP_HASH160
签名脚本:[签名][签名.]
在上面两个脚本规则中,Pubkey脚本代表锁定脚本,Signature脚本代表解锁脚本。OP_开头的字是相关的脚本命令,也是“虚拟机”可以解析的指令。这些命令规则是根据不同的PubKeyscripts划分的,它也决定了解锁脚本的规则。
比特币中的脚本机制比较简单,只是一个基于栈的引擎,解释相关的OP指令。没有太多可以解析的脚本规则,无法实现复杂的逻辑。但是,它为区块链编程提供了一个原型。一些后续的可编程区块链项目实际上是基于脚本原理开发的。比如以太坊深度增强了脚本机制。脚本机制不再只是简单的OP指令,而是一套支持脚本的图灵完整语言,可以由一个“虚拟机”来执行。以太坊实现了一个支持图灵完整脚本语言的区块链平台。
剧本的机制对区块链来说非常重要。它类似于区块链技术公司提供的扩展接口。任何人都可以基于这个接口开发基于区块链技术的应用,比如智能合约的功能。脚本机制也使得区块链技术作为底层协议成为可能。未来很多基于区块链的颠覆性应用都可能通过区块链的脚本语言来完成。
4.交易规则
区块链的交易是构成区块的基本单位,也是区块链负责记录的实际有效的内容。区块链事务可以是转移或其他事务,如智能合约的部署。
就比特币而言,交易指的是支付转账。其交易规则如下:
1)交易的输入和输出不能为空。
2)对于事务的每个输入,如果在当前事务池中可以找到其对应的UTXO输出,则拒绝该事务。因为当前事务池是一个没有记录在区块链中的事务,所以事务的每个输入都应该来自已确认的UTXO。如果在当前交易池中发现,则为双花交易。
3)对于事务中的每个输入,其对应的输出必须是UTXO。
4)每个输入解锁脚本必须与相应的输出锁定脚本一起验证交易的合规性。
对于以太坊来说,交易也可能是智能合约的部署。交易规则决定了满足特定语法规则的合约可以在区块链上展开。
5.交易优先权
区块链交易的优先级由区块链协议规则决定。对于比特币来说,块中包含的交易的优先级是由交易在网络上广播的时间和交易的金额决定的。随着事务在网络上广播的时间增加,事务的链龄增加,事务的优先级提高,最终会被包含在块中。对于以太坊来说,交易的优先级也与交易的发布者愿意支付的交易费用有关。发布者愿意支付的交易费用越高,交易被包括在块中的优先级就越高。
6.Merkle证书
Merkle证明的最初应用是比特币,它是由中本聪在2009年描述和创造的。比特币区块链使用Merkle proof来存储每个区块的交易。事务不能被篡改,也很容易验证事务是否包含在特定的块中。有关Merkle树的详细信息,请参见第4.2节。
Merkle树的一个重要应用场景是快速支付验证,这是中本聪描述的“简化支付验证”(SPV)的概念。轻客户端不需要下载每一个事务和每一个块,只需要下载链的块头即可。每个块只包含以下五项,数据块大小为80字节。
(1)先前块报头的散列值
(2)时间戳
(3)挖掘难度值
(4)工作量证明随机数(nonce)
(5)包含该块事务的Merkle树的根散列
如果一个轻客户端想要确定一个事务的状态,它可以简单地要求一个Merkle证明,在Merkle树中显示一个特定的事务,它的根是主链(非分叉链)上的块头。
Merkle证明了区块链可以被更广泛地使用,但比特币的轻客户有其局限性。虽然可以证明包含的交易,但无法证明任何当前状态(例如,数字资产的持有、名称注册、金融合同的状态等。).事务影响的确切性质可能取决于之前的事务,而这些事务本身又取决于之前的事务,因此您需要验证整个链中的每个事务。为了解决这个问题,以太坊做了进一步的创新。
以太坊的每个块头不仅包含一棵Merkle树,还包含三棵Merkle树,分别对应以下三个对象:
(1)交易(Transactions)
(2)收入(基本上,它是一个数据栏,显示每笔交易的影响)
(3)州(State)
该树允许轻客户端容易地进行和验证以下类型的查询回答:
(1)该交易是否包含在特定块中?
(2)告诉我过去30天内该地址发出的所有X类事件的实例(比如某个众筹合同完成了目标)。
(3)我的活期账户余额是多少?
(4)这个账号存在吗?
(5)假装在本合同中运行此交易。它的输出会是什么?
第一个由事务树处理;第三和第四种类型由状态树处理,第二种类型由收据树处理。计算前四个查询任务非常简单。只需在服务器中找到对象,获取梅克尔分支,通过分支回复到轻客户端。第五个查询任务也由状态树处理。
7.RLP
RLP(递归长度Pref?Ix(递归长度前缀编码)是以太坊中对象序列化的一种主要编码方式,其目的是对任意嵌套的二进制数据序列进行编码。
以太坊中的所有数据都用“递归长度前缀”(递归长度前缀?Ix编码(RLP),将任意长度和维度的字符串数组连接成一个字符串。例如,['dog '' cat']串联(以字节数组格式)为[130,67,100,111,103,67,99,97,116];基本思想是将数据类型和长度编码成一个字节,放在实际数据的前面(比如' dog '的字节数组编码为[100,111,103],那么串接后就变成[67,100,111,103])。
注意,RLP编码顾名思义是递归的;当RLP编码一个数组时,它实际上是一个字符串编码与每个元素的RLP编码连接在一起。需要进一步说明的是,以太坊中的所有数据都是整数;因此,如果有任何以一个或多个0字节开头的哈希或地址,当计算中出现问题时,应该删除这些0字节。以太坊中没有包含任何以0开头的数值的级联数据结构。以Big Endian)256格式存储(例如32767字节数组格式为[127,255])。
区块链交易流程
以比特币的交易为例。区块链的交易不是通常意义上的一手交割的交易,而是转让。为每一次转账构建交易数据是很困难的。为了使价值易于组合和分割,比特币交易被设计成包括多个输入和输出,即一笔交易可以转给多人。从生成到在网络中传播,再到工作量认证,整个网络节点的验证,最后记录到区块链,是区块链事务的整个生命周期。
交易记录的生成。拥有者A用自己的私钥为上一笔交易和下一个拥有者B签署一个数字签名,并将这个签名附在这个货币的末尾,进行交易下单。
交易的差价。a向整个网络广播事务列表,每个节点将接收到的事务信息包含在一个块中。
工作量证明。每个节点通过相当于解一道数学题的工作量证明机制获得创建新块的权利,并争取数字货币的奖励。
验证整个网络节点。当一个节点找到解决方案时,它会将这个块中记录的所有带时间戳的事务广播到整个网络,并由整个网络中的其他节点进行检查。
记录到区块链。整个网络中的其他节点检查该块的记账的正确性。如果没有错误,他们将争夺这个合法区块之后的下一个区块,从而形成具有合法会计的区块链。
来源:火球财经
转载请注明“来源:FinPlus FinTech投资基金自媒体FinTech猫观察(微信号:FinTech cat)”
FinTech猫观察
每只猫吃一条鱼需要8分钟。FinTech猫让你吃一个行业趋势或目标研究或深度解读或.
FinTech猫看,国内首只专注于FinTech投资和加速的天使基金,由FinPlus自媒体所有。它以猫的姿态玩FinTech。快速敏捷的信息,透彻的行业调研,全方位多角度的深度解读,冷静深刻的分析,硬核极客新潮的技术,每天带给你不一样的吃货体验。
FinPlus,利用自身行业积累的资源,推出FinPlus虫洞加速计划。Fin虫洞加速计划(Fin Wormhole Acceleration Program)是FinPlus组织行业专家导师设计的加速课程,针对其投资的FinTech初创公司。涵盖金融产品设计、运营规划、运营合规等十余个领域。在FinTech领域创业的团队可以将商业计划书提交到BP@FinPlus.me
FinPlus旨在以FinPlus基金FinPlus Accelerator的形式构建行业生态FinTech生态系统,将与FinTech产业链上下游合作伙伴共同推动FinTech在中国的发展。
www。FinPlus.vc
本文来自FinTech猫看,经创业家族授权,略有编辑修改,版权归作者所有。内容仅代表作者独立观点。【下载企业家APP,阅读中国最赚钱的7000家企业】