Rust/dApp実習 - 環境を地道にメンテする日
今日は環境準備する日だった。設計は引き続きやっていくけれども環境も必要。
やりたいこと
つまり、開発用の環境を万全にしたいのだ。避けては通れない洗礼なのでやっていこう。
ビルド環境確認
↓
NEAR ウォレットアカウント作成(testnet)
↓
NEARウォレットログイン(testnet)
↓
スマートコントラクトビルド(NEAR SDK x Rust, WASM32)
↓
スマートコントラクトデプロイ(testnet)
↓
dAppフロントアプリ起動
やっていく
以下の通り段階的にやっていった。
NEAR ビルド環境作成
node,rustcのランタイムバージョン確認
$ node --version
v16.14.0
4
$ rustc --version
rustc 1.62.1 (e092d0b6b 2022-07-16)
near-cliインストール
これは先日実行したので既に入っていた
$ npm install -g near-cli # near-cliインストールされていなければ実施
rustcビルドターゲットにWASM32を追加
※こちらの手順 を参考にしました(rustupを使わずasdfを使ってrustインストールしていた為手動での追加)
$ curl -O https://static.rust-lang.org/dist/rust-std-1.62.1-wasm32-unknown-unknown.tar.gz
$ tar xfz rust-std-1.62.1-wasm32-unknown-unknown.tar.gz
$ mv rust-std-1.62.1-wasm32-unknown-unknown/rust-std-wasm32-unknown-unknown/lib/rustlib/wasm32-unknown-unknown /Users/e_fujikawa/.asdf/installs/rust/1.62.1/lib/rustlib/
NEARログイン(testnet)
NEARウォレット(testnet)にログイン
testnetにアカウントをそもそも持っていなかったので作成。
作成後、ログインに無事成功。
$ near login # 実行するとブラウザの画面が起動し、「Connect with NEAR」という認証を求めてくるので
NEARスマートコントラクトデプロイ(testnet)
コントラクトのプロジェクトに移動
$ cd /Users/e_fujikawa/Documents/git/awesome-rust-dapp/
ビルド実行
「res/status_message.wasm」というwasmファイルが生成されるのを確認
$ cargo build --target wasm32-unknown-unknown --release
デプロイ(testnet)
ビルド実行時に生成されたres/status_message.wasmをNEARのtestnetにデプロイする。
near dev-deployコマンド実行するとデプロイされるらしい。
↑やってみたら動いた。
「dev-1660474152460-14596747053304」というidを持つアカウントが作られた様子。コントラクト作成のトランザクションIDも出力されているのでこれは後で追えるように控えておこう。
$ near dev-deploy --wasmFile res/status_message.wasm --helperUrl https://near-contract-helper.onrender.com
Starting deployment. Account id: dev-1660474152460-14596747053304, node: https://rpc.testnet.near.org, helper: https://near-contract-helper.onrender.com, file: res/status_message.wasm
Transaction Id DNjzcXM6GgAGLnLHANQM6Xr9LaUNe8nLsWy2zjQiGxak
To see the transaction in the transaction explorer, please open this url in your browser
https://explorer.testnet.near.org/transactions/DNjzcXM6GgAGLnLHANQM6Xr9LaUNe8nLsWy2zjQiGxak
Done deploying to dev-1660474152460-14596747053304
デプロイ後に「/neardev/dev-account.env」というファイルが作成されるのを確認
フロントエンドの起動に必要らしい
CONTRACT_NAMEが設定されていることだけ確認しておく。
$ ls -la ./neardev/dev-account.env # dev-account.envファイルが作成されていること(ファイルの中に環境変数CONTRACT_NAMEが設定されていること)を確認
dAppフロントエンドアプリ起動(localhost)
プロジェクトのディレクトリに移動
$ cd /Users/e_fujikawa/Documents/git/awesome-rust-dapp/
起動(yarn run start)コマンド実行
$ yarn run start
$ npm run build && npm run build:web && env-cmd -f ./neardev/dev-account.env parcel ./frontend/index.html
> rust-status-message-builder@1.0.0 build
> rustup target add wasm32-unknown-unknown && cargo build --target wasm32-unknown-unknown --release
info: component 'rust-std' for target 'wasm32-unknown-unknown' is up to date
Finished release [optimized] target(s) in 0.13s
> rust-status-message-builder@1.0.0 postbuild
> cp ./target/wasm32-unknown-unknown/release/status_message.wasm ./res/
> rust-status-message-builder@1.0.0 build:web
> parcel build ./frontend/index.html --public-url ./ --no-minify
✨ Built in 477ms.
dist/frontend.737f6162.js.map 849.92 KB 59ms
dist/frontend.737f6162.js 722.05 KB 128ms
dist/favicon.3914b85e.ico 8.51 KB 15ms
dist/global.563201ff.css.map 2.66 KB 6ms
dist/global.563201ff.css 2.09 KB 9ms
dist/index.html 745 B 28ms
Server running at http://localhost:1234
✨ Built in 5.22sfuron
ブラウザ起動して表示を確認
$ open http://localhost:1234
次のアクション
次は、フロントエンドをNext.js,Typescript化する。
アーキテクチャ設計にも関連する。フロントエンドアプリをどこで動かすのがWeb3では筋なのかという問題。AWS S3デプロイ..?
(自律分散型じゃない!とか言って刺されそう)
また明日!
余談
それにしても、READMEのとおりにやってストレート動いたこと、ない、な。わかってはいる、わかってはいるが。グググ・・という感じ。
WASM32ビルドターゲットの追加、ちょっとハマって時間を溶かしてしまった。
rustupでターゲット追加してもビルド時に反映されずなぜだろうと考えていた。
結果はrustのインストールをasdfを使って行っていたから
今更だが「rustup」はasdfと立ち位置が重なる
rustupを使えばこんなことにはならないとはわかってはいる。
rustupはありがたい。
しかし、専用のインストーラを使う選択をするかは正直悩まされる。
たくさんのものを継続管理しなければならないから。
nodejsもterraformもk8sも継続管理が必要でつまりrustだけではない。そして開発PCが変わることもある。
この記事が気に入ったらサポートをしてみませんか?