Files
indra/pkg/relay/payments.go
херетик 919d4187e6 refactoring some ugly long parameters
would like to redo a lotta this stuff but another time
2023-03-01 06:54:21 +00:00

102 lines
2.3 KiB
Go

package relay
import (
"git-indra.lan/indra-labs/lnd/lnd/lnwire"
"git-indra.lan/indra-labs/indra/pkg/crypto/nonce"
"git-indra.lan/indra-labs/indra/pkg/crypto/sha256"
"git-indra.lan/indra-labs/indra/pkg/messages/session"
)
type Payment struct {
nonce.ID
Preimage sha256.Hash
Amount lnwire.MilliSatoshi
ConfirmChan chan bool
}
type PaymentChan chan *Payment
// Send a payment on the PaymentChan.
func (pc PaymentChan) Send(amount lnwire.MilliSatoshi,
s *session.Layer) (confirmChan chan bool) {
confirmChan = make(chan bool)
pc <- &Payment{
ID: s.ID,
Preimage: s.PreimageHash(),
Amount: amount,
ConfirmChan: confirmChan,
}
return
}
// Receive waits on receiving a Payment on a PaymentChan.
func (pc PaymentChan) Receive() <-chan *Payment { return pc }
type PendingPayments []*Payment
func (p PendingPayments) Add(np *Payment) (pp PendingPayments) {
return append(p, np)
}
func (p PendingPayments) Delete(preimage sha256.Hash) (pp PendingPayments) {
pp = p
for i := range p {
if p[i].Preimage == preimage {
if i == len(p)-1 {
pp = p[:i]
} else {
pp = append(p[:i], p[i+1:]...)
}
}
}
return
}
func (p PendingPayments) Find(id nonce.ID) (pp *Payment) {
for i := range p {
if p[i].ID == id {
return p[i]
}
}
return
}
func (p PendingPayments) FindPreimage(pi sha256.Hash) (pp *Payment) {
for i := range p {
if p[i].Preimage == pi {
return p[i]
}
}
return
}
// PendingPayment accessors. For the same reason as the sessions, pending
// payments need to be accessed only with the node's mutex locked.
func (sm *SessionManager) AddPendingPayment(np *Payment) {
sm.Lock()
defer sm.Unlock()
log.D.F("%s adding pending payment %s for %v",
sm.nodes[0].AddrPort.String(), np.ID,
np.Amount)
sm.PendingPayments = sm.PendingPayments.Add(np)
}
func (sm *SessionManager) DeletePendingPayment(preimage sha256.Hash) {
sm.Lock()
defer sm.Unlock()
sm.PendingPayments = sm.PendingPayments.Delete(preimage)
}
func (sm *SessionManager) FindPendingPayment(id nonce.ID) (pp *Payment) {
sm.Lock()
defer sm.Unlock()
return sm.PendingPayments.Find(id)
}
func (sm *SessionManager) FindPendingPreimage(pi sha256.Hash) (pp *Payment) {
log.T.F("searching preimage %x", pi)
sm.Lock()
defer sm.Unlock()
return sm.PendingPayments.FindPreimage(pi)
}