///
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;
}