理解区块链的基础和用例

关键要点
· 区块链可以是公开的,也可以是私有的,可以是被许可的,也可以是不可信的
·IBM Hyperledger和R3 Corda是应用最广泛的两个企业区块链
·实际解决方案的部署仍然有限且不完整
·这个空间正在继续进化,并且处于早期阶段
·企业采用仍然很谨慎
导航区块链空间可能非常具有挑战性。
关于这个主题的文章很多,其中很多充斥着大量的空话和炒作。
在本文中,我们将解释区块链项目的两个主要分支(公共和私有)之间的区别,以及与该领域相关的一些基本技术术语。
这将允许我们解决当前关于区块链和相关解决方案中的一个基本问题:使用公共的、无信任的区块链与分布式私有分类帐与传统数据库的有效用例是什么?
在区块链空间中使用的一些最重要的术语是:
· 受信任第三方——某些事实(例如参与者的身份)不能被核实的系统,除非引用特权(通常是集中的)权威。
· 无信任——不依赖任何可信任的第三方进行任何操作的系统,包括交易确认或身份验证。
· 工作证明(POW)——寻找没有捷径算法的数学难题(通常是哈希值问题)的解决方案,因此必须通过蛮力计算来解决。
· 未使用的交易输出(UTXO)——在某些区块链(如比特币)中,交易消耗输入,而留下一些输出未使用。这些未使用的输出可以成为未来事务的输入。
· 虚拟机模型——一些区块链(尤其是Ethereum)有一个抽象模型,用来表示系统的整体状态,以及如何更新该状态。该模型通常可以用虚拟状态机的形式化模型来描述,例如Ethereum虚拟机(EVM)。
· 图灵完备——一个小型的事件驱动程序,可以部署到支持程序执行的区块链中。一旦部署,程序将继续执行,使用区块链事务作为输入,并可以采取导致执行进一步事务的操作。程序的代码是进行了加密保护的。
· 图灵完备-一个计算机科学术语,可以理解为“完全有能力的编程语言”。所有主流语言如Java、Javascript、Python、Ruby、Go等都是图灵完备的。出于技术原因,一些区块链可能会选择不把图灵完备语言的全部功能提供给聪明的合同作者。
每一个术语都有更多的细节,但其中最重要的一些方面包括:
1. 大多数事务系统完全或部分依赖于某些受信任的第三方。另一方面,不信任是一种相当显著的特性,但它不是廉价获得的——必须付出相当大的额外复杂性和努力,才能使系统表现出不信任。关键是许多区块链使用的POW算法。
2. 一旦找到了POW问题的解决方案(基本上是通过大规模的反复试验),那么任何参与者都可以立即证明解决方案的正确性。好的POW问题具有统计特性,任何观察者都可以可靠地估计在偶然发现一个解决方案时花费了多少计算时间。这使得它们适合作为公共区块链(如比特币)中的分布式共识机制使用。 
3. UTXO模型提供了一个简单的路由来确保交易的完整性,并防止相同的比特币在两个独立的交易中被使用两次(_double-spending问题_)。这是通过确保事务的所有输入都必须出现在输出集合(UTXO数据库)中。
4. 相比之下,虚拟机模型(尤其是由Ethereum实现的)提供了一个重要的扩展——能够存储任意状态,并在网络中以一种不信任和完全分散的方式运行简单程序。
随着这些主要定义的阐明,我们现在可以看看当今世界上使用的一些主要的基于区块链的技术。
比特币
原始加密货币,它使用未使用事务输出(UTXO)模型作为分类账。它使用一个简单的POW算法进行挖掘,该算法基于猜测一个随机字符串,当该字符串与上一个事务块组合时,会导致组合的SHA-256哈希值在数字上小于一个小阈值。
成功猜出答案的参与者被称为“挖掘了一个块”,块中包含的交易被添加到分类账中。
这样就可以使用一种非常简单的方法来确定共识——参与者只需同意,应该将最长的链视为挖掘下一个事务块的基础。
比特币的设计初衷并不是为了满足智能合约。因此,可用的功能非常有限,主要是通过对碰巧存在于协议中的侧通道的新颖使用。由此产生的功能绝不是图灵完备的,相反,大多数对比特币的分析都忽略了它。
由此产生的系统是纯粹的加密安全分类帐。
除了使用加密签名来验证事务的起源之外,它没有任何身份语义,而且完全不可信任。
以太坊
这种分类账建立在比特币的一些思想基础上,但它模拟的是单个全球虚拟机的状态,而不是UTXO模型。关键的创新是增加了图灵完备的智能合约能力。以太坊虚拟机(EVM),是一个专门为分布式账本和智能契合约使用而创建的虚拟机。
在以太坊中,程序状态是私有的,属于单独的合约地址,由一系列EVM字节码指令改变,这些指令是智能合约的内容。
然后,通过聚合每个合约地址的程序状态,可以得到总体的全局状态。
以太坊网络中的所有完整节点都遵循模型的规则。他们可以为他们机器上的任何合约地址的状态进行计算,只要他们使用相同的事务(构成以太坊模型中的输入数据),就会得到相同的结果。
由于以太坊使用全局一致算法,并且具有全局最新块的概念,所以以太坊虚拟机的整体事务处理速率受到块生成速率的限制。在以太坊网络中增加更多的硬件和计算能力并不会使其更快或更强大,只是更能防止篡改。
使用Turing-complete智能合约允许在网络之上添加额外的功能,而不需要所有参与者都知道它们。例如,这允许以太坊网络发出在以太空间虚拟机中作为附加状态持有的软件代币。这就是所谓的ICO的基础。
EVM在表面上类似于JVM,但在一些重要领域进行了不同的设计。特别是,EVM字节码的设计使得对已编译代码的静态分析比对已建立的替代方案的静态分析要困难得多。对于需要非常高的透明性和可验证性的执行环境来说,这不是一个卖点。
低级的EVM环境也不是特别适合人类的编程环境。因此,创建了一些更高级的语言,这些语言可以编译为EVM字节码。并以稳定性著称。
受主流编程语言(如Javascript和Java)的启发,Solidity语言还集成了与以太坊区块链交互的新特性。
在某些方面,以太方是自身成功的受害者。它作为ICO选择平台的出现,导致了ETH在2018年初的高价位。这种由以太坊团队自己持有的加密货币的数量导致了这样一种局面:许多主要参与者都对现状有着巨大的既得利益,并希望实现他们的账面利润。
Corda
R3 Corda使用UTXO模型(类似于比特币),但在设计中还包括图灵完备的智能合合约。这些合约表示为JVM字节码,具有可选的附加确定性保证,从而限制了合约语义。
该方法不使用单个全局锁(块高度)来控制分类帐状态的进展,而是允许不冲突的事务并行进行。这有效地细化了锁,但代价是需要更复杂和微妙的时间概念。在Corda模型中,简单的“最长链获胜”规则不再是一个足够的共识算法。
参与者是已知和可信的,因为第三方身份验证是Corda体系结构的自然组成部分。
作为移除全局账本锁的一个副作用,Corda包含了退出/进入语义,以从主链中分离事务,并防止所有事务随时间的推移纠缠在一起。这是可能的,因为体系结构强烈依赖于受信任的第三方模型。
因此,某些参与者撤销分类账项目(相当于加密货币中的代币)并将其替换为没有交易历史记录的新铸造的等价物的权力,可以得到身份当局的保证。
Corda的创建者并不认为它与加密货币有那么大的相似之处。
相反,他们认为技术是在整个市场层面上形成的共享基础设施,而不是在单个公司层面上。
这将Corda定位为企业区块链,旨在供那些能够受益于公共基础设施和对世界状态的共同看法的组织使用,而不是维护不同版本的记录,因为这不可避免地会导致协调问题。
HyperLedger
由IBM发起的HyperLedger项目是另一个领先的企业区块链解决方案。
HyperLedger结构是一个区块链框架实现,是Linux基金会托管的超级账本项目之一。
IBM项目的主要设计目标包括机密性、弹性、灵活性和可伸缩性。
与Corda一样,Hyperledger也使用一种许可的架构。
它实现了一种确定性的实用拜占庭式Faul容忍(PBFT)算法,该算法确保一旦接收到事务完成通知,事务就真正完成了。
IBM已经投资于可靠的Docker集成,包括容器内的测试。
HyperLedger的智能合约可以用Java编写,有一个SDK (Go合同也是可能的)。
HyperLedger按角色划分节点,这些角色包括完全对等的节点、证书颁发机构节点(许可所需的节点)和将事务分组为块的定购者。
HyperLedger区块链状态建模为版本化的键值存储(KVS),其中键是名称(字符串),值是任意blob。
这是一个非常低级的接口,在该接口之上,Hyperledger提供了一个名为Ledger的层,它提供了所有成功状态更改的可验证历史记录。
HyperLedger的代码和体系结构仍在快速发展,但实际的生产试验已经开始出现,它与Corda一起出现,成为企业更可能使用的解决方案之一。
用例
区块链的用例仍在热烈讨论中。
有一个明显的例子,就是抵制审查的数字货币。
然而,2018年加密货币市场的波动性和分散性似乎表明,缺乏信任的数字货币的实际适用性有限。
从企业的角度来看,越来越清楚的是,他们还可以用于创建部署为一个共享的系统或网络,并构造多个实体之间不一定相互信任还想分享数据和维护一种共识各方关心的问题。
在这些用例中,集中式的权限对于参与者来说是不可接受的,或者设置过于昂贵,这些用例仍然在出现。
尽管时间、精力和风险资本已经部署到迄今为止创建的众多区块链项目中,但情况还是如此。
随着更多的项目进入2019年的市场,区块链的前景是否会像它的支持者们在相当长的一段时间里所承诺的那样产生重大影响,还有待观察。