見出し画像

Initia TestnetでオレオレL2チェーンを作ってみよう!

はじめに

Initia Testnetで独自のL2チェーンを作成するチュートリアルを作成しました。
このチュートリアルだけで(おそらく)完結できるようなるべく丁寧に作成しました。

現在Initiaの公式Testnetで犬を育てるタスクがありますが、プラスアルファで何かやっておきたいと思う貪欲な方はぜひ試してみたください!

Initiaについて

すごいざっくりと説明すると、InitiaはCosmosをベースにしたL1チェーンであり、L1チェーンを基盤として独自のL2チェーン(Minitia)を作成できるモジュラー系のプロジェクトです。

Initia(イニシア)は、さまざまなロールアップが織りなすネットワークを構成するためのプロトコルです。チェーン全体は自身のレイヤー1であるInitiaと、Minitiaとよばれる複数のレイヤー2から成り立っています

*Token ECONOMISTさんの記事より引用
https://www.token-economist.com/2024/05/25/initia-description/


(参考)英語記事ですがめちゃくちゃ詳しくてわかりやすかったです
https://daic.capital/blog/initia-blockchain-network-optimistic-rollups-cosmos

特徴としてはL1にMoveスマートコントラクト言語を統合しており、IBCとネイティブに互換性のあるMoveVMを採用した相互運用可能なネットワークとなっています。L2にはEVM,WasmVM,MoveVMを利用することができます。

その他情報としてBinance Labs, Delphiなど錚々たるVCがバックにいます。(これはアツい!!!)


Initia Testnetが開催中

そんなイケイケな雰囲気なInitiaですが、6月よりIncentived Testnetを実施しています。

タイムラインでよく見るエグゾディアのあれです。(Jennieを召喚して、毎週タスクをこなして餌をあげる)

-エグゾディア

-餌をやり忘れて死んだJennie

GUIポチポチテストネット以外でできそうなことはない?

-Validator
Initiaは前述の通り、CosomosをベースにしたL1チェーンであり、TestnetでValidatorとなることができます。

ただし、Testnet Validatorの正式な募集は締め切っており、現在Mainnet開始時のGenesis Validator Setになるための選抜が行われています。

Inactive Validatorでもよければ動作させてみることは可能です。
https://docs.initia.xyz/run-initia-node/running-initia-node/becoming-a-validator

-L2オレオレチェーンを作る!!!!(今回の本題)
Initiaでは独自のL2チェーンを作ることができます。
https://docs.initia.xyz/deploy-minitia/getting-started/deploying-your-own-minitia-layer-2

Testnetやってる人ならわかると思いますが、Blackwing, Lunch, TucanaなどがInitiaのL2チェーンに相当します。

過去のモジュラープロジェクト(DYM、Avail等)を見ると、モジュラーの機能を利用したユーザーにエアドロップが付与されたケースがあり、InitiaでL2チェーンを作成するといいことがあるかもしれません。

前置きが長くなりましたがここからが本題です!!!
*まじで誰もInitia L2チェーン作ったことある人がいなさすぎてDocumentの行間よみながらチュートリアル作成するのは大変でした 

オレオレチェーンを作ってみよう

前提

基本的に記載してあるコマンドを打っていけば特にハマらずに動くようなチュートリアルにしてあります。

まっさらなサーバを想定してチュートリアルを作っているので、Linux操作やIT知識に自信ない人は他のノード等、すでに何か動かしているサーバではやらないようにしましょう(ガチのマジでヤメロ)
依存関係とかポート重複などで嵌まるケースが多く、時間とられるので

下記Docの行間を読むような形でチュートリアルを作成しています。
細かく何をやっているのか知りたい人は下記を参照してみてください。


準備が必要なもの

-Testnet Token
INIT, GAS
-VPS
InitiaでL2チェーンを作成する場合の必要なスペックについてDocmentに記載はありませんが、ContaboのCLOUD VPS 3で動作することを確認しています。
https://contabo.com/en/vps/

それでは実際にCLIを触ってセットアップをすすめていきましょう!!!!!!

Software UpdateとGoのInstall

-software update
新しくサーバ使う時にやっとくやつです。
gitやmakeなどInstallに必要なパッケージをインストールします。

#Software Update&Upgrade
$ sudo apt update 
$ sudo apt upgrade

#余計なパッケージもありますが気にしないでくださいw
$ sudo apt-get install git curl build-essential make jq gcc snapd chrony lz4 tmux unzip bc -y

-Goのinstall
Golang v1.22+の指定があるので1.22.2をInstallします。

#Goのダウンロード
$ curl https://dl.google.com/go/go1.22.2.linux-amd64.tar.gz | sudo tar -C/usr/local -zxvf -

#PATHを通す(Catから、下のEOFまでコピペで入れたあとSource)
$ cat <<'EOF' >>$HOME/.profile
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GO111MODULE=on
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin
EOF
$ source $HOME/.profile

#GoがInstallできたか確認(1.22.2であることを確認してください)
$ go version

InitiadのInstallとWalletの作成

-InitiadのInstall
InitiadはLinux上でInitiaの操作(Wallet作成や送金など各種TX)を行うCLIです。
まずはInitiadをサーバー上にInstallします。

#initiaのInstall(make installに少し時間がかかります)
$ git clone https://github.com/initia-labs/initia.git
$ cd initia/
$ git checkout v0.2.15
$ make install

#下記のようにversionがでてきたらInstall成功です!
$ initiad version --long

build_tags: netgo,ledger
commit: 31051a01e01609be014d6fec36d00a17be408663
cosmos_sdk_version: v0.0.0-20240514173001-c037b6c44d98
go: go version go1.22.3 linux/amd64
name: initia
server_name: initiad
version: v0.2.15

-initiadの起動とRPCの設定

デフォルトではRPCがローカルに向いているので、InitiaのRPCに変更します。
nano、vim、emacsお好きなテキストエディターをお使いください。

#initiadの初期化
$ initiad init local --chain-id testnet

#Client.tomlファイルを下記のように書き換えます
$ nano ~/.initia/config/client.toml
node = "tcp://localhost:26657"
↓
node = "https://rpc.initiation-1.initia.xyz/"

-walletを作成
walletを2つ作成します。1つ目がL2を作るためのWalletで、もう一つがL2のValidatorを行うためのWalletです。

後々使うので下記のようにaddressとニーモニックをメモしておいてください。
Wallet1 address:xxxx
Wallet1 ニーモニック:xxxxx
Wallet2 address:xxxx
Wallet2 ニーモニック:xxxxx

#wallet1という名前のWalletを作成
$ initiad keys add wallet1
*(Enter keyring passphrase)とでますが、設定したい任意のパスワードを入力してください
*ニーモニックフレーズとAddressが生成されるので忘れずメモしましょう。
*ニーモニックフレーズはInitia walletやKeplrなどにそのままImportできます。

#wallet1と同じノリでやりましょう
$ initiad keys add wallet2

上記CLIを打つと下記のようにAddressとニーモニックフレーズが出力されます。

MinitiaのInstallとTest tokenをWalletに移動

-MinitiaのInstall
MinitiaはinitiaのL2のモジュールです。Move, EVM, wasmの3つから選べますが、今回はMoveVMでL2チェーンを作成していきます。

#Home directryまで戻りましょう(チュートリアル通りにやると~/initiaにいるはず)
$ cd ..

 #Minitia Move版(minimove)のInstall
$ git clone https://github.com/initia-labs/minimove.git
$ cd minimove/
$ git checkout v0.3.2
$ make install

-configファイルの作成
パラメータが多くて大変ですが下記の様なファイルを作成してください。

#下記のようなJsonファイルを作成します。変更が必要な箇所に関して#<-で記載しています。
(#以降のコメントは消してください)
$ nano config.json
{
 "l1_config": {
  "chain_id": "initiation-1",
  "rpc_url": "https://initia-testnet-rpc.polkachu.com:443",
  "gas_prices": "0.15move/944f8dd8dc49f96c25fea9849f16436dcfa6d564eec802f3ef7f8b3ea85368ff"
 },
 "l2_config": {
  "chain_id": "medjed", #<- 設定したいチェーンの名前
  "denom": "MED", #<- コインの名前
  "moniker": "operator"
 },
 "op_bridge": {
  "output_submission_start_time": "2024-05-08T12:23:15.488692+09:00",
  "output_submission_interval": 3600000000000,
  "output_finalization_period": 3600000000000,
  "batch_submission_target": "l1"
 },
 "system_keys": {
  "validator": {
   "address": "init1xxxxxxxwallet2",  #<-Wallet2のaddressを入力
   "mnemonic": "xxxx xxxx wallet2" #<-Wallet2のニーモニックを入力
  },
  "bridge_executor": {
   "address": "init1xxxxxxxxxxwallet1", #<-Wallet1のaddressを入力
   "mnemonic": "xxxx xxxxwallet1" #<-Wallet1のニーモニックを入力
  },
  "output_submitter": {
   "address": "init1xxxxxxxwallet2" #<-Wallet2のaddressを入力
  },
  "batch_submitter": {
   "address": "init1xxxxxxxwallet2" #<-Wallet2のaddressを入力
  },
  "challenger": {
   "address": "init1xxxxxxxwallet2" #<-Wallet2のaddressを入力
  }
 },
 "genesis_accounts": [
  {
   "address": "init1xxxxxwallet2", #<-Wallet2のaddressを入力
   "coins": "100000000MED" #<-枚数とdenomで設定したToken名を入力
  },
  {
   "address": "init1xxxxxxxxxxwallet1" #<-Wallet1のaddressを入力
  }
 ]
}

(備考)
公式Docの2.Start with Custom ConfigのExample of config.jsonを参考に作成しています。公式Docに記載してあるgas_pricesの設定では動作しないので
前述の
"0.15move/944f8dd8dc49f96c25fea9849f16436dcfa6d564eec802f3ef7f8b3ea85368ff"に変更する必要があります。
細かい各パラメータに関しては公式Docを参照してください

https://docs.initia.xyz/deploy-minitia/setting-up

・Example of config.json(公式版) 
適宜照らし合わせながらconfig.jsonを作成して頂けると幸いです。

{
 "l1_config": {
  "chain_id": "initiation-1",
  "rpc_url": "https://initia-testnet-rpc.polkachu.com:443",
  "gas_prices": "0.15uinit"
 },
 "l2_config": {
  "chain_id": "minitia-XDzNjd-1",
  "denom": "umin",
  "moniker": "operator"
 },
 "op_bridge": {
  "output_submission_start_time": "2024-05-08T12:23:15.488692+09:00",
  "output_submission_interval": 3600000000000,
  "output_finalization_period": 3600000000000,
  "batch_submission_target": "l1"
 },
 "system_keys": {
  "validator": {
   "address": "init12z54lfqgp7zapzuuk2m4h6mjz84qzca8j0wm4x",
   "mnemonic": "digital kingdom slim fall cereal aspect expose trade once antique treat spatial unfair trip silver diesel other friend invest valve human blouse decrease salt"
  },
  "bridge_executor": {
   "address": "init13skjgs2x96c4sk9mfkfdzjywm75l6wy63j5gyn",
   "mnemonic": "junk aunt group member rebel dinosaur will trial jacket core club obscure morning unit fame round render napkin boy chest same patrol twelve medal"
  },
  "output_submitter": {
   "address": "init1f4lu0ze9c7zegrrjfpymjvztucqz48z3cy8p5f"
  },
  "batch_submitter": {
   "address": "init1hqv5xqt7lckdj9p5kfp2q5auc5z37p2vyt4d72"
  },
  "challenger": {
   "address": "init1gn0yjtcma92y27c0z84ratxf6juy69lpln6u88"
  }
 },
 "genesis_accounts": [
  {
   "address": "init12z54lfqgp7zapzuuk2m4h6mjz84qzca8j0wm4x",
   "coins": "100000000umin"
  },
  {
   "address": "init13skjgs2x96c4sk9mfkfdzjywm75l6wy63j5gyn"
  },
  {
   "address": "init1f4lu0ze9c7zegrrjfpymjvztucqz48z3cy8p5f"
  },
  {
   "address": "init1hqv5xqt7lckdj9p5kfp2q5auc5z37p2vyt4d72"
  },
  {
   "address": "init1gn0yjtcma92y27c0z84ratxf6juy69lpln6u88"
  }
 ]
}


-WalletにTestnet Tokenを送付
Testnet Tokenを持ってない方は下記でFaucetをもらいましょう。(Gitcoin Passportのスコアが必要なためEVMアドレスが必要)
https://faucet.testnet.initia.xyz/

FaucetをもらったらTestnetサイトにアクセスしましょう。
・Initia Testnet公式サイト
https://app.testnet.initia.xyz/

右上のWalletのボタンを押すと下記の様なPopupがでてくるのでINITとGASを選択して、前章で作成したWallet1に送付してください(それぞれ5程度あれば十分)


オレオレチェーンを動かしてみよう

準備は整いました!これからチェーンを動かしていきます!!!

-L2チェーンの作成
前章で作成したconfig.jsonのパラメータを元にL2チェーンを作成します。

#独自L2チェーンの作成
minitiad launch initiation-1 --with-config config.json

#最終的に下記のような出力がされれば成功です
<SNIP>
############################################
Artifact written to
* /root/.minitia/artifacts/config.json
* /root/.minitia/artifacts/artifact.json

{
 "BRIDGE_ID": "57",
 "EXECUTOR_L1_MONITOR_HEIGHT": "1261968",
 "EXECUTOR_L2_MONITOR_HEIGHT": "45"

Initia explorerでWallet1のアドレスを入力するとL2チェーン作成のTXが送信されていることがわかります。

・(備考)
RPC等のエラーが出る場合は./minitiaフォルダを削除し、下記のRPCに変更したり、時間をおいてから試してみてください エラーによってはconfig.jsonのl2_configのchain_idを変更する必要な場合もあります。

https://rpc.initiation-1.initia.xyz:443
https://rpc-initia-testnet.whispernode.com:443
https://initia-testnet-rpc.orbitalcommand.io:443​
https://testnet-initia-rpc.lavenderfive.com:443
https://initia-testnet-rpc.polkachu.com:443
https://rpc-initia.01node.com:443
https://rpc.initiation.test.pfc.zone:443


-L2チェーンを起動させよう!!!
下記コマンドを打つと、Validatorノードが立ち上がり、L2チェーンが動作します。

♯L2チェーンを起動

$ minitiad start
<SNIP>
6:10PM INF This node is a validator addr=406CA7BC409F41F3A6F2CEC76A73D7F937E418A0 module=consensus pubKey=PubKeyEd25519{3BA6D12265800B7F1B1C3CD325FF42D8E0673D726A57701EBD4C1284EB667C24}
6:10PM INF P2P Node ID ID=3ac8d36bbe7a416911de2ff54abdb69975768afd file=/root/.minitia/config/node_key.json module=p2p
6:10PM INF Adding persistent peers addrs=[] module=p2p

作ったL2チェーンをGUI上で確認しよう

-Initia walletのInstall

Initia WalletをInstallしましょう。
Wallet1, Wallet2のニーモニックを入力してCLI上で作成したWalletをInitia walletにインポートします。


-作成したL2チェーン情報をJSONで出力する
下記のDevtoolsにアクセスして必要な情報を入力しjsonを取得します。

URLはVPSのIPをベースに下記の画像ように入力してください。
RPC URL:26657
LCD URL:1317
API URL:1317/swagger/#

入力した値に基づいてchain.jsonが生成されるので、値を入力しおえたら作成されたjsonをコピーします。

-Initia WalletでCustomチェーンを追加

準備が整ったらInitia Walletを開いてManage my Minitias -> Add a custom Minitiaに遷移してください

コピーしたjsonファイルをminitia chain.jsonの箇所にペーストしてSubmitします。

medjed-testチェーンがアカウントに反映されているのがわかります。config.jsonで記載したMEDコインを保持しているのを確認します。

この例ではMED Tokenがmedjed-testチェーンの基軸通貨となり、ガス代として使用されます。

-Wallet2からWallet1にCustom coinを送金してみよう!
Wallet2からWallet1のアドレス宛に送金してみましょう

送金が終わったらWallet1で着金を確認します。

これにてL2チェーンを作成し、チェーン上でTXを発行することができました。これにてチュートリアルは終了です!お疲れさまでした!!!

作ったチェーンでもっといろいろ遊んでみたい人は、ぜひ公式DocやDiscord等を参照してみてください!

最後に

6月は巨大ProjectのTGEが相次ぎ少し気が抜けてしまっている人も多いと思いますが、BTCの半減期理論に基づくなら今触っているProductがバブルの真っ只中にTGEされるはずです。

現を抜かさず、地道にがんばってバブルを楽しみましょう!

あと、InitiaのTestnet Validator地味に頑張っているので(13000人中200人まで残ってます)、よかったら応援してください!

かなり冗長となってしまい申し訳ないですが最後まで読んでいただきありがとうございました!!!


この記事が気に入ったらサポートをしてみませんか?