このガイドでは、Aleph Zero ブロックチェーン上でスマート コントラクトを展開し、操作するためのさまざまな方法を説明します。
契約を Aleph Zero テストネットに展開する
Aleph Zero は、スマート コントラクトを操作するためのいくつかの方法を提供します。ここでは、Contracts UI を使用する方法と、Cargo Contract ツールを使用してコマンド ラインからデプロイする 2 つの主な方法について説明します。
方法 1: 契約 UI を使用してデプロイする
Contracts UI は、スマート コントラクトの展開と操作に必要なすべてをパッケージ化した合理化されたツールです。
スマート コントラクトの展開と操作に必要なツールはすべて、Contracts UI としてパッケージ化されているので便利です。開発者ウェブウォレットを使用してアカウントを作成し、フォーセットから無料の TZERO を取得していることを確認してください。そうしないと、ウォレット内の一部のタブとボタンが表示されない可能性があります。
[開発者] タブに移動し、ポップアップ メニューで [契約] をクリックして、スマート コントラクト コントラクト UI にアクセスします (上記のリンクに直接アクセスすることもできます)。
契約 UI に入ったら、サイド メニューの [新しい契約の追加] をクリックして展開ページに移動し、[新しい契約のアップロード] を選択します。
コントラクトの展開に使用するアカウントを選択します (多数ある場合)。このアカウントは、mytoken コントラクトによって作成された新しいトークンの初期供給全体を保持します。次に、下の「契約バンドルのアップロード」フィールドをクリックし、貨物契約で以前に生成した mytoken.contract ファイルの場所を選択します (mytoken/target/ink/ フォルダーにあるはずです)。すべて問題なければ、「有効な契約バンドル!」というメッセージが表示されるはずです。文章。
「次へ」をクリックします。次に、コントラクトをインスタンス化するために、コントラクトのコンストラクターにパラメーターを指定するように求められます。私たちの場合、これはトークンの最初の供給にすぎません (ここで任意の番号を選択できます。これはアカウントの TZERO 残高にはまったく関連付けられていません。
カスタム オプションがいくつかあります。これについては後のチュートリアルで説明します。右側のコスト見積もりに注目してください。とりわけ、この契約を作成するのに十分な残高 (つまり、ガス料金をカバーする) がアカウントにあるかどうかがわかります。
すべてがうまくいけば、次の画面が表示されます。
あとは「アップロードしてインスタンス化」ボタンをクリックしてコントラクトをデプロイするだけです。選択したアカウント マネージャー (現時点ではデフォルトは Polkadot.js 拡張機能) を使用してトランザクションに署名する必要があります。その後、契約に関する情報が表示される画面と、契約で呼び出す方法を選択するためのドロップダウン リストが表示されます。
「メタデータ」タブを選択して、コントラクトで呼び出し可能なメソッドを表示することもできます。
契約のやり取り
いよいよ新しいトークンを使って遊んでみましょう!左側のコントラクト リストから「mytoken」を選択したとすると、コントラクトを呼び出すメソッドを選択するドロップダウンが表示されます。
読み取り専用メソッドの BalanceOf および totalSupply は、右側の「結果」モーダルに結果をすぐに返します。これは、読み取り専用であるため、呼び出し用のトランザクションを作成する必要がないためです。
興味深いのは、transfer メソッドの呼び出しです。
転送の有効な受信者を設定するには 2 つ目のアカウントが必要になります (実際には、アカウント アドレスの形式が正しい限り、機能するために既存のアカウントに関連付ける必要はありません。ただし、別のアカウントを作成するだけで済みます)。テスト目的で有効なアドレスを取得する最も簡単な方法)。
転送金額を入力する必要があります (契約作成時に選択した初期供給量より大きい値を入力するとどうなるかを実験できます)。もう一度、追加のオプションをデフォルト値のままにします。
契約のインスタンス化と同様に、画面の右側に便利なガス見積もりがあり、それを使用して、このコールを実行するのに十分な資金があるかどうか (ガス料金の観点から) 確認できます。もう一度トランザクションに署名する必要があります。これで転送は完了です。 BalanceOf を使用すると、転送が実際に行われたかどうかを確認できるようになります。
方法 2: カーゴ コントラクトを使用してコマンド ラインからデプロイする
契約の展開
より自動化されたプログラム可能な方法で Aleph Zero ブロックチェーン上のスマート コントラクトと対話したい場合は、当社が契約をコンパイルした貨物契約コマンド ライン ツールを使用して、上記のすべてのアクションを実行することもできます。
ライブ チェーンと対話するすべての貨物契約サブコマンドは、チェーン エンドポイント アドレスとユーザーの秘密キー (シード フレーズ) を定義するフラグを使用して呼び出す必要があります。このセクションにあるコマンドをより簡潔にするために、まず、これらのフラグで使用される値を持ついくつかの環境変数を定義しましょう。
export SEED="[put your 12 words seed phrase here]"
export URL="wss://ws.test.azero.dev"
新しいコントラクトのデプロイは、instantiate サブコマンドを使用して実行できます。コントラクトが存在する mytoken フォルダーにいることを確認し、次のコマンドを実行します。
cargo contract instantiate --suri "$SEED" --url "$URL" \
--constructor new_token \
--args 1000
このコマンドの出力には、展開トランザクションの結果としてチェーンによって生成されたさまざまなイベント (料金の支払い、連絡先のアカウントの作成など) のリストが含まれます。最後のイベントは System ➜ ExtrinsicSuccess で、デプロイメントが成功したことを示し、その後に作成したばかりのコントラクトのアドレスに関する情報が続きます。コントラクトとのやり取りをより便利にするために、このアドレスを別の環境変数に保存してみましょう。
export CONTRACT="5GNruCfnGXjSPkW7LkRnB45MiHJJtvc6NBKZnDSnFh4So3ws
契約のやり取り
Web ウォレットのセクションで前述したように、スマート コントラクトで実行できる呼び出しには 2 種類あります。1 つはコントラクトの状態を変更せずに問い合わせる状態クエリで、もう 1 つは状態を変更し、署名されたトランザクションの送信を必要とする実行可能呼び出しです。料金を払っていること。これら 2 種類のアクションは、カーゴ コントラクトでは --dry-run フラグによって区別されます。
まずは、最も単純な引数なしの状態クエリを実行して、トークンの総供給量を確認しましょう。
cargo contract call --suri "$SEED" --url "$URL" \
--contract "$CONTRACT" \
--message total_supply \
--dry-run
出力には、total_supply 関数によって返されたデータなどが含まれます。
Result Success!
Reverted false
Data 1000
Gas Consumed 248300975
Gas Required 6815744000
Storage Deposit StorageDeposit::Charge(0)
Balance_of などの引数を使用して状態クエリを実行するには、連絡先をデプロイしてそのコンストラクターを呼び出したときと同様に、--args フラグを追加する必要があります。
cargo contract call --suri "$SEED" --url "$URL" \
--contract "$CONTRACT" \
--message balance_of \
--args 5FWmHxBXH4WfrryA6xdbaQRJALJ549aL11HMyybqDy5iNRtE \
--dry-run
Output:
Result Success!
Reverted false
Data 1000
Gas Consumed 322051074
Gas Required 6815744000
Storage Deposit StorageDeposit::Charge(0)
ここで、引数には任意の有効なアカウント アドレスを指定できます。もちろん、この時点では、コントラクト作成者 ($SEED に入れたシード フレーズに関連付けられたアドレス) 以外のすべてのアカウントのトークンは 0 で、作成者は合計 1000 トークンの供給を保持しています。そこで、いくつかのトークンを別のアカウントに転送して変更しましょう。
cargo contract call --suri "$SEED" --url "$URL" \
--contract "$CONTRACT" \
--message transfer \
--args 5D853t8wQuHJpfWvtcB3VUyKo8Ki44HQwgTmynGT4i5UVhbr 100
今回はチェーン状態を変更するトランザクションを送信したいため、 --dry-run フラグを省略する必要があります。出力には、呼び出しが成功したことを示すおなじみの System ➜ ExtrinsicSuccess で終わるトランザクションによって生成されたイベントのリストが含まれます。これで、100 個のトークンの転送が実際に行われたことを確認できます。
cargo contract call --suri "$SEED" --url "$URL" \
--contract "$CONTRACT" \
--message balance_of \
--args 5FWmHxBXH4WfrryA6xdbaQRJALJ549aL11HMyybqDy5iNRtE \
--dry-run
Output:
Result Success!
Reverted false
Data 900
Gas Consumed 322051074
Gas Required 6815744000
Storage Deposit StorageDeposit::Charge(0)
cargo contract call --suri "$SEED" --url "$URL" \
--contract "$CONTRACT" \
--message balance_of \
--args 5D853t8wQuHJpfWvtcB3VUyKo8Ki44HQwgTmynGT4i5UVhbr \
--dry-run
Output:
Result Success!
Reverted false
Data 100
Gas Consumed 322051074
Gas Required 6815744000
Storage Deposit StorageDeposit::Charge(0)
あなたの考え、経験、質問を以下のコメントセクションで共有することをお勧めします。あなたのフィードバックは貴重です!