UNPKG

opnet

Version:

The perfect library for building Bitcoin-based applications.

855 lines (667 loc) 19.2 kB
# Types & Interfaces Reference Complete reference for TypeScript types and interfaces. ## Table of Contents - [Common Types](#common-types) - [Network](#network) - [Address](#address) - [Transaction Types](#transaction-types) - [Block Types](#block-types) - [Contract Types](#contract-types) - [Storage Types](#storage-types) - [Public Key Types](#public-key-types) - [UTXO Types](#utxo-types) - [Epoch Types](#epoch-types) - [Challenge Types](#challenge-types) - [ABI Types](#abi-types) - [ML-DSA Types](#ml-dsa-types) - [Mempool Types](#mempool-types) --- ## Common Types ### BigNumberish Accepts various numeric formats. ```typescript type BigNumberish = bigint | number | string; ``` ### BlockTag Block identifier options. ```typescript type BlockTag = BigNumberish | string; ``` ### PointerLike Storage pointer formats. ```typescript type PointerLike = bigint | string; ``` --- ## Network Bitcoin network configuration from `@btc-vision/bitcoin`. ```typescript import { networks } from '@btc-vision/bitcoin'; // Available networks networks.bitcoin // Mainnet networks.testnet // Testnet networks.regtest // Regtest ``` --- ## Address OPNet address class from `@btc-vision/transaction`. ```typescript import { Address } from '@btc-vision/transaction'; // Create from string const addr = Address.fromString('bc1p...'); // Create from Uint8Array const addr = new Address(publicKeyBytes); // Methods addr.toHex(); // Hex string addr.p2tr(network); // P2TR address addr.p2op(network); // P2OP address addr.toString(); // String representation ``` --- ## Transaction Types ### OPNetTransactionTypes Transaction type identifiers (string values, not numbers). ```typescript enum OPNetTransactionTypes { Generic = 'Generic', // Basic Bitcoin transaction Deployment = 'Deployment', // Contract deployment Interaction = 'Interaction', // Contract interaction } ``` ### TransactionInputFlags Flags for transaction inputs (bitmask values). ```typescript enum TransactionInputFlags { hasCoinbase = 0b00000001, // Input is from coinbase transaction hasWitness = 0b00000010, // Input has witness data (P2WPKH/P2WSH) } ``` ### TransactionOutputFlags Flags for transaction outputs (bitmask values). ```typescript enum TransactionOutputFlags { hasTo = 0b00000001, // Output has recipient address hasScriptPubKey = 0b00000010, // Output has scriptPubKey OP_RETURN = 0b00000100, // Output is OP_RETURN type } ``` --- ## Block Types ### Block ```typescript interface Block { height: bigint; hash: string; previousBlockHash: string; previousBlockChecksum: string; bits: string; nonce: number; version: number; size: number; weight: number; strippedSize: number; txCount: number; time: number; medianTime: number; checksumRoot: string; merkleRoot: string; storageRoot: string; receiptRoot: string; ema: bigint; baseGas: bigint; gasUsed: bigint; checksumProofs: BlockHeaderChecksumProof; transactions: TransactionBase[]; deployments: Address[]; rawTransactions: ITransaction[]; } ``` ### BlockGasParameters ```typescript interface BlockGasParameters { blockNumber: bigint; gasUsed: bigint; targetGasLimit: bigint; ema: bigint; baseGas: bigint; gasPerSat: bigint; bitcoin: BitcoinFees; } ``` ### BitcoinFees ```typescript interface BitcoinFees { conservative: number; recommended: { low: number; medium: number; high: number; }; } ``` ### BlockWitnesses Type alias for an array of block witnesses. ```typescript type BlockWitnesses = readonly IBlockWitness[]; ``` ### IBlockWitness ```typescript interface IBlockWitness { trusted: boolean; signature: Uint8Array; timestamp: number; proofs: readonly Uint8Array[]; identity?: Uint8Array; publicKey?: Address; } ``` ### ReorgInformation ```typescript interface ReorgInformation { fromBlock: bigint; toBlock: bigint; timestamp: number; } ``` --- ## Transaction Types ### ITransactionInput Interface for transaction inputs. ```typescript interface ITransactionInput { readonly originalTransactionId: string | undefined; readonly outputTransactionIndex: number | undefined; readonly scriptSignature: ScriptSig | undefined; readonly sequenceId: number; readonly transactionInWitness?: string[]; } ``` ### ITransactionOutput Interface for transaction outputs. ```typescript interface ITransactionOutput { readonly index: number; readonly scriptPubKey: { hex: string; addresses?: string[]; address?: string; }; readonly value: string; // Converted to bigint in TransactionOutput class } ``` ### ITransactionReceipt ```typescript interface ITransactionReceipt { readonly receipt?: string | Uint8Array; readonly receiptProofs?: string[]; readonly events?: RawContractEvents | ContractEvents; readonly revert?: string | Uint8Array; readonly gasUsed: string | bigint; readonly specialGasUsed: string | bigint; } ``` ### BroadcastedTransaction ```typescript interface BroadcastedTransaction { success: boolean; result?: string; error?: string; peers?: number; } ``` ### BroadcastedTransactionPackage Result of a package broadcast via [`sendRawTransactionPackage()`](./provider-api.md#sendrawtransactionpackage). ```typescript interface BroadcastedTransactionPackage { /** Whether the overall package broadcast succeeded. */ readonly success: boolean; /** Error message if the broadcast failed. */ readonly error?: string; /** Present when testMempoolAccept was used (sequential or single tx path). */ readonly testResults?: readonly TestMempoolAcceptResult[]; /** Present when submitPackage was used successfully. */ readonly packageResult?: PackageResult; /** Per-transaction results for sequential or single tx broadcasts. */ readonly sequentialResults?: readonly SequentialBroadcastTxResult[]; /** True when submitPackage failed and the node fell back to sequential broadcast. */ readonly fellBackToSequential?: boolean; } ``` ### SequentialBroadcastTxResult ```typescript interface SequentialBroadcastTxResult { readonly txid: string; readonly success: boolean; readonly error?: string; readonly peers?: number; } ``` ### TestMempoolAcceptResult ```typescript interface TestMempoolAcceptResult { readonly txid: string; readonly wtxid: string; readonly allowed?: boolean; readonly vsize?: number; readonly packageError?: string; readonly rejectReason?: string; readonly rejectDetails?: string; readonly fees?: TestMempoolAcceptFees; } ``` ### TestMempoolAcceptFees ```typescript interface TestMempoolAcceptFees { readonly base: number; readonly effectiveFeerate: number; readonly effectiveIncludes: readonly string[]; } ``` ### PackageResult ```typescript interface PackageResult { readonly packageMsg: string; readonly txResults: { readonly [wtxid: string]: PackageTxResult; }; readonly replacedTransactions?: readonly string[]; } ``` ### PackageTxResult ```typescript interface PackageTxResult { readonly txid: string; readonly otherWtxid?: string; readonly vsize?: number; readonly fees?: PackageTxFees; readonly error?: string; } ``` ### PackageTxFees ```typescript interface PackageTxFees { readonly base: number; readonly effectiveFeerate?: number; readonly effectiveIncludes?: readonly string[]; } ``` --- ## Contract Types ### ContractData ```typescript class ContractData { readonly contractAddress: string; readonly contractPublicKey: Address; readonly bytecode: Uint8Array; readonly wasCompressed: boolean; readonly deployedTransactionId: string; readonly deployedTransactionHash: string; readonly deployerPubKey: Uint8Array; readonly deployerHashedPublicKey: Uint8Array; readonly contractSeed: Uint8Array; readonly contractSaltHash: Uint8Array; readonly deployerAddress: Address; } ``` ### ContractEvents ```typescript interface ContractEvents { [address: string]: NetEvent[]; } ``` ### IAccessList Access list for optimized contract calls. Maps contract addresses to storage slots. ```typescript interface IAccessListItem { [key: string]: string; } interface IAccessList { [key: string]: IAccessListItem; } ``` --- ## Storage Types ### IStorageValue ```typescript interface IStorageValue { readonly pointer: PointerLike; // bigint | string readonly value: string | Uint8Array; readonly height: BigNumberish; // bigint | number | string readonly proofs?: string[]; // Optional } ``` --- ## Public Key Types ### PublicKeyInfo ```typescript interface PublicKeyInfo { originalPubKey?: string; tweakedPubkey?: string; p2tr?: string; p2op?: string; lowByte?: number; p2pkh?: string; p2pkhUncompressed?: string; p2pkhHybrid?: string; p2shp2wpkh?: string; p2wpkh?: string; mldsaHashedPublicKey?: string; mldsaLevel?: MLDSASecurityLevel; mldsaPublicKey?: string | null; } ``` ### AddressTypes Exported from `@btc-vision/transaction`. ```typescript enum AddressTypes { P2PKH = 'P2PKH', // Legacy (1...) P2OP = 'P2OP', // OPNet contract address P2SH_OR_P2SH_P2WPKH = 'P2SH_OR_P2SH-P2WPKH', // Script hash (3...) P2PK = 'P2PK', // Public key P2TR = 'P2TR', // Taproot (bc1p...) P2MR = 'P2MR', // Pay-to-Merkle-Root / BIP 360 (bc1z...) P2WPKH = 'P2WPKH', // SegWit (bc1q...) // P2WDA = 'P2WDA', // UNUSED - internal only P2WSH = 'P2WSH', // SegWit script hash } ``` ### AddressesInfo ```typescript interface AddressesInfo { [key: string]: Address; } ``` --- ## UTXO Types ### UTXO ```typescript interface IUTXO { readonly transactionId: string; readonly outputIndex: number; readonly value: bigint | string; readonly scriptPubKey: ScriptPubKey; readonly raw: string; } ``` ### RequestUTXOsParams ```typescript interface RequestUTXOsParams { readonly address: string; readonly optimize?: boolean; readonly mergePendingUTXOs?: boolean; readonly filterSpentUTXOs?: boolean; readonly olderThan?: bigint; readonly isCSV?: boolean; } ``` ### RequestUTXOsParamsWithAmount ```typescript interface RequestUTXOsParamsWithAmount extends RequestUTXOsParams { readonly amount: bigint; readonly throwErrors?: boolean; readonly csvAddress?: string; readonly maxUTXOs?: number; readonly throwIfUTXOsLimitReached?: boolean; } ``` --- ## Epoch Types ### IEpoch ```typescript interface IEpoch { readonly epochNumber: bigint; readonly epochHash: Uint8Array; readonly epochRoot: Uint8Array; readonly startBlock: bigint; readonly endBlock: bigint; readonly difficultyScaled: bigint; readonly minDifficulty?: string; readonly targetHash: Uint8Array; readonly proposer: IEpochMiner; readonly proofs: readonly Uint8Array[]; } ``` ### IEpochMiner ```typescript interface IEpochMiner { readonly solution: Uint8Array; readonly publicKey: Address; readonly salt: Uint8Array; readonly graffiti?: Uint8Array; } ``` ### IEpochTemplate ```typescript interface IEpochTemplate { readonly epochNumber: bigint; readonly epochTarget: Uint8Array; } ``` ### EpochSubmissionParams Parameters for submitting an epoch solution. ```typescript interface EpochSubmissionParams { readonly epochNumber: bigint; readonly checksumRoot: Uint8Array; readonly salt: Uint8Array; readonly mldsaPublicKey: Uint8Array; readonly signature: Uint8Array; readonly graffiti?: Uint8Array; } ``` ### IEpochSubmission ```typescript interface IEpochSubmission { readonly submissionTxId: Uint8Array; readonly submissionTxHash: Uint8Array; readonly submissionHash: Uint8Array; readonly confirmedAt: string; readonly epochProposed: IEpochMiner; } ``` ### ISubmittedEpoch ```typescript interface ISubmittedEpoch { readonly epochNumber: bigint; readonly submissionHash: Uint8Array; readonly difficulty: number; readonly timestamp: Date; readonly status: SubmissionStatus; readonly message?: string; } ``` ### SubmissionStatus ```typescript enum SubmissionStatus { ACCEPTED = 'accepted', REJECTED = 'rejected', } ``` --- ## Challenge Types ### ChallengeSolution Exported from `@btc-vision/transaction`. ```typescript interface ChallengeSolution { preimage: Uint8Array; reward: bigint; difficulty?: bigint; version?: number; } ``` --- ## ABI Types ### ABIDataTypes Exported from `@btc-vision/transaction`. ```typescript enum ABIDataTypes { UINT8, UINT16, UINT32, UINT64, UINT128, UINT256, INT8, INT16, INT32, INT64, INT128, BOOL, ADDRESS, EXTENDED_ADDRESS, STRING, BYTES4, BYTES32, BYTES, ADDRESS_UINT256_TUPLE, EXTENDED_ADDRESS_UINT256_TUPLE, SCHNORR_SIGNATURE, ARRAY_OF_ADDRESSES, ARRAY_OF_EXTENDED_ADDRESSES, ARRAY_OF_UINT256, ARRAY_OF_UINT128, ARRAY_OF_UINT64, ARRAY_OF_UINT32, ARRAY_OF_UINT16, ARRAY_OF_UINT8, ARRAY_OF_STRING, ARRAY_OF_BYTES, ARRAY_OF_BUFFERS, } ``` ### BitcoinAbiTypes ```typescript enum BitcoinAbiTypes { Function = 'function', Event = 'event', } ``` ### BitcoinAbiValue ```typescript interface BitcoinAbiValue { name: string; type: ABIDataTypes; } ``` ### FunctionBaseData ```typescript interface FunctionBaseData { readonly name: string; readonly type: BitcoinAbiTypes.Function; readonly constant?: boolean; // true for read-only (view) functions readonly payable?: boolean; // true for functions requiring payment readonly inputs?: BitcoinAbiValue[]; readonly outputs?: BitcoinAbiValue[]; } ``` ### BitcoinInterfaceAbi ```typescript type BitcoinInterfaceAbi = (FunctionBaseData | EventBaseData)[]; ``` --- ## ML-DSA Types ### MLDSASecurityLevel Exported from `@btc-vision/transaction`. ```typescript enum MLDSASecurityLevel { ML_DSA_44 = 44, ML_DSA_65 = 65, ML_DSA_87 = 87, } ``` --- ## Mempool Types ### MempoolInfo Aggregate statistics returned by [`getMempoolInfo()`](./provider-api.md#getmempoolinfo). ```typescript interface MempoolInfo { /** Total number of pending transactions in the mempool. */ readonly count: number; /** Number of pending OPNet-specific transactions in the mempool. */ readonly opnetCount: number; /** Total byte size of the mempool. */ readonly size: number; } ``` ### MempoolTransactionData Full representation of a pending mempool transaction returned by [`getPendingTransaction()`](./provider-api.md#getpendingtransaction) and [`getLatestPendingTransactions()`](./provider-api.md#getlatestpendingtransactions). ```typescript interface MempoolTransactionData { /** Internal transaction identifier (txid). */ readonly id: string; /** ISO-8601 timestamp of when the transaction was first seen (e.g. `"2025-02-19T15:30:45.123Z"`). */ readonly firstSeen: string; /** Block height at which the transaction was observed, as a `0x`-prefixed hex string. */ readonly blockHeight: string; /** The OPNet transaction type (`Generic`, `Interaction`, or `Deployment`). */ readonly transactionType: OPNetTransactionTypes | string; /** Whether the transaction was submitted as a PSBT. */ readonly psbt: boolean; /** The transaction inputs. */ readonly inputs: MempoolTransactionInput[]; /** The transaction outputs. */ readonly outputs: MempoolTransactionOutput[]; /** The full raw transaction as a hex string. */ readonly raw: string; // OPNet-specific fields (present only for non-Generic transactions) /** Theoretical gas limit for OPNet execution (`0x`-prefixed hex). */ readonly theoreticalGasLimit?: string; /** Priority fee attached to the transaction (`0x`-prefixed hex). */ readonly priorityFee?: string; /** The sender address (p2tr format). */ readonly from?: string; /** The target contract address (p2op format). */ readonly contractAddress?: string; /** Hex-encoded calldata. */ readonly calldata?: string; /** Hex-encoded bytecode (deployment transactions only). */ readonly bytecode?: string; } ``` #### Type-Agnostic Narrowing For OPNet transactions, use the narrower interfaces to get required typings for OPNet-specific fields: ```typescript /** OPNet transaction all OPNet fields are required. */ interface MempoolOPNetTransactionData extends MempoolTransactionData { ... } /** Smart contract interaction. */ interface MempoolInteractionTransactionData extends MempoolOPNetTransactionData {} /** Smart contract deployment (adds required `bytecode`). */ interface MempoolDeploymentTransactionData extends MempoolOPNetTransactionData { readonly bytecode: string; } /** Union of all possible shapes. */ type AnyMempoolTransactionData = | MempoolTransactionData | MempoolInteractionTransactionData | MempoolDeploymentTransactionData; ``` ### MempoolTransactionInput A single transaction input as reported by the mempool API. ```typescript interface MempoolTransactionInput { /** The txid of the UTXO being spent. */ readonly transactionId: string; /** The vout index of the UTXO being spent. */ readonly outputIndex: number; } ``` ### MempoolTransactionOutput A single transaction output as reported by the mempool API. ```typescript interface MempoolTransactionOutput { /** The destination address, or `null` for unspendable outputs (e.g. OP_RETURN). */ readonly address: string | null; /** The vout index within the transaction. */ readonly outputIndex: number; /** The output value in satoshis (decimal string). */ readonly value: string; /** The hex-encoded scriptPubKey. */ readonly scriptPubKey: string; } ``` --- ## Bitcoin Utility Types ### isP2MRAddress Detect whether an address is a Pay-to-Merkle-Root (BIP 360) address. ```typescript import { isP2MRAddress } from 'opnet'; import { networks } from '@btc-vision/bitcoin'; const result: boolean = isP2MRAddress('bc1z...', networks.bitcoin); ``` ### Script Constants Re-exported from `@btc-vision/transaction`. ```typescript import { P2MR_MS, P2TR_MS } from 'opnet'; ``` | Constant | Description | |----------|-------------| | `P2MR_MS` | Magic byte for P2MR (BIP 360) script outputs | | `P2TR_MS` | Magic byte for P2TR (Taproot) script outputs | --- ## Next Steps - [Provider API](./provider-api.md) - Provider methods - [Contract API](./contract-api.md) - Contract class - [ABI Overview](../abi-reference/abi-overview.md) - ABI system --- [ Previous: Epoch API](./epoch-api.md) | [Home: Documentation ](../README.md)