invoicesrpc: add SettleInvoice

This commit is contained in:
Joost Jager 2019-02-11 12:02:39 +01:00
parent 0823c79e4e
commit f450929b65
No known key found for this signature in database
GPG Key ID: A61B9D4C393C59C7
3 changed files with 187 additions and 39 deletions

@ -26,7 +26,7 @@ var _ = math.Inf
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
type CancelInvoiceMsg struct { type CancelInvoiceMsg struct {
// / Hash corresponding to the invoice to cancel. // / Hash corresponding to the (hold) invoice to cancel.
PaymentHash []byte `protobuf:"bytes,1,opt,name=payment_hash,json=paymentHash,proto3" json:"payment_hash,omitempty"` PaymentHash []byte `protobuf:"bytes,1,opt,name=payment_hash,json=paymentHash,proto3" json:"payment_hash,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
@ -37,7 +37,7 @@ func (m *CancelInvoiceMsg) Reset() { *m = CancelInvoiceMsg{} }
func (m *CancelInvoiceMsg) String() string { return proto.CompactTextString(m) } func (m *CancelInvoiceMsg) String() string { return proto.CompactTextString(m) }
func (*CancelInvoiceMsg) ProtoMessage() {} func (*CancelInvoiceMsg) ProtoMessage() {}
func (*CancelInvoiceMsg) Descriptor() ([]byte, []int) { func (*CancelInvoiceMsg) Descriptor() ([]byte, []int) {
return fileDescriptor_invoices_1388f29ea95fbe6f, []int{0} return fileDescriptor_invoices_faecc7e411e82f9d, []int{0}
} }
func (m *CancelInvoiceMsg) XXX_Unmarshal(b []byte) error { func (m *CancelInvoiceMsg) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CancelInvoiceMsg.Unmarshal(m, b) return xxx_messageInfo_CancelInvoiceMsg.Unmarshal(m, b)
@ -74,7 +74,7 @@ func (m *CancelInvoiceResp) Reset() { *m = CancelInvoiceResp{} }
func (m *CancelInvoiceResp) String() string { return proto.CompactTextString(m) } func (m *CancelInvoiceResp) String() string { return proto.CompactTextString(m) }
func (*CancelInvoiceResp) ProtoMessage() {} func (*CancelInvoiceResp) ProtoMessage() {}
func (*CancelInvoiceResp) Descriptor() ([]byte, []int) { func (*CancelInvoiceResp) Descriptor() ([]byte, []int) {
return fileDescriptor_invoices_1388f29ea95fbe6f, []int{1} return fileDescriptor_invoices_faecc7e411e82f9d, []int{1}
} }
func (m *CancelInvoiceResp) XXX_Unmarshal(b []byte) error { func (m *CancelInvoiceResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CancelInvoiceResp.Unmarshal(m, b) return xxx_messageInfo_CancelInvoiceResp.Unmarshal(m, b)
@ -131,7 +131,7 @@ func (m *AddHoldInvoiceRequest) Reset() { *m = AddHoldInvoiceRequest{} }
func (m *AddHoldInvoiceRequest) String() string { return proto.CompactTextString(m) } func (m *AddHoldInvoiceRequest) String() string { return proto.CompactTextString(m) }
func (*AddHoldInvoiceRequest) ProtoMessage() {} func (*AddHoldInvoiceRequest) ProtoMessage() {}
func (*AddHoldInvoiceRequest) Descriptor() ([]byte, []int) { func (*AddHoldInvoiceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_invoices_1388f29ea95fbe6f, []int{2} return fileDescriptor_invoices_faecc7e411e82f9d, []int{2}
} }
func (m *AddHoldInvoiceRequest) XXX_Unmarshal(b []byte) error { func (m *AddHoldInvoiceRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AddHoldInvoiceRequest.Unmarshal(m, b) return xxx_messageInfo_AddHoldInvoiceRequest.Unmarshal(m, b)
@ -229,7 +229,7 @@ func (m *AddHoldInvoiceResp) Reset() { *m = AddHoldInvoiceResp{} }
func (m *AddHoldInvoiceResp) String() string { return proto.CompactTextString(m) } func (m *AddHoldInvoiceResp) String() string { return proto.CompactTextString(m) }
func (*AddHoldInvoiceResp) ProtoMessage() {} func (*AddHoldInvoiceResp) ProtoMessage() {}
func (*AddHoldInvoiceResp) Descriptor() ([]byte, []int) { func (*AddHoldInvoiceResp) Descriptor() ([]byte, []int) {
return fileDescriptor_invoices_1388f29ea95fbe6f, []int{3} return fileDescriptor_invoices_faecc7e411e82f9d, []int{3}
} }
func (m *AddHoldInvoiceResp) XXX_Unmarshal(b []byte) error { func (m *AddHoldInvoiceResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AddHoldInvoiceResp.Unmarshal(m, b) return xxx_messageInfo_AddHoldInvoiceResp.Unmarshal(m, b)
@ -256,11 +256,82 @@ func (m *AddHoldInvoiceResp) GetPaymentRequest() string {
return "" return ""
} }
type SettleInvoiceMsg struct {
// / Externally discovered pre-image that should be used to settle the hold invoice.
Preimage []byte `protobuf:"bytes,1,opt,name=preimage,proto3" json:"preimage,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *SettleInvoiceMsg) Reset() { *m = SettleInvoiceMsg{} }
func (m *SettleInvoiceMsg) String() string { return proto.CompactTextString(m) }
func (*SettleInvoiceMsg) ProtoMessage() {}
func (*SettleInvoiceMsg) Descriptor() ([]byte, []int) {
return fileDescriptor_invoices_faecc7e411e82f9d, []int{4}
}
func (m *SettleInvoiceMsg) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SettleInvoiceMsg.Unmarshal(m, b)
}
func (m *SettleInvoiceMsg) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_SettleInvoiceMsg.Marshal(b, m, deterministic)
}
func (dst *SettleInvoiceMsg) XXX_Merge(src proto.Message) {
xxx_messageInfo_SettleInvoiceMsg.Merge(dst, src)
}
func (m *SettleInvoiceMsg) XXX_Size() int {
return xxx_messageInfo_SettleInvoiceMsg.Size(m)
}
func (m *SettleInvoiceMsg) XXX_DiscardUnknown() {
xxx_messageInfo_SettleInvoiceMsg.DiscardUnknown(m)
}
var xxx_messageInfo_SettleInvoiceMsg proto.InternalMessageInfo
func (m *SettleInvoiceMsg) GetPreimage() []byte {
if m != nil {
return m.Preimage
}
return nil
}
type SettleInvoiceResp struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *SettleInvoiceResp) Reset() { *m = SettleInvoiceResp{} }
func (m *SettleInvoiceResp) String() string { return proto.CompactTextString(m) }
func (*SettleInvoiceResp) ProtoMessage() {}
func (*SettleInvoiceResp) Descriptor() ([]byte, []int) {
return fileDescriptor_invoices_faecc7e411e82f9d, []int{5}
}
func (m *SettleInvoiceResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SettleInvoiceResp.Unmarshal(m, b)
}
func (m *SettleInvoiceResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_SettleInvoiceResp.Marshal(b, m, deterministic)
}
func (dst *SettleInvoiceResp) XXX_Merge(src proto.Message) {
xxx_messageInfo_SettleInvoiceResp.Merge(dst, src)
}
func (m *SettleInvoiceResp) XXX_Size() int {
return xxx_messageInfo_SettleInvoiceResp.Size(m)
}
func (m *SettleInvoiceResp) XXX_DiscardUnknown() {
xxx_messageInfo_SettleInvoiceResp.DiscardUnknown(m)
}
var xxx_messageInfo_SettleInvoiceResp proto.InternalMessageInfo
func init() { func init() {
proto.RegisterType((*CancelInvoiceMsg)(nil), "invoicesrpc.CancelInvoiceMsg") proto.RegisterType((*CancelInvoiceMsg)(nil), "invoicesrpc.CancelInvoiceMsg")
proto.RegisterType((*CancelInvoiceResp)(nil), "invoicesrpc.CancelInvoiceResp") proto.RegisterType((*CancelInvoiceResp)(nil), "invoicesrpc.CancelInvoiceResp")
proto.RegisterType((*AddHoldInvoiceRequest)(nil), "invoicesrpc.AddHoldInvoiceRequest") proto.RegisterType((*AddHoldInvoiceRequest)(nil), "invoicesrpc.AddHoldInvoiceRequest")
proto.RegisterType((*AddHoldInvoiceResp)(nil), "invoicesrpc.AddHoldInvoiceResp") proto.RegisterType((*AddHoldInvoiceResp)(nil), "invoicesrpc.AddHoldInvoiceResp")
proto.RegisterType((*SettleInvoiceMsg)(nil), "invoicesrpc.SettleInvoiceMsg")
proto.RegisterType((*SettleInvoiceResp)(nil), "invoicesrpc.SettleInvoiceResp")
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
@ -289,6 +360,10 @@ type InvoicesClient interface {
// AddHoldInvoice creates a hold invoice. It ties the invoice to the hash // AddHoldInvoice creates a hold invoice. It ties the invoice to the hash
// supplied in the request. // supplied in the request.
AddHoldInvoice(ctx context.Context, in *AddHoldInvoiceRequest, opts ...grpc.CallOption) (*AddHoldInvoiceResp, error) AddHoldInvoice(ctx context.Context, in *AddHoldInvoiceRequest, opts ...grpc.CallOption) (*AddHoldInvoiceResp, error)
// *
// SettleInvoice settles an accepted invoice. If the invoice is already
// settled, this call will succeed.
SettleInvoice(ctx context.Context, in *SettleInvoiceMsg, opts ...grpc.CallOption) (*SettleInvoiceResp, error)
} }
type invoicesClient struct { type invoicesClient struct {
@ -349,6 +424,15 @@ func (c *invoicesClient) AddHoldInvoice(ctx context.Context, in *AddHoldInvoiceR
return out, nil return out, nil
} }
func (c *invoicesClient) SettleInvoice(ctx context.Context, in *SettleInvoiceMsg, opts ...grpc.CallOption) (*SettleInvoiceResp, error) {
out := new(SettleInvoiceResp)
err := c.cc.Invoke(ctx, "/invoicesrpc.Invoices/SettleInvoice", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// InvoicesServer is the server API for Invoices service. // InvoicesServer is the server API for Invoices service.
type InvoicesServer interface { type InvoicesServer interface {
// * // *
@ -365,6 +449,10 @@ type InvoicesServer interface {
// AddHoldInvoice creates a hold invoice. It ties the invoice to the hash // AddHoldInvoice creates a hold invoice. It ties the invoice to the hash
// supplied in the request. // supplied in the request.
AddHoldInvoice(context.Context, *AddHoldInvoiceRequest) (*AddHoldInvoiceResp, error) AddHoldInvoice(context.Context, *AddHoldInvoiceRequest) (*AddHoldInvoiceResp, error)
// *
// SettleInvoice settles an accepted invoice. If the invoice is already
// settled, this call will succeed.
SettleInvoice(context.Context, *SettleInvoiceMsg) (*SettleInvoiceResp, error)
} }
func RegisterInvoicesServer(s *grpc.Server, srv InvoicesServer) { func RegisterInvoicesServer(s *grpc.Server, srv InvoicesServer) {
@ -428,6 +516,24 @@ func _Invoices_AddHoldInvoice_Handler(srv interface{}, ctx context.Context, dec
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _Invoices_SettleInvoice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(SettleInvoiceMsg)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(InvoicesServer).SettleInvoice(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/invoicesrpc.Invoices/SettleInvoice",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(InvoicesServer).SettleInvoice(ctx, req.(*SettleInvoiceMsg))
}
return interceptor(ctx, in, info, handler)
}
var _Invoices_serviceDesc = grpc.ServiceDesc{ var _Invoices_serviceDesc = grpc.ServiceDesc{
ServiceName: "invoicesrpc.Invoices", ServiceName: "invoicesrpc.Invoices",
HandlerType: (*InvoicesServer)(nil), HandlerType: (*InvoicesServer)(nil),
@ -440,6 +546,10 @@ var _Invoices_serviceDesc = grpc.ServiceDesc{
MethodName: "AddHoldInvoice", MethodName: "AddHoldInvoice",
Handler: _Invoices_AddHoldInvoice_Handler, Handler: _Invoices_AddHoldInvoice_Handler,
}, },
{
MethodName: "SettleInvoice",
Handler: _Invoices_SettleInvoice_Handler,
},
}, },
Streams: []grpc.StreamDesc{ Streams: []grpc.StreamDesc{
{ {
@ -452,38 +562,40 @@ var _Invoices_serviceDesc = grpc.ServiceDesc{
} }
func init() { func init() {
proto.RegisterFile("invoicesrpc/invoices.proto", fileDescriptor_invoices_1388f29ea95fbe6f) proto.RegisterFile("invoicesrpc/invoices.proto", fileDescriptor_invoices_faecc7e411e82f9d)
} }
var fileDescriptor_invoices_1388f29ea95fbe6f = []byte{ var fileDescriptor_invoices_faecc7e411e82f9d = []byte{
// 450 bytes of a gzipped FileDescriptorProto // 490 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x4f, 0x8f, 0xd3, 0x3e, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0x4f, 0x8f, 0xd3, 0x3c,
0x10, 0x55, 0xb6, 0xdd, 0x6e, 0xeb, 0xec, 0xee, 0xaf, 0xbf, 0x01, 0x56, 0x51, 0xc4, 0x9f, 0x10, 0x10, 0xc6, 0x95, 0xb6, 0xdb, 0x6d, 0xa7, 0xbb, 0xfb, 0xf6, 0x35, 0xb0, 0x8a, 0x22, 0xfe, 0x84,
0x71, 0x88, 0x38, 0x24, 0xd0, 0x15, 0xd7, 0x95, 0x80, 0x4b, 0x39, 0x80, 0x50, 0x56, 0x5c, 0xb8, 0x88, 0x43, 0xc4, 0x21, 0x81, 0xae, 0xb8, 0xae, 0x04, 0x5c, 0xca, 0x01, 0x84, 0x52, 0x71, 0xe1,
0x54, 0x4e, 0x62, 0x12, 0x6b, 0x5d, 0xdb, 0xd8, 0x4e, 0x61, 0x3f, 0x15, 0x9f, 0x8d, 0x6f, 0x80, 0x52, 0xb9, 0x89, 0x49, 0xac, 0x75, 0x6d, 0x63, 0xbb, 0x85, 0xfd, 0x54, 0x7c, 0x06, 0xbe, 0x19,
0xe2, 0xb8, 0x90, 0x94, 0x3f, 0xb7, 0x99, 0x37, 0xf3, 0x9e, 0x66, 0xde, 0x0c, 0x0a, 0x29, 0xdf, 0x8a, 0xe3, 0x96, 0x24, 0x0b, 0xdc, 0x66, 0x1e, 0xcf, 0x3c, 0x19, 0xff, 0x3c, 0x81, 0x80, 0xf2,
0x09, 0x5a, 0x12, 0xad, 0x64, 0x99, 0xed, 0xe3, 0x54, 0x2a, 0x61, 0x04, 0xf8, 0x83, 0x5a, 0x78, 0xbd, 0xa0, 0x39, 0xd1, 0x4a, 0xe6, 0xe9, 0x21, 0x4e, 0xa4, 0x12, 0x46, 0xa0, 0x59, 0xeb, 0x2c,
0xbf, 0x16, 0xa2, 0x66, 0x24, 0xc3, 0x92, 0x66, 0x98, 0x73, 0x61, 0xb0, 0xa1, 0x82, 0xbb, 0xd6, 0x78, 0x58, 0x0a, 0x51, 0x32, 0x92, 0x62, 0x49, 0x53, 0xcc, 0xb9, 0x30, 0xd8, 0x50, 0xc1, 0x5d,
0x70, 0xa1, 0x64, 0xd9, 0x87, 0xf1, 0x0b, 0xb4, 0x7c, 0x8d, 0x79, 0x49, 0xd8, 0x9b, 0x9e, 0xfd, 0x69, 0x30, 0x55, 0x32, 0x6f, 0xc2, 0xe8, 0x15, 0xcc, 0xdf, 0x62, 0x9e, 0x13, 0xf6, 0xae, 0xe9,
0x56, 0xd7, 0xf0, 0x18, 0x9d, 0x4a, 0x7c, 0xbb, 0x25, 0xdc, 0x6c, 0x1a, 0xac, 0x9b, 0xc0, 0x8b, 0x7e, 0xaf, 0x4b, 0xf4, 0x14, 0xce, 0x24, 0xbe, 0xdd, 0x12, 0x6e, 0xd6, 0x15, 0xd6, 0x95, 0xef,
0xbc, 0xe4, 0x34, 0xf7, 0x1d, 0xb6, 0xc6, 0xba, 0x89, 0xef, 0xa0, 0xff, 0x47, 0xb4, 0x9c, 0x68, 0x85, 0x5e, 0x7c, 0x96, 0xcd, 0x9c, 0xb6, 0xc4, 0xba, 0x8a, 0xee, 0xc1, 0xff, 0x9d, 0xb6, 0x8c,
0x19, 0x7f, 0x3b, 0x42, 0xf7, 0x5e, 0x56, 0xd5, 0x5a, 0xb0, 0xea, 0x27, 0xfc, 0xb9, 0x25, 0xda, 0x68, 0x19, 0xfd, 0x18, 0xc0, 0x83, 0xd7, 0x45, 0xb1, 0x14, 0xac, 0x38, 0xca, 0x5f, 0x77, 0x44,
0x00, 0xa0, 0xe9, 0x96, 0x6c, 0x85, 0x55, 0x5a, 0xe4, 0x36, 0xee, 0x30, 0xab, 0x7e, 0x64, 0xd5, 0x1b, 0x84, 0x60, 0xb4, 0x25, 0x5b, 0x61, 0x9d, 0xa6, 0x99, 0x8d, 0x6b, 0xcd, 0xba, 0x0f, 0xac,
0x6d, 0x0c, 0x77, 0xd1, 0xf1, 0x0e, 0xb3, 0x96, 0x04, 0x93, 0xc8, 0x4b, 0x26, 0x79, 0x9f, 0xc0, 0xbb, 0x8d, 0xd1, 0x7d, 0x38, 0xd9, 0x63, 0xb6, 0x23, 0xfe, 0x30, 0xf4, 0xe2, 0x61, 0xd6, 0x24,
0x53, 0xb4, 0xac, 0x88, 0x2e, 0x15, 0x95, 0xdd, 0x12, 0xfd, 0x4c, 0x53, 0xcb, 0xfa, 0x0d, 0x87, 0xe8, 0x39, 0xcc, 0x0b, 0xa2, 0x73, 0x45, 0x65, 0x7d, 0x89, 0x66, 0xa6, 0x91, 0xed, 0xba, 0xa3,
0x0b, 0x34, 0x23, 0x5f, 0x25, 0x55, 0xb7, 0xc1, 0xb1, 0x95, 0x70, 0x19, 0x3c, 0x41, 0x67, 0x9f, 0xa3, 0x4b, 0x18, 0x93, 0xef, 0x92, 0xaa, 0x5b, 0xff, 0xc4, 0x5a, 0xb8, 0x0c, 0x3d, 0x83, 0xf3,
0x30, 0x63, 0x05, 0x2e, 0x6f, 0x36, 0xb8, 0xaa, 0x54, 0x30, 0xb3, 0xa3, 0x8c, 0x41, 0x88, 0x90, 0x2f, 0x98, 0xb1, 0x0d, 0xce, 0x6f, 0xd6, 0xb8, 0x28, 0x94, 0x3f, 0xb6, 0xa3, 0x74, 0x45, 0x14,
0x5f, 0x32, 0xb3, 0xdb, 0x38, 0x89, 0x93, 0xc8, 0x4b, 0xa6, 0xf9, 0x10, 0x82, 0x15, 0xf2, 0x95, 0xc2, 0x2c, 0x67, 0x66, 0xbf, 0x76, 0x16, 0xa7, 0xa1, 0x17, 0x8f, 0xb2, 0xb6, 0x84, 0x16, 0x30,
0x68, 0x0d, 0xd9, 0x34, 0x94, 0x1b, 0x1d, 0xcc, 0xa3, 0x49, 0xe2, 0xaf, 0x96, 0x29, 0xe3, 0x9d, 0x53, 0x62, 0x67, 0xc8, 0xba, 0xa2, 0xdc, 0x68, 0x7f, 0x12, 0x0e, 0xe3, 0xd9, 0x62, 0x9e, 0x30,
0xa5, 0x79, 0x57, 0x59, 0x53, 0x6e, 0xf2, 0x61, 0x13, 0x04, 0xe8, 0x44, 0x2a, 0xba, 0xc3, 0x86, 0x5e, 0x23, 0xcd, 0xea, 0x93, 0x25, 0xe5, 0x26, 0x6b, 0x17, 0x21, 0x1f, 0x4e, 0xa5, 0xa2, 0x7b,
0x04, 0x8b, 0xc8, 0x4b, 0xe6, 0xf9, 0x3e, 0x8d, 0xaf, 0x10, 0x1c, 0x1a, 0xa6, 0x25, 0x24, 0xe8, 0x6c, 0x88, 0x3f, 0x0d, 0xbd, 0x78, 0x92, 0x1d, 0xd2, 0xe8, 0x1a, 0x50, 0x1f, 0x98, 0x96, 0x28,
0xbf, 0xbd, 0xff, 0xaa, 0x37, 0xd0, 0x19, 0x77, 0x08, 0xaf, 0xbe, 0x7b, 0x68, 0xee, 0x98, 0x1a, 0x86, 0xff, 0x0e, 0xfc, 0x55, 0x03, 0xd0, 0x81, 0xeb, 0xcb, 0x51, 0x02, 0xf3, 0x15, 0x31, 0x86,
0xae, 0xd0, 0xc5, 0x75, 0x5b, 0x74, 0x7e, 0x14, 0xe4, 0x9a, 0xf2, 0x9a, 0x11, 0x57, 0x02, 0x70, 0x91, 0xd6, 0xeb, 0x05, 0x30, 0x91, 0x8a, 0xd0, 0x2d, 0x2e, 0x89, 0x7b, 0xb9, 0x63, 0x5e, 0x3f,
0xf3, 0xbd, 0xff, 0x75, 0xc1, 0xf0, 0xdc, 0x61, 0xae, 0xe7, 0x99, 0x07, 0xef, 0xd0, 0xd9, 0xe8, 0x5b, 0xa7, 0xbe, 0xfe, 0xdc, 0xe2, 0xe7, 0x00, 0x26, 0x2e, 0xd7, 0xe8, 0x1a, 0x2e, 0x57, 0xbb,
0xa6, 0xf0, 0x20, 0x1d, 0xbc, 0x54, 0x7a, 0xf8, 0x26, 0xe1, 0xc3, 0xbf, 0x97, 0xed, 0x1a, 0x1f, 0x4d, 0x0d, 0x75, 0x43, 0x56, 0x94, 0x97, 0xc7, 0x52, 0x84, 0xdc, 0x25, 0x3f, 0xfe, 0x5e, 0x83,
0xd0, 0xf9, 0x78, 0x39, 0x88, 0x47, 0x8c, 0x3f, 0xbe, 0x4a, 0xf8, 0xe8, 0x9f, 0x3d, 0x5a, 0xbe, 0xe0, 0xc2, 0x69, 0xae, 0xe6, 0x85, 0x87, 0x3e, 0xc0, 0x79, 0x67, 0x31, 0xd0, 0xa3, 0xa4, 0xb5,
0xba, 0xfc, 0xf8, 0xbc, 0xa6, 0xa6, 0x69, 0x8b, 0xb4, 0x14, 0xdb, 0x8c, 0xd1, 0xba, 0x31, 0x9c, 0x97, 0x49, 0x7f, 0xd7, 0x82, 0xc7, 0x7f, 0x3f, 0xb6, 0x2c, 0x3e, 0xc1, 0x45, 0x97, 0x10, 0x8a,
0xf2, 0x9a, 0x13, 0xf3, 0x45, 0xa8, 0x9b, 0x8c, 0xf1, 0x2a, 0xb3, 0x9b, 0x65, 0x03, 0x9d, 0x62, 0x3a, 0x1d, 0x7f, 0xdc, 0xb7, 0xe0, 0xc9, 0x3f, 0x6b, 0xb4, 0xac, 0xc7, 0xec, 0x80, 0xe8, 0x8d,
0x66, 0xbf, 0xfd, 0xf2, 0x47, 0x00, 0x00, 0x00, 0xff, 0xff, 0x12, 0x25, 0x68, 0x92, 0x41, 0x03, 0xd9, 0x87, 0xda, 0x1b, 0xf3, 0x0e, 0xc3, 0x37, 0x57, 0x9f, 0x5f, 0x96, 0xd4, 0x54, 0xbb, 0x4d,
0x00, 0x00, 0x92, 0x8b, 0x6d, 0xca, 0x68, 0x59, 0x19, 0x4e, 0x79, 0xc9, 0x89, 0xf9, 0x26, 0xd4, 0x4d, 0xca,
0x78, 0x91, 0x5a, 0x52, 0x69, 0xcb, 0x66, 0x33, 0xb6, 0xbf, 0xe0, 0xd5, 0xaf, 0x00, 0x00, 0x00,
0xff, 0xff, 0x89, 0x60, 0x5e, 0x11, 0xd6, 0x03, 0x00, 0x00,
} }

@ -29,10 +29,16 @@ service Invoices {
supplied in the request. supplied in the request.
*/ */
rpc AddHoldInvoice(AddHoldInvoiceRequest) returns (AddHoldInvoiceResp); rpc AddHoldInvoice(AddHoldInvoiceRequest) returns (AddHoldInvoiceResp);
/**
SettleInvoice settles an accepted invoice. If the invoice is already
settled, this call will succeed.
*/
rpc SettleInvoice(SettleInvoiceMsg) returns (SettleInvoiceResp);
} }
message CancelInvoiceMsg { message CancelInvoiceMsg {
/// Hash corresponding to the invoice to cancel. /// Hash corresponding to the (hold) invoice to cancel.
bytes payment_hash = 1; bytes payment_hash = 1;
} }
message CancelInvoiceResp {} message CancelInvoiceResp {}
@ -85,4 +91,11 @@ message AddHoldInvoiceResp {
payment to the recipient. payment to the recipient.
*/ */
string payment_request = 1 [json_name = "payment_request"]; string payment_request = 1 [json_name = "payment_request"];
} }
message SettleInvoiceMsg {
/// Externally discovered pre-image that should be used to settle the hold invoice.
bytes preimage = 1;
}
message SettleInvoiceResp {}

@ -12,6 +12,7 @@ import (
"gopkg.in/macaroon-bakery.v2/bakery" "gopkg.in/macaroon-bakery.v2/bakery"
"github.com/btcsuite/btcutil" "github.com/btcsuite/btcutil"
"github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lnrpc"
"github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lntypes"
) )
@ -44,6 +45,10 @@ var (
Entity: "invoices", Entity: "invoices",
Action: "read", Action: "read",
}}, }},
"/invoicesrpc.Invoices/SettleInvoice": {{
Entity: "invoices",
Action: "write",
}},
"/invoicesrpc.Invoices/CancelInvoice": {{ "/invoicesrpc.Invoices/CancelInvoice": {{
Entity: "invoices", Entity: "invoices",
Action: "write", Action: "write",
@ -196,6 +201,24 @@ func (s *Server) SubscribeSingleInvoice(req *lnrpc.PaymentHash,
} }
} }
// SettleInvoice settles an accepted invoice. If the invoice is already settled,
// this call will succeed.
func (s *Server) SettleInvoice(ctx context.Context,
in *SettleInvoiceMsg) (*SettleInvoiceResp, error) {
preimage, err := lntypes.MakePreimage(in.Preimage)
if err != nil {
return nil, err
}
err = s.cfg.InvoiceRegistry.SettleHodlInvoice(preimage)
if err != nil && err != channeldb.ErrInvoiceAlreadySettled {
return nil, err
}
return &SettleInvoiceResp{}, nil
}
// CancelInvoice cancels a currently open invoice. If the invoice is already // CancelInvoice cancels a currently open invoice. If the invoice is already
// canceled, this call will succeed. If the invoice is already settled, it will // canceled, this call will succeed. If the invoice is already settled, it will
// fail. // fail.