nip57 and nip61: parse amount.
This commit is contained in:
33
nip57/nip57.go
Normal file
33
nip57/nip57.go
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package nip57
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"fiatjaf.com/nostr"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetAmountFromZap takes a zap receipt event (kind 9735) and returns the amount in millisats.
|
||||||
|
// It first checks the event's "amount" tag, and if not present, checks the embedded zap request's "amount" tag.
|
||||||
|
func GetAmountFromZap(event nostr.Event) uint64 {
|
||||||
|
// Check for "amount" tag in the zap receipt
|
||||||
|
if tag := event.Tags.Find("amount"); tag != nil {
|
||||||
|
if amt, err := strconv.ParseUint(tag[1], 10, 64); err == nil {
|
||||||
|
return amt
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if not found, get from the embedded zap request in "description" tag
|
||||||
|
if descTag := event.Tags.Find("description"); descTag != nil {
|
||||||
|
var embeddedEvent nostr.Event
|
||||||
|
if err := json.Unmarshal([]byte(descTag[1]), &embeddedEvent); err == nil {
|
||||||
|
if tag := embeddedEvent.Tags.Find("amount"); tag != nil {
|
||||||
|
if amt, err := strconv.ParseUint(tag[1], 10, 64); err == nil {
|
||||||
|
return amt
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
@@ -12,6 +12,7 @@ import (
|
|||||||
"fiatjaf.com/nostr"
|
"fiatjaf.com/nostr"
|
||||||
"fiatjaf.com/nostr/nip60"
|
"fiatjaf.com/nostr/nip60"
|
||||||
"github.com/btcsuite/btcd/btcec/v2"
|
"github.com/btcsuite/btcd/btcec/v2"
|
||||||
|
"github.com/elnosh/gonuts/cashu"
|
||||||
)
|
)
|
||||||
|
|
||||||
var NutzapsNotAccepted = errors.New("user doesn't accept nutzaps")
|
var NutzapsNotAccepted = errors.New("user doesn't accept nutzaps")
|
||||||
@@ -161,3 +162,17 @@ func getEligibleTokensWeHave(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetAmountFromNutzap(evt nostr.Event) uint64 {
|
||||||
|
var total uint64
|
||||||
|
for _, tag := range evt.Tags {
|
||||||
|
if len(tag) >= 2 && tag[0] == "proof" {
|
||||||
|
var proof cashu.Proof
|
||||||
|
if err := json.Unmarshal([]byte(tag[1]), &proof); err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
total += proof.Amount
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return total
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user