import { AccountId } from "@polkadot/types/interfaces"; import { ApiPromise } from "@polkadot/api"; import { MonetaryAmount } from "@interlay/monetary-js"; import { ChainBalance, CurrencyExt, ExtrinsicData } from "../types"; import { OrmlTokensAccountData } from "@polkadot/types/lookup"; import { SubmittableExtrinsic } from "@polkadot/api/types"; import { ISubmittableResult } from "@polkadot/types/types"; /** * @category BTC Bridge */ export interface TokensAPI { /** * @param currency The currency specification, a `Monetary.js` object or `ForeignAsset` * @returns The total amount in the system */ total(currency: CurrencyT): Promise>; /** * @param currency The currency specification, `Monetary.js` object or `ForeignAsset` * @param id The AccountId of a user * @returns The user's balance */ balance(currency: CurrencyExt, id: AccountId): Promise; /** * Build a transfer extrinsic without sending it. * * @param destination The address of a user * @param amount The amount to transfer, as `Monetary.js` object or `ForeignAsset` * @returns A transfer submittable extrinsic. */ buildTransferExtrinsic(destination: string, amount: MonetaryAmount): SubmittableExtrinsic<"promise", ISubmittableResult>; /** * @param destination The address of a user * @param amount The amount to transfer, as `Monetary.js` object or `ForeignAsset` * @returns {ExtrinsicData} A submittable extrinsic and an event that is emitted when extrinsic is submitted. */ transfer(destination: string, amount: MonetaryAmount): ExtrinsicData; /** * Subscribe to balance updates * @param currency The currency specification, `Monetary.js` object or `ForeignAsset` * @param account AccountId string * @param callback Function to be called whenever the balance of an account is updated. * Its parameters are (accountIdString, freeBalance) */ subscribeToBalance(currency: CurrencyExt, account: string, callback: (account: string, balance: ChainBalance) => void): Promise<() => void>; /** * @param accountId Account whose balance to set * @param freeBalance Free balance to set, as a Monetary.js object * @param lockedBalance Locked balance to set, as a Monetary.js object * @returns {ExtrinsicData} A submittable extrinsic and an event that is emitted when extrinsic is submitted. * @remarks This extrinsic is only valid if submitted by a sudo account */ setBalance(accountId: AccountId, freeBalance: MonetaryAmount, lockedBalance?: MonetaryAmount): ExtrinsicData; } export declare class DefaultTokensAPI implements TokensAPI { private api; constructor(api: ApiPromise); total(currency: CurrencyT): Promise>; getAccountData(currency: CurrencyExt, id: AccountId): Promise; balance(currency: CurrencyExt, id: AccountId): Promise; subscribeToBalance(currency: CurrencyExt, account: string, callback: (account: string, accountData: ChainBalance) => void): Promise<() => void>; buildTransferExtrinsic(destination: string, amount: MonetaryAmount): SubmittableExtrinsic<"promise", ISubmittableResult>; transfer(destination: string, amount: MonetaryAmount): ExtrinsicData; setBalance(accountId: AccountId, freeBalance: MonetaryAmount, lockedBalance?: MonetaryAmount): ExtrinsicData; }