首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python智能合约编程-pyeos简介

pyeos的最初的目的是研究Eos的实现方式,添加了python作为智能合约语言。python的优势在上一篇文章中已经讲过了。但是要将python作为智能合约语言来运行,却并不是简简单单的wrapping一下C/C++的代码那么简单。智能合约会在所有的全结点中运行,这也就意味着如果智能合约语言的某些漏洞,例如缓存溢出漏洞,受影响的就不仅仅是单个账户那么简单了,还有可能会影响到运行智能合约的所有主机,这有可能是灾难性的。这就是为什么不建议智能合约设计得过于复杂的原因。复杂度越高,意味着越难维护,同时也面临更多的安全威胁。python从Guido van Rossum发布第一个版本的1991年到现在,已经有26年,可以说python已经是非常成熟的技术了。期间虽然python是在不断的演化,特别是后面python3出现以后,对内核有了大规模的修改。但是python终归已经聚集了一大批的人才,并且已经形成了强大的社区,这给python提供了强大的后盾。

但是并不是说原生的python拿来就可以用,为了满足智能合约对安全性的要求,还是要对python作出诸多的修改,以限制python在智能合约中的行为,具体如下:

不允许python智能合约代码访问文件系统。

如果允许智能合约代码访问文件,那么智能合约就具有有破坏系统的能力,所以文件系统的访问是绝对要禁止掉的。

限制python智能合约的内存使用。

如果允许智能合约访问无限制的内存,那么恶意的代码就会消耗光系统的内存,造成系统的运行缓慢甚至崩溃,所以对内存也必须作出限制

限制python智能合约的执行时间。

这点也很好解释,如果不作限制,恶意的代码可以轻易的制造一个死循环,占用大量的CPU资源,让其它智能合约得不到执行,产生不了新的区块,并造成整个区块链系统的崩溃。

只允许import指定的模块。

有些模块可能存在漏洞,只允许import指定的模块,可以将安全性问题控制在指定的模块之内,另外,在实际的运行环境中,必须移除所有不需要的模块。

不允许调用exec,eval这些执行代码的函数。

禁止调用exec,eval是为了防止恶意智能合约通过执行自定义代码攻击系统。

虽然以上的限制已经对python智能合约提供了一些支持,但是并不能保证恶意的python智能合约代码完全不会对系统造成破坏。一个系统不论是多么的完善,终归是有漏洞的地方。原生的python的代码解释器尽管已经很成熟了,但是相对来说仍然是过于复杂的,仍然存在是一些非可控的因素。好在实际上智能合约只需要一些有限的功能,从而完全可以做到将风险控制在有限的代码中。并且python有强大的社区支持,所以即使有问题也可以快速的找到解决的方案。目前,已经有了完善的对python代码进行sandboxing的方案,如pypy,并且,终极的方案也许是将python代码放到一个如docker这样的虚拟机中执行。所以,在python代码的安全性方面,也不必过于担心。害怕问题的产生是没有用也是没有必要的,因为对策总是有的,要的只是选出一个最优的方案。将来也会对pyeos的python智能合约的代码的运行机制进行进一步的完善。

当然,除了上面的措施之外,在人方面,设立奖罚机制。对发现系统漏洞的开发者以适当的奖励,对恶意智能合约代码提供检出机制,加大作恶的成本,使作恶的成本大于收益等等方面的措施,也是很有必要的。

python作为智能合约的优势明显,但是肯定也会有其自身的问题,我们要做的是预防问题,发现问题,解决问题,并作好解决未知问题的准备。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171219G06QA500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券