Join GitHub today
GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.Sign up
Groupsends - hopefully someone can create a better cooler sounding name for this.
The idea behind GroupSends is to bring more privacy and fungibility to bitcoin by making it harder for blockchain analyst to accurately assign inputs and outputs to users. GroupSends will also lower the cost of transactions for users.
GroupSends is essentially users batching their transactions together using the same (or similar) setup as CoinJoin in WassabiWallet.
GroupSends can be setup to happen hourly, once per day and or once 100 inputs have been accumulated depending on demand.
Users would go into the GroupSends tab, select which UTXO(s) they which to use, the address(es) and amount(s) to send to and the wallet would create a change address for users. Once the target (hourly, 100, etc) for GroupSends was met then Wassabi Wallet will construct the transaction like it does for CoinJoins and transmit the transaction.
GroupSends would increase the anonymity of the outputs especially for the inputs that were previous;y CoinJoined.
At first glance what you describe is the first version of blockchain.info's SharedCoin, which is of course sumbsetsum deanonymizable. However... wasabi users have utxos with the same outputs, which breaks subset sum. So, if we apply groupsend only for these inputs, groupsend could be a huge addition.
Revising this into JoinSends
Users can only use UTXO(s) that are within a short range of the amount of CoinJoined mixed outputs. Currently this value is 0.05004 BTC. So, the UTXO range would be about 0.05003 to 0.05006 BTC. Once Wasabi Wallet is in Beta this value would go to 0.1 BTC. We will be assuming 0.1 BTC UTXOs to explain.
(?) Users can preferably CoinJoin to get access to JoinSends or create a UTXO within the range to get access to JoinSend.
The idea behind JoinSends is to bring more privacy and fungibility to bitcoin by making it even harder for blockchain analyst to accurately assign inputs and outputs to users by compounding the anonymity set created by CoinJoins. The anonymity set of each input of a JoinSend is essentially multiplied by the number of inputs thus making the anonymity set of outputs incredible high.
JoinSends are essentially users batching their CoinJoined transactions together using the same (or similar) setup as CoinJoin in Wasabi Wallet.
Users would go into the JoinSends tab which will display their list of available UTXO(s). Users will select which UTXO(s) to use, label the transaction for themselves, enter the address(es) and amount(s) to send to and the wallet would create a change address for users. Finally once the target (hourly, 100, etc) for JoinSends was met then Wassabi Wallet will construct the transaction like it does for CoinJoins and transmit the transaction.
JoinSends can be setup to happen hourly, once per day and or once 100 inputs have been accumulated depending on demand.
Here is an example of a JoinSend. 10 users select their 0.1 BTC UTXOs to send. (0 network/miner fees for simplification.)
(?) Maybe this isn’t needed. To further anonymize the participants the wallet figures the average or mean value of the ‘send to’ outputs. Those who have ‘send to’ values greater than the average like Alice, Bob, Cara, Dick and Eric will receive their change back - 0.1, 0.2, 0.3, 0.4 and 0.5 respectfully. The rest would get 2 change outputs each. The first would be an equal amount for each and the second would be their leftover change. The mixed changed UTXOs would be useable in future JoinSends.
This example transaction would have the 10 inputs and 26 outputs. 10 outputs to ‘send to’, 5 outputs to ‘send to(change)’, 5 outputs to ‘mixed change’, 5 outputs to ‘unmixed change’ and 1 output to ‘wallet fee’.
Combining this with UIM: https://gist.github.com/nothingmuch/544cdd47dd18ef8fe923b54e0d5ee141