Here is some logs from a nitesend transaction (this is made with sync, but I already have Voot wallet at the same condition):
Wallet 1 sends a nitesend offer:
Nitesend CommitTransaction:
CTransaction(hash=456f4579f6, nTime=1403562185, ver=1, vin.size=1, vout.size=1, nLockTime=1403562785)
CTxIn(COutPoint(b84925a1fd, 1), scriptSig=304402204c5e9196e64d999d, nSequence=1105092332)
CTxOut(nValue=0.01, scriptPubKey=OP_DUP OP_HASH160 9c36ab635527083e93b6a64a388a69f51da613a2 OP_EQUALVERIFY OP_CHECKSIG)
CommitTransaction:
CTransaction(hash=456f4579f6, nTime=1403562185, ver=1, vin.size=1, vout.size=1, nLockTime=1403562785)
CTxIn(COutPoint(b84925a1fd, 1), scriptSig=304402204c5e9196e64d999d, nSequence=1105092332)
CTxOut(nValue=0.01, scriptPubKey=OP_DUP OP_HASH160 9c36ab635527083e93b6a64a388a69f51da613a2 OP_EQUALVERIFY OP_CHECKSIG)
AddToWallet 456f4579f6 new
Wallet 2 sends a nitesend offer:
Nitesend CommitTransaction:
CTransaction(hash=89bc55838a, nTime=1403562201, ver=1, vin.size=1, vout.size=1, nLockTime=1403562785)
CTxIn(COutPoint(36446ad7cb, 1), scriptSig=30440220234d56681138bd26, nSequence=1105092332)
CTxOut(nValue=0.01, scriptPubKey=OP_DUP OP_HASH160 f80fb258d99a5ad0c68349c3de362da56a1f274d OP_EQUALVERIFY OP_CHECKSIG)
CommitTransaction:
CTransaction(hash=89bc55838a, nTime=1403562201, ver=1, vin.size=1, vout.size=1, nLockTime=1403562785)
CTxIn(COutPoint(36446ad7cb, 1), scriptSig=30440220234d56681138bd26, nSequence=1105092332)
CTxOut(nValue=0.01, scriptPubKey=OP_DUP OP_HASH160 f80fb258d99a5ad0c68349c3de362da56a1f274d OP_EQUALVERIFY OP_CHECKSIG)
AddToWallet 89bc55838a new
WalletUpdateSpent found spent coin
Wallet 1: Receives a nitesend coinjoin offers and builds a nitesend collection, signs own part:
net.cpp RelayTransaction type = 3
updateWallet 89bc55838a888288cca70edbd99ec8eeb2b3d92c97fd4126759fa9a1c968f951 0
inWallet=1 inModel=0 Index=120-120 showTransaction=1 derivedStatus=0
BuildCollectedTransaction : checking CTransaction(hash=456f4579f6, nTime=1403562185, ver=1, vin.size=1, vout.size=1, nLockTime=1403562785)
CTxIn(COutPoint(b84925a1fd, 1), scriptSig=304402204c5e9196e64d999d, nSequence=1105092332)
CTxOut(nValue=0.01, scriptPubKey=OP_DUP OP_HASH160 9c36ab635527083e93b6a64a388a69f51da613a2 OP_EQUALVERIFY OP_CHECKSIG)
BuildCollectedTransaction : checking CTransaction(hash=89bc55838a, nTime=1403562201, ver=1, vin.size=1, vout.size=1, nLockTime=1403562785)
CTxIn(COutPoint(36446ad7cb, 1), scriptSig=30440220234d56681138bd26, nSequence=1105092332)
CTxOut(nValue=0.01, scriptPubKey=OP_DUP OP_HASH160 f80fb258d99a5ad0c68349c3de362da56a1f274d OP_EQUALVERIFY OP_CHECKSIG)
BuildCollectedTransaction : generated CTransaction(hash=6cd087af92, nTime=1403562785, ver=1, vin.size=2, vout.size=2, nLockTime=0)
CTxIn(COutPoint(b84925a1fd, 1), scriptSig=304402204c5e9196e64d999d, nSequence=1105092332)
CTxIn(COutPoint(36446ad7cb, 1), scriptSig=30440220234d56681138bd26, nSequence=1105092332)
CTxOut(nValue=0.01, scriptPubKey=OP_DUP OP_HASH160 9c36ab635527083e93b6a64a388a69f51da613a2 OP_EQUALVERIFY OP_CHECKSIG)
CTxOut(nValue=0.01, scriptPubKey=OP_DUP OP_HASH160 f80fb258d99a5ad0c68349c3de362da56a1f274d OP_EQUALVERIFY OP_CHECKSIG)
BuildCollectedTransaction : I have joined this transaction!
BuildCollectedTransaction : Signed CTxIn(COutPoint(b84925a1fd, 1), scriptSig=3044022051f62e28e58fa0f6)
BuildCollectedTransaction : Not Signed CTxIn(COutPoint(36446ad7cb, 1), scriptSig=30440220234d56681138bd26)
BuildCollectedTransaction : signed my part CTransaction(hash=8cce89b3cc, nTime=1403562785, ver=1, vin.size=2, vout.size=2, nLockTime=0)
CTxIn(COutPoint(b84925a1fd, 1), scriptSig=3044022051f62e28e58fa0f6)
CTxIn(COutPoint(36446ad7cb, 1), scriptSig=30440220234d56681138bd26, nSequence=1105092332)
CTxOut(nValue=0.01, scriptPubKey=OP_DUP OP_HASH160 9c36ab635527083e93b6a64a388a69f51da613a2 OP_EQUALVERIFY OP_CHECKSIG)
CTxOut(nValue=0.01, scriptPubKey=OP_DUP OP_HASH160 f80fb258d99a5ad0c68349c3de362da56a1f274d OP_EQUALVERIFY OP_CHECKSIG)
Relaying wtx 8cce89b3cc
net.cpp RelayTransaction type = 3
received getdata for: ctx 8cce89b3cc528f5f5a59
wallet2: receives the partly signed collection and signs the latter part, finds it is final and broadcasts it to blcokchain
received getdata for: ctx 89bc55838a888288cca7
CTxMemPool::accept() : accepted 8cce89b3cc (poolsz 1)
CTxMemPool::accept() : accepted CTransaction(hash=8cce89b3cc, nTime=1403562785, ver=1, vin.size=2, vout.size=2, nLockTime=0)
CTxIn(COutPoint(b84925a1fd, 1), scriptSig=3044022051f62e28e58fa0f6)
CTxIn(COutPoint(36446ad7cb, 1), scriptSig=30440220234d56681138bd26, nSequence=1105092332)
CTxOut(nValue=0.01, scriptPubKey=OP_DUP OP_HASH160 9c36ab635527083e93b6a64a388a69f51da613a2 OP_EQUALVERIFY OP_CHECKSIG)
CTxOut(nValue=0.01, scriptPubKey=OP_DUP OP_HASH160 f80fb258d99a5ad0c68349c3de362da56a1f274d OP_EQUALVERIFY OP_CHECKSIG)
AddToWallet 8cce89b3cc new
NotifyTransactionChanged 8cce89b3cc528f5f5a5904d4ce97ef2ab6c1813c69f6aec61c6e2361a7567079 status=0
net.cpp RelayTransaction type = 3
updateWallet 8cce89b3cc528f5f5a5904d4ce97ef2ab6c1813c69f6aec61c6e2361a7567079 0
inWallet=1 inModel=0 Index=12-12 showTransaction=1 derivedStatus=0
BuildCollectedTransaction : I have joined this transaction!
BuildCollectedTransaction : VerifyScript passed CTxIn(COutPoint(b84925a1fd, 1), scriptSig=3044022051f62e28e58fa0f6)
BuildCollectedTransaction : Signed CTxIn(COutPoint(36446ad7cb, 1), scriptSig=3045022100cc79eb7c87d364)
BuildCollectedTransaction : signed my part CTransaction(hash=5841009bf2, nTime=1403562785, ver=1, vin.size=2, vout.size=2, nLockTime=0)
CTxIn(COutPoint(b84925a1fd, 1), scriptSig=3044022051f62e28e58fa0f6)
CTxIn(COutPoint(36446ad7cb, 1), scriptSig=3045022100cc79eb7c87d364)
CTxOut(nValue=0.01, scriptPubKey=OP_DUP OP_HASH160 9c36ab635527083e93b6a64a388a69f51da613a2 OP_EQUALVERIFY OP_CHECKSIG)
CTxOut(nValue=0.01, scriptPubKey=OP_DUP OP_HASH160 f80fb258d99a5ad0c68349c3de362da56a1f274d OP_EQUALVERIFY OP_CHECKSIG)
BuildCollectedTransaction : NiteSend transaction is complete, broadcasting.
CTxMemPool::accept() : accepted 5841009bf2 (poolsz 1)
CTxMemPool::accept() : accepted CTransaction(hash=5841009bf2, nTime=1403562785, ver=1, vin.size=2, vout.size=2, nLockTime=0)
CTxIn(COutPoint(b84925a1fd, 1), scriptSig=3044022051f62e28e58fa0f6)
CTxIn(COutPoint(36446ad7cb, 1), scriptSig=3045022100cc79eb7c87d364)
CTxOut(nValue=0.01, scriptPubKey=OP_DUP OP_HASH160 9c36ab635527083e93b6a64a388a69f51da613a2 OP_EQUALVERIFY OP_CHECKSIG)
CTxOut(nValue=0.01, scriptPubKey=OP_DUP OP_HASH160 f80fb258d99a5ad0c68349c3de362da56a1f274d OP_EQUALVERIFY OP_CHECKSIG)
Relaying wtx 5841009bf2
net.cpp RelayTransaction type = 1
Complete transaction is here on the blockchain:
http://explorer.synclub.net/tx/5841009bf23ee4608618cee00b6499eee4ea670d8062fa2b37490c0c51d631c8TODO:
- Build transaction with correct timings, ie start collecting complete tx after delay (now it builds when 2 parts are received)
- sign collective transaction in order (now everyone signs, eventually it will build up, but not very optimized)
- clean up previous transactions after building next
- add more DoS preventions (for example, prevent mining nitesend offers)
- add procedure to drop misbehaving nodes, ie transactions that are not signed in time