mirror of
https://github.com/nbd-wtf/go-nostr.git
synced 2025-03-17 21:32:56 +01:00
nip60: fix a bunch of stupid bugs.
This commit is contained in:
parent
3c0f4a723a
commit
e7432baeba
@ -80,6 +80,7 @@ func (h HistoryEntry) toEvent(ctx context.Context, kr nostr.Keyer, evt *nostr.Ev
|
||||
func (h *HistoryEntry) parse(ctx context.Context, kr nostr.Keyer, evt *nostr.Event) error {
|
||||
h.event = evt
|
||||
h.createdAt = evt.CreatedAt
|
||||
h.TokenReferences = make([]TokenRef, 0, 3)
|
||||
|
||||
pk, err := kr.GetPublicKey(ctx)
|
||||
if err != nil {
|
||||
@ -132,10 +133,7 @@ func (h *HistoryEntry) parse(ctx context.Context, kr nostr.Keyer, evt *nostr.Eve
|
||||
return fmt.Errorf("'e' tag has invalid event id %s", tag[1])
|
||||
}
|
||||
|
||||
h.TokenReferences = append(h.TokenReferences)
|
||||
|
||||
tf := TokenRef{EventID: tag[1]}
|
||||
|
||||
switch tag[3] {
|
||||
case "created":
|
||||
tf.Created = true
|
||||
@ -143,9 +141,11 @@ func (h *HistoryEntry) parse(ctx context.Context, kr nostr.Keyer, evt *nostr.Eve
|
||||
tf.Created = false
|
||||
case "redeemed":
|
||||
tf.IsNutzap = true
|
||||
tf.Created = true
|
||||
default:
|
||||
return fmt.Errorf("unsupported 'e' token marker: %s", tag[3])
|
||||
}
|
||||
h.TokenReferences = append(h.TokenReferences, tf)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -76,7 +76,7 @@ func loadWalletFromPool(
|
||||
return nil
|
||||
}
|
||||
|
||||
kinds := []int{37375, 7375}
|
||||
kinds := []int{17375, 7375}
|
||||
if withHistory {
|
||||
kinds = append(kinds, 7375)
|
||||
}
|
||||
@ -231,7 +231,7 @@ func (w *Wallet) Balance() uint64 {
|
||||
|
||||
func (w *Wallet) toEvent(ctx context.Context, kr nostr.Keyer, evt *nostr.Event) error {
|
||||
evt.CreatedAt = nostr.Now()
|
||||
evt.Kind = 37375
|
||||
evt.Kind = 17375
|
||||
evt.Tags = nostr.Tags{}
|
||||
|
||||
pk, err := kr.GetPublicKey(ctx)
|
||||
@ -307,6 +307,7 @@ func (w *Wallet) parse(ctx context.Context, kr nostr.Keyer, evt *nostr.Event) er
|
||||
|
||||
// finally set these things when we know nothing will fail
|
||||
w.Mints = mints
|
||||
fmt.Println("mints", mints)
|
||||
w.PrivateKey = privateKey
|
||||
w.PublicKey = w.PrivateKey.PubKey()
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package nip60
|
||||
|
||||
import (
|
||||
"cmp"
|
||||
"context"
|
||||
"fmt"
|
||||
"slices"
|
||||
@ -11,6 +12,7 @@ import (
|
||||
"github.com/elnosh/gonuts/cashu"
|
||||
"github.com/nbd-wtf/go-nostr"
|
||||
"github.com/nbd-wtf/go-nostr/keyer"
|
||||
"github.com/stretchr/testify/require"
|
||||
"golang.org/x/exp/rand"
|
||||
)
|
||||
|
||||
@ -82,18 +84,16 @@ func TestWallet(t *testing.T) {
|
||||
|
||||
// wallet metadata event
|
||||
metaEvent := &nostr.Event{}
|
||||
if err := w.toEvent(ctx, kr, metaEvent); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = w.toEvent(ctx, kr, metaEvent)
|
||||
require.NoError(t, err)
|
||||
events = append(events, metaEvent)
|
||||
|
||||
// token events
|
||||
for i := range w.Tokens {
|
||||
evt := &nostr.Event{}
|
||||
evt.Tags = nostr.Tags{}
|
||||
if err := w.Tokens[i].toEvent(ctx, kr, evt); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err := w.Tokens[i].toEvent(ctx, kr, evt)
|
||||
require.NoError(t, err)
|
||||
w.Tokens[i].event = evt
|
||||
events = append(events, evt)
|
||||
}
|
||||
@ -102,9 +102,8 @@ func TestWallet(t *testing.T) {
|
||||
for i := range w.History {
|
||||
evt := &nostr.Event{}
|
||||
evt.Tags = nostr.Tags{}
|
||||
if err := w.History[i].toEvent(ctx, kr, evt); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err := w.History[i].toEvent(ctx, kr, evt)
|
||||
require.NoError(t, err)
|
||||
w.History[i].event = evt
|
||||
events = append(events, evt)
|
||||
}
|
||||
@ -164,46 +163,23 @@ func TestWallet(t *testing.T) {
|
||||
// load wallet from events
|
||||
loaded := loadWallet(ctx, kr, evtChan, eoseChan)
|
||||
loaded.Processed = func(evt *nostr.Event, err error) {
|
||||
fmt.Println("processed", evt, err)
|
||||
fmt.Println("processed", evt.Kind, err)
|
||||
}
|
||||
|
||||
<-loaded.Stable
|
||||
|
||||
// check if loaded wallet matches original
|
||||
if len(loaded.Tokens) != len(w.Tokens) {
|
||||
t.Errorf("token count mismatch: %d != %d", len(loaded.Tokens), len(w.Tokens))
|
||||
}
|
||||
if len(loaded.History) != len(w.History) {
|
||||
t.Errorf("history count mismatch: %d != %d", len(loaded.History), len(w.History))
|
||||
}
|
||||
|
||||
// check tokens are equal regardless of order
|
||||
for _, ta := range loaded.Tokens {
|
||||
found := false
|
||||
for _, tb := range w.Tokens {
|
||||
if ta.Mint == tb.Mint && ta.Proofs[0].Amount == tb.Proofs[0].Amount {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
t.Errorf("token not found in loaded wallet: %v", ta)
|
||||
}
|
||||
}
|
||||
|
||||
// check history entries are equal regardless of order
|
||||
for _, ha := range loaded.History {
|
||||
found := false
|
||||
for _, hb := range w.History {
|
||||
if ha.In == hb.In && ha.Amount == hb.Amount {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
t.Errorf("history entry not found in loaded wallet: %v", ha)
|
||||
}
|
||||
require.Len(t, loaded.Tokens, len(w.Tokens))
|
||||
require.ElementsMatch(t, loaded.Tokens, w.Tokens)
|
||||
require.Len(t, loaded.History, len(w.History))
|
||||
slices.SortFunc(loaded.History, func(a, b HistoryEntry) int { return cmp.Compare(a.createdAt, b.createdAt) })
|
||||
slices.SortFunc(w.History, func(a, b HistoryEntry) int { return cmp.Compare(a.createdAt, b.createdAt) })
|
||||
for i := range w.History {
|
||||
slices.SortFunc(loaded.History[i].TokenReferences, func(a, b TokenRef) int { return cmp.Compare(a.EventID, b.EventID) })
|
||||
slices.SortFunc(w.History[i].TokenReferences, func(a, b TokenRef) int { return cmp.Compare(a.EventID, b.EventID) })
|
||||
require.Equal(t, loaded.History[i], w.History[i])
|
||||
}
|
||||
require.ElementsMatch(t, loaded.Mints, w.Mints)
|
||||
require.Equal(t, loaded.PublicKey.SerializeCompressed(), w.PublicKey.SerializeCompressed())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user