基于零知识证明技术(ZKrollup)的以太坊L2扩容方案zkSync,在3月24日启动主网zkSync Era后,迅速获得市场投资人关注,仅不到两周时间内,其锁仓量(TVL)就突破1亿美元。
zkSync Era生态项目筹集921ETH卡在合约无法领出
不过,随着使用者快速攀升,当前处于alpha阶段的zkSync Era也开始传出技术问题,先是在4/1出现宕机情况,一度暂停出块逾3小时。
今(7)日,根据The Block研究员Eden Au发布的推文指出,zkSync Era上的一个新项目通过代币销售完成了921ETH(价值约170万美元)的众筹,但因为合约代码存在问题(transfer()函数适用于以太坊和其他EVM链,但不适用于zkSync),导致筹集的资金被「永远」卡在合约中无法取出。
zkSync:已找到解冻合约解决方案
对此,zkSync紧急发文澄清,这个新项目是Gemholic,并表示资金是「安全的」,当前团队正在与项目方合作,帮助他们解决问题。zkSync补充解释:任何调用transfer()或send()函数的智能合约都严重依赖Gas成本(硬编码2300Gas),但这不能保证在以太坊上运作,因为fallback()函数可能会消耗超过2300Gas,而且在以太坊未来版本中opcode Gas定价可能会发生变化,进而导致合约中断。然而,zkSync Era本身有别于一般EVM兼容环境,采取的是一种动态且发散的Gas计量方式,使得某些交易类型比其他EVM Rollup的交易更便宜10到1000倍。因此按照当前Era主网的Gas水平,任何没有明确Gas津贴的transfer()调用目前都会失败。
不过,zkSync表示当前已经找到一种解决方案来解冻合约:「这将需要对协议的Gas计量进行最小的更改,但将允许完全回收资金,预计将在明天发布更多详细讯息。」
值得一提的是,为了避免此事件对zkSync Era生态产生负面影响,zkSync还在推文中强调,编译器已经添加了关于transfer()函数调用的警告,但Gemholic的合约没有事先在测试网或本地节点测试过就直接部署在Era的主网上,这才导致问题的发生。
此外,zkSync还表示早在三年前Consensys就已警告Solidity开发者放弃使用transfer()函数,而大部分主流项目也早已不使用transfer()函数,似乎在暗示此次问题的发生并非全是zkSync Era的责任。