EOS智能合约开发系列(19): 合约应当开源
前面几篇文章,我们谈的都是技术问题;这篇文章,我想谈谈我对dapps中智能合约开源的观点和立场问题。
为什么智能合约应当开源
任何代码都可能存在猫腻
,注意我没有用漏洞
这个词;这个猫腻
也可能是漏洞,也可能是合约开发者本身想从用户的账号上得到些什么。
我们知道合约的执行,是由用户或者其他合约发送action消息而启动的。用户在发送action消息的时候,会用某个许可对该交易进行签名;于是合约的对应的action handler也就是在用户的某个许可下进行的。不管这个许可是什么、有什么权限,如果这个许可下面有什么可以利用的猫腻,合约就可能因此而损害用户的利益。就以上面的狼人杀案例来说,用户很可能一不小心就把自己的某个权限比较大的许可授权给了合约。
再举个具体的例子吧。比如目前EOSBet
这类游戏,如何判断输赢,概率的计算是否真如官网说的是公平的呢?如果没有把合约代码开源,谁也无法肯定,说不定人家表面上说概率是49%,私下里却把概率调到48%呢,这种微小的差距,用户是很难感知的。
那么这类游戏如果不开源,就和采不采用区块链没有太大关系,采用区块链就只是噱头了;虽然你能看到你的下注记录,但却无法知道每局游戏中,你是怎么赢、怎么输的,因此也就无法判断官方有没有作恶。
开源还需源码验证功能
开源就够了吗?
还不够,因为项目方很有可能公开的是一套代码,而实际使用的是改了参数的另一套代码。EOS有个功能挺好,它可以给每个编译后的代码都生成了一个hash,如果源码有一点点改动,导致编译后结果发生变化,那么这个hash值也会发生变化。也就是说,我们可以通过hash值有没有变化,来判断项目方开源的和实际使用的代码是否是同一个套。
荆凯大神有篇文章,提到了eospark提供源码验证功能。这对于社区来说,是个很好的功能。eospark正是利用上面介绍的原理,看检测项目方提供的源码是否与官方部署的合约一致。如果不一致,eospark会给出警告提示:
Screen Shot 2018-08-31 at 07.59.29.png希望能有更多的站点提供这种源码验证功能,也希望项目方都能把合约源码公开出来,接受社区的监督。
合约开发者的准则
作为合约的开发者来说,我们应该坚持不作恶的原则,并敢于把代码开源出来。;这样,一方面,用户也会比较放心使用我们的服务;另一方面,我们自己也能问心无愧。
简介:不羁,一名程序员;专研EOS技术,玩转EOS智能合约开发。
微信公众号:know_it_well
知识星球地址:https://t.zsxq.com/QvbuzFM