区块链基础设施纵览:存储、计算和通信

简介:

92846553a72743bd5d77fbb367a76f059556fa1b

策划|Tina编辑|王强 区块链前哨导语:  以太坊、IPFS/Filecoin 和 BigchainDB 之间是怎样的关系?Golem、Polkadot 或 Interledger 又是什么情况?我经常被问到诸如此类的问题,所以决定写下这篇文章。本文聚焦于区块链的大框架:介绍区块链中各个计算元素的模块以及各个模块的一些实现案例。

更多干货内容请关注微信公众号“区块链前哨”,(ID:blockchain-666)

以太坊、IPFS/Filecoin 和 BigchainDB 之间是怎样的关系?Golem、Polkadot 或 Interledger 又是什么情况?我经常被问到诸如此类的问题,所以决定写下这篇文章,从基本框架层面回答这些问题。

简单来说:并不存在名为“区块链”的无所不能的神奇系统。相比之下,倒是有很多优秀的计算构件块,可以组合起来创建实用的去中心化应用。以太坊可以充当此类角色,此外还有很多类似的选择。接下来具体分析。

a1c664b25b5e8109c005104c7d922b7448f4446e

构成计算技术的基本元素是存储、处理和通信。大型主机、PC、移动设备和云服务都以各自的方式展现这些元素。各个元素之内还有专门的构件块来分配资源。

例如,在存储元素内,既有文件系统也有数据库。文件系统使用目录文件的层级结构存放 mp3 这样的 blob(二进制大对象)数据,而数据库用来存放结构化的元数据,使用 SQL[1] 这样的查询接口。在中心化的云平台上,我们可能使用 Amazon S3 服务存放文件,用 MongoDB Atlas 运行数据库,并使用 Amazon EC2 处理运算需求。

本文聚焦于区块链的大框架:介绍区块链中各个计算元素的模块以及各个模块的一些实现案例,偏向概论而非详解。

3b90878e43cee12ccfa1f9a24dd1ecd485dac64e

以下是去中心化技术中各个计算元素的构件块:

  • 存储:代币存储、数据库、文件系统 /blob

  • 处理:有状态的业务逻辑、无状态的业务逻辑、高性能计算

  • 通信:数据、价值和状态的连接网络

a54e0d7600c64e4e55f87ab0ee01662aa965150c

区块链技术体现在每个模块中,如下图所示 [2]:

2f6e621e44710cd27e0d5b4026a05885a98033e9

作为基本计算元素,存储部分包含了以下构件块。

代币存储。代币是价值的存储媒介(例如资产、证券等),价值可以是比特币、航空里程或是数字作品的版权。代币存储系统的主要作用是发放和传输代币(有多种变体),同时防止多重支付之类的事件发生。

比特币和 Zcash 是两大“纯净”的、只关注代币本身的系统。以太坊则开始将代币用于各种服务,以实现其充当全球计算中心的理想。这些例子中代币被用作运营整个网络架构的内部激励。

还有些代币不是网络用来推动自身运行的内部工具,而是用做更高级别网络的激励,但它们的代币实际上是存储在底层架构中的。一个例子是像 Golem 这样的 ERC20 代币,运行在以太坊网络层上。另一个例子是 Envoke 的 IP 授权代币,运行在 IPDB 网络层上。

最后我用“.*”来说明大多数区块链系统都有一套代币存储机制。

数据库。 数据库专门用来存储结构化的元数据,例如数据表(关系型数据库)、文档存储(例如 JSON)、键值存储、时间序列或图数据库。数据库可以使用 SQL 这样的查询快速检索数据。

传统的分布式(但中心化)数据库如 MongoDB 和 Cassandra 通常会存储数百 TB 甚至 PB 级的数据,性能可达到每秒百万次写入。

SQL 这样的查询语言是很强大的,因为它将实现与规范区分开来,这样就不会绑定在某个具体的应用上。SQL 已经作为标准应用了数十年,所以同一个数据库系统可以用在很多不同的行业中。

换言之,要在比特币之外讨论一般性,不一定要拿图灵完备性说事。你只需要一个数据库就够了,这样既简洁又方便扩展。有些时候图灵完备也是很有用的,我们将在“去中心化处理”一节具体讨论。

BigchainDB 是去中心化的数据库软件,是专门的文档存储系统。它基于 MongoDB(或 RethinkDB),继承了后者的查询和扩展逻辑。但它也具备了区块链的特征,诸如去中心化控制、防篡改和代币支持。IPDB 是 BigchainDB 的一个受监管的公开实例。

在区块链领域,也可以说 IOTA 是一个时间序列数据库。

文件系统 /blob 数据存储。 这些系统以目录和文件的层级结构来存储大文件(电影、音乐、大数据集)。

IPFS 和 Tahoe-LAFS 是去中心化的文件系统,包含去中心化或中心化的 blob 存储。FileCoin、Storj、Sia 和 Tieron 是去中心化的 blob 存储系统,古老而出色的 BitTorrent 也是如此,虽然后者使用的是 p2p 体系而非代币。以太坊 Swarm、Dat、Swarm-JS 基本上都支持上述两种方式。

数据市场。 这种系统将数据所有者(比如企业)与数据使用者(比如 AI 创业公司)连接在一起。它们位于数据库与文件系统的上层,但依旧是核心架构,因为数不清的需要数据的应用(例如 AI)都依赖这类服务。Ocean 就是协议和网络的一个例子,可以基于它创建数据市场。还有一些特定应用的数据市场:Enigma Catalyst 用于加密市场,Datum 用于私人数据,DataBroker DAO 则用于物联网数据流 [2]。

7d4b83bf5458bac00d55a5544f993c236e93c08e

接下来讨论处理这个基本计算元素。

“智能合约”系统,通常指的是以去中心化形式处理数据的系统 [3]。它其实有两个属性完全不同的子集:无状态(组合式)业务逻辑和有状态(顺序式)业务逻辑。无状态和有状态在复杂性、可验证性等方面差异巨大。第三种去中心化的处理模块是高性能计算(HPC)。

无状态(组合式)业务逻辑。 这是一种任意逻辑,不在内部保留状态。用电子工程术语来说,它可以理解为组合式数字逻辑电路。这一逻辑可以表现为真值表、逻辑示意图、或者带条件语句的代码(if/then、and、or、not 等判断的组合)。因为它们没有状态,很容易验证大型无状态智能合约,从而创建大型可验证的安全系统。N 个输入和一个输出需要 O(2^N)个计算来验证。

跨账本协议(ILP)包含 crypto-conditions(CC)协议,以便清楚地标出组合电路。CC 很好理解,因为它通过 IETF 成为了互联网标准,而 ILP 则在各种中心和去中心化的支付网络(例如超过 75 家银行使用的瑞波)中广泛应用。CC 有很多独立实现的版本,包括 JavaScript、Python、Java 等。BigchainDB、瑞波等系统也用 CC,用以支持组合式业务逻辑 / 智能合约。

Bitshare 和 Eos 也支持无状态业务逻辑。

因为有状态逻辑是无状态逻辑的超集,支持有状态逻辑的系统也自然支持无状态逻辑(但代价是增加复杂性,可验证性方面也要考虑更多问题)。

BigchainDB、Bitshares、Eos 还支持事件。它提供了一种持久的层级,使功能更接近有状态的业务逻辑(感谢 Ian Grigg 指出这一点 [2])。

有状态(顺序)业务逻辑。 这是一种在内部保留状态的任意逻辑。也就是说,它有记忆,或者说它是一种带有至少一个反馈回路(和一个时钟)的组合逻辑电路。例如,一颗微处理器有一个内部寄存器,根据发送给它的机器码指令进行更新。更一般地说,有状态的业务逻辑是一个图灵机,接受一系列输入并返回一系列输出。有这种(实际近似)表现的系统被称为图灵完备系统 [4]。

以太坊是最知名的使用有状态业务逻辑 / 智能合约的区块链系统,其智能合约直接在链上运行。Lisk、RChain、DFINITY、Aeternity、Tezos、Fabric、Sawtooth 和很多其它系统也有智能合约。运行“在某处”的代码是个强大的理念,有很多使用场景。这也能部分解释为什么以太坊一飞冲天,为什么它的生态系统如此兴旺,以及为什么会有这么多竞争者在这一领域崛起。

因为顺序逻辑是组合逻辑的超集,这类系统也支持组合逻辑。

正如 DAO 黑客所示,代码中的小错误可能导致严重后果。芯片产业采用的形式化验证也能在这里发挥作用,以太坊基金会正在这方面做出努力。但它有规模限制:对于组合电路,可能的映射数量最多有 2^(输入数量)种。对于时序电路,内部状态的上限是 2^(内部状态变量的数量),前提是内部的变量都是布尔值。例如,对于一个带有 3 个输入的组合电路,它有 2^3=8 种可能的状态供验证。但如果它是一个带有 32 位寄存器的时序电路,要完整验证就要检查 2^32=42 亿种状态。这一限制约束了时序电路的复杂程度(如果要保证可信度)。“按结构修正”是另一种验证有状态智能合约的手段,比如 Rchain 使用的 rho 微积分。

如果需要去中心化的处理,很多场景下有个更简单的方法:只要把处理过程放在客户端一侧,运行在浏览器或移动设备中,用 JS 或 Swift 代码编写就行了。这个时候就要信赖客户端的处理过程,如果设备是你自己控制的那就没什么问题。我们把它叫做“胖客户端”,是相对于“胖协议”架构来说的。这种体系对主流 web 开发者很友好。例如,很多 web 应用需要用到应用状态。要开发这样的系统只需要用到 JS+IPDB(使用 js-bigchaindb 驱动)。如果你的应用也需要 blob 存储和支付功能,就再加上 JS 的 IPFS 客户端版本(ipfs.js)和以太坊版本(web3.js),比如:

d52de65c8af973a5e8db45fa47e18082b28c78fa

高性能计算(HPC)。 这是一种处理“重负载”计算任务的过程,诸如渲染、机器学习、电路模拟、气象预报、蛋白质折叠等任务都是这种类型。这类计算任务往往花费几个小时、甚至数周时间,运行在整套机器集群上(CPU、GPU 甚至 TPU)。

这些方法可以让 HPC 去中心化:

  • Golem 和 iEx.ec 可以用来组成去中心化的超级计算机及相关的应用框架。

  • Nyriad 可以组成存储处理框架。基本上这个处理过程与中心化的存储是放在一起的(Nyriad 也有适合后者的方案)。

  • TrueBit 实现第三方计算,并进行后期计算检查(空闲时进行隐式检查,出现问题时进行显式检查)。

  • 有些人只是用 VM 或 Docker 容器执行复杂的计算任务,将结果(VM 最终状态或单纯的计算结果)放到 blob 存储里,只提供有限的访问权限。然后他们把存储访问授权卖给容器使用者,比如代币读取权限。这种方式需要更多客户端来验证结果,好处在于技术都很成熟。当 TrueBit 成熟后,这种方法自然会与其融合。

bc7c64c6b3c715ba8ed8e05ef6cce1754769c683

这一节我们会谈到第三个也是最后一个基本的计算元素,通信。描绘通信框架的方法很多,我会重点介绍网络连接。它有三个层级:数据、价值和状态。

数据。60 年代,ARPA.net 诞生了。它的成功催生了一系列类似的网络,诸如 NPL 和 CYCLADES。新的问题随之出现:它们无法互相交流。Cerf 和 Kahn 在 70 年代发明了 TCP/IP 来连接这些网络,创建一个网络组成的联网系统,也就是今天我们熟知的 Internet。TCP/IP 是当今网络连接的事实标准。OSI 协议栈曾经是它的竞争对手,但很早就消亡了;然而讽刺的是,OSI 的模型被证明是有用的。于是,虽然 TCP/IP 历史悠久,但它仍然是连接网络数据的去中心化构件。

Tor 项目可以被视为 TCP/IP 的上层,用来保护用户的隐私。然而它有很多中心化的特点,更不要说它获得了国防部的资助,令很多人不满。代币化的类 Tor 项目正在兴起,可以拭目以待 [2]。

价值。TCP/IP 只在数据层连接不同网络。你可以复送分包——将一个分包一次发送到很多目的地——也无所谓。但如果要在网络中发送价值时,该怎样连接网络呢?比如比特币到以太坊,乃至 SWIFT 清算网络到瑞波 XRP 网络。你需要代币能一次只发送到一个目的地。防止重复发送的一种联网方式是使用汇票,但这种做法往往消耗很多资源。但是,我们可以只保留汇票的核心要素,抛开信任中介,使用密钥托管。爱丽丝可以通过马洛里向鲍勃汇款,款项经过马洛里之手但他不能动用(并且有期限约束,马洛里不能一直占着款子不放)。这就是跨账本协议(ILP)的核心要素。这也是双向挂钩(想想侧链)和状态管道(比如 Lightning 和 Raiden)的理念;但重点完全在于为价值交换连接网络。除了 ILP,Cosmos 等系统会更复杂一些,以换取更多便利。

状态。 除了连接价值网络,我们能否更进一步?想象一个计算机病毒,其带有自己的比特币钱包,可以在网络间跳转;或者以太坊主网中的一个智能合约,可以将其状态转向另一个以太坊网络乃至另一个兼容网络?或者,为什么将 AI DAO 局限在单一网络中?

于是诞生了 Polkadot,用来连接网络的状态。Aeternity 也介于价值网络和状态网络之间。

78d2a7ae962dd26361e2189c81cb7bb76121fc65

现在我们研究了三大计算元素(存储、处理、通信),探讨了每种元素的去中心化构件,以及每种构件的项目实例。

人们开始发展组合式的系统。有很多由两种构件组成的模式,通常使用 IPFS+ 以太坊或 IPFS+IPDB。甚至有人使用三个或更多的模块组合。以下是一些前沿案例:

  • Ujo 使用 IPFS|Swarm+IPDB+ 以太坊,用于去中心化音乐网络。IPFS 或 Swarm 用在文件系统和 blob 存储上。IPDB(和 BigchainDB)用于元数据存储和查询。以太坊用于代币存储和有状态业务逻辑。

  • Innogy 使用 IPFS+IPDB+IOTA,用于供应链 / 物联网应用。IPFS 用于文件系统和 blob 存储。IPDB(和 BigchainDB)用于元数据存储和查询。IOTA 用于时间序列数据。

1dc4989dd58eb2332b2ebcf8b6459d5ac242fbb5

以下是区块链社区其他研究者的相关框架,我很高兴能与他们进行很好的交流。

Joel Monegro 的“胖协议”框架强调每个构件都是一个协议。我觉得这是一个很酷的框架,尽管它要求构件之间只能使用网络协议交流。还有一种方式:模块可以简单地成为“导入”语句或库调用。

使用导入的原因可以是为了 (a) 更低的延迟:一个网络呼叫要花费时间,可能影响乃至破坏可用性;(b) 简洁:使用库调用(乃至嵌入代码)往往比连接到一个网络、支付代币等更简单;(c) 更加成熟:协议栈才刚刚兴起。我们有历史数十年之久的优秀 Unix 库,甚至 Python 和 JS 模块也有 15 年以上的历史。

Fred Ehrsam 的“Dapp 开发者协议栈”强调 web 商业模式。虽然它很有帮助,但它不是要针对给定计算元素(比如文件系统与数据库)在模块之间进行细化区分的。

BigchainDB 白皮书(最早发布于 2016 年 2 月)第一部分展示了其早期版本的形态,如下所示:

fe7d642a636ec751b744d1c2715800c725de9fc1

它关注于处理、文件系统和数据库这几大构件。它没有使用“计算元素”的框架,没有区分去中心化处理的类型。本文是我在过去一年半根据这份白皮书进一步思考的成果;我在 5 月 22 日在 Consensus 2017 上的演讲进一步补充了我的观点,与本文内容很接近。(我写这篇文章的部分原因是很多人请我将这些思考化作文字)。

该图还指出了一个频谱,最左边是完全的中心化,最右是完全的去中心化。这有助于将已有的软件系统升级为更加去中心化的形式,将最有必要升级的模块优先去中心化。

Stephan Tual 的“Web 3.0 重构”堆栈与本文的思想基本一致,只不过更偏重于以太坊。它为社区提供了很好的服务,用一张映射图将很多项目归类到相似的构件中。我惊喜地意识到它与我的思想非常相似。不过它的应用服务模块层(消息模块、存储模块、共识模块、管理模块……)实际上将三种事物混合在一起:应用、“是什么”和“怎样做”。对我而言,模块应该是“是什么”的类别。所以消息是一个应用(应该在应用层);存储应该更加细粒化;共识是“怎样做”的部分(隐藏在一些模块里);管理也是“怎样做”的部分(所以也该隐藏起来)。它也有“网络”协议,用作单独的底层模块,不过我将它们视为模块间交互的一种可行方式,与库调用类似。不管怎样,我认为这是非常出色的堆栈。

Alexander Ruppert 的“映射去中心化世界”有大约 20 类组织,x 轴有四个高级类,依次是基础设施层、中间件层、流动层、应用层。这也是很棒的部分;我很高兴能帮助 Alex 做出这个映射。它对核心基础设施着墨不多,更注重广泛的趋势;而本文主要写的是核心基础设施的框架原则。

8092408c64581a45fea1f1bab81044367e239edc

Ujo 这样的系统将很多模块合并在一起,诸如 IPFS 或 Swarm(用于 blob)+ 以太坊(用于代币和业务逻辑)+IPDB 和 BigchainDB(用于可快速查询的数据库),所以综合了所有系统的优点。

我希望随着人们更好地理解构件之间的关系,这种趋势也会随之加速。这也比把所有东西都塞入名为“区块链”的单一框架更有效率。

我希望这一理念随着去中心化生态系统一起继续进化。AWS 一开始只有一种服务:为 blob 存储提供的 S3 服务;之后它有了处理服务:EC2;它继续进化。AWS 现在有 50 多个模块,当然其中少数模块依旧是最关键的。下图列出了 AWS 的所有服务。

204ef9f6342d064e1fee48690adf6cec9a98dd7e

我发现类似的故事正在去中心化世界上演。初看起来,我们可以设想每一个 AWS 模块的去中心化版本。但也会有不同点,因为每种生态系统(云、移动、去中心化)都有自己的特定模块,比如去中心化的代币存储。这将是很有趣的旅程!

 注释

[1] 其实我们可以进一步对这些构件进行分级。例如数据库是在文件系统之上的。后者则在原始数据(blob)存储之上。分布式数据库推动通信发展。例如,多数现代数据库使用 Ext4、XFS 或 GridFS 等文件系统与底层存储。本文中我给出的框架是应用开发者的视点:文件系统的 UX 是什么,数据库的 UX 是什么,等等。

[2] 2017 年 8 月我在此加入了一些新内容。

[3] 我从未真正喜欢过“智能合约”这种说法。在 AI 语境下它们并不算智能。它们也和”合约“这个法律概念没有关系。如果它们的确包含法律元素,它们通常会加上状态,比如说用 Ricardian 合约。”去中心化处理“的称谓和其中的”去中心化业务逻辑“更加合理。不过现在“智能合约”的叫法如此普及,就这么叫也可以。相比纠结称谓,我们有更有意义的事情要做。

[4] 这里我提到的“图灵完备”是实践层面的,不是纯粹理论层面的。理论上,机器根据输入数据及其当前内部状态返回一系列输出数据;但实践上,机器无法永续运行,无法解决“机器何时停止”的问题(停止问题)。




原文发布时间为:2018-03-27
本文作者:大框架
本文来源:微信公众号-区块链前哨,如需转载请联系原作者。

目录
相关文章
|
传感器 存储 安全
区块链技术在物联网中的应用:去中心化的设备通信
在物联网(IoT)领域,设备之间的通信和数据交换是至关重要的。然而,传统的中心化通信模式面临着一些挑战,例如单点故障、数据安全性和可信度等问题。这时候,区块链技术的引入可以提供一种去中心化的解决方案,以增强物联网设备之间的通信和数据交换的安全性和可靠性。
700 1
|
存储 网络协议 前端开发
红帽的ipa-server:区块链中端开源测试基础设施
红帽的ipa-server:区块链中端开源测试基础设施
|
边缘计算 人工智能 资源调度
阿里云新品发布会周刊第80期 丨 基于区块链技术的通信授权服务新品发布会
为保障用户权益,进一步遏制骚扰电话,阿里云通信、蚂蚁链正式推出通信授权服务。那么通信授权服务到底是什么?有哪些功能优势以及应用场景?阿里云通信和蚂蚁链的产品专家将于12月9日下午14点在阿里云新品发布会直播间为您揭秘!
3678 0
阿里云新品发布会周刊第80期 丨    基于区块链技术的通信授权服务新品发布会
|
新零售 安全 区块链
【预告】阿里云新品发布会第118期:基于区块链技术的通信授权服务
在互联网时代,用户的知情权、选择权和安宁权等各类权益十分重要,如何进一步遏制骚扰电话,保障用户权益?阿里云将于12月9日正式发布通信授权服务,利用区块链分布式、不可篡改等特性,确保用户在授权合约期内,企业联系用户的合法性。
2666 0
【预告】阿里云新品发布会第118期:基于区块链技术的通信授权服务
|
人工智能 安全 Java
【云周刊】第186期:阿里云正式发布区块链服务,只做基础设施不做应用
阿里云正式发布区块链服务,只做基础设施不做应用,阿里云在重庆智博会上的7大“重磅发布” ,“神经网络”时代即将到来 ..更多精彩内容,尽在云周刊!
5183 0
蚂蚁金服总裁胡晓明:区块链是数字经济的信用基础设施
在充满变化的数字经济时代,金融科技会是什么样?蚂蚁金服总裁胡晓明给出了他的观点:“唯一不变的是,技术创新在未来物理世界中将发挥越来越大的作用,这是科技给金融带来最大的变量。”
|
存储 安全 大数据
区块链开发公司谈区块链技术的信息存储
  区块链使用了协议规定的密码机制进行了认证,保证不会被篡改和伪造,因此任何交易双方之间的价值交换活动都是可以被追踪和查询到的。   如果想要在区块链中修改“账本记录”,需要把整个链条上的加密数据进行破解和修改,其难度相当大,这是区块链的结构所决定的。
1590 0
|
存储 区块链 数据库
区块链应用 | 区块链膨胀:以太坊客户端如何解决存储问题
随着存储的时间和金钱成本的增加,选择运行完整节点的人越来越少,许多人担心这将导致以太坊网络的寡头化。
1111 0