筹集921 ETH 却惨遭冻结
根据The Block 研究员Eden Au 发布的推文指出,zkSync Era 上的一个新项目透过代币销售完成了921 ETH(价值约170万美元)的众筹。然而,由于合约代码存在问题(zkSync Era 不支持transfer() 函数),导致筹集的资金被「永远」卡在合约中无法取出。
这个新项目据称是Gemholic。而这个问题的发生除了影响到该项目以外,社群也担心这会对zkSync 生态也存在负面影响, 若因为zkSync Era 不完全兼容以太坊虚拟机(EVM),而导致越来越多智能合约代码编译问题不断发生的话,很可能会浇熄开发者想要进入zkSync Era 的热情。
Matter Labs:不会永远卡住
然而,就在Eden Au 发文后不久zkSync Era 背后的开发团队Matter Labs 就在底下留言表示,资金不会被永远卡住,Matter Labs 团队正在与项目方合作,帮助他们解决问题。
Matter Labs 表示,任何调用transfer() 或send() 函数的智能合约都严重依赖Gas 成本(硬编码2300 Gas),再加上zkSync Era 本身有别于一般EVM 兼容环境,采取的是一种动态且发散的Gas 计量方式,而在当前的Gas 水平下,任何没有明确Gas 津贴的transfer() 调用目前都会失败。不过,Matter Labs 也指出,团队已经找到一种能够完全收回被卡资金的解决方案了:
「在这种情况下,我们确定了一个优雅的解决方案,可以解决更广泛的与Gas 相关问题。这将需要对协议的Gas 计量进行最小的更改,但将允许完全回收资金。我们将在明天发布更多详细信息。」
此外,似乎是为了避免此事件对zkSync Era 生态产生负面影响,Matter Labs 团队还在推文中表示,编译器已经添加了关于transfer() 函数调用的警告、Gemholic 的合约没有事先在测试网或本地节点上尝试过就直接部署在Era 主网上、Consensys 三年前就已警告Solidity 开发者放弃使用transfer() 函数、大部分主流项目已不使用transfer() 函数,似乎是想强调这起事件是单一个案,开发者在zkSync Era 上遇到问题的状况并不会成为常态。