All files / lib/messages FundingSignaturesV0.ts

100% Statements 36/36
100% Branches 0/0
100% Functions 6/6
100% Lines 33/33

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 891x   1x   1x           1x 1x             26x 26x   26x 26x 26x   26x 26x 26x 26x 52x 52x   26x     26x           26x       26x           2x     4x                 15x 15x   15x   15x   15x 15x 15x 30x       15x 15x   15x                
import { BufferReader, BufferWriter } from '@node-dlc/bufio';
 
import { MessageType } from '../MessageType';
import { IDlcMessage } from './DlcMessage';
import { IScriptWitnessV0JSON, ScriptWitnessV0 } from './ScriptWitnessV0';
 
/**
 * FundingSignatures V0 contains signatures of the funding transaction
 * and any necessary information linking the signatures to their inputs.
 */
export class FundingSignaturesV0 implements IDlcMessage {
  public static type = MessageType.FundingSignaturesV0;
 
  /**
   * Deserializes an funding_signatures_v0 message
   * @param buf
   */
  public static deserialize(buf: Buffer): FundingSignaturesV0 {
    const instance = new FundingSignaturesV0();
    const reader = new BufferReader(buf);
 
    reader.readBigSize(); // read type
    instance.length = reader.readBigSize();
    const numWitnesses = reader.readUInt16BE();
 
    for (let i = 0; i < numWitnesses; i++) {
      const numWitnessElements = reader.readUInt16BE();
      const witnessElements: ScriptWitnessV0[] = [];
      for (let j = 0; j < numWitnessElements; j++) {
        const witness = ScriptWitnessV0.getWitness(reader);
        witnessElements.push(ScriptWitnessV0.deserialize(witness));
      }
      instance.witnessElements.push(witnessElements);
    }
 
    return instance;
  }
 
  /**
   * The type for funding_signatures_v0 message. funding_signatures_v0 = 42776
   */
  public type = FundingSignaturesV0.type;
 
  public length: bigint;
 
  public witnessElements: ScriptWitnessV0[][] = [];
 
  /**
   * Converts funding_signatures_v0 to JSON
   */
  public toJSON(): IFundingSignaturesV0JSON {
    return {
      type: this.type,
      witnessElements: this.witnessElements.map((witnessElement) => {
        return witnessElement.map((witness) => witness.toJSON());
      }),
    };
  }
 
  /**
   * Serializes the funding_signatures_v0 message into a Buffer
   */
  public serialize(): Buffer {
    const writer = new BufferWriter();
    writer.writeBigSize(this.type);
 
    const dataWriter = new BufferWriter();
 
    dataWriter.writeUInt16BE(this.witnessElements.length);
 
    for (const witnessElements of this.witnessElements) {
      dataWriter.writeUInt16BE(witnessElements.length);
      for (const witnessElement of witnessElements) {
        dataWriter.writeBytes(witnessElement.serialize());
      }
    }
 
    writer.writeBigSize(dataWriter.size);
    writer.writeBytes(dataWriter.toBuffer());
 
    return writer.toBuffer();
  }
}
 
export interface IFundingSignaturesV0JSON {
  type: number;
  witnessElements: IScriptWitnessV0JSON[][];
}