UNPKG

opnet

Version:

The perfect library for building Bitcoin-based applications.

50 lines (44 loc) 1.8 kB
import { Address } from '@btc-vision/transaction'; import { stringToBuffer } from '../utils/StringToBuffer.js'; import { BlockWitnesses, IBlockWitness, IBlockWitnessAPI, RawBlockWitnessAPI, } from './interfaces/IBlockWitness.js'; export class BlockWitnessAPI implements IBlockWitnessAPI { public readonly trusted: boolean; public readonly signature: Buffer; public readonly timestamp: number; public readonly proofs: readonly Buffer[]; public readonly identity?: Buffer; public readonly publicKey?: Address; constructor(data: RawBlockWitnessAPI) { this.trusted = data.trusted; this.signature = stringToBuffer(data.signature); this.timestamp = data.timestamp; this.proofs = Object.freeze(data.proofs.map((proof) => stringToBuffer(proof))); this.identity = data.identity ? stringToBuffer(data.identity) : undefined; this.publicKey = data.publicKey ? Address.fromString(data.publicKey) : undefined; } } export class BlockWitness implements IBlockWitness { public blockNumber: bigint; public readonly witnesses: readonly BlockWitnessAPI[]; constructor(data: { blockNumber: string | bigint; witnesses: RawBlockWitnessAPI[] }) { this.blockNumber = typeof data.blockNumber === 'string' ? BigInt(data.blockNumber) : data.blockNumber; this.witnesses = Object.freeze( data.witnesses.map((witness) => new BlockWitnessAPI(witness)), ); } } // Helper function to convert raw block witnesses array export function parseBlockWitnesses( rawWitnesses: Array<{ blockNumber: string; witnesses: RawBlockWitnessAPI[]; }>, ): BlockWitnesses { return Object.freeze(rawWitnesses.map((rawWitness) => new BlockWitness(rawWitness))); }