nip13: crazier and more fun and hopefully slightly more performant nonce encoding.

This commit is contained in:
fiatjaf 2024-08-20 13:54:51 -03:00
parent 437cdecfb1
commit edbbd6df44
3 changed files with 28 additions and 3 deletions

25
nip13/helpers.go Normal file
View File

@ -0,0 +1,25 @@
package nip13
const (
maxSafeAscii = 126
minSafeAscii = 35
availableSafeAscii = maxSafeAscii - minSafeAscii
)
func uintToStringCrazy(num uint64) string {
nchars := 1 + num/availableSafeAscii
chars := make([]byte, nchars)
i := 0
for {
if num < availableSafeAscii {
chars[i] = byte(num + minSafeAscii)
break
} else {
chars[i] = byte(num/availableSafeAscii + minSafeAscii)
num -= availableSafeAscii
i++
}
}
return string(chars)
}

View File

@ -80,7 +80,7 @@ func Generate(event *nostr.Event, targetDifficulty int, timeout time.Duration) (
start := time.Now()
for {
nonce++
tag[1] = strconv.FormatUint(nonce, 10)
tag[1] = uintToStringCrazy(nonce)
if Difficulty(event.GetID()) >= targetDifficulty {
return event, nil
}

View File

@ -100,8 +100,8 @@ func testNonceTag(t *testing.T, event *nostr.Event, commitment int) {
if tag[0] != "nonce" {
t.Errorf("tag[0] = %q; want 'nonce'", tag[0])
}
if n, err := strconv.ParseInt(tag[1], 10, 64); err != nil || n < 1 {
t.Errorf("tag[1] = %q; want an int greater than 0", tag[1])
if len(tag[1]) < 0 {
t.Errorf("tag[1] = %q; want a nonce character", tag[1])
}
if n, err := strconv.Atoi(tag[2]); err != nil || n != commitment {
t.Errorf("tag[2] = %q; want %d", tag[2], commitment)