![見出し画像](https://assets.st-note.com/production/uploads/images/111247242/rectangle_large_type_2_9c16e5c26c4682360fabebe28f58cf42.png?width=800)
【完全保存版】Astar のXVM を体験してみよう!
1 コンパイルを行う
1 git clone
下のように、git cloneを行います。
git clone https://github.com/ytakahashi2020/astar_xvm.git
![](https://assets.st-note.com/img/1689818766996-aSM3h5b2xV.png?width=800)
2 コンパイルを行う
下のように、「erc20」フォルダに行き、コンパイルを行います。
cd ink-xvm-sdk/contracts/erc20
cargo contract build
「~.contract」というファイルがデプロイように使うものです。
![](https://assets.st-note.com/img/1689817030652-T24rZJ1MQ4.png?width=800)
2 デプロイを行う
1 テストトークンを取得する
事前にテストトークンを取得します。
やり方は、こちらをご参照ください。
2 事前にsolidityのコントラクトをデプロイする
事前に、ERC20のコントラクトをデプロイします。
作り方がご不明の場合は、こちらをご参照ください。
なお、EVMでのShibuyaの取得方法については、こちらをご参照ください。
3 デプロイする
では、こちらのSubstrateからデプロイしていきましょう。
「Add New Contract」から「Upload New Contract Code」を選択
![](https://assets.st-note.com/img/1689817069122-d0roHGZO0o.png?width=800)
実行するアカウントを選択し、下の箇所を選択します。
ここで、第1章第2節でできた、「~.contract」のファイルを指定します。
![](https://assets.st-note.com/img/1689817111354-2IA4pprVZR.png?width=800)
これで、このコントラクトの関数が表示されます。
「Next」を選択
![](https://assets.st-note.com/img/1689817140037-mtqTJOlIaa.png?width=800)
事前にデプロイしていたコントラクトアドレスをコピーします。
![](https://assets.st-note.com/img/1689817176775-ixyqJB42YF.png?width=800)
コントラクトアドレスを貼り付けて、「Next」
![](https://assets.st-note.com/img/1689817218104-sSHUI7xjcp.png?width=800)
「Upload and Instantiate」を選択
![](https://assets.st-note.com/img/1689817245949-s6nIYv38sI.png?width=800)
これでWASMコントラクトがデプロイされました。
3 操作の確認を行う
ここでは、WASMコントラクトから、EVMのコントラクトの値を取得できることを確認します。
下のように、「totalSupply」を確認すると、「0」となっています。
これは、EVMのコントラクトでまだミントを行っていないためです。
![](https://assets.st-note.com/img/1689817290059-6Erju870EA.png?width=800)
では、下のように、EVMのコントラクトで、ミントを行ってみます。
![](https://assets.st-note.com/img/1689817329573-GmQmdVJcFg.png?width=800)
EVM側で「totalSupply」がこのように反映されました。
![](https://assets.st-note.com/img/1689817516124-aZ3yfZlBRN.png?width=800)
WASM側でも見てみましょう。
このように、EVMの値を反映していることが確認できました。
![](https://assets.st-note.com/img/1689817549204-AeYK8Jwyyp.png?width=800)
4 XVMの仕組みを学ぼう
なお、詳細は、こちらの記事をご確認ください。
1 概要について
まずは、下のように、水色の「Pallet」と紫色のインターフェースが存在しています。
真ん中の「XVM Pallet」を通じて、やり取りを行います。
![](https://assets.st-note.com/img/1689817864070-7F0e0i6hcV.png?width=800)
WASMコントラクトから行う場合は、下のような流れを取ります。
つまり、WASM側としては、「Chain Extension」を経由します。
![](https://assets.st-note.com/img/1689824624446-VqMMUfbSVV.png?width=800)
2 Chain Extensionについて
実際の連携部分はこの部分になります。
下のように、「extension」(Chain Extension部分)から「xvm_call」を実行しています。
![](https://assets.st-note.com/img/1689817728161-eQXA799cvQ.png?width=800)
具体的には、この部分になります。
![](https://assets.st-note.com/img/1689824884722-qJd3Q01DWj.png?width=800)
3 どのVMと連携するか
次に、どのVM(Virtual Machine)と連携するのかを設定します。
EVMには「0x0F」という値が割り当てられています。
![](https://assets.st-note.com/img/1689818121492-QKw4uOrIGD.png?width=800)
下のようにして、どのVMと連携するのかを設定しています。
![](https://assets.st-note.com/img/1689818123788-x5jh36kBGZ.png?width=800)
4 どのコントラクトと連携するか
次は、どのコントラクトと連携するかです。
下の図では、dAppsとありますが、dAppsの中のどのコントラクトと連携させるのかを設定します。
![](https://assets.st-note.com/img/1689818261936-Kqr2gPkL8p.png?width=800)
下のように、EVMのアドレスを設定しています。
![](https://assets.st-note.com/img/1689818301516-S555WWjpAS.png?width=800)
5 どの関数を実行させるか
次にそのコントラクトのどの関数を実行し、引数として何を渡すのかを設定します。
![](https://assets.st-note.com/img/1689818469400-vk6pLdGlhs.png?width=800)
それが、下の部分です。
引数を含めた、エンコード済みの値を設定します。(total_supply関数の場合は、引数はありません。)
![](https://assets.st-note.com/img/1689818472961-IFbOndPuBo.png?width=800)
これにより、XVMを行うことができました。
詳細については、こちらの記事をご確認ください。
以上です。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊