diff --git a/accounts/service.go b/accounts/service.go index 102b9ea84..43c2aa38f 100644 --- a/accounts/service.go +++ b/accounts/service.go @@ -10,12 +10,12 @@ import ( "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/lightninglabs/lndclient" - "github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/fn" invpkg "github.com/lightningnetwork/lnd/invoices" "github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lnwire" + paymentsdb "github.com/lightningnetwork/lnd/payments/db" ) // Config holds the configuration options for the accounts service. @@ -739,7 +739,7 @@ func (s *InterceptorService) TrackPayment(ctx context.Context, id AccountID, // startup, to make sure we don't miss any // payments. if errors.Is( - err, channeldb.ErrPaymentNotInitiated, + err, paymentsdb.ErrPaymentNotInitiated, ) { log.Debugf("Payment %v not initiated, "+ diff --git a/accounts/service_test.go b/accounts/service_test.go index 1d4388664..0652a6641 100644 --- a/accounts/service_test.go +++ b/accounts/service_test.go @@ -7,12 +7,12 @@ import ( "time" "github.com/lightninglabs/lndclient" - "github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/clock" invpkg "github.com/lightningnetwork/lnd/invoices" "github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lnrpc/routerrpc" "github.com/lightningnetwork/lnd/lntypes" + paymentsdb "github.com/lightningnetwork/lnd/payments/db" "github.com/stretchr/testify/require" ) @@ -585,7 +585,7 @@ func TestAccountService(t *testing.T) { require.ErrorIs(t, err, ErrAccBalanceInsufficient) // Now signal that the payment was non-initiated. - r.paymentErrChan <- channeldb.ErrPaymentNotInitiated + r.paymentErrChan <- paymentsdb.ErrPaymentNotInitiated // Once the error is handled in the service.TrackPayment // goroutine, and therefore free up the 2000 in-flight diff --git a/app/src/types/generated/lnd_pb.d.ts b/app/src/types/generated/lnd_pb.d.ts index d57424a6f..89be1c3ad 100644 --- a/app/src/types/generated/lnd_pb.d.ts +++ b/app/src/types/generated/lnd_pb.d.ts @@ -2341,36 +2341,6 @@ export namespace Chain { } } -export class ConfirmationUpdate extends jspb.Message { - getBlockSha(): Uint8Array | string; - getBlockSha_asU8(): Uint8Array; - getBlockSha_asB64(): string; - setBlockSha(value: Uint8Array | string): void; - - getBlockHeight(): number; - setBlockHeight(value: number): void; - - getNumConfsLeft(): number; - setNumConfsLeft(value: number): void; - - serializeBinary(): Uint8Array; - toObject(includeInstance?: boolean): ConfirmationUpdate.AsObject; - static toObject(includeInstance: boolean, msg: ConfirmationUpdate): ConfirmationUpdate.AsObject; - static extensions: {[key: number]: jspb.ExtensionFieldInfo}; - static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; - static serializeBinaryToWriter(message: ConfirmationUpdate, writer: jspb.BinaryWriter): void; - static deserializeBinary(bytes: Uint8Array): ConfirmationUpdate; - static deserializeBinaryFromReader(message: ConfirmationUpdate, reader: jspb.BinaryReader): ConfirmationUpdate; -} - -export namespace ConfirmationUpdate { - export type AsObject = { - blockSha: Uint8Array | string, - blockHeight: number, - numConfsLeft: number, - } -} - export class ChannelOpenUpdate extends jspb.Message { hasChannelPoint(): boolean; clearChannelPoint(): void; @@ -3518,6 +3488,12 @@ export namespace PendingChannelsResponse { getFundingExpiryBlocks(): number; setFundingExpiryBlocks(value: number): void; + getConfirmationsUntilActive(): number; + setConfirmationsUntilActive(value: number): void; + + getConfirmationHeight(): number; + setConfirmationHeight(value: number): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): PendingOpenChannel.AsObject; static toObject(includeInstance: boolean, msg: PendingOpenChannel): PendingOpenChannel.AsObject; @@ -3535,6 +3511,8 @@ export namespace PendingChannelsResponse { commitWeight: string, feePerKw: string, fundingExpiryBlocks: number, + confirmationsUntilActive: number, + confirmationHeight: number, } } @@ -4072,6 +4050,11 @@ export class QueryRoutesRequest extends jspb.Message { getTimePref(): number; setTimePref(value: number): void; + clearOutgoingChanIdsList(): void; + getOutgoingChanIdsList(): Array; + setOutgoingChanIdsList(value: Array): void; + addOutgoingChanIds(value: string, index?: number): string; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): QueryRoutesRequest.AsObject; static toObject(includeInstance: boolean, msg: QueryRoutesRequest): QueryRoutesRequest.AsObject; @@ -4102,6 +4085,7 @@ export namespace QueryRoutesRequest { blindedPaymentPathsList: Array, destFeaturesList: Array, timePref: number, + outgoingChanIdsList: Array, } } @@ -4389,6 +4373,9 @@ export class NodeInfoRequest extends jspb.Message { getIncludeChannels(): boolean; setIncludeChannels(value: boolean): void; + getIncludeAuthProof(): boolean; + setIncludeAuthProof(value: boolean): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): NodeInfoRequest.AsObject; static toObject(includeInstance: boolean, msg: NodeInfoRequest): NodeInfoRequest.AsObject; @@ -4403,6 +4390,7 @@ export namespace NodeInfoRequest { export type AsObject = { pubKey: string, includeChannels: boolean, + includeAuthProof: boolean, } } @@ -4565,6 +4553,46 @@ export namespace RoutingPolicy { } } +export class ChannelAuthProof extends jspb.Message { + getNodeSig1(): Uint8Array | string; + getNodeSig1_asU8(): Uint8Array; + getNodeSig1_asB64(): string; + setNodeSig1(value: Uint8Array | string): void; + + getBitcoinSig1(): Uint8Array | string; + getBitcoinSig1_asU8(): Uint8Array; + getBitcoinSig1_asB64(): string; + setBitcoinSig1(value: Uint8Array | string): void; + + getNodeSig2(): Uint8Array | string; + getNodeSig2_asU8(): Uint8Array; + getNodeSig2_asB64(): string; + setNodeSig2(value: Uint8Array | string): void; + + getBitcoinSig2(): Uint8Array | string; + getBitcoinSig2_asU8(): Uint8Array; + getBitcoinSig2_asB64(): string; + setBitcoinSig2(value: Uint8Array | string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ChannelAuthProof.AsObject; + static toObject(includeInstance: boolean, msg: ChannelAuthProof): ChannelAuthProof.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ChannelAuthProof, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ChannelAuthProof; + static deserializeBinaryFromReader(message: ChannelAuthProof, reader: jspb.BinaryReader): ChannelAuthProof; +} + +export namespace ChannelAuthProof { + export type AsObject = { + nodeSig1: Uint8Array | string, + bitcoinSig1: Uint8Array | string, + nodeSig2: Uint8Array | string, + bitcoinSig2: Uint8Array | string, + } +} + export class ChannelEdge extends jspb.Message { getChannelId(): string; setChannelId(value: string): void; @@ -4596,6 +4624,11 @@ export class ChannelEdge extends jspb.Message { getCustomRecordsMap(): jspb.Map; clearCustomRecordsMap(): void; + hasAuthProof(): boolean; + clearAuthProof(): void; + getAuthProof(): ChannelAuthProof | undefined; + setAuthProof(value?: ChannelAuthProof): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ChannelEdge.AsObject; static toObject(includeInstance: boolean, msg: ChannelEdge): ChannelEdge.AsObject; @@ -4617,6 +4650,7 @@ export namespace ChannelEdge { node1Policy?: RoutingPolicy.AsObject, node2Policy?: RoutingPolicy.AsObject, customRecordsMap: Array<[number, Uint8Array | string]>, + authProof?: ChannelAuthProof.AsObject, } } @@ -4624,6 +4658,9 @@ export class ChannelGraphRequest extends jspb.Message { getIncludeUnannounced(): boolean; setIncludeUnannounced(value: boolean): void; + getIncludeAuthProof(): boolean; + setIncludeAuthProof(value: boolean): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ChannelGraphRequest.AsObject; static toObject(includeInstance: boolean, msg: ChannelGraphRequest): ChannelGraphRequest.AsObject; @@ -4637,6 +4674,7 @@ export class ChannelGraphRequest extends jspb.Message { export namespace ChannelGraphRequest { export type AsObject = { includeUnannounced: boolean, + includeAuthProof: boolean, } } @@ -4740,6 +4778,9 @@ export class ChanInfoRequest extends jspb.Message { getChanPoint(): string; setChanPoint(value: string): void; + getIncludeAuthProof(): boolean; + setIncludeAuthProof(value: boolean): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ChanInfoRequest.AsObject; static toObject(includeInstance: boolean, msg: ChanInfoRequest): ChanInfoRequest.AsObject; @@ -4754,6 +4795,7 @@ export namespace ChanInfoRequest { export type AsObject = { chanId: string, chanPoint: string, + includeAuthProof: boolean, } } @@ -5444,6 +5486,11 @@ export class BlindedPathConfig extends jspb.Message { setNodeOmissionListList(value: Array): void; addNodeOmissionList(value: Uint8Array | string, index?: number): Uint8Array | string; + clearIncomingChannelListList(): void; + getIncomingChannelListList(): Array; + setIncomingChannelListList(value: Array): void; + addIncomingChannelList(value: string, index?: number): string; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): BlindedPathConfig.AsObject; static toObject(includeInstance: boolean, msg: BlindedPathConfig): BlindedPathConfig.AsObject; @@ -5460,6 +5507,7 @@ export namespace BlindedPathConfig { numHops: number, maxNumPaths: number, nodeOmissionListList: Array, + incomingChannelListList: Array, } } @@ -5730,6 +5778,46 @@ export namespace InvoiceSubscription { } } +export class DelCanceledInvoiceReq extends jspb.Message { + getInvoiceHash(): string; + setInvoiceHash(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DelCanceledInvoiceReq.AsObject; + static toObject(includeInstance: boolean, msg: DelCanceledInvoiceReq): DelCanceledInvoiceReq.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: DelCanceledInvoiceReq, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DelCanceledInvoiceReq; + static deserializeBinaryFromReader(message: DelCanceledInvoiceReq, reader: jspb.BinaryReader): DelCanceledInvoiceReq; +} + +export namespace DelCanceledInvoiceReq { + export type AsObject = { + invoiceHash: string, + } +} + +export class DelCanceledInvoiceResp extends jspb.Message { + getStatus(): string; + setStatus(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DelCanceledInvoiceResp.AsObject; + static toObject(includeInstance: boolean, msg: DelCanceledInvoiceResp): DelCanceledInvoiceResp.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: DelCanceledInvoiceResp, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DelCanceledInvoiceResp; + static deserializeBinaryFromReader(message: DelCanceledInvoiceResp, reader: jspb.BinaryReader): DelCanceledInvoiceResp; +} + +export namespace DelCanceledInvoiceResp { + export type AsObject = { + status: string, + } +} + export class Payment extends jspb.Message { getPaymentHash(): string; setPaymentHash(value: string): void; @@ -6529,6 +6617,16 @@ export class ForwardingHistoryRequest extends jspb.Message { getPeerAliasLookup(): boolean; setPeerAliasLookup(value: boolean): void; + clearIncomingChanIdsList(): void; + getIncomingChanIdsList(): Array; + setIncomingChanIdsList(value: Array): void; + addIncomingChanIds(value: string, index?: number): string; + + clearOutgoingChanIdsList(): void; + getOutgoingChanIdsList(): Array; + setOutgoingChanIdsList(value: Array): void; + addOutgoingChanIds(value: string, index?: number): string; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): ForwardingHistoryRequest.AsObject; static toObject(includeInstance: boolean, msg: ForwardingHistoryRequest): ForwardingHistoryRequest.AsObject; @@ -6546,6 +6644,8 @@ export namespace ForwardingHistoryRequest { indexOffset: number, numMaxEvents: number, peerAliasLookup: boolean, + incomingChanIdsList: Array, + outgoingChanIdsList: Array, } } @@ -7329,6 +7429,9 @@ export class CheckMacPermRequest extends jspb.Message { getFullmethod(): string; setFullmethod(value: string): void; + getCheckDefaultPermsFromFullMethod(): boolean; + setCheckDefaultPermsFromFullMethod(value: boolean): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): CheckMacPermRequest.AsObject; static toObject(includeInstance: boolean, msg: CheckMacPermRequest): CheckMacPermRequest.AsObject; @@ -7344,6 +7447,7 @@ export namespace CheckMacPermRequest { macaroon: Uint8Array | string, permissionsList: Array, fullmethod: string, + checkDefaultPermsFromFullMethod: boolean, } } diff --git a/app/src/types/generated/lnd_pb.js b/app/src/types/generated/lnd_pb.js index 2be008d1f..5826e82e1 100644 --- a/app/src/types/generated/lnd_pb.js +++ b/app/src/types/generated/lnd_pb.js @@ -50,6 +50,7 @@ goog.exportSymbol('proto.lnrpc.ChanPointShim', null, global); goog.exportSymbol('proto.lnrpc.Channel', null, global); goog.exportSymbol('proto.lnrpc.ChannelAcceptRequest', null, global); goog.exportSymbol('proto.lnrpc.ChannelAcceptResponse', null, global); +goog.exportSymbol('proto.lnrpc.ChannelAuthProof', null, global); goog.exportSymbol('proto.lnrpc.ChannelBackup', null, global); goog.exportSymbol('proto.lnrpc.ChannelBackupSubscription', null, global); goog.exportSymbol('proto.lnrpc.ChannelBackups', null, global); @@ -83,12 +84,13 @@ goog.exportSymbol('proto.lnrpc.ClosedChannelsRequest', null, global); goog.exportSymbol('proto.lnrpc.ClosedChannelsResponse', null, global); goog.exportSymbol('proto.lnrpc.CoinSelectionStrategy', null, global); goog.exportSymbol('proto.lnrpc.CommitmentType', null, global); -goog.exportSymbol('proto.lnrpc.ConfirmationUpdate', null, global); goog.exportSymbol('proto.lnrpc.ConnectPeerRequest', null, global); goog.exportSymbol('proto.lnrpc.ConnectPeerResponse', null, global); goog.exportSymbol('proto.lnrpc.CustomMessage', null, global); goog.exportSymbol('proto.lnrpc.DebugLevelRequest', null, global); goog.exportSymbol('proto.lnrpc.DebugLevelResponse', null, global); +goog.exportSymbol('proto.lnrpc.DelCanceledInvoiceReq', null, global); +goog.exportSymbol('proto.lnrpc.DelCanceledInvoiceResp', null, global); goog.exportSymbol('proto.lnrpc.DeleteAllPaymentsRequest', null, global); goog.exportSymbol('proto.lnrpc.DeleteAllPaymentsResponse', null, global); goog.exportSymbol('proto.lnrpc.DeleteMacaroonIDRequest', null, global); @@ -1608,27 +1610,6 @@ if (goog.DEBUG && !COMPILED) { */ proto.lnrpc.Chain.displayName = 'proto.lnrpc.Chain'; } -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.lnrpc.ConfirmationUpdate = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); -}; -goog.inherits(proto.lnrpc.ConfirmationUpdate, jspb.Message); -if (goog.DEBUG && !COMPILED) { - /** - * @public - * @override - */ - proto.lnrpc.ConfirmationUpdate.displayName = 'proto.lnrpc.ConfirmationUpdate'; -} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -2742,6 +2723,27 @@ if (goog.DEBUG && !COMPILED) { */ proto.lnrpc.RoutingPolicy.displayName = 'proto.lnrpc.RoutingPolicy'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.lnrpc.ChannelAuthProof = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.lnrpc.ChannelAuthProof, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.lnrpc.ChannelAuthProof.displayName = 'proto.lnrpc.ChannelAuthProof'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -3414,6 +3416,48 @@ if (goog.DEBUG && !COMPILED) { */ proto.lnrpc.InvoiceSubscription.displayName = 'proto.lnrpc.InvoiceSubscription'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.lnrpc.DelCanceledInvoiceReq = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.lnrpc.DelCanceledInvoiceReq, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.lnrpc.DelCanceledInvoiceReq.displayName = 'proto.lnrpc.DelCanceledInvoiceReq'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.lnrpc.DelCanceledInvoiceResp = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.lnrpc.DelCanceledInvoiceResp, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.lnrpc.DelCanceledInvoiceResp.displayName = 'proto.lnrpc.DelCanceledInvoiceResp'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -3887,7 +3931,7 @@ if (goog.DEBUG && !COMPILED) { * @constructor */ proto.lnrpc.ForwardingHistoryRequest = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); + jspb.Message.initialize(this, opt_data, 0, -1, proto.lnrpc.ForwardingHistoryRequest.repeatedFields_, null); }; goog.inherits(proto.lnrpc.ForwardingHistoryRequest, jspb.Message); if (goog.DEBUG && !COMPILED) { @@ -21257,220 +21301,6 @@ proto.lnrpc.Chain.prototype.setNetwork = function(value) { -if (jspb.Message.GENERATE_TO_OBJECT) { -/** - * Creates an object representation of this proto. - * Field names that are reserved in JavaScript and will be renamed to pb_name. - * Optional fields that are not set will be set to undefined. - * To access a reserved field use, foo.pb_, eg, foo.pb_default. - * For the list of reserved names please see: - * net/proto2/compiler/js/internal/generator.cc#kKeyword. - * @param {boolean=} opt_includeInstance Deprecated. whether to include the - * JSPB instance for transitional soy proto support: - * http://goto/soy-param-migration - * @return {!Object} - */ -proto.lnrpc.ConfirmationUpdate.prototype.toObject = function(opt_includeInstance) { - return proto.lnrpc.ConfirmationUpdate.toObject(opt_includeInstance, this); -}; - - -/** - * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Deprecated. Whether to include - * the JSPB instance for transitional soy proto support: - * http://goto/soy-param-migration - * @param {!proto.lnrpc.ConfirmationUpdate} msg The msg instance to transform. - * @return {!Object} - * @suppress {unusedLocalVariables} f is only used for nested messages - */ -proto.lnrpc.ConfirmationUpdate.toObject = function(includeInstance, msg) { - var f, obj = { - blockSha: msg.getBlockSha_asB64(), - blockHeight: jspb.Message.getFieldWithDefault(msg, 2, 0), - numConfsLeft: jspb.Message.getFieldWithDefault(msg, 3, 0) - }; - - if (includeInstance) { - obj.$jspbMessageInstance = msg; - } - return obj; -}; -} - - -/** - * Deserializes binary data (in protobuf wire format). - * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.lnrpc.ConfirmationUpdate} - */ -proto.lnrpc.ConfirmationUpdate.deserializeBinary = function(bytes) { - var reader = new jspb.BinaryReader(bytes); - var msg = new proto.lnrpc.ConfirmationUpdate; - return proto.lnrpc.ConfirmationUpdate.deserializeBinaryFromReader(msg, reader); -}; - - -/** - * Deserializes binary data (in protobuf wire format) from the - * given reader into the given message object. - * @param {!proto.lnrpc.ConfirmationUpdate} msg The message object to deserialize into. - * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.lnrpc.ConfirmationUpdate} - */ -proto.lnrpc.ConfirmationUpdate.deserializeBinaryFromReader = function(msg, reader) { - while (reader.nextField()) { - if (reader.isEndGroup()) { - break; - } - var field = reader.getFieldNumber(); - switch (field) { - case 1: - var value = /** @type {!Uint8Array} */ (reader.readBytes()); - msg.setBlockSha(value); - break; - case 2: - var value = /** @type {number} */ (reader.readInt32()); - msg.setBlockHeight(value); - break; - case 3: - var value = /** @type {number} */ (reader.readUint32()); - msg.setNumConfsLeft(value); - break; - default: - reader.skipField(); - break; - } - } - return msg; -}; - - -/** - * Serializes the message to binary data (in protobuf wire format). - * @return {!Uint8Array} - */ -proto.lnrpc.ConfirmationUpdate.prototype.serializeBinary = function() { - var writer = new jspb.BinaryWriter(); - proto.lnrpc.ConfirmationUpdate.serializeBinaryToWriter(this, writer); - return writer.getResultBuffer(); -}; - - -/** - * Serializes the given message to binary data (in protobuf wire - * format), writing to the given BinaryWriter. - * @param {!proto.lnrpc.ConfirmationUpdate} message - * @param {!jspb.BinaryWriter} writer - * @suppress {unusedLocalVariables} f is only used for nested messages - */ -proto.lnrpc.ConfirmationUpdate.serializeBinaryToWriter = function(message, writer) { - var f = undefined; - f = message.getBlockSha_asU8(); - if (f.length > 0) { - writer.writeBytes( - 1, - f - ); - } - f = message.getBlockHeight(); - if (f !== 0) { - writer.writeInt32( - 2, - f - ); - } - f = message.getNumConfsLeft(); - if (f !== 0) { - writer.writeUint32( - 3, - f - ); - } -}; - - -/** - * optional bytes block_sha = 1; - * @return {!(string|Uint8Array)} - */ -proto.lnrpc.ConfirmationUpdate.prototype.getBlockSha = function() { - return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 1, "")); -}; - - -/** - * optional bytes block_sha = 1; - * This is a type-conversion wrapper around `getBlockSha()` - * @return {string} - */ -proto.lnrpc.ConfirmationUpdate.prototype.getBlockSha_asB64 = function() { - return /** @type {string} */ (jspb.Message.bytesAsB64( - this.getBlockSha())); -}; - - -/** - * optional bytes block_sha = 1; - * Note that Uint8Array is not supported on all browsers. - * @see http://caniuse.com/Uint8Array - * This is a type-conversion wrapper around `getBlockSha()` - * @return {!Uint8Array} - */ -proto.lnrpc.ConfirmationUpdate.prototype.getBlockSha_asU8 = function() { - return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( - this.getBlockSha())); -}; - - -/** - * @param {!(string|Uint8Array)} value - * @return {!proto.lnrpc.ConfirmationUpdate} returns this - */ -proto.lnrpc.ConfirmationUpdate.prototype.setBlockSha = function(value) { - return jspb.Message.setProto3BytesField(this, 1, value); -}; - - -/** - * optional int32 block_height = 2; - * @return {number} - */ -proto.lnrpc.ConfirmationUpdate.prototype.getBlockHeight = function() { - return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); -}; - - -/** - * @param {number} value - * @return {!proto.lnrpc.ConfirmationUpdate} returns this - */ -proto.lnrpc.ConfirmationUpdate.prototype.setBlockHeight = function(value) { - return jspb.Message.setProto3IntField(this, 2, value); -}; - - -/** - * optional uint32 num_confs_left = 3; - * @return {number} - */ -proto.lnrpc.ConfirmationUpdate.prototype.getNumConfsLeft = function() { - return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); -}; - - -/** - * @param {number} value - * @return {!proto.lnrpc.ConfirmationUpdate} returns this - */ -proto.lnrpc.ConfirmationUpdate.prototype.setNumConfsLeft = function(value) { - return jspb.Message.setProto3IntField(this, 3, value); -}; - - - - - if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -29546,7 +29376,9 @@ proto.lnrpc.PendingChannelsResponse.PendingOpenChannel.toObject = function(inclu commitFee: jspb.Message.getFieldWithDefault(msg, 4, "0"), commitWeight: jspb.Message.getFieldWithDefault(msg, 5, "0"), feePerKw: jspb.Message.getFieldWithDefault(msg, 6, "0"), - fundingExpiryBlocks: jspb.Message.getFieldWithDefault(msg, 3, 0) + fundingExpiryBlocks: jspb.Message.getFieldWithDefault(msg, 3, 0), + confirmationsUntilActive: jspb.Message.getFieldWithDefault(msg, 7, 0), + confirmationHeight: jspb.Message.getFieldWithDefault(msg, 8, 0) }; if (includeInstance) { @@ -29604,6 +29436,14 @@ proto.lnrpc.PendingChannelsResponse.PendingOpenChannel.deserializeBinaryFromRead var value = /** @type {number} */ (reader.readInt32()); msg.setFundingExpiryBlocks(value); break; + case 7: + var value = /** @type {number} */ (reader.readUint32()); + msg.setConfirmationsUntilActive(value); + break; + case 8: + var value = /** @type {number} */ (reader.readUint32()); + msg.setConfirmationHeight(value); + break; default: reader.skipField(); break; @@ -29669,6 +29509,20 @@ proto.lnrpc.PendingChannelsResponse.PendingOpenChannel.serializeBinaryToWriter = f ); } + f = message.getConfirmationsUntilActive(); + if (f !== 0) { + writer.writeUint32( + 7, + f + ); + } + f = message.getConfirmationHeight(); + if (f !== 0) { + writer.writeUint32( + 8, + f + ); + } }; @@ -29781,6 +29635,42 @@ proto.lnrpc.PendingChannelsResponse.PendingOpenChannel.prototype.setFundingExpir }; +/** + * optional uint32 confirmations_until_active = 7; + * @return {number} + */ +proto.lnrpc.PendingChannelsResponse.PendingOpenChannel.prototype.getConfirmationsUntilActive = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 7, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.lnrpc.PendingChannelsResponse.PendingOpenChannel} returns this + */ +proto.lnrpc.PendingChannelsResponse.PendingOpenChannel.prototype.setConfirmationsUntilActive = function(value) { + return jspb.Message.setProto3IntField(this, 7, value); +}; + + +/** + * optional uint32 confirmation_height = 8; + * @return {number} + */ +proto.lnrpc.PendingChannelsResponse.PendingOpenChannel.prototype.getConfirmationHeight = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 8, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.lnrpc.PendingChannelsResponse.PendingOpenChannel} returns this + */ +proto.lnrpc.PendingChannelsResponse.PendingOpenChannel.prototype.setConfirmationHeight = function(value) { + return jspb.Message.setProto3IntField(this, 8, value); +}; + + @@ -33127,7 +33017,7 @@ proto.lnrpc.ChannelBalanceResponse.prototype.setCustomChannelData = function(val * @private {!Array} * @const */ -proto.lnrpc.QueryRoutesRequest.repeatedFields_ = [6,7,10,16,19,17]; +proto.lnrpc.QueryRoutesRequest.repeatedFields_ = [6,7,10,16,19,17,20]; @@ -33181,7 +33071,8 @@ proto.lnrpc.QueryRoutesRequest.toObject = function(includeInstance, msg) { blindedPaymentPathsList: jspb.Message.toObjectList(msg.getBlindedPaymentPathsList(), proto.lnrpc.BlindedPaymentPath.toObject, includeInstance), destFeaturesList: (f = jspb.Message.getRepeatedField(msg, 17)) == null ? undefined : f, - timePref: jspb.Message.getFloatingPointFieldWithDefault(msg, 18, 0.0) + timePref: jspb.Message.getFloatingPointFieldWithDefault(msg, 18, 0.0), + outgoingChanIdsList: (f = jspb.Message.getRepeatedField(msg, 20)) == null ? undefined : f }; if (includeInstance) { @@ -33299,6 +33190,12 @@ proto.lnrpc.QueryRoutesRequest.deserializeBinaryFromReader = function(msg, reade var value = /** @type {number} */ (reader.readDouble()); msg.setTimePref(value); break; + case 20: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedUint64String() : [reader.readUint64String()]); + for (var i = 0; i < values.length; i++) { + msg.addOutgoingChanIds(values[i]); + } + break; default: reader.skipField(); break; @@ -33456,6 +33353,13 @@ proto.lnrpc.QueryRoutesRequest.serializeBinaryToWriter = function(message, write f ); } + f = message.getOutgoingChanIdsList(); + if (f.length > 0) { + writer.writePackedUint64String( + 20, + f + ); + } }; @@ -33973,6 +33877,43 @@ proto.lnrpc.QueryRoutesRequest.prototype.setTimePref = function(value) { }; +/** + * repeated uint64 outgoing_chan_ids = 20; + * @return {!Array} + */ +proto.lnrpc.QueryRoutesRequest.prototype.getOutgoingChanIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 20)); +}; + + +/** + * @param {!Array} value + * @return {!proto.lnrpc.QueryRoutesRequest} returns this + */ +proto.lnrpc.QueryRoutesRequest.prototype.setOutgoingChanIdsList = function(value) { + return jspb.Message.setField(this, 20, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.lnrpc.QueryRoutesRequest} returns this + */ +proto.lnrpc.QueryRoutesRequest.prototype.addOutgoingChanIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 20, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.lnrpc.QueryRoutesRequest} returns this + */ +proto.lnrpc.QueryRoutesRequest.prototype.clearOutgoingChanIdsList = function() { + return this.setOutgoingChanIdsList([]); +}; + + @@ -36078,7 +36019,8 @@ proto.lnrpc.NodeInfoRequest.prototype.toObject = function(opt_includeInstance) { proto.lnrpc.NodeInfoRequest.toObject = function(includeInstance, msg) { var f, obj = { pubKey: jspb.Message.getFieldWithDefault(msg, 1, ""), - includeChannels: jspb.Message.getBooleanFieldWithDefault(msg, 2, false) + includeChannels: jspb.Message.getBooleanFieldWithDefault(msg, 2, false), + includeAuthProof: jspb.Message.getBooleanFieldWithDefault(msg, 3, false) }; if (includeInstance) { @@ -36123,6 +36065,10 @@ proto.lnrpc.NodeInfoRequest.deserializeBinaryFromReader = function(msg, reader) var value = /** @type {boolean} */ (reader.readBool()); msg.setIncludeChannels(value); break; + case 3: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIncludeAuthProof(value); + break; default: reader.skipField(); break; @@ -36166,6 +36112,13 @@ proto.lnrpc.NodeInfoRequest.serializeBinaryToWriter = function(message, writer) f ); } + f = message.getIncludeAuthProof(); + if (f) { + writer.writeBool( + 3, + f + ); + } }; @@ -36205,6 +36158,24 @@ proto.lnrpc.NodeInfoRequest.prototype.setIncludeChannels = function(value) { }; +/** + * optional bool include_auth_proof = 3; + * @return {boolean} + */ +proto.lnrpc.NodeInfoRequest.prototype.getIncludeAuthProof = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 3, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.lnrpc.NodeInfoRequest} returns this + */ +proto.lnrpc.NodeInfoRequest.prototype.setIncludeAuthProof = function(value) { + return jspb.Message.setProto3BooleanField(this, 3, value); +}; + + /** * List of repeated fields within this message type. @@ -37391,6 +37362,322 @@ proto.lnrpc.RoutingPolicy.prototype.setInboundFeeRateMilliMsat = function(value) +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.lnrpc.ChannelAuthProof.prototype.toObject = function(opt_includeInstance) { + return proto.lnrpc.ChannelAuthProof.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.lnrpc.ChannelAuthProof} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.lnrpc.ChannelAuthProof.toObject = function(includeInstance, msg) { + var f, obj = { + nodeSig1: msg.getNodeSig1_asB64(), + bitcoinSig1: msg.getBitcoinSig1_asB64(), + nodeSig2: msg.getNodeSig2_asB64(), + bitcoinSig2: msg.getBitcoinSig2_asB64() + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.lnrpc.ChannelAuthProof} + */ +proto.lnrpc.ChannelAuthProof.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.lnrpc.ChannelAuthProof; + return proto.lnrpc.ChannelAuthProof.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.lnrpc.ChannelAuthProof} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.lnrpc.ChannelAuthProof} + */ +proto.lnrpc.ChannelAuthProof.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setNodeSig1(value); + break; + case 2: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setBitcoinSig1(value); + break; + case 3: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setNodeSig2(value); + break; + case 4: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setBitcoinSig2(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.lnrpc.ChannelAuthProof.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.lnrpc.ChannelAuthProof.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.lnrpc.ChannelAuthProof} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.lnrpc.ChannelAuthProof.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getNodeSig1_asU8(); + if (f.length > 0) { + writer.writeBytes( + 1, + f + ); + } + f = message.getBitcoinSig1_asU8(); + if (f.length > 0) { + writer.writeBytes( + 2, + f + ); + } + f = message.getNodeSig2_asU8(); + if (f.length > 0) { + writer.writeBytes( + 3, + f + ); + } + f = message.getBitcoinSig2_asU8(); + if (f.length > 0) { + writer.writeBytes( + 4, + f + ); + } +}; + + +/** + * optional bytes node_sig1 = 1; + * @return {!(string|Uint8Array)} + */ +proto.lnrpc.ChannelAuthProof.prototype.getNodeSig1 = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * optional bytes node_sig1 = 1; + * This is a type-conversion wrapper around `getNodeSig1()` + * @return {string} + */ +proto.lnrpc.ChannelAuthProof.prototype.getNodeSig1_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getNodeSig1())); +}; + + +/** + * optional bytes node_sig1 = 1; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getNodeSig1()` + * @return {!Uint8Array} + */ +proto.lnrpc.ChannelAuthProof.prototype.getNodeSig1_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getNodeSig1())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.lnrpc.ChannelAuthProof} returns this + */ +proto.lnrpc.ChannelAuthProof.prototype.setNodeSig1 = function(value) { + return jspb.Message.setProto3BytesField(this, 1, value); +}; + + +/** + * optional bytes bitcoin_sig1 = 2; + * @return {!(string|Uint8Array)} + */ +proto.lnrpc.ChannelAuthProof.prototype.getBitcoinSig1 = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * optional bytes bitcoin_sig1 = 2; + * This is a type-conversion wrapper around `getBitcoinSig1()` + * @return {string} + */ +proto.lnrpc.ChannelAuthProof.prototype.getBitcoinSig1_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getBitcoinSig1())); +}; + + +/** + * optional bytes bitcoin_sig1 = 2; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getBitcoinSig1()` + * @return {!Uint8Array} + */ +proto.lnrpc.ChannelAuthProof.prototype.getBitcoinSig1_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getBitcoinSig1())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.lnrpc.ChannelAuthProof} returns this + */ +proto.lnrpc.ChannelAuthProof.prototype.setBitcoinSig1 = function(value) { + return jspb.Message.setProto3BytesField(this, 2, value); +}; + + +/** + * optional bytes node_sig2 = 3; + * @return {!(string|Uint8Array)} + */ +proto.lnrpc.ChannelAuthProof.prototype.getNodeSig2 = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * optional bytes node_sig2 = 3; + * This is a type-conversion wrapper around `getNodeSig2()` + * @return {string} + */ +proto.lnrpc.ChannelAuthProof.prototype.getNodeSig2_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getNodeSig2())); +}; + + +/** + * optional bytes node_sig2 = 3; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getNodeSig2()` + * @return {!Uint8Array} + */ +proto.lnrpc.ChannelAuthProof.prototype.getNodeSig2_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getNodeSig2())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.lnrpc.ChannelAuthProof} returns this + */ +proto.lnrpc.ChannelAuthProof.prototype.setNodeSig2 = function(value) { + return jspb.Message.setProto3BytesField(this, 3, value); +}; + + +/** + * optional bytes bitcoin_sig2 = 4; + * @return {!(string|Uint8Array)} + */ +proto.lnrpc.ChannelAuthProof.prototype.getBitcoinSig2 = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * optional bytes bitcoin_sig2 = 4; + * This is a type-conversion wrapper around `getBitcoinSig2()` + * @return {string} + */ +proto.lnrpc.ChannelAuthProof.prototype.getBitcoinSig2_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getBitcoinSig2())); +}; + + +/** + * optional bytes bitcoin_sig2 = 4; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getBitcoinSig2()` + * @return {!Uint8Array} + */ +proto.lnrpc.ChannelAuthProof.prototype.getBitcoinSig2_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getBitcoinSig2())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.lnrpc.ChannelAuthProof} returns this + */ +proto.lnrpc.ChannelAuthProof.prototype.setBitcoinSig2 = function(value) { + return jspb.Message.setProto3BytesField(this, 4, value); +}; + + + + + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -37428,7 +37715,8 @@ proto.lnrpc.ChannelEdge.toObject = function(includeInstance, msg) { capacity: jspb.Message.getFieldWithDefault(msg, 6, "0"), node1Policy: (f = msg.getNode1Policy()) && proto.lnrpc.RoutingPolicy.toObject(includeInstance, f), node2Policy: (f = msg.getNode2Policy()) && proto.lnrpc.RoutingPolicy.toObject(includeInstance, f), - customRecordsMap: (f = msg.getCustomRecordsMap()) ? f.toObject(includeInstance, undefined) : [] + customRecordsMap: (f = msg.getCustomRecordsMap()) ? f.toObject(includeInstance, undefined) : [], + authProof: (f = msg.getAuthProof()) && proto.lnrpc.ChannelAuthProof.toObject(includeInstance, f) }; if (includeInstance) { @@ -37505,6 +37793,11 @@ proto.lnrpc.ChannelEdge.deserializeBinaryFromReader = function(msg, reader) { jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readUint64, jspb.BinaryReader.prototype.readBytes, null, 0, ""); }); break; + case 10: + var value = new proto.lnrpc.ChannelAuthProof; + reader.readMessage(value,proto.lnrpc.ChannelAuthProof.deserializeBinaryFromReader); + msg.setAuthProof(value); + break; default: reader.skipField(); break; @@ -37596,6 +37889,14 @@ proto.lnrpc.ChannelEdge.serializeBinaryToWriter = function(message, writer) { if (f && f.getLength() > 0) { f.serializeBinary(9, writer, jspb.BinaryWriter.prototype.writeUint64, jspb.BinaryWriter.prototype.writeBytes); } + f = message.getAuthProof(); + if (f != null) { + writer.writeMessage( + 10, + f, + proto.lnrpc.ChannelAuthProof.serializeBinaryToWriter + ); + } }; @@ -37804,6 +38105,43 @@ proto.lnrpc.ChannelEdge.prototype.clearCustomRecordsMap = function() { }; +/** + * optional ChannelAuthProof auth_proof = 10; + * @return {?proto.lnrpc.ChannelAuthProof} + */ +proto.lnrpc.ChannelEdge.prototype.getAuthProof = function() { + return /** @type{?proto.lnrpc.ChannelAuthProof} */ ( + jspb.Message.getWrapperField(this, proto.lnrpc.ChannelAuthProof, 10)); +}; + + +/** + * @param {?proto.lnrpc.ChannelAuthProof|undefined} value + * @return {!proto.lnrpc.ChannelEdge} returns this +*/ +proto.lnrpc.ChannelEdge.prototype.setAuthProof = function(value) { + return jspb.Message.setWrapperField(this, 10, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.lnrpc.ChannelEdge} returns this + */ +proto.lnrpc.ChannelEdge.prototype.clearAuthProof = function() { + return this.setAuthProof(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.lnrpc.ChannelEdge.prototype.hasAuthProof = function() { + return jspb.Message.getField(this, 10) != null; +}; + + @@ -37836,7 +38174,8 @@ proto.lnrpc.ChannelGraphRequest.prototype.toObject = function(opt_includeInstanc */ proto.lnrpc.ChannelGraphRequest.toObject = function(includeInstance, msg) { var f, obj = { - includeUnannounced: jspb.Message.getBooleanFieldWithDefault(msg, 1, false) + includeUnannounced: jspb.Message.getBooleanFieldWithDefault(msg, 1, false), + includeAuthProof: jspb.Message.getBooleanFieldWithDefault(msg, 2, false) }; if (includeInstance) { @@ -37877,6 +38216,10 @@ proto.lnrpc.ChannelGraphRequest.deserializeBinaryFromReader = function(msg, read var value = /** @type {boolean} */ (reader.readBool()); msg.setIncludeUnannounced(value); break; + case 2: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIncludeAuthProof(value); + break; default: reader.skipField(); break; @@ -37913,6 +38256,13 @@ proto.lnrpc.ChannelGraphRequest.serializeBinaryToWriter = function(message, writ f ); } + f = message.getIncludeAuthProof(); + if (f) { + writer.writeBool( + 2, + f + ); + } }; @@ -37934,6 +38284,24 @@ proto.lnrpc.ChannelGraphRequest.prototype.setIncludeUnannounced = function(value }; +/** + * optional bool include_auth_proof = 2; + * @return {boolean} + */ +proto.lnrpc.ChannelGraphRequest.prototype.getIncludeAuthProof = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.lnrpc.ChannelGraphRequest} returns this + */ +proto.lnrpc.ChannelGraphRequest.prototype.setIncludeAuthProof = function(value) { + return jspb.Message.setProto3BooleanField(this, 2, value); +}; + + /** * List of repeated fields within this message type. @@ -38632,7 +39000,8 @@ proto.lnrpc.ChanInfoRequest.prototype.toObject = function(opt_includeInstance) { proto.lnrpc.ChanInfoRequest.toObject = function(includeInstance, msg) { var f, obj = { chanId: jspb.Message.getFieldWithDefault(msg, 1, "0"), - chanPoint: jspb.Message.getFieldWithDefault(msg, 2, "") + chanPoint: jspb.Message.getFieldWithDefault(msg, 2, ""), + includeAuthProof: jspb.Message.getBooleanFieldWithDefault(msg, 3, false) }; if (includeInstance) { @@ -38677,6 +39046,10 @@ proto.lnrpc.ChanInfoRequest.deserializeBinaryFromReader = function(msg, reader) var value = /** @type {string} */ (reader.readString()); msg.setChanPoint(value); break; + case 3: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setIncludeAuthProof(value); + break; default: reader.skipField(); break; @@ -38720,6 +39093,13 @@ proto.lnrpc.ChanInfoRequest.serializeBinaryToWriter = function(message, writer) f ); } + f = message.getIncludeAuthProof(); + if (f) { + writer.writeBool( + 3, + f + ); + } }; @@ -38759,6 +39139,24 @@ proto.lnrpc.ChanInfoRequest.prototype.setChanPoint = function(value) { }; +/** + * optional bool include_auth_proof = 3; + * @return {boolean} + */ +proto.lnrpc.ChanInfoRequest.prototype.getIncludeAuthProof = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 3, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.lnrpc.ChanInfoRequest} returns this + */ +proto.lnrpc.ChanInfoRequest.prototype.setIncludeAuthProof = function(value) { + return jspb.Message.setProto3BooleanField(this, 3, value); +}; + + @@ -43621,7 +44019,7 @@ proto.lnrpc.Invoice.prototype.hasBlindedPathConfig = function() { * @private {!Array} * @const */ -proto.lnrpc.BlindedPathConfig.repeatedFields_ = [4]; +proto.lnrpc.BlindedPathConfig.repeatedFields_ = [4,5]; @@ -43657,7 +44055,8 @@ proto.lnrpc.BlindedPathConfig.toObject = function(includeInstance, msg) { minNumRealHops: jspb.Message.getFieldWithDefault(msg, 1, 0), numHops: jspb.Message.getFieldWithDefault(msg, 2, 0), maxNumPaths: jspb.Message.getFieldWithDefault(msg, 3, 0), - nodeOmissionListList: msg.getNodeOmissionListList_asB64() + nodeOmissionListList: msg.getNodeOmissionListList_asB64(), + incomingChannelListList: (f = jspb.Message.getRepeatedField(msg, 5)) == null ? undefined : f }; if (includeInstance) { @@ -43710,6 +44109,12 @@ proto.lnrpc.BlindedPathConfig.deserializeBinaryFromReader = function(msg, reader var value = /** @type {!Uint8Array} */ (reader.readBytes()); msg.addNodeOmissionList(value); break; + case 5: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedUint64String() : [reader.readUint64String()]); + for (var i = 0; i < values.length; i++) { + msg.addIncomingChannelList(values[i]); + } + break; default: reader.skipField(); break; @@ -43767,6 +44172,13 @@ proto.lnrpc.BlindedPathConfig.serializeBinaryToWriter = function(message, writer f ); } + f = message.getIncomingChannelListList(); + if (f.length > 0) { + writer.writePackedUint64String( + 5, + f + ); + } }; @@ -43939,6 +44351,43 @@ proto.lnrpc.BlindedPathConfig.prototype.clearNodeOmissionListList = function() { }; +/** + * repeated uint64 incoming_channel_list = 5; + * @return {!Array} + */ +proto.lnrpc.BlindedPathConfig.prototype.getIncomingChannelListList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 5)); +}; + + +/** + * @param {!Array} value + * @return {!proto.lnrpc.BlindedPathConfig} returns this + */ +proto.lnrpc.BlindedPathConfig.prototype.setIncomingChannelListList = function(value) { + return jspb.Message.setField(this, 5, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.lnrpc.BlindedPathConfig} returns this + */ +proto.lnrpc.BlindedPathConfig.prototype.addIncomingChannelList = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 5, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.lnrpc.BlindedPathConfig} returns this + */ +proto.lnrpc.BlindedPathConfig.prototype.clearIncomingChannelListList = function() { + return this.setIncomingChannelListList([]); +}; + + @@ -45907,6 +46356,266 @@ proto.lnrpc.InvoiceSubscription.prototype.setSettleIndex = function(value) { + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.lnrpc.DelCanceledInvoiceReq.prototype.toObject = function(opt_includeInstance) { + return proto.lnrpc.DelCanceledInvoiceReq.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.lnrpc.DelCanceledInvoiceReq} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.lnrpc.DelCanceledInvoiceReq.toObject = function(includeInstance, msg) { + var f, obj = { + invoiceHash: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.lnrpc.DelCanceledInvoiceReq} + */ +proto.lnrpc.DelCanceledInvoiceReq.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.lnrpc.DelCanceledInvoiceReq; + return proto.lnrpc.DelCanceledInvoiceReq.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.lnrpc.DelCanceledInvoiceReq} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.lnrpc.DelCanceledInvoiceReq} + */ +proto.lnrpc.DelCanceledInvoiceReq.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setInvoiceHash(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.lnrpc.DelCanceledInvoiceReq.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.lnrpc.DelCanceledInvoiceReq.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.lnrpc.DelCanceledInvoiceReq} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.lnrpc.DelCanceledInvoiceReq.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getInvoiceHash(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string invoice_hash = 1; + * @return {string} + */ +proto.lnrpc.DelCanceledInvoiceReq.prototype.getInvoiceHash = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.lnrpc.DelCanceledInvoiceReq} returns this + */ +proto.lnrpc.DelCanceledInvoiceReq.prototype.setInvoiceHash = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.lnrpc.DelCanceledInvoiceResp.prototype.toObject = function(opt_includeInstance) { + return proto.lnrpc.DelCanceledInvoiceResp.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.lnrpc.DelCanceledInvoiceResp} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.lnrpc.DelCanceledInvoiceResp.toObject = function(includeInstance, msg) { + var f, obj = { + status: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.lnrpc.DelCanceledInvoiceResp} + */ +proto.lnrpc.DelCanceledInvoiceResp.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.lnrpc.DelCanceledInvoiceResp; + return proto.lnrpc.DelCanceledInvoiceResp.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.lnrpc.DelCanceledInvoiceResp} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.lnrpc.DelCanceledInvoiceResp} + */ +proto.lnrpc.DelCanceledInvoiceResp.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setStatus(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.lnrpc.DelCanceledInvoiceResp.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.lnrpc.DelCanceledInvoiceResp.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.lnrpc.DelCanceledInvoiceResp} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.lnrpc.DelCanceledInvoiceResp.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getStatus(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string status = 1; + * @return {string} + */ +proto.lnrpc.DelCanceledInvoiceResp.prototype.getStatus = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.lnrpc.DelCanceledInvoiceResp} returns this + */ +proto.lnrpc.DelCanceledInvoiceResp.prototype.setStatus = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + /** * List of repeated fields within this message type. * @private {!Array} @@ -51371,6 +52080,13 @@ proto.lnrpc.PolicyUpdateResponse.prototype.clearFailedUpdatesList = function() { +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.lnrpc.ForwardingHistoryRequest.repeatedFields_ = [6,7]; + if (jspb.Message.GENERATE_TO_OBJECT) { @@ -51406,7 +52122,9 @@ proto.lnrpc.ForwardingHistoryRequest.toObject = function(includeInstance, msg) { endTime: jspb.Message.getFieldWithDefault(msg, 2, "0"), indexOffset: jspb.Message.getFieldWithDefault(msg, 3, 0), numMaxEvents: jspb.Message.getFieldWithDefault(msg, 4, 0), - peerAliasLookup: jspb.Message.getBooleanFieldWithDefault(msg, 5, false) + peerAliasLookup: jspb.Message.getBooleanFieldWithDefault(msg, 5, false), + incomingChanIdsList: (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f, + outgoingChanIdsList: (f = jspb.Message.getRepeatedField(msg, 7)) == null ? undefined : f }; if (includeInstance) { @@ -51463,6 +52181,18 @@ proto.lnrpc.ForwardingHistoryRequest.deserializeBinaryFromReader = function(msg, var value = /** @type {boolean} */ (reader.readBool()); msg.setPeerAliasLookup(value); break; + case 6: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedUint64String() : [reader.readUint64String()]); + for (var i = 0; i < values.length; i++) { + msg.addIncomingChanIds(values[i]); + } + break; + case 7: + var values = /** @type {!Array} */ (reader.isDelimited() ? reader.readPackedUint64String() : [reader.readUint64String()]); + for (var i = 0; i < values.length; i++) { + msg.addOutgoingChanIds(values[i]); + } + break; default: reader.skipField(); break; @@ -51527,6 +52257,20 @@ proto.lnrpc.ForwardingHistoryRequest.serializeBinaryToWriter = function(message, f ); } + f = message.getIncomingChanIdsList(); + if (f.length > 0) { + writer.writePackedUint64String( + 6, + f + ); + } + f = message.getOutgoingChanIdsList(); + if (f.length > 0) { + writer.writePackedUint64String( + 7, + f + ); + } }; @@ -51620,6 +52364,80 @@ proto.lnrpc.ForwardingHistoryRequest.prototype.setPeerAliasLookup = function(val }; +/** + * repeated uint64 incoming_chan_ids = 6; + * @return {!Array} + */ +proto.lnrpc.ForwardingHistoryRequest.prototype.getIncomingChanIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.lnrpc.ForwardingHistoryRequest} returns this + */ +proto.lnrpc.ForwardingHistoryRequest.prototype.setIncomingChanIdsList = function(value) { + return jspb.Message.setField(this, 6, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.lnrpc.ForwardingHistoryRequest} returns this + */ +proto.lnrpc.ForwardingHistoryRequest.prototype.addIncomingChanIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 6, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.lnrpc.ForwardingHistoryRequest} returns this + */ +proto.lnrpc.ForwardingHistoryRequest.prototype.clearIncomingChanIdsList = function() { + return this.setIncomingChanIdsList([]); +}; + + +/** + * repeated uint64 outgoing_chan_ids = 7; + * @return {!Array} + */ +proto.lnrpc.ForwardingHistoryRequest.prototype.getOutgoingChanIdsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 7)); +}; + + +/** + * @param {!Array} value + * @return {!proto.lnrpc.ForwardingHistoryRequest} returns this + */ +proto.lnrpc.ForwardingHistoryRequest.prototype.setOutgoingChanIdsList = function(value) { + return jspb.Message.setField(this, 7, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.lnrpc.ForwardingHistoryRequest} returns this + */ +proto.lnrpc.ForwardingHistoryRequest.prototype.addOutgoingChanIds = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 7, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.lnrpc.ForwardingHistoryRequest} returns this + */ +proto.lnrpc.ForwardingHistoryRequest.prototype.clearOutgoingChanIdsList = function() { + return this.setOutgoingChanIdsList([]); +}; + + @@ -56907,7 +57725,8 @@ proto.lnrpc.CheckMacPermRequest.toObject = function(includeInstance, msg) { macaroon: msg.getMacaroon_asB64(), permissionsList: jspb.Message.toObjectList(msg.getPermissionsList(), proto.lnrpc.MacaroonPermission.toObject, includeInstance), - fullmethod: jspb.Message.getFieldWithDefault(msg, 3, "") + fullmethod: jspb.Message.getFieldWithDefault(msg, 3, ""), + checkDefaultPermsFromFullMethod: jspb.Message.getBooleanFieldWithDefault(msg, 4, false) }; if (includeInstance) { @@ -56957,6 +57776,10 @@ proto.lnrpc.CheckMacPermRequest.deserializeBinaryFromReader = function(msg, read var value = /** @type {string} */ (reader.readString()); msg.setFullmethod(value); break; + case 4: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setCheckDefaultPermsFromFullMethod(value); + break; default: reader.skipField(); break; @@ -57008,6 +57831,13 @@ proto.lnrpc.CheckMacPermRequest.serializeBinaryToWriter = function(message, writ f ); } + f = message.getCheckDefaultPermsFromFullMethod(); + if (f) { + writer.writeBool( + 4, + f + ); + } }; @@ -57109,6 +57939,24 @@ proto.lnrpc.CheckMacPermRequest.prototype.setFullmethod = function(value) { }; +/** + * optional bool check_default_perms_from_full_method = 4; + * @return {boolean} + */ +proto.lnrpc.CheckMacPermRequest.prototype.getCheckDefaultPermsFromFullMethod = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.lnrpc.CheckMacPermRequest} returns this + */ +proto.lnrpc.CheckMacPermRequest.prototype.setCheckDefaultPermsFromFullMethod = function(value) { + return jspb.Message.setProto3BooleanField(this, 4, value); +}; + + diff --git a/app/src/types/generated/lnd_pb_service.d.ts b/app/src/types/generated/lnd_pb_service.d.ts index 2ae1620d7..b747df809 100644 --- a/app/src/types/generated/lnd_pb_service.d.ts +++ b/app/src/types/generated/lnd_pb_service.d.ts @@ -337,6 +337,15 @@ type LightningSubscribeInvoices = { readonly responseType: typeof lnd_pb.Invoice; }; +type LightningDeleteCanceledInvoice = { + readonly methodName: string; + readonly service: typeof Lightning; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof lnd_pb.DelCanceledInvoiceReq; + readonly responseType: typeof lnd_pb.DelCanceledInvoiceResp; +}; + type LightningDecodePayReq = { readonly methodName: string; readonly service: typeof Lightning; @@ -655,6 +664,7 @@ export class Lightning { static readonly ListInvoices: LightningListInvoices; static readonly LookupInvoice: LightningLookupInvoice; static readonly SubscribeInvoices: LightningSubscribeInvoices; + static readonly DeleteCanceledInvoice: LightningDeleteCanceledInvoice; static readonly DecodePayReq: LightningDecodePayReq; static readonly ListPayments: LightningListPayments; static readonly DeletePayment: LightningDeletePayment; @@ -981,6 +991,15 @@ export class LightningClient { callback: (error: ServiceError|null, responseMessage: lnd_pb.Invoice|null) => void ): UnaryResponse; subscribeInvoices(requestMessage: lnd_pb.InvoiceSubscription, metadata?: grpc.Metadata): ResponseStream; + deleteCanceledInvoice( + requestMessage: lnd_pb.DelCanceledInvoiceReq, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: lnd_pb.DelCanceledInvoiceResp|null) => void + ): UnaryResponse; + deleteCanceledInvoice( + requestMessage: lnd_pb.DelCanceledInvoiceReq, + callback: (error: ServiceError|null, responseMessage: lnd_pb.DelCanceledInvoiceResp|null) => void + ): UnaryResponse; decodePayReq( requestMessage: lnd_pb.PayReqString, metadata: grpc.Metadata, diff --git a/app/src/types/generated/lnd_pb_service.js b/app/src/types/generated/lnd_pb_service.js index 1e62e29cf..d35564106 100644 --- a/app/src/types/generated/lnd_pb_service.js +++ b/app/src/types/generated/lnd_pb_service.js @@ -343,6 +343,15 @@ Lightning.SubscribeInvoices = { responseType: lnd_pb.Invoice }; +Lightning.DeleteCanceledInvoice = { + methodName: "DeleteCanceledInvoice", + service: Lightning, + requestStream: false, + responseStream: false, + requestType: lnd_pb.DelCanceledInvoiceReq, + responseType: lnd_pb.DelCanceledInvoiceResp +}; + Lightning.DecodePayReq = { methodName: "DecodePayReq", service: Lightning, @@ -1866,6 +1875,37 @@ LightningClient.prototype.subscribeInvoices = function subscribeInvoices(request }; }; +LightningClient.prototype.deleteCanceledInvoice = function deleteCanceledInvoice(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(Lightning.DeleteCanceledInvoice, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + LightningClient.prototype.decodePayReq = function decodePayReq(requestMessage, metadata, callback) { if (arguments.length === 2) { callback = arguments[1]; diff --git a/app/src/types/generated/loop_pb.d.ts b/app/src/types/generated/loop_pb.d.ts index 15fcf1a48..f996883dd 100644 --- a/app/src/types/generated/loop_pb.d.ts +++ b/app/src/types/generated/loop_pb.d.ts @@ -566,6 +566,9 @@ export class QuoteRequest extends jspb.Message { getAssetInfo(): AssetLoopOutRequest | undefined; setAssetInfo(value?: AssetLoopOutRequest): void; + getAutoSelectDeposits(): boolean; + setAutoSelectDeposits(value: boolean): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): QuoteRequest.AsObject; static toObject(includeInstance: boolean, msg: QuoteRequest): QuoteRequest.AsObject; @@ -587,6 +590,7 @@ export namespace QuoteRequest { pb_private: boolean, depositOutpointsList: Array, assetInfo?: AssetLoopOutRequest.AsObject, + autoSelectDeposits: boolean, } } @@ -2026,6 +2030,11 @@ export class Deposit extends jspb.Message { getBlocksUntilExpiry(): string; setBlocksUntilExpiry(value: string): void; + getSwapHash(): Uint8Array | string; + getSwapHash_asU8(): Uint8Array; + getSwapHash_asB64(): string; + setSwapHash(value: Uint8Array | string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): Deposit.AsObject; static toObject(includeInstance: boolean, msg: Deposit): Deposit.AsObject; @@ -2044,6 +2053,7 @@ export namespace Deposit { value: string, confirmationHeight: string, blocksUntilExpiry: string, + swapHash: Uint8Array | string, } } @@ -2109,6 +2119,11 @@ export class StaticAddressLoopInSwap extends jspb.Message { getPaymentRequestAmountSatoshis(): string; setPaymentRequestAmountSatoshis(value: string): void; + clearDepositsList(): void; + getDepositsList(): Array; + setDepositsList(value: Array): void; + addDeposits(value?: Deposit, index?: number): Deposit; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): StaticAddressLoopInSwap.AsObject; static toObject(includeInstance: boolean, msg: StaticAddressLoopInSwap): StaticAddressLoopInSwap.AsObject; @@ -2126,6 +2141,7 @@ export namespace StaticAddressLoopInSwap { state: StaticAddressLoopInSwapStateMap[keyof StaticAddressLoopInSwapStateMap], swapAmountSatoshis: string, paymentRequestAmountSatoshis: string, + depositsList: Array, } } @@ -2160,6 +2176,9 @@ export class StaticAddressLoopInRequest extends jspb.Message { getPaymentTimeoutSeconds(): number; setPaymentTimeoutSeconds(value: number): void; + getAmount(): string; + setAmount(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): StaticAddressLoopInRequest.AsObject; static toObject(includeInstance: boolean, msg: StaticAddressLoopInRequest): StaticAddressLoopInRequest.AsObject; @@ -2180,6 +2199,7 @@ export namespace StaticAddressLoopInRequest { routeHintsList: Array, pb_private: boolean, paymentTimeoutSeconds: number, + amount: string, } } diff --git a/app/src/types/generated/loop_pb.js b/app/src/types/generated/loop_pb.js index 2da7801bf..058bb6d31 100644 --- a/app/src/types/generated/loop_pb.js +++ b/app/src/types/generated/loop_pb.js @@ -5461,7 +5461,8 @@ proto.looprpc.QuoteRequest.toObject = function(includeInstance, msg) { swapserverrpc_common_pb.RouteHint.toObject, includeInstance), pb_private: jspb.Message.getBooleanFieldWithDefault(msg, 7, false), depositOutpointsList: (f = jspb.Message.getRepeatedField(msg, 8)) == null ? undefined : f, - assetInfo: (f = msg.getAssetInfo()) && proto.looprpc.AssetLoopOutRequest.toObject(includeInstance, f) + assetInfo: (f = msg.getAssetInfo()) && proto.looprpc.AssetLoopOutRequest.toObject(includeInstance, f), + autoSelectDeposits: jspb.Message.getBooleanFieldWithDefault(msg, 10, false) }; if (includeInstance) { @@ -5536,6 +5537,10 @@ proto.looprpc.QuoteRequest.deserializeBinaryFromReader = function(msg, reader) { reader.readMessage(value,proto.looprpc.AssetLoopOutRequest.deserializeBinaryFromReader); msg.setAssetInfo(value); break; + case 10: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setAutoSelectDeposits(value); + break; default: reader.skipField(); break; @@ -5630,6 +5635,13 @@ proto.looprpc.QuoteRequest.serializeBinaryToWriter = function(message, writer) { proto.looprpc.AssetLoopOutRequest.serializeBinaryToWriter ); } + f = message.getAutoSelectDeposits(); + if (f) { + writer.writeBool( + 10, + f + ); + } }; @@ -5877,6 +5889,24 @@ proto.looprpc.QuoteRequest.prototype.hasAssetInfo = function() { }; +/** + * optional bool auto_select_deposits = 10; + * @return {boolean} + */ +proto.looprpc.QuoteRequest.prototype.getAutoSelectDeposits = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 10, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.looprpc.QuoteRequest} returns this + */ +proto.looprpc.QuoteRequest.prototype.setAutoSelectDeposits = function(value) { + return jspb.Message.setProto3BooleanField(this, 10, value); +}; + + @@ -15971,7 +16001,8 @@ proto.looprpc.Deposit.toObject = function(includeInstance, msg) { outpoint: jspb.Message.getFieldWithDefault(msg, 3, ""), value: jspb.Message.getFieldWithDefault(msg, 4, "0"), confirmationHeight: jspb.Message.getFieldWithDefault(msg, 5, "0"), - blocksUntilExpiry: jspb.Message.getFieldWithDefault(msg, 6, "0") + blocksUntilExpiry: jspb.Message.getFieldWithDefault(msg, 6, "0"), + swapHash: msg.getSwapHash_asB64() }; if (includeInstance) { @@ -16032,6 +16063,10 @@ proto.looprpc.Deposit.deserializeBinaryFromReader = function(msg, reader) { var value = /** @type {string} */ (reader.readInt64String()); msg.setBlocksUntilExpiry(value); break; + case 7: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setSwapHash(value); + break; default: reader.skipField(); break; @@ -16103,6 +16138,13 @@ proto.looprpc.Deposit.serializeBinaryToWriter = function(message, writer) { f ); } + f = message.getSwapHash_asU8(); + if (f.length > 0) { + writer.writeBytes( + 7, + f + ); + } }; @@ -16238,6 +16280,48 @@ proto.looprpc.Deposit.prototype.setBlocksUntilExpiry = function(value) { }; +/** + * optional bytes swap_hash = 7; + * @return {!(string|Uint8Array)} + */ +proto.looprpc.Deposit.prototype.getSwapHash = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 7, "")); +}; + + +/** + * optional bytes swap_hash = 7; + * This is a type-conversion wrapper around `getSwapHash()` + * @return {string} + */ +proto.looprpc.Deposit.prototype.getSwapHash_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getSwapHash())); +}; + + +/** + * optional bytes swap_hash = 7; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getSwapHash()` + * @return {!Uint8Array} + */ +proto.looprpc.Deposit.prototype.getSwapHash_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getSwapHash())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.looprpc.Deposit} returns this + */ +proto.looprpc.Deposit.prototype.setSwapHash = function(value) { + return jspb.Message.setProto3BytesField(this, 7, value); +}; + + /** * List of repeated fields within this message type. @@ -16554,7 +16638,7 @@ proto.looprpc.StaticAddressWithdrawal.prototype.setConfirmationHeight = function * @private {!Array} * @const */ -proto.looprpc.StaticAddressLoopInSwap.repeatedFields_ = [2]; +proto.looprpc.StaticAddressLoopInSwap.repeatedFields_ = [2,6]; @@ -16591,7 +16675,9 @@ proto.looprpc.StaticAddressLoopInSwap.toObject = function(includeInstance, msg) depositOutpointsList: (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f, state: jspb.Message.getFieldWithDefault(msg, 3, 0), swapAmountSatoshis: jspb.Message.getFieldWithDefault(msg, 4, "0"), - paymentRequestAmountSatoshis: jspb.Message.getFieldWithDefault(msg, 5, "0") + paymentRequestAmountSatoshis: jspb.Message.getFieldWithDefault(msg, 5, "0"), + depositsList: jspb.Message.toObjectList(msg.getDepositsList(), + proto.looprpc.Deposit.toObject, includeInstance) }; if (includeInstance) { @@ -16648,6 +16734,11 @@ proto.looprpc.StaticAddressLoopInSwap.deserializeBinaryFromReader = function(msg var value = /** @type {string} */ (reader.readInt64String()); msg.setPaymentRequestAmountSatoshis(value); break; + case 6: + var value = new proto.looprpc.Deposit; + reader.readMessage(value,proto.looprpc.Deposit.deserializeBinaryFromReader); + msg.addDeposits(value); + break; default: reader.skipField(); break; @@ -16712,6 +16803,14 @@ proto.looprpc.StaticAddressLoopInSwap.serializeBinaryToWriter = function(message f ); } + f = message.getDepositsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 6, + f, + proto.looprpc.Deposit.serializeBinaryToWriter + ); + } }; @@ -16848,6 +16947,44 @@ proto.looprpc.StaticAddressLoopInSwap.prototype.setPaymentRequestAmountSatoshis }; +/** + * repeated Deposit deposits = 6; + * @return {!Array} + */ +proto.looprpc.StaticAddressLoopInSwap.prototype.getDepositsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.looprpc.Deposit, 6)); +}; + + +/** + * @param {!Array} value + * @return {!proto.looprpc.StaticAddressLoopInSwap} returns this +*/ +proto.looprpc.StaticAddressLoopInSwap.prototype.setDepositsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 6, value); +}; + + +/** + * @param {!proto.looprpc.Deposit=} opt_value + * @param {number=} opt_index + * @return {!proto.looprpc.Deposit} + */ +proto.looprpc.StaticAddressLoopInSwap.prototype.addDeposits = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 6, opt_value, proto.looprpc.Deposit, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.looprpc.StaticAddressLoopInSwap} returns this + */ +proto.looprpc.StaticAddressLoopInSwap.prototype.clearDepositsList = function() { + return this.setDepositsList([]); +}; + + /** * List of repeated fields within this message type. @@ -16895,7 +17032,8 @@ proto.looprpc.StaticAddressLoopInRequest.toObject = function(includeInstance, ms routeHintsList: jspb.Message.toObjectList(msg.getRouteHintsList(), swapserverrpc_common_pb.RouteHint.toObject, includeInstance), pb_private: jspb.Message.getBooleanFieldWithDefault(msg, 7, false), - paymentTimeoutSeconds: jspb.Message.getFieldWithDefault(msg, 8, 0) + paymentTimeoutSeconds: jspb.Message.getFieldWithDefault(msg, 8, 0), + amount: jspb.Message.getFieldWithDefault(msg, 9, "0") }; if (includeInstance) { @@ -16965,6 +17103,10 @@ proto.looprpc.StaticAddressLoopInRequest.deserializeBinaryFromReader = function( var value = /** @type {number} */ (reader.readUint32()); msg.setPaymentTimeoutSeconds(value); break; + case 9: + var value = /** @type {string} */ (reader.readInt64String()); + msg.setAmount(value); + break; default: reader.skipField(); break; @@ -17051,6 +17193,13 @@ proto.looprpc.StaticAddressLoopInRequest.serializeBinaryToWriter = function(mess f ); } + f = message.getAmount(); + if (parseInt(f, 10) !== 0) { + writer.writeInt64String( + 9, + f + ); + } }; @@ -17261,6 +17410,24 @@ proto.looprpc.StaticAddressLoopInRequest.prototype.setPaymentTimeoutSeconds = fu }; +/** + * optional int64 amount = 9; + * @return {string} + */ +proto.looprpc.StaticAddressLoopInRequest.prototype.getAmount = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 9, "0")); +}; + + +/** + * @param {string} value + * @return {!proto.looprpc.StaticAddressLoopInRequest} returns this + */ +proto.looprpc.StaticAddressLoopInRequest.prototype.setAmount = function(value) { + return jspb.Message.setProto3StringIntField(this, 9, value); +}; + + diff --git a/app/src/util/tests/sampleData.ts b/app/src/util/tests/sampleData.ts index 27e3f1acb..43b43e106 100644 --- a/app/src/util/tests/sampleData.ts +++ b/app/src/util/tests/sampleData.ts @@ -190,6 +190,8 @@ export const lndPendingChannels: LND.PendingChannelsResponse.AsObject = { commitWeight: '552', feePerKw: '12500', fundingExpiryBlocks: 100, + confirmationsUntilActive: 0, + confirmationHeight: 0, }, ], pendingClosingChannelsList: [ @@ -339,6 +341,12 @@ export const lndGetChanInfo: Required = { customRecordsMap: [], }, customRecordsMap: [], + authProof: { + nodeSig1: '', + bitcoinSig1: '', + nodeSig2: '', + bitcoinSig2: '', + }, }; // diff --git a/go.mod b/go.mod index f126d643d..5766335eb 100644 --- a/go.mod +++ b/go.mod @@ -25,22 +25,22 @@ require ( github.com/lightninglabs/lightning-terminal/autopilotserverrpc v0.0.3 github.com/lightninglabs/lightning-terminal/litrpc v1.0.2 github.com/lightninglabs/lightning-terminal/perms v1.0.1 - github.com/lightninglabs/lndclient v0.19.0-12 - github.com/lightninglabs/loop v0.31.2-beta.0.20250730111713-3b0f6e84dc14 - github.com/lightninglabs/loop/looprpc v1.0.8 - github.com/lightninglabs/loop/swapserverrpc v1.0.15 + github.com/lightninglabs/lndclient v0.20.0-1 + github.com/lightninglabs/loop v0.31.3-beta.0.20251014011913-03de0a8ed734 + github.com/lightninglabs/loop/looprpc v1.0.10-0.20251009095951-719355211f63 + github.com/lightninglabs/loop/swapserverrpc v1.0.17-0.20251009095951-719355211f63 github.com/lightninglabs/pool v0.6.6-beta github.com/lightninglabs/pool/auctioneerrpc v1.1.3 github.com/lightninglabs/pool/poolrpc v1.0.1 - github.com/lightninglabs/taproot-assets v0.6.1-0.20250729190616-3f323918a96e - github.com/lightninglabs/taproot-assets/taprpc v1.0.10-0.20250729190616-3f323918a96e - github.com/lightningnetwork/lnd v0.19.3-beta + github.com/lightninglabs/taproot-assets v0.7.0-rc1.0.20251014100421-92189161aa7a + github.com/lightninglabs/taproot-assets/taprpc v1.0.10-0.20251014100421-92189161aa7a + github.com/lightningnetwork/lnd v0.20.0-beta.rc1 github.com/lightningnetwork/lnd/cert v1.2.2 github.com/lightningnetwork/lnd/clock v1.1.1 github.com/lightningnetwork/lnd/fn v1.2.5 github.com/lightningnetwork/lnd/fn/v2 v2.0.8 github.com/lightningnetwork/lnd/kvdb v1.4.16 - github.com/lightningnetwork/lnd/sqldb v1.0.11-0.20250623231731-45c15646c68b + github.com/lightningnetwork/lnd/sqldb v1.0.11 github.com/lightningnetwork/lnd/tlv v1.3.2 github.com/lightningnetwork/lnd/tor v1.1.6 github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f @@ -49,13 +49,13 @@ require ( github.com/pmezard/go-difflib v1.0.0 github.com/stretchr/testify v1.10.0 github.com/urfave/cli v1.22.14 - go.etcd.io/bbolt v1.3.11 - golang.org/x/crypto v0.36.0 - golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 - golang.org/x/net v0.38.0 - golang.org/x/sync v0.12.0 + go.etcd.io/bbolt v1.4.3 + golang.org/x/crypto v0.37.0 + golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 + golang.org/x/net v0.39.0 + golang.org/x/sync v0.13.0 google.golang.org/grpc v1.65.0 - google.golang.org/protobuf v1.34.2 + google.golang.org/protobuf v1.36.5 gopkg.in/macaroon-bakery.v2 v2.3.0 gopkg.in/macaroon.v2 v2.1.0 modernc.org/sqlite v1.34.5 @@ -76,7 +76,7 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/btcsuite/btcd/btcutil/psbt v1.1.10 // indirect github.com/btcsuite/btclog v0.0.0-20241003133417-09c4e92e319c // indirect - github.com/btcsuite/btcwallet v0.16.15-0.20250805011126-a3632ae48ab3 // indirect + github.com/btcsuite/btcwallet v0.16.17 // indirect github.com/btcsuite/btcwallet/wallet/txauthor v1.3.5 // indirect github.com/btcsuite/btcwallet/wallet/txrules v1.2.2 // indirect github.com/btcsuite/btcwallet/wallet/txsizes v1.2.5 // indirect @@ -96,14 +96,14 @@ require ( github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect github.com/decred/dcrd/lru v1.1.2 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect - github.com/docker/cli v28.0.1+incompatible // indirect - github.com/docker/docker v28.0.1+incompatible // indirect + github.com/docker/cli v28.1.1+incompatible // indirect + github.com/docker/docker v28.1.1+incompatible // indirect github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/fergusstrange/embedded-postgres v1.25.0 // indirect github.com/fortytw2/leaktest v1.3.0 // indirect - github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-macaroon-bakery/macaroonpb v1.0.0 // indirect github.com/go-viper/mapstructure/v2 v2.4.0 // indirect @@ -127,12 +127,12 @@ require ( github.com/jackc/pgio v1.0.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgproto3/v2 v2.3.3 // indirect - github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect - github.com/jackc/pgtype v1.14.0 // indirect - github.com/jackc/pgx/v4 v4.18.2 // indirect - github.com/jackc/pgx/v5 v5.6.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect + github.com/jackc/pgtype v1.14.4 // indirect + github.com/jackc/pgx/v4 v4.18.3 // indirect + github.com/jackc/pgx/v5 v5.7.4 // indirect github.com/jackc/puddle v1.3.0 // indirect - github.com/jackc/puddle/v2 v2.2.1 // indirect + github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/jackpal/gateway v1.0.5 // indirect github.com/jackpal/go-nat-pmp v0.0.0-20170405195558-28a68d0c24ad // indirect github.com/jedib0t/go-pretty/v6 v6.2.7 // indirect @@ -148,7 +148,7 @@ require ( github.com/lightninglabs/lightning-node-connect/hashmailrpc v1.0.3 // indirect github.com/lightninglabs/neutrino v0.16.1 // indirect github.com/lightninglabs/neutrino/cache v1.1.2 // indirect - github.com/lightningnetwork/lightning-onion v1.2.1-0.20240712235311-98bd56499dfb // indirect + github.com/lightningnetwork/lightning-onion v1.2.1-0.20240815225420-8b40adf04ab9 // indirect github.com/lightningnetwork/lnd/healthcheck v1.2.6 // indirect github.com/lightningnetwork/lnd/queue v1.1.1 // indirect github.com/lightningnetwork/lnd/ticker v1.1.1 // indirect @@ -180,11 +180,13 @@ require ( github.com/shopspring/decimal v1.3.1 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/soheilhy/cmux v0.1.5 // indirect - github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/pflag v1.0.6 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 // indirect github.com/tv42/zbase32 v0.0.0-20160707012821-501572607d02 // indirect + github.com/urfave/cli-docs/v3 v3.1.0 // indirect + github.com/urfave/cli/v3 v3.4.1 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect @@ -200,23 +202,23 @@ require ( go.etcd.io/etcd/server/v3 v3.5.12 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect - go.opentelemetry.io/otel v1.36.0 // indirect + go.opentelemetry.io/otel v1.37.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 // indirect - go.opentelemetry.io/otel/metric v1.36.0 // indirect - go.opentelemetry.io/otel/sdk v1.36.0 // indirect - go.opentelemetry.io/otel/trace v1.36.0 // indirect + go.opentelemetry.io/otel/metric v1.37.0 // indirect + go.opentelemetry.io/otel/sdk v1.37.0 // indirect + go.opentelemetry.io/otel/trace v1.37.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect go.uber.org/atomic v1.10.0 // indirect go.uber.org/mock v0.4.0 // indirect go.uber.org/multierr v1.6.0 // indirect - go.uber.org/zap v1.23.0 // indirect - golang.org/x/mod v0.21.0 // indirect + go.uber.org/zap v1.24.0 // indirect + golang.org/x/mod v0.24.0 // indirect golang.org/x/sys v0.33.0 // indirect - golang.org/x/term v0.30.0 // indirect - golang.org/x/text v0.23.0 // indirect + golang.org/x/term v0.31.0 // indirect + golang.org/x/text v0.24.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.24.0 // indirect + golang.org/x/tools v0.31.0 // indirect google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect diff --git a/go.sum b/go.sum index f0bd6b695..38107628b 100644 --- a/go.sum +++ b/go.sum @@ -600,13 +600,14 @@ git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3p github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs= +github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= -github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= +github.com/Masterminds/semver/v3 v3.3.0 h1:B8LGeaivUe71a5qox1ICM/JLl0NqZSW5CHyL+hmvYS0= +github.com/Masterminds/semver/v3 v3.3.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/NebulousLabs/fastrand v0.0.0-20181203155948-6fb6489aac4e h1:n+DcnTNkQnHlwpsrHoQtkrJIO7CBx029fw6oR4vIob4= @@ -670,8 +671,8 @@ github.com/btcsuite/btclog v0.0.0-20241003133417-09c4e92e319c/go.mod h1:w7xnGOhw github.com/btcsuite/btclog/v2 v2.0.1-0.20250728225537-6090e87c6c5b h1:MQ+Q6sDy37V1wP1Yu79A5KqJutolqUGwA99UZWQDWZM= github.com/btcsuite/btclog/v2 v2.0.1-0.20250728225537-6090e87c6c5b/go.mod h1:XItGUfVOxotJL8kkuk2Hj3EVow5KCugXl3wWfQ6K0AE= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcwallet v0.16.15-0.20250805011126-a3632ae48ab3 h1:MAjNRpj3XhCOrhchq4wq0qI34TIBX/DCnT6OLWejx68= -github.com/btcsuite/btcwallet v0.16.15-0.20250805011126-a3632ae48ab3/go.mod h1:H6dfoZcWPonM2wbVsR2ZBY0PKNZKdQyLAmnX8vL9JFA= +github.com/btcsuite/btcwallet v0.16.17 h1:1N6lHznRdcjDopBvcofxaIHknArkJ/EcVKgLKfGL4Dg= +github.com/btcsuite/btcwallet v0.16.17/go.mod h1:YO+W745BAH8n/Rpgj68QsLR6eLlgM4W2do4RejT0buo= github.com/btcsuite/btcwallet/wallet/txauthor v1.3.5 h1:Rr0njWI3r341nhSPesKQ2JF+ugDSzdPoeckS75SeDZk= github.com/btcsuite/btcwallet/wallet/txauthor v1.3.5/go.mod h1:+tXJ3Ym0nlQc/iHSwW1qzjmPs3ev+UVWMbGgfV1OZqU= github.com/btcsuite/btcwallet/wallet/txrules v1.2.2 h1:YEO+Lx1ZJJAtdRrjuhXjWrYsmAk26wLTlNzxt2q0lhk= @@ -762,10 +763,10 @@ github.com/dhui/dktest v0.4.5 h1:uUfYBIVREmj/Rw6MvgmqNAYzTiKOHJak+enB5Di73MM= github.com/dhui/dktest v0.4.5/go.mod h1:tmcyeHDKagvlDrz7gDKq4UAJOLIfVZYkfD5OnHDwcCo= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/cli v28.0.1+incompatible h1:g0h5NQNda3/CxIsaZfH4Tyf6vpxFth7PYl3hgCPOKzs= -github.com/docker/cli v28.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/docker v28.0.1+incompatible h1:FCHjSRdXhNRFjlHMTv4jUNlIBbTeRjrWfeFuJp7jpo0= -github.com/docker/docker v28.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/cli v28.1.1+incompatible h1:eyUemzeI45DY7eDPuwUcmDyDj1pM98oD5MdSpiItp8k= +github.com/docker/cli v28.1.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/docker v28.1.1+incompatible h1:49M11BFLsVO1gxY9UX9p/zwkE/rswggs8AdFmXQw51I= +github.com/docker/docker v28.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -833,8 +834,8 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-macaroon-bakery/macaroonpb v1.0.0 h1:It9exBaRMZ9iix1iJ6gwzfwsDE6ExNuwtAJ9e09v6XE= @@ -1039,29 +1040,32 @@ github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwX github.com/jackc/pgproto3/v2 v2.3.3 h1:1HLSx5H+tXR9pW3in3zaztoEwQYRC9SQaYUHjTSUOag= github.com/jackc/pgproto3/v2 v2.3.3/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= -github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= -github.com/jackc/pgtype v1.14.0 h1:y+xUdabmyMkJLyApYuPj38mW+aAIqCe5uuBB51rH3Vw= github.com/jackc/pgtype v1.14.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= +github.com/jackc/pgtype v1.14.4 h1:fKuNiCumbKTAIxQwXfB/nsrnkEI6bPJrrSiMKgbJ2j8= +github.com/jackc/pgtype v1.14.4/go.mod h1:aKeozOde08iifGosdJpz9MBZonJOUJxqNpPBcMJTlVA= github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= -github.com/jackc/pgx/v4 v4.18.2 h1:xVpYkNR5pk5bMCZGfClbO962UIqVABcAGt7ha1s/FeU= github.com/jackc/pgx/v4 v4.18.2/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= -github.com/jackc/pgx/v5 v5.6.0 h1:SWJzexBzPL5jb0GEsrPMLIsi/3jOo7RHlzTjcAeDrPY= -github.com/jackc/pgx/v5 v5.6.0/go.mod h1:DNZ/vlrUnhWCoFGxHAG8U2ljioxukquj7utPDgtQdTw= +github.com/jackc/pgx/v4 v4.18.3 h1:dE2/TrEsGX3RBprb3qryqSV9Y60iZN1C6i8IrmW9/BA= +github.com/jackc/pgx/v4 v4.18.3/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= +github.com/jackc/pgx/v5 v5.7.4 h1:9wKznZrhWa2QiHL+NjTSPP6yjl3451BX3imWDnokYlg= +github.com/jackc/pgx/v5 v5.7.4/go.mod h1:ncY89UGWxg82EykZUwSpUKEfccBGGYq1xjrOpsbsfGQ= github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.3.0 h1:eHK/5clGOatcjX3oWGBO/MpxpbHzSwud5EWTSCI+MX0= github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= -github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= +github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= +github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jackpal/gateway v1.0.5 h1:qzXWUJfuMdlLMtt0a3Dgt+xkWQiA5itDEITVJtuSwMc= github.com/jackpal/gateway v1.0.5/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA= github.com/jackpal/go-nat-pmp v0.0.0-20170405195558-28a68d0c24ad h1:heFfj7z0pGsNCekUlsFhO2jstxO4b5iQ665LjwM5mDc= @@ -1150,14 +1154,14 @@ github.com/lightninglabs/lightning-node-connect/hashmailrpc v1.0.3 h1:NuDp6Z+QNM github.com/lightninglabs/lightning-node-connect/hashmailrpc v1.0.3/go.mod h1:bDnEKRN1u13NFBuy/C+bFLhxA5bfd3clT25y76QY0AM= github.com/lightninglabs/lightning-node-connect/mailbox v1.0.1 h1:RWmohykp3n/DTMWY8b18RNTEcLDf+KT/AZHKYdOObkM= github.com/lightninglabs/lightning-node-connect/mailbox v1.0.1/go.mod h1:NYtNexZE9gO1eOeegTxmIW9fqanl7eZ9cOrE9yewSAk= -github.com/lightninglabs/lndclient v0.19.0-12 h1:aSIKfnvnHKiyFWppUGHJG5fn8VoF5WG5Lx958ksLmqs= -github.com/lightninglabs/lndclient v0.19.0-12/go.mod h1:cicoJY1AwZuRVXGD8Knp50TRT7TGBmw1k37uPQsGQiw= -github.com/lightninglabs/loop v0.31.2-beta.0.20250730111713-3b0f6e84dc14 h1:PA/bTHYZ/leIoky3mFgbD4h9FV1lamzS+bw45GLd4l8= -github.com/lightninglabs/loop v0.31.2-beta.0.20250730111713-3b0f6e84dc14/go.mod h1:ukAfrXOf5OqpJORSYLjsyFzOGgIASyC2Qbstsl0ZvWw= -github.com/lightninglabs/loop/looprpc v1.0.8 h1:OFmJNLjem6fLuH1YUO+3G6QA1wmjAd0zyhvdHONOBDs= -github.com/lightninglabs/loop/looprpc v1.0.8/go.mod h1:c7WykKQZ3PspCMVvv2kr9o4l3bgJBEBVv0SOoBOjPOw= -github.com/lightninglabs/loop/swapserverrpc v1.0.15 h1:vEZBF65Lv0T7MPydCRxHSIlEJzHBkZ4I8FtSD6OJK88= -github.com/lightninglabs/loop/swapserverrpc v1.0.15/go.mod h1:YDoUxA1eV/mbv+gXr4Ova7AFNSiIO+7xXdP7teQmMJY= +github.com/lightninglabs/lndclient v0.20.0-1 h1:xwDoh7z3bszXc4mkMO6ksEcXhkQw9v0XHJ7fB0LKDNo= +github.com/lightninglabs/lndclient v0.20.0-1/go.mod h1:LcbsTCCd0Qw5C4zlv/YqrPY81XUVA6wN1lA/qEWIs+Y= +github.com/lightninglabs/loop v0.31.3-beta.0.20251014011913-03de0a8ed734 h1:wyZQEjOnu7oSt6a87Uwbm/GoL2/AgdW+6peJc2qmgtg= +github.com/lightninglabs/loop v0.31.3-beta.0.20251014011913-03de0a8ed734/go.mod h1:01kFhAF+K5MKB6P1mbr0dy6oOgK35cJ1WFUxetdHG2c= +github.com/lightninglabs/loop/looprpc v1.0.10-0.20251009095951-719355211f63 h1:2UV/LBK1VPmnA6MhSPXW9Tjmy3bW1FzJkKB4Oy1ULpw= +github.com/lightninglabs/loop/looprpc v1.0.10-0.20251009095951-719355211f63/go.mod h1:c7WykKQZ3PspCMVvv2kr9o4l3bgJBEBVv0SOoBOjPOw= +github.com/lightninglabs/loop/swapserverrpc v1.0.17-0.20251009095951-719355211f63 h1:BAsOCw4jj9bHUD+94b8F75NIATwr6xosS2m+4wJa59o= +github.com/lightninglabs/loop/swapserverrpc v1.0.17-0.20251009095951-719355211f63/go.mod h1:YDoUxA1eV/mbv+gXr4Ova7AFNSiIO+7xXdP7teQmMJY= github.com/lightninglabs/migrate/v4 v4.18.2-9023d66a-fork-pr-2 h1:eFjp1dIB2BhhQp/THKrjLdlYuPugO9UU4kDqu91OX/Q= github.com/lightninglabs/migrate/v4 v4.18.2-9023d66a-fork-pr-2/go.mod h1:99BKpIi6ruaaXRM1A77eqZ+FWPQ3cfRa+ZVy5bmWMaY= github.com/lightninglabs/neutrino v0.16.1 h1:5Kz4ToxncEVkpKC6fwUjXKtFKJhuxlG3sBB3MdJTJjs= @@ -1172,14 +1176,14 @@ github.com/lightninglabs/pool/poolrpc v1.0.1 h1:XbNx28TYwEj/PVsnnF9TnveVCMCYfS1v github.com/lightninglabs/pool/poolrpc v1.0.1/go.mod h1:836icifg/SBnZbiae0v3jeRRzCrT6LWo32SqCS/JiGk= github.com/lightninglabs/protobuf-go-hex-display v1.34.2-hex-display h1:w7FM5LH9Z6CpKxl13mS48idsu6F+cEZf0lkyiV+Dq9g= github.com/lightninglabs/protobuf-go-hex-display v1.34.2-hex-display/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= -github.com/lightninglabs/taproot-assets v0.6.1-0.20250729190616-3f323918a96e h1:wlaM8dTlpCQ0uNj0TBskBDeNTTDessxiXiakYDB4RFo= -github.com/lightninglabs/taproot-assets v0.6.1-0.20250729190616-3f323918a96e/go.mod h1:mIgx0p/GkMZeEjEm91vYQsH41YQBAgJl7TP6JcT+wgs= -github.com/lightninglabs/taproot-assets/taprpc v1.0.10-0.20250729190616-3f323918a96e h1:MnXspinwkd6VhV8G9I+TdSak05UitfYyNBCQhTIIr0g= -github.com/lightninglabs/taproot-assets/taprpc v1.0.10-0.20250729190616-3f323918a96e/go.mod h1:c8gTEcKEUoUPVChgZNwqTL1hss7UWa5FDeObr8WBzQk= -github.com/lightningnetwork/lightning-onion v1.2.1-0.20240712235311-98bd56499dfb h1:yfM05S8DXKhuCBp5qSMZdtSwvJ+GFzl94KbXMNB1JDY= -github.com/lightningnetwork/lightning-onion v1.2.1-0.20240712235311-98bd56499dfb/go.mod h1:c0kvRShutpj3l6B9WtTsNTBUtjSmjZXbJd9ZBRQOSKI= -github.com/lightningnetwork/lnd v0.19.3-beta h1:sBOIn+0ZIkvEJh05VPJRSOOhWbJn2EoGtyUAaq/Fgk8= -github.com/lightningnetwork/lnd v0.19.3-beta/go.mod h1:MNRzea8Yrgk+ohyUhK7JSpoigE4T9JgerMQQUxMbl9I= +github.com/lightninglabs/taproot-assets v0.7.0-rc1.0.20251014100421-92189161aa7a h1:chq0nuhADO7yjngYGtFEdVL9jJWFbfiwdlaHBsRMk04= +github.com/lightninglabs/taproot-assets v0.7.0-rc1.0.20251014100421-92189161aa7a/go.mod h1:qC9TBmn7gV+6LrDhacCe2DD0MnMbD1FgUzJ14LLb7E8= +github.com/lightninglabs/taproot-assets/taprpc v1.0.10-0.20251014100421-92189161aa7a h1:DdRL02D3nxYswEcYEEHQctEIWwxKws1XwPJ/Z3a8GD8= +github.com/lightninglabs/taproot-assets/taprpc v1.0.10-0.20251014100421-92189161aa7a/go.mod h1:ufuKxkMNdfRnv4IcnLw7ken69DcCUxO79WSpC8mIvdM= +github.com/lightningnetwork/lightning-onion v1.2.1-0.20240815225420-8b40adf04ab9 h1:6D3LrdagJweLLdFm1JNodZsBk6iU4TTsBBFLQ4yiXfI= +github.com/lightningnetwork/lightning-onion v1.2.1-0.20240815225420-8b40adf04ab9/go.mod h1:EDqJ3MuZIbMq0QI1czTIKDJ/GS8S14RXPwapHw8cw6w= +github.com/lightningnetwork/lnd v0.20.0-beta.rc1 h1:8Rm3/pcSLQI+tpCjKfYADfMjmEVFkrtoEom470siKRA= +github.com/lightningnetwork/lnd v0.20.0-beta.rc1/go.mod h1:SgniBRmo5pE7IImxIfhUofhgdXkutcV9Znrf/rEZ7TM= github.com/lightningnetwork/lnd/cert v1.2.2 h1:71YK6hogeJtxSxw2teq3eGeuy4rHGKcFf0d0Uy4qBjI= github.com/lightningnetwork/lnd/cert v1.2.2/go.mod h1:jQmFn/Ez4zhDgq2hnYSw8r35bqGVxViXhX6Cd7HXM6U= github.com/lightningnetwork/lnd/clock v1.1.1 h1:OfR3/zcJd2RhH0RU+zX/77c0ZiOnIMsDIBjgjWdZgA0= @@ -1194,8 +1198,8 @@ github.com/lightningnetwork/lnd/kvdb v1.4.16 h1:9BZgWdDfjmHRHLS97cz39bVuBAqMc4/p github.com/lightningnetwork/lnd/kvdb v1.4.16/go.mod h1:HW+bvwkxNaopkz3oIgBV6NEnV4jCEZCACFUcNg4xSjM= github.com/lightningnetwork/lnd/queue v1.1.1 h1:99ovBlpM9B0FRCGYJo6RSFDlt8/vOkQQZznVb18iNMI= github.com/lightningnetwork/lnd/queue v1.1.1/go.mod h1:7A6nC1Qrm32FHuhx/mi1cieAiBZo5O6l8IBIoQxvkz4= -github.com/lightningnetwork/lnd/sqldb v1.0.11-0.20250623231731-45c15646c68b h1:WL7X9E9d0/tbTOhVZ24x0WkatPJaGK2e7otCfDYcHTc= -github.com/lightningnetwork/lnd/sqldb v1.0.11-0.20250623231731-45c15646c68b/go.mod h1:c/vWoQfcxu6FAfHzGajkIQi7CEIeIZFhhH4DYh1BJpc= +github.com/lightningnetwork/lnd/sqldb v1.0.11 h1:X8J3OvdIhJVniQG78Qsp3niErl1zdGMTPvzgiLMWOOo= +github.com/lightningnetwork/lnd/sqldb v1.0.11/go.mod h1:oOdZ7vjmAUmI9He+aFHTunnxKVefHZAfJttZdz16hSg= github.com/lightningnetwork/lnd/ticker v1.1.1 h1:J/b6N2hibFtC7JLV77ULQp++QLtCwT6ijJlbdiZFbSM= github.com/lightningnetwork/lnd/ticker v1.1.1/go.mod h1:waPTRAAcwtu7Ji3+3k+u/xH5GHovTsCoSVpho0KDvdA= github.com/lightningnetwork/lnd/tlv v1.3.2 h1:MO4FCk7F4k5xPMqVZF6Nb/kOpxlwPrUQpYjmyKny5s0= @@ -1326,8 +1330,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= -github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= @@ -1354,8 +1358,8 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= @@ -1388,6 +1392,10 @@ github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/urfave/cli v1.22.14 h1:ebbhrRiGK2i4naQJr+1Xj92HXZCrK7MsyTS/ob3HnAk= github.com/urfave/cli v1.22.14/go.mod h1:X0eDS6pD6Exaclxm99NJ3FiCDRED7vIHpx2mDOHLvkA= +github.com/urfave/cli-docs/v3 v3.1.0 h1:Sa5xm19IpE5gpm6tZzXdfjdFxn67PnEsE4dpXF7vsKw= +github.com/urfave/cli-docs/v3 v3.1.0/go.mod h1:59d+5Hz1h6GSGJ10cvcEkbIe3j233t4XDqI72UIx7to= +github.com/urfave/cli/v3 v3.4.1 h1:1M9UOCy5bLmGnuu1yn3t3CB4rG79Rtoxuv1sPhnm6qM= +github.com/urfave/cli/v3 v3.4.1/go.mod h1:FJSKtM/9AiiTOJL4fJ6TbMUkxBXn7GO9guZqoZtpYpo= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= @@ -1410,8 +1418,8 @@ github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaD github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec h1:FpfFs4EhNehiVfzQttTuxanPIT43FtkkCFypIod8LHo= gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec/go.mod h1:BZ1RAoRPbCxum9Grlv5aeksu2H8BiKehBYooU2LFiOQ= -go.etcd.io/bbolt v1.3.11 h1:yGEzV1wPz2yVCLsD8ZAiGHhHVlczyC9d1rP43/VCRJ0= -go.etcd.io/bbolt v1.3.11/go.mod h1:dksAq7YMXoljX0xu6VF5DMZGbhYYoLUalEiSySYAS4I= +go.etcd.io/bbolt v1.4.3 h1:dEadXpI6G79deX5prL3QRNP6JB8UxVkqo4UPnHaNXJo= +go.etcd.io/bbolt v1.4.3/go.mod h1:tKQlpPaYCVFctUIgFKFnAlvbmB3tpy1vkTnDWohtc0E= go.etcd.io/etcd/api/v3 v3.5.12 h1:W4sw5ZoU2Juc9gBWuLk5U6fHfNVyY1WC5g9uiXZio/c= go.etcd.io/etcd/api/v3 v3.5.12/go.mod h1:Ot+o0SWSyT6uHhA56al1oCED0JImsRiU9Dc26+C2a+4= go.etcd.io/etcd/client/pkg/v3 v3.5.12 h1:EYDL6pWwyOsylrQyLp2w+HkQ46ATiOvoEdMarindU2A= @@ -1440,18 +1448,18 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.4 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= -go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg= -go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E= +go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= +go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 h1:dIIDULZJpgdiHz5tXrTgKIMLkus6jEFa7x5SOKcyR7E= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0/go.mod h1:jlRVBe7+Z1wyxFSUs48L6OBQZ5JwH2Hg/Vbl+t9rAgI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0= -go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE= -go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs= -go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs= -go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY= -go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w= -go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA= +go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= +go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= +go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= +go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= +go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= +go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= @@ -1481,8 +1489,8 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= -go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= -go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180723164146-c126467f60eb/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1500,8 +1508,10 @@ golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= +golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= +golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1517,8 +1527,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= -golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 h1:aAcj0Da7eBAtrTp03QXWvm88pSyOt+UgdZw2BFZ+lEw= -golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8/go.mod h1:CQ1k9gNrJ50XIzaKCRR2hssIjF07kZFEiieALBM/ARQ= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -1561,8 +1571,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= -golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= +golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20150829230318-ea47fc708ee3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1634,8 +1644,10 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= -golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= +golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1682,8 +1694,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= +golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180816055513-1c9583448a9c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1785,6 +1797,8 @@ golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -1796,8 +1810,10 @@ golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= -golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= -golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= +golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1814,8 +1830,9 @@ golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1895,8 +1912,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= -golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= +golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= +golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/itest/assets_test.go b/itest/assets_test.go index e6edeb366..f9ddede7d 100644 --- a/itest/assets_test.go +++ b/itest/assets_test.go @@ -2271,7 +2271,7 @@ func defaultCoOpCloseBalanceCheck(t *testing.T, local, remote *HarnessNode, // transaction was inserted into the local universe. // // We expect that at most four outputs exist: one for the local asset - // output, one for the remote asset output, one for the remote BTC + // output, one for the remote asset output, one for the local BTC // channel balance and one for the remote BTC channel balance. // // Those outputs are only present if the respective party has a diff --git a/itest/litd_custom_channels_test.go b/itest/litd_custom_channels_test.go index 6fa37cf46..ddd264460 100644 --- a/itest/litd_custom_channels_test.go +++ b/itest/litd_custom_channels_test.go @@ -14,6 +14,7 @@ import ( "github.com/btcsuite/btcd/btcec/v2/schnorr" "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" "github.com/lightninglabs/taproot-assets/asset" "github.com/lightninglabs/taproot-assets/itest" "github.com/lightninglabs/taproot-assets/proof" @@ -548,6 +549,13 @@ func testCustomChannels(ctx context.Context, net *NetworkHarness, // Test case 5: Create an asset invoice on Fabia and pay it from // Charlie. // ------------ + + // First send some sats from Erin to Fabia, for Fabia to have some + // minimal sats liquidity on her end. + sendKeySendPayment(t.t, erin, fabia, 5000) + + logBalance(t.t, nodes, assetID, "after erin->fabia sats keysend") + const fabiaInvoiceAssetAmount1 = 1000 invoiceResp = createAssetInvoice( t.t, erin, fabia, fabiaInvoiceAssetAmount1, assetID, @@ -987,6 +995,13 @@ func testCustomChannelsGroupedAsset(ctx context.Context, net *NetworkHarness, // Test case 5: Create an asset invoice on Fabia and pay it from // Charlie. // ------------ + + // First send some sats from Erin to Fabia, for Fabia to have some + // minimal sats liquidity on her end. + sendKeySendPayment(t.t, erin, fabia, 5000) + + logBalance(t.t, nodes, assetID, "after erin->fabia sats keysend") + const fabiaInvoiceAssetAmount1 = 1000 invoiceResp = createAssetInvoice( t.t, erin, fabia, fabiaInvoiceAssetAmount1, nil, @@ -1289,9 +1304,10 @@ func testCustomChannelsGroupTranchesForceClose(ctx context.Context, // that transports assets from two tranches. // ------------ const ( - keySendAmount = 5000 - numSends = 6 - totalFirstSend = keySendAmount * numSends + keySendAmount = 5000 + keySendSatAmount = 5000 + numSends = 6 + totalFirstSend = keySendAmount * numSends ) for i := 0; i < numSends; i++ { sendAssetKeySendPayment( @@ -1299,6 +1315,12 @@ func testCustomChannelsGroupTranchesForceClose(ctx context.Context, fn.None[int64](), withGroupKey(groupKey), ) } + + // With noop HTLCs implemented the sats balance of Dave will only + // increase up to the reserve amount. Let's make a direct non-asset + // keysend to make sure the sats balance is also enough. + sendKeySendPayment(t.t, charlie, dave, keySendSatAmount) + logBalanceGroup(t.t, nodes, groupIDs, "after keysend Charlie->Dave") // ------------ @@ -1538,8 +1560,9 @@ func testCustomChannelsGroupTranchesHtlcForceClose(ctx context.Context, // First, we'll send over some funds from Charlie to Dave, as we want // Dave to be able to extend HTLCs in the other direction. const ( - numPayments = 10 - keySendAmount = 2_500 + numPayments = 10 + keySendAmount = 2_500 + keySendSatAmount = 5_000 ) for i := 0; i < numPayments; i++ { sendAssetKeySendPayment( @@ -1548,6 +1571,11 @@ func testCustomChannelsGroupTranchesHtlcForceClose(ctx context.Context, ) } + // With noop HTLCs implemented the sats balance of Dave will only + // increase up to the reserve amount. Let's make a direct non-asset + // keysend to make sure the sats balance is also enough. + sendKeySendPayment(t.t, charlie, dave, keySendSatAmount) + // Now that both parties have some funds, we'll move onto the main test. // // We'll make 2 hodl invoice for each peer, so 4 total. From Charlie's @@ -2275,6 +2303,318 @@ func testCustomChannelsBreach(ctx context.Context, net *NetworkHarness, t.Logf("Charlie balance after breach: %d", charlieBalance) } +// testCustomChannelsV1Upgrade tests the upgrade path of a taproot assets +// channel. It upgrades one of the peers to a version that utilizes feature bits +// and new features over the channel, testing that backwards compatibility is +// maintained along the way. We also introduce a channel breach, right at the +// point before we switched over to the new features, to test that sweeping is +// done properly. +func testCustomChannelsV1Upgrade(ctx context.Context, net *NetworkHarness, + t *harnessTest) { + + lndArgs := slices.Clone(lndArgsTemplate) + litdArgs := slices.Clone(litdArgsTemplate) + + zane, err := net.NewNode( + t.t, "Zane", lndArgs, false, true, litdArgs..., + ) + require.NoError(t.t, err) + + litdArgs = append(litdArgs, fmt.Sprintf( + "--taproot-assets.proofcourieraddr=%s://%s", + proof.UniverseRpcCourierType, zane.Cfg.LitAddr(), + )) + + davePort := port.NextAvailablePort() + daveFlags := append( + slices.Clone(lndArgs), "--nolisten", "--minbackoff=1h", + ) + + // For this simple test, we'll just have Charlie -> Dave as an assets + // channel. + dave, err := net.NewNodeWithPort( + t.t, "Dave", daveFlags, false, true, davePort, + litdArgs..., + ) + require.NoError(t.t, err) + + charlie, err := net.NewNode(t.t, "Charlie", lndArgs, false, true, litdArgs...) + require.NoError(t.t, err) + + // Next we'll connect all the nodes and also fund them with some coins. + nodes := []*HarnessNode{dave, charlie} + connectAllNodes(t.t, net, nodes) + fundAllNodes(t.t, net, nodes) + + universeTap := newTapClient(t.t, zane) + charlieTap := newTapClient(t.t, charlie) + daveTap := newTapClient(t.t, dave) + + // Now we'll make an asset for Charlie that we'll use in the test to + // open a channel. + mintedAssets := itest.MintAssetsConfirmBatch( + t.t, t.lndHarness.Miner.Client, charlieTap, + []*mintrpc.MintAssetRequest{ + { + Asset: itestAsset, + }, + }, + ) + cents := mintedAssets[0] + assetID := cents.AssetGenesis.AssetId + + t.Logf("Minted %d itest asset cents, syncing universes...", + cents.Amount) + + syncUniverses(t.t, charlieTap, dave) + t.Logf("Universes synced between all nodes, distributing assets...") + + // Next we can open an asset channel from Charlie -> Dave, then kick + // off the main scenario. + t.Logf("Opening asset channels...") + assetFundResp, err := charlieTap.FundChannel( + ctx, &tchrpc.FundChannelRequest{ + AssetAmount: fundingAmount, + AssetId: assetID, + PeerPubkey: dave.PubKey[:], + FeeRateSatPerVbyte: 5, + }, + ) + require.NoError(t.t, err) + t.Logf("Funded channel between Charlie and Dave: %v", assetFundResp) + + // With the channel open, mine 6 blocks to confirm it. + mineBlocks(t, net, 6, 1) + + // A transfer for the funding transaction should be found in Charlie's + // DB. + fundingTxid, err := chainhash.NewHashFromStr(assetFundResp.Txid) + require.NoError(t.t, err) + assetFundingTransfer := locateAssetTransfers( + t.t, charlieTap, *fundingTxid, + ) + + t.Logf("Channel funding transfer: %v", + toProtoJSON(t.t, assetFundingTransfer)) + + // Charlie's balance should reflect that the funding asset is now + // excluded from balance reporting by tapd. + itest.AssertBalances( + t.t, charlieTap, itestAsset.Amount-fundingAmount, + itest.WithAssetID(assetID), itest.WithNumUtxos(1), + ) + + // Make sure that Charlie properly uploaded funding proof to the + // Universe server. + fundingScriptTree := tapscript.NewChannelFundingScriptTree() + fundingScriptKey := fundingScriptTree.TaprootKey + fundingScriptTreeBytes := fundingScriptKey.SerializeCompressed() + assertUniverseProofExists( + t.t, universeTap, assetID, nil, fundingScriptTreeBytes, + fmt.Sprintf( + "%v:%v", assetFundResp.Txid, assetFundResp.OutputIndex, + ), + ) + + // Make sure the channel shows the correct asset information. + assertAssetChan( + t.t, charlie, dave, fundingAmount, []*taprpc.Asset{cents}, + ) + + // Before we start sending out payments, let's make sure each node can + // see the other one in the graph and has all required features. + require.NoError(t.t, t.lndHarness.AssertNodeKnown(charlie, dave)) + require.NoError(t.t, t.lndHarness.AssertNodeKnown(dave, charlie)) + + logBalance(t.t, nodes, assetID, "start") + + // Let's dispatch 5 asset & 5 keysend payments from Charlie to Dave. At + // this point Charlie is running the old version of LiT. + for range 5 { + sendAssetKeySendPayment( + t.t, charlie, dave, 50, assetID, fn.None[int64](), + ) + sendKeySendPayment(t.t, charlie, dave, 1_000) + } + + logBalance(t.t, nodes, assetID, "before upgrade") + + // Let's assert that Charlie & Dave actually run different versions of + // taproot-assets. We expect Dave to be running the latest version, + // while Charlie is running an older version (v0.15.0). + daveInfo, err := daveTap.GetInfo(ctx, &taprpc.GetInfoRequest{}) + require.NoError(t.t, err) + + charlieInfo, err := charlieTap.GetInfo(ctx, &taprpc.GetInfoRequest{}) + require.NoError(t.t, err) + + require.NotEqual(t.t, daveInfo.Version, charlieInfo.Version) + + res, err := charlie.ChannelBalance(ctx, &lnrpc.ChannelBalanceRequest{}) + require.NoError(t.t, err) + + charlieSatsBefore := res.LocalBalance + + // Now we'll restart Charlie and assert that he upgraded. We also back + // up the DB at this point, in order to induce a breach later right at + // the switching point before upgrading the channel. We will verify that + // the breach transaction will be swept by the right party. + require.NoError(t.t, net.StopAndBackupDB(charlie, WithUpgrade())) + connectAllNodes(t.t, net, nodes) + + charlieInfo, err = charlieTap.GetInfo(ctx, &taprpc.GetInfoRequest{}) + require.NoError(t.t, err) + + // Dave and Charlie should both be running the same version (latest). + require.Equal(t.t, daveInfo.Version, charlieInfo.Version) + + // Let's send another 5 asset and keysend payments from Charlie to Dave. + // Charlie is now on the latest version of LiT and the channel upgraded. + for range 5 { + sendAssetKeySendPayment( + t.t, charlie, dave, 50, assetID, fn.None[int64](), + ) + } + + res, err = charlie.ChannelBalance(ctx, &lnrpc.ChannelBalanceRequest{}) + require.NoError(t.t, err) + + charlieSatsAfter := res.LocalBalance + + // Because of no-op HTLCs, the satoshi balance of Charlie should not + // have shifted while sending the asset payments. + require.Equal(t.t, charlieSatsBefore, charlieSatsAfter) + + logBalance(t.t, nodes, assetID, "after upgrade") + + // Now let's restart Charlie and restore the DB to the previous snapshot + // which corresponds to a previous (invalid) and unupgraded channel + // state. + require.NoError(t.t, net.StopAndRestoreDB(charlie)) + + // With Charlie restored, we'll now execute the force close. + t.Logf("Force close by Charlie to breach...") + charlieChanPoint := &lnrpc.ChannelPoint{ + OutputIndex: uint32(assetFundResp.OutputIndex), + FundingTxid: &lnrpc.ChannelPoint_FundingTxidStr{ + FundingTxidStr: assetFundResp.Txid, + }, + } + _, breachTxid, err := net.CloseChannel(charlie, charlieChanPoint, true) + require.NoError(t.t, err) + + t.Logf("Channel closed! Mining blocks, close_txid=%v", breachTxid) + + // Next, we'll mine a block to confirm the breach transaction. + mineBlocks(t, net, 1, 1) + + // We should be able to find the transfer of the breach for both + // parties. + charlieBreachTransfer := locateAssetTransfers( + t.t, charlieTap, *breachTxid, + ) + daveBreachTransfer := locateAssetTransfers( + t.t, daveTap, *breachTxid, + ) + + t.Logf("Charlie breach transfer: %v", + toProtoJSON(t.t, charlieBreachTransfer)) + t.Logf("Dave breach transfer: %v", + toProtoJSON(t.t, daveBreachTransfer)) + + require.Len(t.t, charlieBreachTransfer.Outputs, 2) + assetOutput := charlieBreachTransfer.Outputs[0] + assertUniverseProofExists( + t.t, universeTap, assetID, nil, assetOutput.ScriptKey, + assetOutput.Anchor.Outpoint, + ) + + op, err := wire.NewOutPointFromString(assetOutput.Anchor.Outpoint) + require.NoError(t.t, err) + + // We'll manually export the proof of the breach transfer, in order to + // verify that it indeed did not use STXO proofs. + proofResp, err := daveTap.ExportProof(ctx, &taprpc.ExportProofRequest{ + AssetId: assetID, + ScriptKey: assetOutput.ScriptKey, + Outpoint: &taprpc.OutPoint{ + Txid: op.Hash[:], + OutputIndex: op.Index, + }, + }) + require.NoError(t.t, err) + + proofFile, err := proof.DecodeFile(proofResp.RawProofFile) + require.NoError(t.t, err) + require.Equal(t.t, proofFile.NumProofs(), 3) + latestProof, err := proofFile.LastProof() + require.NoError(t.t, err) + + // This proof should not contain the STXO exclusion proofs, since the + // breach occured right before the channel upgraded. + stxoProofs := latestProof.ExclusionProofs[0].CommitmentProof.STXOProofs + require.Nil(t.t, stxoProofs) + + // With the breach transaction mined, Dave should now have a transaction + // in the mempool sweeping *both* commitment outputs. + daveJusticeTxid, err := waitForNTxsInMempool( + net.Miner.Client, 1, time.Second*5, + ) + require.NoError(t.t, err) + + t.Logf("Dave justice txid: %v", daveJusticeTxid) + + // Next, we'll mine a block to confirm Dave's justice transaction. + mineBlocks(t, net, 1, 1) + + // Dave should now have a transfer for his justice transaction. + daveJusticeTransfer := locateAssetTransfers( + t.t, daveTap, *daveJusticeTxid[0], + ) + + t.Logf("Dave justice transfer: %v", + toProtoJSON(t.t, daveJusticeTransfer)) + + // Dave should claim all of the asset balance that was put into the + // channel. + daveBalance := uint64(fundingAmount) + + itest.AssertBalances( + t.t, daveTap, daveBalance, itest.WithAssetID(assetID), + itest.WithNumUtxos(2), + ) + + t.Logf("Dave balance after breach: %d", daveBalance) + + require.Len(t.t, daveJusticeTransfer.Outputs, 2) + assetOutput = daveJusticeTransfer.Outputs[0] + op, err = wire.NewOutPointFromString(assetOutput.Anchor.Outpoint) + require.NoError(t.t, err) + + // We'll now also export the proof for the justice transaction. Here we + // expect to find STXO proofs, as the sweeping party is an upgraded node + // that supports it. + proofResp, err = daveTap.ExportProof(ctx, &taprpc.ExportProofRequest{ + AssetId: assetID, + ScriptKey: assetOutput.ScriptKey, + Outpoint: &taprpc.OutPoint{ + Txid: op.Hash[:], + OutputIndex: op.Index, + }, + }) + require.NoError(t.t, err) + + proofFile, err = proof.DecodeFile(proofResp.RawProofFile) + require.NoError(t.t, err) + require.Equal(t.t, 4, proofFile.NumProofs()) + latestProof, err = proofFile.LastProof() + require.NoError(t.t, err) + + // This proof should contain the STXO exclusion proofs + stxoProofs = latestProof.InclusionProof.CommitmentProof.STXOProofs + require.NotNil(t.t, stxoProofs) +} + // testCustomChannelsLiquidityEdgeCasesCore is the core logic of the liquidity // edge cases. This test goes through certain scenarios that expose edge cases // and behaviors that proved to be buggy in the past and have been directly @@ -4219,16 +4559,24 @@ func runCustomChannelsHtlcForceClose(ctx context.Context, t *harnessTest, // First, we'll send over some funds from Alice to Bob, as we want Bob // to be able to extend HTLCs in the other direction. const ( - numPayments = 10 - keySendAmount = 2_500 + numPayments = 10 + keySendAssetAmount = 2_500 + keySendSatAmount = 5_000 ) for i := 0; i < numPayments; i++ { sendAssetKeySendPayment( - t.t, alice, bob, keySendAmount, assetID, + t.t, alice, bob, keySendAssetAmount, assetID, fn.None[int64](), ) } + // With noop HTLCs implemented the sats balance of Bob will only + // increase up to the reserve amount. Let's make a direct non-asset + // keysend to make sure the sats balance is also enough. + sendKeySendPayment(t.t, alice, bob, keySendSatAmount) + + logBalance(t.t, nodes, assetID, "after keysends to Bob") + // Now that both parties have some funds, we'll move onto the main test. // // We'll make 2 hodl invoice for each peer, so 4 total. From Alice's @@ -4612,7 +4960,7 @@ func testCustomChannelsDecodeAssetInvoice(ctx context.Context, } const decimalDisplay = 6 - itestAsset = &mintrpc.MintAsset{ + tcAsset := &mintrpc.MintAsset{ AssetType: taprpc.AssetType_NORMAL, Name: "USD", AssetMeta: usdMetaData, @@ -4628,7 +4976,7 @@ func testCustomChannelsDecodeAssetInvoice(ctx context.Context, t.t, t.lndHarness.Miner.Client, aliceTap, []*mintrpc.MintAssetRequest{ { - Asset: itestAsset, + Asset: tcAsset, }, }, ) diff --git a/itest/litd_node.go b/itest/litd_node.go index f07c505f0..b01f0cd51 100644 --- a/itest/litd_node.go +++ b/itest/litd_node.go @@ -652,7 +652,10 @@ func renameFile(fromFileName, toFileName string) { func (hn *HarnessNode) overrideFlagsAndBinary(backwardCompat map[string]string, binary string, args []LitArgOption) (string, []LitArgOption) { - if backwardCompat == nil { + noopArg := WithLitArg("taproot-assets.channel.noop-htlcs", "") + + if _, ok := backwardCompat[hn.Name()]; !ok { + args = append(args, noopArg) return binary, args } diff --git a/itest/litd_test_list_on_test.go b/itest/litd_test_list_on_test.go index 9d5e325ec..2b553cc27 100644 --- a/itest/litd_test_list_on_test.go +++ b/itest/litd_test_list_on_test.go @@ -150,4 +150,12 @@ var allTestCases = []*testCase{ "Alice": "v0.14.1-alpha", }, }, + { + name: "custom channels v1 upgrade", + test: testCustomChannelsV1Upgrade, + noAliceBob: true, + backwardCompat: map[string]string{ + "Charlie": "v0.15.0-alpha", + }, + }, } diff --git a/itest/network_harness.go b/itest/network_harness.go index 4b24fede1..1469c5ec6 100644 --- a/itest/network_harness.go +++ b/itest/network_harness.go @@ -777,13 +777,64 @@ func (n *NetworkHarness) RestartNodeNoUnlock(node *HarnessNode, ) } +// suspendCfg contains any configurations related to suspending a node. This may +// change the way the node starts up again. +type suspendCfg struct { + upgrade bool + downgrade string +} + +// SuspendOption is a functional option that may change the suspend +// configuration. +type SuspendOption func(cfg *suspendCfg) + +// WithUpgrade is a functional option which indicates that the node should be +// upgraded to the latest version of LiT. +func WithUpgrade() SuspendOption { + return func(cfg *suspendCfg) { + cfg.upgrade = true + } +} + +// WithDowngrade is a functional option which indicates that the node should be +// downgraded to the defined LiT version. +func WithDowngrade(version string) SuspendOption { + return func(cfg *suspendCfg) { + cfg.downgrade = version + } +} + // SuspendNode stops the given node and returns a callback that can be used to -// start it again. -func (n *NetworkHarness) SuspendNode(node *HarnessNode) (func() error, error) { +// start it again. If the upgrade flag is set then any backwards compatibility +// version that the node was running previously will be eliminated, forcing it +// to use the current (latest) build. +func (n *NetworkHarness) SuspendNode(node *HarnessNode, + opts ...SuspendOption) (func() error, error) { + if err := node.Stop(); err != nil { return nil, err } + cfg := &suspendCfg{} + + for _, opt := range opts { + opt(cfg) + } + + // If the upgrade flag was set, delete any entry from the backwards + // compatibility map. This will force the node to use the latest build + // of LiT. + if cfg.upgrade { + delete(n.backwardCompat, node.Name()) + } + + // If a downgrade version was defined, update the backwards + // compatibility entry with that version for this LiT node. This will + // force the node to start up using the defined version. + if cfg.downgrade != "" { + n.backwardCompat[node.Name()] = cfg.downgrade + } + restart := func() error { return node.Start( n.litdBinary, n.backwardCompat, n.lndErrorChan, true, @@ -822,8 +873,10 @@ func (n *NetworkHarness) StopNode(node *HarnessNode) error { } // StopAndBackupDB backs up the database of the target node. -func (n *NetworkHarness) StopAndBackupDB(node *HarnessNode) error { - restart, err := n.SuspendNode(node) +func (n *NetworkHarness) StopAndBackupDB(node *HarnessNode, + opts ...SuspendOption) error { + + restart, err := n.SuspendNode(node, opts...) if err != nil { return err } @@ -847,8 +900,10 @@ func (n *NetworkHarness) StopAndBackupDB(node *HarnessNode) error { // StopAndRestoreDB stops the target node, restores the database from a backup // and starts the node again. -func (n *NetworkHarness) StopAndRestoreDB(node *HarnessNode) error { - restart, err := n.SuspendNode(node) +func (n *NetworkHarness) StopAndRestoreDB(node *HarnessNode, + opts ...SuspendOption) error { + + restart, err := n.SuspendNode(node, opts...) if err != nil { return err } diff --git a/proto/lnd.proto b/proto/lnd.proto index 03c4b9ab5..0f8d4e575 100644 --- a/proto/lnd.proto +++ b/proto/lnd.proto @@ -341,6 +341,13 @@ service Lightning { */ rpc SubscribeInvoices (InvoiceSubscription) returns (stream Invoice); + /* lncli: `deletecanceledinvoice` + DeleteCanceledInvoice removes a canceled invoice from the database. If the + invoice is not in the canceled state, an error will be returned. + */ + rpc DeleteCanceledInvoice (DelCanceledInvoiceReq) + returns (DelCanceledInvoiceResp); + /* lncli: `decodepayreq` DecodePayReq takes an encoded payment request string and attempts to decode it, returning a full description of the conditions encoded within the @@ -548,9 +555,10 @@ service Lightning { returns (ListPermissionsResponse); /* - CheckMacaroonPermissions checks whether a request follows the constraints - imposed on the macaroon and that the macaroon is authorized to follow the - provided permissions. + CheckMacaroonPermissions checks whether the provided macaroon contains all + the provided permissions. If the macaroon is valid (e.g. all caveats are + satisfied), and all permissions provided in the request are met, then + this RPC returns true. */ rpc CheckMacaroonPermissions (CheckMacPermRequest) returns (CheckMacPermResponse); @@ -1911,6 +1919,7 @@ message Peer { repeated TimestampedError errors = 12; /* + This field is populated when the peer has at least one channel with us. The number of times we have recorded this peer going offline or coming online, recorded across restarts. Note that this value is decreased over time if the peer has not recently flapped, so that we can forgive peers @@ -1919,6 +1928,7 @@ message Peer { int32 flap_count = 13; /* + This field is populated when the peer has at least one channel with us. The timestamp of the last flap we observed for this peer. If this value is zero, we have not observed any flaps for this peer. */ @@ -2074,13 +2084,6 @@ message Chain { string network = 2; } -message ConfirmationUpdate { - bytes block_sha = 1; - int32 block_height = 2; - - uint32 num_confs_left = 3; -} - message ChannelOpenUpdate { ChannelPoint channel_point = 1; } @@ -2847,6 +2850,25 @@ message PendingChannelsResponse { // very likely canceled the funding and the channel will never become // fully operational. int32 funding_expiry_blocks = 3; + + // The number of blocks remaining until the channel status changes from + // pending to active. A value of 0 indicates that the channel is now + // active. + // + // "Active" here means both channel peers have the channel marked OPEN + // and can immediately start using it. For public channels, this does + // not imply a channel_announcement has been gossiped. It only becomes + // public on the network after 6 on‐chain confirmations. + // See BOLT07 "Routing Gossip": + // https://github.com/lightning/bolts/blob/master/07-routing-gossip.md + // + // ZeroConf channels bypass the pending state entirely: they are marked + // active immediately upon creation, so they never show up as "pending". + uint32 confirmations_until_active = 7; + + // The confirmation height records the block height at which the funding + // transaction was first confirmed. + uint32 confirmation_height = 8; } message WaitingCloseChannel { @@ -3165,10 +3187,10 @@ message QueryRoutesRequest { map dest_custom_records = 13; /* - The channel id of the channel that must be taken to the first hop. If zero, - any channel may be used. + Deprecated, use outgoing_chan_ids. The channel id of the channel that must + be taken to the first hop. If zero, any channel may be used. */ - uint64 outgoing_chan_id = 14 [jstype = JS_STRING]; + uint64 outgoing_chan_id = 14 [jstype = JS_STRING, deprecated = true]; /* The pubkey of the last hop of the route. If empty, any hop may be used. @@ -3203,6 +3225,12 @@ message QueryRoutesRequest { only, to 1 to optimize for reliability only or a value inbetween for a mix. */ double time_pref = 18; + + /* + The channel ids of the channels allowed for the first hop. If empty, any + channel may be used. + */ + repeated uint64 outgoing_chan_ids = 20 [jstype = JS_STRING]; } message NodePair { @@ -3423,6 +3451,10 @@ message NodeInfoRequest { // If true, will include all known channels associated with the node. bool include_channels = 2; + + // If true, will include announcements' signatures into ChannelEdge. + // Depends on include_channels. + bool include_auth_proof = 3; } message NodeInfo { @@ -3476,13 +3508,39 @@ message RoutingPolicy { uint64 max_htlc_msat = 6 [jstype = JS_STRING]; uint32 last_update = 7; - // Custom channel update tlv records. + // Custom channel update tlv records. These are customized fields that are + // not defined by LND and cannot be extracted. map custom_records = 8; int32 inbound_fee_base_msat = 9; int32 inbound_fee_rate_milli_msat = 10; } +/* +ChannelAuthProof is the authentication proof (the signature portion) for a +channel. Using the four signatures contained in the struct, and some +auxiliary knowledge (the funding script, node identities, and outpoint) nodes +on the network are able to validate the authenticity and existence of a +channel. +*/ +message ChannelAuthProof { + // node_sig1 are the raw bytes of the first node signature encoded + // in DER format. + bytes node_sig1 = 1; + + // bitcoin_sig1 are the raw bytes of the first bitcoin signature of the + // MultiSigKey key of the channel encoded in DER format. + bytes bitcoin_sig1 = 2; + + // node_sig2 are the raw bytes of the second node signature encoded + // in DER format. + bytes node_sig2 = 3; + + // bitcoin_sig2 are the raw bytes of the second bitcoin signature of the + // MultiSigKey key of the channel encoded in DER format. + bytes bitcoin_sig2 = 4; +} + /* A fully authenticated channel along with all its unique attributes. Once an authenticated channel announcement has been processed on the network, @@ -3511,6 +3569,13 @@ message ChannelEdge { // Custom channel announcement tlv records. map custom_records = 9; + + // Authentication proof for this channel. This proof contains a set of + // signatures binding four identities, which attests to the legitimacy of + // the advertised channel. This only is available for advertised channels. + // This field is not filled by default. Pass include_auth_proof flag to + // DescribeGraph, GetNodeInfo or GetChanInfo to get this data. + ChannelAuthProof auth_proof = 10; } message ChannelGraphRequest { @@ -3520,6 +3585,9 @@ message ChannelGraphRequest { channels, and public channels that are not yet announced to the network. */ bool include_unannounced = 1; + + // If true, will include announcements' signatures into ChannelEdge. + bool include_auth_proof = 2; } // Returns a new instance of the directed channel graph. @@ -3571,6 +3639,9 @@ message ChanInfoRequest { // The channel point of the channel in format funding_txid:output_index. If // chan_id is specified, this field is ignored. string chan_point = 2; + + // If true, will include announcements' signatures into ChannelEdge. + bool include_auth_proof = 3; } message NetworkInfoRequest { @@ -4004,6 +4075,12 @@ message BlindedPathConfig { blinded paths. */ repeated bytes node_omission_list = 4; + + /* + The chained channels list specified via channel id (separated by commas), + starting from a channel owned by the receiver node. + */ + repeated uint64 incoming_channel_list = 5 [jstype = JS_STRING]; } enum InvoiceHTLCState { @@ -4185,6 +4262,16 @@ message InvoiceSubscription { uint64 settle_index = 2 [jstype = JS_STRING]; } +message DelCanceledInvoiceReq { + // Invoice payment hash to delete. + string invoice_hash = 1; +} + +message DelCanceledInvoiceResp { + // The status of the delete operation. + string status = 1; +} + enum PaymentFailureReason { /* Payment isn't failed (yet). @@ -4667,6 +4754,14 @@ message ForwardingHistoryRequest { // Informs the server if the peer alias should be looked up for each // forwarding event. bool peer_alias_lookup = 5; + + // List of incoming channel ids to filter htlcs received from a + // particular channel + repeated uint64 incoming_chan_ids = 6 [jstype = JS_STRING]; + + // List of outgoing channel ids to filter htlcs being forwarded to a + // particular channel + repeated uint64 outgoing_chan_ids = 7 [jstype = JS_STRING]; } message ForwardingEvent { // Timestamp is the time (unix epoch offset) that this circuit was @@ -5051,9 +5146,37 @@ message Op { } message CheckMacPermRequest { + // The macaroon to check permissions for, serialized in binary format. For + // a macaroon to be valid, it must have been issued by lnd, must succeed all + // caveat conditions, and must contain all of the permissions specified in + // the permissions field. bytes macaroon = 1; + + // The list of permissions the macaroon should be checked against. Only if + // the macaroon contains all of these permissions, it is considered valid. + // If the list of permissions given is empty, then the macaroon is + // considered valid only based on issuance authority and caveat validity. + // An empty list of permissions is therefore equivalent to saying "skip + // checking permissions" (unless check_default_perms_from_full_method is + // specified). repeated MacaroonPermission permissions = 2; + + // The RPC method to check the macaroon against. This is only used if there + // are custom `uri:./` permissions in + // the permission list above. To check a macaroon against the list of + // permissions of a certain RPC method, query the `ListPermissions` RPC + // first, extract the permissions for the method, and then pass them in the + // `permissions` field above. string fullMethod = 3; + + // If this field is set to true, then the permissions list above MUST be + // empty. The default permissions for the provided fullMethod will be used + // to check the macaroon. This is equivalent to looking up the permissions + // for a method in the `ListPermissions` RPC and then calling this RPC with + // the permission list returned from that call. Without this flag, the list + // of permissions must be non-empty for the check to actually perform a + // permission check. + bool check_default_perms_from_full_method = 4; } message CheckMacPermResponse { diff --git a/proto/loop.proto b/proto/loop.proto index 7ba9ab95f..f05108546 100644 --- a/proto/loop.proto +++ b/proto/loop.proto @@ -775,7 +775,10 @@ message OutTermsResponse { message QuoteRequest { /* - The amount to swap in satoshis. + The amount to swap in satoshis. In the loop-in case this can either be taken + from the connected lnd wallet or coin-selected from static address deposits. + This is controlled by the select_deposits flag. If deposit_outpoints are + specified, the coins are taken out of that. */ int64 amt = 1 [jstype = JS_STRING]; @@ -823,8 +826,9 @@ message QuoteRequest { /* Static address deposit outpoints that will be quoted for. This option only - pertains to loop in swaps. Either this or the amt parameter can be set at - the same time. + pertains to loop in swaps. If the amt field is set as well the respective + partial amount will be swapped. Cannot be used in conjunction with + auto_select_deposits. */ repeated string deposit_outpoints = 8; @@ -833,6 +837,14 @@ message QuoteRequest { be returned in the specified asset. */ AssetLoopOutRequest asset_info = 9; + + /* + In the legacy loop-in case this field must be set to false. + If set to true, the swap amount will be automatically selected from the + static address deposits. If set to true, deposit_outpoints must be empty. + This option only pertains to loop in swaps. + */ + bool auto_select_deposits = 10; } message InQuoteResponse { @@ -1910,6 +1922,12 @@ message Deposit { loop-in swap anymore. */ int64 blocks_until_expiry = 6 [jstype = JS_STRING]; + + /* + The swap hash of the swap that this deposit is part of. This field is only + set if the deposit is part of a loop-in swap. + */ + bytes swap_hash = 7; } message StaticAddressWithdrawal { @@ -1971,6 +1989,11 @@ message StaticAddressLoopInSwap { fees. */ int64 payment_request_amount_satoshis = 5 [jstype = JS_STRING]; + + /* + The deposits that were used for this swap. + */ + repeated Deposit deposits = 6; } enum StaticAddressLoopInSwapState { @@ -2078,6 +2101,21 @@ message StaticAddressLoopInRequest { side and the client can retry the swap with different parameters. */ uint32 payment_timeout_seconds = 8; + + /* + The optional swap amount the client is attempting to swap. It can be + provided in combination with the outpoints or separately. If provided with + outpoints the client takes out this amount from the sum of provided + outpoints and sends the change back to the static address. If the amount is + provided without outpoints, the client will select deposits automatically. + The coin selection strategy is simplified by sorting all available deposits + in descending order by amount, and equal amounts in ascending order of + blocks until expiry, and then selecting the largest deposits first until the + amount is reached. The change will be sent back to the static address. If a + subset of outpoints suffice to cover the specified amount the swap will be + canceled to allow the user to safe on transaction fees. + */ + int64 amount = 9 [jstype = JS_STRING]; } message StaticAddressLoopInResponse { diff --git a/terminal.go b/terminal.go index 5eaa3c24a..66dfcf635 100644 --- a/terminal.go +++ b/terminal.go @@ -1470,6 +1470,9 @@ func (g *LightningTerminal) buildAuxComponents( AuxContractResolver: fn.Some[lnwallet.AuxContractResolver]( tapd, ), + AuxChannelNegotiator: fn.Some[lnwallet.AuxChannelNegotiator]( + tapd, + ), }, nil }