nip60: fixes to pay and stuff because it was very broken.

This commit is contained in:
fiatjaf 2025-01-29 21:11:13 -03:00
parent 7c04b497ec
commit 37db1c924a
2 changed files with 12 additions and 7 deletions

View File

@ -28,9 +28,10 @@ func (w *Wallet) PayBolt11(ctx context.Context, invoice string, opts ...SendOpti
var meltQuote string
var meltAmount uint64
invoicePct := uint64(99)
feeReservePct := uint64(1)
feeReserveAbs := uint64(1)
for range 10 {
amount := invoiceAmount * invoicePct / 100
amount := invoiceAmount*(100+feeReservePct)/100 + feeReserveAbs
var fee uint64
chosen, fee, err = w.getProofsForSending(ctx, amount, ss.specificMint)
if err != nil {
@ -48,16 +49,17 @@ func (w *Wallet) PayBolt11(ctx context.Context, invoice string, opts ...SendOpti
// if amount in proofs is not sufficient to pay for the melt request,
// increase the amount and get proofs again (because of lighting fees)
if meltResp.Amount+meltResp.FeeReserve+fee > chosen.proofs.Amount() {
invoicePct--
meltQuote = meltResp.Quote
meltAmount = meltResp.Amount + meltResp.FeeReserve + fee
if meltAmount > chosen.proofs.Amount() {
feeReserveAbs++
} else {
meltQuote = meltResp.Quote
meltAmount = meltResp.Amount
goto meltworked
}
}
return "", fmt.Errorf("stop trying to do the melt because the mint part is too expensive")
return "", fmt.Errorf("stop trying to do the melt because the invoice is too expensive")
meltworked:
// swap our proofs so we get the exact amount for paying the invoice

View File

@ -180,6 +180,7 @@ func (w *Wallet) getProofsForSending(
part.tokens = make([]Token, 0, 3)
part.tokenIndexes = make([]int, 0, 3)
part.proofs = make(cashu.Proofs, 0, 7)
part.mint = token.Mint
}
part.tokens = append(part.tokens, token)
@ -193,6 +194,8 @@ func (w *Wallet) getProofsForSending(
return part, fee, nil
}
}
byMint[token.Mint] = part
}
// if we got here it's because we didn't get enough proofs from the same mint