diff --git a/channeldb/invoices.go b/channeldb/invoices.go index 5915cb4c..d7396376 100644 --- a/channeldb/invoices.go +++ b/channeldb/invoices.go @@ -10,6 +10,7 @@ import ( "github.com/btcsuite/btcd/wire" "github.com/coreos/bbolt" + "github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lnwire" ) @@ -105,7 +106,7 @@ type ContractTerm struct { // PaymentPreimage is the preimage which is to be revealed in the // occasion that an HTLC paying to the hash of this preimage is // extended. - PaymentPreimage [32]byte + PaymentPreimage lntypes.Preimage // Value is the expected amount of milli-satoshis to be paid to an HTLC // which can be satisfied by the above preimage. diff --git a/contractcourt/chain_arbitrator.go b/contractcourt/chain_arbitrator.go index 556fba2d..18004b88 100644 --- a/contractcourt/chain_arbitrator.go +++ b/contractcourt/chain_arbitrator.go @@ -12,6 +12,7 @@ import ( "github.com/lightningnetwork/lnd/chainntnfs" "github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/input" + "github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/sweep" @@ -139,7 +140,7 @@ type ChainArbitratorConfig struct { // SettleInvoice attempts to settle an existing invoice on-chain with // the given payment hash. ErrInvoiceNotFound is returned if an invoice // is not found. - SettleInvoice func(chainhash.Hash, lnwire.MilliSatoshi) error + SettleInvoice func(lntypes.Hash, lnwire.MilliSatoshi) error } // ChainArbitrator is a sub-system that oversees the on-chain resolution of all diff --git a/contractcourt/channel_arbitrator_test.go b/contractcourt/channel_arbitrator_test.go index 4518fac0..7fb14d5a 100644 --- a/contractcourt/channel_arbitrator_test.go +++ b/contractcourt/channel_arbitrator_test.go @@ -11,6 +11,7 @@ import ( "github.com/lightningnetwork/lnd/chainntnfs" "github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/input" + "github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwire" ) @@ -176,7 +177,7 @@ func createTestChannelArbitrator(log ArbitratorLog) (*ChannelArbitrator, *lnwallet.IncomingHtlcResolution, uint32) error { return nil }, - SettleInvoice: func(chainhash.Hash, lnwire.MilliSatoshi) error { + SettleInvoice: func(lntypes.Hash, lnwire.MilliSatoshi) error { return nil }, } diff --git a/htlcswitch/interfaces.go b/htlcswitch/interfaces.go index 3cb5f35c..8614dfaf 100644 --- a/htlcswitch/interfaces.go +++ b/htlcswitch/interfaces.go @@ -1,9 +1,9 @@ package htlcswitch import ( - "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/lnpeer" + "github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lnwire" ) @@ -14,11 +14,11 @@ type InvoiceDatabase interface { // byte payment hash. This method should also reutrn the min final CLTV // delta for this invoice. We'll use this to ensure that the HTLC // extended to us gives us enough time to settle as we prescribe. - LookupInvoice(chainhash.Hash) (channeldb.Invoice, uint32, error) + LookupInvoice(lntypes.Hash) (channeldb.Invoice, uint32, error) // SettleInvoice attempts to mark an invoice corresponding to the // passed payment hash as fully settled. - SettleInvoice(payHash chainhash.Hash, paidAmount lnwire.MilliSatoshi) error + SettleInvoice(payHash lntypes.Hash, paidAmount lnwire.MilliSatoshi) error } // ChannelLink is an interface which represents the subsystem for managing the diff --git a/htlcswitch/link.go b/htlcswitch/link.go index 18da280e..87b4ebe5 100644 --- a/htlcswitch/link.go +++ b/htlcswitch/link.go @@ -9,7 +9,6 @@ import ( "sync/atomic" "time" - "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/davecgh/go-spew/spew" "github.com/go-errors/errors" "github.com/lightningnetwork/lnd/channeldb" @@ -17,6 +16,7 @@ import ( "github.com/lightningnetwork/lnd/htlcswitch/hodl" "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/lnpeer" + "github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/ticker" @@ -2312,7 +2312,7 @@ func (l *channelLink) processRemoteAdds(fwdPkg *channeldb.FwdPkg, // We're the designated payment destination. Therefore // we attempt to see if we have an invoice locally // which'll allow us to settle this htlc. - invoiceHash := chainhash.Hash(pd.RHash) + invoiceHash := lntypes.Hash(pd.RHash) invoice, minCltvDelta, err := l.cfg.Registry.LookupInvoice( invoiceHash, ) diff --git a/htlcswitch/mock.go b/htlcswitch/mock.go index b2473af1..c9b44d5c 100644 --- a/htlcswitch/mock.go +++ b/htlcswitch/mock.go @@ -17,7 +17,6 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/fastsha256" "github.com/go-errors/errors" "github.com/lightningnetwork/lightning-onion" "github.com/lightningnetwork/lnd/chainntnfs" @@ -25,6 +24,7 @@ import ( "github.com/lightningnetwork/lnd/contractcourt" "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/lnpeer" + "github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/ticker" @@ -686,18 +686,18 @@ var _ ChannelLink = (*mockChannelLink)(nil) type mockInvoiceRegistry struct { sync.Mutex - invoices map[chainhash.Hash]channeldb.Invoice + invoices map[lntypes.Hash]channeldb.Invoice finalDelta uint32 } func newMockRegistry(minDelta uint32) *mockInvoiceRegistry { return &mockInvoiceRegistry{ finalDelta: minDelta, - invoices: make(map[chainhash.Hash]channeldb.Invoice), + invoices: make(map[lntypes.Hash]channeldb.Invoice), } } -func (i *mockInvoiceRegistry) LookupInvoice(rHash chainhash.Hash) (channeldb.Invoice, uint32, error) { +func (i *mockInvoiceRegistry) LookupInvoice(rHash lntypes.Hash) (channeldb.Invoice, uint32, error) { i.Lock() defer i.Unlock() @@ -710,7 +710,7 @@ func (i *mockInvoiceRegistry) LookupInvoice(rHash chainhash.Hash) (channeldb.Inv return invoice, i.finalDelta, nil } -func (i *mockInvoiceRegistry) SettleInvoice(rhash chainhash.Hash, +func (i *mockInvoiceRegistry) SettleInvoice(rhash lntypes.Hash, amt lnwire.MilliSatoshi) error { i.Lock() @@ -736,8 +736,8 @@ func (i *mockInvoiceRegistry) AddInvoice(invoice channeldb.Invoice) error { i.Lock() defer i.Unlock() - rhash := fastsha256.Sum256(invoice.Terms.PaymentPreimage[:]) - i.invoices[chainhash.Hash(rhash)] = invoice + rhash := invoice.Terms.PaymentPreimage.Hash() + i.invoices[rhash] = invoice return nil } diff --git a/htlcswitch/test_utils.go b/htlcswitch/test_utils.go index d7518de1..9677fac0 100644 --- a/htlcswitch/test_utils.go +++ b/htlcswitch/test_utils.go @@ -27,6 +27,7 @@ import ( "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/keychain" "github.com/lightningnetwork/lnd/lnpeer" + "github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/shachain" @@ -651,11 +652,11 @@ func generateHops(payAmt lnwire.MilliSatoshi, startingHeight uint32, } type paymentResponse struct { - rhash chainhash.Hash + rhash lntypes.Hash err chan error } -func (r *paymentResponse) Wait(d time.Duration) (chainhash.Hash, error) { +func (r *paymentResponse) Wait(d time.Duration) (lntypes.Hash, error) { select { case err := <-r.err: close(r.err) @@ -680,7 +681,7 @@ func (n *threeHopNetwork) makePayment(sendingPeer, receivingPeer lnpeer.Peer, paymentErr := make(chan error, 1) - var rhash chainhash.Hash + var rhash lntypes.Hash sender := sendingPeer.(*mockServer) receiver := receivingPeer.(*mockServer) diff --git a/invoices/invoiceregistry.go b/invoices/invoiceregistry.go index e330ccaa..a9bf44b9 100644 --- a/invoices/invoiceregistry.go +++ b/invoices/invoiceregistry.go @@ -2,17 +2,16 @@ package invoices import ( "bytes" - "crypto/sha256" "fmt" "sync" "sync/atomic" "time" "github.com/btcsuite/btcd/chaincfg" - "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcutil" "github.com/davecgh/go-spew/spew" "github.com/lightningnetwork/lnd/channeldb" + "github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/queue" "github.com/lightningnetwork/lnd/zpay32" @@ -24,10 +23,10 @@ var ( // All nodes initialized with the flag active will immediately settle // any incoming HTLC whose rHash corresponds with the debug // preimage. - DebugPre, _ = chainhash.NewHash(bytes.Repeat([]byte{1}, 32)) + DebugPre, _ = lntypes.NewPreimage(bytes.Repeat([]byte{1}, 32)) // DebugHash is the hash of the default preimage. - DebugHash = chainhash.Hash(sha256.Sum256(DebugPre[:])) + DebugHash = DebugPre.Hash() ) // InvoiceRegistry is a central registry of all the outstanding invoices @@ -49,7 +48,7 @@ type InvoiceRegistry struct { // debugInvoices is a map which stores special "debug" invoices which // should be only created/used when manual tests require an invoice // that *all* nodes are able to fully settle. - debugInvoices map[chainhash.Hash]*channeldb.Invoice + debugInvoices map[lntypes.Hash]*channeldb.Invoice activeNetParams *chaincfg.Params @@ -66,7 +65,7 @@ func NewRegistry(cdb *channeldb.DB, return &InvoiceRegistry{ cdb: cdb, - debugInvoices: make(map[chainhash.Hash]*channeldb.Invoice), + debugInvoices: make(map[lntypes.Hash]*channeldb.Invoice), notificationClients: make(map[uint32]*InvoiceSubscription), newSubscriptions: make(chan *InvoiceSubscription), subscriptionCancels: make(chan uint32), @@ -264,8 +263,10 @@ func (i *InvoiceRegistry) deliverBacklogEvents(client *InvoiceSubscription) erro // by the passed preimage. Once this invoice is added, subsystems within the // daemon add/forward HTLCs that are able to obtain the proper preimage // required for redemption in the case that we're the final destination. -func (i *InvoiceRegistry) AddDebugInvoice(amt btcutil.Amount, preimage chainhash.Hash) { - paymentHash := chainhash.Hash(sha256.Sum256(preimage[:])) +func (i *InvoiceRegistry) AddDebugInvoice(amt btcutil.Amount, + preimage lntypes.Preimage) { + + paymentHash := preimage.Hash() invoice := &channeldb.Invoice{ CreationDate: time.Now(), @@ -318,7 +319,7 @@ func (i *InvoiceRegistry) AddInvoice(invoice *channeldb.Invoice) (uint64, error) // according to the cltv delta. // // TODO(roasbeef): ignore if settled? -func (i *InvoiceRegistry) LookupInvoice(rHash chainhash.Hash) (channeldb.Invoice, uint32, error) { +func (i *InvoiceRegistry) LookupInvoice(rHash lntypes.Hash) (channeldb.Invoice, uint32, error) { // First check the in-memory debug invoice index to see if this is an // existing invoice added for debugging. i.RLock() @@ -350,7 +351,7 @@ func (i *InvoiceRegistry) LookupInvoice(rHash chainhash.Hash) (channeldb.Invoice // SettleInvoice attempts to mark an invoice as settled. If the invoice is a // debug invoice, then this method is a noop as debug invoices are never fully // settled. -func (i *InvoiceRegistry) SettleInvoice(rHash chainhash.Hash, +func (i *InvoiceRegistry) SettleInvoice(rHash lntypes.Hash, amtPaid lnwire.MilliSatoshi) error { i.Lock() diff --git a/witness_beacon.go b/witness_beacon.go index 04cc7466..d7b92b01 100644 --- a/witness_beacon.go +++ b/witness_beacon.go @@ -3,10 +3,10 @@ package main import ( "sync" - "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/contractcourt" "github.com/lightningnetwork/lnd/invoices" + "github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lnwallet" ) @@ -72,7 +72,7 @@ func (p *preimageBeacon) LookupPreimage(payHash []byte) ([]byte, bool) { // First, we'll check the invoice registry to see if we already know of // the preimage as it's on that we created ourselves. - var invoiceKey chainhash.Hash + var invoiceKey lntypes.Hash copy(invoiceKey[:], payHash) invoice, _, err := p.invoices.LookupInvoice(invoiceKey) switch {