GithubHelp home page GithubHelp logo

jleo84 / joinmarket-clientserver Goto Github PK

View Code? Open in Web Editor NEW

This project forked from joinmarket-org/joinmarket-clientserver

0.0 0.0 0.0 6.06 MB

CoinJoin implementation with incentive structure to convince people to take part

License: GNU General Public License v3.0

Python 98.03% Shell 1.33% HTML 0.26% Dockerfile 0.38%

joinmarket-clientserver's Introduction

joinmarket-clientserver

JoinMarket is software to create a special kind of bitcoin transaction called a CoinJoin transaction. It's aim is to improve the confidentiality and privacy of bitcoin transactions.

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. JoinMarket works by creating a new kind of market that would allocate these resources in the best way.

One group of participants (called market makers) will always be available to take part in CoinJoins at any time. Other participants (called market takers) can create a CoinJoin at any time. The takers pay a fee which incentivizes the makers. A form of smart contract is created, meaning the private keys will never be broadcasted outside of your computer, resulting in virtually zero risk of loss (aside from malware or bugs). As a result of free-market forces the fees will eventually be next to nothing.

Widespread use of JoinMarket improves bitcoin's fungibility and privacy. This implementation of JoinMarket also implements PayJoin.

For a quick introduction to Joinmarket you can watch this demonstration of installation and usage given by Adam Gibson during the Understanding Bitcoin conference on April 6 2019.

Wallet features

  • Segwit addresses in the backward compatible form (start with 3)
  • Multiple "mixdepths" or pockets (by default 5) for better coin isolation
  • Ability to spend directly, or with coinjoin; export private keys; BIP49 compatible seed (Trezor, Samourai etc.) and mnemonic extension option
  • Fine-grained control over bitcoin transaction fees
  • 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)
  • GUI to support Taker role, including tumbler/automated coinjoin sequence.
  • PayJoin - both BIP78 to pay users of other wallets (e.g. merchants), as well as between two JM wallet users. This is a way to boost fungibility/privacy while paying.
  • Protection from forced address reuse attacks.

Quickstart - RECOMMENDED INSTALLATION METHOD (Linux and macOS only)

Once you've downloaded this repo, either as a tar/zip file, and extracted it, or via git clone:

Make sure to validate the signature on the tar/zip file provided on the release page, or check the signature in git if you install that way using git log --show-signature.

macOS users: Make sure that you have Homebrew and Apple's Command Line Tools installed.

./install.sh
(follow instructions on screen; provide sudo password when prompted)
source jmvenv/bin/activate
cd scripts

(You can add --develop as an extra flag to install.sh to make the Joinmarket code editable in-place.)

You can optionally install a Qt GUI application, you will be prompted to choose this during installation.

Do note, Python 2 is no longer supported as it has reached its end of life.

You should now be able to run the scripts like python wallet-tool.py etc., just as you did in the previous Joinmarket version.

Alternative to this "quickstart": follow the install guide.

More installation guides

Usage

If you are new, follow and read the links in the usage guide.

If you are running Joinmarket-Qt, you can instead use the walkthrough to start.

If you used the old version of Joinmarket, the notes in the scripts readme help to understand what has and hasn't changed about the scripts.

PayJoin

If you want to use the PayJoin feature to pay/receive money to/from another Joinmarket wallet user, read this guide.

Joinmarket-Qt

Provides single join and multi-join/tumbler functionality (i.e. "Taker") only, in a GUI.

If binaries are built, they will be gpg signed and announced on the Releases page.

If you haven't chosen the Qt option during installation with install.sh, then to run the script joinmarket-qt.py from the command line you will need to install two more packages. Use these 2 commands while the jmvenv virtual environment is activated:

pip install -r requirements/gui.txt

After this, the command python joinmarket-qt.py from within the scripts subdirectory should work. There is a walkthrough for what to do next.

Architecture notes

See architecture-notes.md.

TESTING

Instructions for developers for testing here. If you want to help improve the project, please have a read of this todo list and the Help Wanted tag on the issue tracker.

Community

Support JoinMarket and bitcoin privacy

Donate to help make JoinMarket even better: Obtain a bitcoin address here

JoinMarket is an open source project which does not have a funding model, fortunately the project itself has very low running costs as it is almost-fully decentralized and available to everyone for free. Developers contribute only as volunteers and donations are divided amongst them. Many developers have also been important in advocating for privacy and educating the wider bitcoin user base. Be part of the effort to improve bitcoin privacy and fungibility. Every donated coin helps us spend more time on JoinMarket instead of doing other stuff.

Old donation addresses: bc1q5x02zqj5nshw0yhx2s4tj75z6vkvuvww26jak5 or 1AZgQZWYRteh6UyF87hwuvyWj73NvWKpL. Signatures can be found here. Ideally use the above https link to obtain a brand new address.

joinmarket-clientserver's People

Contributors

adamisz avatar adlai avatar alexcato avatar candlehater avatar chris-belcher avatar d3spwn avatar dependabot[bot] avatar domob1812 avatar eduard6 avatar fivepiece avatar hyp-hen avatar jameshilliard avatar joseortiz3 avatar k3tan172 avatar kristapsk avatar mecampbellsoup avatar mighty-merganser avatar nixbitcoin avatar nolith avatar openoms avatar qubenix avatar sangaman avatar takinbo avatar undeath avatar user112012 avatar zaiteki avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.