/// import { MethodContext, ImmutableMethodContext } from '../../state_machine'; import { CCMsg, ChannelData, OwnChainAccount } from '../interoperability/types'; import { JSONObject } from '../../types'; export type TokenID = Buffer; export interface ModuleConfig { userAccountInitializationFee: bigint; escrowAccountInitializationFee: bigint; } export type ModuleConfigJSON = JSONObject; export interface GenesisTokenStore { userSubstore: { address: Buffer; tokenID: Buffer; availableBalance: bigint; lockedBalances: { module: string; amount: bigint; }[]; }[]; supplySubstore: { tokenID: Buffer; totalSupply: bigint; }[]; escrowSubstore: { escrowChainID: Buffer; tokenID: Buffer; amount: bigint; }[]; supportedTokensSubstore: { chainID: Buffer; supportedTokenIDs: Buffer[]; }[]; } export interface InteroperabilityMethod { getOwnChainAccount(methodContext: ImmutableMethodContext): Promise; send(methodContext: MethodContext, feeAddress: Buffer, module: string, crossChainCommand: string, receivingChainID: Buffer, fee: bigint, parameters: Buffer, timestamp?: number): Promise; error(methodContext: MethodContext, ccm: CCMsg, code: number): Promise; terminateChain(methodContext: MethodContext, chainID: Buffer): Promise; getChannel(methodContext: MethodContext, chainID: Buffer): Promise; getMessageFeeTokenID(methodContext: ImmutableMethodContext, chainID: Buffer): Promise; getMessageFeeTokenIDFromCCM(methodContext: ImmutableMethodContext, ccm: CCMsg): Promise; } export interface FeeMethod { payFee(methodContext: MethodContext, amount: bigint): void; }