opnet
Version:
The perfect library for building Bitcoin-based applications.
50 lines (44 loc) • 1.8 kB
text/typescript
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)));
}