Pages:
Author

Topic: [ANN] Joinmarket - Coinjoin that people will actually use - page 18. (Read 84859 times)

legendary
Activity: 1974
Merit: 1029
Quote
Though that means the pre- and post-encryption bots cannot understand each other. Please pull the latest commits if you're trying it out. You also need to install libsodium cryptographic library.

Done. My maker process disappeared somehow at some point, no clues about that. I just brought it up again using the new updates.
sr. member
Activity: 261
Merit: 512
Merged waxwing's encryption pull request.
Now a taker and maker(s) will send their output addresses through an encrypted channel so an eavesdropping IRC server cannot unmix the coinjoin.

Though that means the pre- and post-encryption bots cannot understand each other. Please pull the latest commits if you're trying it out. You also need to install libsodium cryptographic library.

Read about the protocol here: https://github.com/chris-belcher/joinmarket/blob/master/encryption_protocol.txt
legendary
Activity: 1974
Merit: 1029
I just set up a maker with 0.0999 btc. Let's see if someone bites!
legendary
Activity: 3920
Merit: 2347
Eadem mutata resurgo
promising
sr. member
Activity: 252
Merit: 250
This sounds like a good idea, I am not much of a techy to be able to put together this kind of project, but I will be looking forward to see what other people will do with it Smiley
donator
Activity: 2772
Merit: 1019
I think this is a great idea.

Question: is there usually a backend bot managing the orderbook on #joinmarket-pit-test? Is it dead or am I misunderstanding?

The only central point of failure right now is the IRC server itself. It's not a centralized orderbook like gribble on #bitcoin-otc but more like an open-outcry trading pit. Bots announce their orders when they first join, and will repeat their orders in PM to whoever says !orderbook in channel.

I see.

By the way, I saw someone was doing coinjoins with a very small amount, like 666 or 3333 satoshi. Since my bot asks for a 1% fee, it earns not enough to cover the 1000 satoshi contribution to the miner fee. I didn't think of this attack, it's never good to look at your terminal and see "earned fee" being a negative number. Wink Fixed now

That was me Wink.
sr. member
Activity: 261
Merit: 512
I think this is a great idea.

Question: is there usually a backend bot managing the orderbook on #joinmarket-pit-test? Is it dead or am I misunderstanding?

The only central point of failure right now is the IRC server itself. It's not a centralized orderbook like gribble on #bitcoin-otc but more like an open-outcry trading pit. Bots announce their orders when they first join, and will repeat their orders in PM to whoever says !orderbook in channel.

By the way, I saw someone was doing coinjoins with a very small amount, like 666 or 3333 satoshi. Since my bot asks for a 1% fee, it earns not enough to cover the 1000 satoshi contribution to the miner fee. I didn't think of this attack, it's never good to look at your terminal and see "earned fee" being a negative number. Wink Fixed now
donator
Activity: 2772
Merit: 1019
I think this is a great idea.

Question: is there usually a backend bot managing the orderbook on #joinmarket-pit-test? Is it dead or am I misunderstanding?

"!orderbook" doesn't return anything.

EDIT: ah, got it: it's sent via pm
hero member
Activity: 994
Merit: 500
good luck with your project
sr. member
Activity: 266
Merit: 250
thanks.

i've contacted mods through the report link... maybe they'll change it.
sr. member
Activity: 261
Merit: 512

You can also get testnet coins from various faucets. Look at the links at the bottom of this. https://en.bitcoin.it/wiki/Testnet

already searching, but the only testnet-ewallet which gives me a seed instead of an address does not work currently.

You're misunderstanding.
The seed that you pass to scripts like wallet-tool.py and yield-generator.py are like brainwallets, they can be anything. For real bitcoins you would generate them from a 12-word mnemonic like Electrum does.

Come up with any seed and store it somewhere safe. Pass it as a command line argument to wallet-tool.py, which will print out a bunch of addresses. Copypaste the first of those addresses into a testnet faucet.

Aside: Because I'm a newbie the forum is rate limiting my posts to 5 minutes apart. It's quite annoying, any chance a mod can bump me up? given I've already demonstrated I'm not a spammer.
sr. member
Activity: 266
Merit: 250

You can also get testnet coins from various faucets. Look at the links at the bottom of this. https://en.bitcoin.it/wiki/Testnet

already searching, but the only testnet-ewallet which gives me a seed instead of an address does not work currently.
sr. member
Activity: 261
Merit: 512
aradesh@aradesh:~/src/joinmarket$ python yield-generator.py blahhh
downloading wallet history
no tx used
Traceback (most recent call last):
  File "yield-generator.py", line 95, in
    main()
  File "yield-generator.py", line 90, in main
    maker = YieldGenerator(wallet)
  File "yield-generator.py", line 26, in __init__
    Maker.__init__(self, wallet)
  File "/home/aradesh/src/joinmarket/maker.py", line 129, in __init__
    self.orderlist = self.create_my_orders()
  File "yield-generator.py", line 42, in create_my_orders
    max_mix = max(mix_balance, key=mix_balance.get)
ValueError: max() arg is an empty sequence

i guess i should start mining Wink

yield-generator's way of telling you you've got no money.

You can also get testnet coins from various faucets. Look at the links at the bottom of this. https://en.bitcoin.it/wiki/Testnet
sr. member
Activity: 266
Merit: 250
aradesh@aradesh:~/src/joinmarket$ python yield-generator.py blahhh
downloading wallet history
no tx used
Traceback (most recent call last):
  File "yield-generator.py", line 95, in
    main()
  File "yield-generator.py", line 90, in main
    maker = YieldGenerator(wallet)
  File "yield-generator.py", line 26, in __init__
    Maker.__init__(self, wallet)
  File "/home/aradesh/src/joinmarket/maker.py", line 129, in __init__
    self.orderlist = self.create_my_orders()
  File "yield-generator.py", line 42, in create_my_orders
    max_mix = max(mix_balance, key=mix_balance.get)
ValueError: max() arg is an empty sequence

i guess i should start mining Wink
sr. member
Activity: 261
Merit: 512
Reserved
sr. member
Activity: 261
Merit: 512
JoinMarket is built for those who:
1. Want to use coinjoin to improve the privacy of their bitcoin transactions or reduce the miner fees they pay.
2. Want to earn an income from their investment bitcoins

Coinjoin is a kind of bitcoin transaction which combines multiple people's transactions together in an effort to improve privacy, especially as a way to regain privacy after it's been degraded by bad practices. It can also reduce the size of transactions and so require less miner fees. The concept has enormous potential, but it has not seen widespread usage so far despite the multiple projects that implement it. I believe this is because the incentive structure was not right.

A coinjoin transaction requires other people to take part. The right resources (coins) have to be in the right place, at the right time, in the right quantity. This isn't a software or tech problem, its an economic problem. I propose a new kind of market is created that would allocate these resources in the best way.

In practice this would work by allowing coinjoin transactions to be paid-for. On one side there will be time-rich coinjoiners who will wait around and be willing to coinjoin at any time. On the other side will be time-stressed coinjoiners who can coinjoin instantly for a price.

This will naturally attract investors, holders of bitcoin who don't want to transact but just want to earn the coinjoin fee. They would be taking on only a very small amount of risk; Their private keys would never leave their computer, the software would only sign transactions that are valid and pay the correct amount of coins. So it's safe to say that investors would pour in, resulting in the coinjoin fees being very low.

Elevator Pitch for Coinjoin Users / People who desire privacy.

With Joinmarket nobody can steal your coins, you would mix them on your own computer. The software will never sign a transaction unless your coins are going to exactly the right address in the right amount.

Other mixing services mix your coins with other users, resulting in you getting back coins possibly related to drugs, stolen money or other illegal or immoral practices. This is highly undesirable if you just don't want your employer knowing which non-profits you support from your salary. Because of the incentives of JoinMarket, you have access to a huge amount of clean, untainted bitcoins to mix with at a very low price. Many of the bitcoins you're mixing with will be bought from regulated exchanges, owned by legitimate holders of bitcoin.

Not to mention you'd likely be paying lower fees for mixing than other services, because of the competition between willing-to-wait coinjoiners. Indeed if you don't mind waiting, you can wait around with a low offer fee and maybe another impatient coinjoiner will join with you.

Elevator Pitch for Investors

Firstly I'd like to clarify what I mean by investing. I don't want you to give your bitcoins to me. I dont want you to give your bitcoins to anybody. The private keys would be safely held on your own computer, known only by you and your wallet.

Features:
1. Earn an income from your investment bitcoins.
2. Very low risk. Your coins have to be on an online computer, but the software would only sign transactions that are valid and pay you the correct amount.
3. No commitment, withdraw your bitcoins at any time.
4. Improves the privacy of the bitcoin transactions, which makes bitcoin as a currency more useful and thus increases its value.
5. Improves the fungibility of bitcoin, since the distinction between 'clean' and 'dirty' bitcoins will be meaningless. Eliminates this particular systemic risk to bitcoin.

Downside:
1. Your return is likely to be quite low. Low risk = low reward.
2. You don't get paid unless people who desire privacy actually use this. If you're an investor you have an incentive to tell people about JoinMarket and contribute to it.

The Software

I've been writing an implementation of the idea. Right now the coinjoiner bots meet in an IRC channel. The bots announce their orders in an open-outcry trading pit style. Transaction data is sent between users as IRC private messages. Authenticated encryption is used to stop the IRC server eavesdropping. I have plans one day to move away from IRC entirely and have the users meet in some kind of peer to peer network.

How to try
Download the repository from https://github.com/chris-belcher/joinmarket and read the README file
There is an internal HD wallet. It is generated from a wallet encrypted on your hard drive.

There's also plenty of information on the wiki https://github.com/chris-belcher/joinmarket/wiki

Code:
$python wallet-tool.py generate
   Generates a new wallet. Asks for your encryption passphrase and gives you a 12-word recover seed to write down on paper, a la Electrum or Mycelium.

$ python wallet-tool.py [wallet file name]
  This will print out addresses from the HD wallet, send some coins to the first receive address

$ python yield-generator.py [wallet file]
  Becomes an investor bot, being online indefinitely and doing coinjoin for the purpose of profit

$ python sendpayment.py -N 4 [wallet file] [amount-in-satoshi] [destination address]
  Chooses the cheapest offer to do a 5-party coinjoin to send money to a destination address

If you're a frugal user and don't feel like paying to coinjoin if you dont have to, use this command
$ python patientsendpayments.py -N 1 -w 2 [wallet file] [amount in satoshi] [destination address]
  Announces orders and waits to coinjoin for a maximum of 2 hours. Once that time it up cancels the
  orders and pays to do a 2-party coinjoin.

$ python ob-watcher.py
  Starts a local http server which you can connect to and will display the orderbook as well as some graphs

$ python wallet-tool.py recover
  Will prompt for the 12 word recover seed and create a new encrypted wallet file

$ python wallet-tool.py -p [wallet file]
  Will print out addresses along with private keys which can be used to sweep the coins away

Example coinjoins transactions made with JoinMarket:
14 parties, amount 0.01btc https://blockchain.info/tx/55eac9d4a4159d4ba355122c6c18f85293c19ae358306a3773ec3a5d053e2f1b
11 parties, amount 0.57960945btc https://blockchain.info/tx/402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a
8 parties, amount 2.6btc https://blockchain.info/tx/722bb2662cb2ef9b4a2693e52ba82c44cea1042349f1aa6e71e28a3947aa4144
7 parties, amount 0.02btc https://blockchain.info/tx/e38e45d004ef913ee4e952d1f185dbea91cc8cc56e22aa7f767a3edec952a4a9
3 parties, amount 25btc https://blockchain.info/tx/da1a2259be752dd6b5162221989181b7334bd0acbbc1bca31596e5bc32375770
4 parties, amount 40btc https://blockchain.info/tx/3b97544488cac0271a80b20822597342648d19ed02ac25041bd8d35e624d8e6b
3 parties, amount 12btc https://blockchain.info/tx/d91278e125673f5b9201456b0c36efac3b2b6700fdd04fc2227352a63f941170
4 parties, amount 0.84btc (~$200 at contemporary exchange rate) https://blockchain.info/tx/7d588d52d1cece7a18d663c977d6143016b5b326404bbf286bc024d5d54fcecb
4 parties, amount 0.1btc https://blockchain.info/tx/b85a3b563474ca98ba1809460e61a50053899c21f9869afb6a3a6d4b4cb00b7c
3 parties, amount 0.19btc https://blockchain.info/tx/2e2cd9204f97a2260ba5b1fd446f394eeff79daa973e37dd29794a9ee667bf64

Further Development
Github: https://github.com/chris-belcher/joinmarket
IRC: irc.freenode.net #joinmarket
Twitter: https://www.twitter.com/joinmarket
Reddit: http://www.reddit.com/r/joinmarket

If you can program, contribute code. The project needs development works more than anything else right now. A list of suggested projects are here https://github.com/chris-belcher/joinmarket/wiki/What-can-I-do-for-JoinMarket%3F

If you require privacy, JoinMarket can be used right now on the mainnet, albeit with a command-line interface. Many people are already using it.

Bitcoin Core wallet could be integrated by using the -walletbroadcast=0. Integration on the command line using json-rpc calls is already done, use the --rpcwallet flag on sendpayment.py

I have plans to create an Electrum plugin which does this, it would be a simple checkbox and thereafter all transactions would be coinjoined.

If you run your own yield generator bot, you can earn an income from your bitcoin savings and increase the privacy and anonymous set of others.

People trust systems more if they think they know how it works. If you're good with graphics, you can help the project by creating an infographic for how it all works. For example how coinjoin transactions in the joinmarket software are communicated, created, checked and signed.

Snazzy websites are better for getting the word out than big walls of text on a forum.

Further Reading
gmaxwell's original coinjoin post. https://bitcointalksearch.org/topic/coinjoin-bitcoin-privacy-for-the-real-world-279249
my original Joinmarket suggestion / writeup. https://bitcointalksearch.org/topic/m.9384411
Mike Hearn's blog post about privacy and coinjoin https://medium.com/@octskyward/merge-avoidance-7f95a386692f
Pages:
Jump to: