UNPKG

@node-lightning/wire

Version:
117 lines 5.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OpenChannelMessage = void 0; const bufio_1 = require("@node-lightning/bufio"); const core_1 = require("@node-lightning/core"); const OpenChannelFlags_1 = require("../flags/OpenChannelFlags"); const MessageType_1 = require("../MessageType"); const readTlvs_1 = require("../serialize/readTlvs"); /** * OpenChannelMessage represents the open_channel message defined in * BOLT #2 of the Lightning Specification. This message is used to * initiate a channel with a connected peer. The channel initiator acts * as the funding node for the channel and specifies the amount and * parameters to be used in the channel. The remote peer can accept the * channel using the accept_channel message. */ class OpenChannelMessage { /** * Constructs a new OpenChannelMessage instance */ constructor() { /** * The type for open_channel message. open_channel = 32 */ this.type = OpenChannelMessage.type; this.channelFlags = new core_1.BitField(); } /** * Deserializes an open_channel message * @param buf */ static deserialize(buf) { const instance = new OpenChannelMessage(); const reader = new bufio_1.BufferReader(buf); reader.readUInt16BE(); // read type instance.chainHash = reader.readBytes(32); instance.temporaryChannelId = reader.readBytes(32); instance.fundingSatoshis = core_1.Value.fromSats(reader.readUInt64BE()); instance.pushMsat = core_1.Value.fromMilliSats(reader.readUInt64BE()); instance.dustLimitSatoshis = core_1.Value.fromSats(reader.readUInt64BE()); instance.maxHtlcValueInFlightMsat = core_1.Value.fromMilliSats(reader.readUInt64BE()); instance.channelReserveSatoshis = core_1.Value.fromSats(reader.readUInt64BE()); instance.htlcMinimumMsat = core_1.Value.fromMilliSats(reader.readUInt64BE()); instance.feeRatePerKw = core_1.Value.fromSats(reader.readUInt32BE()); instance.toSelfDelay = reader.readUInt16BE(); instance.maxAcceptedHtlcs = reader.readUInt16BE(); instance.fundingPubKey = reader.readBytes(33); instance.revocationBasePoint = reader.readBytes(33); instance.paymentBasePoint = reader.readBytes(33); instance.delayedPaymentBasePoint = reader.readBytes(33); instance.htlcBasePoint = reader.readBytes(33); instance.firstPerCommitmentPoint = reader.readBytes(33); instance.channelFlags = new core_1.BitField(BigInt(reader.readUInt8())); // Parse the TLVs readTlvs_1.readTlvs(reader, (type, valueReader) => { switch (type) { case BigInt(0): { instance.upfrontShutdownScript = valueReader.readBytes(); return true; } default: return false; } }); return instance; } /** * Gets or sets whether the channel will be publicly announced once * the channel becomes live. */ get announceChannel() { return this.channelFlags.isSet(OpenChannelFlags_1.OpenChannelFlags.AnnounceChannel); } set announceChannel(val) { if (val) { this.channelFlags.set(OpenChannelFlags_1.OpenChannelFlags.AnnounceChannel); } else { this.channelFlags.unset(OpenChannelFlags_1.OpenChannelFlags.AnnounceChannel); } } /** * Serializes the open_channel message into a Buffer */ serialize() { const writer = new bufio_1.BufferWriter(); writer.writeUInt16BE(this.type); writer.writeBytes(this.chainHash); writer.writeBytes(this.temporaryChannelId); writer.writeUInt64BE(this.fundingSatoshis.sats); writer.writeUInt64BE(this.pushMsat.msats); writer.writeUInt64BE(this.dustLimitSatoshis.sats); writer.writeUInt64BE(this.maxHtlcValueInFlightMsat.msats); writer.writeUInt64BE(this.channelReserveSatoshis.sats); writer.writeUInt64BE(this.htlcMinimumMsat.msats); writer.writeUInt32BE(Number(this.feeRatePerKw.sats)); writer.writeUInt16BE(this.toSelfDelay); writer.writeUInt16BE(this.maxAcceptedHtlcs); writer.writeBytes(this.fundingPubKey); writer.writeBytes(this.revocationBasePoint); writer.writeBytes(this.paymentBasePoint); writer.writeBytes(this.delayedPaymentBasePoint); writer.writeBytes(this.htlcBasePoint); writer.writeBytes(this.firstPerCommitmentPoint); writer.writeUInt8(this.announceChannel ? 0x01 : 0x00); // upfront_shutdown_script TLV if (this.upfrontShutdownScript) { writer.writeBigSize(0); writer.writeBigSize(this.upfrontShutdownScript.length); writer.writeBytes(this.upfrontShutdownScript); } return writer.toBuffer(); } } exports.OpenChannelMessage = OpenChannelMessage; OpenChannelMessage.type = MessageType_1.MessageType.OpenChannel; //# sourceMappingURL=OpenChannelMessage.js.map