package event import ( "crypto/sha256" "smesh.lol/pkg/nostr/hex" "smesh.lol/pkg/nostr/ints" "smesh.lol/pkg/nostr/text" ) func (ev *E) ToCanonical(dst []byte) (b []byte) { b = dst if b == nil { size := 5 + 2*len(ev.Pubkey) + 20 + 10 + 100 if ev.Tags != nil { for _, t := range *ev.Tags { for _, elem := range t.T { size += len(elem)*2 + 10 } } } size += len(ev.Content)*2 + 10 b = []byte{:0:size} } b = append(b, "[0,\""...) b = hex.EncAppend(b, ev.Pubkey) b = append(b, "\","...) b = ints.New(ev.CreatedAt).Marshal(b) b = append(b, ',') b = ints.New(ev.Kind).Marshal(b) b = append(b, ',') if ev.Tags != nil { b = ev.Tags.Marshal(b) } else { b = append(b, '[', ']') } b = append(b, ',') b = text.AppendQuote(b, ev.Content, text.NostrEscape) b = append(b, ']') return } func (ev *E) GetIDBytes() []byte { return Hash(ev.ToCanonical(nil)) } func Hash(in []byte) (out []byte) { h := sha256.Sum256(in) return h[:] }