# 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[][];
    }