diff --git a/nostr.go b/nostr.go index 1c8ee6c..a34212e 100644 --- a/nostr.go +++ b/nostr.go @@ -3,7 +3,6 @@ package main import ( "context" "fmt" - "math/rand" "net/url" "time" @@ -57,14 +56,6 @@ type CachedEvent struct { Relays []string `json:"r"` } -func getRelay() string { - if serial == 0 { - serial = rand.Intn(len(everything)) - } - serial = (serial + 1) % len(everything) - return everything[serial] -} - func getEvent(ctx context.Context, code string, relayHints []string) (*nostr.Event, []string, error) { wdb := eventstore.RelayWrapper{Store: db} @@ -100,8 +91,7 @@ func getEvent(ctx context.Context, code string, relayHints []string) (*nostr.Eve case nostr.EventPointer: author = v.Author filter.IDs = []string{v.ID} - relays = append(relays, getRelay()) - relays = append(relays, getRelay()) + relays = append(relays, getRandomRelay(), getRandomRelay()) relays = append(relays, v.Relays...) withRelays = true case nostr.EntityPointer: @@ -113,16 +103,13 @@ func getEvent(ctx context.Context, code string, relayHints []string) (*nostr.Eve if v.Kind != 0 { filter.Kinds = append(filter.Kinds, v.Kind) } - relays = append(relays, getRelay()) - relays = append(relays, getRelay()) + relays = append(relays, getRandomRelay(), getRandomRelay()) relays = append(relays, v.Relays...) withRelays = true case string: if prefix == "note" { filter.IDs = []string{v} - relays = append(relays, getRelay()) - relays = append(relays, getRelay()) - relays = append(relays, getRelay()) + relays = append(relays, getRandomRelay(), getRandomRelay(), getRandomRelay()) } else if prefix == "npub" { author = v filter.Authors = []string{v} @@ -135,7 +122,7 @@ func getEvent(ctx context.Context, code string, relayHints []string) (*nostr.Eve if res, _ := wdb.QuerySync(ctx, filter); len(res) != 0 { evt := res[0] scheduleEventExpiration(evt.ID, time.Hour*24*7) - return evt, getRelaysForEvent(evt.ID), nil + return evt, getRandomRelaysForEvent(evt.ID), nil } // otherwise fetch from external relays @@ -148,7 +135,7 @@ func getEvent(ctx context.Context, code string, relayHints []string) (*nostr.Eve relays = append(relays, authorRelays...) } for len(relays) < 5 { - relays = append(relays, getRelay()) + relays = append(relays, getRandomRelay()) } relays = unique(relays) @@ -226,7 +213,7 @@ func authorLastNotes(ctx context.Context, pubkey string, relays []string, isSite }() ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) defer cancel() - relays = unique(append(relays, getRelay(), getRelay())) + relays = unique(append(relays, getRandomRelay(), getRandomRelay())) ch := pool.SubManyEose(ctx, relays, nostr.Filters{filter}) for { select { diff --git a/utils.go b/utils.go index b95fbac..af5d2d6 100644 --- a/utils.go +++ b/utils.go @@ -185,7 +185,7 @@ func getParentNevent(event *nostr.Event, fallbackRelay string) string { } else if fallbackRelay != "" { relay = fallbackRelay } else { - relay = everything[rand.Intn(len(everything))] + relay = getRandomRelay() } parentNevent, _ = nip19.EncodeEvent((*replyTag)[1], []string{relay}, "") } @@ -533,3 +533,11 @@ func shouldUseRelayForNip19(relayUrl string) bool { } return true } + +func getRandomRelay() string { + if serial == 0 { + serial = rand.Intn(len(everything)) + } + serial = (serial + 1) % len(everything) + return everything[serial] +}