阿朵 vs. 竞争, Pt. 7: 以太坊 (智能合约)

本文是将阿朵与具有类似功能或目标的其他区块链项目,进行比较的系列文章的一部分。你可以在这里找到以前的帖子:

本周我研究了以太坊,这可能不需要介绍。

对于我在整个系列中所研究的几个项目,都很难找到详细的技术资料。以太坊却完全相反:有太多的信息可供选择,以至于,如果不简化重要内容,很难把它提炼成一篇合理长度的文章。

出于这个原因,我只选择了以太坊的两个方面来和Ardor进行比较。本文将以太坊智能合约与Ardor的智能交易,下一篇文章进行比较两个平台对管理区块链膨胀的做法。我希望涵盖更多的话题 – 转移到股权证明(Casper)的计划,其国家通道战略(雷电和等离子),通过企业以太坊联盟与大公司的合作关系,并对以太坊上面运行的项目进行抽样,但是即使是以令人满意的深度讨论这些话题也是一项艰巨的任务。此外,我选择的两个平台之间最有趣的两个主题进行比较和我的看法(请参阅上面链接的Ardor与等离子帖子,关于等离子体的一些想法)。

长话短说,我们来谈谈智能合约。

智能合约和“丰富状态”

以太坊的设计结合了比特币和Nxt的元素,并添加了几个新颖的功能。和比特币一样,以太坊使用低级脚本语言来编码交易,并将每个区块的内容存储在Merkle树中,这些树的根哈希值被记录在区块头信息中(在下一篇文章中对此进行了详细介绍)。而像NXT,它跟踪当前账户余额和其他特定帐户数据的状态而不是直接使用比特币的仍然有效的交易输出(UTXO)模型。

最重要的创新是以太坊增加的双重混合:在所谓的“合约账户”中存储脚本(契约)的能力,这些合约账户是自动交易而不是由用户控制的; 以及保留从一个交易到下一个交易的账户数据的能力。以太坊的脚本语言也比比特币的语言更强大,允许合约包括循环和调用其他合约。

结合这些思想,可以创建有状态的“智能合约”,这些智能合约是位于合合约账户中的代码和数据,作为自主代理,监听用户和其他合同的输入,并根据合约代码中定义的规则与它们进行交易。上一句中的“有状态”修饰语是至关重要的:因为智能合约可以拥有自己的内部状态,所以一个交易可能会影响后续交易的处理方式。这与比特币的模式有很大的不同,在这种模式下,交易脚本只执行一次,而脚本可用的“状态”的概念基本上局限于给定的输出是使用还是未使用。

(您可能已经注意到,我没有说过图灵完整性的事情。根据你的感觉,你可能会争论以太的脚本语言是否真的完成了。正如这个优秀的视频所讲的那样,不管怎样,图灵的完整性还是有点像红鲱鱼招股书,更重要的是智能合约是有状态的,可以以有趣的方式与用户进行交易。

智能合约的潜在应用远远超出了从一个账户向另一个账户转账的条件。即使是原始的白皮书(顺便说一句,这是一个很好的读物)提出了一些非财务用途,包括文件存储,投票,分布式计算,分散组织管理和去中心化的市场。从那以后,开发者也发现了很多其他的应用程序,比如去中心的消息传递。当然,迄今为止,以太坊最常见的应用,似乎以压倒性的优势,为各种项目进行代币销售。

阿朵的“智能交易”

如果一个应用程序名字听起来很熟悉的话,那可能是因为它们中的一个已经在Nxt和Ardor作为预先打包的“智能交易”中实现了。由Ardor的前辈Nxt开创的智能交易是“ 区块链2.0” 功能的一部分,Nxt和Ardor开发者已经将其作为协议本身的一部分。他们允许开发人员在无需编写和测试自己的智能合约的情况下创建区块链应用程序。

为了使普通用户(即非开发人员)也能够利用这种功能,官方的Nxt和Ardour钱包还包括了一些由智能交易构建的功能。这些包括:

  • 资产交易所,用户可以在这里发布资产,交易他们,并向资产持有者支付股息;
  • 货币体系,即用户可以发出货币,并进行几种不同类型的众筹活动;
  • 信息发送系统,它允许用户互相发送纯文本或加密的消息;
  • 投票系统,它允许用户通过账户,账户余额,资产余额,或货币余额进行投票;
  • 集成的混币系统,通过隐藏他们的交易历史,能够为用户提供一定程度的隐私;
  • 去中心化的数据存储器,它可以将文件的哈希永久地记录在区块链中,并可选地将文件永久地记录在特殊的存档节点中;
  • 去中心化的市场,用户可以在那里买卖对等的商品和服务;
  • 一个新的硬币交易所(仅Ardor),用户可以直接交换儿童链硬币;
  • 分阶段交易(其允许用户设置何时以及如何执行其他交易)以及可以用于将任意数据与账户相关联的账户属性的许多高级特征。

当然,这些并不是唯一可以从智能交易中构建的应用程序,但它们的确展示了他们可以实现的范围。所有这些功能,再加上一些,将在Ardor的第一个子链Ignis上提供的功能。其他子链的创作者可以选择实施尽可能多的这些功能,以适应他们的项目。

我听说过几个类比来描述智能交易,但我最喜欢的是:他们(智能交易)就像乐高玩具,而智能合约就像粘土:前者不能提供相同程度的细节控制,但他们更快,比后者更容易使用,而且仍然可以结合起来,形成一些相当令人印象深刻的最终产品。

当然,这个比喻并不完美。对于智能合约来说,一个强有力论据是,去中心化应用程序(Dapp)的所有业务逻辑可能被永久地永久地记录在区块链中,例如,由智能交易组合构建的Dapp可能包括一些外部代码。在后一种情况下,使用Dapp可能需要开发人员在一定程度上信任,而不是在更高版本中更改规则。

从另一个角度来看,这个比较暗示了智能合约的最大缺点:允许程序员们犯数百万美元的错误,而这些错误是无法纠正的。

安全考虑

几乎所有的软件都是非常复杂的缺陷,这些缺陷往往使得软件易受攻击者利用。智能合约开发者面临着一个艰巨的任务,因为他们编写的代码是不可改变的,因此它的漏洞是永久性的。

不幸的是,多用途智能合约的灾难性失败并不罕见。存储在多重签名Parity 钱包的以太坊在攻击中冻结了价值 150万美元的以太坊和在几个月前同一钱包30万美元的黑客攻击也成为了头条新闻,但他们不是第一个,也可以肯定不是最后一个。对于一些常见的漏洞和几次真正的攻击分析(包括臭名昭着的DAO攻击)的概述,我强烈推荐这篇由卡利亚里大学的三名研究人员撰写的优秀论文

值得注意的是,以太坊协议和以太坊虚拟机(EVM)不对这些攻击负责。以太坊的支持者有时会指出这一点,认为以太坊本身是相当安全的,而它所需要的是开发者写出更好的智能合约。从字面意义上说,他们是对的,当然,当然:在所有情况下以太坊做了它应该做的事情,最终的责任在于智能合约的开发人员。

但个人而言,我怀疑这个评估是否太快以至于无法解决以太坊的问题,以及这个问题是否会比一些错误的智能合约更严重些一些。就目前而言,无论如何,在我看来,以太坊的根本困境在于它给程序员以巨大的力量,但是没有足够的工具来安全地使用这个力量。

开发人员的野心几乎总是超过他们可以实现的复杂性水平,同时保持他们的代码完美无瑕,因此将功能的优先级高于安全性(这在软件开发中几乎是普遍的办法)。通过将其存储在区块链中,将其生成的错误代码进行传承,并无情地诠释着他们的罪恶。

值得庆幸的是,有一定的方法可以降低编写有易受攻击的智能合约的风险。例如,可以设计出一个智能合约,可以把它的责任委托给第二份合同进行更新,通常被称为“库合同”,在地址上可以更改为稍后指向不同的合约库。

这种方法允许开发人员修补漏洞,但是由此引发了谁可以转向新的合约库的棘手问题。如果它是一个单一的第三方帐户,那么设计会重新引入该帐户和用户之间的一定程度的信任。另一方面,如果开发者采取另一种方式,例如允许大多数用户投票批准每个新的合约库,那么可能会有更多的问题需要解决,如编写一个安全的投票机制,确保用户有足够的信息和参与投票,并防止攻击者在组织投票的时间内造成重大损失。

另一个非常有前途的获取智能合约的方法是使用从数学中借鉴的形式验证技术。我不太了解这种方法,所以请把我在这里写的东西写加些修饰,但是我知道这是简单的程序(或者实际上是可行的),它的功能可以被表达为一组简短的简单的规则。在这种情况下,可以肯定地证明该程序不包含错误。即使简单的循环和递归技术也可以使分析变得复杂,所以最好的方法是尽可能简单地进行测试。

我为什么喋喋不休呢?把这些想法放在一起看来,编写智能合同的最好方法可能包括:1)尽可能地简化和尽可能简单; 2)将核心业务逻辑委托给合约库,必要时可以更新; 3)重新使用经过全面审查的库,以便将新代码的数量降到最低。如果其中的第二点要求用户在某种程度上信任合同的作者,那么按照这三条指导原则设计的合约开始看起来很像Ardor的智能交易:一些稳定的,经过全面测试的代码揭露最常用的功能,开发人员可以组装成更复杂的程序。

安全性和灵活性之间的权衡

我并不是说Ardor的智能交易能够完成以太坊智能合约能够安全完成的所有事情,我也不是说智能交易的组合总能模仿智能合约。然而,我想说的,我认为平台提供的灵活性和开发人员不可避免地为它编写的代码的安全性之间存在着一种自然的制约关系。

在这种观点下,区块链平台可以位于安全灵活性的一个整体上。靠近“安全”极端的是比特币,它的脚本语言故意设置范围,以防止用户用易受攻击的脚本锁定他们的硬币(当然这仍然是可能的)。Nxt和Ardor占据了一个中间位置,将开发人员限制在一组预定义的交易类型中,但在这些类型中包含了很多功能。

另一方面,以太坊的智能合约占据了整个频谱。在以太坊上编写非常简单,安全的脚本是可能的,而且还可以编写更复杂的脚本,这些脚本包含非常细微的漏洞。也许同样重要的是,用户很难区分这些情况,无论合理还是不合理的,都希望他们去尝试。安全地使用以太坊必然意味着避免“灵活性”的范围,即使它是以用户和开发者之间的额外信任为代价的。

最后,值得一提的是,Ardor提供了一个新的功能,这在Nxt中以前是不可用的,它帮助我们朝向连续性的“灵活性”迈进:使用布尔AND,OR和NOT运算符来实现相位条件的能力原始智能合约行为。

简而言之,分阶段交易允许用户在某些事件上对基本交易进行条件处理,例如某些特定账户的批准(m-of-multisig),持有特定资产的账户的投票,某段时间的到期(时间锁定),或者秘密的揭示(例如,hashlock)。在Ardor上,这些阶段类型的组合可以编码更复杂的条件,例如“例如,“如果ABC Corp .的资产持有者大多数都同意,交易X是有效的,除非它被ABC Corp .的董事会成员否决。”

毫无疑问,将阶段性条件组合起来,以实现意想不到的结果,包括盗窃或资金损失。但是我认为,智能合约在安全性方面的优势仍然存在,因为开发人员可以专注于确保交易的业务逻辑合理,而不必担心像竞争条件这样的低级错误。当然,提供比智能合约更小的灵活性的缺点也仍然存在。

结论

通过一套预先包装的智能交易而不是低级别的脚本语言来定义协议,Ardor可能永远无法为开发者提供像以太坊那样广泛的可能性,至少在所有事情都必须以链方式进行的情况下,子链之间最小的信任。另一方面,编写遵循安全最佳实践的优秀合约可能需要用户和开发者之间的额外信任。当然,以太坊用户最终不得不相信智能合约的作者不会犯任何错误,并且必须仔细检查和测试他们的代码,以确保它的安全。

当然,对于任何软件,包括Ardor的智能交易,你可能会说差不多都是一样的,但是有一个关键的区别:在以太坊上运行的代码太多了。Nxt自成立以来一直是开源的,它为同行评审提供了充足的机会,并且基于Nxt代码库的Ardor代码将很快开放。此外,协议的每一个新变化在正式发布之前已经在公共测试网上进行了彻底的审查。每一份智能合约都应该一样,但有这么多的代码被写入,似乎不可避免地存在更多机会让bug投入生产。

无论如何,我怀疑最成功的Dapps依赖于不可变代码的程度仍然是一个悬而未决的问题。如果对大多数应用程序访问不可变数据库和对这些数据进行的一些简单操作就足够了,那么Ardor的智能交易似乎比智能合约有明显的优势。相反,如果“代码是法律”这个概念对于大多数Dapps来说是非常重要的,那么每个Dapp都需要将大部分独特的代码记录在区块链中,以确保真正的信任,那么以太坊的方法可能更优越的。

我预计将会有适合每个平台的实际应用程序。但是我也想知道,这两种方法中的一种是否最终能解决绝大多数应用程序的问题。哪种方法最终“获胜”对我来说一点都不清楚,但我认为决定因素将是用户对每种情况所需信任程度的判断。而且由于区块链技术的全部吸引力在于它允许用户以最小的信任度进行交易,所以我认为结果是相当合适的。

谢谢阅读!如果你喜欢这篇文章,一定要阅读下面的部分,比较了Ardor和以太坊应对区块链膨胀的方式。

 

作者:Segfaultsteve

 翻译:fz1128

View this in: English Español

Leave a Comment