WASMのスマートコントラクト開発を
勉強していきます!
web3エンジニアといっても領域広すぎ。
Astarに張るのは、悪くない判断でしょうという私見。
Astar Docに則る。
Environment Setup | Astar Docs
#Ink!
#Swanky
2022/11/17追記
以下つらつらとハマり点を書いたものの、
Windows環境でAstar Networkのスマコン開発環境構築したい場合は、
Ubuntu(WSL)を使った方が良いです!(暫定結論)
WSLは、WindowsOS上で、Linuxの仮想マシンを動かせる
機能です。
WSLでWindows 10にLinux仮想環境を構築 | パソコン工房 NEXMAG
理由)swanky initにて、windowsの場合ファイルパスの処理が
こけている。
globby(projectPath, {
expandDirectories: { extensions: ["hbs"] },
});
この処理でファイルを上手く取得できてないのです。
ファイルパスの区切り文字/ \がwin/Linuxで違うことに
globbyが対応できていない模様。
ごにょごにょとswankyのソースを触ると突破できそうでは
あるけど、同様の処理が他にもないとも限らない。
ファイルの区切り文字の問題だったら、Linux系マシンで
最初から構築した方がベータという判断です。
ハマり1:Rustのインストールにて、windowsはインストーラーから
Windowsの場合、Rustのインストールは
curlコマンドからではなく、インストーラーから
Install Rust - Rust Programming Language
ハマり2:Swanky init でError Checking dependencies
checkCliDependencies でエラーとなっている。
cargo contract のコマンドのinstallがどうやらおかしい。
解決の第一段階)
インストールの順を3⇒2と行います。
3. cargo install cargo-dylint dylint-link
↓ その後に
2. cargo install --force --locked cargo-contract
※2. からだと、このエラーになるっす。
--- stderr
Encountered error: dylint-link was not found!
Make sure it is installed and the binary is in your PATH environment.
再度swanky initを実行すると、
Error Checking dependenciesはこれで回避。
しかし、
ハマり3:Error Installing dependencies
npm install -g yarn でyarnをインストールすると、
一応正常終了。
しかし、.hbsという拡張子のファイルが残っており、
怪しい。
Windows環境が原因かもしれない。要調査。
deployで発生するエラー
swanky node start した後に、
swanky contract deploy flipper --account alice -g 1000000
(結果)
DeployingTypeError: args is not iterable (cannot read property undefined)
at DeployApi.deploy (/usr/local/lib/node_modules/@astar-network/swanky-cli/dist/commands/contract/deploy.js:127:31)
at /usr/local/lib/node_modules/@astar-network/swanky-cli/dist/commands/contract/deploy.js:60:51
at Spinner.runCommand (/usr/local/lib/node_modules/@astar-network/swanky-cli/dist/lib/spinner.js:32:31)
at DeployContract.run (/usr/local/lib/node_modules/@astar-network/swanky-cli/dist/commands/contract/deploy.js:58:48)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async DeployContract._run (/usr/local/lib/node_modules/@astar-network/swanky-cli/node_modules/@oclif/core/lib/command.js:80:22)
at async Config.runCommand (/usr/local/lib/node_modules/@astar-network/swanky-cli/node_modules/@oclif/core/lib/config/config.js:272:25)
at async Object.run (/usr/local/lib/node_modules/@astar-network/swanky-cli/node_modules/@oclif/core/lib/main.js:74:5)
✖ Error Deploying
-argsというパラメタに何か値を与えていないため、
エラーになっているよう。
公式Doc Swanky Suite | Astar Docsの凡例(gif動画?)でも、
-args true とよく見ると指定されている。
気を取り直し、
swanky contract deploy flipper --account alice -g 1000000 -args=True
しかし、ガス代不足と思わしきエラー。
Error: contracts.OutOfGas
ガス代を増やす
swanky contract deploy flipper --account alice -g 1000000000 -args=True
UNCHAINのコンテンツに挑戦~ハマりポイント~
UNCHAINで、Astarの学習コンテンツがリリースされましたね。
早速やってみています。
LESSON0-2 環境構築にて、
polkadot.jsからローカルノードに接続するところで、以下エラー。
Waiting to make a connection to the remote endpoint and finishing API initialization
察するに、こういう現象
・ノードはWSLのUbuntuで動いている。プロセスはホストのWindowsからは見えない
・ホストのWindowsのブラウザからは、ホストの127.0.0.1:9944を見に行っている
結果、ホストのブラウザからは、WSLのプロセスは見えてない故に起こっていそう。
ならば、UbuntuからChromeを起動できれば、ローカルノードが見えるはず!
以下記事を参考にインストール。
WSL2+Ubuntu 20.04にChromeをインストール | AsTechLog
ubuntuから$google-chrome の実行だけだと、以下エラー
[13492:13492:1123/163831.368810:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
$google-chrome -no-sandbox と実行することで正常起動できました。
MacBook Air (M2)で新たにswankyインストールでハマった件追記(2023/1/12)
M2チップのMacBookを購入しまして、Astar/slashのハッカソンに
出ようと息巻いています。
で、事前の環境構築が必要なためswanky-CLIのインストールを
行っていたんですが、一箇所ハマりました。
Recommended Way: Downloading the precompiled binaries
こちらのインストール方法に則りましたが以下エラー。
usr/local/bin/swanky: line 44: /Users/xxxx/hack/astar/swanky/bin/node: Bad CPU type in executable
swanky/bin/swankyのコマンドを読み解くと、どうやら
swanky/bin/node を実行する箇所で前述のエラーが吐かれているよう。
これ、node.js のnodeのバイナリのようです。
おそらくば、M2チップに非対応のバージョンでは?と当たりをつける。
まず、ピカピカのmacだったというのもあり、
homebrewを使ってnode.jsをインストール。
code-graffiti.com
インストールしたnode.jsの方が使われるように、
愚直ですがswanky/bin/nodeをリネームして呼ばれないようにしました。
(node_など、なんでもOK)
結果、swankyのコマンドは通るように。
node.js起因で今後何か不具合出るかもしれないけど、
使いながら様子見作戦です。
※後日追記
結局、後からnpm を使った方法でインストールし直しました。
Astarの開発環境ハンズオンに向けての事前案内で、この方法が
記載されていたので。
npm install -g @astar-network/swanky-cli@1.0.7
警告が残っているけど当面無視にする!
実のところ、コマンドを実行するたび、「内部で持っているモジュールの
バージョンが2種類あるよ」と警告されるのですが、
動作には今のところ問題なさそうなのでスルーする。
@polkadot/util has multiple versions, ensure that there is only one installed.
Either remove and explicitly install matching versions or dedupe using your package manager.
The following conflicting packages were found:
cjs 10.2.6 node_modules/@astar-network/swanky-cli/node_modules/@polkadot/util-crypto/node_modules/@polkadot/util/cjs
cjs 10.2.1 node_modules/@astar-network/swanky-cli/node_modules/@polkadot/util/cjs
@polkadot/util-crypto has multiple versions, ensure that there is only one installed.
Either remove and explicitly install matching versions or dedupe using your package manager.
The following conflicting packages were found:
cjs 10.2.6 node_modules/@astar-network/swanky-cli/node_modules/@polkadot/util-crypto/cjs
cjs 10.2.1 node_modules/@astar-network/swanky-cli/node_modules/@astar-network/swanky-core/node_modules/@polkadot/util-crypto/cjs
@polkadot/util-crypto has multiple versions, ensure that there is only one installed.
Either remove and explicitly install matching versions or dedupe using your package manager.
The following conflicting packages were found:
cjs 10.2.6 node_modules/@astar-network/swanky-cli/node_modules/@polkadot/util-crypto/cjs
cjs 10.2.1 node_modules/@astar-network/swanky-cli/node_modules/@astar-network/swanky-core/node_modules/@polkadot/util-crypto/cjs
cjs 10.2.1 node_modules/@astar-network/swanky-cli/node_modules/@polkadot/keyring/node_modules/@polkadot/util-crypto/cjs
コントラクトをdeployするときの"args"って何に使われる?
swanky contract deploy flipper --account alice -g 1000000000 --args true
argsを入れないとどうもエラーになる。
このtrueは何?と思ったけど、
flipperのconstructorの引数に設定されることになります。
Polkadot/Substrate Portal からlocal nodeを見るにはbraveブラウザ挙動怪しい
Waiting to establish a connection with the remote endpoint.
というエラーでぐるぐるして、どうもローカルで立ち上げたノードに
繋がりません。
Google Chromeにブラウザを変更したら、解決。
braveブラウザの何か仕様が制限かかっているのかもしれません。
"Weight v2"への対応状況でフロントエンドからの呼び方変わる
手元の環境でわかる限りだと、
swanky node (1.0.7) → Weight V1
astar-collator(4.39.1) → Weight V2
shibuya → Weight V2
shiden → Weight V2
そして、Polkadotポータルって、おそらくWeight V2にまだ未対応なのでは?
と思わしきエラーが出る。
参考
smart contract function call error - Substrate and Polkadot Stack Exchange
結論、スマートコントラクトのみの実装時は、
swanky nodeを使う。
フロンドエンドと合わせる時は、
astar-collatorを使う。
そしてそろそろテストネットでもと思ったらshibuyaを使う。
のが良さそう。
String型はopenbrushのOption<String>を使おう
swankyでdeployをする時のこのエラーで、
数時間溶けた!笑 (でもコード読めるようになってきた感)
Deployingerror: system.ExtrinsicFailed contracts.CodeRejected
Error: contracts.CodeRejected
at /Users/yasuyasu/.nodebrew/node/v18.13.0/lib/node_modules/@astar-network/swanky-cli/node_modules/@astar-network/swanky-core/dist/lib/substrate-api.js:108:27
at Array.forEach (<anonymous>)
at /Users/yasuyasu/.nodebrew/node/v18.13.0/lib/node_modules/@astar-network/swanky-cli/node_modules/@astar-network/swanky-core/dist/lib/substrate-api.js:89:18
at /Users/yasuyasu/.nodebrew/node/v18.13.0/lib/node_modules/@astar-network/swanky-cli/node_modules/@polkadot/api/cjs/promise/decorateMethod.js:72:33
at /Users/yasuyasu/.nodebrew/node/v18.13.0/lib/node_modules/@astar-network/swanky-cli/node_modules/@polkadot/util/cjs/nextTick.js:20:7
どうもですね、use ink_prelude::string::String;
で読み込むString型は、substrateのノードに弾かれるよう。
コンパイルは通るんですけどねぇ。
使って欲しくない型なのかな。
フロントエンドから呼ぶときメソッド名が変わるの怪
たとえば、スマートコントラクトで
以下のような名前のメソッドを定義しているとします。
/// Simply return value.
#[ink(message)]
pub fn get_description(&self) -> Option<String> {
return self.description.clone();
}
metadata.json(abiファイルになる)にも、同じメソッド名ですね。
{
"args": [],
"docs": [
" Simply return value."
],
"label": "get_description",
"mutates": false,
"payable": false,
"returnType": {
"displayName": [
"Option"
],
なんですが、フロントエンド(next.js)から呼ぶときは、
contract.query.getDescription
のような記法で呼び出さないと、エラーになります。
そういえば、Polkadot Portalの方でも、getDescriptionと変換されていましたし。
rustの方と、substrateの方でそれぞれにメソッド名への流儀があるのかな。
ちなみに、rustの方でgetDescriptionとすると、get_descriptionにしてね
とうwarningが出ます笑