2022.01.11
Ethereum L2ソリューション「Arbitrum One」でDAppを動かす
こんにちは。F.S.です。
今回はEthereumのL2(レイヤー2)ソリューションである Arbitrum One にてどのようにDApp(ブロックチェーンで稼働する分散型アプリケーション)を動かすのか見ていきたいと思います。
EthereumのDAppに理解がある人向けの内容となっています
1. 前段知識
1-1. レイヤー2(L2)
ブロックチェーンのスケーリング関連技術としてL2があり、Ethereumでは2017年のPlasma論文から始まっていくつかの手法が研究されてきました。Ethereum(L1)のアセットを別のレイヤー(L2)へ移動し、トランザクションをL2で実行させて処理の高速化を図ろうというものです。
詳しくは当研究室のメンバーによる過去記事を参照ください。
https://recruit.gmo.jp/engineer/jisedai/blog/the-trend-of-plasma-research/
L1であるEthereum上のトランザクションはオンチェーンと言われ、L2上のトランザクションはオフチェーンと言われます。L1はパブリックブロックチェーンの特徴により強固なセキュリティを持ちますが、L2は必ずしもブロックチェーンを実装したものとは限りません。
不足するセキュリティの担保をL1でとろうとするのがL2ソリューションの基本的な考え方になります。これがPolygon PoSなどのサイドチェーンとは異なる点です。
1-2. Optimistic Rollup
Optimistic Rollup はL2実装パターンの一つです。
現在Ethereumのスケーリング戦略として Ethereum2.0 が進行していますが、それと並行してL2領域では Rollup が有望視されていました。2021年になって Rollup の一種である Optimistic Rollup を用いたソリューションがメインネットで稼働を始めています。
Rollupは L2のトランザクションデータを、圧縮してL1に記録します。これが roll up(巻き上げる)というイメージでしょうか。オフチェーンであるL2のデータが非公開だったり破壊されたりする可能性があるというデータ可用性の問題を解決した手法です。
Optimistic Rollup はL2でトランザクションが正しく検証されているだろうという仮定のものにロールアップを行います。これがOptimistic(楽観的)と言われる所以です。L1のロールアップデータからL2の不正を検証可能なため、不正の発生から7日間以内にチャレンジすることによって紛争を解決できる仕組みがあります。

一方、ZK-Rollup のようにゼロ知識証明を使った正しさの証明があるデータをロールアップする手法もあります。Optimistic と比較して計算コストが高く用途が限定的になるため、現在多くの Dapps は Optimistic Rollup のソリューションを使用しています。
Arbitrum One
Arbitrum One は Offchain Labs により開発された Optimistic Rollup を用いたL2ソリューションの一つで、L2では最も規模が大きいものです。2021年9月よりメインネット(β版)が稼働しています。

Ethereumから外部へ持ち出すためにブリッジにロックされているアセット(ETH, ERC-20)の総価値(TVL:Total Value Locked)を参照すると、2022年1月8日時点で4位です。

L2ソリューション系に限定すればArbitrumが85%程度占めていることがわかります。
特徴
- AVM(Arbitrum VM)
- EVM互換
- Solidityサポート(Vyper等を含む)
- ArbGas
- EthereumのGasに似た独自のGas機構
- L1のプルーフチェックコストとL2のコスト(バリデーター費用)が含まれる
※バリデーター費用はβ版ではデフォルトゼロに設定されているとのこと - L1のGasよりはるかに安い
(とはいえ、L2 Fees を見る限りArbitrumは他のL2と比べてやや割高)
- RPC
- Ethereum JSON RPC のスーパーセット
- トランザクションレシートにはL2独自の追加フィールドあり
- 開発元の他、Infura等でエンドポイントを提供
- 開発ツール
DApp実行
公式ガイドを参照し、ArbitrumテストネットでDAppを実行してみます。
(ローカル環境を構築してみたかったのですが、ガイドが工事中だったので断念)
チュートリアルのレポジトリにある Pet Shop というデモDAppを使います。
✅ Basics
* ? Pet Shop DApp (L2 only)
準備
デモDAppではEthereumのDApp開発フレームワークである Hardhat が使われています。
.env_sampleをコピーして.envを設置し、DEVNET_PRIVKEYにEthereumアカウントの秘密鍵を設定します。
DEVNET_PRIVKEY="0x your key here" # this is rinkarby, can use any Arbitrum chain L2RPC="https://rinkeby.arbitrum.io/rpc"
【注意】.env_sampleに記述されているL2RPCは罠があり、エンドポイントURLを括っているダブルクォーテーションを外す必要があります。このままだとnode-fetchモジュールにダブルクォーテーション付きの文字列が渡されてURLと解釈されずエラーになります(absolute URLを指定しなさいというエラーが出て若干ハマります)
ここで指定するEthereumアカウントはDAppのデプロイ・実行にGasを使うため、ETHが必要になります。今回のデモはL2側だけで動作するものですが、当然L2側にETHが必要なのでブリッジを使ってETHをL2に移しておきます。
BridgeサイトでMetaMaskを接続し、L1のETHを移します。Arbitrumテストネット(RinkArby)はRinkebyテストネットに繋がってますので、RinkebyでETH保持しているアカウントからRinkArbyにETHを移します。
L2に移るには10分ほどかかるようです。L1に戻すには紛争解決期間である1週間ほどが必要になるというアラートが出ます。
L1(Rinkeby)ブリッジにETHを送ります。
10分もしないくらいでL2(RinkArby)に移ったのが確認できました。
実行
準備ができたので、早速DAppを実行していきます。
このDAppは一つのスマートコントラクト(Adoption)と一つの実行スクリプトから構成されていて、次の動作が期待されます。
- スマートコントラクトの機能
- 16のペット(ID:0〜15)の譲渡先のアドレスを保持する
- 任意のIDのペットを譲渡する(譲渡先のアドレスを記録する)
- 16のペットの譲渡先のアドレス一覧を取得する
- 実行スクリプトのシーケンス
- 実行者のウォレット情報を取得
- Adoptionスマートコントラクトをデプロイ
- ID:8のペットを実行者に譲渡する
- ID:8のペットの譲渡先が実行者アドレスになっているか確認する
- 全ペットの譲渡先アドレスを確認する
こちらがスクリプトの実行結果です。
期待する動作どおりの結果になっていますね。
続いてArbitrum Explorerでトランザクションを見てみましょう。
コントラクトデプロイのトランザクションです。Total fees paidは15セント程(1ETH = 3,213.04USD)となってます。

譲渡実行(譲渡先アドレス登録)のトランザクションです。Total fees paidは3セント程度です。

デモDAppはRPCのエンドポイントを変えるだけでL1(Rinkeby)にそのままデプロイ&実行できるので、手数料を比較してみました。
- デプロイ
- L1:約85.3セント
- L2:約15.0セント
- 譲渡(譲渡先アドレス登録)
- L1:約14.4セント
- L2:約3.0セント
※1ETH = 3,213.04USD 計算
L1のトランザクション
https://rinkeby.etherscan.io/address/0x94F5C4F3D8842025cf083Dc7e9C76df7673f031C
最後に
ArbitrumのDApp開発にはEthereumのDApp開発エコシステムがほぼそのまま使えるということがわかりました。移植のしやすさから多くのDAppがArbitrum上に展開され、まだβ版ですがメインネットローンチから多くのアセットがArbitrumに流れている状況を見るに、今後のプラットフォームの成長が期待ができます。同じL2ソリューションであるOptimismも着実に利用が伸びてきており、引き続き追っていきたい領域です。
それでは、また。
次世代システム研究室では、ブロックチェーンのように尖った技術を活用したアプリケーションの設計・開発を行うアーキテクトを募集しています。アプリケーション開発者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。
グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。
Follow @GMO_RD