@openzeppelin/contracts-ui-builder-adapter-solana
Version:
Solana Adapter for Contracts UI Builder
123 lines (114 loc) • 5.4 kB
TypeScript
import { WalletConnectionStatus, ContractAdapter, SolanaNetworkConfig, UiKitConfiguration, ContractSchema, FieldType, FunctionParameter, FormFieldType, ExecutionConfig, ExecutionMethodDetail, ContractFunction, Connector, AvailableUiKit, RelayerDetails, RelayerDetailsRich, UserRpcProviderConfig } from '@openzeppelin/contracts-ui-builder-types';
/**
* Solana-specific wallet connection status extending the base interface.
* Currently doesn't add Solana-specific fields but maintains consistency with other adapters.
* This can be extended to an interface when Solana wallet features are implemented.
*/
type SolanaWalletConnectionStatus = WalletConnectionStatus;
/**
* Solana-specific adapter implementation
*/
declare class SolanaAdapter implements ContractAdapter {
readonly networkConfig: SolanaNetworkConfig;
readonly initialAppServiceKitName: UiKitConfiguration['kitName'];
constructor(networkConfig: SolanaNetworkConfig);
loadContract(source: string | Record<string, unknown>): 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(): SolanaWalletConnectionStatus;
onWalletConnectionChange?(callback: (currentStatus: WalletConnectionStatus, previousStatus: WalletConnectionStatus) => 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;
}>;
}
/**
* Solana-specific contract artifacts interface
* Defines the structure of data needed to load Solana programs
*/
interface SolanaContractArtifacts {
/** The program ID (required) */
contractAddress: string;
/** Optional IDL JSON for program interface */
idl?: string;
}
/**
* Type guard to check if an object matches SolanaContractArtifacts structure
*/
declare function isSolanaContractArtifacts(obj: unknown): obj is SolanaContractArtifacts;
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, type SolanaContractArtifacts, isSolanaContractArtifacts, solanaAdapterConfig, solanaDevnet, solanaMainnetBeta, solanaMainnetNetworks, solanaNetworks, solanaTestnet, solanaTestnetNetworks };