見出し画像

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」という認証を求めてくるので
ログインを求めてくる
勇気を出してConnect

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が変わることもある。

この記事が気に入ったらサポートをしてみませんか?