加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

区块链的技术世界观:账本的技术演进

发布时间:2018-11-22 04:27:44 所属栏目:建站 来源:午夜咖啡
导读:本文是基于我在 360 区块链开放日上的分享整理完善而成,演讲时有些逻辑没有讲明白,感觉用文字表述可能更好一些。作为自己区块链系列的开篇第一篇,谈谈怎么从技术的角度理解区块链。 说到区块链技术分享,区块链相关的各种技术词汇就纷至杳来。区块链领

UTXO 与 MerkleTree

区块链的技术世界观

UTXO 本身是一种复式记账法。比特币的定位是数字货币,UTXO 属于它的账本业务逻辑。这种记账法的好处是任何一笔交易都可以回溯到创币交易,保证货币只能由创币交易产生,无法凭空产生。如果只是货币场景,UTXO 确实比 Account 模型要安全,但如果考虑到其他应用场景,应用的状态就很难设计出一种 UTXO 模型来追踪变更,这也是为什么后来的面向应用的链放弃 UTXO 的原因。

比特币通过 MerkleTree 提供交易证明,方便没有全量账本的轻客户端校验交易。但比特币的 MerkleTree 是每个账本一个,没有全局 MerkleTree,也就是说没办法提供全局证明,轻客户端的实现就会比较复杂。这方面比特币社区也讨论很久,详情可以参看我以前的一篇文章:《谈谈区块链的 UTXO 证明》。后面会谈到 Ethereum 的改进。

Bitcoin Script

比特币的 Script 可以理解成一种支付校验逻辑的扩展能力。前面说了,去中心化账本的业务逻辑和共识机制融合在一起了,支付校验本身也属于业务逻辑。这种逻辑的变更会影响共识,进而可能导致硬分叉,而提供一种可自定义逻辑的脚本,则是一种兼顾的策略。

同时,比特币的这种能力也给后来的染色币(Colored Coin)提供了机会。本来比特币的账本只能记录比特币的交易,但有了 Script 后,可以在 Script 嵌入自定义数据结构,可以理解成对比特币账本的数据扩展。染色币就利用这种机制来制造新的加密币。

这种机制的好处是染色币不需要重新构建一个去中心化的账本网络,降低了时间以及经济成本。但缺点也很明显,一方面,这种目的毕竟不属于比特币的初始设想,得不到更多支持,另外一方面,比特币 Script 只能嵌入数据,无法嵌入对这种数据的校验逻辑,校验逻辑还需要通过部署独立的节点程序来实现。

于是这种需求背景下,以太坊产生了。

Ethereum: A Decentralized Platform that runs Smart Contracts

以太坊的设想是既然运行一个去中心化账本成本这么高,那能不能先运行一个通用的账本,然后提供机制允许用户在上面自定义业务逻辑?所以它的目的不是数字货币,而是运行『智能合约』的平台。如果说以太坊当前的 PoW 共识机制等只是在比特币 PoW 基础上的优化改良,它的最关键的创新就是智能合约和 Global State Trie。

智能合约

这里顺便扯一下对『智能合约』的看法。很多批评『智能合约』的人说这只是一种脚本程序,并不智能。那这样说智能手机(Smart Phone)哪里智能了?智能家居,智能手表,智能xx不都一样?中文领域里把 Smart 和 Intelligence(Artificial Intelligence,AI 人工智能) 都翻译成智能,确实造成混淆。但这是历史遗留问题了,纠结这个名字没有意义。

于是以太坊提供了一种图灵完备的脚本语言来定义业务逻辑,交易数据中明确允许嵌入自定义数据结构(以太坊 transaction 的 data 字段),链不关心合约本身的逻辑,只是通过在不同的节点重复运行合约,来保证合约的输出是确定的。它和比特币的 Script 的差异不仅在是否图灵完备,更大的差异在于自定义数据和自定义逻辑的结合。染色币这样的场景,它同时托管了染色币的账本数据和交易逻辑,于是引来了一场发币的热潮。它这种机制带来的挑战是不同的场景的业务逻辑的输入输出不一样,如何存储和维护?如何提供证明?

于是它创造性的引入了 Global State Trie。

Global State Trie

以太坊的黄皮书中通过一个公式来定义以太坊。

σt+1≡Υ(σt,T)这个公式中的 σ 代表以太坊的状态,Υ 代表处理函数(包括合约以及内置的 Ether 交易逻辑),T 代表交易(包含调用合约的交易), t+1 的状态等于处理函数在 t 状态基础上处理 T 的执行结果。

而这里的状态的程序表达形式就是一个 Merkle Patrica Trie。

这是一个两层的 Trie,第一层的叶节点上保存的是每个 Account 的余额(Balance),以及针对合约 Account 的 CodeHash 和 Storage root。Storage root 是另外一个 Trie 结构,叶节点是合约内部的状态。任何一个 Account 的余额或者合约状态变更,都会导致 Global State Root 变更,而每个区块都会在区块头上带上当前区块中的 Transaction 执行完后的 State Root 。

这样,一方面提供一种全局校验机制,只要比较 State Root 就可以快速知道不同节点的状态是否一致,这个和 Git 中引入 Merkle hash 证明机制的原理是一样的。Linus 一次分享 Git 的时候也说了,Git 的这种机制可以让他方便的信任来自第三方保存的代码。有了这套机制后,新节点同步的时候可以信任一定区块以前的全局状态,而不是完全通过区块回放来重新构建。这也回答了我们前面提出的那个问题,如何快速校验不同机房的数据状态一致性。

另外一方面,它也提供了一种单个账号状态和全局状态关系的证明能力,可以通过 Merkle Path 证明一个账号的当前状态和全局状态之间的关系,轻钱包实现就会更容易。

如果纯粹从模型看,以太坊已经是一个非常理想的模型了。大家常说程序就是数据结构加算法,它既提供了数据结构的自定义以及存储能力,也提供了算法的计算环境,理论上任何程序都可以放上去运行了。但套用一句俗话,理想是丰满的,现实是骨感的,这样的全球分布式账本的存储和计算成本太高了,稍微复杂的应用都很难运行起来。

EOS:The most powerful Infrastructure for Decentralized Applications

EOS 自项目启动开始,主打的旗帜就是吞吐和性能。如果说比特币和以太坊两个项目带有一种理想主义特质,EOS 则带有非常明显的实用主义特质。

前面说到,Peer to Peer 网络的问题是无准入,节点数不固定,匿名情况下防作弊成本高。EOS 的 DPoS 思路就是通过投票选举,让参与共识的节点在一定时间内保持稳定,同时通过竞选机制,让竞选节点不再匿名,降低防作弊的成本,然后把注意力集中到吞吐以及应用模型的改进上。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读