// Copyright © Endless // Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 import { AccountAddress, AccountAddressInput } from "../core"; import { transferCoinTransaction, getCoinData, getCoinListDataById, getCoinHolders, getCoinsList } from "../internal/coin"; import { SimpleTransaction } from "../transactions/instances/simpleTransaction"; import { InputGenerateTransactionOptions } from "../transactions/types"; import { AnyNumber, MoveStructId, GetCoinDataResponse, PageableFungibleAssetMetadataResponse, PageableHoldersItem, PaginationArgsOfIndexer, } from "../types"; import { EndlessConfig } from "./endlessConfig"; /** * A class to handle all `Coin` operations */ export class Coin { constructor(readonly config: EndlessConfig) { } /** * Generate a transfer coin transaction that can be simulated and/or signed and submitted * * @example * const transferCoinTransaction = await endless.transferCoinTransaction({ * sender: "0x123", * recipient:"0x456", * amount: 10, * }) * * @param args.sender The sender account * @param args.recipient The recipient address * @param args.amount The amount to transfer * @param args.coinType optional. The coin struct type to transfer. Defaults to 0x1::endless_coin::EndlessCoin * * @returns SimpleTransaction */ async transferCoinTransaction(args: { sender: AccountAddressInput; fungibleAssetMetadataAddress: AccountAddress; recipient: AccountAddress; amount: AnyNumber; coinType?: MoveStructId; options?: InputGenerateTransactionOptions; }): Promise { return transferCoinTransaction({ endlessConfig: this.config, ...args }); } /** * @param args.coinAddress The coin address * * @returns GetCoinDataResponse */ async getCoinData(coinAddress: AccountAddressInput): Promise { return getCoinData(this.config, coinAddress); } /** * @param args.coinListAddress The coin list address * * @returns GetCoinDataResponse[] */ async getCoinListDataById(coinListAddress: AccountAddressInput[]): Promise { return getCoinListDataById(this.config, coinListAddress); } /** * Get coin holders * * @param coinAddress The coin address * @param options.page The page number, default is 0 * @param options.pageSize The page size, default is 30, max is 200 * * @returns PageableHoldersItem */ async getCoinHolders(coinAddress: AccountAddressInput, options?: PaginationArgsOfIndexer): Promise { return getCoinHolders(this.config, coinAddress, options); } /** * Get all coins from indexer * * @param options.page The page number, default is 0 * @param options.pageSize The page size, default is 30, max is 200 * * @returns PageableFungibleAssetMetadataResponse */ async getCoinsList(options?: PaginationArgsOfIndexer): Promise { return getCoinsList(this.config, options); } }