Skip to content
Simplifies merging of bitcoin transactions for improved anonymity, using the popular CoinJoin scheme.
Branch: master
Clone or download
apoelstra Add simple test suite
It's a start, anyway. Right now this can't handle unsigned merges
since those are randomize, and it doesn't really handle error
reporting properly since it only looks at the last 'err:' line.
Also it is very incomplete.

This is much easier to use than the old method -- manually running
a bunch of test-* files and checking them with decoderawtransaction.
Latest commit 776cb8d Jan 15, 2014
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
tests/unsigned/simple-test Add simple test suite Jan 14, 2014
.gitignore Split merge.rs for signed/unsigned, change linker stuff Dec 11, 2013
LICENSE Add CC0 license Dec 11, 2013
Makefile
README Add contact info to README, fix whitespace for github Dec 11, 2013
coinjoin-merge-signed.rs Publish count of most popular output Dec 28, 2013
coinjoin-merge-unsigned.rs Publish count of most popular output Dec 28, 2013
decoder.rs Change pointer syntax in a couple places Dec 14, 2013
generate-tx.py Patch generate-tx.py to read bitcoin.conf (thanks ryan-c) Jan 10, 2014
hash.rs Change vec::to_ptr syntax to compile with rust HEAD Dec 17, 2013
merge_signed.rs Add some use statement to handle changes in Rust's module searching Jan 10, 2014
merge_unsigned.rs Add some use statement to handle changes in Rust's module searching Jan 10, 2014
run-tests.sh Add simple test suite Jan 14, 2014
sha-wrapper.c
transaction.rs Don't remove signatures when the hashtype is NONE|ANYONECANPAY Dec 29, 2013
util.rs Read input one char at a time instead of 2 Dec 11, 2013

README

CoinJoiner v0.1
Andrew Poelstra (andytoshi)
http://www.wpsoftware.net/andrew
apoelstra at wpsoftware.net
1DPtVM63advB61vKS3tHPhVcZdFTuc8Ka8



BUILDING
============

Install rustc and the openssl libs (no EC, Fedora is fine).
Then just type
  make


USAGE
===============

STEP ONE
========
All parties who want to coinjoin create a raw transaction using
createrawtransaction. They submit these to one individual, who enters
them into CoinJoiner by running

  ./coinjoin-merge-unsigned

Then just copy/paste the transactions in, one on each line, followed
by a blank line. The output will be an unsigned merged transaction. If
there were any signatures in the original transactions, these are
stripped since they would now be invalid.


STEP TWO
========
This merged transaction is distributed to the original parties, who
each sign it. Then they send these back to the individual running
CoinJoiner, who merges them by running

  ./coinjoin-merge-signed

Then just copy/paste the signed transactions in, one on each line,
followed by a blank line. The output will be a merged, signed
transaction that can be submitted to the bitcoin network. Further, the
order of the inputs and outputs in this transaction is randomized.




You can’t perform that action at this time.