使用 TypeScript SDK 執行第一個 Aptos 程式範例

嗨大家好,上篇我們安裝完了 Aptos CLI 及測試第一個開發範例後,本篇將使用 TypeScript SDK 執行並簡單解析第一個程式範例

Step1. 事前準備

Step2. 進入到指令路徑後,並且安裝必要的環境套件

// Navigate to the Typescript SDK examples directory
cd ~/aptos-core/ecosystem/typescript/sdk/examples/typescript
// Install the necessary dependencies
yarn install

Step3. 執行範例程式

yarn run transfer_coin

執行成果大概會如下圖所呈現

而此範例的步驟大致上如下:

  1. 初始化 REST 及 水龍頭
  2. 創建兩個帳戶分別為 Alice 及 Bob,並且從水龍頭提供 100000000 個 Token 給 Alice
  3. 將 1000 個 Token 從 Alice 的帳戶轉移至 Bob 的帳戶,並且此交易需支付 54100 個 Token 作為手續費用
  4. 再執行另外一筆交易,並且與 2~3 步驟相同(將 1000 個 Token 從 Alice 的帳戶轉移至 Bob 的帳戶)

而上述四步驟都是由 transfer_coin.ts 這個程式所完成的,所以接下來我們將簡單解析這個程式檔:

首先,第 6 行至第 10 行是此範例程式所需要調用的工具包或環境設定,而 Aptos 的 TypeScript SDK 工具包文件參考連結如下:
https://aptos-labs.github.io/ts-sdk-doc/modules.html

import dotenv from "dotenv";
dotenv.config();
import { AptosClient, AptosAccount, CoinClient, FaucetClient } from "aptos";
import { NODE_URL, FAUCET_URL } from "./common";

而第 15 行至第 16 行則是初始化 Aptos REST API 及 水龍頭:

// Create API and faucet clients.
const client = new AptosClient(NODE_URL);
const faucetClient = new FaucetClient(NODE_URL, FAUCET_URL);

此範例程式的 API URL 為 https://fullnode.devnet.aptoslabs.com
而 API 文件連結如下:
https://fullnode.devnet.aptoslabs.com/v1/spec#/
裡面會清楚的描述各式各樣的 APIs 可以與 Aptos 公鏈進行互動,並且不論是執行成功或發生錯誤時,可藉由回傳之訊息,作出精準的判斷。

而水龍頭位置的連結為:https://faucet.devnet.aptoslabs.com
上述程式中的環境參數設定 NODE_URL (API URL) 及 FAUCET_URL (水龍頭位置),皆可在 common.ts 中找到:

export const NODE_URL = process.env.APTOS_NODE_URL || "https://fullnode.devnet.aptoslabs.com";
export const FAUCET_URL = process.env.APTOS_FAUCET_URL || "https://faucet.devnet.aptoslabs.com";

第 20 行則是創建 Coin Client:
顧名思義,CoinClient 就是可以與 Coin 相關的 Module 進行互動,如:轉移代幣或是檢查餘額等

// Create client for working with the coin module.
const coinClient = new CoinClient(client); 

第 24 行至第 31 行則是創建兩個帳戶分別為 Alice 及 Bob,並且分別 print 出他們的錢包地址:

// Create accounts.
const alice = new AptosAccount();
const bob = new AptosAccount(); // <:!:section_2
// Print out account addresses.
console.log("=== Addresses ===");
console.log(`Alice: ${alice.address()}`);
console.log(`Bob: ${bob.address()}`);
console.log("");

第 39 行至第 43 行則是從水龍頭提供 100000000 個 Token 給 Alice,並且 print 出 Alice 及 Bob 的錢包餘額:

// Fund accounts.
await faucetClient.fundAccount(alice.address(), 100_000_000);
await faucetClient.fundAccount(bob.address(), 0);
// Print out initial balances.
console.log("=== Initial Balances ===");
console.log(`Alice: ${await coinClient.checkBalance(alice)}`);
console.log(`Bob: ${await coinClient.checkBalance(bob)}`);
console.log("");

而第 47 行至第 55 行 及 第 58 行至第 66 行為相同的動作,將 1000 個 Token 從 Alice 的帳戶轉移至 Bob 的帳戶,並且此交易 Alice 需支付 54100 個 Token 作為手續費,而交易完成後,print 出 Alice 及 Bob 目前最新的錢包餘額:

// Have Alice send Bob some AptosCoins.
let txnHash = await coinClient.transfer(alice, bob, 1_000, { gasUnitPrice: BigInt(100) });
await client.waitForTransaction(txnHash);
// Print out intermediate balances.
console.log("=== Intermediate Balances ===");
console.log(`Alice: ${await coinClient.checkBalance(alice)}`);
console.log(`Bob: ${await coinClient.checkBalance(bob)}`);
console.log("");

參考文獻:

  1. https://aptos.dev/tutorials/your-first-transaction

以上為本次範例簡單的程式碼 Review,未來我們還持續撰寫相關 Aptos 文章與大家一同交流,有任何問題也歡迎一起討論,我們下次見!