Adding Nostr contacts and a zap feed to Mutiny Wallet

Adding Nostr contacts and a zap feed to Mutiny Wallet
Mutiny Wallet's new zaps feature

If you're a close follower of Bitcoin news, you might've noticed that Mutiny recently received a grant from OpenSats to integrate some Nostr functionality into the wallet. We're super grateful for the funding, and we also understand it's not entirely obvious how open source grants, Nostr, and Bitcoin intersect.

So we figured we'd ship our first grant milestone, a zaps feed, to help explain. Inspired by @pablof7z's excellent ZapLife.lol (a global feed of zaps), Mutiny Wallet's zaps feed is a live-updating stream of who your friends are zapping and who is zapping them. All you have to do to get started is enter your npub (no private key needed), and Mutiny will import your follow list from Nostr and start showing you the action. It's a lot of fun to snoop on who is zapping whom on your contact list.

Social Bitcoin & Nostr Features

1. A contact list for Bitcoin

Nostr contact view

How many payment app contact list silos are you currently embedded in? Venmo, Cash App, Apple Pay, PayPal, Meta Pay, Zelle... the walled gardens are many!

As a new and upcoming Bitcoin/Lightning wallet, we would like to build the sort of UX enabled by a traditional contact list. After all, users don't care about invoices. They just want to send money to each other. But starting our own siloed, proprietary friends list would be a non-starter. The network effect of Mutiny Wallet users is too small at the beginning to get it off the ground.

Thankfully, protocols fix this: on Nostr, your list of who you follow is public and easily synced across multiple apps. And because Nostr users love getting zapped, many of those contacts already have payment details built-in!

The best part is there's no lock-in. Want to move your contact list to another app? Mutiny never owned the list to begin with!

2. It's kind of like Venmo

I'm old enough to remember when Venmo's social payments feed was the basis of the app's viral popularity rather than an absurd privacy nightmare. We were so naive and innocent back in 2009!

It's fun to see your friends send money to each other, but it sucks to accidentally leak information you intended to keep private (who you're spending time with, how much you pay for rent, etc.).

By pulling zaps into Mutiny, we're importing an existing public feed of payments rather than trying to make your traditionally private p2p payments public. All your regular payments you make in Mutiny, even payments you make to your imported Nostr contacts, are just as private as ever. It feels like the best of both worlds. Privacy is all about selective disclosure, after all.

3. Streaming sats for everyone

Micropayments, as a means of unlocking digital content, are one of those "just around the corner" technologies that never quite lands. Zaps turn the concept on its head: rather than buying a tiny sliver of copyrighted material or paying for a few seconds or minutes of a digital service, what if we just make the "like" button more powerful by adding money to it?

Even before zaps became popular on Nostr, many podcasters in the Bitcoin space were enjoying the "streaming sats" of Podcasting 2.0. A steady trickle of low-value payments feels good. At least, that's what our favorite influencers tell us. Now, with zaps, anybody with a good meme can feel this sensation.

A feed of zaps (including your own) simply feels good, and this sensation can enhance the wallet experience in more ways. Zapathons, highlighting content your friends are all zapping, zapvertisements, or even commenting on zaps. Just like Venmo's social payments feed that made the everyday occurrences of settling a dinner tab an opportunity for interaction, zaps are making Lightning payments a social activity.

How it works

Many of Nostr's features are designed around a Twitter-style timeline. So, while getting a list of zaps for a single event or user is easy, getting all the zaps to and from a user or list of users wasn't straightforward with any existing Nostr event filters.

So we hooked up with Primal, a company building a new Nostr client and caching server. Primal has recently added a zap events feed to their API that accepts a list of users and returns zaps to and from those users. (Thank you @pedja for all your help!). We deployed our own version of the open-source Primal server so that we can keep things decentralized. This is available at https://primal-cache.mutinywallet.com/api

Nostr sync and zaps feed

When you import your npub, we add everyone you follow on Nostr to your contacts list. That means you can use them as labels for sending and receiving, and you can send sats to them directly if they have a Lightning address in their Nostr profile.

The stream of zaps itself is updated in real-time (it's especially enjoyable during a zapathon). You can click through to whatever event the zap is about... but we stopped short of becoming a full-on client and showing the events themselves.

Overall, it's a pretty simple feature. Still, we think it shows some of the promise and potential of the "protocols over platforms" approach of Nostr in a way that Bitcoin is uniquely situated to benefit from.

A lot more work to do

Mutiny's goal is in no way to become a do-everything Nostr client. But we want to become your favorite wallet for zaps, and we have much more work to do to get there.

Currently, Mutiny works excellently as a way to send zaps. You can generate an NWC string in Mutiny and import that into supported wallets like Damus, Amethyst, and Primal. Then you queue up a bunch of zaps in your Nostr client and approve those payments from inside Mutiny. Soon, we'll even have the option to set a budget for NWC, so payments under a certain amount get auto-approved (less hassle for heavy zapping).

NWC zaps

But part of our OpenSats grant project is to enable zap receives in a non-custodial way. It's a big challenge, but it will be exciting to solve because zap receives are one of the main reasons Nostr users are sticking with custodial wallets right now.

The grant will also support work on making an open spec for our NWC-based subscriptions (which Mutiny+ is based on) and a P2P DLC marketplace on Nostr. We've got a lot to do.

Try out the zaps feed on Mutiny Wallet! Let us know what you think and how it can improve.

The web version of the wallet is at https://app.mutinywallet.com - if you already have it installed as a Progressive Web App, just close and refresh! The latest android version is located here: https://github.com/MutinyWallet/mutiny-web/releases/tag/v0.4.16