import { Amount } from './amount';
import { FeeDefaults } from './fee';
export interface ProtocolMetadata<_Units extends string = string, _FeeUnits extends string = _Units> {
    name: string;
    identifier: string;
    units: ProtocolUnitsMetadata<_Units>;
    mainUnit: _Units;
    fee?: ProtocolFeeMetadata<_FeeUnits>;
    account: ProtocolAccountMetadata;
    transaction?: ProtocolTransactionMetadata<_Units>;
}
export declare type ProtocolUnitsMetadata<_Units extends string = string> = {
    [key in _Units]: {
        symbol: ProtocolSymbol;
        decimals: number;
    };
};
export interface ProtocolSymbol {
    value: string;
    market?: string;
    asset?: string;
}
export interface ProtocolFeeMetadata<_FeeUnits extends string = string> {
    defaults?: FeeDefaults<_FeeUnits>;
    units?: ProtocolUnitsMetadata<_FeeUnits>;
    mainUnit?: _FeeUnits;
}
export interface ProtocolAccountMetadata {
    standardDerivationPath: string;
    address?: {
        isCaseSensitive?: boolean;
        placeholder?: string;
        regex?: string;
    };
}
export interface ProtocolTransactionMetadata<_Units extends string = string> {
    arbitraryData?: ProtocolTransactionArbitraryDataMetadata | {
        root?: ProtocolTransactionArbitraryDataMetadata;
        inner?: ProtocolTransactionArbitraryDataMetadata;
    };
    minBalance?: {
        amount: Amount<_Units>;
        name?: string;
    };
}
export interface ProtocolTransactionArbitraryDataMetadata {
    name: string;
    maxLength?: number;
    regex?: string;
}
export declare type ProtocolNetworkType = 'mainnet' | 'testnet' | 'custom';
export interface ProtocolNetwork {
    name: string;
    type: ProtocolNetworkType;
    rpcUrl: string;
    blockExplorerUrl: string;
}
