@coinbase/cdp-sdk
Version:
SDK for interacting with the Coinbase Developer Platform Wallet API
110 lines (101 loc) • 3.14 kB
text/typescript
import { Address } from "viem";
import { CdpOpenApiClientType, ListEvmTokenBalancesNetwork } from "../../openapi-client/index.js";
/**
* A token on an EVM network, which is either an ERC-20 or a native token (i.e. ETH).
*/
export interface EvmToken {
/**
* The contract address of the token. For Ether, the contract address is 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE
* per EIP-7528. For ERC-20 tokens, this is the contract address where the token is deployed.
*/
contractAddress: Address;
/** The network the token is on. */
network: ListEvmTokenBalancesNetwork;
/**
* The symbol of the token, which is optional and non-unique. Note: This field
* may not be present for most tokens while the API is still under development.
*/
symbol?: string;
/**
* The name of the token, which is optional and non-unique. Note: This field
* may not be present for most tokens while the API is still under development.
*/
name?: string;
}
/**
* A token amount on an EVM network.
*/
export interface EvmTokenAmount {
/** The amount of the token in the smallest indivisible unit of the token. */
amount: bigint;
/** The number of decimals in the token. */
decimals: number;
}
/**
* An EVM token balance.
*/
export interface EvmTokenBalance {
/** The token. */
token: EvmToken;
/** The amount of the token. */
amount: EvmTokenAmount;
}
/**
* Options for listing EVM token balances.
*/
export interface ListTokenBalancesOptions {
/** The address of the account. */
address: Address;
/** The network. */
network: ListEvmTokenBalancesNetwork;
/** The page size to paginate through the token balances. */
pageSize?: number;
/** The page token to paginate through the token balances. */
pageToken?: string;
}
/**
* The result of listing EVM token balances.
*/
export interface ListTokenBalancesResult {
/** The token balances. */
balances: EvmTokenBalance[];
/**
* The next page token to paginate through the token balances.
* If undefined, there are no more token balances to paginate through.
*/
nextPageToken?: string;
}
/**
* List the token balances for an EVM account.
*
* @param client - The client to use to list the token balances.
* @param options - The options for listing the token balances.
* @returns The result of listing the token balances.
*/
export async function listTokenBalances(
client: CdpOpenApiClientType,
options: ListTokenBalancesOptions,
): Promise<ListTokenBalancesResult> {
const response = await client.listEvmTokenBalances(options.network, options.address, {
pageSize: options.pageSize,
pageToken: options.pageToken,
});
const balances = response.balances.map(balance => {
return {
token: {
network: balance.token.network,
contractAddress: balance.token.contractAddress as Address,
symbol: balance.token.symbol,
name: balance.token.name,
},
amount: {
amount: BigInt(balance.amount.amount),
decimals: balance.amount.decimals,
},
};
});
return {
balances,
nextPageToken: response.nextPageToken,
};
}