Bitcoin CoinJoin implementation with incentive structure to convince people to take part
View the Project on GitHub JoinMarket-Org/joinmarket-clientserver
A “yield generator” is a JoinMarket bot which does market-making of CoinJoins to produce an income as a join “Maker”. The bot connects to the JoinMarket trading pit on the available messaging channels, announces its offers and waits. Market “Takers” will communicate with it to create a CoinJoin transaction.
The first thing to understand is that this is not a bank account with a guaranteed interest rate. You are selling a product, namely coinjoins, and your customers can take it or leave it depending on your offered fee, range of available coinjoin amount, value of advertised fidelity bond, internet speed, latency and so on. Most of the actual decision-making is done by software bots rather than humans but the same principles apply. The algorithm for market takers remembers yield generators they previously dealt with and avoid those who did not offer a good experience. You have an incentive to be on your best behavior.
You will need to:
joinmarket.cfg
file with your chosen fee selections and options, then run either yg-privacyenhanced.py
or yield-generator.py
(the former is recommended) on a permanently-on computer with a stable internet connection. For example:
(jmvenv)$ python yg-privacyenhanced.py yournewwallet.jmdatOpen the configuration file joinmarket.cfg
and edit the [YIELDGENERATOR]
section to configure relevant values. Most of them can just be left at the default values.
[YIELDGENERATOR]
# [string, 'reloffer' or 'absoffer'], which fee type to actually use
ordertype = reloffer
# [satoshis, any integer] / absolute offer fee you wish to receive for coinjoins (cj)
cjfee_a = 500
# [fraction, any str between 0-1] / relative offer fee you wish to receive based on a cj's amount
cjfee_r = 0.00002
# [fraction, 0-1] / variance around the average fee. Ex: 200 fee, 0.2 var = fee is btw 160-240
cjfee_factor = 0.1
# [satoshis, any integer] / the average transaction fee you're adding to coinjoin transactions
txfee_contribution = 100
# [fraction, 0-1] / variance around the average fee. Ex: 1000 fee, 0.2 var = fee is btw 800-1200
txfee_contribution_factor = 0.3
# [satoshis, any integer] / minimum size of your cj offer. Lower cj amounts will be disregarded
minsize = 100000
# [fraction, 0-1] / variance around all offer sizes. Ex: 500k minsize, 0.1 var = 450k-550k
size_factor = 0.1
As well as simply viewing your balance in-wallet occasionally as explained in the usage guide, the history can also be calculated with the history
method, also explained in that document.
Short answer: privacy
Long answer: https://bitcointalk.org/index.php?topic=919116.msg11465848#msg11465848
You may wish to change the input merging policy in joinmarket.cfg
, see this page: https://github.com/JoinMarket-Org/joinmarket/wiki/Configuring-with-joinmarket.cfg#input-merging-policy
The value of gradual
or greedy
is usually good for keeping the number of inputs from getting too large.
Use tmux or GNU Screen.
If you are a programmer you could try creating your own algorithm for the yield generator.
Other yield-generator algorithms are in a separate github repository: https://github.com/JoinMarket-Org/custom-scripts Many more people can work on them without the possibility of putting the main JoinMarket code in danger.