籌集 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 上遇到問題的狀況並不會成為常態。