コンテンツにスキップ

あなたの最初のトランザクション

トランザクションは、Aptosブロックチェーン上でデータを変更する基本的な方法です。パッケージを送るようなものと考えてください:何を送るか、誰に送るか、そして配達が確認されるまで追跡する必要があります。ブロックチェーンの用語では、トランザクションによってコインを転送し、スマートコントラクト関数を呼び出し、オンチェーン状態を更新できます。

このチュートリアルでは、Aptosブロックチェーン上で最初のトランザクションを作成・送信する方法をガイドします。以下のことを学びます:

  1. 開発環境のセットアップ
  2. テストアカウントの作成と資金調達
  3. コイン転送トランザクションの構築
  4. コスト見積もりのためのトランザクションシミュレーション
  5. トランザクションの署名と送信
  6. トランザクションが正常に実行されたことの確認

トランザクションを作成する前に、必要なツールとSDKで開発環境をセットアップする必要があります。

  1. TypeScript SDKをインストール

    お好みのパッケージマネージャーを使用してTypeScript SDKをインストール:

    Terminal window
    npm install @aptos-labs/ts-sdk
  2. プロジェクトディレクトリを作成

    プロジェクト用の新しいディレクトリを作成:

    Terminal window
    mkdir my-first-transaction
    cd my-first-transaction
  3. 新しいファイルを作成

    transaction.tsという名前の新しいファイルを作成:

    Terminal window
    touch transaction.ts

ブロックチェーンでは、すべてのトランザクションはアカウントから発信される必要があります。2つのテストアカウントを作成しましょう:コインを送信するアカウント(Alice)と受信するアカウント(Bob)。

  1. クライアントをセットアップ

    まず、ブロックチェーンに接続する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);
  2. アカウントを生成

    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}`);
  3. アカウントに資金提供

    アカウント生成後にこのコードを追加して、フォーセットからテストコインを取得:

    // 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`);

3. トランザクションの構築と送信

Section titled “3. トランザクションの構築と送信”
  1. 転送トランザクションを構築

    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("トランザクションが構築されました");
  2. トランザクションをシミュレート

    実際に送信する前に、トランザクションをシミュレートしてガス料金を見積もり:

    // トランザクションをシミュレート
    console.log("\n=== トランザクションシミュレーション ===");
    const simulationResult = await aptos.transaction.simulate.simple({
    signerPublicKey: alice.publicKey,
    transaction,
    });
    console.log("シミュレーション結果:", simulationResult[0]);
  3. トランザクションに署名して送信

    // トランザクションに署名して送信
    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);

最後に、転送後の残高を確認しましょう:

// 最終残高を確認
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`);

ターミナルでスクリプトを実行:

Terminal window
npx ts-node transaction.ts

または、TypeScriptをJavaScriptにコンパイルしてから実行:

Terminal window
npx tsc transaction.ts && node transaction.js
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);

おめでとうございます!あなたは最初のAptosトランザクションを正常に作成し、送信しました。次に以下を試してみてください: