ユニスワップ(Uniswap)やコンパウンド(Compound)などのDeFiサービスを体験して思うのは、とにかくガスが高くて処理が遅いということだ。
現状はイーサリアム(Ethereum)というプラットフォームの処理能力が限界を迎えており、小口の個人投資家にはイーサリアム上のサービスは使い物にならず、BSC(Binance Smart Chain, バイナンススマートチェーン)など別のパブリックチェーンでDeFiを始める人も増えている。
しかし、これらの問題はいずれ解決される予定だ。
それがどのように実現されるのかというイメージをZKSwapというDEX(Decentralized EXchange,デックス)を使ってみて直感的に理解してみよう。
なお、ホワイトペーパー(Whitepaper)は以下のリンク先にある。
スケーラビリティ問題
DeFiの急激な普及に伴い、イーサリアムの利用度が高まっている。
イーサリアムの秒間トランザクション処理能力は15件程度と言われており、混雑の結果なかなか決済が行われないという問題が生じている。
これが以前から議論されていたスケーラビリティ問題である。
もちろん、この問題はイーサリアムに限った話ではないが、ここではイーサリアムに絞って話を進める。
スケーラビリティ問題の解決策
スケーラビリティ問題の解決策は大きく以下の2つに分けられる。
- ブロックチェーン自体の処理速度を向上させる
→Sharding - ブロックチェーンの外側で処理を行う(レイヤー2)
→ Plasma , Rollupsなど
Sharding(シャーディング)はデータや処理を分割し、並列処理を行うことで処理速度を向上させようという方法である。
Plasma(プラズマ)、Rollups(ロールアップ)はセカンドレイヤーとして機能するプラットフォームである。Rollupsについては、内訳としてZk-RollupとOptimistic Rollupがある。
これらにより、毎秒15件程度だった処理は1,000件~4,000件まで増加すると言われている。
Zk Rollupとは
ZKSwapではZk-Rollupという方法によりスケーラビリティ問題に対応している。
なお、Zk-Rollupの意味は以下のとおりである。
- Zk…zkというのはZero knowledgeの略で、zk-SNARKというマイナーとの間でやり取りを行うことなくゼロ知識証明が行えるアルゴリズムを利用しているということである。
- Rollup…オフチェーンで計算するがトランザクションごとにデータをまとめて(ロールアップ)、オンチェーンで保存するハイブリッドな方法。一方、プラズマはデータ保存も計算もオフチェーンで行われる。
なお、ゼロ知識証明というのは相手に情報の内容を伝えずとも情報を持っていることを証明するアルゴリズムである。
オフチェーンで処理した取引を数百~数千件まとめて1つのトランザクションとし、ゼロ知識証明による署名によって有効性を確保したうえでイーサリアムのチェーンのブロックに記述される。
トランザクションと署名が集約されているため、イーサリアムのチェーンに記録されるデータ量や署名の検証作業が削減される。これによりイーサリアムメインネットの100~200倍のスケーラビリティを実現できると言われている。
ZKSwapを使ってみよう
ZKSwapは、Automated Market Maker(AMM)に基づくトークンスワッププロトコルである。いわゆるDEXだ。
ZK-Rollupテクノロジーにより、ユニスワップ機能のフルセットがレイヤー2で実現され、無制限のスケーラビリティとプライバシーが提供される。
ZKSwapシステムの全体像は以下のとおりである。
オンチェーン(イーサリアム上に存在する)のスマートコントラクト、オフチェーンのZKSwapサーバー、ゼロ知識証明システム、フロントエンドユーザーインターフェイスにより構成されている。
ざっくりとしたフローは、オフチェーンのZKSwapサーバー内に状態ツリーの更新として記録されたトランザクションについて、ZKSwapスマートコントラクトがオンチェーンとオフチェーンを繋ぐハブとなり、イーサリアム上に反映されるという流れになる。
サイトにアクセスしてみよう
まずZKSwapにアクセスしよう。
執筆時点ではまだメインネットは稼働していないので、テストネットで利用することにする。
メタマスクを接続してみよう
次に、メタマスクを接続する。このとき、ネットワークはRopsten(ロプステン、テストネットのうちの1つ)を選択する。
なお、テストネットにおいてはイーサ(Ether)の残高をフォーセット(faucet)からいくらでも入手できる。”ropsten faucet”で検索して入手しよう。
ちなみにフォーセットの和訳は蛇口で、蛇口をひねるとイーサが出てくるよということだ。
もちろんテストネット上のイーサなので、経済的価値はない。
メタマスクからL2ウォレットにデポジットしてみよう
ユーザーはイーサまたはERC20トークンをZKSwapコントラクトにデポジットして、レイヤー2(以降L2)でそれらのトークンを使用することができる。
具体的に言うと、メタマスクの中にあるイーサはレイヤー1(イーサリアムのチェーン、以降L1)上にあるので、これをL2に転送するということだ。
L2はオフチェーンなので、L2上での取引にはガス代はかからない。
L2に移動した残高はいつでもL1に引き出すことができる。
L2 Walletをクリックし、Depositから実行することができる。
ここでは0.3イーサデポジットしてみた。
この処理はL1での処理を伴うため、イーサリアム上の取引の承認が必要になり、結果の反映まで時間がかかる。
L2でイーサを他のトークンに交換してみよう
交換(Swap)とは、ユーザーがL2の流動性プールでトランザクションを行うことである。
例えばイーサをUSDTに交換したい場合、ユーザーは最初にL2の自分のアカウントから対応するペアアカウントにイーサを送信する。次に、ZKSwapはAMMアルゴリズムに従ってユーザーが受領すべきUSDTの数を計算して送信する。
状態ツリーが更新され、ルートノードハッシュも更新される。ハッシュとスワッププルーフはイーサリアム上のZKSwapコントラクトに送信されるが、トークン自体はまだZKSwapコントラクトでロックされているため、イーサリアム上のステータスではイーサとUSDTの交換は反映されない。
L2 SwapをクリックするとSwapの画面が表示される。
ここではイーサとUSDTを交換してみる。なお、前述のとおりL2上での取引であるためガス代はかからない。
取引を終えるとすぐに残高に反映されており、L2上でリアルタイムで取引が記録されることがわかる。
L2ウォレットからメタマスクに引き出そう
続いて、トークンをL2からL1に引き出してみよう。
L2 WalletのWithdrawからL1に引き出すことができる。
デポジットしていたトークンのロックが解除され、ZKSwapコントラクトから対応するL1のウォレットに送信される。
先ほど交換したUSDTを100単位引き出す。注書きを読む限り、ここではガス代を要しないようだ。
なお、テスト段階だからなのか、一向にL1に戻ってこない。
コメント