代码就是法律?目前还不可能!
暴走时评:本文作者Lukas Abegg是拥有瑞士和美国硕士学位的律师,他在数学的范畴内讨论智能合约的现状及发展趋势,指出目前要实现“代码即法律”是对智能合约的一种挑战,因此不可操之过急。而是在科学不断发展的过程中,结合实际情况逐步解决现有的很多问题和缺陷。而且这个古过程可以逐渐完善智能合约,提高企业采用该技术的积极性。
翻译:Annie_Xu
The DAO失败后,人们开始热烈讨论以太坊区块链该如何发展,该制定怎样的政策。
其中包括是否继续遵循不可篡改性,以“代码就是法律”为最重要的规则;以及咨询以太坊矿工和开发者采取何种措施。
然而很少提及智能合约能做什么。
但是我相信这个问题应该成为争论的核心,而其答案是制定区块链和智能合约发展方针的唯一合理依据。
因此让我们一起仔细研究一下智能合约的功能。
信息的本质
智能合约的本质特性就是信息处理。
尽管信息的定义有很多种,并不存在通用定义。然而首先探讨信息理论处理信息的方式有助于我们理解它,因为我们说信息理论是现代计算机科学的DNA。
因此有必要把信息划分为句法信息和语义信息。前者是符号间关系的规则,后者是赋予这种符号的意义。可是它们之间的界限通常很模糊,要区分开很困难;但它们之间的差异是确实存在的。
最近Vitalik Buterin撰文探讨了这个难点。
Vitalik Buterin
句法信息可以进行分析和测量,适用数学证明方法(就像Shannon和Weaver的“A Mathematical Theory of Communication”通信的数学理论)。语义信息是人类赋予符号的;它可以代表任何人类大脑可以想到的东西。
实现语义信息的正常化和可处理是很难的。计算机科学(尤其是人工智能研究员)在捕捉语义信息并用软件表示出来的过程中也是障碍重重,比如自然语言。更糟糕的是,语义信息的形式可以很简单,也可以非常复杂。
比如简单而正式的语义信息有专利,已经可以用计算机语言进行处理。按照获得专利的某个小工具的CAD文件进行3D打印。
更加复杂的语义信息有“忠诚”的法律定义,目前还无法用计算机科学进行处理。因此需要极大地完善人工智能研究。
缺乏管理
区分这两种信息的另一种方法是将它们标注为“干代码”和“湿代码”,这两个概念的发明者是编码员Nick Szabo。
为了理解尊重信息两面性的原因,我们来讲讲The DAO。The DAO只在主页标注了“不伤害”政策(doing no harm,语义信息),而代码中却没有体现(代码处理的基本只是句法信息)。
“代码就是法律”严格信条的信奉者争论说,The DAO攻击者也许可以保留那些以太币,因为“不伤害”的规定只在网站主页有标示,而代码中没有,就不具备约束力。因此他们继续支持没有分叉的以太坊区块链,制造出两个平行以太坊的生态,给用户和开发者带来相当棘手的问题。
如果能有合适的管理工具来处理这些语义信息(比如确保每个人都遵守“不伤害”规则,并制定出应对违规者的方法),这种分裂的状况也许就不会发生了。
数学证明方法和不可篡改性
当Shannon开始研究通信理论,一直十分注意把研究对象限定在句法信息的范畴内。这样才能成功用数学方法证明他的发现。
如果他对语义信息进行研究,就不可能成功了。对Shannon来说,要推动科学发展,就必须重视数学证明方法。
也许有人觉得,编写智能合约并没有真正推动科学发展,因此数学证明方法并不重要。然而一旦代码中添加区块链,就可以实现不可篡改性;于是把代码正确性的标准提升到惊人的高度,如果说不是完全不可企及的话。
既然代码不可篡改,就必须保证代码没有漏洞。
因此代码的数学证明方法突然变成挺重要的特性。
但是在以太坊上实施智能合约使用的Solidity并不是支持数学证明方法的语言,但是它可以实现语义信息,或者明确点说,表达出开发者的意图。就像开发者的设计,The DAO黑客利用的“递归调用”本来有特定的用途。
显然代码并没能捕捉这种意图,因此没能阻止The DAO资金被黑客盗取。
总的来说,不可篡改性和代码正确性就像是天平的两端。越偏重不可篡改性,就越需要注意代码的正确性。
可验证代码的必要性
如果将近整个智能合约都是不可篡改地在区块链上运行,就几乎不可能在代码准确性方面添加足够的“配重”。
这些发现并不新颖。
早在200年,Nick Szabo就撰写了一篇关于正式合同语言的文件,他在里面明确表示程序化计算机语言也许很有吸引力,可是弊大于利。文件甚至没有提到金融业使用的全部现有编程语言,或者撰写编程语言的新方法,而这些编程语言却可以提供形式化证明。
Nick Szabo
甚至Solidity的开发者本人Gavin Wood博士也在早期就曾预测,这种语言可以让开发者进行数学证明;而最新研究证明必须将Solidity转化为F*,实现代码可验证。
然而现在已经明确知道,对合法性的需求,也就是说不需要智能合约之外的参与者,这点还没有得到满足。而且可能还需要很久才能实现,也说不定根本就不可能实现。
填补技术的空白
然而这并不是宣告智能合约概念的失败或者无意义。只是需要正视现有技术限制性的架构。而且目前还没有绕过编程语言和人工智能缺陷的有效方法。
这个方法也许存在于传统物质世界的法律系统中,尤其是称为“ADR”(Alternative Dispute Resolution)的特定领域。
它的目的是给两个或者多个争论方提供私下解决争议的正式途径,不需要求助于国家的公共法庭。它可以提供工具,让你建立自己的规则,定义冲突管理流程,选定审判者。
它还有一个好的副作用,实现现实物质世界的约束力。这是个值得探索的领域,比如预测市场的futarchy概念,还有选定仲裁人的Backfeed的新价值属性。甚至把这些仲裁规则放在智能合约中也不是很困难。
只需要确保每个智能合约服务的用户愿意接受这种仲裁规则,就像注册域名时要遵守的仲裁规则一样(比如ICANN的UDRP)。
实现合法性
首先用旧概念研究新领域似乎很奇怪。
然而如果你仔细看它的支撑结构,就像现在的3D打印物品的支架,即使拿走了,这个物品也可以自主站立,就可以发现没有什么课奇怪的。甚至这种探索方式还有点启发性的因素,因为它可以帮助我们了解新概念和管理工具,也许未来它们就可以完全替代现实世界的法律工具。
回到开头我们说的,我们应该尊重信息的两面性,用代码处理句法信息,用管理工具让人类处理语义信息。
虽然智能合约不智能也不是合约,而只是可验证地进行代码验证;可是结合智能合约特定仲裁规则这样的管理工具和认知技术,也许可以用破坏性更小的方法来测试新技术,而不会向处理The DAO那样;而且这可能是增加智能合约确定性,吸引企业使用的途径。
至少在科学发展到“代码就是法律”阶段之后,可以实现真正的合法状态。
作者:Lukas Abegg | 编译者:Annie_Xu | 来源:Coindesk
微信扫描关注公众号,及时掌握新动向
2.本文版权归属原作所有,仅代表作者本人观点,不代表比特范的观点或立场
2.本文版权归属原作所有,仅代表作者本人观点,不代表比特范的观点或立场