EOS合约权限(二)- 如何检查 EOS 合约的安全性

开源,并能够验证开源代码与链上部署代码一致

比如 EOS.win 的代码就能够在 EOSpark 上查到,并已被 EOSpark 验证与链上部署代码一致
https://eospark.com/MainNet/contract/eosluckygame

慢雾科技也推出 EOS 合约验证平台,也可以做相应的查询和确认
https://eos.slowmist.io

代码安全性

EOS 代码安全性审计需要比较专业的背景知识,在合约层面一般的问题包括数值溢出漏洞、代码逻辑错误等。

权限

合约账户的权限能够控制对账户内金额转账,以及对合约进行升级,是非常重要的安全环节。目前主要有三种方法对权限进行限制。

方法一(低安全):多重签名账户

通过EOS账户体系的Weight和Threshold控制账户权限,实现由多人共同管理一个账户。假设该账户owner权限由5个不同的公钥控制,每个公钥的Weight为1,Threshold为3,表示需要这5个人中的3人进行签名,才能转账或修改合约代码,从而提升账户安全性。

参看 eosio.prods 的权限设置,就是使用这种方式 https://eospark.com/MainNet/account/eosio.prods
当然 eosio.prods 的参与者是所有当选的超级节点,公信力更高。

方法二(高安全):移交智能合约权限

修改合约权限为 eosio.prods 账户,意味着将修改合约的权限交给21个超级节点,如果需要转移资金或修改合约,需要申请节点仲裁。
使用 updateauth 命令可以进行权限的修改:

$ cleos push action eosio updateauth '{"account": "eosio", "permission": "owner", "parent": "", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio.prods", "permission": "active"}}]}}' -p eosio@owner
$ cleos push action eosio updateauth '{"account": "eosio", "permission": "active", "parent": "owner", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio.prods", "permission": "active"}}]}}' -p eosio@active

参看 eosio 的权限设置,就是使用这种方式 https://eospark.com/MainNet/account/eosio

方法三(高安全):设置账户权限到一个黑洞公钥

将owner和active权限设置为一个没有人知道私钥的公钥地址(黑洞),即可保证没有人可以获得账户的实际控制权。比如 EOS1111111111111111111111111111111114T1Anm,它的公钥是0值加检验数据生成,任何人都不知道它的私钥。

以下一些最近的热门游戏合约,供大家学习研究用:

狼人
https://eosflare.io/account/eosfoiowolfs

ITE
https://eosflare.io/account/itedeathstar

EOS Bet
https://eostracker.io/accounts/eosbetdice11

发表评论

电子邮件地址不会被公开。 必填项已用*标注