嗨大家好,上篇我們安裝完了 Aptos CLI 及測試第一個開發範例後,本篇將使用 TypeScript SDK 執行並簡單解析第一個程式範例
Step1. 事前準備
- 請確定已安裝
yarn
指令
https://classic.yarnpkg.com/lang/en/docs/install/
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
執行成果大概會如下圖所呈現
而此範例的步驟大致上如下:
- 初始化 REST 及 水龍頭
- 創建兩個帳戶分別為 Alice 及 Bob,並且從水龍頭提供 100000000 個 Token 給 Alice
- 將 1000 個 Token 從 Alice 的帳戶轉移至 Bob 的帳戶,並且此交易需支付 54100 個 Token 作為手續費用
- 再執行另外一筆交易,並且與 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("");
參考文獻:
以上為本次範例簡單的程式碼 Review,未來我們還持續撰寫相關 Aptos 文章與大家一同交流,有任何問題也歡迎一起討論,我們下次見!