即使没有漏洞的合约也可能因私钥被盗而被劫持。近期Bancor和KICKICO攻击事件表明,攻击者可入侵智能合约钱包。此类情况下,即使合约具备升级机制,也可能无法修复已部署的合约。必须部署新合约实例并正确初始化才能为用户恢复功能。
因此,所有智能合约开发者都应在设计阶段集成迁移流程,企业需做好在遭受攻击时执行迁移的准备。
需要从区块链特定区块读取数据。为从攻击事件中恢复,需使用事件发生前的区块或过滤攻击者的操作记录。
建议暂停合约运行,这对用户更透明,也能防止攻击者利用未察觉迁移的用户。
数据恢复方法取决于数据结构:
对于ERC20代币合约,可通过追踪Transfer事件地址获取持有者列表。推荐两种方案:
技术实现方案:
收集数据后需初始化新合约:
建议为合约添加初始化状态,仅允许所有者修改变量。以ERC20代币为例:
可通过批量转账函数降低迁移成本(示例代码见原文图2),200个账户迁移约消耗2.4M gas(按当时油价约$5.04)
需与交易所协调确保新合约上架、旧合约弃用。历史案例(Augur/Vechain/Tron)表明交易所通常会配合。
可升级合约存在六大缺陷:
仅以下情况适合采用可升级合约:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。