TL;DR - I have an idea for a P2P decentralized marketplace using Monero and Nostr, but I’m looking for feedback and help.
So I’m a web developer that works mainly in Python (Flask), and I believe in Monero. I recently had an idea to make an open source P2P marketplace. Basically, this would work like Nostr (or on the Nostr protocol) where everything is decentralized, allowing each individual merchant to be responsible for their own legality. Payments wouldn’t be handled by the marketplace. All that it would do is display the seller’s receive address or qr code, and then check if the payment came through in full. So the seller would need to provide their receive address and view key which would be stored locally on the seller’s computer. Once the payment is received, the marketplace would mark the order as confirmed and the seller would be responsible for fulfilling the order. I could even automate the release of digital goods on confirmation.
Since there is no way to really enforce that sellers are legitimate with this idea, there would need to be some kind of review system, like what LocalMonero.co has. Basically you can rate a merchant if you have bought from them before. People who cheat the system would drop in rankings and be avoided, while good sellers would move up in discoverability. And all merchants would be discoverable in the home screen via search or browsing. You could also subscribe to favorite merchants.
In my mind, this marketplace would solve a lot of problems at once. First off, it would make a decentralized place to buy and sell goods in private. This adds liquidity to Monero and gives us all a way to use our Monero for goods that we actually want to receive. Making the on boarding to this app super simple would allow it to basically function like a P2P amazon or ebay. The more people that sign up, the more things we have available. Merchants can be businesses or individuals.
Another thing it solves is onboarding to Monero in general. Instead of having people buy their Monero, they can get a wallet app on their phone, make a merchant account as quickly as you can sign up for a Nostr account, and sell something for Monero. No CEXs, just exchanging goods for digital cash. Want more Monero? Sell some more stuff? If it gained enough traction, it could easily attract more people to Monero as well.
This has even been done before, but it is on the Lightning Network and requires you to set up a lightning node, from what I can tell. It’s not as easy as scanning a qr code to send money to someone for a good. Still, it’s worth checking out. Here’s the code: https://github.com/lnbits/nostrmarket, and here’s a demonstration of it: https://www.youtube.com/live/2NueacYJovA?feature=share&t=6846
I’m posting this all here for two reasons. First, I wanted to know if this makes sense to anyone else. Does this sound like as good of an idea to others as it does to me? Is there anything I am missing? Has this been done before with Monero or is it being worked on by anyone else? I know of MoneroTalk’s XMRBazaar, which was part of the inspiration for this, but from what I remember, that was going to use mediators to facilitate transactions, which is more overhead than I am thinking is necessary.
The other reason I bring it up is to see if others are interested in helping (or taking the idea and building it themselves before I can). I am inexperienced in coding around Monero as well as Nostr. I’m not afraid of the Monero part. That sounds pretty straightforward, especially with the python-monero package. The Nostr stuff might take me a while to figure out though. And since this seems like such a good idea to me, I’d rather tell others about it and maybe get a workable version sooner than keep it to myself. So if you’d like to help or run with this idea, go for it.
Thanks in advance.
There are a few approaches how marketplaces can be handled. If you want it to be truly p2p and trustless you might want to look into an overcollateralized model like the one used by the particl marketplace. Regular reviews without further authentication can be faked very easily for example by sellers “buying” their own stuff from sockpuppet accounts and leaving good reviews.
Thanks, my thought was that it would require trust though. Just like ebay and Amazon receive payment before any products are sent.
I agree that it probably will be gamed and there will need to be some adjustments along the way, but I think there should be a way to do it that works. If the rating system doesn’t work, there could be curated lists of sellers that are trustworthy. Then you can subscribe to those sellers. And for smaller purchases or more unique goods from new sellers, the buyer would be taking a bit of a gamble just like they do on ebay, except without the support of ebay if there is a dispute. I know it has some problems, but I think it brings a lot of benefits that the trustless options don’t.
As far as I know, a trustless system can’t account for every problem either. If the buyer puts their money in escrow until they receive an item, then they could still say they never received the item, right? So that would give the seller no recourse other than leaving a bad review on the seller. (By the way, I could definitely be wrong here. Let me know if I am.) My thought was that we leave it up to the seller’s to fulfill their end of the deal with reputation and future sales as their incentive. There will be theft, especially at the beginning, but I think we can find ways to sort out the thieves from the honest sellers, and hopefully people would be smart enough not to test the market place with thousand dollar purchases.
You should join us at MoneroTalk on Saturdays, sometime after noon EST when they call up viewers on stage. There’s been extensive attention given to XMRBazaar and I’m sure the topic would be welcomed, maybe contact monerotalk@proton.com ahead of time to discuss when and how to give larger presentation of your thoughts on MoneroTalk as a guest speaker.
@treetrnk @monero I recommend building on ActivityPub instead.
You’ll be able to connect to monero.town and to everything else in Fediverse. See https://codeberg.org/grindhold/flohmarkt for example. It is a bit unfinished but people are already using it. If you’re python dev you can even fork it.
You’re the maintainer of mitra right?
Why fediverse over nostr? I’m a long time fediverse user and I absolutely love nostr compared to fediverse. No admins! It’s actually censorship resistant and you don’t have to worry about clustering of instances and being eclipsed from the network. IMO the fediverse is a mess that I used only because there was nothing better, I don’t like the federated model at all and nostr is just far superior in terms of independence, censorship resistance and privacy.
@mister_monster @monero Yes, this is me. I’m choosing fediverse for several reasons 1) almost everyone I care about is here 2) I think it’s actually very important to be in contact with people who maintain infrastructure (admins) 3) ActivityPub is an open protocol which is not controlled by anyone 4) better protocol design overall
Many existing implementations suffer from the lack of data portability but I figured out how to fix that.
I think if you gave nostr a chance you would see some benefits even for those reasons, like you also get to be in contact with the people that maintain infrastructure (relay admins), some admins can require the payment of a fee or simply whitelist your pubkey to read/write notes, which creates “closed communities”, but the difference from AP is you are able to have many different relays at the same time for your infrastructure, so you don’t have a “single admin” that you may or may not like or trust that much, you can pick one or many at any time, or be your own
@rafael_xmr @monero With AP you can have multiple admins too. Server-bound accounts is not an inherent limitation of a protocol, it just happened that popular servers like Mastodon and Lemmy are designed this way.
If you’re interested in technical details, here’s what I’m working on: https://codeberg.org/fediverse/fep/src/branch/main/fep/ef61/fep-ef61.md
@monero @rafael_xmr I know how Nostr works, I just don’t think it is better. However, if it still be around in a year or two, I might consider using Nostr relays for storing AP data. Why not, if this infrastructure already exists
I just think it is a way simpler design, everything is a variation of the NIP-01 note https://github.com/nostr-protocol/nips/blob/master/01.md#events-and-signatures
{ "id": <32-bytes lowercase hex-encoded sha256 of the serialized event data>, "pubkey": <32-bytes lowercase hex-encoded public key of the event creator>, "created_at": <unix timestamp in seconds>, "kind": <integer between 0 and 65535>, "tags": [ [<arbitrary string>...], // ... ], "content": <arbitrary string>, "sig": <64-bytes lowercase hex of the signature of the sha256 hash of the serialized event data, which is the same as the "id" field> }
So data portability is enforced by default for the protocol, and it is flexible in a way that clients can support new event kinds without knowing about it, so adding a video event kind to create a youtube alternative would show up even on outdated clients as they’ll still be able to show every note events, and the same for outdated relays that will continue to store every note event you broadcast, you don’t need to spawn a new server to self-host a new instance of a nostr implementation, just use the same clients and same relays as always, so people have made torrent sharing sites (https://dtan.xyz) and video platforms for example and it doesn’t seem like the AP protocol is very open and flexible to these ideas and implementations
So I think that because of this, ease of development, ease of use, nostr has a big chance of staying around for 2 years still and maybe even bigger than AP but I may be wrong
What would it take to have this in AP at the current state, and like could mitra and other clients start supporting these portable objects and just wait for others to catch on?
@rafael_xmr @monero Support for portable objects can be added to existing Fediverse applications, the idea is relatively simple. However, implementing it might still require significant effort because of the fundamental shift from “one account -> one server” to “one account -> multiple servers”. I’ve started to work on this in Mitra, but we’re still several months away (at the very least) from anything usable.
Once this idea is proven to work, I expect rational developers to adopt it, because the benefits of data portability seem to vastly outweigh its downsides.
I thought several years ago that OpenBazaar had a good idea but never ended up finishing it. Something like that might be adaptable.
@shortwavesurfer @treetrnk open bazaar failed to embrace Monero. It died.
I didn’t think it was ever finished, but it might be possible to take it and make it use Monero.
@shortwavesurfer BTC multisig escrow was assumed deep in the guts of OB. A few Monero folks were looking into the work required to replace it, but OB flat out refused to commit *any* resources to it. The founder literally told me his investors would leave. Well guess what they did anyway.
I would love to see a fully decentralized, Tor-and-XMR-native marketplace. It blows my mind that we still don’t have one. I would love to contribute to such an effort, if a credible one is on offer.
Well, OB could be forked. Maybe even ActivityPub over tor/i2p. Then you sub to a market with your mastodon or whatever and you get a post if things are added to the market and a link to that item.
Projects that go in that direction I know of:
https://github.com/creating2morrow/neveko
Here is an alternative Piped link(s):
https://www.piped.video/live/2NueacYJovA?feature=share&t=6846
Piped is a privacy-respecting open-source alternative frontend to YouTube.
I’m open-source; check me out at GitHub.
if I remember correctly there’s some projects that specifically do decentralized escrow. might want to look into that.
I was actually looking to avoid escrow or any of the complicated parts of money handling. My plan was just to click buy, scan the qr code with your own wallet (separate from the marketplace), and then send the funds. The marketplace wouldn’t touch any crypto, and would only interact with it by checking if the funds came in on the seller’s client. That would make it super easy to onboard new sellers and buyers and keep legal stuff completely on the buyers and sellers.
That wouldn’t be that useful to people. All it takes is one or two people scamming and the reputation of the platform (if you can even call it that) is gone. People won’t use it for long without escrow.
If you think avoiding escrow will shelter you from defending yourself in court you’re wrong. If you run a web UI for your system for example, and it’s the first UI so it’s the most popular, and people get scammed, you’re looking at lawsuits. You might win those lawsuits, but it still costs money to win a lawsuit.
I wouldn’t be hosting or running a marketplace though. My plan is to write the code to make it possible for each individual seller to host/run their own shop that is accessible by anyone else running the same code. The code will be open source, so I’m not sure how I could be sued for any of that. My only involvement would be writing the code.
That also mitigates the problems with a centralized marketplace gaining a bad reputation. Some sellers will definitely cheat the system and those sellers will get a bad reputation, but that is true of anything on the internet. Any website can sell stuff and steal from you technically. Many don’t though because they don’t just want the money from your purchase, but also from all future sales.
Well, I’d say so long as you don’t run a web app that is a frontend UI for it you can’t be accused of running a marketplace. Sounds to me like you’re trying to make something like OpenBazaar without escrow and with XMR as a main currency.
Also bear in mind, the things you take for granted today may not he the case tomorrow. Today we are very clear headed about this kind of thing. You can write code and as long as you’re not running a service you can’t be liable. But the way things are going, you’ve got the US government trying to classify “custodial wallet providers” as financial institutions, you’ve got the EU trying to make open source developers liable to their users for bugs, it seems to me the governments of the west are trying to take away our ability to just create things and give them to the world to empower them, trying to normalize this idea that if you create something you’re responsible for how people use it. You may wake up one day and find that a law somewhere makes even publishing your code bad for you.
I’m not saying don’t do it. Do it. But I’m saying be clear on the potential outcomes.
Avoiding escrow isn’t really possible unless you somehow live in a perfect world without bad actors. I recommend doing some digging into how different defunct darknet markets have utilized escrows and monero as even if your market does everything legally there’s still valuable leasons to learn. If you want recommendations you should look into White house market (mods it’s defunct) as their system handled escrow in a way where everything happened at the transaction level meaning the only coins that could be stolen were the exact transaction ammount.