首先要了解区块链智能合约,它不是合约,智能合约,不一定在区块链上。关于区块链智能合约,首先要了解的是,它不是合约,是智能合约,不一定要上链。事实上,他们有奇怪的名字。让我们以相反的顺序来解决这些问题,我们应该找出智能合约到底是什么。首先,什么是交易,什么不是交易。交易和非交易简介最著名的区块链是比特币等加密货币。2关于货币——无论是否虚拟——的问题是你主要想做的是用它们来买卖东西。你想要的是一个简单的交易模型:“一旦我为你提供这项服务,你就给我这个数量的货币。”我们知道这是怎么回事,因为每次我们在商店或网上购买东西时,都会发生这种情况:初始状态是“我有x金额”,交易完成后的状态是“我有xy金额,并且你有y个。”4这是您在完成交易之前所关心的。从一种状态到另一种状态的转变。大多数加密货币都被设置为支持这种类型的构造。这很好,但一些聪明人意识到实际上有很多不同的方法可以做到这一点。以太坊是非交易结构取得巨大成功的地方,Solidity是最著名的例子。我很高兴地说两者都是开源项目。为什么在我交出我交出的任何东西之前,没有一套更复杂的条件需要满足?而且——这是一个聪明的地方——为什么不编写可以由计算机执行的代码呢?您可能希望货币——或其他任何东西——仅在一段时间后发行,或者如果股价保持在一组特定范围内,或者如果有人继续担任总理,5或者如果没有意外在接下来的五天内日食。6你也可以有复杂的依赖关系:只有当我连续三周写一篇新文章并且没有人对其中任何一篇发表不讨人喜欢的评论时,它才会发生。7编写这段代码,如果满足条件,则进入下一状态。不仅仅是区块链开始解决那些“不是”的陈述。现在,在区块链中,重要的是一旦状态发生变化,你一定要将它记录在区块链上,这样它是公开的,没有人可以改变或挑战它。但区块链技术还有其他用途,正如我在“区块链是一个安全主题吗?”中解释的那样。无许可系统,通常被称为分布式账本技术(DLT),非常适合非交易状态模型,主要是因为对它们感兴趣的是封闭的组织团体,他们希望在迁移到下一个状态。从最严格的定义来看,这些都不是区块链。银行和其他金融机构可能是DLT获得牵引力的最明显例子,但它们在供应链领域非常有用,例如,您可能会遇到有关不断变化的市场利率、可用性和运输时间或成本的情况,这可能都是这些影响所提供的商品或服务的最终价格。并不是说智能合约就可以智能,但对我来说,这意味着复杂并且能够对意外或不太可能的情况做出反应。我认为人们称它们为“智能”是因为它们体现在代码中,而不是出于我上面建议的原因。我认为这实际上是一件好事,因为我不认为我们希望他们表达我的意思。据我所知,“智能合约”的大多数用途是两个或多个组织根据一组已知且约束良好的条件就系统的一组可能结果达成一致。这是合同的一般含义,虽然我要对术语部分进行争论,但在这种情况下它是非常合适的。通常你不希望意外或不太可能的情况和人工智能/机器学习类型的智能处理,因为如果你这样做,那么结果可能会令人惊讶,并可能让一个或多个人感到不安。简单性——或者至少易于定义——是您希望构建到系统中的关键属性。例如,Solidity项目似乎至少意识到其中的一些陷阱,并建议对那些使用智能合约的人进行形式验证,但正如我们将在下面看到的,这只是触及了表面。不是合同当然,有一些合同——“现实生活中的”合同——用于管理复杂和意外情况。它们存在于明确的法律管辖范围内。组成它们的单词和短语受制于特定且定义明确的流程,在不满足或违反合同条件时会受到已知的制裁和处罚。经常会有挑战这些的情况,但同样存在应对此类挑战的明确机制。目前,“智能合约”不符合这种对合约的描述。将法律合同措辞映射到计算机代码是一个非常复杂的过程,代码处理容易出现的错误类型在司法系统中没有很好的类比。还有管辖权问题。这通常在合同条款中有所描述,但如果“智能合约”的处理发生在与相关各方不同的司法管辖区,甚至是未知的司法管辖区怎么办?这应该重要吗?有关系吗?我不知道,我也不知道一旦人们开始以合法可执行的方式依赖这些结构,还会出现什么其他问题,但我怀疑它们会受到欢迎。同样,当IT人员谈论软件合同时,他们谈论的是完全不同的东西:它是系统在已知输入和启动条件的上下文中的广告行为,这对我们也没有帮助。这与安全有什么关系?一旦交易——或“智能合约”——被最终确定并输入区块链或分布式账本,根据定义,它几乎是不可变的。但在它完成之前?好吧,本文开头描述的这种类型的简单事务是原子的——它们发生或不发生,用行话来说它们是“不可分割和不可简化的”。对于大多数用途,它们是瞬时的。“智能合约”不是。它们需要被处理,所以会随着时间的推移而存在。这意味着在与它们打交道时,它们会受到任何系统都可能容易受到的各种攻击。标准列表是:机密。“智能合约”的状态可能会受到窥探,这可能导致不对称知识或向未经授权方披露。直立。这是很多“智能合约”的噩梦。如果一个实体——无论是否是基础合约的一方——可以(有意或无意地)改变执行“智能合约”的代码的内部状态,那么该“智能合约”的结果将不会像预期的那样以这种方式,任何利益相关方都可能有充分的理由对结果提出异议。更何况,这样的纠纷甚至可能连失去诚信的证据都没有,而仅仅是怀疑。在执行上下文中证明运行时完整性——更不用说在证明丢失时进行缓解了——是极其困难的。可用性。如果一方发现与“智能合约”相关的条件对他们不利,他们可能会试图影响构成“智能合约”的系统任何部分的可用性,无论是代码本身,系统的输入,或系统的输出。其中任何一项都可能对现实生活产生重大影响。这篇文章的开头似乎是对命名约定的迂腐攻击。我认为这可能很清楚,8我对“智能合约”这个词感到不舒服,主要是因为我认为它让一些人认为这些结构是他们所没有的。反过来,这可能意味着人们在不适当的情况下使用它们。还有人担心,由于文字带来的包袱,这导致人们没有充分考虑安全对这些结构的影响。我认为影响可能非常大。因此,如果您正在研究这些结构,请睁大眼睛。我在这篇文章中没有过多地谈论缓解措施,但有些缓解措施是存在的。
