关于 ts-sdk-view-and-query
为使用 `@aptos-labs/ts-sdk` 只读查询 Aptos 链上数据提供指导,涵盖余额、账户信息、资源、模块和 Move 视图函数,并强调正确处理返回值类型。
主要功能
- 01使用 `getBalance` 读取 APT 余额
- 02调用 Move 视图函数
- 03查询账户信息和资源
- 04获取 Move 模块
- 05处理整数与返回值类型
- 06分页读取资源和模块
适用场景
- 01读取账户的 APT 余额
- 02安全调用 Move 视图函数
- 03检查账户资源或模块
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ aptos-labs/ aptos-agent-skills --skill ts-sdk-view-and-query安装后在 Claude Code 中输入/ts-sdk-view-and-query确认已加载。
详细介绍
TypeScript SDK:查看与查询
用途
介绍如何在 @aptos-labs/ts-sdk 中以只读方式访问链上数据:查看函数、余额、账户信息、资源和
模块。
始终
- 使用
aptos.getBalance({ accountAddress })获取 APT 余额——不要使用已弃用的getAccountCoinAmount/getAccountAPTAmount。 - 使用
aptos.view()调用 Move 查看函数——传入function、functionArguments和可选的typeArguments。 - 使用
bigint处理 u128/u256 查看函数返回值——当 Move 函数返回 u128/u256 时,将result[0]转换为BigInt(...)。 - 将地址作为字符串或 AccountAddress 传入——SDK 接受
AccountAddressInput(字符串或AccountAddress)。
禁止
- 不要使用已弃用的
getAccountCoinAmount或getAccountAPTAmount——请使用getBalance()。 - 不要用
number表示 u128/u256——这会导致精度损失;请使用bigint。 - 不要假设查看函数的返回值始终是字符串——类型可能不同(number、bigint、string、boolean、array)。
getBalance(APT)
const balance = await aptos.getBalance({
accountAddress: account.accountAddress
});
// balance is bigint in octas (1 APT = 100_000_000 octas)
const apt = balance / 100_000_000n;
const remainder = balance % 100_000_000n;
console.log(`${apt}.${remainder.toString().padStart(8, "0")} APT`);
getAccountInfo
const accountInfo = await aptos.getAccountInfo({
accountAddress: "0x1"
});
// accountInfo: { sequence_number, authentication_key, ... }
view() —— Move 查看函数
// No type arguments
const result = await aptos.view({
payload: {
function: `${MODULE_ADDRESS}::counter::get_count`,
functionArguments: [accountAddress]
}
});
const count = Number(result[0]);
// With type arguments (e.g. coin type)
const balanceResult = await aptos.view({
payload: {
function: "0x1::coin::balance",
typeArguments: ["0x1::aptos_coin::AptosCoin"],
functionArguments: [accountAddress]
}
});
const coinBalance = BigInt(balanceResult[0] as string);
// Multiple return values
// Move: public fun get_listing(addr): (address, u64, bool)
const [seller, price, isActive] = await aptos.view({
payload: {
function: `${MODULE_ADDRESS}::marketplace::get_listing`,
functionArguments: [listingAddress]
}
});
const listing = {
seller: seller as string,
price: BigInt(price as string),
isActive: isActive as boolean
};
getAccountResources
const resources = await aptos.getAccountResources({
accountAddress: account.accountAddress
});
// resources: Array<MoveResource>
const counterResource = resources.find((r) => r.type === `${MODULE_ADDRESS}::counter::Counter`);
getAccountResource(单个类型)
const resource = await aptos.getAccountResource({
accountAddress: account.accountAddress,
resourceType: `${MODULE_ADDRESS}::counter::Counter`
});
// resource.data has the struct fields
const value = (resource?.data as { value: number })?.value;
getAccountModules
const modules = await aptos.getAccountModules({
accountAddress: modulePublisherAddress
});
// modules: MoveModuleBytecode[] (ABI, bytecode)
getModule(按名称获取单个模块)
const module = await aptos.getModule({
accountAddress: modulePublisherAddress,
moduleName: "counter"
});
分页(资源/模块)
有可用选项时,请使用基于游标的选项:
const { resources, cursor } = await aptos.getAccountResourcesPage({
accountAddress: account.accountAddress,
options: { limit: 10, cursor: nextCursor }
});
查看结果的类型处理
| Move 返回类型 | TypeScript | 示例 |
|---|---|---|
| u8..u64 | number 或 bigint | Number(result[0]) 或 BigInt(result[0]) |
| u128, u256 | bigint | BigInt(result[0] as string) |
| address | string | result[0] as string |
| bool | boolean | result[0] as boolean |
| vector | array | result[0] as T[] |
常见错误
| 错误 | 正确做法 |
|---|---|
| 使用 getAccountCoinAmount | 使用 aptos.getBalance({ accountAddress }) |
| 对 u128 使用 number | 使用 BigInt(result[0] as string) |
| 忘记为泛型查看函数传入 typeArguments | Move 函数为泛型时,添加 typeArguments: [coinType] |
参考
- SDK:
src/internal/view.ts、src/api/account.ts、internal 中的 balance/getBalance - 模式:TYPESCRIPT_SDK.md
- 相关:ts-sdk-client、ts-sdk-types、 use-ts-sdk
评论
支持 Markdown