@hyperlane-xyz/sdk
Version:
The official SDK for the Hyperlane Network
87 lines • 3.56 kB
TypeScript
import { PublicKey, Transaction, TransactionConfirmationStatus, TransactionInstruction } from '@solana/web3.js';
import { Address, ProtocolType } from '@hyperlane-xyz/utils';
import type { MultiProviderAdapter } from '../../providers/MultiProviderAdapter.js';
import { SendTransactionOptions } from '../../providers/MultiProvider.js';
import { SolanaWeb3Transaction } from '../../providers/ProviderType.js';
import { ChainName } from '../../types.js';
import { IMultiProtocolSigner } from '../types.js';
/**
* Interface for SVM transaction signers
*/
export interface SvmTransactionSigner {
readonly publicKey: PublicKey;
signTransaction(transaction: Transaction): Promise<Transaction>;
}
export interface SvmSignerConfig {
/** Max polling attempts before timeout (default: 30) */
maxConfirmationAttempts?: number;
/** Delay between polling attempts in ms (default: 1000) */
pollingDelayMs?: number;
/** Commitment level for confirmation (default: 'confirmed') */
commitment?: TransactionConfirmationStatus;
/** Whether to automatically resubmit on blockhash expiry (default: true) */
enableBlockhashResubmit?: boolean;
/** Whether to retry on RPC errors during polling (default: true) */
retryOnRpcErrors?: boolean;
}
export interface TransactionBuildOptions {
/** Optional priority fee override (microLamports) */
priorityFee?: number;
/** Whether to include priority fee instruction (default: true) */
includePriorityFee?: boolean;
}
/**
* Keypair-based SVM transaction signer
*/
export declare class KeypairSvmTransactionSigner implements SvmTransactionSigner {
readonly publicKey: PublicKey;
private readonly keypair;
constructor(privateKey: Uint8Array);
signTransaction(transaction: Transaction): Promise<Transaction>;
}
export declare class SvmMultiProtocolSignerAdapter implements IMultiProtocolSigner<ProtocolType.Sealevel> {
private readonly chainName;
private readonly signer;
private readonly svmProvider;
private readonly config;
private readonly logger;
constructor(chainName: ChainName, signer: SvmTransactionSigner, multiProtocolProvider: MultiProviderAdapter, config?: SvmSignerConfig);
publicKey(): PublicKey;
address(): Promise<Address>;
/**
* Build and send a transaction from raw instructions
*/
buildAndSendTransaction(instructions: TransactionInstruction[], options?: TransactionBuildOptions): Promise<string>;
/**
* Send and confirm a pre-built transaction (IMultiProtocolSigner interface)
*/
sendAndConfirmTransaction(tx: SolanaWeb3Transaction, _options?: SendTransactionOptions): Promise<string>;
/**
* Build transaction from instructions with optional priority fees
*/
private buildTransaction;
/**
* Sign and confirm transaction with blockhash resubmit on expiry
*/
private signAndConfirm;
/**
* Poll for transaction confirmation with blockhash expiry handling
*/
private pollForConfirmation;
/**
* Check if blockhash expired and resubmit transaction if needed
* Returns new signature and lastValidBlockHeight if resubmitted, null otherwise
*/
private checkAndResubmitIfExpired;
/**
* Check if transaction is confirmed
* Returns true if confirmed, false if pending
* Throws if transaction failed
*/
private checkTransactionConfirmation;
/**
* Send signed transaction to network
*/
private sendRawTransaction;
}
//# sourceMappingURL=solana-web3js.d.ts.map