@btc-vision/transaction
Version:
OPNet transaction library allows you to create and sign transactions for the OPNet network.
250 lines • 10.7 kB
TypeScript
import { Signer } from '../../../node_modules/@btc-vision/bitcoin/browser/index.js';
import { UniversalSigner } from '@btc-vision/ecpair';
import { TransactionType } from '../enums/TransactionType.js';
import { TransactionBuilder } from '../builders/TransactionBuilder.js';
import { ISerializableTransactionState, PrecomputedData } from './interfaces/ISerializableState.js';
import { ReconstructionOptions } from './TransactionReconstructor.js';
import { IDeploymentParameters, IFundingTransactionParameters, IInteractionParameters, ITransactionParameters } from '../interfaces/ITransactionParameters.js';
/**
* Export options for offline transaction signing
*/
export interface ExportOptions {
/** The original transaction parameters */
params: ITransactionParameters;
/** Transaction type */
type: TransactionType;
/** Precomputed data from the builder */
precomputed?: Partial<PrecomputedData>;
}
/**
* Main entry point for offline transaction signing workflow.
*
* This class provides a complete API for:
* 1. Phase 1 (Online): Building transactions and exporting state for offline signing
* 2. Phase 2 (Offline): Importing state, providing signers, and signing transactions
*
* Also supports fee bumping by allowing reconstruction with new fee parameters.
*
* @example
* ```typescript
* // Phase 1 (Online environment)
* const params: IFundingTransactionParameters = { ... };
* const state = OfflineTransactionManager.exportFunding(params);
* // Send state to offline environment
*
* // Phase 2 (Offline environment)
* const signedTxHex = await OfflineTransactionManager.importSignAndExport(state, {
* signer: offlineSigner,
* });
* // Send signedTxHex back to online environment for broadcast
* ```
*/
export declare class OfflineTransactionManager {
/**
* Export a FundingTransaction for offline signing
* @param params - Funding transaction parameters
* @param precomputed - Optional precomputed data
* @returns Base64-encoded serialized state
*/
static exportFunding(params: IFundingTransactionParameters, precomputed?: Partial<PrecomputedData>): string;
/**
* Export a DeploymentTransaction for offline signing
* @param params - Deployment transaction parameters
* @param precomputed - Required precomputed data (randomBytes, compiledTargetScript)
* @returns Base64-encoded serialized state
*/
static exportDeployment(params: IDeploymentParameters, precomputed: Partial<PrecomputedData> & {
compiledTargetScript: string;
randomBytes: string;
}): string;
/**
* Export an InteractionTransaction for offline signing
* @param params - Interaction transaction parameters
* @param precomputed - Required precomputed data (randomBytes, compiledTargetScript)
* @returns Base64-encoded serialized state
*/
static exportInteraction(params: IInteractionParameters, precomputed: Partial<PrecomputedData> & {
compiledTargetScript: string;
randomBytes: string;
}): string;
/**
* Export a MultiSignTransaction for offline signing
* @param params - MultiSig transaction parameters
* @param precomputed - Optional precomputed data
* @returns Base64-encoded serialized state
*/
static exportMultiSig(params: ITransactionParameters & {
pubkeys: Uint8Array[];
minimumSignatures: number;
receiver: string;
requestedAmount: bigint;
refundVault: string;
originalInputCount?: number;
existingPsbtBase64?: string;
}, precomputed?: Partial<PrecomputedData>): string;
/**
* Export a CustomScriptTransaction for offline signing
* @param params - Custom script transaction parameters
* @param precomputed - Optional precomputed data
* @returns Base64-encoded serialized state
*/
static exportCustomScript(params: ITransactionParameters & {
scriptElements: (Uint8Array | number)[];
witnesses: Uint8Array[];
annex?: Uint8Array;
}, precomputed?: Partial<PrecomputedData>): string;
/**
* Export a CancelTransaction for offline signing
* @param params - Cancel transaction parameters
* @param precomputed - Optional precomputed data
* @returns Base64-encoded serialized state
*/
static exportCancel(params: ITransactionParameters & {
compiledTargetScript: Uint8Array | string;
}, precomputed?: Partial<PrecomputedData>): string;
/**
* Export transaction state from a builder instance.
* The builder must have been built but not yet signed.
* @param builder - Transaction builder instance
* @param params - Original construction parameters
* @param precomputed - Precomputed data from the builder
* @returns Base64-encoded serialized state
*/
static exportFromBuilder<T extends TransactionType>(builder: TransactionBuilder<T>, params: ITransactionParameters, precomputed?: Partial<PrecomputedData>): string;
/**
* Import and reconstruct transaction for signing
* @param serializedState - Base64-encoded state from Phase 1
* @param options - Signer(s) and optional fee overrides
* @returns Reconstructed transaction builder ready for signing
*/
static importForSigning(serializedState: string, options: ReconstructionOptions): TransactionBuilder<TransactionType>;
/**
* Complete signing and export signed transaction
* @param builder - Reconstructed builder from importForSigning
* @returns Signed transaction hex ready for broadcast
*/
static signAndExport(builder: TransactionBuilder<TransactionType>): Promise<string>;
/**
* Convenience: Full Phase 2 in one call - import, sign, and export
* @param serializedState - Base64-encoded state
* @param options - Signer(s) and optional fee overrides
* @returns Signed transaction hex ready for broadcast
*/
static importSignAndExport(serializedState: string, options: ReconstructionOptions): Promise<string>;
/**
* Rebuild transaction with new fee rate (fee bumping)
* @param serializedState - Original state
* @param newFeeRate - New fee rate in sat/vB
* @returns New serialized state with updated fees (not signed yet)
*/
static rebuildWithNewFees(serializedState: string, newFeeRate: number): string;
/**
* Rebuild and immediately sign with new fee rate
* @param serializedState - Original state
* @param newFeeRate - New fee rate in sat/vB
* @param options - Signer options
* @returns Signed transaction hex with new fees
*/
static rebuildSignAndExport(serializedState: string, newFeeRate: number, options: ReconstructionOptions): Promise<string>;
/**
* Inspect serialized state without signing
* @param serializedState - Base64-encoded state
* @returns Parsed state object for inspection
*/
static inspect(serializedState: string): ISerializableTransactionState;
/**
* Validate serialized state integrity
* @param serializedState - Base64-encoded state
* @returns True if checksum and format are valid
*/
static validate(serializedState: string): boolean;
/**
* Get transaction type from serialized state
* @param serializedState - Base64-encoded state
* @returns Transaction type enum value
*/
static getType(serializedState: string): TransactionType;
/**
* Parse base64-encoded state into state object
* @param base64State - Base64-encoded state
* @returns Parsed state object
*/
static fromBase64(base64State: string): ISerializableTransactionState;
/**
* Serialize state object to base64
* @param state - State object to serialize
* @returns Base64-encoded state
*/
static toBase64(state: ISerializableTransactionState): string;
/**
* Convert serialized state to hex format
* @param serializedState - Base64-encoded state
* @returns Hex-encoded state
*/
static toHex(serializedState: string): string;
/**
* Convert hex format back to base64
* @param hexState - Hex-encoded state
* @returns Base64-encoded state
*/
static fromHex(hexState: string): string;
/**
* Add a partial signature to a multisig transaction state.
* This method signs the transaction with the provided signer and returns
* updated state with the new signature included.
*
* @param serializedState - Base64-encoded multisig state
* @param signer - The signer to add a signature with
* @returns Updated state with new signature, and signing result
*/
static multiSigAddSignature(serializedState: string, signer: Signer | UniversalSigner): Promise<{
state: string;
signed: boolean;
final: boolean;
psbtBase64: string;
}>;
/**
* Check if a public key has already signed a multisig transaction
*
* @param serializedState - Base64-encoded multisig state
* @param signerPubKey - Public key to check (Uint8Array or hex string)
* @returns True if the public key has already signed
*/
static multiSigHasSigned(serializedState: string, signerPubKey: Uint8Array | string): boolean;
/**
* Get the current signature count for a multisig transaction
*
* @param serializedState - Base64-encoded multisig state
* @returns Object with signature count info
*/
static multiSigGetSignatureStatus(serializedState: string): {
required: number;
collected: number;
isComplete: boolean;
signers: string[];
};
/**
* Finalize a multisig transaction and extract the signed transaction hex.
* Only call this when all required signatures have been collected.
*
* @param serializedState - Base64-encoded multisig state with all signatures
* @returns Signed transaction hex ready for broadcast
*/
static multiSigFinalize(serializedState: string): string;
/**
* Get the PSBT from a multisig state (for external signing tools)
*
* @param serializedState - Base64-encoded multisig state
* @returns PSBT in base64 format, or null if not yet built
*/
static multiSigGetPsbt(serializedState: string): string | null;
/**
* Update the PSBT in a multisig state (after external signing)
*
* @param serializedState - Base64-encoded multisig state
* @param psbtBase64 - New PSBT with additional signatures
* @returns Updated state
*/
static multiSigUpdatePsbt(serializedState: string, psbtBase64: string): string;
}
//# sourceMappingURL=OfflineTransactionManager.d.ts.map