あなたの最初のトランザクション
トランザクションは、Aptosブロックチェーン上でデータを変更する基本的な方法です。パッケージを送るようなものと考えてください:何を送るか、誰に送るか、そして配達が確認されるまで追跡する必要があります。ブロックチェーンの用語では、トランザクションによってコインを転送し、スマートコントラクト関数を呼び出し、オンチェーン状態を更新できます。
このチュートリアルでは、Aptosブロックチェーン上で最初のトランザクションを作成・送信する方法をガイドします。以下のことを学びます:
- 開発環境のセットアップ
- テストアカウントの作成と資金調達
- コイン転送トランザクションの構築
- コスト見積もりのためのトランザクションシミュレーション
- トランザクションの署名と送信
- トランザクションが正常に実行されたことの確認
1. 環境のセットアップ
Section titled “1. 環境のセットアップ”トランザクションを作成する前に、必要なツールとSDKで開発環境をセットアップする必要があります。
-
TypeScript SDKをインストール
お好みのパッケージマネージャーを使用してTypeScript SDKをインストール:
Terminal window npm install @aptos-labs/ts-sdkTerminal window yarn add @aptos-labs/ts-sdkTerminal window pnpm add @aptos-labs/ts-sdk -
プロジェクトディレクトリを作成
プロジェクト用の新しいディレクトリを作成:
Terminal window mkdir my-first-transactioncd my-first-transaction -
新しいファイルを作成
transaction.ts
という名前の新しいファイルを作成:Terminal window touch transaction.tsTerminal window type nul > transaction.ts
トランザクションを作成する前に、必要なツールとSDKで開発環境をセットアップする必要があります。
-
Python SDKをインストール
pipを使用してPython SDKをインストール:
Terminal window pip install aptos-sdk -
プロジェクトディレクトリを作成
プロジェクト用の新しいディレクトリを作成:
Terminal window mkdir my-first-transactioncd my-first-transaction -
新しいファイルを作成
transaction.py
という名前の新しいファイルを作成:Terminal window touch transaction.pyTerminal window type nul > transaction.py
2. テストアカウントの作成
Section titled “2. テストアカウントの作成”ブロックチェーンでは、すべてのトランザクションはアカウントから発信される必要があります。2つのテストアカウントを作成しましょう:コインを送信するアカウント(Alice)と受信するアカウント(Bob)。
-
クライアントをセットアップ
まず、ブロックチェーンに接続するAptosクライアントを初期化する必要があります。エディターで
transaction.ts
を開き、以下を追加:import {Account,Aptos,AptosConfig,Network,} from "@aptos-labs/ts-sdk";async function main() {// Aptosクライアントを初期化const config = new AptosConfig({ network: Network.DEVNET });const aptos = new Aptos(config);console.log("Aptos devnetに接続されました");// ここにさらにコードが追加されます}main().catch(console.error); -
アカウントを生成
main()
関数内にこのコードを追加して、2つのアカウント - Alice(送信者)とBob(受信者)を作成:// 2つのアカウントを生成const alice = Account.generate();const bob = Account.generate();console.log("=== アドレス ===");console.log(`Aliceのアドレス: ${alice.accountAddress}`);console.log(`Bobのアドレス: ${bob.accountAddress}`); -
アカウントに資金提供
アカウント生成後にこのコードを追加して、フォーセットからテストコインを取得:
// devnetフォーセットからテストAPTでアカウントに資金提供console.log("\n=== アカウント資金提供 ===");await aptos.fundAccount({accountAddress: alice.accountAddress,amount: 100_000_000, // 1 APT = 100,000,000 octas});console.log("アカウントの資金提供が成功しました");// 初期残高を確認const aliceBalance = await aptos.getAccountAPTAmount({accountAddress: alice.accountAddress,});const bobBalance = await aptos.getAccountAPTAmount({accountAddress: bob.accountAddress,});console.log(`Aliceの残高: ${aliceBalance} octas`);console.log(`Bobの残高: ${bobBalance} octas`);
ブロックチェーンでは、すべてのトランザクションはアカウントから発信される必要があります。2つのテストアカウントを作成しましょう:コインを送信するアカウント(Alice)と受信するアカウント(Bob)。
import asynciofrom aptos_sdk.client import RestClientfrom aptos_sdk.account import Account
async def main(): # Aptosクライアントを初期化 client = RestClient("https://fullnode.devnet.aptoslabs.com/v1")
# 2つのアカウントを生成 alice = Account.generate() bob = Account.generate()
print("=== アドレス ===") print(f"Aliceのアドレス: {alice.address()}") print(f"Bobのアドレス: {bob.address()}")
# devnetフォーセットからアカウントに資金提供 print("\n=== アカウント資金提供 ===") await client.fund_account(alice.address(), 100_000_000) print("アカウントの資金提供が成功しました")
if __name__ == "__main__": asyncio.run(main())
3. トランザクションの構築と送信
Section titled “3. トランザクションの構築と送信”-
転送トランザクションを構築
main()
関数に以下のコードを追加して、AliceからBobに1 APTを転送するトランザクションを作成:// 転送トランザクションを構築console.log("\n=== トランザクション構築 ===");const transaction = await aptos.transaction.build.simple({sender: alice.accountAddress,data: {function: "0x1::coin::transfer",typeArguments: ["0x1::aptos_coin::AptosCoin"],functionArguments: [bob.accountAddress, 100_000_000], // 1 APT},});console.log("トランザクションが構築されました"); -
トランザクションをシミュレート
実際に送信する前に、トランザクションをシミュレートしてガス料金を見積もり:
// トランザクションをシミュレートconsole.log("\n=== トランザクションシミュレーション ===");const simulationResult = await aptos.transaction.simulate.simple({signerPublicKey: alice.publicKey,transaction,});console.log("シミュレーション結果:", simulationResult[0]); -
トランザクションに署名して送信
// トランザクションに署名して送信console.log("\n=== トランザクション送信 ===");const committedTransaction = await aptos.transaction.signAndSubmitTransaction({signer: alice,transaction,});console.log("トランザクションハッシュ:", committedTransaction.hash);// トランザクションの確認を待機const executedTransaction = await aptos.waitForTransaction({transactionHash: committedTransaction.hash,});console.log("トランザクションが実行されました:", executedTransaction.success);
# 転送トランザクションの構築と送信print("\n=== トランザクション送信 ===")
# 転送トランザクションを構築transaction = { "function": "0x1::coin::transfer", "type_arguments": ["0x1::aptos_coin::AptosCoin"], "arguments": [str(bob.address()), "100000000"] # 1 APT}
# トランザクションを送信txn_hash = await client.submit_transaction(alice, transaction)print(f"トランザクションハッシュ: {txn_hash}")
# トランザクションの確認を待機await client.wait_for_transaction(txn_hash)print("トランザクションが確認されました!")
4. 結果の確認
Section titled “4. 結果の確認”最後に、転送後の残高を確認しましょう:
// 最終残高を確認console.log("\n=== 最終残高 ===");const finalAliceBalance = await aptos.getAccountAPTAmount({ accountAddress: alice.accountAddress,});const finalBobBalance = await aptos.getAccountAPTAmount({ accountAddress: bob.accountAddress,});
console.log(`Aliceの最終残高: ${finalAliceBalance} octas`);console.log(`Bobの最終残高: ${finalBobBalance} octas`);
# 最終残高を確認print("\n=== 最終残高 ===")alice_balance = await client.account_balance(alice.address())bob_balance = await client.account_balance(bob.address())
print(f"Aliceの最終残高: {alice_balance} octas")print(f"Bobの最終残高: {bob_balance} octas")
5. コードの実行
Section titled “5. コードの実行”ターミナルでスクリプトを実行:
npx ts-node transaction.ts
または、TypeScriptをJavaScriptにコンパイルしてから実行:
npx tsc transaction.ts && node transaction.js
ターミナルでスクリプトを実行:
python transaction.py
完全なコードサンプル
Section titled “完全なコードサンプル”import { Account, Aptos, AptosConfig, Network,} from "@aptos-labs/ts-sdk";
async function main() { // Aptosクライアントを初期化 const config = new AptosConfig({ network: Network.DEVNET }); const aptos = new Aptos(config); console.log("Aptos devnetに接続されました");
// 2つのアカウントを生成 const alice = Account.generate(); const bob = Account.generate(); console.log("=== アドレス ==="); console.log(`Aliceのアドレス: ${alice.accountAddress}`); console.log(`Bobのアドレス: ${bob.accountAddress}`);
// アカウントに資金提供 console.log("\n=== アカウント資金提供 ==="); await aptos.fundAccount({ accountAddress: alice.accountAddress, amount: 100_000_000, }); console.log("アカウントの資金提供が成功しました");
// 初期残高を確認 const aliceBalance = await aptos.getAccountAPTAmount({ accountAddress: alice.accountAddress, }); console.log(`Aliceの残高: ${aliceBalance} octas`);
// 転送トランザクションを構築 console.log("\n=== トランザクション構築 ==="); const transaction = await aptos.transaction.build.simple({ sender: alice.accountAddress, data: { function: "0x1::coin::transfer", typeArguments: ["0x1::aptos_coin::AptosCoin"], functionArguments: [bob.accountAddress, 100_000_000], }, });
// トランザクションに署名して送信 console.log("\n=== トランザクション送信 ==="); const committedTransaction = await aptos.transaction.signAndSubmitTransaction({ signer: alice, transaction, }); console.log("トランザクションハッシュ:", committedTransaction.hash);
// トランザクションの確認を待機 await aptos.waitForTransaction({ transactionHash: committedTransaction.hash, });
// 最終残高を確認 console.log("\n=== 最終残高 ==="); const finalAliceBalance = await aptos.getAccountAPTAmount({ accountAddress: alice.accountAddress, }); const finalBobBalance = await aptos.getAccountAPTAmount({ accountAddress: bob.accountAddress, }); console.log(`Aliceの最終残高: ${finalAliceBalance} octas`); console.log(`Bobの最終残高: ${finalBobBalance} octas`);}
main().catch(console.error);
import asynciofrom aptos_sdk.client import RestClientfrom aptos_sdk.account import Account
async def main(): # Aptosクライアントを初期化 client = RestClient("https://fullnode.devnet.aptoslabs.com/v1")
# 2つのアカウントを生成 alice = Account.generate() bob = Account.generate() print("=== アドレス ===") print(f"Aliceのアドレス: {alice.address()}") print(f"Bobのアドレス: {bob.address()}")
# アカウントに資金提供 print("\n=== アカウント資金提供 ===") await client.fund_account(alice.address(), 100_000_000) print("アカウントの資金提供が成功しました")
# 転送トランザクションの送信 print("\n=== トランザクション送信 ===") transaction = { "function": "0x1::coin::transfer", "type_arguments": ["0x1::aptos_coin::AptosCoin"], "arguments": [str(bob.address()), "100000000"] }
txn_hash = await client.submit_transaction(alice, transaction) print(f"トランザクションハッシュ: {txn_hash}")
# トランザクションの確認を待機 await client.wait_for_transaction(txn_hash) print("トランザクションが確認されました!")
# 最終残高を確認 print("\n=== 最終残高 ===") alice_balance = await client.account_balance(alice.address()) bob_balance = await client.account_balance(bob.address()) print(f"Aliceの最終残高: {alice_balance} octas") print(f"Bobの最終残高: {bob_balance} octas")
if __name__ == "__main__": asyncio.run(main())
次のステップ
Section titled “次のステップ”おめでとうございます!あなたは最初のAptosトランザクションを正常に作成し、送信しました。次に以下を試してみてください:
- あなたの最初のMove モジュール - 独自のスマートコントラクトを作成
- Aptos インデクサー - オンチェーンデータのクエリ
- エンドツーエンドdApp構築 - 完全なアプリケーションの構築