From aptos-agent-skills
Sets up and configures Aptos client (Aptos, AptosConfig) in @aptos-labs/ts-sdk. Covers networks, custom URLs, singleton pattern, and Bun compatibility.
npx claudepluginhub aptos-labs/aptos-agent-skills --plugin aptos-agent-skillsThis skill uses the workspace's default tool permissions.
Guide creation and configuration of the **Aptos** client and **AptosConfig** in `@aptos-labs/ts-sdk`. One client
Orchestrates @aptos-labs/ts-sdk integration for Aptos dApps, routing to granular skills for client setup, accounts, transactions, view functions, types, and wallet adapters. For fullstack dApp development.
Provides reusable TypeScript bankr-client.ts, viem-based executor.ts, and config files for Bankr x402 SDK projects with USDC micropayments on Base.
Provides QuickNode SDK and ethers.js patterns for production blockchain dApps: provider singletons, retry logic, batch RPC calls, multi-chain support.
Share bugs, ideas, or general feedback.
Guide creation and configuration of the Aptos client and AptosConfig in @aptos-labs/ts-sdk. One client
instance is used for all read/write and account/transaction APIs.
new Aptos(config) for the same
network.AptosConfig – use Network.TESTNET or Network.MAINNET (or custom endpoints).process.env.APTOS_NETWORK or
import.meta.env.VITE_APP_NETWORK.Network.TESTNET as default for development – devnet resets frequently.Network enum.network when using custom endpoints – in v5.2+ use Network.CUSTOM with custom URLs.import { Aptos, AptosConfig, Network } from "@aptos-labs/ts-sdk";
const config = new AptosConfig({ network: Network.TESTNET });
const aptos = new Aptos(config);
// Predefined networks
const devnet = new AptosConfig({ network: Network.DEVNET });
const testnet = new AptosConfig({ network: Network.TESTNET });
const mainnet = new AptosConfig({ network: Network.MAINNET });
// Custom endpoints (network is REQUIRED in v5.2+)
const custom = new AptosConfig({
network: Network.CUSTOM,
fullnode: "https://your-fullnode.example.com/v1",
indexer: "https://your-indexer.example.com/v1/graphql",
faucet: "https://your-faucet.example.com"
});
// lib/aptos.ts or similar
import { Aptos, AptosConfig, Network } from "@aptos-labs/ts-sdk";
function getNetwork(): Network {
const raw = typeof process !== "undefined" ? process.env.APTOS_NETWORK : import.meta.env?.VITE_APP_NETWORK;
switch (raw) {
case "mainnet":
return Network.MAINNET;
case "devnet":
return Network.DEVNET;
default:
return Network.TESTNET;
}
}
const config = new AptosConfig({ network: getNetwork() });
export const aptos = new Aptos(config);
const config = new AptosConfig({
network: Network.TESTNET,
fullnode: "https://fullnode.testnet.aptoslabs.com/v1", // override default
indexer: "https://indexer.testnet.aptoslabs.com/v1/graphql",
faucet: "https://faucet.testnet.aptoslabs.com",
pepper: "https://...", // keyless pepper service
prover: "https://..." // keyless prover
});
const aptos = new Aptos(config);
// Disable HTTP/2 when using Bun (recommended)
const config = new AptosConfig({
network: Network.TESTNET,
clientConfig: { http2: false }
});
const aptos = new Aptos(config);
After construction, use the same aptos instance for:
aptos.getAccountInfo(), aptos.getBalance(), aptos.getAccountResources(), etc.aptos.transaction.build.simple(), aptos.signAndSubmitTransaction(),
aptos.waitForTransaction().aptos.view().aptos.fundAccount() (devnet/testnet).aptos.coin.*, aptos.digitalAsset.*, aptos.fungibleAsset.*,
aptos.object.*, aptos.ans.*, aptos.staking.*.| Mistake | Correct approach |
|---|---|
| Creating Aptos in every function | One singleton; pass aptos or import from shared module |
| Using devnet for persistent dev | Prefer testnet; devnet resets |
| Custom URLs without Network.CUSTOM | Set network: Network.CUSTOM when providing fullnode/indexer/faucet |
| Forgetting http2: false on Bun | Set clientConfig: { http2: false } for Bun |
src/api/aptos.ts, src/api/aptosConfig.ts