mcpField
T
ts-sdk-view-and-query

ts-sdk-view-and-query

github.com/aptos-labsDevelopment2067 installsUpdated 24w ago
Repository

About ts-sdk-view-and-query

A guidance skill for read-only Aptos chain queries with `@aptos-labs/ts-sdk`. It covers balances, account data, resources, modules, and Move view functions, with emphasis on correct return-type handling.

Key features

  1. 01Read APT balances with `getBalance`
  2. 02Call Move view functions
  3. 03Query account info and resources
  4. 04Retrieve Move modules
  5. 05Handle integer and result types
  6. 06Paginate resources and modules

Use cases

  1. 01Read an account’s APT balance
  2. 02Call a Move view function safely
  3. 03Inspect account resources or modules

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/aptos-labs/aptos-agent-skills --skill ts-sdk-view-and-query

After installing, type/ts-sdk-view-and-queryin Claude Code to confirm it loaded.

Details

From the project README

TypeScript SDK: View and Query

Purpose

Guide read-only access to chain data in @aptos-labs/ts-sdk: view functions, balance, account info, resources, and modules.

ALWAYS

  1. Use aptos.getBalance({ accountAddress }) for APT balance – not deprecated getAccountCoinAmount / getAccountAPTAmount.
  2. Use aptos.view() for Move view functions – pass function, functionArguments, and optional typeArguments.
  3. Use bigint for u128/u256 view return values – cast result[0] to BigInt(...) when the Move function returns u128/u256.
  4. Pass address as string or AccountAddress – SDK accepts AccountAddressInput (string or AccountAddress).

NEVER

  1. Do not use deprecated getAccountCoinAmount or getAccountAPTAmount – use getBalance().
  2. Do not use number for u128/u256 – precision loss; use bigint.
  3. Do not assume view returns are always strings – types vary (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 view functions

// 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 (single type)

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 (single module by name)

const module = await aptos.getModule({
  accountAddress: modulePublisherAddress,
  moduleName: "counter"
});

Pagination (resources / modules)

Use cursor-based options when available:

const { resources, cursor } = await aptos.getAccountResourcesPage({
  accountAddress: account.accountAddress,
  options: { limit: 10, cursor: nextCursor }
});

Type handling for view results

Move return typeTypeScriptExample
u8..u64number or bigintNumber(result[0]) or BigInt(result[0])
u128, u256bigintBigInt(result[0] as string)
addressstringresult[0] as string
boolbooleanresult[0] as boolean
vectorarrayresult[0] as T[]

Common mistakes

MistakeCorrect approach
Using getAccountCoinAmountUse aptos.getBalance({ accountAddress })
Using number for u128Use BigInt(result[0] as string)
Forgetting typeArguments for generic viewAdd typeArguments: [coinType] when Move function is generic

References

Comments

Markdown supported