import { bigToBufLE } from '@node-dlc/bufio'; import { encodeVarInt } from '@node-dlc/bufio'; import { BufferReader } from '@node-dlc/bufio'; import { StreamReader } from '@node-dlc/bufio'; import { hash160, isDERSig, sha256, validPublicKey } from '@node-dlc/crypto'; import { BitcoinError } from './BitcoinError'; import { BitcoinErrorCode } from './BitcoinErrorCode'; import { ICloneable } from './ICloneable'; import { OpCode } from './OpCodes'; import { ScriptCmd } from './ScriptCmd'; import { isSigHashTypeValid } from './SigHashType'; import { Stack } from './Stack'; function asssertValidSig(sig: Buffer) { const der = sig.slice(0, sig.length - 1); const hashtype = sig[sig.length - 1]; if (!isDERSig(der)) { throw new BitcoinError(BitcoinErrorCode.SigEncodingInvalid); } if (!isSigHashTypeValid(hashtype)) { throw new BitcoinError(BitcoinErrorCode.SigHashTypeInvalid, hashtype); } } function assertValidPubKey(pubkey: Buffer) { if (!validPublicKey(pubkey)) { throw new BitcoinError(BitcoinErrorCode.PubKeyInvalid); } } /** * Bitcoin Script */ export class Script implements ICloneable