メインコンテンツまでスキップ

ブロックチェーンとの統合

あなたが顧客へのブロックチェーンサービス提供者で、プラットフォームにAptosブロックチェーンを追加したい場合は、このガイドが役立ちます。このシステムインテグレーターガイドは、プラットフォームにAptosブロックチェーンを統合する際必要な全ての手順を解説します。

概要

このドキュメントでは、以下のタスクでAptosと統合する方法を解説します。

  1. テスト用の環境を準備します。
  2. ブロックチェーン上にアカウントを作成します。
  3. 例えばスワップを実行するために、アカウントIDとブロックチェーン上の別のエンティティを交換します。
  4. トランザクションを作成します。
  5. ガスの見積もりを取得し、トランザクションが正しいかどうか検証します。
  6. トランザクションをブロックチェーンに送信します。
  7. トランザクションの結果を待ちます。
  8. 与えられたアカウントと特定のアカウントとの取引履歴や、やり取りをクエリします(引出しや入金等)。

始める

開始するには、ネットワークを選択し、ツールのセットを選ぶ必要があります。開発の加速に役立つSDKもいくつかあります。

ネットワークを選択する

Aptosブロックチェーンと統合するためのネットワークが4つあり、充分サポートされています。

  1. ローカルネット -- 外部ネットワークを使用せず、既知のバージョンのコードベースに対しローカル開発を行うためのスタンドアロンツールです。
  2. Devネット -- コミュニティの共有リソース。データは毎週リセットされ、aptosコアメインブランチから毎週更新されます。
  3. テストネット -- コミュニティの共有リソース。データは保存され、ネットワーク構成はメインネットを模倣します。
  4. メインネット -- 実際の資産を含むプロダクションネットワーク。

各環境の詳細についてはAptosブロックチェーンネットワークを御覧下さい。

ローカルテストネットを実行する

ローカルネットを実行するには2つの選択肢があります。

  • Aptos CLIをインストールし、2)ローカル開発ネットワークを実行します。このパスはAptosブロックチェーンでの開発、Moveコントラクトのデバッグ、およびノー​​ド操作のテストに役立ちます。これにより、単一ノードネットワーク、ノードREST API、インデクサーAPI、フォーセットを含むローカル開発環境の機能が完備されています。

  • Aptosコアソースコードのいずれかを使用して、直接ローカルネットを実行します。これらのパスは、Aptosコアのコードベースまたはフレームワークへの変更をテストする場合、またはAptosブロックチェーンのトップにサービスを構築する場合、それぞれ役立ちます。

これらの方法のいずれでも、http://127.0.0.1:8080REST APIサービスを公開します。http://127.0.0.1:8000 でオプション1のローカルネットを実行してフォーセットAPIサービスを公開します。または、http://127.0.0.1:8081でオプション2のAptos CLIをインストールします。アプリケーションはサービス用の場所を出力します。

プロダクションネットワークアクセス

SDKとツール

Aptosは現在3つのSDKを提供しています。

  1. Typescript
  2. Python
  3. Rust

殆どの開発者はCLIからの恩恵を受ける事が出来ます。Using the CLIの使用では、CLIを使用してアカウントの作成、コインの転送、Moveモジュールの公開等を行う方法を示します。

Aptosのアカウント

accountトランザクションを送信出来るAptosブロックチェーン上のエンティティを表します。各アカウントは特定の32バイトのアカウントアドレスによって識別され、 Moveモジュールと資源のコンテナーとなります。Aptosでは、アカウントが絡むブロックチェーン操作は、オンチェーンでアカウントを先に作成してから行います。Aptosフレームワークは、aptos_account::transferを介してAptosコインを転送する時、暗黙的にアカウントが作成されます。もしくはaptos_account::create_accountを介してアカウント作成します。

作成中のAptosアカウントは以下を含みます。

  • Aptosコインを含む資源と、その資源からのコインの入出金。
  • 現在の公開鍵と秘密鍵に関連付けられた認証キー。
  • 厳密に増加するシーケンス番号。リプレイ攻撃を防ぐため、アカウントの次に来るトランザクションのシーケンス番号を表します。
  • 厳密に増加する数値。次に来る個別のGUID作成番号を表します。
  • アカウントに追加された新タイプのコイン全部のイベントハンドル
  • アカウントの全キーローテーションのイベントハンドル。

アカウントについて詳しく読みCLIを設定して下さい。

トランザクション

Aptosトランザクションバイナリ公式シリアライゼーション(BCS)でエンコードされます。トランザクションは送信者のアカウントアドレス、送信者からの認証、Aptosブロックチェーンで実行したい操作、送信者がトランザクションの実行で支払うガス量等の情報を含みます。

詳細はトランザクションと状態

トランザクションの生成

Aptosは、トランザクション構築方法を2つサポートしています。

  • Aptosクライアントライブラリを使用してネイティブBCSトランザクションを生成します。
  • JSONエンコードされたオブジェクトを構築し、REST APIと対話してネイティブトランザクションを生成します。

好ましいアプローチは、直接ネイティブBCSトランザクションを生成する事です。REST APIを介してそれらを生成すると、フルノードがトランザクションを正しく生成する事を信頼をせず、迅速な開発が可能です。

BCSでエンコードされたトランザクション

BCSでエンコードされたトランザクションは/transactionsエンドポイントに送信できますが、HTTPヘッダーでContent-Type: application/x.aptos.signed_transaction+bcsを指定する必要があります。これにより、トランザクション送信結果が返されます。成功した場合トランザクションハッシュはhashフィールドへ含まれます。

JSONでエンコードされたトランザクション

JSONでエンコードされたトランザクションは、以下の手順に従いREST API経由で生成出来ます。

  1. まずPython SDKで示す通り、/transactions/encode_submissionエンドポイントの適切なJSONペイロードを構築します。
  2. 上記の出力にはmessageを含むオブジェクトが含まれています。このmessageはローカルで送信者の秘密鍵を使用して署名する必要があります。
  3. 元のJSONペイロードを署名情報で拡張し/transactionsエンドポイントにポストします。これにより、トランザクション送信結果が返されます。成功した場合、hashfieldはトランザクションハッシュを含みます。

JSONエンコードされたトランザクションにより、迅速な開発が可能となり、トランザクション引数からネイティブ型へのシームレスなABI変換がサポートされます。殆どのシステムインテグレーターは、独自の技術スタック内でトランザクションを生成する事を好みます。 TypeScript SDKPython SDKは両方とも、BCSトランザクションの生成をサポートしています。

トランザクションのタイプ

特定のトランザクション内では、実行のターゲットは以下2つのタイプのどちらかです。

  • エントリーポイント(以前はスクリプト関数と呼ばれていました)
  • スクリプト(ペイロード)

PythonTypeScriptはどちらも、エントリーポイントをターゲットとするトランザクションの生成をサポートしています。このガイドでは、aptos_account::transferaptos_account::create_accountの様なエントリーポイントの多くについて解説します。

Aptosブロックチェーン上の殆どの基本操作は、エントリーポイント呼び出しを介して利用出来るべきです。連続してエントリポイントを呼び出す複数のトランザクションを送信する事も出来ますが、その様な操作は単一のトランザクションからアトミックに呼び出す事が出来ます。スクリプトペイロードトランザクションは、どのモジュール内で定義されたどのパブリック(エントリ)関数も呼び出す事が出来ます。Moveスクリプトの例では複数のエージェントトランザクションを使用して2つの口座から資金を引き出し、他の2つの口座に入金します。 Pythonの例では、スクリプトをコンパイルして生成されたバイトコードを使用します。現在、TypeScriptでのスクリプトペイロードのサポートは限定的です。

トランザクションの状態

トランザクションの送信中に返されたハッシュを使用してAPI/transactions/by_hash/{hash}をクエリする事でトランザクションステータスを取得します。

トランザクションを送信するための合理的な戦略は、トランザクションの有効期間を30~60秒に制限し、成功するまで定期的にAPIをpollingする事です。(またはその時間が経過してから数秒が経過するまでpollingする事です)。オンチェーンにコミットメントがない場合、トランザクションは破棄された可能性があります。

トランザクションのテストまたはトランザクションの事前実行

トランザクションの評価とガス見積りを容易にするため、Aptosは シミュレーションAPIをサポートしています。このAPIはトランザクションで有効な署名を必要としませんし、含めるべきでは有りません。

シミュレーションAPIは同期APIであり、トランザクションを実行し、ガス使用量を含む出力を返します。シミュレーションAPIには/transactions/simulateへトランザクションを送信する事でアクセスできます。

Typescript SDKPython SDKはどちらもシミュレーションAPIをサポートしています。注意)使用される出力とガス使用量はアカウントの状態に応じて変更される可能性があります。ガスの見積もりについては、最大ガス量をこのAPIの見積り量より大きくする事をお勧めします。

現在および過去の状態の表示

Aptosブロックチェーンへの殆どの統合は、ブロックチェーンの現在および過去の状態の全体的かつ包括的な概要から恩恵を受けます。 Aptosはトランザクション履歴、状態、イベント、トランザクション実行の結果全てを提供します。

  • トランザクション履歴は実行ステータス、出力を指定し、関連イベントに関連付けます。各トランザクションには、固有のバージョン番号が関連付けられていて、ブロックチェーン台帳の履歴におけるグローバルな連続順序を記録しています。
  • 状態は特定のバージョンまでの全トランザクション出力を表します。言い換えると、状態バージョンはそのトランザクションバージョンを含む全トランザクションの累積です。
  • トランザクションが実行されると、イベントが発行される場合があります。Eventsは、オンチェーンデータの変更に関するヒントです。

ノード上のストレージサービスは、ノードからデータを消去する2つの形式のプルーニングを採用しています。

  • 状態(state)
  • イベント、トランザクション、その他全て

これらのいずれかを無効にすることはできますが、状態バージョンの保存は特に持続可能ではありません。

イベントとトランザクションのプルーニングは enable_ledger_prunerfalseに設定することで無効にできます。これはメインネットのデフォルトの動作です。 近い将来、Aptosはノードから直接クエリする必要性を軽減するインデクサーを提供します。

REST APIでは、以下の方法でトランザクションとイベントをクエリ出来ます。

代替資産の交換と追跡

Aptosには標準の代替資産が有ります。この標準では、別のメタデータオブジェクトを使用し、様々なタイプの代替資産(FA)を表現できます。

ユーザーのFAは、そのユーザーが所有するFungibleStoreに保存されます。 FAのタイプごとに、全てのアカウントにそのFAのプライマリストアが1つ有り、オプションの複数のセカンダリストアが有ります。プライマリストアとセカンダリストアの違いは、プライマリストアのアドレスはユーザーアカウントとメタデータオブジェクトのアドレスに基づいて決定されることです。

ユーザー間での代替資産の転送

APTを含むFAはprimary_fungible_store::transfer機能を介してユーザーのプライマリストア間で転送できます。 どのFungibleStorefungible_asset::transferFungibleStoreオブジェクト アドレスを使用して呼び出され(invoked)ます。

現在のコイン残高

FungibleStoreのAPT FAの現在の残高は、アカウントリソースURL: https://{rest_api_server}/accounts/{fungible_store_object_address}/resource/0x1::fungible_asset::FungibleStoreで確認できます。 残高はbalanceとして保存されます。リソースには、FAタイプのmetadataオブジェクトとfrozenステータスも含まれます。プライマリ代替ストアのアドレスはsha3(32-byte account address | 32-byte metadata object address | 0xFC)の様に計算できます。

{
type:"0x1::fungible_asset::FungibleStore"
data:{
balance:"233910778869"
frozen:false
metadata:{
inner:"0xedc2704f2cef417a06d1756a04a16a9fa6faaed13af469be9cdfcac5a21a8e2e"
}
}
}

コインの交換と追跡

Aptosには標準のCoin typeが有ります。タイプパラメータまたはCoin<T>のジェネリックを表す個別の構造体を使用する事で、様々なタイプのコインをこのタイプで表す事が出来ます。

コインは、アカウント内のCoinStore<T>リソースの下に保管されます。アカウント作成時に各ユーザーは、 CoinStore<0x1::aptos_coin::AptosCoin>リソースもしくは略してCoinStore<AptosCoin>リソースを持ちます。このリソースにはAptosコインCoin<AptosCoin>があります。

ユーザー間でのコインの送金

APTを含むコインは、全コイン用のaptos_account::transfer_coins機能、およびアプトスコイン用の aptos_account::transfer機能を介してユーザー間で送金出来ます。

注意

重要です、注意して下さい。 アカウントがCoinStore<T>を指定されたTへ登録していない場合、そのアカウントへのタイプTの転送は失敗します。

現在のコイン残高

TがAptosコインであるCoin<T>の現在の残高は、アカウントリソースのURL:https://{rest_api_server}/accounts/{address}/resource/0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>で確認できます。残高はcoin::amountへ保管されます。このリソースには、入金イベントと出金イベントの合計数、及びdeposit_events内のcounter値とwithdraw_eventsがそれぞれ含まれています。

{
"type": "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>",
"data": {
"coin": {
"value": "3927"
},
"deposit_events": {
"counter": "1",
"guid": {
"id": {
"addr": "0xcb2f940705c44ba110cd3b4f6540c96f2634938bd5f2aabd6946abf12ed88457",
"creation_num": "2"
}
}
},
"withdraw_events": {
"counter": "1",
"guid": {
"id": {
"addr": "0xcb2f940705c44ba110cd3b4f6540c96f2634938bd5f2aabd6946abf12ed88457",
"creation_num": "3"
}
}
}
}
}

トランザクションのクエリ

Aptosは、各トランザクションを別個のバージョンとしてブロックチェーンにコミットします。これは、コミットされたトランザクションをバージョン番号で共有するのに便利です。これを行うには、次の様にクエリします: https://{rest_server_api}/transactions/by_version/{version}

アカウントが送信したトランザクションは、sequence_number がトランザクションのシーケンス番号と一致するURL:https://{rest_server_api}/account/{address}/transactions?start={sequence_number}&limit=1を介してクエリする事も出来ます。

転送トランザクションは以下の様に表示されます。

{
"version": "13629679",
"gas_used": "4",
"success": true,
"vm_status": "Executed successfully",
"changes": [
{
"address": "0xb258b91eee04111039320a85b0c24a2dd433909e14a6b5c32ee722e0fdecfddc",
"data": {
"type": "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>",
"data": {
"coin": {
"value": "1000"
},
"deposit_events": {
"counter": "1",
"guid": {
"id": {
"addr": "0x5098df8e7969b58ab3bd2d440c6203f64c60a1fd5c08b9d4abe6ae4216246c3e",
"creation_num": "2",
}
}
},
...
}
},
"type": "write_resource"
},
...
],
"sender": "0x810026ca8291dd88b5b30a1d3ca2edd683d33d06c4a7f7c451d96f6d47bc5e8b",
"sequence_number": "0",
"max_gas_amount": "2000",
"gas_unit_price": "1",
"expiration_timestamp_secs": "1660616127",
"payload": {
"function": "0x1::aptos_account::transfer",
"arguments": [
"0x5098df8e7969b58ab3bd2d440c6203f64c60a1fd5c08b9d4abe6ae4216246c3e",
"1000"
],
"type": "entry_function_payload"
},
"events": [
{
"key": "0x0300000000000000810026ca8291dd88b5b30a1d3ca2edd683d33d06c4a7f7c451d96f6d47bc5e8b",
"guid": {
"id": {
"addr": "0x810026ca8291dd88b5b30a1d3ca2edd683d33d06c4a7f7c451d96f6d47bc5e8b",
"creation_num": "3"
}
}
},
"sequence_number": "0",
"type": "0x1::coin::WithdrawEvent",
"data": {
"amount": "1000"
}
},
{
"key": "0x02000000000000005098df8e7969b58ab3bd2d440c6203f64c60a1fd5c08b9d4abe6ae4216246c3e",
guid": {
"id": {
"addr": "0x5098df8e7969b58ab3bd2d440c6203f64c60a1fd5c08b9d4abe6ae4216246c3e",
"creation_num": "2"
}
}
},
"sequence_number": "0",
"type": "0x1::coin::DepositEvent",
"data": {
"amount": "1000"
}
}
],
"timestamp": "1660615531147935",
"type": "user_transaction"
}

トランザクション情報の内訳は、

  • versionは、このトランザクションのグローバルな一意の識別子を表し、ブロックチェーンへコミットされた全トランザクションにおける位置を順序付けます。
  • senderは、トランザクションを送信したエンティティのアカウント アドレスです。
  • gas_usedトは、トランザクションの実行で支払われる単位です。
  • successvm_statusは、トランザクションが正常に実行されたかどうか、及びトランザクションが正常に実行されなかった場合の原因を表します。
  • changesは、トランザクションの実行中に変更された状態リソースの最終の値が含まれます。
  • eventsはトランザクションの実行中に発行された全てのイベントが含まれます
  • timestampは、トランザクション実行のほぼリアルタイムのタイムスタンプです。

successがfalseの場合、vm_statusはトランザクションの失敗を引き起こしたエラーコードまたはメッセージが含まれます。successがfalse の場合、changesはアカウントからのガス料差引きとシーケンス番号の増加に限定されます。eventsも起こらないので。

eventsの各イベントは、keyによって区別されます。keychangesguidから派生されます。具体的には、keyは40バイトの16進文字列で、最初の8バイト(または16文字)はchangesイベントのguidcreation_numのリトルエンディアン表現で、残りの文字はアカウントアドレスです。

イベントは発行する物を決定しないため、イベントのソースを特定するにはchangesのパスを追跡することが不可欠です。特に、コインの種類に応じて各CoinStore<T>には、WithdrawEventDepositEventの両方が有ります。トランザクションでどのコインタイプが使用されているかを調べるため、インデクサーはchangesイベントのguid::creation_numevents内のイベントのkeyへのアドレスを組み合わせて比較できます。

上の例を使用すると、events[1].guidchanges[0].data.data.deposit_events.guidと同等です。即ち{"addr": "0x5098df8e7969b58ab3bd2d440c6203f64c60a1fd5c08b9d4abe6ae4216246c3e", "creation_num": "2"}です。

ヒント

keyフィールドは削除されguidが使用されます。

イベントのクエリ

Aptosはコインの全ての引き出しと入金に対して、正確で簡潔なイベントを提供します。これを関連するトランザクションと連携して使用すると、時間の経過に伴うアカウント残高の変化、それがいつ起こったのか、何が原因で起こったのかをユーザーに提示できます。ある程度の追加の解析を行うと、トランザクションタイプや関係する他の当事者などのメタデータも共有できます。

ハンドルURLによるイベントのクエリ: https://{rest_api_server}/accounts/{address}/events/0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>/withdraw_events :https://{rest_api_server}/accounts/{address}/events/0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>/withdraw_events

[
{
"version":"13629679",
"key": "0x0300000000000000cb2f940705c44ba110cd3b4f6540c96f2634938bd5f2aabd6946abf12ed88457",
"guid": {
"id": {
"addr": "0x810026ca8291dd88b5b30a1d3ca2edd683d33d06c4a7f7c451d96f6d47bc5e8b",
"creation_num": "3"
}
}
},
"sequence_number": "0",
"type": "0x1::coin::WithdrawEvent",
"data": {
"amount": "1000"
}
}
]

Gather more information from the transaction that generated the event by querying https://{rest_server_api}/transactions/by_version/{version} where {version} is the same value as the {version} in the event query.

イベントクエリ内の{version}と同じ{version}値のhttps://{rest_server_api}/transactions/by_version/{version}をクエリして、イベントを生成したトランザクションから詳細情報を収集します。

ヒント

コインの完全な動きを追跡する場合、通常はイベントで充分です。 0x1::aptos_coin::AptosCoin。ですが、Aptosではガスを表すため、指定されたアカウントから送信されるトランザクションごとにgas_usedを考慮する必要があります。 不必要なオーバーヘッドを削減するため、トランザクションによるガス料金の抽出ではイベントは発行されません。アカウントの全てのトランザクションは、このAPIから取得出来ます: https://{rest_server_api}/accounts/{address}/transactions

コイン残高変更の追跡

前のセクションのトランザクションを考えてみましょう。ただし、今回は任意のコイン0x1337::my_coin::MyCoinといくつかのガスパラメーターが変更されています。

{
"version": "13629679",
"gas_used": "20",
"success": true,
"vm_status": "Executed successfully",
"changes": [
{
"address": "0xb258b91eee04111039320a85b0c24a2dd433909e14a6b5c32ee722e0fdecfddc",
"data": {
"type": "0x1::coin::CoinStore<0x1337::my_coin::MyCoin>",
"data": {
"coin": {
"value": "1000"
},
"deposit_events": {
"counter": "1",
"guid": {
"id": {
"addr": "0x5098df8e7969b58ab3bd2d440c6203f64c60a1fd5c08b9d4abe6ae4216246c3e",
"creation_num": "2",
}
}
},
...
}
},
"type": "write_resource"
},
...
],
"sender": "0x810026ca8291dd88b5b30a1d3ca2edd683d33d06c4a7f7c451d96f6d47bc5e8b",
"sequence_number": "0",
"max_gas_amount": "2000",
"gas_unit_price": "110",
"expiration_timestamp_secs": "1660616127",
"payload": {
"function": "0x1::aptos_account::transfer_coins",
"type_arguments": [
"0x1337::my_coin::MyCoin"
],
"arguments": [
"0x5098df8e7969b58ab3bd2d440c6203f64c60a1fd5c08b9d4abe6ae4216246c3e",
"1000"
],
"type": "entry_function_payload"
},
"events": [
{
"key": "0x0300000000000000810026ca8291dd88b5b30a1d3ca2edd683d33d06c4a7f7c451d96f6d47bc5e8b",
"guid": {
"id": {
"addr": "0x810026ca8291dd88b5b30a1d3ca2edd683d33d06c4a7f7c451d96f6d47bc5e8b",
"creation_num": "3"
}
}
},
"sequence_number": "0",
"type": "0x1::coin::WithdrawEvent",
"data": {
"amount": "1000"
}
},
{
"key": "0x02000000000000005098df8e7969b58ab3bd2d440c6203f64c60a1fd5c08b9d4abe6ae4216246c3e",
guid": {
"id": {
"addr": "0x5098df8e7969b58ab3bd2d440c6203f64c60a1fd5c08b9d4abe6ae4216246c3e",
"creation_num": "2"
}
}
},
"sequence_number": "0",
"type": "0x1::coin::DepositEvent",
"data": {
"amount": "1000"
}
}
],
"timestamp": "1660615531147935",
"type": "user_transaction"
}

この取引では3つの残高変更があります。

  1. 取引送信口座0x810026ca8291dd88b5b30a1d3ca2edd683d33d06c4a7f7c451d96f6d47bc5e8bから0x1337::my_coin::MyCoin1000を引き出し
  2. 0x1337::my_coin::MyCoin1000を受取口座0x5098df8e7969b58ab3bd2d440c6203f64c60a1fd5c08b9d4abe6ae4216246c3eへ入金
  3. 0x1::aptos_coin::AptosCoinのガス料金2200を送金口座0x810026ca8291dd88b5b30a1d3ca2edd683d33d06c4a7f7c451d96f6d47bc5e8bから

出金情報を取得するには:

  1. 0x1::coin::CoinStore<CoinType>changesをスキャンして下さい。注意)CoinTypeはストアへ保管されているコインの一般的な意味です。この例ではCoinType0x1337::my_coin::MyCoinです。
  2. withdraw_eventsguidを取得します。この例ではguidaddr 0x810026ca8291dd88b5b30a1d3ca2edd683d33d06c4a7f7c451d96f6d47bc5e8bcreation_num 3を含みます。
  3. このguidを使用してイベントをスキャンし、関連付けられたイベントを抽出します。この例では0x1::coin::WithdrawEventです。
  4. 注意)amountフィールドはguidのアカウントから削除されたCoinTypeの数です。この例では1000です。

入金情報を取得する方法は、以下の点以外は出金と同じです。

  1. guiddeposit_events下で使用される。
  2. アカウントの残高ではamountはプラスに増加します。
  3. イベントの名前は0x1::coin::DepositEventとなります。

ガス料金を取得するには:

  1. gas_usedフィールドはgas_unit_priceを乗算する必要があります。この例ではgas_used=20gas_unit_price=110なので、引き出されるガスコインの合計は2200です。
  2. ガスは常時: 0x1::aptos_coin::AptosCoin

コインの小数点以下の桁数の情報を取得するには:

  1. コインの小数点以下の桁数は0x1::coin::CoinInfo<CoinType>を介して取得できます。
  2. これは、コインタイプのアドレスに配置してあります。この例では、0x1337アドレスの0x1::coin::CoinInfo<0x1337::my_coin::MyCoin>を検索する必要があります。
ヒント

常にこの方法でイベントを使用すれば、アカウントの残高変更を見逃す事はありません。イベントを監視する事で下記の0x1::coin::CoinStoreの全残高変更が分かります。

  1. コインミント
  2. コインバーン
  3. コイン送金
  4. コインをステーキングする
  5. ステークしたコインの出金
  6. coin::transferから派生しない転送

調査するサンプルデータを作成するには"最初のトランザクション". を実行します。

コインの作成について詳しくは"最初のコイン"を作成してください。

フォーセットとの統合

このチュートリアルはAptos Faucetとの統合を希望するSDKとウォレットの開発者を対象としています。dapp開発者の場合は、既存のSDKCLIを介してフォーセットにアクセスする必要があります。

Devネットとテストネットの違い

devネットとテストネットの違いは何でしょう? 実質的には何も有りません。以前はテストネットフォーセットの前にキャプチャがあり、 通常の方法ではクエリ出来ませんでした。今はもう真実ではありません。

各フォーセットのエンドポイントは次のとおりです。

フォーセットの呼び出し:JavaScript/TypeScript

JavaScriptまたはTypeScriptでクライアントを構築している場合は、@aptos-labs/aptos-faucet-clientパッケージを使用する必要があります。このクライアントは、フォーセットサービスによって公開されたオープンAPI仕様に基づいて生成されます。

使用例:

import {
AptosFaucetClient,
FundRequest,
} from "@aptos-labs/aptos-faucet-client";

async function callFaucet(amount: number, address: string): Promise<string[]> {
const faucetClient = new AptosFaucetClient({
BASE: "https://faucet.devnet.aptoslabs.com",
});
const request: FundRequest = {
amount,
address,
};
const response = await faucetClient.fund({ requestBody: request });
return response.txn_hashes;
}

フォーセットの呼び出し:他の言語

他の言語でフォーセットを呼び出そうとする場合、以下の2つの選択肢があります。

  1. OpenAPIスペックからクライアントを生成します。
  2. 自分でフォーセットを呼びます。

後者の場合は、以下と同様のクエリを作成します。

curl -X POST 'https://faucet.devnet.aptoslabs.com/mint?amount=10000&address=0xd0f523c9e73e6f3d68c16ae883a9febc616e484c4998a72d8899a1009e5a89d6'

これは、0xd0f523c9e73e6f3d68c16ae883a9febc616e484c4998a72d8899a1009e5a89d6アドレスへ10000 OCTAを発行することを意味します。