一文了解区块链的基础知识和常见用例

阅读数:1586 2018 年 12 月 29 日 15:03

一文了解区块链的基础知识和常见用例

关键要点

  • 区块链可以是公共的,也可以是私有的,可以是有许可的,也可以是无信任的。

  • IBM Hyperledger 和 R3 Corda 是两种使用最广泛的企业区块链。

  • 部署真实的解决方案仍然带有局限性和不完善。

  • 这个领域还处于早期阶段,并正在不断演化。

  • 企业采用区块链仍然需要谨慎。

要想梳理一遍区块链领域,可能是一件非常具有挑战性的事情。

已经有大量关于这个主题的文章,其中很多充斥着炒作、专业的技术和其他术语。

在本文中,我们将解释区块链项目(公共和私有)两个主要分支之间的差异以及与该领域相关的一些基本技术术语。

我们将借机解答当前关于区块链和相关解决方案的一个基本问题:公共无信任区块链、分布式私有分类账和传统数据库的有效使用场景分别是什么?

区块链领域中出现的一些最重要的术语:

  • 受信任的第三方——需要通过引用特权(通常是集中的)权限,否则无法验证某些事实(例如参与者的身份)的系统。

  • 无信任——任何操作(包括交易确认或身份验证)都不依赖可信第三方的系统。

  • 工作证明(POW)——为数学难题(通常是散列问题)找到解决方案,这些难题通常没有解决捷径,必须通过强大的算力来解决。

  • 未使用的事务输出(UTXO)——在某些区块链(例如比特币)中,事务需要使用输入,并留下一些未使用输出。然后,这些未使用的输出可用作未来交易的输入。

  • 虚拟机模型——一些区块链(特别是以太坊)有一个抽象模型,说明了如何表示系统的整体状态,以及如何更新其状态。这个模型通常可以通过虚拟状态机的正式模型来描述,例如以太坊虚拟机(EVM)。

  • 智能合约——一个小型的、基于事件驱动的程序,可以部署到支持执行程序的区块链中。部署后,程序将继续执行,使用区块链事务作为输入,并做出一些操作,这些操作可导致进一步执行事务。这些程序的代码受加密方式的保护。

  • 图灵完备——一个计算机科学术语,可以被理解为“全能的编程语言”。所有主流语言,如 Java、JavaScript、Python、Ruby、Go 等都是图灵完备的。由于技术方面的原因,一些区块链可能不会为智能合约开发者提供图灵完整语言的全部功能。

关于这些术语,还有很多更详细的细节,其中最重要的一些方面包括:

  • 大多数交易系统完全或部分依赖于某些受信任的第三方。另一方面,无信任是一种非常了不起的特性,但它并不是可以廉价获得的——实现无信任的系统需要额外的努力,而且必定伴随着额外的复杂性。这里的关键是很多区块链都在使用的共识 POW 算法。

  • 一旦找到 POW 问题的解决方案(主要是通过大规模的反复试验),任何参与者都可以立即证明解决方案的正确性。好的 POW 问题具有统计特性,允许任何观察者可靠地估计在解决方案中消耗了多少计算时间。它们因此适合作为公共区块链(例如比特币)的分布式共识机制。

  • UTXO 模型提供了一个简单的路径来确保事务完整性,并防止在两个单独的事务中使用相同的比特币两次(“双花问题”)。这是通过确保任何事务的输入必须出现在输出集合中——UTXO 数据库来实现的。

  • 相反,虚拟机模型(特别是由以太坊实现)提供了更重大的扩展——能够以无信任且完全分散的方式存储任意状态和在网络内运行简单的程序。

在阐明这些主要定义(以及一些后果)后,现在可以看一下目前使用的一些主要的基于区块链的技术。

比特币

最原始的加密货币,它使用未使用的事务输出(UTXO)模型作为分类帐。它使用简单的 POW 算法猜测随机字符串,这个字符串与最后一个事务区块组合的 SHA-256 哈希值在数值上应该小于一个小的阈值。

成功猜到答案的参与者等于是“挖到了一个区块”,并且该区块中包含的交易被添加到分类帐中。

这样可以形成一种非常简单的确定共识的方法——参与者只需同意最长链应被视为挖掘下一个交易区块的基础。

比特币不是为了智能合约而设计的。因此,可用的功能非常有限,由此产生的功能绝对不是图灵完备的,而是比特币的大多数分析都会忽略它。

因此,最终的系统纯粹是安全加密的分类帐。

除了使用加密签名来验证交易的来源之外,它没有身份语义,并且是完全无信任的。

以太坊

这个分类帐也是基于比特币的一些想法,但模拟了单个全局虚拟机的状态,而不是使用 UTXO 模型。以太坊的关键创新是增加了图灵完备的智能合约能力。以太坊虚拟机(EVM)——一种专门用于在具有智能合约的分布式账本环境中使用的虚拟机。

在以太坊中,程序状态是私有的,属于单个合约地址,并且通过一系列 EVM 字节码指令进行修改,这些指令就是智能合约的内容。

然后,通过聚合每个合约地址的程序状态来得到整体的全局状态。

以太坊网络中所有完整的节点都遵循这个模型规则。它们可以在自己的机器上为任意合约地址状态计算系统状态,只要它们使用了相同的交易(构成以太坊模型中的输入数据),就会得到相同的结果。

由于以太坊使用了全局一致性算法,并且具有全局最新区块的概念,因此以太坊虚拟机的总体交易处理速率受区块生成速率的限制。为以太坊网络添加更多硬件和计算能力并不能使其更快或更强大,只是增强了防篡改性。

使用图灵完备的智能合约可以在网络上添加额外的功能,而不需要所有参与者都知道它们。例如,以太坊网络因此可以发布在以太坊虚拟机中作为附加状态的软件代币。这构成了所谓的初始数字货币发行(Initial Coin Offering,ICO)的基础。

从表面上看,EVM 类似于 JVM 和其他类似的环境,但在一些重要方面进行了不同的设计。特别是 EVM 字节码的设计使得对编译代码的静态分析变得更加困难。对于需要高度透明性和可验证性的执行环境而言,这并不是一个卖点。

底层 EVM 环境也不是特别人性化的编程环境,所以出现了一些可以编译为 EVM 字节码的高级语言。其中,最著名的是 Solidity。

受更多主流编程语言(如 JavaScript 和 Java)的启发,Solidity 语言还融入了可以与以太坊区块链发生交互的新特性。

从某种程度上说,以太坊是其自身成功的牺牲品。它作为 ICO 的首选平台导致了 2018 年初 ETH(以太坊代币)的价格走高。因为以太坊团队本身拥有大量的这种加密货币,导致了很多主要参与者对既得利益的极大兴趣,并希望能够将其变现。

Corda

R3 Corda 使用了 UTXO 模型(与比特币一样),但也将图灵完全的智能合约作为设计的一部分。这些合约表示为 JVM 字节码,附带了可选的用于限制合约语义的确定性保证。

这个方法不使用单个全局锁来控制分类帐状态的提升,而是允许执行不冲突的事务。这让锁定变得更加细粒,代价是需要更复杂和更微妙的时间和时钟概念。在 Corda 模型中——简单的“最长链者赢”规则不再适合作为一致性算法。

参与者是可知的而被信任的,因为第三方身份验证是 Corda 架构的组成部分。

因为致力于消除全局分类账锁,Corda 提供了退出 / 进入语义,用于解开主链中的交易,并防止所有交易随着时间的推移缠绕在一起。这是有可能发生的,因为该架构强烈依赖于受信任的第三方模型。

因此,某些参与者撤销分类账项目并将其替换为没有交易历史记录的等价物的权力可以得到身份当局的保证。

Corda 的创建者并不认为它与加密货币类似。

相反,他们认为这项技术是整个市场层面(而不是单个公司)共享基础设施的基础。

这使得 Corda 成为企业可以从公共基础设施和世界状态共享视图中受益的企业区块链,不需要维护单独的记录版本,因为这样不可避免地需要进行协调。

HyperLedger

由 IBM 发起的 HyperLedger 项目是另一个领先的企业区块链解决方案。

Hyperledger Fabric 是一个区块链框架实现,是 Linux 基金会托管的 Hyperledger 项目之一。

IBM 对该项目的主要设计目标包括机密性、弹性、灵活性和可扩展性。

与 Corda 一样,Hyperledger 使用了许可架构。

它实现了确定性拜占庭容错(Practical Byzantine Faul Tolerant,PBFT)算法,该算法可以确保一旦收到交易完成通知,交易就真的完成了。

IBM 已经在与 Docker 的集成上进行了大量投入,包括在容器内测试。

Hyperledger 的智能合约可以用 Java 编写,并提供了专门的 SDK(使用 Go 语言编写合约也是有可能的)。

Hyperledger 按照角色来分隔节点,这些节点包括完整的对等方、证书颁发机构节点(权限所需)和将交易分组为区块的开证申请人。

Hyperledger 区块链状态被建模为版本化键值存储(KVS),其中键是名称(字符串),值是任意的二进制对象。

这是一个非常底层的接口,Hyperledger 在其上面提供了一个叫作 Ledger 的层,它为所有的成功状态变更提供了可验证的历史记录。

Hyperledger 的代码和架构仍在快速演化,实际的生产环境试验也开始出现了,并且它与 Corda 一起成为更可能被企业使用的解决方案之一。

用例

区块链的使用案例仍存在激烈的争议。

抗审查数字货币就是一个非常明显的例子。

不过,2018 年加密货币市场的波动性和分散性似乎表明,无信任数字货币的实际适用性非常有限。

从企业的角度来看,很明显它们也可以用于创建系统或网络,这些系统或网络作为多个实体之间的共享构造,这些实体不一定相互信任,但希望共享数据并对所有各方都关心的问题保持某种共识。

这类集中授权对于参与者来说是不可接受的或者设置成本太高的用例仍然在出现。

2019 年,随着越来越多的项目进入市场,区块链是否能够像其倡导者已经承诺的那样带来长远的重大影响还有待观察。

关于作者

Ben Evans 是 JVM 性能优化公司 jClarity 的联合创始人。他是 LJC(伦敦 JUG)的组织者,也是 JCP 执行委员会成员,帮助定义 Java 生态系统的标准。Ben 是 Java Champion,3 次获得“JavaOne Rockstar Speaker”,“The Well-Grounded Java Developer”、新版“Java in a Nutshell”和“Optimizing Java”的作者。他是 Java 平台、性能、架构、并发、初创公司和相关主题的演讲常客。

查看英文原文:

https://www.infoq.com/articles/blockchain-basics-use-cases

评论

发布