import { Call, Contract } from 'starknet';
import { Address, Domain, LazyAsync, Numberish } from '@hyperlane-xyz/utils';
import { BaseStarknetAdapter } from '../../app/MultiProtocolApp.js';
import type { MultiProviderAdapter } from '../../providers/MultiProviderAdapter.js';
import { ChainName } from '../../types.js';
import { TokenMetadata } from '../types.js';
import { IHypTokenAdapter, ITokenAdapter, InterchainGasQuote, QuoteTransferRemoteParams, TransferParams, TransferRemoteParams } from './ITokenAdapter.js';
export declare class StarknetTokenAdapter extends BaseStarknetAdapter implements ITokenAdapter<Call> {
    readonly chainName: ChainName;
    readonly multiProvider: MultiProviderAdapter;
    readonly addresses: {
        tokenAddress: Address;
    };
    private readonly tokenContract;
    constructor(chainName: ChainName, multiProvider: MultiProviderAdapter, addresses: {
        tokenAddress: Address;
    });
    getContractInstance(): Promise<Contract>;
    private createContractInstance;
    getBalance(address: Address): Promise<bigint>;
    getMetadata(_isNft?: boolean): Promise<TokenMetadata>;
    getMinimumTransferAmount(_recipient: Address): Promise<bigint>;
    isApproveRequired(owner: Address, spender: Address, weiAmountOrId: Numberish): Promise<boolean>;
    isRevokeApprovalRequired(_owner: Address, _spender: Address): Promise<boolean>;
    populateApproveTx({ weiAmountOrId, recipient, }: TransferParams): Promise<Call>;
    populateTransferTx({ weiAmountOrId, recipient, }: TransferParams): Promise<Call>;
    getTotalSupply(): Promise<bigint | undefined>;
}
declare class BaseStarknetHypTokenAdapter extends BaseStarknetAdapter implements ITokenAdapter<Call> {
    readonly chainName: ChainName;
    readonly multiProvider: MultiProviderAdapter;
    readonly addresses: {
        warpRouter: Address;
    };
    readonly contract: Contract;
    constructor(chainName: ChainName, multiProvider: MultiProviderAdapter, addresses: {
        warpRouter: Address;
    });
    getBalance(address: Address): Promise<bigint>;
    getMetadata(_isNft?: boolean): Promise<TokenMetadata>;
    getMinimumTransferAmount(_recipient: Address): Promise<bigint>;
    isApproveRequired(owner: Address, spender: Address, weiAmountOrId: Numberish): Promise<boolean>;
    isRevokeApprovalRequired(_owner: Address, _spender: Address): Promise<boolean>;
    populateApproveTx({ weiAmountOrId, recipient, }: TransferParams): Promise<Call>;
    populateTransferTx({ weiAmountOrId, recipient, }: TransferParams): Promise<Call>;
    getTotalSupply(): Promise<bigint | undefined>;
}
export declare class StarknetHypSyntheticAdapter extends BaseStarknetHypTokenAdapter implements IHypTokenAdapter<Call> {
    readonly chainName: ChainName;
    readonly multiProvider: MultiProviderAdapter;
    readonly addresses: {
        warpRouter: Address;
    };
    constructor(chainName: ChainName, multiProvider: MultiProviderAdapter, addresses: {
        warpRouter: Address;
    });
    isApproveRequired(_owner: Address, _spender: Address, _weiAmountOrId: Numberish): Promise<boolean>;
    isRevokeApprovalRequired(_owner: Address, _spender: Address): Promise<boolean>;
    getDomains(): Promise<Domain[]>;
    getRouterAddress(domain: Domain): Promise<Buffer>;
    getAllRouters(): Promise<Array<{
        domain: Domain;
        address: Buffer;
    }>>;
    getBridgedSupply(): Promise<bigint | undefined>;
    quoteTransferRemoteGas({ destination, }: QuoteTransferRemoteParams): Promise<InterchainGasQuote>;
    populateTransferRemoteTx({ weiAmountOrId, destination, recipient, interchainGas, }: TransferRemoteParams): Promise<Call>;
}
export declare class StarknetHypCollateralAdapter extends StarknetHypSyntheticAdapter {
    readonly collateralContract: Contract;
    protected readonly wrappedTokenAddress: LazyAsync<string>;
    constructor(chainName: ChainName, multiProvider: MultiProviderAdapter, addresses: {
        warpRouter: Address;
    });
    protected getWrappedTokenAddress(): Promise<Address>;
    protected loadWrappedTokenAddress(): Promise<Address>;
    protected getWrappedTokenAdapter(): Promise<StarknetTokenAdapter>;
    getBridgedSupply(): Promise<bigint | undefined>;
    getMetadata(isNft?: boolean): Promise<TokenMetadata>;
    isApproveRequired(owner: Address, spender: Address, weiAmountOrId: Numberish): Promise<boolean>;
    populateApproveTx(params: TransferParams): Promise<Call>;
    populateTransferTx(params: TransferParams): Promise<Call>;
}
export declare class StarknetHypNativeAdapter extends StarknetHypSyntheticAdapter {
    readonly collateralContract: Contract;
    readonly nativeContract: Contract;
    constructor(chainName: ChainName, multiProvider: MultiProviderAdapter, addresses: {
        warpRouter: Address;
    });
    getBalance(address: Address): Promise<bigint>;
    isApproveRequired(owner: Address, spender: Address, weiAmountOrId: Numberish): Promise<boolean>;
    populateApproveTx({ weiAmountOrId, recipient, }: TransferParams): Promise<Call>;
    populateTransferRemoteTx({ weiAmountOrId, destination, recipient, interchainGas, }: TransferRemoteParams): Promise<Call>;
}
export declare class StarknetHypFeeAdapter extends StarknetHypSyntheticAdapter {
    readonly collateralContract: Contract;
    readonly feeTokenContract: Contract;
    constructor(chainName: ChainName, multiProvider: MultiProviderAdapter, addresses: {
        warpRouter: Address;
    });
    getBalance(address: Address): Promise<bigint>;
    isApproveRequired(owner: Address, spender: Address, weiAmountOrId: Numberish): Promise<boolean>;
    populateApproveTx({ weiAmountOrId, recipient, }: TransferParams): Promise<Call>;
    populateTransferRemoteTx({ weiAmountOrId, destination, recipient, interchainGas, }: TransferRemoteParams): Promise<Call>;
}
export {};
//# sourceMappingURL=StarknetTokenAdapter.d.ts.map