import { ContractAdapter, SolanaNetworkConfig, UiKitConfiguration, FormValues, ContractSchema, FieldType, FunctionParameter, FormFieldType, ExecutionConfig, ExecutionMethodDetail, ContractFunction, Connector, AvailableUiKit, RelayerDetails, RelayerDetailsRich, UserRpcProviderConfig } from '@openzeppelin/contracts-ui-builder-types';

/**
 * Solana-specific adapter implementation
 */
declare class SolanaAdapter implements ContractAdapter {
    readonly networkConfig: SolanaNetworkConfig;
    readonly initialAppServiceKitName: UiKitConfiguration['kitName'];
    constructor(networkConfig: SolanaNetworkConfig);
    loadContract(artifacts: FormValues): Promise<ContractSchema>;
    getWritableFunctions(contractSchema: ContractSchema): ContractSchema['functions'];
    mapParameterTypeToFieldType(parameterType: string): FieldType;
    getCompatibleFieldTypes(parameterType: string): FieldType[];
    generateDefaultField<T extends FieldType = FieldType>(parameter: FunctionParameter): FormFieldType<T>;
    formatTransactionData(contractSchema: ContractSchema, functionId: string, submittedInputs: Record<string, unknown>, fields: FormFieldType[]): unknown;
    signAndBroadcast(transactionData: unknown, executionConfig?: ExecutionConfig): Promise<{
        txHash: string;
    }>;
    isValidAddress(address: string): boolean;
    getSupportedExecutionMethods(): Promise<ExecutionMethodDetail[]>;
    validateExecutionConfig(config: ExecutionConfig): Promise<true | string>;
    isViewFunction(functionDetails: ContractFunction): boolean;
    queryViewFunction(contractAddress: string, functionId: string, params?: unknown[], contractSchema?: ContractSchema): Promise<unknown>;
    formatFunctionResult(decodedValue: unknown, functionDetails: ContractFunction): string;
    supportsWalletConnection(): boolean;
    getAvailableConnectors(): Promise<Connector[]>;
    connectWallet(connectorId: string): Promise<{
        connected: boolean;
        address?: string;
        error?: string;
    }>;
    disconnectWallet(): Promise<{
        disconnected: boolean;
        error?: string;
    }>;
    getWalletConnectionStatus(): {
        isConnected: boolean;
        address?: string;
        chainId?: string;
    };
    onWalletConnectionChange?(callback: (status: {
        isConnected: boolean;
        address?: string;
    }) => void): () => void;
    getExplorerUrl(address: string): string | null;
    getExplorerTxUrl?(txHash: string): string | null;
    waitForTransactionConfirmation?(txHash: string): Promise<{
        status: 'success' | 'error';
        receipt?: unknown;
        error?: Error;
    }>;
    getAvailableUiKits(): Promise<AvailableUiKit[]>;
    getContractDefinitionInputs(): FormFieldType[];
    getRelayers(_serviceUrl: string, _accessToken: string): Promise<RelayerDetails[]>;
    getRelayer(_serviceUrl: string, _accessToken: string, _relayerId: string): Promise<RelayerDetailsRich>;
    /**
     * @inheritdoc
     */
    validateRpcEndpoint(rpcConfig: UserRpcProviderConfig): Promise<boolean>;
    /**
     * @inheritdoc
     */
    testRpcConnection(rpcConfig: UserRpcProviderConfig): Promise<{
        success: boolean;
        latency?: number;
        error?: string;
    }>;
}

declare const solanaMainnetBeta: SolanaNetworkConfig;

declare const solanaDevnet: SolanaNetworkConfig;
declare const solanaTestnet: SolanaNetworkConfig;

declare const solanaMainnetNetworks: SolanaNetworkConfig[];
declare const solanaTestnetNetworks: SolanaNetworkConfig[];
declare const solanaNetworks: SolanaNetworkConfig[];

/**
 * Configuration for the Solana adapter
 *
 * This file defines the dependencies required by the Solana adapter
 * when generating exported projects. It follows the AdapterConfig
 * interface to provide a structured approach to dependency management.
 */
declare const solanaAdapterConfig: {
    /**
     * Dependencies required by the Solana adapter
     * These will be included in exported projects that use this adapter
     */
    dependencies: {
        runtime: {
            '@solana/web3.js': string;
            '@solana/spl-token': string;
            '@solana/wallet-adapter-react': string;
            '@solana/wallet-adapter-base': string;
            bs58: string;
            '@project-serum/anchor': string;
        };
        dev: {
            '@solana/spl-token-registry': string;
            '@solana/cli': string;
        };
    };
};

export { SolanaAdapter, solanaAdapterConfig, solanaDevnet, solanaMainnetBeta, solanaMainnetNetworks, solanaNetworks, solanaTestnet, solanaTestnetNetworks };
