作者 | 张 问
编辑 | 杨舒芳
EOS的生态已经开始扩张,但是最近一段时间出现了种种问题,而这些问题的本质之一在于EOS的治理没有完善。在BM的第二版宪法中,他提出了代码的意图就是法律,而这个代码的意图的另一个名字,就是李嘉图合约,这究竟是什么东西?和之前的智能合约有什么关系?
这个事情,我们需要分几步来看。智能合约,先了解一下。
什么是合约
合约,就是合同,我们很常见了。让两方或者多方之间,在未来一段时间内有联系的东西。比如前几天沸沸扬扬的租房合同,小明要住老王的房子,要做的就是付租金。那租房合同,就是连接小明和老王的纽带,而更重要的是,这二位之间,是要有一些信任的。
而智能合约,就是一种能让电脑看懂的合约。合约里所有的条件都写成代码,然后自动执行。我们还说租房的问题,假如合约上写的是小明给老王5000块,一个月后,小明会去住老王的房子。我们把合约写成代码,当代码执行的时候,就开始自动判断条件成不成立,小明付没付款?没有,不执行。付了,那到没到一个月?到了,那赶紧执行。
那智能合约有什么过人之处?用代码最重要的意义,就是人们不再需要信任的成本了。只要代码是对的,那合约肯定会自动判断条件,自动执行。我们只看代码,什么自如,蛋壳,不需要第三方了,代码就像三体人,不会说谎。
信任的问题解决了,又引来了新的问题,你怎么确定代码执行的结果就是写代码的人想要的结果?换句话说,代码有bug,怎么办?
我们刚才的举例,很简单,几行代码就能搞定,但是实际上,合约可能会非常复杂,因为条件非常多,产生出来的结果的可能性就非常的多。在代码完成后,我们可能会测试一下,看看能不能跑起来,但是要测试出每一种结果几乎是不可能的。前一阵的EOSBet被黑客攻击就是一个最好的例子。
EOSBet是一个博彩游戏,比大小,不过需要用EOS来玩,有一个聪明的哥们,发现了代码的漏洞。他自己做了一个假的EOS,游戏里并没有检测出来。这就意味着,他凭空造出了钱,拿去赌博。输了就输了,没损失,赢了的话,赢回来的是真钱。
我们先假设,这确实是个漏洞。写代码的人是不想让大家这么玩的,但是他没有检测出这个结果,这就尴尬了。他不提前说的话,没有人知道这位码农是怎么想的,也就是说,谁都不了解代码到底想要什么样的结果,那怎么办?
李嘉图合约
这个时候,我们就开始介绍李嘉图合约这个东西了。简单来说,这个合约解释的就是代码的意图,就是代码到底想要什么样的结果。李嘉图合约要保证人们和程序都可以读懂,出现任何情况都可以帮助澄清事实。
之前EOS的一个节点介绍过这个李嘉图合约,其实早在1998年这个概念就有了。早期的金融密码学的一批人之一,Lan Grigg,1998年在他的作品《金融密码学的7个阶段》中首次提出了李嘉图合约。只不过当时的技术并没有实现。
这个东西,怎么用?我们还用EOS来举例。
假如有一个DApp,智能合约写的是“A给B一个EOS,B要返还给A一个EOS”,并且这个合约运行的非常顺利,但是你突然发现这个合约有个漏洞,即使你返还给我一个你自己造的EOS,代码也检测不出来,合约也可以执行。如果没有李嘉图合约,我认了。
但是如果我的智能合约里面有一个李嘉图合约,里面写了我的代码意图是“A给B一个EOS,B要返还给A一个EOS”,那么,如果你还给我一个其他的东西,这不是我代码的本意,我们就不能冰释前嫌了。
当然这里举的例子都是非常简单的,真实情况会复杂的多。简单来说,智能合约是一套机器可读的文件,电脑会按照条件,自动执行,而李嘉图合约可以列出代码全部的意图,对代码的输出流程做了约束。这两个东西放在一起,确实可以让EOS的治理更加完善,只不过完全实现,还需要一段不短的时间。
冲科技,区块链+TMT深度新媒体。冲科技【chongkeji】
网友评论