You need to add a statement as to what license the code is released under; without one the code is not open source as all creative works are copyrighted by default.
You're right, added COPYRIGHT notice, made it AGPL for now, since this is proof of concept we will think about a more permissive license but we're comfortable with AGPL to encourage a more open ecosystem.
|
|
|
Yes we should develop some naming and versioning of different protocols that emerge so different clients and tools can all communicate.
|
|
|
We can develop several protocols for finding peers and jointly creating multisig transactions for different goals.
The protocols can then easily integrated into mainline clients (the one we implemented can easily be included in other clients, just uses POST, GET and some json to pass around the input, outputs, tx and signatures).
Cheers!
|
|
|
New "release" of CoinJoin, features: * Server now has a public "lobby" to serve as meeting point (front page announcing "open" coinjoins) * Creator of coinjoin can choose amount, so its no longer just 0.01, now you can join arbitrary amounts * The client can now resume the session in different runs, so you can actually run it in several times to finish the coinjoin and wait for other ppl joining (you had to keep it open before). You can check the video at (shows using the tool and lobby): * http://www.youtube.com/watch?v=rr6DeziHdFsTest server still at: * http://7vxb75tbnszhy2go.onionWe keep working on the implementation and more features so donations welcome at: 1H1LP8UhGR5wK9WppBMwewCddwdebYqwwT (some ideas: serverless setup, casual use for joining tx and fees...).
|
|
|
Hi ppl, this is Pablo, co-implementor of CoinJoin proof of concept with Amir (sorry don't have an account here so writing through Amir's account): New "release" of CoinJoin, features: * Server now has a public "lobby" to serve as meeting point (front page announcing "open" coinjoins) * Creator of coinjoin can choose amount, so its no longer just 0.01, now you can join arbitrary amounts * The client can now resume the session in different runs, so you can actually run it in several times to finish the coinjoin and wait for other ppl joining (you had to keep it open before). You can check the video at (shows using the tool and lobby): * http://www.youtube.com/watch?v=rr6DeziHdFsTest server still at: * http://7vxb75tbnszhy2go.onionWe keep working on the implementation and more features so donations welcome at: 1H1LP8UhGR5wK9WppBMwewCddwdebYqwwT (ideas are the ones from his thread including: serverless setup, casual use for joining tx and fees...). Code at: https://github.com/calafou/coinjoin, free and open source ;-) Cheers!
|
|
|
Server: - Powerless: has no real power. It's just a meeting point for participants to exchange data.
- Uninformed: has no special information except that which is public (and goes on the blockchain). There's no mapping between inputs and outputs because clients add their data in successive stages.
- Controls nothing: holds no funds. Funds and private keys are stored client side. Signing is done client side.
- Tor service. You can take down hidden services, but Silk Road and all the other services are still running around since 2+ years. Code is opensource so you can setup your own services. Users just paste the URL into the software. It's not really centralised. An analogy: BitcoinSpinner uses the BitcoinSpinner server, but in Electrum you choose your server and can setup your own.
- Extensible. Adding the p2p mechanism for exchanging data can easily be done. Replace the ServerInterface class methods in client.py with your own: https://github.com/calafou/coinjoin/blob/master/client.py Then the URL in the software becomes a shared secret. We designed the software with this in mind.
More technical info: http://sx.dyne.org/anontxWe've delivered usable software, simple for grandma (money goes in, money goes out), requires no blockchain or bitcoind, easy to install and trustless. We followed gmaxwell's instructions as our guidepoint and went further. And we delivered the product fast. As far as I can tell, genjix's implementation is neither decentralized nor private, correct? The hard parts are still left to be done.
Right, the key is to make it a thing normal users do. Central services can be shutdown. You have the code. Setup your own server. It's all opensource. FAQ:
Don't the users learn which inputs match up to which outputs?
In the simplest possible implementation where users meet up on IRC over tor or the like, yes they do. The next simplest implementation is where the users send their inputs and outputs to some meeting point server, and the server creates the transaction and asks people to sign it. The server learns the mapping, but no one else does, and the server still can't steal the coins.
note: Our implementation of the server is in stages and does not know the mapping so it's better even. This is an extremely interesting idea. Could you elaborate on how the Zerocoin transaction stages map to the stages of CoinJoin transaction creation?
For non-decenteralized coincoin, you simply pass around a transaction and sign it. It's a single sequence and an atomic transaction, you'd make two loops through the users, one to discover the inputs and outputs, and another to sign them. There really aren't stages to it.... As I said above, I generally think the non-decenteralized versions of these transactions will be implemented and commonly used first, simply because they're so much less work to do. note: we do a 4 step process where the outputs and inputs are loaded separately, so the server doesn't know the mapping between them I think adding a rendezvous mechanism to the P2P network makes sense. It's already a broadcast network after all. So perhaps the right design is not to try and do absolutely everything over the existing P2P network but rather allow people to announce rendezvous points (Tor hidden services?) over the broadcast channel and then allow nodes to set announcement filters like they set Bloom filters today. If you are an SPV/leaf node on the network you wouldn't hear announcements until you request them. Other nodes would relay them all.
|
|
|
PROOF OF CONCEPT ONLY http://sx.dyne.org/anontx/-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 My address: 1H1LP8UhGR5wK9WppBMwewCddwdebYqwwT -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAEBAgAGBQJSHFzwAAoJELvkzMTyLzm16NIQAJZZoLdS1NNW8OfOzV4p9LAO +u6pQzUm9KuxLuswGaAklrB4KExYmKSbd+kPVfkEsJb7Zu2Txi1ChUnY1xIV4t6/ GjuyM5qNuAD7NrLSJ3sCIKeQnWlwcj35Au9uxQzc7upry4wN9UCkBJjX0bbtDnkY Yuj9eRNt8z2Mpr/0pyhuCoyoPRFxaPLwcWnkGkXbZzQ/1MsBh0x7s5vH5hs5LHLT t9WPSE97erEVsnSFXMDhHxQKyNjo9Dm2TKAVFZUsXxnG7nua/c5sxVHxi1VRrvYn eIWSiAfMk9TIQZZ/mzZrSVUiSfLhyIDbForeCDEmh0ctSITv9GA5Ob/tHF30PyQg 5Z5RCPX3oXFMpTsSwL4BwR9pIaf8rs2iV3YG8Rr3+DyrgMmjwjPnvyoUsw+8cHdC lSQuPFAT9m7orBsUP7BSVuiuHAakKieg7nVUoswusvYENjVVjKw4mhflVCOkX3HS ae+3kfGMrRcWEZXjI3K6NeJNt2MzMmc9xl1PTJo2XAr86pI0k7cAf5ke09SloYtm y+l3ugv6Tl/Y2kWTF7n3N+QvDbg5rvAh7Yvtin84hb9vk4adxZggF1OUYqJDjI1s Mhjbm9wFI2B+cxjcrWKyMoXK4Ia5wyRIreMFKmYQ18vQDpwncHSTdKI5uSUpEPgT 3UuPRMkRWEoMiqvNSMqh =o2J/ -----END PGP SIGNATURE----- https://unsystem.net/static/genjix.gpg.txtCheck out my video about Bitcoin
|
|
|
Have you lowered the g++ dependency?
g++ 4.7 or higher as always. This is the version of g++ that properly implements the C++ standard. g++ 4.7 is in pretty much every Linux distro now. Older g++ do not fully implement the new C++ standard.
|
|
|
$ sx help validtx Usage: sx validtx FILENAME Validate a transaction. $ sx validtx footx Status: Success $ sx validtx txfile.tx Status: Matching previous object found $ sx validtx badsignature.tx Status: Validation of inputs failed $
|
|
|
Thanks all. I've added lots more commands for fetching raw transactions and working with block headers. The help should display all.
|
|
|
I want to add that everytime you purchase tobacco or McDonalds from these evil monopolistic corporations, you are supporting them. Just be aware of who your money goes to and who you are helping support. Many people are working against their self interest by voting for bad businesses with their money.
|
|
|
This script will automate creating, redeeming and sending an MN multisignature transaction for you: http://sx.dyne.org/automsig.shRead the first line and uncomment it to generate a new set of keys for the first time. sx main thread: https://bitcointalk.org/index.php?topic=259999#!/bin/bash # Uncomment this line to generate new keys. #for x in `seq 1 3`; do sx newkey > pk$x; done for x in `seq 1 3`; do cat pk$x | sx pubkey > pub$x; done for x in `seq 1 3`; do cat pk$x | sx addr > addr$x; done
sx rawscript 2 [ `cat pub1` ] [ `cat pub2` ] [ `cat pub3` ] 3 checkmultisig > msig.script cat msig.script | sx scripthash > 3addr echo "Send 0.001 BTC to $(cat 3addr)"
echo "Enter Y to continue." select yn in "Y"; do break; done
echo "Pausing a few seconds before polling history" sleep 10
sx history `cat 3addr` | grep Unspent -B 2 | grep output | awk '{print $2}' > unspent cat unspent
if [ `cat unspent | wc -l` -eq 0 ]; then echo "No funds sent to address." exit fi
INPUT=$(cat unspent | head -n 1)
sx mktx txfile.tx -i $INPUT -o 1Fufjpf9RM2aQsGedhSpbSCGRHrmLMJ7yY:90000 cat pk1 | sx sign-input txfile.tx 0 `cat msig.script` > sig1 cat pk3 | sx sign-input txfile.tx 0 `cat msig.script` > sig3 sx rawscript zero [ `cat sig1` ] [ `cat sig3` ] [ `cat msig.script` ] > input.script cat input.script | sx set-input txfile.tx 0
sx broadcast-tx txfile.tx
|
|
|
This script will automate creating, redeeming and sending an MN multisignature transaction for you: http://sx.dyne.org/automsig.shRead the first line and uncomment it to generate a new set of keys for the first time.
|
|
|
http://sx.dyne.org/workshop.htmlThe workshop will be fully hands on, with a break halfway for pizza (or other food). We will learn how to do secure online payments by constructing a Bitcoin transaction, signing it offline, transporting it to a networked computer with a USB stick, and broadcasting the transaction online to the peer to peer network. Afterwards we will look at advanced features that provide additional security: Bitcoin multisignature contracts and deterministic wallets. And we will ask the question "how do all these features fit together for a comprehensive secure Bitcoin policy?". - Basic knowledge of the Linux terminal (piping output, moving between directories, working with files) required.
- Technical knowledge of Bitcoin is not required.
- Programming knowledge is not required.
This workshop is for admin types, scripters, programmers, or Linux enthusiasts.
|
|
|
Run 'g++ --version' Your compiler should be 4.7 or higher. I think you might have an older version. I'm sorry but I always get:
In file included from ./../include/bitcoin/utility/big_number.hpp:6:0, from ./../include/bitcoin/constants.hpp:6, from ./../include/bitcoin/satoshi_serialize.hpp:4, from satoshi_serialize.cpp:1: ./../include/bitcoin/types.hpp:24:9: error: 'atomic' in namespace 'std' does not name a type ./../include/bitcoin/types.hpp:25:25: error: 'atomic_counter' was not declared in this scope ./../include/bitcoin/types.hpp:25:39: error: template argument 1 is invalid ./../include/bitcoin/types.hpp:25:59: error: invalid type in declaration before ';' token make[1]: *** [satoshi_serialize.lo] Error 1 make[1]: Leaving directory `/usr/local/src/libbitcoin-git/src' make: *** [all-recursive] Error 1
on the "libtool: compile" line.
I tried to re-run the install.sh lines one by one, and libbitcoin-git seems to make it into /usr/local/src/ but then later on terminal seems to say that libbitcoin is not available. It suggested setting a directory but I could not figure it out."
This is just like Gavin's multisig example, which I couldn't figure out either! DARN.
Help would be appreciated.
|
|
|
|