check_status
Full Member
Offline
Activity: 196
Merit: 100
Web Dev, Db Admin, Computer Technician
|
|
June 21, 2012, 11:50:12 AM |
|
The vertices are hash160 or, in the case of the pic, base58 bitcoin addresses. How big a vertex appears, like in the pic, is probably determined by number of transactions. The edges are transactions, send and receive, colored by amounts transferred, small amounts grey, large amounts colors.
I was thrown out of geometry class in highschool, so I didn't take it.
|
For Bitcoin to be a true global currency the value of BTC needs always to rise. If BTC became the global currency & money supply = 100 Trillion then ⊅1.00 BTC = $4,761,904.76. P2Pool Server List | How To's and Guides Mega List | 1 EndfedSryGUZK9sPrdvxHntYzv2EBexGA
|
|
|
check_status
Full Member
Offline
Activity: 196
Merit: 100
Web Dev, Db Admin, Computer Technician
|
|
June 21, 2012, 01:21:08 PM |
|
OK, now that's clear: what you want is a full dump of the blockchain in graph form.
So, as it is today, the code can't directly generate that, but it'd be a feature super simple to add to the 'allBalances' callback since the code basically walks that exact graph to generate the final balances.
That being said, this is going to be a *huge* dump. To get an idea, here's the current blockchain stats gathered by blockparser: - 4.407 Million unique addresses received BTC - the blockchain contains 17.826 Million address spends
In other words, not even taking into account the complex kind of transactions (send fromMany toMany) your graph would have on the order of 4.5M vertices and on the order of 18M edges ...
Unless your graph software was optimized to handle very large graphs, you're not going to get much out of it. Hmm...I guess it might be better to dump as text and then crawl for the specific info needed. I certainly can't load the whole blockchain into the grapher, I don't have a Cray nearby. Another way would be to somehow figure out a way to restrict the graph dump to a nearby neighborhood of a given address (for example N hops). This sounds a bit more reasonable. Feel free to submit a patch. That means it's somewhat difficult or tedious to implement. I was thrown out of geometry class in highschool, so I didn't take it.
Since when is graph theory taught during geometry classes ? Neither had I computer science. Biology, tables yes, graphing no.
|
For Bitcoin to be a true global currency the value of BTC needs always to rise. If BTC became the global currency & money supply = 100 Trillion then ⊅1.00 BTC = $4,761,904.76. P2Pool Server List | How To's and Guides Mega List | 1 EndfedSryGUZK9sPrdvxHntYzv2EBexGA
|
|
|
check_status
Full Member
Offline
Activity: 196
Merit: 100
Web Dev, Db Admin, Computer Technician
|
|
June 21, 2012, 01:37:37 PM |
|
We'll see how far past 'hello world!' I get first.
|
For Bitcoin to be a true global currency the value of BTC needs always to rise. If BTC became the global currency & money supply = 100 Trillion then ⊅1.00 BTC = $4,761,904.76. P2Pool Server List | How To's and Guides Mega List | 1 EndfedSryGUZK9sPrdvxHntYzv2EBexGA
|
|
|
|
muyuu
Donator
Legendary
Offline
Activity: 980
Merit: 1000
|
|
July 03, 2012, 12:29:25 AM |
|
Looks good. Cheers.
|
GPG ID: 7294199D - OTC ID: muyuu (470F97EB7294199D) forum tea fund BTC 1Epv7KHbNjYzqYVhTCgXWYhGSkv7BuKGEU DOGE DF1eTJ2vsxjHpmmbKu9jpqsrg5uyQLWksM CAP F1MzvmmHwP2UhFq82NQT7qDU9NQ8oQbtkQ
|
|
|
Sukrim
Legendary
Offline
Activity: 2618
Merit: 1007
|
|
July 05, 2012, 10:22:17 AM |
|
Also, want to run it on my public address? I am curious what other addresses are correlated with it... If not, that's fine, I'll download it and attempt to compile myself. Here you go. Even translated the result to the usual format. I'd be curious to see if it worked. Let me know. 18TKNbSLTrd3a2W8mtoH5uNzFhWRWNcuHU 1HCPvWwBuUp7wqY69pgVeQZVv7KWj2foTC 15QeFbpe3o1rweuB4vHFG6FZHwZw6SKTe6 1EScB6WzkeDVUZwLSsAHxUNuRr8jN38MLm 17sUs5wQ9VrqxNwVg2ZGu2f77XW8QWzbAF 1MTvpvsZgjsWK588kgvm9RS35MQW46eyAW 1Ah5SFitc1zeWFck4CAdFaheAdU5RxiGq7 1M3z9w1tGaRKeGgoNCqXHLrfBRfyWh4WT6 14vWo67QCcWy6ET1Be7fsF4RW1QWNoJTwv 19yKfxN1xCcuk9nC6nDSV4PbpQifudjP4r 15mBZw6cjujDh61NBQu3pton78RAxdugmN 1MJ7EF8cDdkJY2YEYDJNFPiMg6oprMwb2K 1Ht1M1ndrRuKGWGuzBjxKfj6uWfrdVWQQr 1Q8mYsQhXREsHAmYWLqiD1iQjRns6pEE3v 13ViQh8GcaXHcSgwiM2szYfAHogdj2rjdu 17rgBsV5vhgFoXM67Xw9xLor5ZDG4Bbc5E 1LKbGSSZsBMixyLzKwt8k45VXY3Jxq6YBo 1Ce2FpRAgzqTPNVRE9oSTFtyHsjFQAeBwo 16jZP9v3RwoiVHYKTu89W2MvuHYHJjhV6n 1GVshgfm7dKWQaKnGfZpVfUgHMc667SSy2 16oGSr3q8H7m7mhFiRZgLZiBFPSLWxYJ6H 1MmRmJY9Kkepn98tUDw6mgRu8FDtqRv3Sq 1GcJTf4xWe8eNXmg37pJEYQz9zfynaWR1F 1EFwce8G1jEM384H4XAmgDg4oKS4CNYmjc 16EN1R3GUgTKPDbwYG8MuorjebKBqRfQQC 1L76oj8piiQjZTX81LvJTY8nqJCRQme24M 19YgjvW48TFLh7VDx4kqtoQdUntr6nbwvb 1M4Px4n2mudnCvMur56MgJmBoVmJBsUE1e 1BP5oZMunWkn4AumtVidxvSgdprMtc7TiS 14rh6vEzfpCz7KhiiMnBVFDPbSDtk5XhU8 11bUZzLby1Z1SAgS9UcHC3V2FXLTkJ5u73 1QBWU6Wzg7ER9ryiTqDsxsj452m7bMnGwK 13XPKVAR7AWzoiN1Pph7fGjcx7o1iMP6KK 16Fc6U3K9YBToqifj43jpiqynj7ug3MNye 1DwMrunRyaYPq94577j7Kj6zBf3uLhZDpW 18eWPzRWH12L4CmdeBc66eimdAKeyZWSi6 1N1VFUQLdQp6L2Z25H4zswoxc5L8NppSSJ 1K8F2dzKzvxixkMQhb8dq7LBCuKxCPFgW8 11Eqw5T99VsNtSzjBTrWGQHPsRrk4RmB2B 18LzGvrFokVvWZJAWw5wDsaErX5VrovGeQ 137DULuj5JhNc9V3Q4MEi1AJQX65QAG4xf 1EZp1rmPjBhZ5FvuAvfUqrZWM3uoF8p3h8 12pL3fwPGz9GsVE8L8v5agiQDpZhWYHGXV 1KxJd5v5orAoFuSkdUZSXc4UXmDa95bAND 1HjzgWVCkCXYW6LWX8THBtNwbKbYxUdpFe 1BfSfnbz7hbSgcXerakXuyf7FHRKcmpJcA 1GJFN1SN8Y9SJdSDK16uzGjV5wsGmEgMvn 1FAkUHN2rzf2PvLJ1E4NZ6r7zZsjw7Xa32 12LwQUq9HKsbaHmtPH46NgABYcp8A3sXWB 11FNssaGrVp9amTvi8sG6qb7mZB4d1VQYQ 1BrXK4M4c6xihr3gJj5mBht6xVoFzgtFvK 11D1dSTNJdhfpAf98USCJdUJp3917q3TJy 152SqwUX8R6PoEmJkxprU8Hr3GGbF5QpPn 1PRQk473DBQrdBhgAY6GcTXeezkyhPqvBx 1Hd3F12RoDQfHYShYBKPDC4NrxyPmk24Ne 1K5oHkRCZJeLB7p1E8yMEa4X7LAz3fbsCU 18Vv4whHTnGAe4f582trW4fLz3T3RUFhnC 1DP4bm1xBkKaRMcmZk996hsYSXcfmxH687 16TxHT4Par4xrKEoTYUDGGqcmZhBijTC2q 1CeADvshNvXVoxw1t1nqhwczYh5CefvuJB 1N5iVMVEEv6G2iSmJFPrPZ4mxkBCFdCmkA 14Z6Qa7Z1QNUTmEP5LkAjsXDzy151Jbwya 12ALSWvaVPekEkDWc5CrDDZvtSpDiWnWM8 1BG5Rbhc88VFLGCk5S3AmumgCa2ro1y1uz 17oFBQJau137iTPjkzyzayvTm7Wouu5DGn 1Ghu4ACM8UGtFxUmGx4BSJ3cA4hkB1iafy 1AcPdXqmJw67Mf6KvMo6d2iPZXoWLN2snM 18etxowpqFzYVbh2DwikcRvijfBZ6VWvjC 1D6FXvnELTfXSsZ8H5MSdfxFMofq1n4LBy 1JbkiKFGEqDHje1wSfHwiRbfxsbodmTK5s
Wow, that's quite a lot! I can say that the below is my BitMinter payout address, so I know that that much worked. Not at my wallet computer at the moment, but I'll check more of them out when I can. 1EScB6WzkeDVUZwLSsAHxUNuRr8jN38MLm Working from tat bitminter address I got 1GVshgfm7dKWQaKnGfZpVfUgHMc667SSy2 17oFBQJau137iTPjkzyzayvTm7Wouu5DGn 1N5iVMVEEv6G2iSmJFPrPZ4mxkBCFdCmkA 1K5oHkRCZJeLB7p1E8yMEa4X7LAz3fbsCU 1BP5oZMunWkn4AumtVidxvSgdprMtc7TiS 19yKfxN1xCcuk9nC6nDSV4PbpQifudjP4r 1Eqw5T99VsNtSzjBTrWGQHPsRrk4RmB2B 1HCPvWwBuUp7wqY69pgVeQZVv7KWj2foTC 18TKNbSLTrd3a2W8mtoH5uNzFhWRWNcuHU 1Ce2FpRAgzqTPNVRE9oSTFtyHsjFQAeBwo 17rgBsV5vhgFoXM67Xw9xLor5ZDG4Bbc5E 15QeFbpe3o1rweuB4vHFG6FZHwZw6SKTe6 1PRQk473DBQrdBhgAY6GcTXeezkyhPqvBx 1N1VFUQLdQp6L2Z25H4zswoxc5L8NppSSJ 16jZP9v3RwoiVHYKTu89W2MvuHYHJjhV6n 1QBWU6Wzg7ER9ryiTqDsxsj452m7bMnGwK 16oGSr3q8H7m7mhFiRZgLZiBFPSLWxYJ6H 1GcJTf4xWe8eNXmg37pJEYQz9zfynaWR1F 1Q8mYsQhXREsHAmYWLqiD1iQjRns6pEE3v 1Ah5SFitc1zeWFck4CAdFaheAdU5RxiGq7 137DULuj5JhNc9V3Q4MEi1AJQX65QAG4xf 18Vv4whHTnGAe4f582trW4fLz3T3RUFhnC 1GJFN1SN8Y9SJdSDK16uzGjV5wsGmEgMvn 15mBZw6cjujDh61NBQu3pton78RAxdugmN 1BfSfnbz7hbSgcXerakXuyf7FHRKcmpJcA 1FNssaGrVp9amTvi8sG6qb7mZB4d1VQYQ 1EFwce8G1jEM384H4XAmgDg4oKS4CNYmjc 17sUs5wQ9VrqxNwVg2ZGu2f77XW8QWzbAF 18etxowpqFzYVbh2DwikcRvijfBZ6VWvjC 1BrXK4M4c6xihr3gJj5mBht6xVoFzgtFvK 1Hd3F12RoDQfHYShYBKPDC4NrxyPmk24Ne 12pL3fwPGz9GsVE8L8v5agiQDpZhWYHGXV 1Ghu4ACM8UGtFxUmGx4BSJ3cA4hkB1iafy 1MTvpvsZgjsWK588kgvm9RS35MQW46eyAW 1FAkUHN2rzf2PvLJ1E4NZ6r7zZsjw7Xa32 1M3z9w1tGaRKeGgoNCqXHLrfBRfyWh4WT6 12ALSWvaVPekEkDWc5CrDDZvtSpDiWnWM8 1EZp1rmPjBhZ5FvuAvfUqrZWM3uoF8p3h8 16EN1R3GUgTKPDbwYG8MuorjebKBqRfQQC 1M4Px4n2mudnCvMur56MgJmBoVmJBsUE1e 13XPKVAR7AWzoiN1Pph7fGjcx7o1iMP6KK 1MJ7EF8cDdkJY2YEYDJNFPiMg6oprMwb2K 1L76oj8piiQjZTX81LvJTY8nqJCRQme24M 1JbkiKFGEqDHje1wSfHwiRbfxsbodmTK5s 18LzGvrFokVvWZJAWw5wDsaErX5VrovGeQ 16Fc6U3K9YBToqifj43jpiqynj7ug3MNye 19YgjvW48TFLh7VDx4kqtoQdUntr6nbwvb 1D1dSTNJdhfpAf98USCJdUJp3917q3TJy 1EScB6WzkeDVUZwLSsAHxUNuRr8jN38MLm 12LwQUq9HKsbaHmtPH46NgABYcp8A3sXWB 152SqwUX8R6PoEmJkxprU8Hr3GGbF5QpPn 1MmRmJY9Kkepn98tUDw6mgRu8FDtqRv3Sq 13ViQh8GcaXHcSgwiM2szYfAHogdj2rjdu 1LKbGSSZsBMixyLzKwt8k45VXY3Jxq6YBo 1CeADvshNvXVoxw1t1nqhwczYh5CefvuJB 1BG5Rbhc88VFLGCk5S3AmumgCa2ro1y1uz 14Z6Qa7Z1QNUTmEP5LkAjsXDzy151Jbwya 16TxHT4Par4xrKEoTYUDGGqcmZhBijTC2q 1DP4bm1xBkKaRMcmZk996hsYSXcfmxH687 1DwMrunRyaYPq94577j7Kj6zBf3uLhZDpW 1KxJd5v5orAoFuSkdUZSXc4UXmDa95bAND 1AcPdXqmJw67Mf6KvMo6d2iPZXoWLN2snM 1K8F2dzKzvxixkMQhb8dq7LBCuKxCPFgW8 14rh6vEzfpCz7KhiiMnBVFDPbSDtk5XhU8 1D6FXvnELTfXSsZ8H5MSdfxFMofq1n4LBy 14vWo67QCcWy6ET1Be7fsF4RW1QWNoJTwv 18eWPzRWH12L4CmdeBc66eimdAKeyZWSi6 1HjzgWVCkCXYW6LWX8THBtNwbKbYxUdpFe 1Ht1M1ndrRuKGWGuzBjxKfj6uWfrdVWQQr 1bUZzLby1Z1SAgS9UcHC3V2FXLTkJ5u73 with a current balance of 10.46293721 BTC I still need to change my own script to output hashes instead of addresses though, so I can compare with this (much faster but limited to linux) program.
|
|
|
|
flatfly
Legendary
Offline
Activity: 1092
Merit: 1016
760930
|
|
July 06, 2012, 11:20:54 AM |
|
Is it possible to answer the following question with this tool?
Show all addresses currently containing coins from the (latest) Bitcoinica hack.
|
|
|
|
copumpkin
Donator
Sr. Member
Offline
Activity: 266
Merit: 252
I'm actually a pineapple
|
|
July 06, 2012, 08:32:34 PM Last edit: July 06, 2012, 08:43:43 PM by copumpkin |
|
I haven't had a chance to look at your code yet, but do you use Tarjan's union-find to compute the "wallet-sets"? I've been meaning to write a tool that does that for a while.
Edit: oh, you're using boost's connected_components. I think they use union-find for incremental_components.
|
|
|
|
copumpkin
Donator
Sr. Member
Offline
Activity: 266
Merit: 252
I'm actually a pineapple
|
|
July 06, 2012, 10:26:21 PM |
|
I haven't had a chance to look at your code yet, but do you use Tarjan's union-find to compute the "wallet-sets"? I've been meaning to write a tool that does that for a while.
Edit: oh, you're using boost's connected_components. I think they use union-find for incremental_components.
Yes I do because I build the entire graph in the first place. Not sure what algorithm they use in there. Also, given that I build the whole graph, not sure why using TUFA has any advantage over a dumb [D|B]FS mark and sweep ... Yeah, it doesn't. I wasn't planning on maintaining the entire graph, so can get away with it.
|
|
|
|
copumpkin
Donator
Sr. Member
Offline
Activity: 266
Merit: 252
I'm actually a pineapple
|
|
July 06, 2012, 10:55:21 PM |
|
I haven't had a chance to look at your code yet, but do you use Tarjan's union-find to compute the "wallet-sets"? I've been meaning to write a tool that does that for a while.
Edit: oh, you're using boost's connected_components. I think they use union-find for incremental_components.
Yes I do because I build the entire graph in the first place. Not sure what algorithm they use in there. Also, given that I build the whole graph, not sure why using TUFA has any advantage over a dumb [D|B]FS mark and sweep ... Yeah, it doesn't. I wasn't planning on maintaining the entire graph, so can get away with it. Turns out that the graph will grow so fat at some point that it might very well be necessary to move to some sort of incremental data structure ... that being said, since there is no way to know that two disjoin subsets will or won't merge until the very last tx in the chain, I don't think it's possible to get away with _not_ building the whole graph in the first place. Well, I haven't tried implementing it yet, but my thinking was that the union-find structure represents just as much of the graph as we need. We basically have an equivalence of "has been used as an input in the same transaction as" and we're building equivalence classes. So basically, you make a pass over the data building up an associative map structure from each address to something your union-find algorithm knows how to deal with (I'm language-agnostic ). As you process transactions in the block building these things up, you make sure to call union on your union-find structure to join classes together if you see them as inputs to the same transaction. This is linear in the number of inputs, not quadratic, because the structure knows what's already in the class. Once you've made your pass over the blockchain, you're left with a big map containing all input addresses ever seen and your union-find structure. Now all you need to do is traverse your map of addresses and look up (using find to find a representative element of your equivalence class) which set each element is in, and group on that. The resulting sets should be your connected components. You could then make your map from addresses point to the set it belongs to for easy lookups, or do whatever. If I'm not spouting nonsense, that would allow us to run the set-building in O(n * alpha(n)) time, where n is the total number of inputs to all transactions. You'd use O(total unique input addresses) space for it, and it should have fairly low constant factors. I'll probably try implementing that in a bit, but I need to finish decoding the scripts first
|
|
|
|
copumpkin
Donator
Sr. Member
Offline
Activity: 266
Merit: 252
I'm actually a pineapple
|
|
July 06, 2012, 11:02:09 PM |
|
I'll probably try implementing that in a bit, but I need to finish decoding the scripts first I'll have to read your explanation about the algorithm you describe when my mind is a little more alert than right now (4am here). However, for the script decoding part, I would suggest looking at my code, in file util.cpp, routing solveOutputScript and showScript. They're very simple and pretty much self-contained (unlike the satoshi client code which has lots of layers of abstraction and makes things a tad hard to follow linearly). Cool, will do. I'm doing it in a completely different language (I dare not say which, lest people judge me! ), but having some nicely written code to look at will be a great help, thanks.
|
|
|
|
pancake
Newbie
Offline
Activity: 24
Merit: 0
|
|
July 10, 2012, 10:04:48 AM |
|
can't compile on linux-x86-32:
$ make c++ -- cb/closure.cpp c++ -- cb/simpleStats.cpp c++ -- cb/taint.cpp c++ -- cb/transactions.cpp c++ -- cb/allBalances.cpp c++ -- callback.cpp c++ -- opcodes.cpp c++ -- parser.cpp cb/allBalances.cpp:1:0: sorry, unimplemented: 64-bit mode not compiled in opcodes.cpp:1:0: sorry, unimplemented: 64-bit mode not compiled in callback.cpp:1:0: sorry, unimplemented: 64-bit mode not compiled in cb/simpleStats.cpp:1:0: sorry, unimplemented: 64-bit mode not compiled in cb/transactions.cpp:1:0: sorry, unimplemented: 64-bit mode not compiled in parser.cpp:1:0: sorry, unimplemented: 64-bit mode not compiled in cb/closure.cpp:1:0: sorry, unimplemented: 64-bit mode not compiled in cb/taint.cpp:1:0: sorry, unimplemented: 64-bit mode not compiled in make: *** [.objs/transactions.o] Error 1 make: *** Waiting for unfinished jobs.... make: *** [.objs/opcodes.o] Error 1 make: *** [.objs/simpleStats.o] Error 1 make: *** [.objs/taint.o] Error 1 make: *** [.objs/allBalances.o] Error 1 make: *** [.objs/callback.o] Error 1 make: *** [.objs/closure.o] Error 1 make: *** [.objs/parser.o] Error 1
|
|
|
|
pancake
Newbie
Offline
Activity: 24
Merit: 0
|
|
July 10, 2012, 10:11:16 AM |
|
can't compile on linux-x86-32:
The fix is to remove the -m64 flag from the Makefile. Should I do a pull request?
|
|
|
|
runlinux
|
|
July 10, 2012, 10:52:38 AM |
|
I really need to play with this. My tool pings blockexplorer for its data... lol
|
|
|
|
organofcorti
Donator
Legendary
Offline
Activity: 2058
Merit: 1007
Poor impulse control.
|
|
July 16, 2012, 11:57:37 PM |
|
Anyone managed to get this working on BSD or whatever it is that macs use?
|
|
|
|
gweedo
Legendary
Offline
Activity: 1498
Merit: 1000
|
|
July 17, 2012, 12:11:35 AM |
|
Anyone managed to get this working on BSD or whatever it is that macs use?
if your on lion you need to use Xcode and inside of xcode install the command line tools to get it working and also use homebrew to install dependencies macports doesn't work as well for me at least.
|
|
|
|
organofcorti
Donator
Legendary
Offline
Activity: 2058
Merit: 1007
Poor impulse control.
|
|
July 17, 2012, 12:17:37 AM |
|
Anyone managed to get this working on BSD or whatever it is that macs use?
if your on lion you need to use Xcode and inside of xcode install the command line tools to get it working and also use homebrew to install dependencies macports doesn't work as well for me at least. Great! Thanks for that. I'm on snow leopard and have installed compiling tools, so I'll give it a go.
|
|
|
|
gweedo
Legendary
Offline
Activity: 1498
Merit: 1000
|
|
July 17, 2012, 12:18:30 AM |
|
Anyone managed to get this working on BSD or whatever it is that macs use?
if your on lion you need to use Xcode and inside of xcode install the command line tools to get it working and also use homebrew to install dependencies macports doesn't work as well for me at least. Great! Thanks for that. I'm on snow leopard and have installed compiling tools, so I'll give it a go. actually I forgot you need to update your gcc to gcc 4.5 so do... % brew tap homebrew/versions % brew install gcc45
|
|
|
|
|
Jouke
|
|
July 18, 2012, 07:18:16 PM |
|
From the README: sudo apt-get install libssl-dev build-essential g++-4.4 libboost-all-dev libsparsehash-dev git-core perl
Did you do that ? yes, updated better pastebin btwhttp://pastebin.com/tQUq28Zk
|
Koop en verkoop snel en veilig bitcoins via iDeal op Bitonic.nl
|
|
|
|