Daily Archive2022-04-23

Astar Network

以前取り上げたPolkadotのバラチェーンであるAstar Networkについて、いろいろ試してみました。

http://bitlife.me/bc/2022/02/26/

基本的な使い方はこの「Substrate / Polkadot」で取り上げたとおりですが、「Solidity to WASM Compiler」というドキュメントからWASMについて調べたいと思ったのがきっかけです。

https://docs.astar.network/build/smart-contracts/wasm/solidity

WASMは一つのバイナリをいろいろな場所で動かすことができるため、最近とても興味を持って調べています。

まず結果からですが、SBYトークンが取得できず(枯れているみたい)うまくいきませんでした。(先週も今も) しかしそこに至る経緯をメモしておきたいので、このまま進めたいと思います。(やりたいことは最後の動画を参考にしました)

その前に、Astar Networkについて整理しますが、Stake Technologiesという会社で創業者が日本人ということもあり個人的にもとても応援しているプロジェクトです。dApp開発者が報酬を得られるdApp Stakingというものに興味を持っています。

あと名前がややこしいのですが、Polkadot/Kusama (メインネット/実験ネット)に相当するのが、Astar/Shiden で、Shibuyaはテストネットになります。実験ネットとテストネットは違い実験ネットのコインは購入する必要があります。(少額はFaucetで取得できるみたい(しかし今はできない?)) Plasm Networkという名前もさまざまなドキュメントで残っていますが、これはAster Networkの以前の名前のようです。

AstarにはWASMがアップロードするためのコントラクトの項目がなかったので、Shibuyaで作業することにしました。

ShibuyaのFaucetは、Discord で取得できという案内がありましたができず、Astarのポータルからもできませんでした。

下記コミュニティFaucetからはできましたが、SS58(ネイティブ)ではなくH160(EVM)でした。

https://www.as-faucet.xyz/en#

下記でコンバートしてEVMデポジットに入金が確認できたのですが、ポータルでSS58に変換することができず、WASMをデプロイするためのガス代として使用できませんでした。(EVMから引き出しでエラー。少額だから?)

https://shibuya.subscan.io/

では、前置きが長くなりましたが下記サイトを参考に環境構築(solidityコンパイラ)からやってみます。

https://docs.astar.network/build/smart-contracts/wasm/solidity

sudo apt install llvm openssl libxml2-dev
sudo apt-get install liblld-10-dev

いつものように、Ubuntu20.04にインストールましたが、llvmのバージョンがあわずバイナリーを使うことにしました。(13が必要でUbuntuでは10,11,12までしかなし)

wget https://github.com/hyperledger-labs/solang/releases/download/v0.1.10/solang-linux-x86-64
wget https://raw.githubusercontent.com/hyperledger-labs/solang/master/examples/flipper.sol

テストプログラムも取得しました。(やっている内容はビット反転ですね)

contract flipper { bool private value; /// Constructor that initializes the `bool` value to the given `init_value`. constructor(bool initvalue) { value = initvalue; } /// A message that can be called on instantiated contracts. /// This one flips the value of the stored `bool` from `true` /// to `false` and vice versa. function flip() public { value = !value; } /// Simply returns the current value of our `bool`. function get() public view returns (bool) { return value; } }
Code language: PHP (php)

コンパイルしてできた、flipper.contract ファイル をアップロードします。

スクリーンショットとは違いますが、実際のアカウントは、shibuya01を使用。

あと、警告も解消させています。

Walletからinjectしただけでは、EVMデポジットに送ることができず、JSONファイルであらためてインポートしました。

結局できたのは、SBYが取得できなかったため(H160(EVM)でなくSS58(ネイティブ)でないと上記に表示できない?)、Deployする直前までで、実行についてサイトにあるものをご参考ください。

へんな形になりましたが、開発がどんどんすすんでいる最中のお試しとしては、できなかったとして何もしないよりもできたとこだけ記録しておくということ大切だと思っています。

ポータルの使い方としては、Polkadotと同じなので、このあたり統一されていてとてもわかりやすいと思いました。