Hello nostr:npub1e7k8hp6qe62j50qm2exuwgvkceq50qu2l59m95swk5wnlls2wwnqvwc4z4! What have you been up to lately?
I read over the “Why Bitcoin Needs a Rebrand” article in the new Bread zine from nostr:npub1cashappn03s3cl2ljsdntv0v28e2um5lgx4vjctqjt23pcwzjhsqmtdg5l. There’s definitely some truth to it but it didn’t bring out the thing that often puts me off the most about “Bitcoiners” - the extreme individualism.
I like Bitcoin and I’m obviously passionate about decentralized tech. But I think there is a dark side of “freedom tech” where some people lining up under the banner of “freedom” are looking for freedom from responsibility, not freedom from tyranny. I’ve seen this in the hate we’ve gotten at Nos.social for building decentralized moderation features. Nostr users blast us for building tools that give our users the *freedom* to listen to who they want. For these people freedom of speech isn’t about freedom to speak subversively to those in power, it’s about freedom from consequences, and anything else is “censorship”. It’s about freedom to harm others in settings where they don’t feel at risk themselves.
I’ve grown up in America on rugged individualism, but the trajectory of my worldview over the past few years is moving decidedly towards communalism. I want to see the same shift in Bitcoin. Where are the Bitcoin mutual aid tools? Social key backup? Cooperative financial institutions? This is a big part of what excites me about Nostr tech: it’s social, it’s based on relationships and trust, so it’s a great foundation for building these types of convivial tools. I want the new Bitcoiner to be into potlucks, farmer’s markets, and family.
An user just informed me that he burned his nesc: he opened Iris.to to test it, pressed "Sign Up" and filled in the only input in the form, which actually asked for the *name*. So his nsec has been scattered and leaked to all the default relays...
Of course, the error is quite silly because the top text, "What should we call you?", is clear. But it is understable if you are overthinking and are used to seeing the nsec login as the first input. In fact I already saw in the past days a couple of profiles with an nsec*** name, and now I probably know why.
This led me to reflect on a simple UI best practice that can mitigate this sort of problem: filtering.
- If you are developing an app, check and filter the inputs, preferably client-side: if the user pastes a nsec in a non logical place (name, bio, pubkey field, etc.) reject it. When composing a note, it could make sense to ask for confirmation, highlighting the risks. The same confirmation procedure should work well for hex keys.
- If you are developing a frontend toolkit, you can probably help to automate the previous point by offering different input/textarea types with built-in validation.
Side thought: it is easy to confuse "Sign Up" and "Sign In". "Login" and "Create account" seem like a more distinctive and effective labeling. The mentioned user began to fail in this first step, thinking he was logging in, when he was instead going through a registration process.
Let's make Nostr easier and safer.
/cc nostr:npub1g53mukxnjkcmr94fhryzkqutdz2ukq4ks0gvy5af25rgmwsl4ngq43drvk nostr:npub1v0lxxxxutpvrelsksy8cdhgfux9l6a42hsj2qzquu2zk7vc9qnkszrqj49
#nostrdesign
Maybe he’s a good candidate to test Pablos key migration NIP.
Thank you 💜⚡️🫂
BilligsterUser
nostr:npub14a93ehrzfgd73uclhans95xcwdqsselevat42cqa30q73nacfnussnlgen
Pablo nostr:npub1l2vyh47mk2p0qlsku7hg0vn29faehy9hy34ygaclpn66ukqp3afqutajft
Cameri nostr:npub1qqqqqqyz0la2jjl752yv8h7wgs3v098mh9nztd4nr6gynaef6uqqt0n47m
Mike Dilger nostr:npub1acg6thl5psv62405rljzkj8spesceyfz2c32udakc2ak0dmvfeyse9p35c
Will nostr:npub1xtscya34g58tk0z605fvr788k263gsu6cy9x0mhnm87echrgufzsevkk5s
Fiat Jaf nostr:npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6
Kieran
nostr:npub1v0lxxxxutpvrelsksy8cdhgfux9l6a42hsj2qzquu2zk7vc9qnkszrqj49
Calle
nostr:npub12rv5lskctqxxs2c8rf2zlzc7xx3qpvzs3w4etgemauy9thegr43sf485vg
Vitor
nostr:npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z
Hodlbod
nostr:npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn
Koala Sat
nostr:npub1v3tgrwwsv7c6xckyhm5dmluc05jxd4yeqhpxew87chn0kua0tjzqc6yvjh
Martti Malmi
nostr:npub1g53mukxnjkcmr94fhryzkqutdz2ukq4ks0gvy5af25rgmwsl4ngq43drvk
Henry
nostr:npub1xv6axulxcx6mce5mfvfzpsy89r4gee3zuknulm45cqqpmyw7680q5pxea6
Ben
nostr:npub10000000thpep7auj058803nqtymqlf3rw87lzhe6mkfeywnpxg5sjw7nql
Rock
nostr:npub1yauhh489aefdkzsewe5vj2u68elzxlsln7nn5yxr34e3c22vljdqkn7h9m
Roberto
nostr:npub1uapy44zhu5f0markfftt7m2z3gr2zwssq6h3lw8qlce0d5pjvhrs3q9pmv
Iefan
nostr:npub1cmmswlckn82se7f2jeftl6ll4szlc6zzh8hrjyyfm9vm3t2afr7svqlr6f
Semisol
nostr:npub12262qa4uhw7u8gdwlgmntqtv7aye8vdcmvszkqwgs0zchel6mz7s6cgrkj
RooSoft
nostr:npub1alyr7qwglvcfmukgse4cc7fyej9k7pvq4lw7r4hpdc4kzp7zsckqmy0qkx
Vivek
nostr:npub1ltx67888tz7lqnxlrg06x234vjnq349tcfyp52r0lstclp548mcqnuz40t
Brugeman
nostr:npub1xdtducdnjerex88gkg2qk2atsdlqsyxqaag4h05jmcpyspqt30wscmntxy
Miljan
nostr:npub16c0nh3dnadzqpm76uctf5hqhe2lny344zsmpm6feee9p5rdxaa9q586nvr
Zach Meyers
nostr:npub1zach44xjpc4yyhx6pgse2cj2pf98838kja03dv2e8ly8lfr094vqvm5dy5
Nostr Build
nostr:npub1nxy4qpqnld6kmpphjykvx2lqwvxmuxluddwjamm4nc29ds3elyzsm5avr7
Terry Yu
nostr:npub1yaul8k059377u9lsu67de7y637w4jtgeuwcmh5n7788l6xnlnrgs3tvjmf
Rockstar
nostr:npub1j8y6tcdfw3q3f3h794s6un0gyc5742s0k5h5s2yqj0r70cpklqeqjavrvg
Rabble
nostr:npub1wmr34t36fy03m8hvgl96zl3znndyzyaqhwmwdtshwmtkg03fetaqhjg240
Matt Lorentz
nostr:npub16zsllwrkrwt5emz2805vhjewj6nsjrw0ge0latyrn2jv5gxf5k0q5l92l7
Vivek
nostr:npub1ltx67888tz7lqnxlrg06x234vjnq349tcfyp52r0lstclp548mcqnuz40t
Stuart Bowman
nostr:npub1lunaq893u4hmtpvqxpk8hfmtkqmm7ggutdtnc4hyuux2skr4ttcqr827lj
Fishcake
nostr:npub137c5pd8gmhhe0njtsgwjgunc5xjr2vmzvglkgqs5sjeh972gqqxqjak37w
Jeff G
nostr:npub1zuuajd7u3sx8xu92yav9jwxpr839cs0kc3q6t56vd5u9q033xmhsk6c2uc
Karnage
nostr:npub1r0rs5q2gk0e3dk3nlc7gnu378ec6cnlenqp8a3cjhyzu6f8k5sgs4sq9ac
Tijl
nostr:npub1q7klm2w94hyq3qdm9ffzpahrrq0qcppmjrapzhz0rq6xgq3fdrnqr6atmj
Santos
nostr:npub1kkumsnghywv56pspxcrzyla4hy0em6yzpvzvlpydrhxvy0g9fuusyqgewf
Dread
nostr:npub1u0uch7uuh6m4vwsnnxpkqtjs7ctvkl4mqmpjjkuwudmn9rc9zgrqx6rrgt
You’re welcome. It’s a privilege to be one!
I like the way nostrapp.link randomizes the order of apps at least. https://nostrapp.link/#note18mw2n6knpurzscaw9uwewewe0kgzsztnck5p3f2q72sa0sacty2s9nqmhh
It doesn’t provide nice Open Graph metada for link previews though. That’s the main reason we switched to njump.me in nos.social nostr:npub1xdtducdnjerex88gkg2qk2atsdlqsyxqaag4h05jmcpyspqt30wscmntxy.
nostr:npub1eu5yg8uclgwnqgvgxmt59kn674qmws0qsqdl4fdvx480cq7xraaq943nau similar to the NASCAR problem again though... how should one pick a client if they don't have one yet?
I like the way nostrapp.link randomizes the order of apps at least. https://nostrapp.link/#note18mw2n6knpurzscaw9uwewewe0kgzsztnck5p3f2q72sa0sacty2s9nqmhh
nostr:npub1eu5yg8uclgwnqgvgxmt59kn674qmws0qsqdl4fdvx480cq7xraaq943nau similar to the NASCAR problem again though... how should one pick a client if they don't have one yet?
What does this have to do with Nascar?
Counterpoint: a website already exists at nostr.com, it is the top search result, people are going to be looking at it so it’s in everyone’s best interest to make it great. It doesn’t need to be overly official.
Happy Sunday #Nostr !
Here’s your #NostrTechWeekly newsletter brought to you by nostr:npub19mduaf5569jx9xz555jcx3v06mvktvtpu0zgk47n4lcpjsz43zzqhj6vzk written by nostr:npub1r3fwhjpx2njy87f9qxmapjn9neutwh7aeww95e03drkfg45cey4qgl7ex2
The #NostrTechWeekly is a weekly newsletter focused on the more technical happenings in the nostr-verse.
Let’s dive in!
## Recent Upgrades to Nostr (AKA [NIPs](https://nostr.com/the-protocol/nips))
#### 1) (Proposed) [NIP 93: Backwards compatible alt-urls](https://github.com/nostr-protocol/nips/pull/898/files?short_path=fd2cd15#diff-fd2cd155c91bd66e592a02a4f3a9e51dc6407a9303aa0b6503dd818e096d6748)
Links break, blogs get moved, domains get changed, and companies go out of business. These can all lead to situations where content on Nostr may get stale because links in notes are stale.
This proposal introduces a concept of alt urls for links in notes. When first publishing, that helps create multiple pathways in case one link is broken.
What’s really interesting is being able to correct broken links after a note is published. Since most Nostr events can’t be updated, users can instead submit a kind 4001 event referencing the original event and propose alt-urls. This could be done by the original author or good samaritan users helping keep Nostr content up to date!
Author: nostr:npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6
#### 2) (Proposed) [NIP 88: Recurring Subscriptions via Zaps](https://github.com/nostr-protocol/nips/pull/866/files?short_path=4acc993#diff-4acc99394b74a02b02b2f272bf8c388759d5530cf9bfdf98a2fdeb3f938097b7)
One of the most powerful things Nostr could provide to content creators is a better way to get paid with fewer middlemen and much lower fees. This proposal from nostr:npub1l2vyh47mk2p0qlsku7hg0vn29faehy9hy34ygaclpn66ukqp3afqutajft uses Zaps as the foundation of a Patreon-style subscription for content creators.
Content creators can publish subscription tiers (and their prices) as a kind 37001 Nostr event. Then subscribers can publish a “subscribe” event indicating they want to enroll in one of the subscription tiers.
Users will then pay the subscription fee via Zaps, which can be verified by the content creator. Finally users can publish a “stop subscription” event to indicate they will stop paying and receiving benefits from the content creator.
To make this easy for all involved, there will likely need to be substantial client work to help content creators facilitate their subscription tiers, verify subscriber payment, and distribute paid content automatically so they can focus on the content creation itself. But this would be a tremendous improvement over Patreon just on lower fees alone.
#### 3) (Proposed) [Rewrite of NIP 46: Nostr Connect / Remote signing](https://github.com/nostr-protocol/nips/pull/831/files?short_path=2f86a4e#diff-2f86a4e0d293b96d9dc35407ffb27c3236297b1f754e26a222571297a605b66e )
Nostr Connect (not to be confused with the Nostr Connect Chrome extension mentioned later in this report) is an attempt to give users complete self-custody of their Nostr private keys, where they won’t need to enter the private key into any client, while still making day-to-day Nostr operations easy and convenient.
In this model there is a “remote signer” which may be a hardware device or a different app on a mobile device, and clients will work with the remote signer to perform operations where a private key is required (decrypting DMs, signing Nostr events, etc).
This rewrite of NIP 46 simplifies the protocol while taking into account real-world learning since the original introduction of the NIP. There is an explicit eye towards helping codify what nsecBunker has to offer. It is a huge improvement to security, privacy, and the ease of self custody.
Author: nostr:npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6
## Notable Projects
#### [Shipyard as a DVM](https://w3.do/uH5biqDl) 🚢
Shipyard is a project that gives more robust publishing tools to content creators (scheduling posts, reviewing and responding to mentions, etc). nostr:npub1l2vyh47mk2p0qlsku7hg0vn29faehy9hy34ygaclpn66ukqp3afqutajft is working to make Shipyard a DVM so that clients can provide the “schedule post” functionality to users without having to build it into the client itself.
#### [Nostr Connect Chrome Extension](https://w3.do/wqL1mweD) 🔒
Every time I am asked to give my private key to a Nostr app, I cringe. For mobile apps I know there’s not much support for remote signing yet, but for web-based clients we should all be able to use a browser extension. Up until now they haven’t been the best design or nicest to use browser extensions. nostr:npub1zfss807aer0j26mwp2la0ume0jqde3823rmu97ra6sgyyg956e0s6xw445 changed all that!
This chrome extension is much better designed and it’s far easier to manage permissions that you’ve granted to various clients in the past. It quickly became my daily driver for web-based Nostr operations. Great work!
#### [140 Character Relay](https://w3.do/9qedXnUC) 🐦
The original Twitter restricted content to 140 characters, and that form factor facilitated a unique set of content creation. Whether it’s nostalgia or a desire to see if going back to 140 characters would help recreate the unique feel of early Twitter, we now have a relay that enforces all notes to be 140 characters max.
Author: nostr:npub1l2vyh47mk2p0qlsku7hg0vn29faehy9hy34ygaclpn66ukqp3afqutajft
#### [TrueVote](https://w3.do/JUPp9LDG) ☑️
Using the combination of Nostr and OpenTimestamps (therefore Bitcoin as well) TrueVote creates a decentralized, verifiable voting system.
From what I can tell, folks can submit votes via a Nostr event (signed by your private key to verify it was you doing the voting), with timestamps verified by OpenTimestamps to ensure the vote happened when the Nostr event claims.
As outlined in [Nostr is Bitcoin’s Layer 3](https://www.youtube.com/watch?v=8oPdYu5hbVg) talk from NostrAsia, this application of Nostr highlights how Nostr seems to be the missing link for freedom tech. Bitcoin is great for payments and immutable history (for example: timestamp assertions) but it is missing the identity and coordination layer.
Nostr in the context of TrueVote unlocks the certainty of “one Nostr account, one vote” which can be incredibly powerful for many applications. As long as the person conducting the vote whitelists who can vote, this is cryptographically secure as well as transparent (votes can be conducted in public and verified by all).
Fascinating to see this in use.
Author(s): nostr:npub1u8um5vstlax9p60644zygvhc7w5mkzfyhwyvj453l3j7l9mrf5rspnc3c3
## Latest conversations: Custodial Solutions
With the recent news about Wallet of Satoshi pulling out of the US market, it’s important to keep the topic of custodial solutions top of mind.
Custodial solutions (for Bitcoin or for Nostr) offer immense benefits for ease of use and convenience, but they are susceptible to all kinds of interference that may leave users holding the bag.
#### Ideally we only need self-custody
Self-custody maximizes freedom: freedom from fraud and rug pulls, freedom from the whims of a regulatory environment, freedom from reliance on third parties that may just go out of business.
Ideally, everyone would self-custody all the important things: money, data, their home, their food, and their water. But doing so is incredibly expensive, time consuming, and requires expertise. Humanity is able to support a population of 8 billion people because of the specialization of labor. At some level we end up trusting others with important aspects of our lives.
Technological advances and engineering effort allow humanity to grow AND decentralize. Bitcoin is a breakthrough that makes it possible to decentralize money and enables self-custody of one’s life savings. Nostr is making it possible for people to self-custody their data and still have all the conveniences of modern digital life.
Whether they be used for Bitcoin, Nostr, or anything else, custodial solutions are the backup until we’ve engineered solutions good enough that the average person can easily self-custody.

#### How to spread freedom tech
The goal of building freedom tech should be to make freedom accessible to more people. If we build solutions that increase access to financial or communication freedom, then that’s progress. Just because that number isn’t 8 billion doesn’t mean it’s not progress.
Custodial solutions for things like Bitcoin and Nostr make freedom *more* accessible to more people. If given a choice between a million people using a custodial lightning wallet or not using Bitcoin at all, I’d argue you’d rather they use custodial solutions for the time being. We can always draw them towards self-custody later.
It remains a noble goal to get everyone to self-custody, but it requires work to build self-custodial solutions that work for average people.
#### Building easy self-custody takes work
There are ways to make products that are as easy to use as custodial solutions and still give the user complete control. They just take orders of magnitude more work to build.
Self-custodial lightning wallets like Phoenix, Breez, Blixt, and Mutiny Wallet are good examples. They have done a ton of the work to make a lightning node friendly to operate, which means that more people will have access to self-custodial lightning.
Before these solutions you’d have to run a Bitcoin full node, then set up your Lightning node, and manage channels with Thunderhub or RideTheLightning or other lightning management apps. It’s a lot of work! Far more people can now run self-custody lightning because of their work. It’s far easier so people are more likely to try it, and eventually adopt it deeply.
There’s still more work until someone non-technical in my family could use self-custodial lightning without needing help, but this is real progress for freedom tech.
#### Nostr: self-custody that’s great
Nostr is inherently more self-custodial than any existing social media. Your private keys control access to your data, you can move your data from one relay to another, you can download backups any time, and you can control what clients can do with your data.
Any use of Nostr is head and shoulders above existing social media. There are some folks offering more custodial or centralized services within the Nostr community (opt-in moderation, custody of keys, hosted relays, etc), and that’s ok, because those are the first step in building something average people can adopt.
Every single day there are Nostr devs putting in the work to make self-custody of your life on Nostr easier, so that more people have full access to the freedom that’s possible via Nostr. In the meantime, we may need to tolerate some more-centralized solutions to bootstrap the user growth and economic activity necessary to fund the next wave of improvements.
## Until next time 🫡
If you want to see something highlighted, if we missed anything, or if you’re building something we didn’t post about, let us know. DMs welcome at nostr:npub19mduaf5569jx9xz555jcx3v06mvktvtpu0zgk47n4lcpjsz43zzqhj6vzk
Stay Classy, Nostr.
Thanks for the great writeup Greg! These are so useful on weeks that I am heads down in development.
nostr:npub1wmr34t36fy03m8hvgl96zl3znndyzyaqhwmwdtshwmtkg03fetaqhjg240 was seen in PEI, Canada in a little town named Souris 😆

He’s got a coffee shop here too 
Finally finished listening to this lecture on fructose and high fructose corn syrup. It took me a few sessions but I’m glad i took the time. I knew high fructose corn syrup wasn’t good for you but Dr. Lustig’s arguments that it is a toxin were very convincing. We don’t eat a lot of the stuff but I’ll definitey be working harder to completely remove it from my diet now. https://youtu.be/dBnniua6-oM?si=S-NDsbU1EDrnQip7
Oh yeah that seems like a huge flaw in 94. Maybe we should edit NIP-94 and let people just put all those tags like `blurhash` on kind 1 or any other event.
Also we really need an ID for finding media when all these files are no longer at their original locations. I don’t care if it’s sha256, torrent info hash, or something else.
nostr:npub1xtscya34g58tk0z605fvr788k263gsu6cy9x0mhnm87echrgufzsevkk5s is the “imeta” tag Damus is using documented in a NIP somewhere? I can’t find it.
Also I had to post this note from Coracle because I somehow broke the note composer in Nos. #stayhumble
It's a little embarrassing, but Nos has never had paginated feeds. This means all the feeds you see are really only downloading the last 100 or so notes from relays and if you try to scroll farther than that you will have a bad time.
Well this week I'm finally fixing that, and I just scrolled back through all my Nostr notes, with good performance, and got all the way back to my first: note1v3k65t6a9kvsmjv0k59xe6x7vhthgxwwu6yaw9fujysht6zu49wss8tx8p
Feels like a big achievement! Nos was written as a demo for Nostrica, and everything we've added to it has been coded up hastily as an experiment/exploration. With our new funding from nostr:nprofile1qqsgydql3q4ka27d9wnlrmus4tvkrnc8ftc4h8h5fgyln54gl0a7dgspz9mhxue69uhkummnw3ezuamfdejj7qgcwaehxw309aex2mrp0yhxxatjwfjkuapwveukjtcpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszree88 and longer runway we can take the time to build something nice. It feels really good.
Wait, are you a fellow Indiana iOS dev? I see you work at Roche, whose HQ is just one town over from me.
Ok I think I see the issue. It should be fixed in the build 94, which should go out on Monday at the latest (hopefully earlier).
Thank you nostr:npub16zsllwrkrwt5emz2805vhjewj6nsjrw0ge0latyrn2jv5gxf5k0q5l92l7 for looking this.
>Is your relay adding content warning tags?
No it didn't. It will make new classification event tagging event id and pubkey of author (kind: 9978) with classification labels (Language, toxicity, etc). Actually, i want to change and migrate that into NIP-32 format instead of custom kind 9978 like now.
I think i really need to draw some flowchart later to explain but did not have time yet. I'm sorry hopefully this can explain a bit 😅
How it works:
1. nostr-filter-relay will run several softwares: atrifat/nostr-monitoring-tool, atrifat/nostr-filter, and hoytech/strfry relay in launch script at startup.
2. nostr-monitoring-tool is classification tool that fetch and subscribe notes (kind: 1) from various relays. It will process every notes (extraction of image url, text preprocessing) it seen and send it into external AI classification tool. Currently it will send processed notes content into NSFW Detector API instance (using atrifat/nsfw-detector-api), LibreTranslate instance, and Hate Speech Detector API instance (using atrifat/hate-speech-detector-api). All three API will give classification results (NSFW class, Language class, Toxic classification) that will be saved as custom kind 9978 in local strfry relay that has already been running. Data format shown in atrifat/nostr-monitoring-tool in github.
Basic Data flow:
source relays (notes) -> nostr-monitoring-tool (connect to external API for classification) -> local strfry
3. Now, using classification data (kind: 9978) saved in local strfry relay, atrifat/nostr-filter will act as proxy relay and intercept any REQ from nostr client and forward them into local strfry relay. Local strfry relay will respond as usual by giving events based on REQ back to nostr-filter. Before sending events back to nostr clients, nostr-filter will check events from strfry whether it has classification data (kind: 9978) or not. For example users set nostr-filter-relay parameters to only gives notes which has "English" language then nostr-filter will only gives those notes using classification data. Any non "English" notes will be skipped.
Basic Data flow:
nostr clients <-> nostr-filter (act like frontend proxy) <-> strfry
4. Nostr client will get filtered events (Real data from strfry are 2000 notes but filtered into 1500 "english" notes) and show that to users.
Very cool! I see the whole picture now. How did you get the content warning showing in Amethyst? Did that note just happen to already have a content warning on it? We are using a more robust ontology for content reports than what is defined in NIP-56. I’d be interested to hear your thoughts on it and whether or not it would be useful to you. https://github.com/rabble/nips/blob/724e05e762a634e501bdcf6cbefaa91f99b1903b/69.md
Here is what we publish when you report someone in Nos:
{
"content": "This content has been reported for Spam using NIP-69 vocabulary https://github.com/nostr-protocol/nips/pull/457",
"id": "03fdb75f9a8c927247cc4fc20abb419bb02932e615f056f67971e6cb8d073e09",
"tags": [
[
"L",
"MOD"
],
[
"l",
"MOD>SP",
"MOD"
],
[
"e",
"79123c0f6e54b330c8e1abba7ef5d6919ae493b072dcac7b603cada5f54bf4d3",
"spam"
]
],
"created_at": 1697565603,
"kind": 1984,
"sig": "5de629322692f102b85a8fc9921ce75b0f78fa3d4ff6f1d5cc69a777a75e6761b3448a689e1799d5d7e1f03aedad709910df03d2800e9801a8c9368841f46858",
"pubkey": "b1e4418e15a3660b5fa29e15e9e543427f2b3969617136be76072c7d674779a2"
}