以太坊代币安全发布最佳实践操作

代币发布时应遵循其他最佳实践经验,但也要有一些独特的注意事项。

符合最新标准

一般来说,代币的智能合约应遵循公认且稳定的标准。

目前接受的标准有:

· EIP20标准
· EIP721标准

注意在EIP-20上的前端攻击

EIP-20令牌的approve()函数为批准的支出者创造了超出预期金额的可能性。可以使用前端攻击,使批准的支出者可以在处理对approve()的调用之前和之后调用transferFrom()。

防止将代币传输到0x0地址

在编写本文时,“零”地址(0x0000000000000000000000000000000000000000)包含值超过8000万美元的代币。

防止将代币传传输合约地址

还要考虑防止代币转移到智能合约的同一地址。

EOS代币智能合约就是其中一个可能造成损失的例子,其中超过90,000个代币被卡在合约地址上。

示例:

实施上述两项建议的一个示例是创建以下修饰符;验证“to”地址既不是0x0也不是智能合约自己的地址:

  modifier validDestination( address to ) {
        require(to != address(0x0));
        require(to != address(this) );
        _;
    }

然后将修饰符应用于“ transfer”和“ transferFrom”方法:

 function transfer(address _to, uint _value)
        validDestination(_to)
        returns (bool) 
    {
        (... your logic ...)
    }
    function transferFrom(address _from, address _to, uint _value)
        validDestination(_to)
        returns (bool) 
    {
        (... your logic ...)
    }

程序文件

当启动一个将有大量资金或需要关键任务的智能合约时,必须包括适当的解释文件和安全相关的文档包括:

规格和推出计划

· 规范,图表,状态机,模型和其他文档,可帮助审核员,审阅者和社区了解系统的意图。
· 很多bug都可以从规范中找到,从而降低修复它们的成本。
· 推出计划,其中包括此处列出的详细信息以及目标日期。

状态

· 当前代码的部署位置。
· 编译器版本,使用的标志以及用于验证部署的字节码的步骤与源代码匹配
· 将用于不同阶段的编译器版本和标志
· 已部署代码的当前状态(包括未决问题、性能统计等)

已知的问题

· 智能合约的主要风险。 (例如, 你可能会丢掉所有的钱,黑客可能会通过投票支持某些结果)
· 所有已知Bug/限制。
· 潜在的攻击和解决方法。
· 潜在的利益冲突。(例如,筹集的ETHer将纳入自己的腰包,像Slock.it与DAO一样)

历史记录

· 测试(包括使用情况统计信息,发现的Bug,测试时间)。
· 已审阅代码的人员(及其关键反馈)。

紧急程序

· 发现Bug时的行动计划(例如,紧急选项,公共通知流程等)。
· 如果出现问题,请结束流程(例如出资者会在攻击前从剩余资金中获得余额的百分比)。
· 负责任的披露政策(例如在何处报告发现的Bug,任何Bug赏金计划的规则)。
· 发生故障时的追索权(例如保险,罚款基金,无追索权)。

联系信息

· 谁来处理问题。
· 程序员和/或其他重要人员的姓名。
· 可以提问的聊天室


来源: 区块链研究实验室 作者:链三丰

󰄯 分享
 
®关于本站文章™ | 若非注明原创,默认 均为网友分享文章,如有侵权,请联系我们™
㊣ 本文永久链接: 以太坊代币安全发布最佳实践操作