From 55d1bc9544da1e9371ee55f37cdaa615ef30b825 Mon Sep 17 00:00:00 2001 From: chris-belcher Date: Tue, 27 Jul 2021 16:36:54 +0100 Subject: [PATCH] Update readme.md and yieldgenerator.md for f-bonds Also update some old information in yieldgenerator.md --- README.md | 3 ++- docs/YIELDGENERATOR.md | 42 ++++++++++++++++++++++++++++-------------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index c85c7c0..ce6aaec 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,8 @@ For a quick introduction to Joinmarket you can watch [this demonstration](https: * Basic coin control - can freeze individual utxos to stop them being spent in any transaction * Can run sequence of coinjoins in automated form, either auto-generated (see `tumbler.py`) or self-generated sequence. * Can specify exact amount of coinjoin (figures from 0.01 to 30.0 btc and higher are practical), can choose time and number of counterparties -* Can run passively to receive small payouts for taking part in coinjoins (see "Maker" and "yield-generator" in docs) +* Uses [fidelity bonds](docs/fidelity-bonds.md) for protection against sybil attacks. +* Can run passively to receive small payouts for taking part in coinjoins (see [doc page](docs/YIELDGENERATOR.md)) * GUI to support Taker role, including tumbler/automated coinjoin sequence. * PayJoin - [BIP78](https://github.com/bitcoin/bips/blob/master/bip-0078.mediawiki) to pay users of other wallets (e.g. merchants), as well as between two compatible wallet users (Joinmarket, Wasabi, others). This is a way to boost fungibility/privacy while paying. * Protection from [forced address reuse](https://en.bitcoin.it/wiki/Privacy#Forced_address_reuse) attacks. diff --git a/docs/YIELDGENERATOR.md b/docs/YIELDGENERATOR.md index f0127fd..a071a21 100644 --- a/docs/YIELDGENERATOR.md +++ b/docs/YIELDGENERATOR.md @@ -1,7 +1,7 @@ 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. ## A few words about incentives -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, 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. +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. ### Things You Need + A local Bitcoin full node running with JoinMarket. No other Bitcoin blockchain access is currently supported. Your node can be pruned. @@ -17,21 +17,35 @@ You will need to: + Edit `yg-privacyenhanced.py` or `yield-generator-basic.py` (former is recommended) at the top of the file with your chosen fee selections, then run this variant yield-generator.py on a permanently-on computer with a stable internet connection. For example: (jmvenv)$ python yg-privacyenhanced.py yournewwallet.jmdat + Wait and be patient. The volume of joins is always dependent on the number of takers. A successful join may take a day or longer to appear. ++ (Optional) [Create and advertise a fidelity bond](fidelity-bonds.md) to increase your coinjoin volume ## Configuring -Open one of the two built-in yield generators: `yield-generator-basic.py` or `yg-privacyenhanced.py` in a text editor and edit the configuration. Currently these are the fields. Most of them can just be left at the default values. - - txfee = 1000 - cjfee_a = 2000 - cjfee_r = '0.0002' # 0.02% fee - ordertype = 'reloffer' - minsize = int(1.2 * txfee / float(cjfee)) #minimum size is such that you always net profit at least 20% of the miner fee - -Meaning of fields: -+ txfee. The yield generators contribution to the miner fee. -+ ordertype. One of 'reloffer', 'absoffer' -+ cjfee_r. Your offered coinjoin fee as a fraction of the coinjoin amount (for 'reloffer'). Takers pay this to you. -+ cjfee_a. Your offered coinjoin fee as an absolute number of satoshis (for 'absoffer'). +Open 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 = 100 + + # [fraction, 0-1] / variance around the average fee. Ex: 1000 fee, 0.2 var = fee is btw 800-1200 + txfee_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 ## Keeping Track of Returns