Rustスマートコントラクト開発日記(3)
BlockSec
2022-03-29 10:29
本文约4130字,阅读全文需要约17分钟
コントラクトのデプロイ、関数呼び出し、およびエクスプローラーの使用。

関連記事:

Rust スマートコントラクト開発日記 (2) Rust スマートコントラクトの単体テストを書く

Rust スマート コントラクト開発ブログの今号では、BlockSec が、簡単なサンプル スマート コントラクトを NEAR テスト ネットワーク (TestNet) にデプロイし、コントラクトを実行し、コントラクトの実行結果をクエリする方法を紹介します。

契約開発者が契約のメイン ロジックを実装し、単体テストを実行すると、開発者は契約プロジェクトを WASM バイトコードにコンパイルし、それを NEAR のテスト チェーンに展開して、メインネット (MainNet) への最終展開の準備を整えることができます。

1. NEARネットワークの紹介

プロトコルとしての NEAR プロトコルは、このプロトコルに基づいて複数の独立したネットワークが存在できることを意味します。 NEARプロトコルで策定された仕様・規格NEARプロトコル仕様・規格では、NEARプロトコルに基づく異なるチェーンが規定されており、作成ブロック構成のGenesisConfig内のchain_idが異なります。

  • TestNet

    私たちが一般的に使用するネットワークには、主に次の 3 種類があります。

  • MainNet

    すべてのスマート コントラクト プロジェクトは、プロジェクトの機能を実現するために、最終的にブロックチェーン ネットワーク上で実行する必要があります。ただし、新しいプロジェクトの場合、プロジェクト チームは多くの場合、スマート コントラクト プロジェクトの機能と関連するビジネス ロジックをテストするために、プロジェクトをテスト ネットワーク (TestNet) にデプロイします。

  • LocalNet

    コントラクトがテスト ネットワークで複数回のテストと独立したセキュリティ レビュー (必要な場合) を経た後、開発チームはコントラクトをメイン ネットワーク (MainNet) に正式に展開することを選択できます。

LocalNet は TestNet とは異なります。 LocalNet はローカルで実行されるため、チェーン上にデプロイされたコントラクトとトランザクション データは外部ネットワークに公開されません。開発者が、TestNet または MainNet にデプロイされる前に契約プロジェクトに関する重要な情報を漏洩したくない場合は、LocalNet が適切な選択となります。

2. NEAR CLI のインストール

$ sudo npm install -g near-cli

NEAR CLI (コマンド ライン インターフェイス) は NodeJS コマンド ライン インターフェイスであり、near-api-js を使用して上記のネットワークに接続し、ネットワークと対話します。したがって、インストールする前に、npm (正式名 Node Package Manager) をインストールする必要があります。その後、npm を使用して Linux で次のインストール コマンドを実行し、NEAR CLI をインストールします。

$ near --version

次のコマンドを実行して、インストールされている NEAR CLI のバージョンを表示し、インストールが成功したかどうかを確認します。

3. TestNet にコントラクトをデプロイします

3.1. TestNet アカウントの登録https://wallet.testnet.near.org新規ユーザーは次の場所にアクセスできます

このページで新しい TestNet ウォレットを登録するには、ユーザー名 (statusmessage.testnet など) を入力するだけで登録が完了します。https://explorer.testnet.near.orgそれから

, 次のように、TestNet 内のアカウントに関する関連情報を検索して表示できます。

TestNet では、新しく作成された各アカウントには 200Ⓝ の生残高が含まれます。

3.2. NEAR CLI でアカウントにログインします。

$ near login

NEAR CLIをインストールし、NEAR TestNetにユーザーアカウントを申請したので。次のように、NAER CLI でアカウントへのログインを試行できます。

上記のコマンドを実行すると、NEAR CLI によってリンクが呼び出され、ユーザーは手動でクリックして上記の statusmessage.testnet アカウントにログインする必要があります。

3.3. アカウント関連情報の表示

$ near state statusmessage.testnet
Account statusmessage.testnet
{    amount: '199999959035075000000000000',
     block_hash: '8iomNEFNa4LQB54ehTPBGu8bBfotistoWrBcYJfxm8vA',
     block_height: 68318068,
     code_hash: '11111111111111111111111111111111',
     locked: '0',
     storage_paid_at: 0,
     storage_usage: 264,
     formattedAmount: '199.999959035075' 
}

同時に、NEAR CLI を通じて特定のアカウントの関連情報を照会できます。

3.4. 契約の編集と展開

$ RUSTFLAGS='-C link-arg=-s' cargo +stable build --target wasm32-unknown-unknown --release

コントラクトをデプロイする前に、まずコントラクトをコンパイルする必要があります。次のコマンドを使用して、特定の WASM ファイル status_message.wasm をカーゴとともにコンパイルできます。このファイルは通常、次のターゲット/wasm32-unknown-unknown/release/ ディレクトリにありますプロジェクト。

$ cd target/wasm32-unknown-unknown/release
$ export MASTER_ACCOUNT=statusmessage.testnet
$ near create-account contract01.$MASTER_ACCOUNT
                          --initialBalance 10
                          --masterAccount $MASTER_ACCOUNT
Account contract01.statusmessage.testnet for network "testnet" was created.

同時に、コントラクトの展開用に、contract01.statusmessage.testnet という名前の statusmessage.testnet のサブアカウントを作成できます。

$ near deploy --accountId contract01.$MASTER_ACCOUNT \
                        --wasmFile status_message.wasm

次に、neardeploy コマンドを使用してコントラクトをデプロイできます。

Starting deployment. Account id: contract01.statusmessage.testnet, node: [https://rpc.testnet.near.org](https://rpc.testnet.near.org), helper: [https://helper.testnet.near.org](https://helper.testnet.near.org), file: status_message.wasm
Transaction Id 4oDYA8wPLJuKwDumJxEGubeJBA9Ep13MLXSf34q9ydRm
To see the transaction in the transaction explorer, please open this url in your browser[https://explorer.testnet.near.org/transactions/4oDYA8wPLJuKwDumJxEGubeJBA9Ep13MLXSf34q9ydRm](https://explorer.testnet.near.org/transactions/4oDYA8wPLJuKwDumJxEGubeJBA9Ep13MLXSf34q9ydRm) Done deploying to contract01.statusmessage.testnet

コントラクトのデプロイが成功すると、次の情報を取得できます。

3.5 通話契約機能

$ near call --accountId $MASTER_ACCOUNT \
      contract01.$MASTER\_ACCOUNT set\_status '{"message":"Hi!2021"}'

コントラクトを TestNet に正常にデプロイすると、コントラクトをデプロイしたアカウント Contract01.statusmessage.testnet がコントラクトのアドレスになります。 TestNet の StatusMessage コントラクトが正常に実行できるかどうかを確認します。 set_status を呼び出して、コントラクトの組み込みプロパティを設定できます。

Scheduling a call: contract01.statusmessage.testnet.set_status({"message":"Hi!2021"})
TransactTransaction Id E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN
To see the transaction in the transaction explorer, please open this url in your browser[https://explorer.testnet.near.org/transactions/E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN](https://explorer.testnet.near.org/transactions/E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN) ''

以下は、コントラクト内で set_status 関数を呼び出すことによって返される情報です。

StatusMessage コントラクト関数呼び出しトランザクションが正常に実行でき、特定のトランザクション ID、つまり E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN が返されることがわかります。

3.6 取引照会

NEAR は、データ閲覧クエリ プラットフォームである NEAR Explorer をコミュニティに提供します。ユーザーは、プラットフォーム上の指定されたネットワーク内のアカウント ID、トランザクション ハッシュ、トランザクション ブロックなどのリアルタイムのオンチェーン情報を検索できます。https://explorer.testnet.near.org/transactions/E9dsw8H9ztDN18DDvXKTBPvBLWHew7TtuWsLgg6uvesN

トランザクション ID を使用して、NEAR Explorer で特定のトランザクションの詳細をクエリします。

この問題の概要とプレビュー

BlockSec
作者文库