Matt Odell | Citadel Dispatch E63: Building Nostr, A Censorship Resistant Alternative to Twitter with @fiatjaf, @jb55, @mrkukks
Link to the YouTube (the timestamps are based on this): https://youtu.be/FGdzZl6KcMw
Matt Odell [6:41]: We have a very important topic today — a very timely topic — and that is: building a censorship resistant alternative to Twitter. The project in this case is called Nostr. We have three great guys joining us who have dove deep into Nostr to join us for this conversation and go through the ins and outs of what trade-offs lie with Nostr and what it attempts to solve. So with all that said I will introduce our first guest, who is a return guest: Fiatjaf. How’s it going, Fiatjaf?
Fiatjaf: Going fine, yes.
Matt Odell: Awesome. Thank you for coming back on. I know you were a little bit hesitant, but it’s a great to have you back. And we’ve got JB55. Will, how’s it going?
William Casarin: It’s going well. It’s great to be here.
Matt Odell: Thanks for coming on. And we have Mr. Kukks. Mr. Kukks, how’s it going?
Mr. Kukks: Doing good. Thanks for having me.
Matt Odell: Awesome. So obviously Twitter has been in the news recently because Elon Musk decided to purchase it. All of a sudden a bunch of people that disagree with the politics of Elon Musk realized that Twitter is a massive centralized third party, and whoever controls it controls the narrative that goes on on Twitter and can silence voices they disagree with. Obviously people who disagreed with the previous Twitter leadership have already dealt with that and they’re now happy that they have a new leader at Twitter. But you guys have all been quietly working on and building Nostr, which attempts to solve that centralized third-party issue to a degree. So now more than ever it is a very important topic for discussion, which is this idea of having essentially a technical solution to broad censorship of speech on the Internet. So where should we start? Fiatjaf, you want to start with just a Nostr shill? Why should people care?
Fiatjaf [9:54]: Well I don’t know if they should care now that Elon Musk bought Twitter — they should just give up! But no, I think Nostr is conceived of as an idea that could work, that could scale. It’s not that it should be a fantasy that has been tried many times and failed. Because people don’t want to run daemons on their computers that are online all the time, and because these peer-to-peer attempts that they’ve been trying to pass, they all more or less require some involvement that most people won’t [want to] have. So Nostr takes a different approach. And also it’s a different approach from stuff like Mastodon, because Mastodon has a mistake — it has a problem: the Mastodon servers own your identity so you can’t move very easily. You can be banned and then you lose your audience, etc. [Nostr] combines two things: public key cryptography with the idea of servers floating around the Internet, and people using these rogue servers to connect to each other. That’s not a very good explanation but it’s the idea.
Matt Odell [11:22]: So if I recall correctly, obviously Bitcoin Twitter has had a bunch of issues with Twitter censorship. I’ve been personally shadow-banned for four months now, and just Bitcoin ideology in general, it’s a little bit ridiculous that we’re all basically relying on this massive centralized third party. So in the past there’s been maybe five or six large attempted exoduses to Mastodon — which is a Twitter alternative — that have essentially failed. People have moved over there, used them for a little bit, but everyone just comes back to Twitter. And then Twitter itself announced their Bluesky project which is supposed to be separate of Twitter that’s trying to attempt to solve the same thing. After that announcement I feel like you, Fiatjaf, got a little bit disillusioned: you were like, Everything has trade-offs and the trade-off balance they’re making just does not make any sense. And then you launched Nostr, right?
Fiatjaf [12:43]: Bluesky was so much time ago that I don’t even remember what I thought, but to this day they didn’t publish what they’re going to do. They have no idea — or maybe they have but they’re not telling us what’s the idea. But from the things I’ve read and people they hired it’s going to be something IPFS-based or something very peer-to-peer.
William Casarin [13:11]: I joined their Discord and it was just a lot of nonsense, a lot of shitcoin reactions — I’m sorry Bluesky people if you’re really sincere about it, but last time I joined their Discord I’m like, Are these guys serious? I don’t know, it was just disappointing. Luckily we have Nostr as an alternative.
Fiatjaf [13:29]: Six months after the Bluesky thing was announced I came up with Nostr and I sent it to a bunch of people to talk [about it]. And then someone from Twitter — a guy contacted me and told me to join a private Bluesky chat. And then I joined: All I saw was 20 people there and each of them were creators of peer-to-peer projects that were trying to do more or less the same thing and they were just talking about their own projects. And I said, Wait, how can a new protocol emerge from this? These people, they all have their own interests and there’s nothing that’s going to emerge from this?
William Casarin [14:23]: What I really liked about when I first jumped in and started reading the Nostr — I really recommend people go to Fiatjaf’s GitHub repository and read the motivation which spawned this idea. And it really just comes out of all the pain points — because we’re all really just searching for this decentralized protocol that will be the Twitter replacement. And maybe Mastodon or ActivityPub was a potential solution, but it has so many censorship problems, if not worse censorship problems than even Twitter. So I really like how his post on his GitHub repository really explains why — and I’m sure we’ll get into that, but — some of the motivations behind its creation.
Matt Odell [15:02]: Well let’s unpack that a little bit. So I think everyone knows why Twitter has censorship issues, because it’s literally just run by a company that can choose what happens and what doesn’t happen. What are the issues present — so everything has trade-offs: what are the trade-offs? What are the issues with the Mastodon/ActivityPub approach?
William Casarin [15:28]: So maybe I could explain through my lived experience of going through multiple Mastodon instances. What you really have is these small communities — and this is fine: you have these small communities where people like to talk to each other. One example is the Bitcoin Hackers community and you typically talk about Bitcoin and that’s fine, but it’s really hard to find a non-politically charged community within Mastodon. So it feels like if you ever step out of the line of that particular political alignment of that instance, you’re banned. And once you’re banned, it’s hard to move your followers, move your list to a new instance — you can do it, but it’s just a pain in the ass. So I feel like I constantly have anxiety when I’m on Mastodon because I force myself to censor myself more than I would even on Twitter. I don’t feel like that was a good [head-set] place to be in, and I didn’t really feel right, if it’s going to be the censorship resistant successor to Twitter.
Fiatjaf [16:27]: My experience from Mastodon: I actually joined a Mastodon instance many years ago called toot.cafe. I just found this and was enjoying it. The guy was saying, Oh I’m accepting people here — so I joined. And then I started using that to talk to the Bitcoin people more recently and the guy — the owner of the instance — sent me a message: Some things I was saying were not allowed on his instance. So I just stopped — he didn’t ban me but he threatened to ban me, so it was very sad. But one problem with Mastodon: if they want to ban you, have no recourse and you can’t move your followers. There’s a thing to move followers but I don’t know how it works — it only works if the server cooperates with you.
Mr. Kukks [17:22]: You need to get permission from the server admin to actually move your contacts to the other server, and you need to get permission from the other server as well to go through that whole migration process.
Matt Odell: That’s gotta be the key failure of Mastodon: that it’s hard to move your own data.
Fiatjaf [17:42]: Another failure that I see is their model of replicating content between these servers, because if there’s a bunch of servers — but people from each server are following people from other servers — then it ends up with all servers having to archive and store all the content from all the other servers. And it goes against the idea they had that there are niche servers, small servers with communities that you talk inside. But you always want to talk to other communities, too! You can’t choose a community and be there forever. So you end up spreading content around multiple servers, and I think this is not good for scalability. Nostr solves this in a nice way, in my mind: we don’t have this yet but I imagine there will be Nostr relays for small communities — and the content will be there, only. The content doesn’t have to propagate to all the other servers.
William Casarin: [18:50]: Another big issue is that federated instances would just ban outright whole instances. So I felt like Bitcoin Hackers was mostly isolated from the fediverse because most instances would just ban it for right-wing content or something, even though it’s mostly about Bitcoin stuff. So it’s a lot of issues.
Fiatjaf [19:07]: It’s probably the boiling ocean thing, maybe.
Matt Odell: The biggest example of that was Gab uses Mastodon, and their instance is completely blocked off from the rest of the network almost immediately by the other instances — they just block you off. It’s kind of ironic: you would think that most Mastodon servers would be led by people who value free speech, but for whatever reason their community over there is just not —
William Casarin [20:00]: Very far left I found, just politically, which felt very strange for me because it’s a lot of extremist pro-censorship people, which was just bizarre — I don’t know.
Matt Odell: It’s weird how that happened, just that the culture developed in a different way. A lot of what we talk about on Dispatch is open source code, but at the end of the day there’s also a degree on who is running the code and what their principles are. But anyway, so Mastodon has been around for a while. It seems like it has a lot of technical debt — it’s pretty bloated. It didn’t really seem like they made the best trade-off decisions. And so you decided to start from scratch with different trade-offs. So how does Nostr work under the hood?
Fiatjaf [20:57]: The basic idea is that you have a client, and the client talks to servers — different servers or single server, multiple servers — and you fetch posts from these servers and you send posts out and everything is signed. Everybody has a public key and you sign and you verify signatures — that’s it! That’s the basic idea.
Matt Odell: So how does that look in practice? I’m a Nostr noob. Kind of on principle, the only social media I have left is Twitter. And on principle I was like, I don’t want to do any other social media — I’m just gonna let Twitter die and then be done with social media and just have group chats. But then for this show I obviously was like, Well I gotta play around with it before we have a Nostr show, and all the freaks wanted to talk about Nostr. I think it’s a really cool project. I have been loosely following it, but I haven’t really played around with it at depth, so I’m gonna be leaning on you guys. But from a noob perspective, I went to this website — is it run by you, Fiatjaf? Branle.netlify.app?
Fiatjaf [22:31]: That’s the first client I did proof of concept in. Actually I had done others before but they were very bad, so this one works.
Matt Odell: So you’re running that server, right?
Fiatjaf [22:42]: No that’s a client that runs entirely on the client side. It’s served by Netlify but it’s just —
Matt Odell: Oh but it’s running in my browser?
Fiatjaf: Yeah it’s running on your browser.
Mr. Kukks [22:54]: You can run that on your machine locally — you don’t need to trust Fiatjaf’s server at all.
Matt Odell: Gotcha.
William Casarin [23:04]: Yeah and I don’t even use Branle — I just use my command line to do posts and my iOS app that I’ve been working on. So you have a lot of variety on types of clients you can choose.
Matt Odell: So the servers in question are the relay servers, and that’s I guess where my client is broadcasting my shitposts?
Fiatjaf [23:28]: Yeah your Branle comes by default subscribed to five different relay servers, and when you try to read — when you post something, you send to all of them whatever they accept or not. For now they all will take your posts. And when you follow someone you follow by pubkey and then you send a message to all the servers you know and say, Do you have anything from this pubkey? And these servers will send to you. And then they’re trying to show on your home screen. Then you visit a profile of someone [else] to ask again to the server, What do you have from this specific guy? And then they will send you.
William Casarin [24:18]: One distinction to point out — and why this is really interesting compared to the other approaches — is that you don’t actually have to do a lot to get into the system. To create an account you just generate a private key. So your public key becomes your account ID, and then you can just send a message. Obviously this also could be a downside where bots could be creating accounts and messages all the time, but there are some ideas on how this is going to not be an issue in the future with proof of work and paid relays. But these relays are just very dumb: they just take in events. You can subscribe to events based off of certain keys. So if I wanted to follow all updates to people sending me Notes then I can just subscribe to my pubkey and then I’ll only get events from my pubkey. Or if I want to filter it even further I can say, I want to just listen for all encrypted DMs and maybe not specifically random Notes. So it’s just a very flexible protocol for querying documents from a server and filtering it based off of things you’re interested in. And it does it in real time so it has this real-time aspect, this publish-subscribe aspect where you can just receive them in real time, which is nice for chat rooms and things that.
Mr. Kukks [25:49]: So with Nostr, it’s very simple to just create any model you want. Like, if you want to create a Twitter model where you just have an account — which translates to just creating a private key — then you have a public key and that’s your username, and [it] messages on Twitter. So if you want to create the Twitter model it’s basically: to create a tweet you create one event which is signed by your username, you push it to a relay, and that would be basically like twitter.com. But you can actually create a federated system as well. Let’s say you don’t like Twitter — you want to have your own world: you can do twitter2.com and that would be another relay. You just post your messages there as well. So it’s very easy to model it after basically any live directory of messages. The way I was looking at Nostr at first was more like a marketplace or like a directory of sorts. But some of the tests I was doing first — like some prototypes for clients, for my own self — was more like just emulating Reddit just for the sake of having something a little bit different than a Twitter clone. And everything is just really easy to translate between things, because Reddit is really kind of the same system as a Twitter post, and then you just have replies and communities. It’s like threaded replies in different areas. I don’t know maybe I’m ranting a bit.
William Casarin [27:28]: No, but that’s what makes it somewhat interesting is that these Notes that you’re posting can be viewed and interpreted in different ways. So let’s say I do a post and in one client it might interpret it as a tweet. And it has some additional features on the Note which is: you can reference other notes, so from that you instantly get replies. So now you can reference a thread and then you can reply to the users within a thread. So this is what Branle and Damus — my client — [does]: it renders Twitter-like threads. But you could also use it for other things! You could have your server generating events for your business. And this is one idea I had where let’s say you run a private relay for your organization and there’s different systems that are generating events within your organization and you can maybe retweet that within your organization or reply to it and CC people in your organization, but this could all be within your internal relay that you could even — if you want to — selectively publish it to the outside world. So in some sense it’s just a generic information relay system where you can reply, but Notes are linked and Notes can be interpreted in different ways depending on your client. Another example would be: imagine you create another view for that thread. Instead of a tweet thread, it’s now a document editor. So each post within that Twitter thread is now like a paragraph in a document which you are now collaboratively editing! Because there’s no reason why you can’t have edit events that modify other events. So I think the great thing about Nostr is that it doesn’t spec any of this — it just specs this really dumb relay protocol for Notes. But you can write a variety of clients that all interop with each other, which is really fascinating to think of what that could bring about.
Matt Odell: At the base level it’s just cryptographically signed messages being broadcast, right?
Fiatjaf [29:25]: Yeah it’s basically this, but then we have a very small spec of the basic format for these messages. And then we have optional specs that they’re there just if someone wants to interop — if two clients want to implement the same thing and be compatible with each other: we could have the direct messages thing or group messages or Twitter-like stuff, but then you can render it as Reddit stuff, or you can have messages that are meant to be rendered just only as Reddit threads — not as Twitter posts, for example. And then the client needs to support the Reddit thing to render these. And I think a multitude of clients having different interfaces will arise, but they all will talk the same interface with the relays and with this automatic interoperability — it will be very nice.
William Casarin [30:27]: And since nothing is really specced I’ve been actually working on a few NIPs right now. So those are what we’re calling — they’re similar to BIPs but they’re Nostr Improvement Proposals, to get a little chuckle on that one. But there’s some things that are just not specced such as block lists, so that would be an easy spec to add: just being able to upload a list of pubkeys that you blocked on your user. I’m working on the Boost specs, so being able to retweet. Also edit messages. I think there’s a Delete Note, so you could publish a Note that says Delete This Note and then it just deletes the Note. Or Edit The Note — yeah we can get editing! We don’t have to wait for someone to buy Twitter for $44 billion to get editing! We can just implement that. It’s an open protocol — anyone can propose stuff. So that’s what I really like about Nostr is that it can be incrementally improved upon. Or even just this morning I had this idea where imagine if you wanted to show Lightning tips on a Note? Maybe you would just give the Note ID and your pubkey and put that in a Lightning invoice and then that Lightning node can send a Nostr event saying that, Hey I was paid! And then clients can then read that Note and display the tips on a Note. So there’s so much innovation that could happen on this protocol which I’m fascinated about.
Mr. Kukks: It’s interesting because most of the functionality happens on the client side, so the relay doesn’t have to know about any new features you add as long as it really is just accepting messages that are signed properly by a private key. It doesn’t matter if you build a whole decentralized exchange on it or something — it will just work. As long as the clients obviously support it, but it will just work straight away. You don’t have to wait for a server to update at all. If the basic construct of systems is the same, you can easily have a cross-compatible [but] different view: so if you have Twitter, Reddit, a message board all using Nostr as the protocol, they could easily just be cross-compatible with just very different views for the user.
William Casarin [32:34]: One example would be: imagine you could reboost a Reddit comment and then I could see that in Twitter and people could be replying to it on Twitter but it would also show up on the Reddit side. So these are the things you could do on an open protocol.
Fiatjaf: One thing I did — that no one used because it was very shitty — is that if they show you can comment on pages and then you can add a comment to a new page and it shows on your client’s feed but it adds a tag with the website. And if the client knows, it should show the website you’re commenting on. And the same message format could be used for someone that just wants a comment section on their website — they just embed a widget that comes to Nostr. And all of this would show on people’s feeds.
William Casarin [33:30]: I wouldn’t say it’s shitty — I think the issue right now is that literally no one is using Nostr. I subscribe to the global feed on my app and no one’s using it! So that’s the bigger issue right now.
Fiatjaf: It was shitty regardless of that.
Mr. Kukks [33:45]: It depends as well on which relays you’re listening to, so like Twitter could be running on a Nostr relay and you wouldn’t know either!
William Casarin [33:53]: Yeah if Twitter wants to implement a read-only Nostr relay, that would be amazing. Because then I could just subscribe to everyone I’m subscribed to on Twitter and then I can stop using the Twitter app.
Matt Odell: Well I mean supposedly Elon listens to this show, so hopefully he implements that.
William Casarin [34:07]: All right: Elon, get on this!
Matt Odell: Wait so you mentioned something there: you subscribe to a global feed. So my first two pain points that I noticed: one of them was discovery. How do I subscribe to a global feed?
William Casarin [34:22]: Yeah Francis mentioned this as well when he joined: he was like, How do I find people to follow? So there’s a bunch of different ways. I subscribe to the global feed — this is not going to work once Nostr gets any amount of popular because it’ll just be a fire hose of events, but — for now it’s fine. It’s the bootstrapping days. So you need a client that does this. The client that I’m working on does this, which I’m hopefully going to release soon. But you just simply do a query that subscribes on everything.
Matt Odell: Got it. So the Branle client doesn’t support that right now?
William Casarin [34:55]: Right. For a good reason, because it probably will break in the future. But for discoverability it’s really nice because I always just say hi when people say hi so it’s good to have that at the start.
Matt Odell: Yeah it feels really lonely when you first launch it.
Mr. Kukks: It’s really easy to do it. Nostr has this thing called Tags where if you just do a tag mentioning Bitcoin or something, you can easily do a filter that just finds everybody posting about Bitcoin in one go.
Fiatjaf: When you first join Twitter, what do you get? Because everybody says it’s lonely, but if you open a new Twitter account, it would be very lonely, no? That’s my excuse.
Matt Odell: No, they put a bunch of promoted shit in front of you like the algorithms. It’s an algo thing.
Fiatjaf: Yeah but that’s worse than lonely!
William Casarin [35:43]: So, I recently did this. I created an account [on Twitter] — I didn’t follow anyone. And they would just put furry shit in my feed. I’m like, What? Why is it the default thing they’re putting my feed?
Matt Odell: Clearly you’re not using a VPN and you enjoy furries.
William Casarin: I guess so! I don’t know, it’s very strange.
Fiatjaf: The way you build a feed on Twitter should be the same way you build a feed on Nostr: you find someone you like and you add that manually, and then you watch as they interact with others and you pick people and start following other people. The other thing is like, How do you choose the relays you’re going to subscribe to? And I think this is a bigger problem, but also a very fun problem, in my opinion.
William Casarin [36:29]: Fortunately right now most relays seem to be mirroring each other. You can actually write a script that does a query that pulls all the events from one relay and pushes it to another relay, so it seems like some people are running those right now. But that is a big issue that if someone is trying to send me a message and they don’t know what relays I’m connected to, then I won’t see their message. There is a way we somewhat handle that in the contact list: you can put in what relays I typically connect to so people know where to send the notes that it’ll get to me.
Mr. Kukks: Even in the messages you’ve got that recommended relay thing, right? So it does help as well a bit if you find someone at some point. If you find a message you actually are interested to interact with, you can easily find some data involved there where it can tell you to just connect to a different relay to actually get the full list of related data to it, so that could work out. I don’t know if people actually use the recommended relay list, though.
William Casarin [37:38]: I haven’t implemented this in my client yet but I do plan on Add Relays to the relay pool whenever I see them, it’s just more work on the client side.
Matt Odell: In practice, most people just use whatever relays are set as default in whatever client they’re using?
Mr. Kukks [37:55]: It depends if you’re trying to do something very specific because, from my perspective, Nostr is a fun toy to play with if you’re trying to build a Twitter or a social media clone, but I think there’s much better use cases as well long term. So you might end up connecting to relays that do very specific use cases. So I work on BTCPay — what’s one thing I want to build at some point? Probably having BTCPayServer’s instances talk to each other to do some coordination of some sorts. I would intend to use Nostr for that kind of stuff as well.
William Casarin: Isn’t there a JoinMarket coordination bounty out there?
Mr. Kukks: Exactly. JoinMarket would be an awesome candidate for using Nostr as well. Instead of IRC, you could just switch over to using a Nostr relay to broadcast your bids and offers.
Matt Odell: That’s interesting.
William Casarin [38:57]: Another thing I’ve set up is a private relay on my Wireguard VPN at home. And my Bitcoin node, whenever it gets a transaction, it’ll create a Nostr event. And whenever my [Core] Lightning node gets paid, it’ll send out an Nostr event. And only my client on my phone that’s connected over a VPN can see those events. So they’ll just show up in my Twitter feed or whatever — my Nostr feed.
Matt Odell: But are you sure only you can see those events? I thought I saw them.
William Casarin [39:22]: I’ve implemented a feature in Damus which allows you to rebroadcast private events to public relays, so anytime you see them there, it’s a very small subset of things I’m choosing to publish. So that’s another cool use case where you can have a private Twitter feed for your events.
Fiatjaf [39:42]: So just to answer the previous comment from Matt: the client shouldn’t have a hard-coded list of relays — it should have an easy way for people to find relays, or an automatic way based on some criteria to add new relays through your pool, and remove others. And I think stuff like following a relay but only for this specific person, and the other relays for other people — this kind of thing could be done. For example, if you just follow a set of people and the relays they are in but you also want to see replies to posts from random people — but you don’t want to spam — so for the replies only, you will follow only the relays that filter spam better. They charge per post or they ask for proof of work for posts so the replies won’t have spam on them.
Mr. Kukks [40:42]: You implemented a relay with the cost concept right, Fiatjaf?
Fiatjaf: Yeah you have to send 500 sats.
William Casarin: Is that per post? Or does it whitelist your pubkey? Because I’m pretty sure it’s broken right now.
Fiatjaf: It’s a single payment.
William Casarin [41:02]: Okay that’s broken then because I paid three times and it’s not working, so you owe me money!
Fiatjaf: It’s not working.
Matt Odell: It’s a feature, not a bug.
Fiatjaf: Maybe it’s offline, I don’t know?
William Casarin: Rug pulled.
Matt Odell: That was my next question: the two pain points that I immediately saw was discovery and spam. I mean I didn’t see any spam because there isn’t really any right now.
Mr. Kukks [41:34]: Spam is definitely going to be a big issue. If it gets adopted by any notable userbase, it’s going to be an issue, for sure. So you can go for some Hashcash kind of solution, but I don’t think that would slow down bots in general. Even if you look at Twitter, you only notice maybe 20 comments on every post you do. Even on the Citadel Dispatch post it was some random bot just saying, Look! And some tinyurl link and trying to rug pull the shit out of you, but it’s like only 10 of them. Hashcash-ish situations might not stop that, because it’s only 20 posts — they can probably do the proof of work easily.
William Casarin [42:19]: So here’s why I completely disagree — and I’ve been thinking about this a lot. There’s a really cool feature: me and Cameri — he’s another Nostr dev — we’ve been working on a proof of work system for Nostr events. So basically the way that it works is that you add a nonce tag to the Note and you just keep increasing the nonce until you get a certain number of leading zero bits on the Note ID. So you can do interesting things with this. For instance: if I created a thread and I said, I want a certain number of leading zero bits to only show up on the replies of this thread — and you can make it really high. Let’s say 50 bits, which is actually pretty hard. You could actually pay a miner to create this event for you, because the ID doesn’t commit to the signature — it’s just the pubkey and the data of the Note. So you can actually export proof of work to a service and you could pay that service to do that work for you. This might be another roundabout way to disentangle the payment method from paying for proof of work. The reason why this is interesting is because if I’m replying to a thread, the biggest issue on Twitter right now — the most annoying thing, even when you did this tweet, Odell — you just get a million spam messages.
Matt Odell: Yeah I get inundated immediately.
William Casarin [43:47]: They can’t do that in Nostr if you did use this proof of work system because they would have to start doing the work immediately based off the ID of your post. If you said it’s something like 50 bits, they would either have to pay for that or get a miner to reply. So I was thinking maybe using proof of work to prevent those types of crypto spammers on threads might be interesting, but I don’t think there’s any implementation that does that yet though.
Fiatjaf [44:20]: The proof of work thing is interesting but I think other approaches can be used. In my opinion you do the filtering by relay, but anyway clients can implement different approaches here. There are many ways and they all will deliver some level of success.
Mr. Kukks: I’m scared that if you implemented it on the client side, the bandwidth might be a bit much on the end user and also the relay as well, because then you’ll just end up with a buttload of spam messages just saved to and persisted to the server, right?
William Casarin [45:04]: Yeah because I was considering running a public relay and I’m like, What are the things I have to think about? Botnets could just spam my relay and fill up my hard drive. So at the very minimum I would want proof of work requirements for every Note coming into the system.
Fiatjaf: You mean on the relay side, right?
William Casarin: On the relay side. Just for that — just to prevent people spamming my relay.
Mr. Kukks: I would do that as a base minimum as well. But also: on my relay implementation, I started doing a balance concept for every pubkey, and then you can configure the relay so that every pubkey can have a cost associated to register it — just like Fiatjaf’s system does — but also for every message and every message kind type can have a different cost to it, just to be able to control it a little bit more. For example, if somebody’s just sending a message to a whitelisted amount of pubkeys then it could be free or else it could have a specific cost to it in sats — at least, in my relay the monetary base is sats. I think some money penalty could be quite important to actually make sure that your data doesn’t get overloaded, at least on your server, because spambots will just try to wreck you.
Fiatjaf [46:37]: Other approaches that could be fruitful are Google reCAPTCHA for stupid people that don’t use Bitcoin, and invite-only relays for small communities with human moderators — like, This relay is only for football content and whatever [else] I will ban you if you talk about other things. And stuff like maybe KYC — not that I’m recommending that one!
Matt Odell: Yes, solve the Nostr spam problem with KYC — that’s the plan?
Fiatjaf: No that’s one possibility that we allow people to do but we won’t recommend. And the other one is the algorithm: someone could make a relay that has an algorithm like [with respect] to Twitter threads.
Matt Odell: So one of the big differences here with something like Mastodon is it’s all client-side. So if I’m using the private football relay and I decide to talk about basketball and they banned me, I have my private/public key pair and it’s all client-side — I can just switch relays and that’s all I have to do?
Mr. Kukks: Yeah, no data loss.
William Casarin [47:58]: And you would typically be connected to other relays. You would post it to that particular relay, but you’d also be posting it to other relays, so the other relays would all potentially be storing your messages as well. So if they banned you, you could still pull all those messages from another relay and even just move them to another relay. So the data is much more movable in this architecture.
Matt Odell: But is my client not keeping a copy of all of my messages that I’ve sent?
Mr. Kukks [48:23]: It depends on your client. You can always just copy all those events in one go. Like, if the client is saving all the events, then you can actually just post them on a different relay and you’d be back up to speed with your conversations.
William Casarin [48:37]: And even just in my case where I run a private relay over VPN — all my Notes are backed up. I know that they’re backed up on my machine at home, so I can always pull those and push them to other relays. And that includes my contact list and block list and my metadata, my profile metadata — all that stuff.
Matt Odell: So if we go back to the spam conversation: Will, I think it’s interesting how you basically say using the proof of work method is disintermediating the payment method because people can go and pay a proof of work provider in whatever payment method they want and then that proof of work could be submitted.
William Casarin [49:19]: The difficulty adjustment is the market. I was thinking about it this morning in the sense that let’s say spam gets even worse and even spammers are paying — I don’t know, maybe they probably wouldn’t be paying money for proof of work, but let’s say they’re running their own ASICs and they’re able to spam. Maybe proof of work providers could build bigger ASIC farms and then you can pay more. In some sense, the market should be difficulty adjusting the amount of bits you need in the proof of work. So I just think that was an interesting idea. And another cool thing about the protocol is that it allows you to filter on prefixes of IDs — not just IDs themselves — so I can say, I’m looking for eight leading zeros on this ID. So let’s say I marked my thread as: I expect eight zeros on the front of my ID — then I can easily filter all spam from my thread that way. That’s another benefit.
Matt Odell: My next question is: Why not just accept sats directly?
William Casarin [50:23]: One issue with this is that now you’re saying, To post to this relay I need to pay sats to get my message on that particular relay. But if I don’t have sats and I wanted to get a message to that relay so that someone on that relay can read it, they might not be able to do that. Where I feel [with] proof of work, it doesn’t really matter the way you pay it — it just really comes down to the market.
Matt Odell: That’s more of an adoption issue. In a post-Bitcoin world, everyone should be able to pay sats.
William Casarin [50:59]: Yeah what we’re trying to get across here is that Nostr isn’t really a Bitcoin project, but I think Bitcoin’s gonna be a big part of it — Lightning, Lightning payments — but it doesn’t need to be. It’s more of a general information relay system where there could be many different ways to do things.
Matt Odell: It’s cool that there’s optionality in that the different relay operators can choose what they want to do and that they’re still interoperable. But isn’t there a strong argument there that by doing it with sats, you’re basically providing a direct incentive to the relay operators to basically run a reliable relay that isn’t inundated with spam and garbage and stuff?
William Casarin [51:42]: Yeah I personally would do it with sats. If I really wanted to make it easier for the normies then I can make a Stripe integration or something, but sats is the way to go.
Matt Odell: Because I feel like one of the failure points of Mastodon is there’s only really three reasons to run a Mastodon instance: (1) you’re just using your own instance so you don’t have to be subservient to anybody, so you’re just basically running it for yourself and maybe a few friends, (2) ideological reasons, (3) the control play. Like, if NVK is evil and he runs the Bitcoin Hackers instance, he can make sure that Foundation Devices and all of his adversaries aren’t allowed to have access to it — so he gets some indirect benefit from having control, but there’s no direct incentive for someone to run a Mastodon instance. But in this case, there could be [direct incentives] for a Nostr relay.
William Casarin [52:51]: Authoritarians love ActivityPub and Mastodon instances because they get to have that power banning people and controlling their own feudal society. But I feel Nostr is definitely more of the free market — you can charge [for services] in different ways — and I like it on that aspect.
Fiatjaf [53:15]: Another point I had here is: a problem I have on Twitter today is that sometimes I want to post something in Portuguese — some completely unrelated [to] Bitcoin topic — but I’ve got a lot of people that like my Bitcoin-related English posts, so I think that would annoy them so I don’t do it. And I also see sometimes people I follow because of their Bitcoin stuff, and they post stuff in Turkish or Russian or whatever, and that’s very annoying for me. And I think if you had different relays with different communities and you could say, Oh my post is about this topic — it will go only to this relay. And my posts about the other topics go to another relay. It could solve this problem.
Matt Odell: I guess in my head that goes with Kukk’s Reddit concept, because Reddit is already separated into communities but you use the same username. But you can post in /r/maps or /r/bitcoin depending on what you want to talk about.
William Casarin [54:22]: And there’s another way to do it: one issue I have on Twitter is that I like to tweet about a variety of topics and some people just follow me for Bitcoin and maybe not Nostr and they’re like, Stop talking about Nostr! But I’m like, But I’m obsessed with Nostr in the past month so that’s all I’ve been tweeting about! So Nostr has a way to add tags — metadata — to a Note. So I was thinking maybe if you could just say, Hey this post is about Nostr, this post is about Bitcoin, and people can selectively filter that out — I think that would be really cool.
Matt Odell: But this is not really possible today? Or it’d be easy to implement but it’s not implemented?
William Casarin [55:02]: I’m definitely implementing it in my client, but other clients would have to implement it. We have to start speccing this stuff so people can start implementing — we need more developers!
Mr. Kukks [55:09]: The beauty of Nostr is that it’s so easy to implement these kinds of things: once you agree on the specific — either a tag or a kind or something — it’s super simple to just say, Okay I’ll implement it in a day or two. It’s really not that much of a hassle. The base of Nostr is literally just a piece of JSON content that you just create — there’s really not much to it. It’s JSON and WebSockets — there’s not much to it. Any website developer can build a Nostr client or relay.
William Casarin [55:45]: And this was my issue with ActivityPub and Mastodon is that their protocol is extremely complicated — I probably spent a year trying to build an ActivityPub node and it was such a pain in the ass that I just eventually gave up. But this one, I don’t even have to write a node — I just write a client.
Mr. Kukks [56:04]: The relay code is almost just as simple — the extra complication is that you have a database involved, and that’s really all [there is] to it. But if you can write a client, the relay part is just getting those messages and putting them into a database somewhere.
William Casarin [56:27]: Yeah guys, Nostr is cutting-edge tech: it’s just databases that you can replicate to each other — it’s pretty mind-blowing, innovating tech!
Fiatjaf [56:39]: It could be a relay without a database. Someone suggested to have a relay that doesn’t have a database — it’s just stateless and it keeps stuff on memory for a while and then deletes it.
William Casarin [56:45]: It’s funny you mentioned that: I’m actually going to implement that for my iOS notifications, because I realized I don’t need to store anything — I just need to look at a pubkey and associate that with a device, and the minute I see that I can just send an iOS notification. So that’s going to be one of those use cases.
Mr. Kukks [57:00]: That could actually work as a use case for some specific styles of how to use Nostr: if you wanted to build some kind of CoinJoin coordinator for Bitcoin which needs to live for only a short period of time, that could actually work as well. You don’t need a database to persist the data to it — you just need a memory storage of who is joining? The inputs/outputs? Boom — broadcast transaction — you’re good to go.
Fiatjaf [57:36]: Or a game server: people joining a game — you just need this data to be kept for the duration of the game.
William Casarin: But we are going to switch to Solana, right? Just for maximum speed and scale? That was a joke.
Matt Odell: I hope most people are aware it was a joke! It hits a little close to home, though. So you guys seem pretty glowing about Nostr, but what pain points have you guys seen? Have you seen any pain points yet? What are your concerns as this thing gets built out?
Fiatjaf [58:30]: Oh one thing: some people come to the chat and ask, I want to experience Nostr — what do I install? And I think the mentality shouldn’t be that — for now, at least — because there’s no Nostr you can install. That’s just the idea, and some clients that implement parts of the idea. So if people come thinking they will get a full product completely built and they can just judge based on that — that won’t happen! We need more developers implementing more of the ideas and experiences for other stuff.
William Casarin [59:09]: Yeah Fiatjaf said, Don’t expect this rosy garden or anything! If you’re gonna get into it now, you’re gonna suffer. But it’s not really meant for users at the moment. We need more developers, we need more people experimenting. Our clients are crap — I’m trying to make a better client, but it’s only for iOS. If we could get an Android client, that’d be great. Android developers — we need those. Some more web clients. We need more developers. We need to get people into this.
Matt Odell: So for the developers that are listening, what’s the best way for them to contribute?
Mr. Kukks [59:45]: There’s probably a client in three or four or five different [programming] languages at this point, so there’s multiple options for most devs to be able to join in. I have a C# client, I have a C# library, I have a C# relay as well, so I’m hitting every point from my end. I think Fiatjaf has one in Go, if I remember correctly?
Fiatjaf [1:00:10]: I have a library in Go and a command line client that is very incomplete, but it could be of some help. I have a Go relay library that you can just reuse it and implement the parts of the relay that you want to customize, and it does the basic stuff for you. There’s the Branle web client. There’s a guy working on a Haskell desktop client. There’s a guy working on an Android client, but we don’t know exactly what he’s doing — maybe he’s just saying it and he’s not working on it actually. There is a client in Clojure that I like very much for desktop that was made by a friend of that guy called Uncle Bob Martin that some people know. Uncle Bob Martin also was working on a client in Clojure I think.
William Casarin [1:00:57]: I love that Uncle Bob’s on this. I see him posting on his client every now and then — I’m like, This is so cool!
Fiatjaf [1:01:04]: I didn’t know this guy but apparently he’s an idol for a bunch of people.
William Casarin [1:01:10]: Yeah and I’m working on an iOS client in Swift. Hopefully it will be released soon. You can run it on Mac OS.
Matt Odell: So I mentioned discovery earlier and Fiatjaf seems like he’s pretty content with the discovery model of just following one person and then seeing who they talk to and then following those people and seeing who they talk to.
William Casarin [1:01:47]: Yes, so I brought this up before but Francis came on and he was talking about how do I discover people? So I actually created a Cool Bitcoiners account and I started adding people to that contact list and I gave the private key to that account to Francis. So this is an interesting idea where you could — and maybe down the line this will get into multisig Schnorr or something — where you can share an account with other people, but I gave him the private key so he can add people to that list. Contact lists are a part of the protocol right now — they’re kind of like Twitter lists — so I thought that might be one interesting way to do discoverability: to have these lists that are published.
Matt Odell: My client says that you are currently following maybe 25 people — is that correct?
William Casarin: Eh, that sounds about right.
Matt Odell: But most of them are just bare pubkeys?
William Casarin [1:02:41]: So this is again an issue with the Branle client. With my client, it actually syncs all contacts so it’ll render the names. But again: you can’t really rely on the names because someone could be faking that to just trick you.
Fiatjaf [1:03:04]: I don’t like JavaScript bloating my browser so I try to limit the amount of data and connections, but I think that’s a mistake on Branle. So the client only loads stuff when you click — it loads a little bit of them, and if you click on the others it will load the others.
Matt Odell: Yeah as I click the names are coming up. I just found Cool Bitcoiners. I just found Keegan. But I can’t see their follow lists. I guess it’s gonna take a little bit —
William Casarin [1:03:36]: I wouldn’t judge Nostr based off of Branle. I love Branle — don’t get me wrong, Fiatjaf — but it’s got some optimization to do.
Fiatjaf [1:03:44]: Well I had this Nostr idea for a long time and a lot of people were liking it. And there was no client — no one was using it — and that’s why I said, Oh I must do something that’s usable, at least. So I did Branle, and then it brought more people to become interested, so it served its role.
William Casarin: I think the point is that it’s gonna be killed after we get a good client.
Matt Odell: Is there a better client that’s usable right now? That’s got a GUI?
Mr. Kukks: I’m not sure about that. My client is worse than Branle, for sure.
William Casarin [1:04:23]: I just use my command line.
Matt Odell: That’s why I put the GUI clarifier in there.
William Casarin: That’s why we need devs! We need devs. Help us out — please.
Matt Odell: Mr. Kukks, how do I find your account? What’s the easiest way for me to follow you on Nostr?
Mr. Kukks [1:04:41]: Honestly, I don’t even use Nostr in a persistent way. My client is literally with no backing to it, so every time I load up my client it just creates a new pubkey for me. So I’m in no persistent state whatsoever in this world. I think we will end up with better clients — it’s more about actually finding a proper market fit for it. It’s very easy to build these very simplistic things where you can browse events, have a new private key generated, follow a bunch of people, message a bunch of people — but you actually want some random guy to show up and be like, Hey I’m building a startup on your Nostr idea! I’m gonna make a bunch of money off you guys — I hope that’s okay? And you want us to be like, Oh that’s awesome! I hope you make a buttload of money and actually promote the idea a bit better! Because that’s the guy that’s gonna fund devs and UX guys to actually build a proper client for you.
William Casarin [1:05:47]: Yeah that is kind of my master plan now: I do want to turn Damus into a Slack or even just a Slack/private Twitter for your organization — that’s my master plan for my app, so hopefully I get there and it charges this a bit. But for now yeah we need more clients.
Fiatjaf [1:06:02]: Since William has revealed here that I am terrible at making clients and Damus is going to conquer the world, I think we should focus — that’s my plan, at least — to focus on some of the other use cases like the JoinMarket stuff that Kukks mentioned. And there are a bunch of other ideas that don’t fit the Twitter model: some guy suggested a global Wiki that you can find posts from anyone and you can choose the edits you want, and the posts would have tags with the name of the article and it would link to other articles. And when you click — if you’re browsing football and you click football you’ll get an article for football, but you could get multiple options from multiple people and then you can choose the one you want. And other stuff like the DLC stuff — the DLC guys are looking for a way to solve the DLC liquidity thing, because you can’t really find other people to bet with unless you know the person and you talk to the person, etc., so it could be nice to have a decentralized order book of DLC bet offers and stuff like that. And also for the oracles to announce themselves — I think Nostr would fit very nicely in that. One idea that inspired Nostr was the Diagon Alley idea that Ben Arc created. When he just created LNBits, he wanted to make an LNBits app that would allow you to register some products and then it would create for you a list of products you would be selling. And then people wouldn’t have to connect directly to your LNBits instance to browse your your products, because these products would be sent to an indexer, and the indexer is a server running somewhere that would render the offerings from multiple shops. And when someone wants to buy stuff they would go to the indexer, not to the shop directly. And I think this matches perfectly to Nostr.
Mr. Kukks [1:08:21]: That would be awesome, yeah. That would also be awesome because in BTCPay as well we have this concept of point of sale apps with items in them and crowdfunding apps with perks inside them, and at one point I was gonna do it so that you can connect them all together so that you can get the directory of items, but it would be so much better if you just had a Nostr relay where you can just post these products to it and then they would just show up for everyone in a unified way. I guess you can kind of recreate the experience of OpenBazaar but without the centralized server — well there’s still a centralized server but it’s multiple servers.
Fiatjaf [1:09:07]: OpenBazaar is such a failure because no one would install that big, bloated thing to be able to browse some nothings. But if you can just visit the page and see the products, it’s much easier.
William Casarin: I totally forgot about that project.
Matt Odell: They legitimately added Solana, so they have that going for them.
Mr. Kukks: Oh, they did?
William Casarin: Oh my God.
Mr. Kukks: It’s a rebrand, right?
Matt Odell: It’s a different name now.
Mr. Kukks: ClosedBazaar.
Matt Odell: They took a bunch of VC money, too, which is always the poison pill. So it seems like all these use cases we’re talking about sign messages, but presumably — because you have a public key/private key pair — you could do encrypted messages, too, right?
Mr. Kukks: Yeah, there is. There is direct messages between users which is encrypted end-to-end. You can post a message specifically between two persons and only those two people can actually look at the message and decrypt it. So you can actually recreate a Signal experience — except group messages because that’s still not possible. But you can create these things to do it.
William Casarin: Yeah and you can definitely do group messages.
Matt Odell: It’s just an implementation thing, right?
William Casarin [1:10:25]: It’s all about how do you generate that shared secret. In the case of a DM it’s: you take the pubkey and your secret key, but in a group setting it could just be a different way to generate that shared secret — so you could definitely do it.
Matt Odell: But so then presumably every project that Fiatjaf hates on Lightning that wants to use onion messages could use Nostr instead?
Mr. Kukks [1:10:55]: Yes I would really recommend that instead.
Fiatjaf: What projects are using onion messages?
Matt Odell: I don’t know I just feel you’re always complaining on Twitter when someone wants to use onion messages!
William Casarin [1:11:04]: He’s just not a big fan of onions. Do you have something against onions?
Fiatjaf: I want to leave the onions for me to eat. No — stop using the onions!
Matt Odell: A big thing is this idea of reusable invoices on Lightning. You could just serve invoices through Nostr, right? You could just hit a Nostr relay for you to give a new invoice and you hit him, right?
Mr. Kukks [1:11:37]: For sure. You can kind of do the DNS resolution stuff through a Nostr relay instead of a domain name if you wanted to. I was actually thinking about that the other day as well: you know how BIP47 requires that transaction to do the handshake? Maybe you can bypass that and just do it over Nostr events? I mean, you can do so many things over Nostr and it won’t cost you and bloat the blockchain just to do it. So BIP47 notifications, LNURL — that kind of stuff can happen over Nostr instead of DNS or blockchain OP_RETURNs.
William Casarin [1:12:22]: One thing I wanted to mention was: we could actually create a Signal alternative if we have some smart crypto people to come in and put together a Double Ratchet spec on Nostr. So yeah we have encrypted DMs, but if your key was ever leaked then all your DMs are leaked, which is not ideal. But there’s no reason why you couldn’t implement something like Signal on top of Nostr, so that is something I would be really interested in — I’m not a crypto person, so if anyone would like to think about that on Nostr, I would love to hear them and I can implement that in my app.
Fiatjaf [1:12:54]: The big problem with that is the metadata that leaks if you’re using public relays. It could be solved if you use a private relay that promises to not reveal your metadata. I don’t know if there’s a better way.
Matt Odell: And then you’re still trusting them in that situation that they’re actually not keeping logs, right?
Fiatjaf: Yeah. I think for now we should maybe focus more on the public stuff — public chat groups and public hosting. There’s other protocols that are interesting, but William made a Notebook thing that I wanted to use but I don’t have an iPhone. It could be a separate app instead of being stuck inside the apps that do social things.
William Casarin [1:13:48]: Yeah so what Fiatjaf is referring to is: I created a Nostr account that’s called Notepad@jb55.com. And I’ve been using it as a notepad as like Twitter threads just as an experiment, because in the future I could potentially create a view — or someone could create an app that has a view — that renders that thread as a threaded notepad, which might be interesting.
Matt Odell: A little bit unrelated, but in my settings I have this NIP-05 identifier?
William Casarin [1:14:28]: It’s really simple: if you’re familiar with LNURLs, basically there’s a “well-known” path on your web server. So it does require you to run some infrastructure — some web servers. But it’s .well-known/nostr.json.
Mr. Kukks: It’s the Lightning address resolution thing.
William Casarin: Yeah so inside that JSON file you have a mapping from pubkeys to a username. And so basically clients can use that to confirm that a pubkey maps to your domain.
Matt Odell: This is why you and Fiatjaf are blue checks, because you own the website that is your username?
William Casarin [1:15:08]: Yeah so you can imagine one day there’s a damus.io and it’s like a Twitter where people can sign up and they would get their username@damus.io and then they would have an official username.
Fiatjaf [1:15:22]: Yeah and just to clarify: this gives you a human-readable username that’s pretty much the Mastodon stuff, but that username is not your identity. Once the person finds you, they will follow your pubkey belonging to your name.
Matt Odell: Is there something there about using your Lightning pubkey — signing a message with your Lightning node — instead of running a web server to prove you are who you are?
William Casarin [1:16:01]: You could totally create Nostr messages from your Lightning node’s private key. That might be interesting. I don’t know if it would map directly to your Nostr pubkey.
Matt Odell: I was just thinking like if the client just allows you to — oh I guess the relay would have to do the challenge response, right? Not the client.
Fiatjaf [1:16:34]: You mean the Lightning node could use its own pubkey and then the relay or the client could check if that Lightning node exists and has channels? This is one way to prevent spam, I think. But I don’t think it’s very easy to do it now — to reuse your Lightning node pubkey.
Matt Odell: I was thinking like you can sign a message with your Lightning keys to access a website to sign in, but that’s on the client side so it wouldn’t really work in this situation, right?
Fiatjaf [1:17:11]: You could definitely sign an event and use it to log in with your Nostr identity regardless of where that pubkey came from. But I was thinking the idea of — you reminded me of another way to prevent spam is that you could take a key pair and make a Bitcoin address from that and then some relay or some clients would require you to have some money on that address — some UTXO there — to allow messages from you. So that’s an anti-spam way, too.
Matt Odell: I just stumbled on @notJB55 and it has all caps locks KEY COMPROMISED: THIS IS NOT MY ACCOUNT. What’s the story of that?
William Casarin [1:18:03]: Oh my God, so I was working on a command line app called Nostril — I know, I’m really good at naming things. But it’s basically just a C application that can generate Nostr events. And I fudged the environment variable: I had made a post that just broadcasted my secret key so I’m like, Oh shit! But luckily it was actually pretty easy to migrate just to a new key — I just copied my old contact list to a new key and then just moved my NIP-05 to the new account and it was done, and I migrated pretty easily. So it was a nice learning experience, but since then I’m working on a spec where private key material is actually encoded differently so that if you actually try to accidentally tweet your private key, maybe clients can detect that and stop you from doing something stupid.
Fiatjaf [1:18:51]: Yeah that’s very much needed. I’m very confused about the key formats as they are.
William Casarin [1:18:57]: We’re thinking about just using bech32 and then having a specific prefix for private keys and public keys might be ideal.
Matt Odell: So you guys have anything else you want to talk about? I think this has been a great conversation. I don’t really know enough about Nostr to know what my next question is.
Mr. Kukks [1:19:33]: From my end, most of my use cases around Nostr are gonna be around not building the alternative to Twitter.
Matt Odell: So I fucked up the title of the podcast?
William Casarin: No I like those use cases! I love Twitter. I love using Twitter. I actually don’t mind that Elon took over Twitter — I think it’s fine. It’s the better situation than we were before, but we’re always going to run into that situation where maybe Elon won’t be there all the time and we’re still going to need a decentralized solution — like, a decentralized information relaying protocol — that doesn’t currently exist. So regardless, it’s interesting to be working on this. I still really like the private Twitter use cases, to have that in your own organization. And then having events being generated from your business and you can and you can respond to it and then jump into a Slack room based off those events and things like that. There’s a lot of interesting use cases which I think have yet to have been discovered.
Fiatjaf [1:20:33]: If you want I can cite more use cases I’ve been noting: one is that — this website is very popular in Brazil called Formspring — like the social network of people asking questions to others. It was a very fun thing and you just ask questions and the person would respond — that’s something that has died. Those networks where you post where you are like, Oh I’m in this shop or whatever — these things could be done on Nostr too. You could have Git over Nostr — I’m not sure exactly how but it’s possible, for sure.
William Casarin: Yeah and this could replace Radicle, right?
Fiatjaf: Yeah Radicle is very cool but —
William Casarin: It’s shilling a shitcoin now. You could have a 4chan on Nostr if you want to do a 4chan thing where it gets rid of messages after a couple days or something.
Fiatjaf: You could have a central, closed website — like many websites exists that are closed — and if they use Nostr as their backend they become an easily exportable thing. And that could be a marketing thing for them and also for users too.
William Casarin: Blog comments.
Fiatjaf: Yeah blog comments. Decentralized Uber, co-working, AirBnB, Wasabi coordinator announcements — if there are multiple Wasabi coordinators that want to announce themselves, we could have that.
William Casarin: What can’t Nostr do, Fiatjaf? What can it do?
Fiatjaf: Oh you can’t do Starcraft networking. That’s the thing Kukks [said] —
William Casarin: If you give me that challenge I’m gonna try to do it now.
Fiatjaf: Mr. Kukks said we were going to do that but I don’t think it’s a good idea. You remember that sneaker proposal? It would be nice to do it on Nostr instead of using the Bitcoin blockchain for it.
Mr. Kukks: It’s the same with all these either OP_RETURN or analyzing the entire UTXO set to find something compatible with what you want to do — you can replace all that blockchain bloat or scanning with just posting a message to Nostr instead. I think that would be a lot more useful.
Matt Odell: Seems like a great complement to Bitcoin tools just across the board.
William Casarin: I’m already seeing that with just my Bitcoin Core node and my Core Lightning node and just getting events from them. Because I think Bitcoin has created this new situation where I actually really care about the privacy of my UTXOs and I run these nodes at home and I want to make sure that I have private info that I can still access on my phone. I think it really complements a lot of the Bitcoin tools.
Fiatjaf: You see that Agora — that thing that you sell files? I think selling files is nice, but the way it’s been done — you don’t have a central place to go browse files to buy, so I think Nostr solves that too.
William Casarin: So one huge issue on Nostr right now is image sharing. It doesn’t make sense to spec it in Nostr because Nostr is not meant for sharing large media, but it’s actually pretty important — most people like to share a picture on the Twitter feed or something. So that’s something I’m thinking about now in my client, like how do I do image posts? Because it’s not a part of the protocol.
Matt Odell: How are you gonna do it?
William Casarin: I don’t know, a paid service? I don’t want to charge people to do file uploads just for file uploads, but maybe I’ll make it more of an experience — it’ll just include file uploads.
Matt Odell: I could pay some sats to host a file.
William Casarin: Some people suggested be able to configure — these are pretty advanced, but — configuring SFTP or your personal S3 bucket, AWS credentials. There’s a lot of things you can do if you’re technical, but for non-technical people I don’t know if there’s a good solution other than [that].
Fiatjaf: AWS is not a good solution for technical people either. How many API keys or whatever — you have to create an IAM account or I don’t know. I think paying is good — if you could pay to host files.
William Casarin: If anyone has ideas — someone suggested an Imgur API or something? I don’t know if that’ll work.
Matt Odell: But then you’re just holding all the photos on Imgur servers.
William Casarin: Yeah so it’s open question: anyone have any ideas I’d love to hear them.
Matt Odell: I noticed there’s a character count: is that on the client side or the relay side?
William Casarin: It could be either. I’m actually using it as a pastebin — my client doesn’t have a limit so I’ve just been posting code snippets that I refer to. I don’t know if that’s frowned upon but I don’t know it’s kind of cool.
Matt Odell: Because when I posted the first time I wanted to post a PGP-signed message and I couldn’t fit it, so it’d be nice if the character count was higher.
William Casarin: You’ve gotta use a better app.
Fiatjaf: Stop trashing my app!
William Casarin: I’m sorry! It’s so easy!
Matt Odell: What about upvotes? How do we feel about that?
William Casarin: I’m implementing likes and retweets right now. I think Lightning tips are gonna be next after that. Yeah, totally doable — they’re just another Note type.
Matt Odell: Is that client-side or relay side?
William Casarin: Relays don’t have to change anything, it’s just that clients are gonna create a new Note type that you query on.
Matt Odell: So you’re basically sending a Note that says, I liked this?
William Casarin: Yeah and you’ve got to be smart about it like if someone creates multiple events you don’t want to count those twice. But for the most part it’s okay. And there’s also issues with spambots that are creating lots of like events and do you count those? So maybe there’s a reputation system around it so it gets complicated. But most people aren’t even using Nostr so I’m not really worried about that right now, so just something simple to start.
Mr. Kukks: I know Fiatjaf has an open pull request for a reputation scheme, but I haven’t looked at it yet.
Fiatjaf: Oh yeah it’s very simple web of trust thing but with categories. You would trust someone on some category but not from others. And it was meant to be on the marketplace thing I was going to work on, but I jumped into other things. I’ll go back to it someday. And all these decentralized marketplaces, they need some reputation thing. Oh yeah one big use case I wanted to make but I couldn’t get is just people exchanging Bitcoin for fiat based on reputation only, and this also would be the marketplace thing.
Mr. Kukks: I guess that could emulate the workflow that happens on BISQ, right?
Fiatjaf: I don’t know, BISQ is so complicated.
Mr. Kukks: Yeah. You can make a simplified version of it.
Fiatjaf: I was thinking just a trusted thing like I send you the money and I trust you to give me my Bitcoin. That works in many places — there are many people that do this deal. And I think a little reputation goes a long way. And you could do small amounts. You could do the BISQ style too if you want.
Matt Odell: We have a question: As you were talking about spam, we got a spam message in Twitch which I thought was hilarious, by followersprimesandviewers. But we got a different message in Twitch asking about the origin of the name? I know it stands for Notes and Other Stuff Transmitted by Relays, but is there a story behind that? Or did you just decide one day that you were gonna —
Fiatjaf: Well I’m very good at naming things so the inspiration came. No actually I was asking people what the name should be and SuperTestnet gave me an idea like he suggested something that was like that and then I found a good full name for the acronym. I don’t know if it’s a good name or not.
Matt Odell: I mean, none of us know how to pronounce it.
Fiatjaf: Yeah, yeah. It’s a very good name. That’s that’s a great theory.
Mr. Kukks: It’s a feature, not a bug.
William Casarin: I think we can all agree that Fiatjaf is really good at naming things.
Matt Odell: Well LNTXBot is a good name — very straight to the point. Well guys this has been a fantastic conversation. I implore all our listeners to go check out Nostr, provide feedback, play around with it. If you’re a developer consider contributing. Let’s wrap up with some final thoughts. Final thoughts, Mr. Kukks?
Mr. Kukks: We should really just keep on building on Nostr and not NFTs.
Matt Odell: No NFTs. Thank you, Mr. Kukks. Final thoughts, Fiatjaf?
Fiatjaf: Well try Branle, but try to make a better client. I challenge you, listener. Or maybe improve Branle — that’s better.
Matt Odell: Thank you Fiatjaf. Will, final thoughts?
William Casarin: I think we’ve gotten to the point where people think that these open protocols are just too hard to use or even just like it’s too hard to run your own nodes, but we’re starting to see different trade-offs in these larger design spaces. Actually it’s not too hard to create this decentralized open protocol and to get into the network without having to run any nodes, right? So I think that is one important insight that Nostr provides and I hope there are more protocols like this. And yeah protocols are awesome and we should try to use protocols instead of closed platforms.
Matt Odell: Fuck yeah. One quick question before we end: most relays are holding all of my messages, right? So I don’t need to have my client online for you to view them?
William Casarin: Correct.
Matt Odell: Awesome. Okay well thank you guys. I appreciate your time, I appreciate you coming on, I appreciate your work with Nostr. I came into this very undereducated on the implications of Nostr, but it seems like it is way larger than just a Twitter replacement, and I’m very bullish on that aspect — that seems really fucking cool and powerful. And I hope the freaks also found this conversation helpful and will contribute back and help this project grow. So with all that I want to thank our guests one more time and I want to thank everyone who joined us live. Cheers guys.