• Stars
    star
    201
  • Rank 194,491 (Top 4 %)
  • Language
  • Created about 11 years ago
  • Updated about 11 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A concept of distributed anonymous marketplace.

DAM (decentralized anonymous marketplace) — the concept

Silk Road has demonstrated that it's possible to run an anonymous online marketplace. While technologically it wasn't that bad, there was a critical point of failure — its centralized nature. Capture administrator and everything is doomed.

Here is my proposal of a distributed anonymous marketplace that doesn't have a single point of failure.

This concept does not focus on moral issues of participating in a voluntary anonymous trade nor does it endorse a specific use of a system it describes. It is more of a concept of decentralization of current marketplaces.

Let us start by looking at some of the problems that centralized marketplaces (like Silk Road) do have and try to figure a solution for them.

Internal account balances

On most of centralized markets, every account got its internal balance. Users deposited money by sending them to DPR's wallets and the system credited the amount to their balance. On transactions between buyers & sellers, just the balances were updated and no actual money transfers took place. Moreover, the users didn't own these Bitcoin wallets so they were never in control.

It is, however, a bad idea to rely on a single person and trust all the money to them. Even if they are a good person themselves, there are violent third parties that can try to interrupt the operation any moment and try to seize the money.

So, that is a problem. Now. Problem, meet solution.

The solution is seemingly obvious. Let the parties transact directly without passing the money through the wallets of 3rd parties that can be compromised.

You own your money and don't have to trust anyone with it. Perfect, right?

But there is a reason they needed the money to pass through its wallets. It's because there was a need in arbitration. Luckily, there is a way to arbitrate without rising your money to someone...

Arbitration

So, arbitration. It's needed to resolve disputes the buyer and seller might have. Like the item arriving not in time. Or not arriving at all.

The way it worked on SR was like this: you buy something, the payment is held in a "pending" state, unless you finalize the order. You finalize it if you got your item and you have no concerns about it.

If you do, however, you can dispute with the buyer. If you are unable to meet an agreement, the administrator steps in and tries to resolve your conflict. Depending on outcome, the money may be transferred to the seller, refunded to the buyer partially, or refunded to the buyer fully.

And that is why it was needed for the money to be held by this trusted third party. Relying on them is, again, a bad idea, and luckily, there is another solution to this problem.

The solution is Bitcoin transaction scripts. Without digging into much detail, there is a way to allow mediation of Bitcoin transaction. There is even an example on Bitcoin wiki.

Basically, it works this way:

  • the sender adds a public key of a mediator to the transaction, so that there are 3 people involved in transaction
  • once transaction is broadcast, it kind of stays in the "pending" state unless two of these three cast their vote on transaction

There are three possible outcomes:

  1. the buyer and the seller do agree about the transaction, cast their "yes"-s and money goes to the seller
  2. the buyer does not agree and asks the mediator to help:
  • the mediator decides the seller didn't fulfill their part of agreement (e.g. didn't deliver) and casts a "no", and so does the buyer, then the transaction is no longer pending and the money is returned to the buyer
  • the mediator decides the seller did fulfill their part of agreement and casts a "yes", and so does the seller, then the transaction is no longer pending and the money reaches the seller

There are a few benefits to this scheme:

  • you do not have to trust your money to the mediator. At worst, the money ends up being in seller's/buyer's possession — but definitely not mediator since there is no way the mediator can change the output of transaction
  • the mediator doesn't have to be an admin or representative of the marketplace. It can be anyone that both the buyer & the seller trust

Inviting a third party mediator is an interesting idea, as it also removes the dependency on marketplace owner to mediate your dispute... but how would it work?

A reputation system. Everyone can be an arbitrator and they get chosen based on their reputation. Which is what the next chapter is about.

Reputation

A system like Namecoin could be used to maintain identities and reputation of buyers, sellers, mediators, and marketplace owners.

Federated distributed marketplaces

There is yet another reason that relying on a single entity is bad. Even if your money always transfers to the buyer directly, and mediation is done by a third party, there is one more thing that isn't distributed — the marketplace itself. If someone arrests or otherwise intimidates the owner, everything goes down. Boom. The money is still yours but the operations had stopped. You can no longer buy or sell.

As a solution, something like this might be proposed: marketplace app is OSS and everyone can run their own. And, indeed, it's a good solution. If some marketplace owner gets arrested, the others are still functioning and almost no harm is caused to everyone else.

Yet, there is a little thing that makes this approach far from desirable: discoverability, for one thing. You will have to manually discover a variety of marketplaces and signup for all of them. What if there was a better way?..

In fact, there is. There is this project called Diaspora. Basically, it's a social network that everyone can run. The key idea is that instead of tens or hundreds of separate social networks that everyone runs, there is one. Everyone can merely run a node that will host its user accounts, posts, and associated data.

It also enables for easier discovery. You can subscribe to users from various other nodes, see their posts, and so on. So it's a federated distributed social network.

A similar concept can be applied to anonymous marketplaces as well. Everyone can run their own node, and that node will store its users' account data and its own catalog.

From the user perspective though, there will be a single unified catalog of various goods. You visit "Catalog" and you see items from all federated marketplaces.

Wrap up

The solution I propose will allow to get rid of centralization so that there won't be a single point of failure (central authority). The federated distributed marketplace will be much more difficult to shut down. And even in the case of shut down, no one is losing their money.

These are basically my thoughts on how such a system could be implemented. It's very likely that I missed something important or didn't fully think it through. All feedback would be highly appreciated.

Twitter: @goshakkk

Bitcoin: 18sQnMCavXPPBzWfTYXd9aDju6NbWc89NL

More Repositories

1

nsa_panel

Easily add an NSA backdoor into your Rails app.
Ruby
800
star
2

pabla

Engaging social media image tool. Like Buffer's Pablo. Meant as a React+Canvas experiment. [alfa quality]
JavaScript
354
star
3

sleek

Doing Analytics in Ruby.
Ruby
158
star
4

react-native-simple-onboarding

A simple onboarding component for React Native
JavaScript
104
star
5

heroku-buildpack-elixir

Elixir buildpack for Heroku.
Shell
71
star
6

react-native-simple-emoji-picker

A simple emoji picker component for React Native
JavaScript
42
star
7

messenger-ui-rn

Simple Messenger UI in React Native
JavaScript
23
star
8

meklebar

Bitcoin escrow transaction helper.
JavaScript
19
star
9

ruroku

The better Ruby client for Heroku API.
Ruby
17
star
10

dynamo_demo

A demo application using Dynamo Elixir framework.
Elixir
16
star
11

no-bs-react-webpack-starter

🙅💩 No bullshit React Webpack boilerplate.
JavaScript
15
star
12

redux-typed-saga

A type-safe alternative to redux-saga. // Using `yield*` in `finally` is currently broken in Babel / ES spec, as it will terminate the generator completely.
JavaScript
14
star
13

Illuminati-iOS

iOS client for Secret-like mobile social network
Swift
11
star
14

react-native-shaking-text

A Text component that shakes every time its content changes
JavaScript
10
star
15

react-native-navigation-experimental-compat

JavaScript
10
star
16

dotfiles

Dotfiles.
JavaScript
9
star
17

xtr

Simple trading engine
Ruby
7
star
18

ampersand_x

&X brings expressiveness back to Ruby procs
Ruby
4
star
19

pirrrate

A basic Ruby API client for The Pirate Bay
Ruby
4
star
20

furry

Simplistic web framework
Ruby
4
star
21

react-native-rainbow-background

🌈 Animating rainbow background for React Native
JavaScript
3
star
22

typed_arguments

Typed method arguments for Ruby
Ruby
3
star
23

config-env-brunch

Configure brunch applictions via environment variables.
JavaScript
3
star
24

konin-clj

Konin is a RabbitMQ-powered library to enable synchronous inter-service communication (RPC) in a service-oriented architecture (Clojure version)
Clojure
2
star
25

Fallboard

JavaScript
2
star
26

babushka-deps

Set of babushka deps to setup my development environment.
Ruby
2
star
27

medberry

A platform to connect patients with doctors via live video chat.
JavaScript
2
star
28

Twee

A simple iOS Twitter client built with RubyMotion
Ruby
2
star
29

xtr.re

Simple trading engine (ReasonML edition)
OCaml
2
star
30

lisley

Lisp parser/interpreter implemented in Haskell.
Haskell
1
star
31

icbitter

An iOS client for icbit futures market.
Objective-C
1
star
32

instatewetrust

http://instatewetrust.herokuapp.com
CSS
1
star
33

500px-commenter

Auto-comment on nice 500px photos
Ruby
1
star
34

konin

Konin is a RabbitMQ-powered library to enable inter-service communication (RPC) in a service-oriented architecture.
Ruby
1
star
35

reasonly-typed

A simple type system built with ReasonML 🔥
OCaml
1
star
36

goshakkk

1
star
37

hadis

Redis server implemented in Haskell.
Haskell
1
star