链上,链下?

zzzhang   |     |   519 次阅读


这个问题,将成为未来软件工程的核心议题。

几天以前,雷电网络(Raiden Network)以其状态通道(State Channel)运行的开发者预览给了我们一个惊喜。这一技术非常之激动人心,并且它是多个旨在为以太坊(Ethereum)带来可扩展性解决方案的多个重要项目之一。雷电网络专门通过将链上交易分流和给予人们工具进行链下沟通来做这件事。虽然这些文字对你来说可能听起来很复杂,但我可以保证这里80%以上的复杂任务已经被雷电团队着手承担了起来。祝贺他们!要阐明这一链上/链下的范式,一如说明其权衡之处那样,我将解析状态(State)的概念并给出雷电网络如何给我们提供一个链下得益的例子的解释。那么,让我们从讨论区块链技术本身之所以重要的理由开始吧。

对状态的普遍接受

如果你已经对阅读以及/或者理解这一概念失去兴趣,请跳过这一部分,我个人也非常希望不用讨论它。

区块链为我们提供了分布式账本技术(Distributed Ledger Technology,DLT)。如果我们拆开这些词语,这一术语就会更容易被理解。

分布式

一个分布式系统就是一个将它的所有信息分享给每一个参与者的系统,并且不论你是谁,每个人都是平等的参与者。此外,每一个参与者都能够获取所有信息,这个“能够”就是分布式系统与其他系统区分开的地方,因为并非所有参与者都需要所有信息,但无论什么时候他们需要,它就在那里。一个完全分布式的系统就是一个拥有透明的网络协议的系统,这一协议给予每一个参与者以高度的确信:所有信息都是可用的。移开你的视线以前,请看三遍这段文字。

账本

账本就容易理解多了因为从我们这个物种懂得写字开始,我们就一直在用某种方式、形状或说形式使用它们。账本仅仅是对什么是什么或者其状态的记录。幸运的是,如果你还不了解“状态”的含义,你可以凭借寥寥数语就让“状态”的概念萦绕你的脑海。比如说,一个会计帐簿,记录钱被分配到了哪里,也就是钱的状态。

如果你看着你的银行账户余额然后看到了1美元,那么,该价值的状态,或说位置就在你的银行账户上。

谁说的?

银行说的。

那谁告诉那银行的?

无论哪个人或者哪个组织发送了一条信息,既包括电子化地通过一笔直接的转账、也包括通过一张签名的支票、还包括手动交付一笔由政府背书的纸币,给了银行说那1美元是你的。

那银行如何知道那1美元的状态在初始状态下为那个人或者那个组织所有呢?

因为物理(支票)或者电子(直接转账)的信息是由其他银行或者你的银行信任的结构背书的。

那银行又怎么……?

好了好了,可以停了。

分布式账本技术

这时候你可以看到,一群人和一些组织之间存在大量的信任,它使得传统的会计账本得以运作。那么当你拥有某些存在于这一由被信任的“节点”组成的传统网络之外的价值的时候,会发生什么事?一般来说,他是没有价值的,直到你将它带进这个网络。技能,比如说,是没有价值的,除非你可以用它们来产生现金流。这不仅要求你能够进入一个被信任的网络,该网络还需要充分理解你想要交易的东西的价值。但是,所有这些信任是必须的吗?

如果我们回顾上文中的分布式系统,我们就会想起来,这一系统提供给每个参与者以高度的确信:所有信息都是可用的。好吧,如果所有信息都已经是可用的了,你就不再需要一个受信任的“节点”来跟踪账本。同样的账本存在于每一个节点,包括你的账本;每一个其他节点都确信事实就是他们都拥有账本。因此,你得到了一份对状态的普遍接受。

最终权威

既然我们已经确信我们有能力获得所有在这一分布式的系统中可得的信息,我们也就可以信任传递给我们的变化。任何时候当一个参与者试图改变某些东西,它都将传递给我们中的每一个人;而且,我们将都同意通过规定好的协议来认可这一改变。把我们的共识想成最终权威吧。这听起来很棒,但也暴露出一个小问题:发送每一个交易给每一个参与者同时要求每一个参与者记录每一个交易。这个协议有一个局限,即便是在电子世界里。

要解决这个问题,我们需要思考:在我们传统的、受信任的框架中我们用什么作为最终权威。
当我们给我们的资产做了一个大调整,比如购买一栋房子,买一辆车,或者签署一份重要的合同,我们有一个某种类型的公正的第三方见证者,比如说一个公证人。这一机制为你和你的交易对手提供了一个高度的确信:受信任的网络将承认这一状态的变更。

但是当我们到杂货店去、或者在一个餐厅购买食物的时候,我们有一个公证人跟着我们吗?在一个受信任的网络中我们有多经常在实际上用到第三方机制?并不经常,因为事情会一下子变得很昂贵而且很麻烦。日常交易的最终权威仅仅是…一个签名。

如果发送交易到一个分布式系统等同于一个第三方见证人,那么什么东西等同于以仅仅一个签名来发送交易呢?答案是链下交易(off-chain transactions)

私钥与链下交易

现在你也许在问,如果我们在链下发送交易,其他人如何在不使用区块链的情况下验证我发送了一笔有效的交易?不是说,整个分布式系统的关键是每个人都有获得所有信息的渠道吗?可是,没有这个你也就没有一个合适的价值追踪系统了,对吗?

这并不是说这个逻辑是错的,这只是说我们必须通过一个不同的角度来看这整个事情。一个我们没还未细究的元素是:这些居于分布式系统中的节点是如何知道他们收到一个有效的变更请求的,换个不同的说法就是,一个有效的交易。

创造一个有效交易的过程牵涉到使用公钥组/私钥组的密码学。这也是我们如何得到“加密货币”这个名字的。简单来说,在区块链使用的密码学系统中,每一个公钥都拥有唯一一个匹配的私钥,而且,反之亦然。我们使用公钥作为我们在这个系统中的公共地址而私钥是没有其他人知道的唯一签名,因此也是私密的。此外,任何一个由一份私钥“签名”的交易都被证明是被相关联的公共地址发送的。

希望这个简单的解释足以让你理解“我们如何在不使用区块链的情况下创造交易”。创造一个有效交易的过程是独立于使用区块链来记录交易的过程的。所以这可以为我们做什么呢?我们如何能够在一个分布式系统中改变“最终权威”以减少工作量并且使用这一方式来提高可扩展性呢?

结合起来

现在我们有了到位的知识块来建立我们对状态通道(state channel)和像雷电网络(Raiden network)这样的项目的理解。我们在上文中学到的一个东西是:我们可以确实地在我们的分布式账本中创造一笔将会改变状态的交易,如果我们发送它的话。此外,在前两个部分,我们知到了:为了一个最终权威的认可而发送所有变更到区块链上是非常麻烦的,类同于让一个公证人跟着我们转一整天,而且每天如此。

所以,现在,车要开起来了,让我们把一个扩展性的解决方案投入到区块链的瓶颈中。如果你懂的银行支票是怎么运作的,那这件事应该会比较简单,如果我因为提及支票而跨过了特定的边界,而你又不懂它们是怎么工作的,你可以关注这个解释支票的维基链接。(对我来说也是有意思的。)

假设,你想在以太坊(Ethereum)网络上发送一些token化的资产给另一方。token化,我的意思是,你已经成功地在以太坊上表示你的资产,今天是ERC20 token,明天可以有更好的机制。另一方同样与这一革命性的分布式账本合拍,因此乐于接受你的作为token的资产。你知道关于这一资产会有多个交易往来,并且希望减少交易费用,以便不必为每一笔在主网上的交易支付gas,而且你同样希望快速地完成它以避免区块链瓶颈。我们怎样达到预期呢?

雷电网络的状态通道允许你从以太坊的主网上抓取你的资产的状态,“储存”在一个你与你的交易对手的直接通道上。该网络可以读懂交易底层的密码学方程,来验证由你的私钥签名的交易。因为我们知道,发送交易到区块链是一个独立于发送可验证变更的过程,你可以发送一个签了名的交易而无需发送它到链上,这不是传递到主网上的实际资产,这是一个对你转移这个资产的意图的可验证的表现。

你的交易对手,已经通过跟你一同加入状态通道而认同了这一资产的初始状态,现在有了一个签了名的交易,一旦该变更被发到主网上,资产就可以被转移。知道了所有区块链上的信息都是可得的,而且拥有了来自你的交易伙伴的签了名的交易,这提供了必要的确信:你现在可以拥有它就如同状态通道已经在主网上实际发生了。做到这个事情的能力是可以重复的,上百万次,从不需要告诉区块链。

这就完全没有隐患吗?

如果我发送并且收到了来自你的支票,我的激励在哪里?抛开所有信任与伦理,我的动机是保持所有这些显示了你给我发送资产的交易,并在所有我给你发送资产的交易上下赌注。但是,在合作性博弈论中,你拥有完全一样的激励。风险在于双方都能够发送最终状态给最终权威,以太坊主网。

目前,雷电网络的开发者工具允许一个超时处理的时间,该时间可以在开启一个状态通道的时候被定义。当一方选择关闭,另一方拥有超时处理窗口以从他们的结果中完成和关闭。这时候,最终状态呈上最终权威。

这只触及到了表面上非常薄的一个顶层。这也没有谈及通过网络间接连接着你的其他各方之间的交易,同样没有说明在token之外它将如何影响状态的变化。Majoolr正在积极地设计,而雷电,在我们即将发布的工具箱中,还只是另一个工具。如果你需要安全咨询,评论,或者智能合约,请联系我们或者我们的伙伴们。如同以太坊本身,雷电仅仅是一场壮丽的科技革命的开始。


原文链接: https://medium.com/@hackdomETH/on-chain-or-off-chain-1bef4238a3a0
作者: C. Brown
翻译&校对: Elisa & 阿剑

 
0 人喜欢