安比(SECBIT)实验室完成NeoWorld Cash智能合约审计

本月,为了配合NASH智能合约的升级和提升安全性,NeoWorld团队委托业内知名智能合约审计团队SECBIT针对新版的智能合约做了审计。双方团队不但对NASH智能合约的设计和内容进行了优化,还对如何使用ERC223标准 — 一种更优但是不太常见的以太坊标准以及如何实现更好的安全性和用户保护,进行了深入的探讨。


NeoWorld 链上世界

NeoWorld(官网:https://www.neoworld.io)是一个基于区块链技术的多人联网虚拟世界,也是一个由全球用户共同协作创建的 3D 空间。用户可通过高自由度的探索和资源采集,来经营建设领地,甚至还可以在领地上创造和体验第三方的内容或应用,并籍此创造价值,获得财富。

NeoWorld 引入了一种称之为 NeoWorld Cash(简称 NASH )的通证,来作为游戏中价值的载体,及权益的证明。而围绕着Nash的产出、消耗和流通,支撑游戏运作的是一整套全新的经济系统和数据模型。

用户通过虚拟世界的 POA(Proof of Attention)共识机制,参与虚拟世界内活动,比如预设任务、社区活动、打工等行为,获取NASH,也可以通过点对点购买、向其他用户出售内容或服务等多种渠道获得 NASH。

同时,NASH作为用户在虚拟世界中点对点交易的支付货币,可购买虚拟世界内的资产,比如土地、建筑,或者任意玩家自创内容或服务;NASH可作为投资用途,通过锁定一定时间的方式,来提高土地繁荣度、个人技能,提高收益。

NASH 作为 NeoWorld 虚拟世界内的主通证,严格实现了 ERC20 token 并且在此基础之上扩展支持了 ERC223 标准和一些其他的功能,NASH 总量恒定为1000亿。


ERC223 协议是什么

NeoWorld 为了让玩家安全的使用 NASH 和提供更好的体验,NASH ERC20的基础上,扩展实现了 ERC223 标准。ERC223 是对 ERC20 的扩展和优化,由 Dexaran 2017 5 月份提出,主要目的在于解决转给错误的合约地址而造成 token 丢失的问题。

根据 Dexaran ERC223 协议描述中里提供的资料, 截止到 2017年底,ERC20 token 因转入错误的地址而造成损失的数据如下:

           QTUM, 损失 $1,204,273

           EOS,损失 $1,015,131

           GNT, 损失 $249,627

           STORJ, 损失 $217,477

           Tronix ,损失 $201,232

           DGD,损失 $151,826

           OMG,损失 $149,941

因此为了避免这些不必要的损失,Dexaran 设计的 ERC223 协议在ERC20基础上对 transfer 方法进行了修改。协议中规定如果转账地址是账户,则转账逻辑和 ERC20 一致。如果转账地址是合约地址,则要求转账的合约必须实现 tokenFallback方法以表示该合约地址支持 token 转账。

 

 image-20180828203814558.png

对于合约地址和账户地址的判断,Dexaran 给出的判断方法是通过 extcodesize() 。虽然这个方法在 FOMO3D 游戏中的使用导致了空投函数漏洞,但在 token 转账的场景下使用并不会造成严重的问题。

ERC223 协议抛弃了之前ERC20 中使用 approve transferFrom方法进行转账的设计,所有转账操作统一使用 transfer 方法。这样的设计也使 token ETH 的转账逻辑保持了一致,可以让用户更好的,更自然的理解 token 转账,也为之后整个 token 生态的基础设施建设提供了重要的参考意见。

nash.png 除此之外,ERC223 协议还带来了很多好处:

           减少 gas 消耗。ERC223 转账给合约只需要 1 步,而 ERC20 需要 2 步:先通过是 approve操作授权给合约,之后被授权的合约通过 transferFrom 进行转出。减少 1 步可以减少交易过程中 gas 的消耗。

           避免用户丢失 tokenERC223 统一使用 transfer 方法对合约或账户进行转账,避免用户因为搞混了合约和账户地址而造成 token 的丢失。

           明确了合约是否支持 token 转账。支持 token 转账的合约必须要实现 tokenFallback方法。如果合约没有实现该方法,用户对合约的转账交易会被 revert 回滚,不会对用户造成太大损失。

NASH 在标准 ERC20 基础之上,严格完整地实现了对 ERC223 协议的支持,这样使得 NASH 具有不仅兼容之前对合约进行转账的逻辑,也可以有效避免用户因混淆合约和账户地址而导致的 token 丢失,同时也为基于 ERC223 协议的 token 生态作出了重要贡献。


安比实验室关于安全开发智能合约的建议

NASH 严格实现了 ERC20 token 合约,并且在基础之上实现 ERC223 协议等多种功能的扩展,从而避免了用户 token 的丢失和丰富了 token 合约功能。经安比实验室审计之后,NASH 修复了已经被发现的逻辑漏洞、代码漏洞和存在的安全风险,提高了合约的安全性和代码质量。

另外,对开发者应该如何安全开发以太坊上的智能合约,安比实验室提供了以下几点帮助建议:

           开发前充分了解以太坊智能合约安全。请充分阅读 ConsenSys Smart Contract Best Pratice 了解合约安全问题和智能合约的最佳实践。对于 ERC20 token 可以参考由安比实验室维护的 Awesome Buggy ERC20 Tokens (https://github.com/sec-bit/awesome-buggy-erc20-tokens),了解目前 token 合约存在的安全问题。

           参考安全的模板代码。编写 ERC20 token 合约的话,可以参考 OpenZeppelin 合约模板,或者使用安比实验室提供的,经过严格数学证明的 tokens libs (https://github.com/sec-bit/tokenlibs-with-proofs)

           开发中使用安全检查工具。为了方便智能合约开发者安全开发合约,安比实验室开源了 Visual Studio Code 插件对 Solidity 代码进行自动的安全检查,可以在 VSC 应用商店中搜索 vscode-secbit-ssae 使用。另外如果在使用过程中存在任何问题或者需求,欢迎提 issues (https://github.com/sec-bit/vscode-secbit-ssae/issues) 进行反馈。


Tags:
评论  (0)
快来写下你的想法吧!

安比(SECBIT)实验室

文章数:8 积分: 28

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号