import { Address, ContractState, TestContractResult, HexString, ContractFactory, CallContractParams, CallContractResult, TestContractParams, ContractInstance } from "@alephium/web3";
export declare namespace TestTokenTypes {
    type Fields = {
        symbol: HexString;
        name: HexString;
        decimals: bigint;
        totalSupply: bigint;
    };
    type State = ContractState<Fields>;
    interface CallMethodTable {
        getSymbol: {
            params: Omit<CallContractParams<{}>, "args">;
            result: CallContractResult<HexString>;
        };
        getName: {
            params: Omit<CallContractParams<{}>, "args">;
            result: CallContractResult<HexString>;
        };
        getDecimals: {
            params: Omit<CallContractParams<{}>, "args">;
            result: CallContractResult<bigint>;
        };
        getTotalSupply: {
            params: Omit<CallContractParams<{}>, "args">;
            result: CallContractResult<bigint>;
        };
    }
    type CallMethodParams<T extends keyof CallMethodTable> = CallMethodTable[T]["params"];
    type CallMethodResult<T extends keyof CallMethodTable> = CallMethodTable[T]["result"];
    type MultiCallParams = Partial<{
        [Name in keyof CallMethodTable]: CallMethodTable[Name]["params"];
    }>;
    type MultiCallResults<T extends MultiCallParams> = {
        [MaybeName in keyof T]: MaybeName extends keyof CallMethodTable ? CallMethodTable[MaybeName]["result"] : undefined;
    };
}
declare class Factory extends ContractFactory<TestTokenInstance, TestTokenTypes.Fields> {
    at(address: string): TestTokenInstance;
    testGetSymbolMethod(params: Omit<TestContractParams<TestTokenTypes.Fields, never>, "testArgs">): Promise<TestContractResult<HexString>>;
    testGetNameMethod(params: Omit<TestContractParams<TestTokenTypes.Fields, never>, "testArgs">): Promise<TestContractResult<HexString>>;
    testGetDecimalsMethod(params: Omit<TestContractParams<TestTokenTypes.Fields, never>, "testArgs">): Promise<TestContractResult<bigint>>;
    testGetTotalSupplyMethod(params: Omit<TestContractParams<TestTokenTypes.Fields, never>, "testArgs">): Promise<TestContractResult<bigint>>;
    testBuyMethod(params: TestContractParams<TestTokenTypes.Fields, {
        from: HexString;
        amount: bigint;
        factor: bigint;
    }>): Promise<TestContractResult<null>>;
}
export declare const TestToken: Factory;
export declare class TestTokenInstance extends ContractInstance {
    constructor(address: Address);
    fetchState(): Promise<TestTokenTypes.State>;
    callGetSymbolMethod(params?: TestTokenTypes.CallMethodParams<"getSymbol">): Promise<TestTokenTypes.CallMethodResult<"getSymbol">>;
    callGetNameMethod(params?: TestTokenTypes.CallMethodParams<"getName">): Promise<TestTokenTypes.CallMethodResult<"getName">>;
    callGetDecimalsMethod(params?: TestTokenTypes.CallMethodParams<"getDecimals">): Promise<TestTokenTypes.CallMethodResult<"getDecimals">>;
    callGetTotalSupplyMethod(params?: TestTokenTypes.CallMethodParams<"getTotalSupply">): Promise<TestTokenTypes.CallMethodResult<"getTotalSupply">>;
    multicall<Calls extends TestTokenTypes.MultiCallParams>(calls: Calls): Promise<TestTokenTypes.MultiCallResults<Calls>>;
}
export {};
