import { Block, Transaction } from "./electrs.interface"; export interface OptimizedMempoolStats { added: number; vbytes_per_second: number; total_fee: number; mempool_byte_weight: number; vsizes: number[]; } interface Ancestor { txid: string; weight: number; fee: number; } interface BestDescendant { txid: string; weight: number; fee: number; } export interface CpfpInfo { ancestors: Ancestor[]; descendants?: Ancestor[]; bestDescendant?: BestDescendant | null; effectiveFeePerVsize?: number; sigops?: number; adjustedVsize?: number; acceleration?: number; } export interface RbfInfo { tx: RbfTransaction; time: number; interval?: number; } export interface RbfTree extends RbfInfo { mined?: boolean; fullRbf: boolean; replaces: RbfTree[]; replacedBy?: RbfTransaction; } export interface DifficultyAdjustment { progressPercent: number; difficultyChange: number; estimatedRetargetDate: number; remainingBlocks: number; remainingTime: number; previousRetarget: number; previousTime: number; nextRetargetHeight: number; timeAvg: number; timeOffset: number; expectedBlocks: number; } export interface AddressInformation { isvalid: boolean; // (boolean) If the address is valid or not. If not, this is the only property returned. isvalid_parent?: boolean; // (boolean) Elements only address: string; // (string) The bitcoin address validated scriptPubKey: string; // (string) The hex-encoded scriptPubKey generated by the address isscript: boolean; // (boolean) If the key is a script iswitness: boolean; // (boolean) If the address is a witness witness_version?: number; // (numeric, optional) The version number of the witness program witness_program: string; // (string, optional) The hex value of the witness program confidential_key?: string; // (string) Elements only unconfidential?: string; // (string) Elements only } export interface LiquidPegs { amount: string; date: string; } export interface ITranslators { [language: string]: string; } /** * PoolRanking component */ export interface SinglePoolStats { poolId: number; name: string; link: string; blockCount: number; emptyBlocks: number; rank: number; share: number; lastEstimatedHashrate: string; emptyBlockRatio: string; logo: string; slug: string; avgMatchRate: number; avgFeeDelta: number; } export interface PoolsStats { blockCount: number; lastEstimatedHashrate: number; pools: SinglePoolStats[]; } /** * Pool component */ export interface PoolInfo { id: number | null; // mysql row id name: string; link: string; regexes: string; // JSON array addresses: string; // JSON array emptyBlocks: number; slug: string; poolUniqueId: number; } export interface PoolStat { pool: PoolInfo; blockCount: { all: number, '24h': number, '1w': number, }; blockShare: { all: number, '24h': number, '1w': number, }; estimatedHashrate: number; avgBlockHealth: number; totalReward: number; } export interface BlockExtension { totalFees?: number; medianFee?: number; minFee?: number; maxFee?: number; feeRange?: number[]; reward?: number; coinbaseRaw?: string; matchRate?: number; expectedFees?: number; expectedWeight?: number; feeDelta?: number; similarity?: number; pool?: { id: number; name: string; slug: string; } } export interface BlockExtended extends Block { extras?: BlockExtension; } export interface BlockAudit extends BlockExtended { missingTxs: string[], addedTxs: string[], freshTxs: string[], sigopTxs: string[], fullrbfTxs: string[], acceleratedTxs: string[], matchRate: number, expectedFees: number, expectedWeight: number, feeDelta?: number, weightDelta?: number, txDelta?: number, template: TransactionStripped[], transactions: TransactionStripped[], } export interface TransactionStripped { txid: string; fee: number; vsize: number; value: number; rate?: number; // effective fee rate acc?: boolean; status?: 'found' | 'missing' | 'sigop' | 'fresh' | 'freshcpfp' | 'added' | 'censored' | 'selected' | 'rbf' | 'accelerated'; context?: 'projected' | 'actual'; } export interface RbfTransaction extends TransactionStripped { rbf?: boolean; mined?: boolean, fullRbf?: boolean, } export interface MempoolPosition { block: number, vsize: number, accelerated?: boolean } export interface RewardStats { startBlock: number; endBlock: number; totalReward: number; totalFee: number; totalTx: number; } export interface BlockSizesAndWeights { sizes: { timestamp: number; avgHeight: number; avgSize: number; }[]; weights: { timestamp: number; avgHeight: number; avgWeight: number; }[]; } export interface AuditScore { hash: string; matchRate?: number; } export interface ITopNodesPerChannels { publicKey: string, alias: string, channels?: number, capacity: number, firstSeen?: number, updatedAt?: number, city?: any, country?: any, subdivision?: any, iso_code?: string, geolocation?: any; } export interface ITopNodesPerCapacity { publicKey: string, alias: string, capacity: number, channels?: number, firstSeen?: number, updatedAt?: number, city?: any, country?: any, subdivision?: any, iso_code?: string, geolocation?: any; } export interface INodesRanking { topByCapacity: ITopNodesPerCapacity[]; topByChannels: ITopNodesPerChannels[]; } export interface IOldestNodes { publicKey: string, alias: string, firstSeen: number, channels?: number, capacity: number, updatedAt?: number, city?: any, country?: any, subdivision?: any, iso_code?: string, geolocation?: any; } export interface IChannel { id: number; short_id: string; capacity: number; transaction_id: string; transaction_vout: number; closing_transaction_id: string; closing_reason: string; updated_at: string; closing_date?: string; created: string; status: number; node_left: INode, node_right: INode, } export interface INode { alias: string; public_key: string; channels: number; capacity: number; base_fee_mtokens: number; cltv_delta: number; fee_rate: number; is_disabled: boolean; max_htlc_mtokens: number; min_htlc_mtokens: number; updated_at: string; longitude: number; latitude: number; funding_balance?: number; closing_balance?: number; }