TypeScript SDK 基本使用

项目创建

$ mkdir ts_sdk_basic_usage && cd ts_sdk_basic_usage
$ pnpm init
$ pnpm add @aptos-labs/ts-sdk

Account

import {
  Account,
  Ed25519PrivateKey,
  SigningSchemeInput,
} from "@aptos-labs/ts-sdk";

function createAccount() {
  const account1 = Account.generate(); // defaults to Legacy Ed25519
  console.log(`account1: ${account1.accountAddress.toString()}`);

  account1.privateKey.toString;

  const account2 = Account.generate({
    scheme: SigningSchemeInput.Secp256k1Ecdsa,
  }); // Single Sender Secp256k1
  console.log(`account2: ${account2.accountAddress.toString()}`);

  const account3 = Account.generate({
    scheme: SigningSchemeInput.Ed25519,
    legacy: false,
  }); // Single Sender Ed25519
  console.log(`account3: ${account3.accountAddress.toString()}`);

  return account1;
}

function createAccountFromPrivateKey(privateKeyBytes: string) {
  const privateKey = new Ed25519PrivateKey(privateKeyBytes);
  const account = Account.fromPrivateKey({ privateKey });
  console.log(
    `account1 from private key: ${account.accountAddress.toString()}`
  );
}

async function main() {
  const account = createAccount();
  createAccountFromPrivateKey(account.privateKey.toString());
}

main();

// OUTPUT:
// account1: 0x2d7b14974554446317f614737f1f3df32a285c48b44ee3f520d2885ad9ade31a
// account2: 0xd49f49ee44ade9a30dcded76f2b805d683ad9117613ccd95e38b30d586351dbf
// account3: 0xc04102d0a5fdb19ea0ba31c8d7215625a76b1b778167bf58297cdbec1b0cd8e6
// account1 from private key: 0x2d7b14974554446317f614737f1f3df32a285c48b44ee3f520d2885ad9ade31a

fetch data

import {
  Account,
  Aptos,
  AptosConfig,
  Ed25519PrivateKey,
  Network,
  SigningSchemeInput,
} from "@aptos-labs/ts-sdk";

async function fetch_data() {
  const aptosConfig = new AptosConfig({ network: Network.TESTNET });
  const aptos = new Aptos(aptosConfig);

  const account = Account.generate();
  console.log(`>>> create account: ${account.accountAddress.toString()}`);

  const transaction = await aptos.fundAccount({
    accountAddress: account.accountAddress,
    amount: 100,
  });
  console.log(`\n>>> transaction: ${JSON.stringify(transaction)}`);

  const fund = await aptos.getAccountInfo({
    accountAddress: account.accountAddress,
  });
  console.log(`\n>>>fund: ${JSON.stringify(fund)}`);

  const modules = await aptos.getAccountModules({
    accountAddress: account.accountAddress,
  });
  console.log(`\n>>> modules: ${JSON.stringify(modules)}`);

  const tokens = await aptos.getAccountOwnedTokens({
    accountAddress: account.accountAddress,
  });
  console.log(`\n>>> tokens: ${JSON.stringify(tokens)}`);

  type Coin = { coin: { value: string } };

  const resource = await aptos.getAccountResource<Coin>({
    accountAddress: account.accountAddress,
    resourceType: "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>",
  });
  console.log(`\n>>> resource: ${JSON.stringify(resource)}`);

  const value = resource.coin.value;
  console.log(`\n>>> coin value: ${value}`);
}

async function main() {
  fetch_data();
}

main();

// >>> create account: 0x06a90df7117beb151d0483002ee0138b84c88c9b691610bdfc3edfe52bcfb85d

// >>> transaction: {"version":"5974082853","hash":"0x3308cd348384fa5623986b2c6aa82cb93a4df3fb4d8d11fa21e7e18c07dc369c","state_change_hash":"0x9df9233fe8a13c6e790cf588b2c7160587d5ce0f33cd87e0b92434361dbe34eb","event_root_hash":"0x5efdc1806cd0bc1968a417db06bf204d175291443a0f20535b45ead9fb1f168a","state_checkpoint_hash":null,"gas_used":"1001","success":true,"vm_status":"Executed successfully","accumulator_root_hash":"0xedb82d4e1287e47350edc723dc470ccd41794b831d24ae35e409df205820c967","changes":[{"address":"0x6a90df7117beb151d0483002ee0138b84c88c9b691610bdfc3edfe52bcfb85d","state_key_hash":"0x8ff336347df3a198a09afdaaad8c8434ded97110b4c398aa4ffcfb0d60c65e35","data":{"type":"0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>","data":{"coin":{"value":"100"},"deposit_events":{"counter":"1","guid":{"id":{"addr":"0x6a90df7117beb151d0483002ee0138b84c88c9b691610bdfc3edfe52bcfb85d","creation_num":"2"}}},"frozen":false,"withdraw_events":{"counter":"0","guid":{"id":{"addr":"0x6a90df7117beb151d0483002ee0138b84c88c9b691610bdfc3edfe52bcfb85d","creation_num":"3"}}}}},"type":"write_resource"},{"address":"0x6a90df7117beb151d0483002ee0138b84c88c9b691610bdfc3edfe52bcfb85d","state_key_hash":"0x3f92d599ad51f3a459fb7dbc993208a7ac55aa8ff7b529ee318eb71d683d4b8f","data":{"type":"0x1::account::Account","data":{"authentication_key":"0x06a90df7117beb151d0483002ee0138b84c88c9b691610bdfc3edfe52bcfb85d","coin_register_events":{"counter":"1","guid":{"id":{"addr":"0x6a90df7117beb151d0483002ee0138b84c88c9b691610bdfc3edfe52bcfb85d","creation_num":"0"}}},"guid_creation_num":"4","key_rotation_events":{"counter":"0","guid":{"id":{"addr":"0x6a90df7117beb151d0483002ee0138b84c88c9b691610bdfc3edfe52bcfb85d","creation_num":"1"}}},"rotation_capability_offer":{"for":{"vec":[]}},"sequence_number":"0","signer_capability_offer":{"for":{"vec":[]}}}},"type":"write_resource"},{"address":"0x19e2c9d62d5d5cc16f0de87e7e05f5161f9e820932341e82740cdeed1ba63d12","state_key_hash":"0xc1b87f42046e685dfc675966f239376b4dad0bddb08c5d4710d87d631381be1d","data":{"type":"0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>","data":{"coin":{"value":"328418492900"},"deposit_events":{"counter":"2381638","guid":{"id":{"addr":"0x19e2c9d62d5d5cc16f0de87e7e05f5161f9e820932341e82740cdeed1ba63d12","creation_num":"2"}}},"frozen":false,"withdraw_events":{"counter":"2381630","guid":{"id":{"addr":"0x19e2c9d62d5d5cc16f0de87e7e05f5161f9e820932341e82740cdeed1ba63d12","creation_num":"3"}}}}},"type":"write_resource"},{"address":"0x19e2c9d62d5d5cc16f0de87e7e05f5161f9e820932341e82740cdeed1ba63d12","state_key_hash":"0xa64c3e06541e5b27ab82cec64706a40eb629a67a9218f13cd7459f5baa9978ff","data":{"type":"0x1::account::Account","data":{"authentication_key":"0x19e2c9d62d5d5cc16f0de87e7e05f5161f9e820932341e82740cdeed1ba63d12","coin_register_events":{"counter":"1","guid":{"id":{"addr":"0x19e2c9d62d5d5cc16f0de87e7e05f5161f9e820932341e82740cdeed1ba63d12","creation_num":"0"}}},"guid_creation_num":"4","key_rotation_events":{"counter":"0","guid":{"id":{"addr":"0x19e2c9d62d5d5cc16f0de87e7e05f5161f9e820932341e82740cdeed1ba63d12","creation_num":"1"}}},"rotation_capability_offer":{"for":{"vec":[]}},"sequence_number":"2381638","signer_capability_offer":{"for":{"vec":[]}}}},"type":"write_resource"},{"state_key_hash":"0x6e4b28d40f98a106a65163530924c0dcb40c1349d3aa915d108b4d6cfc1ddb19","handle":"0x1b854694ae746cdbd8d44186ca4929b2b337df21d1c74633be19b2710552fdca","key":"0x0619dc29a0aac8fa146714058e8dd6d2d0f3bdf5f6331907bf91f3acd81e6935","value":"0x4d784ea77b0cbd940100000000000000","data":null,"type":"write_table_item"}],"sender":"0x19e2c9d62d5d5cc16f0de87e7e05f5161f9e820932341e82740cdeed1ba63d12","sequence_number":"2381637","max_gas_amount":"500000","gas_unit_price":"100","expiration_timestamp_secs":"1726153296","payload":{"code":{"bytecode":"0xa11ceb0b0500000008010008020804030c150421020523100733500883012006a30114000000010002000301050800030403010002060105010001070002000008000200010403060c050301050001060c01080001030d6170746f735f6163636f756e740a6170746f735f636f696e04636f696e067369676e65720a616464726573735f6f66094170746f73436f696e0762616c616e6365046d696e74087472616e7366657200000000000000000000000000000000000000000000000000000000000000010308a0860100000000000308ffffffffffffffff000001170a0011000c030a03380007010a02170700172304120a000b030a0207001611020b000b010b02110302","abi":{"name":"main","visibility":"public","is_entry":true,"is_view":false,"generic_type_params":[],"params":["&signer","address","u64"],"return":[]}},"type_arguments":[],"arguments":["0x6a90df7117beb151d0483002ee0138b84c88c9b691610bdfc3edfe52bcfb85d","100"],"type":"script_payload"},"signature":{"public_key":"0x7a58e569925baaba11db29b72e2f4975a0262ec6f9502d50e3b1a5da1d85ae04","signature":"0xf9fe2ff5efe90ee8ec1f1b0117c58bc7b4e5202b385b1d044d60c3395625a16902a763298433ea4c66babf1c6bc618af0f06d6fb9ad977ecef12d25478905f0a","type":"ed25519_signature"},"events":[{"guid":{"creation_number":"2","account_address":"0x19e2c9d62d5d5cc16f0de87e7e05f5161f9e820932341e82740cdeed1ba63d12"},"sequence_number":"2381637","type":"0x1::coin::DepositEvent","data":{"amount":"100100"}},{"guid":{"creation_number":"0","account_address":"0x6a90df7117beb151d0483002ee0138b84c88c9b691610bdfc3edfe52bcfb85d"},"sequence_number":"0","type":"0x1::account::CoinRegisterEvent","data":{"type_info":{"account_address":"0x1","module_name":"0x6170746f735f636f696e","struct_name":"0x4170746f73436f696e"}}},{"guid":{"creation_number":"3","account_address":"0x19e2c9d62d5d5cc16f0de87e7e05f5161f9e820932341e82740cdeed1ba63d12"},"sequence_number":"2381629","type":"0x1::coin::WithdrawEvent","data":{"amount":"100"}},{"guid":{"creation_number":"2","account_address":"0x6a90df7117beb151d0483002ee0138b84c88c9b691610bdfc3edfe52bcfb85d"},"sequence_number":"0","type":"0x1::coin::DepositEvent","data":{"amount":"100"}},{"guid":{"creation_number":"0","account_address":"0x0"},"sequence_number":"0","type":"0x1::transaction_fee::FeeStatement","data":{"execution_gas_units":"6","io_gas_units":"7","storage_fee_octas":"98800","storage_fee_refund_octas":"0","total_charge_gas_units":"1001"}}],"timestamp":"1726153281890208","type":"user_transaction"}

// >>>fund: {"sequence_number":"0","authentication_key":"0x06a90df7117beb151d0483002ee0138b84c88c9b691610bdfc3edfe52bcfb85d"}

// >>> modules: []

// >>> tokens: []

// >>> resource: {"coin":{"value":"100"},"deposit_events":{"counter":"1","guid":{"id":{"addr":"0x6a90df7117beb151d0483002ee0138b84c88c9b691610bdfc3edfe52bcfb85d","creation_num":"2"}}},"frozen":false,"withdraw_events":{"counter":"0","guid":{"id":{"addr":"0x6a90df7117beb151d0483002ee0138b84c88c9b691610bdfc3edfe52bcfb85d","creation_num":"3"}}}}

// >>> coin value: 100

transaction

import {
  Account,
  Aptos,
  AptosConfig,
  Ed25519PrivateKey,
  Network,
  SigningSchemeInput,
} from "@aptos-labs/ts-sdk";

async function transaction() {
  console.log(
    "This example will create two accounts (Alice and Bob) and send a transaction transfering APT to Bob's account."
  );

  // 0. Setup the client and test accounts
  const config = new AptosConfig({ network: Network.TESTNET });
  const aptos = new Aptos(config);

  let alice = Account.generate();
  let bob = Account.generate();

  console.log("=== Addresses ===\n");
  console.log(`Alice's address is: ${alice.accountAddress}`);
  console.log(`Bob's address is: ${bob.accountAddress}`);

  console.log("\n=== Funding accounts ===\n");
  await aptos.fundAccount({
    accountAddress: alice.accountAddress,
    amount: 100_000_000,
  });
  await aptos.fundAccount({
    accountAddress: bob.accountAddress,
    amount: 100,
  });
  console.log("Funded Alice and Bob's accounts!");

  // 1. Build
  console.log("\n=== 1. Building the transaction ===\n");
  const transaction = await aptos.transaction.build.simple({
    sender: alice.accountAddress,
    data: {
      // All transactions on Aptos are implemented via smart contracts.
      function: "0x1::aptos_account::transfer",
      functionArguments: [bob.accountAddress, 100],
    },
  });
  console.log("Built the transaction!");

  // 2. Simulate (Optional)
  console.log("\n === 2. Simulating Response (Optional) === \n");
  const [userTransactionResponse] = await aptos.transaction.simulate.simple({
    signerPublicKey: alice.publicKey,
    transaction,
  });
  console.log(userTransactionResponse);

  // 3. Sign
  console.log("\n=== 3. Signing transaction ===\n");
  const senderAuthenticator = aptos.transaction.sign({
    signer: alice,
    transaction,
  });
  console.log("Signed the transaction!");

  // 4. Submit
  console.log("\n=== 4. Submitting transaction ===\n");
  const submittedTransaction = await aptos.transaction.submit.simple({
    transaction,
    senderAuthenticator,
  });

  console.log(`Submitted transaction hash: ${submittedTransaction.hash}`);

  // 5. Wait for results
  console.log("\n=== 5. Waiting for result of transaction ===\n");
  const executedTransaction = await aptos.waitForTransaction({
    transactionHash: submittedTransaction.hash,
  });
  console.log(executedTransaction);
}

async function main() {
  transaction();
}

main();

// $ ts-node src/03_transaction.ts
// This example will create two accounts (Alice and Bob) and send a transaction transfering APT to Bob's account.
// === Addresses ===

// Alice's address is: 0x001e858caee9d67b50a97f441b1590c170419905f2fb8d2140803c7e8e22c852
// Bob's address is: 0xa52522c9a1d0d6695e09be57b9605168056173e50a56e2f355385270ab7070e1

// === Funding accounts ===

// Funded Alice and Bob's accounts!

// === 1. Building the transaction ===

// Built the transaction!

//  === 2. Simulating Response (Optional) ===

// {
//   version: '5979042043',
//   hash: '0xa3e7b041ce44d6d4aba88fa76a23ead97ecd064d327608bef3a585b5c5c1de22',
//   state_change_hash: '0x0000000000000000000000000000000000000000000000000000000000000000',
//   event_root_hash: '0x0000000000000000000000000000000000000000000000000000000000000000',
//   state_checkpoint_hash: null,
//   gas_used: '9',
//   success: true,
//   vm_status: 'Executed successfully',
//   accumulator_root_hash: '0x0000000000000000000000000000000000000000000000000000000000000000',
//   changes: [
//     {
//       address: '0x1e858caee9d67b50a97f441b1590c170419905f2fb8d2140803c7e8e22c852',
//       state_key_hash: '0x7f4ad20eb420245733b8128041b91e3723ac16a4105a7d42584484207aa31186',
//       data: [Object],
//       type: 'write_resource'
//     },
//     {
//       address: '0x1e858caee9d67b50a97f441b1590c170419905f2fb8d2140803c7e8e22c852',
//       state_key_hash: '0x940f9bd6c4a7c61733c53d99c83007bbaea16ccb3a9a638f573d1ab7d3647d85',
//       data: [Object],
//       type: 'write_resource'
//     },
//     {
//       address: '0xa52522c9a1d0d6695e09be57b9605168056173e50a56e2f355385270ab7070e1',
//       state_key_hash: '0x820cf5d86aa00653ace8db87a11885e143a73dd04688fa8dcc23556ba3bd23da',
//       data: [Object],
//       type: 'write_resource'
//     },
//     {
//       state_key_hash: '0x6e4b28d40f98a106a65163530924c0dcb40c1349d3aa915d108b4d6cfc1ddb19',
//       handle: '0x1b854694ae746cdbd8d44186ca4929b2b337df21d1c74633be19b2710552fdca',
//       key: '0x0619dc29a0aac8fa146714058e8dd6d2d0f3bdf5f6331907bf91f3acd81e6935',
//       value: '0x65b3a042e529be940100000000000000',
//       data: null,
//       type: 'write_table_item'
//     }
//   ],
//   sender: '0x1e858caee9d67b50a97f441b1590c170419905f2fb8d2140803c7e8e22c852',
//   sequence_number: '0',
//   max_gas_amount: '200000',
//   gas_unit_price: '100',
//   expiration_timestamp_secs: '1726236062',
//   payload: {
//     function: '0x1::aptos_account::transfer',
//     type_arguments: [],
//     arguments: [
//       '0xa52522c9a1d0d6695e09be57b9605168056173e50a56e2f355385270ab7070e1',
//       '100'
//     ],
//     type: 'entry_function_payload'
//   },
//   signature: {
//     public_key: '0x0da1e7c9f856094993233fa9b9d0ce434aa192964c2d2a7f9ac0e98db7bef244',
//     signature: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
//     type: 'ed25519_signature'
//   },
//   events: [
//     {
//       guid: [Object],
//       sequence_number: '0',
//       type: '0x1::coin::WithdrawEvent',
//       data: [Object]
//     },
//     {
//       guid: [Object],
//       sequence_number: '1',
//       type: '0x1::coin::DepositEvent',
//       data: [Object]
//     },
//     {
//       guid: [Object],
//       sequence_number: '0',
//       type: '0x1::transaction_fee::FeeStatement',
//       data: [Object]
//     }
//   ],
//   timestamp: '1726236042647926'
// }

// === 3. Signing transaction ===

// Signed the transaction!

// === 4. Submitting transaction ===

// Submitted transaction hash: 0xab2aee974223a22ea6a1c24754a939c26a02bc417ac2e595aff8df6bb4e38f58

// === 5. Waiting for result of transaction ===

// {
//   version: '5979042103',
//   hash: '0xab2aee974223a22ea6a1c24754a939c26a02bc417ac2e595aff8df6bb4e38f58',
//   state_change_hash: '0xb983e92f607a266695468412bbbecbb52922aecd8d7b7f2681d0b4e977b1a6a6',
//   event_root_hash: '0xc6c4ffa097c7cf46570289b33ac3f2cd77fa41c72f767781f8122abe0014b583',
//   state_checkpoint_hash: null,
//   gas_used: '9',
//   success: true,
//   vm_status: 'Executed successfully',
//   accumulator_root_hash: '0xb9ddc32e3353a440762f727a57929a9722e87b27398924a3aff6ebc322ff00e5',
//   changes: [
//     {
//       address: '0x1e858caee9d67b50a97f441b1590c170419905f2fb8d2140803c7e8e22c852',
//       state_key_hash: '0x7f4ad20eb420245733b8128041b91e3723ac16a4105a7d42584484207aa31186',
//       data: [Object],
//       type: 'write_resource'
//     },
//     {
//       address: '0x1e858caee9d67b50a97f441b1590c170419905f2fb8d2140803c7e8e22c852',
//       state_key_hash: '0x940f9bd6c4a7c61733c53d99c83007bbaea16ccb3a9a638f573d1ab7d3647d85',
//       data: [Object],
//       type: 'write_resource'
//     },
//     {
//       address: '0xa52522c9a1d0d6695e09be57b9605168056173e50a56e2f355385270ab7070e1',
//       state_key_hash: '0x820cf5d86aa00653ace8db87a11885e143a73dd04688fa8dcc23556ba3bd23da',
//       data: [Object],
//       type: 'write_resource'
//     },
//     {
//       state_key_hash: '0x6e4b28d40f98a106a65163530924c0dcb40c1349d3aa915d108b4d6cfc1ddb19',
//       handle: '0x1b854694ae746cdbd8d44186ca4929b2b337df21d1c74633be19b2710552fdca',
//       key: '0x0619dc29a0aac8fa146714058e8dd6d2d0f3bdf5f6331907bf91f3acd81e6935',
//       value: '0x93d3fb1fe629be940100000000000000',
//       data: null,
//       type: 'write_table_item'
//     }
//   ],
//   sender: '0x1e858caee9d67b50a97f441b1590c170419905f2fb8d2140803c7e8e22c852',
//   sequence_number: '0',
//   max_gas_amount: '200000',
//   gas_unit_price: '100',
//   expiration_timestamp_secs: '1726236062',
//   payload: {
//     function: '0x1::aptos_account::transfer',
//     type_arguments: [],
//     arguments: [
//       '0xa52522c9a1d0d6695e09be57b9605168056173e50a56e2f355385270ab7070e1',
//       '100'
//     ],
//     type: 'entry_function_payload'
//   },
//   signature: {
//     public_key: '0x0da1e7c9f856094993233fa9b9d0ce434aa192964c2d2a7f9ac0e98db7bef244',
//     signature: '0x7cc94bc08806e4c1f71d1a2098b29d950dbc7ff29239bc6c1a628f036059ff7a4702b3a2ec4be64c2777be2e3ca61d5c1d058ae9d56e3d74e9340ac9c5e47802',
//     type: 'ed25519_signature'
//   },
//   events: [
//     {
//       guid: [Object],
//       sequence_number: '0',
//       type: '0x1::coin::WithdrawEvent',
//       data: [Object]
//     },
//     {
//       guid: [Object],
//       sequence_number: '1',
//       type: '0x1::coin::DepositEvent',
//       data: [Object]
//     },
//     {
//       guid: [Object],
//       sequence_number: '0',
//       type: '0x1::transaction_fee::FeeStatement',
//       data: [Object]
//     }
//   ],
//   timestamp: '1726236043771659',
//   type: 'user_transaction'
// }