入门

高级 vs 低级 API

了解 SDK 的两种交互方式,选择最适合你的开发模式

概述

AeSdk 是一个通用的高级接口,它封装了多个低级接口。对于大多数开发场景,推荐使用高级接口,因为它更简单,并且对底层变更更具弹性。

但 SDK 也提供了低级接口。它非常适合需要额外控制的场景,同时也是理解底层操作的绝佳学习工具。

节点 API(Node API)

Æternity 节点暴露了一个 REST API。这个 API 在 OpenAPI 文档中有详细描述。

SDK 使用这个文档生成 TypeScript 客户端。生成的客户端(在 Node中实现)基本上是所有节点端点到函数的映射。

示例:通过哈希查询交易
// 通过交易哈希获取交易详情
const tx = await node.getTransactionByHash(
  'th_fWEsg152BNYcrqA9jDh9VVpacYojCUb1yu45zUnqhmQ3dAAC6'
);
console.log(tx);

这种方式下,SDK 只是原始 API 调用到 JavaScript 的简单映射。

交易构建器(Transaction Builder)

任何区块链状态变更都需要签名一个交易。交易必须按照协议规范构建。

SDK 在以下函数中实现了这些规范:

函数 说明
buildTx 构建交易,需要提供更多参数
buildTxAsync 异步构建交易,参数更少,但需要 node 实例
unpackTx 解析已编码的交易
高级 SDK 用法(推荐)

使用 Æternity SDK 抽象的 spend 调用示例:

import { AeSdk, Node, AccountMemory } from '@aeternity/aepp-sdk';

// 初始化
const node = new Node('https://testnet.aeternity.io');
const account = new AccountMemory(SECRET_KEY);

const aeSdk = new AeSdk({
  nodes: [{ name: 'testnet', instance: node }],
  accounts: [account],
});

// 一行代码完成转账!
const result = await aeSdk.spend(
  100,  // 金额(aettos)
  'ak_recipient_address...'  // 接收方地址
);

console.log('交易哈希:', result.hash);
优势:高级接口自动处理 nonce 管理、手续费计算、交易编码、签名和广播。
低级 SDK 用法

使用低级 SDK 函数执行相同的 spend 操作:

import { 
  Node, AccountMemory, Tag, 
  buildTxAsync, signedTx, sendTransaction 
} from '@aeternity/aepp-sdk';

// 初始化
const node = new Node('https://testnet.aeternity.io');
const account = new AccountMemory(SECRET_KEY);

// 步骤 1: 构建交易
const spendTx = await buildTxAsync({
  tag: Tag.SpendTx,
  senderId: account.address,
  recipientId: 'ak_recipient_address...',
  amount: 100,
  onNode: node,
});

// 步骤 2: 签名交易
const signed = signedTx(spendTx, {
  signatures: [await account.signTransaction(spendTx, { networkId: 'ae_uat' })],
});

// 步骤 3: 广播交易
const result = await sendTransaction(signed, { onNode: node });

console.log('交易哈希:', result.hash);
注意:低级接口需要手动处理每个步骤,但提供了更精细的控制。
对比总结
特性 高级 API 低级 API
代码量
学习曲线 平缓 陡峭
自动化程度
精细控制 有限 完全
适合场景 大多数应用开发 定制化需求、学习底层