Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | 1x 1x 1x 1x 1x 1x 7x 7x 7x 7x 6x 6x 131x 131x 131x 131x 18x 1x 1x 77x 77x 77x 77x 77x 42x 19x | import { BufferWriter, StreamReader } from "@node-lightning/bufio"; import { ICloneable } from "./ICloneable"; import { OutPoint } from "./OutPoint"; import { Script } from "./Script"; import { Sequence } from "./Sequence"; import { Witness } from "./Witness"; export class TxIn implements ICloneable<TxIn> { /** * Parses a TxIn from a a stream reader. * @param stream */ public static parse(reader: StreamReader): TxIn { const outpoint = OutPoint.parse(reader); const scriptSig = Script.parse(reader); const sequence = new Sequence(reader.readUInt32LE()); return new TxIn(outpoint, scriptSig, sequence); } /** * Parses a hex string serialization of a transaction input. This * is a helper function instead of having to do `StreamReader.fromHex` * on a string directly. * @param hex */ public static fromHex(hex: string): TxIn { const reader = StreamReader.fromHex(hex); return this.parse(reader); } /** * The previous transaction output tuple */ public outpoint: OutPoint; /** * ScriptSig for the input */ public scriptSig: Script; /** * nSequence value for the transaction. Defaults to 0xffffffff which * disables the absolute timelock. */ public sequence: Sequence; /** * Witness data that is required by the input */ public witness: Witness[]; /** * Constructs a new transaction input from the values * @param outpoint * @param scriptSig * @param sequence * @param witness */ constructor( outpoint: OutPoint, scriptSig: Script = new Script(), sequence: Sequence = new Sequence(), witness: Witness[] = [], ) { this.outpoint = outpoint; this.scriptSig = scriptSig; this.sequence = sequence; this.witness = witness; } /** * Adds witness to the input's witness colletion * @param witness */ public addWitness(witness: Buffer | Witness) { this.witness.push(Buffer.isBuffer(witness) ? new Witness(witness) : witness); } /** * Creates a string of the transaction input that includes all of the * properties. */ public toString() { return `prev=${this.outpoint.toString()}, scriptSig=${this.scriptSig.toString()}, sequence=${this.sequence.toString()}`; // prettier-ignore } /** * Creates a JSON object of the transaction input that includes all * of the properties. */ public toJSON() { return { outpoint: this.outpoint.toJSON(), scriptSig: this.scriptSig.toJSON(), sequence: this.sequence.toJSON(), witness: this.witness.map(witness => witness.toJSON()), }; } /** * Returns the byte serialization of the transaction input */ public serialize(): Buffer { const writer = new BufferWriter(); writer.writeBytes(this.outpoint.serialize()); writer.writeBytes(this.scriptSig.serialize()); writer.writeBytes(this.sequence.serialize()); return writer.toBuffer(); } /** * Clone via deep copy */ public clone(): TxIn { return new TxIn( this.outpoint.clone(), this.scriptSig.clone(), this.sequence.clone(), this.witness.map(p => p.clone()), ); } } |