///
import { MethodContext, ImmutableMethodContext } from '../../state_machine/types';
import { JSONObject } from '../../types';
import { CCMsg } from '../interoperability';
export type FeeTokenID = Buffer;
export interface ModuleConfig {
feeTokenID: Buffer;
minFeePerByte: number;
maxBlockHeightZeroFeePerByte: number;
feePoolAddress?: Buffer;
}
export type ModuleConfigJSON = JSONObject;
export interface TokenMethod {
transfer(methodContext: MethodContext, senderAddress: Buffer, generatorAddress: Buffer, id: Buffer, amount: bigint): Promise;
burn(methodContext: MethodContext, senderAddress: Buffer, id: FeeTokenID, amount: bigint): Promise;
getAvailableBalance(methodContext: ImmutableMethodContext, address: Buffer, tokenID: Buffer): Promise;
lock(methodContext: MethodContext, address: Buffer, module: string, tokenID: Buffer, amount: bigint): Promise;
unlock(methodContext: MethodContext, address: Buffer, module: string, tokenID: Buffer, amount: bigint): Promise;
userSubstoreExists(methodContext: ImmutableMethodContext, address: Buffer, tokenID: Buffer): Promise;
}
export interface GetFeeTokenIDResponse {
tokenID: string;
}
export interface GetMinFeePerByteResponse {
minFeePerByte: number;
}
export interface InteroperabilityMethod {
getMessageFeeTokenID(methodContext: ImmutableMethodContext, chainID: Buffer): Promise;
getMessageFeeTokenIDFromCCM(methodContext: ImmutableMethodContext, ccm: CCMsg): Promise;
}