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 | 1x 1x 1x 1x 1x | import { BufferWriter, StreamReader } from '@node-dlc/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;
}
/**
* Creates a string of the transaction input that includes all of the
* properties.
*/
public toString(): string {
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.
*/
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
public toJSON() {
return {
outpoint: this.outpoint.toJSON(),
scriptSig: this.scriptSig.toJSON(),
sequence: this.sequence.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()),
);
}
}
|