スマートコントラクト上の資金回収へ
暗号資産(仮想通貨)イーサリアム(ETH)のL2プロジェクト「zkSync」は7日、スマートコントラクト内に閉じ込められた資金を回収するソリューションを考案したと発表した。
TLDR:
— zkSync ∎ (@zksync) April 7, 2023
1) Funds are safe. We found an elegant solution how to unfreeze the contract.
2) Era is not EVM equivalent. This is a deliberate design choice with specific upsides and trade-offs.
3) Following best practices would've prevented the issue:https://t.co/93M5ruljUP
この対応は、遊んでトークンを稼げるゲームや、利回りサービスなど様々なプロダクトを提供するGemholicECOというプラットフォームが、スケーリングソリューション「zkSync Era」上でコントラクトを展開し、トークンのプレセールを行おうとした際に、問題が発生したことを受けたものだ。
GemholicECOは、トークンセールを通じて921イーサリアム(ETH)(約2.3億円相当)を調達したが、その資金がスマートコントラクトに閉じ込められてしまった格好である。コントラクト内の資金がロックされたのは、「transfer()」関数の使用で問題があったためだ。
zkSyncは、資金を完全に回収するために、プロトコルレベルの小さな変更を行う予定で、近日中に詳細を通知するとしている。
問題の詳細
transfer()関数を使用して、スマートコントラクトにイーサリアムを送信すると、fallback()関数が起動する。fallback()関数においては、2,300以上のガス代(手数料)を必要とする場合、トランザクションが失敗し、資金が滞留することが起こり得る。
zkSyncのチームは、「この問題が発生することは明らかだったので、コンパイラに直接、transfer()に関する警告を出していた」と説明した。Gemholicチームが、この警告を見落としていた可能性もあると示唆する形だ。
また、Gemholicが、テストネットやローカルノードでテストすることなく、直接Eraメインネットにコントラクトを展開していたと指摘。事前にテストを行っていれば、すぐに問題を発見できていただろうとしている。
zkSyncは、対応方法について「プロトコルのガス計測方法に最小限の変更を加えるだけで、資金を完全に回収できるようになる」と述べた。
zkSyncのチームは、2019年時点で、プログラム言語Solidityのtransfer()関数を使うことには問題があることが指摘されていたとも付け足した。チームが確認したところ、現在人気のある仮想通貨プロジェクトのソースコードを調べた限りでは、transfer()関数を使用しているものはなかったという。
スマートコントラクトとは
あらかじめプログラムされた条件に応じて、自動的に契約を執行する仕組みを指す。スマートコントラクトの機能が実装されているブロックチェーンで代表的なのはイーサリアム。契約を締結する際には、仲介者や契約書作成などの事務作業が必要になる場合が多いため、自動的に契約を執行できるようにすることで、効率性向上やコスト削減などが期待できる。
▶️仮想通貨用語集
zkSync Eraとは
zkSync Eraは、イーサリアムの仮想マシン(EVM)と互換性を持つ「zkEVM」に分類されるL2ソリューション。ゼロ知識証明を導入したロールアップ技術「ZKロールアップ」を使用している。
ロールアップとは
メインのブロックチェーンのセキュリティを活用しながら、トランザクションの一部をオフチェーン(ブロックチェーン外)で処理することにより、ネットワークの混雑解消を図るスケーリングソリューションのこと。
▶️仮想通貨用語集
3月24日に、アルファ版が全てのユーザーに公開されたばかりだ。記事執筆時時点で、すでに預け入れ総額(TVL)は、約210億円(約1.6億ドル)に達しており、すべてのL2プロジェクトの中でも4番目にランクインしている。
zkSyncのチームは、こうしてユーザーを多く抱える状況で、責任も大きくなっているとして、次のようにコメントした。
プロジェクトのユーザーベースが大きくなることにより、責任も重大になり、時には今回のような問題が生じることもあるだろう。問題が発生した場合、私たちのチームは警戒を怠らず、解決するため徹底的に取り組んでいく。