
【完全保存版】Astar のXVM を体験してみよう!
1 コンパイルを行う
1 git clone
下のように、git cloneを行います。
git clone https://github.com/ytakahashi2020/astar_xvm.git

2 コンパイルを行う
下のように、「erc20」フォルダに行き、コンパイルを行います。
cd ink-xvm-sdk/contracts/erc20
cargo contract build
「~.contract」というファイルがデプロイように使うものです。

2 デプロイを行う
1 テストトークンを取得する
事前にテストトークンを取得します。
やり方は、こちらをご参照ください。
2 事前にsolidityのコントラクトをデプロイする
事前に、ERC20のコントラクトをデプロイします。
作り方がご不明の場合は、こちらをご参照ください。
なお、EVMでのShibuyaの取得方法については、こちらをご参照ください。
3 デプロイする
では、こちらのSubstrateからデプロイしていきましょう。
「Add New Contract」から「Upload New Contract Code」を選択

実行するアカウントを選択し、下の箇所を選択します。
ここで、第1章第2節でできた、「~.contract」のファイルを指定します。

これで、このコントラクトの関数が表示されます。
「Next」を選択

事前にデプロイしていたコントラクトアドレスをコピーします。

コントラクトアドレスを貼り付けて、「Next」

「Upload and Instantiate」を選択

これでWASMコントラクトがデプロイされました。
3 操作の確認を行う
ここでは、WASMコントラクトから、EVMのコントラクトの値を取得できることを確認します。
下のように、「totalSupply」を確認すると、「0」となっています。
これは、EVMのコントラクトでまだミントを行っていないためです。

では、下のように、EVMのコントラクトで、ミントを行ってみます。

EVM側で「totalSupply」がこのように反映されました。

WASM側でも見てみましょう。
このように、EVMの値を反映していることが確認できました。

4 XVMの仕組みを学ぼう
なお、詳細は、こちらの記事をご確認ください。
1 概要について
まずは、下のように、水色の「Pallet」と紫色のインターフェースが存在しています。
真ん中の「XVM Pallet」を通じて、やり取りを行います。

WASMコントラクトから行う場合は、下のような流れを取ります。
つまり、WASM側としては、「Chain Extension」を経由します。

2 Chain Extensionについて
実際の連携部分はこの部分になります。
下のように、「extension」(Chain Extension部分)から「xvm_call」を実行しています。

具体的には、この部分になります。

3 どのVMと連携するか
次に、どのVM(Virtual Machine)と連携するのかを設定します。
EVMには「0x0F」という値が割り当てられています。

下のようにして、どのVMと連携するのかを設定しています。

4 どのコントラクトと連携するか
次は、どのコントラクトと連携するかです。
下の図では、dAppsとありますが、dAppsの中のどのコントラクトと連携させるのかを設定します。

下のように、EVMのアドレスを設定しています。

5 どの関数を実行させるか
次にそのコントラクトのどの関数を実行し、引数として何を渡すのかを設定します。

それが、下の部分です。
引数を含めた、エンコード済みの値を設定します。(total_supply関数の場合は、引数はありません。)

これにより、XVMを行うことができました。
詳細については、こちらの記事をご確認ください。
以上です。
いいなと思ったら応援しよう!
