BitShares Forum
Main => General Discussion => Topic started by: xeroc on September 24, 2014, 07:00:05 pm
-
Just wrote a quick and dirty python script to take a look at the genesis stakes
python script from here: https://github.com/xeroc/pytshares/blob/master/genesisStats.py
--------------------------------------------------------------------------------
top 10 addresses collective percentage
--------------------------------------------------------------------------------
top 1 addresses collectively own 58,783,757 BTSX ( 2.94%)
top 2 addresses collectively own 116,215,883 BTSX ( 5.81%)
top 3 addresses collectively own 157,771,275 BTSX ( 7.89%)
top 4 addresses collectively own 190,946,909 BTSX ( 9.55%)
top 5 addresses collectively own 223,154,898 BTSX ( 11.16%)
top 6 addresses collectively own 255,362,887 BTSX ( 12.77%)
top 7 addresses collectively own 282,127,577 BTSX ( 14.11%)
top 8 addresses collectively own 307,893,968 BTSX ( 15.39%)
top 9 addresses collectively own 324,971,245 BTSX ( 16.25%)
--------------------------------------------------------------------------------
top 10 addresses individual percentage
--------------------------------------------------------------------------------
top 1 addresse individually owns 58,783,757 BTSX ( 2.94%)
top 2 addresse individually owns 57,432,127 BTSX ( 2.87%)
top 3 addresse individually owns 41,555,392 BTSX ( 2.08%)
top 4 addresse individually owns 33,175,634 BTSX ( 1.66%)
top 5 addresse individually owns 32,207,989 BTSX ( 1.61%)
top 6 addresse individually owns 32,207,989 BTSX ( 1.61%)
top 7 addresse individually owns 26,764,689 BTSX ( 1.34%)
top 8 addresse individually owns 25,766,391 BTSX ( 1.29%)
top 9 addresse individually owns 17,077,277 BTSX ( 0.85%)
--------------------------------------------------------------------------------
address/amount distribution
--------------------------------------------------------------------------------
address with > 10 BTSX : 40,977
address with > 30 BTSX : 36,574
address with > 50 BTSX : 34,449
address with > 70 BTSX : 31,760
address with > 90 BTSX : 30,756
address with > 100 BTSX : 30,422
address with > 300 BTSX : 26,520
address with > 500 BTSX : 24,880
address with > 700 BTSX : 21,150
address with > 900 BTSX : 20,060
address with > 1,000 BTSX : 19,694
address with > 3,000 BTSX : 14,756
address with > 5,000 BTSX : 12,634
address with > 7,000 BTSX : 11,052
address with > 9,000 BTSX : 10,091
address with > 10,000 BTSX : 9,669
address with > 30,000 BTSX : 5,062
address with > 50,000 BTSX : 3,720
address with > 70,000 BTSX : 2,938
address with > 90,000 BTSX : 2,516
address with > 100,000 BTSX : 2,365
address with > 300,000 BTSX : 1,021
address with > 500,000 BTSX : 660
address with > 700,000 BTSX : 481
address with > 900,000 BTSX : 383
address with > 1,000,000 BTSX : 344
address with > 3,000,000 BTSX : 66
address with > 5,000,000 BTSX : 35
address with > 7,000,000 BTSX : 25
address with > 9,000,000 BTSX : 20
address with > 10,000,000 BTSX : 17
address with > 30,000,000 BTSX : 6
address with > 50,000,000 BTSX : 2
(http://i.imgur.com/9cOYsVv.png)
(http://i.imgur.com/XkpbLj6.png)
(http://i.imgur.com/aie0wZn.png)
-
So there are about 200 addresses with a million shares. Sounds about right.
-
Cool graphs.
Next task BTSX/Entity or person... :)
-
+5%
-
Cool. Now I'd like to see how the BTSX/address distribution changes over time since genesis. And then I would like to see the time evolution of BTSX/entity where entity is defined as the collection of addresses whose balances were combined and spent together in a single transaction sometime in the future (or just the single address by itself if it has not yet been spent). It would also be great to see a breakdown of the percentage of share supply voting for each unique delegate slate.
-
Next task BTSX/Entity or person... :)
It is both great (from a privacy perspective) and also a little sad (from a data analysis perspective) that we cannot figure out BTSX/person distributions.
Then again, we could set up a voting system with traceable ring signatures to allow anonymous polling of BTSX stake. The system could have 20 million votes. You provide proof of ownership of an unspent transaction balance (unspent up to some recent block number we all agree on). That proof of ownership gives you N = floor(balance/(100 BTSX)) votes. You are allowed to submit a ballot for each vote (using traceable ring signatures to vote anonymously but also prevent double voting) in which you sign the ballot with a private key. By using the same private key for all of the ballots allocated from each vote coming from all of a single individual's unspent balances, people can have a very good lower bound estimate on how much BTSX each person owns without identifying the actual owners even when they later spend their balances. Of course, people could simply sign each ballot with a unique private key to make it seem like there is less wealth concentration than there really is, so the accuracy of this method depends entirely on how honest people want to be (however individual dishonest actors cannot make it appear that there is higher wealth concentration than there really is unless they collude together). Unfortunately, besides being so much work to implement, a lot of people would probably just prefer not to take part in the polling, leading to very incomplete and unhelpful results. Maybe there could be some incentive structure where a reward, determined from a superlinear function of each person's final balance, was handed out to motivate people to report all of their combined wealth. The reward would also need to be designed in a way (likely through traceable ring signatures) to be claimed without linking the claimer back to the balances for the sake of privacy.
-
So there are about 200 addresses with a million shares. Sounds about right.
That's way off.
1379 addresses > 1 million BTSX
128 addresses > 10 million BTSX
8 addresses > 100 million BTSX
3 addresses > 200 million BTSX
top address > 293 million BTSx
-
So there are about 200 addresses with a million shares. Sounds about right.
That's way off.
1379 addresses > 1 million BTSX
128 addresses > 10 million BTSX
8 addresses > 100 million BTSX
3 addresses > 200 million BTSX
top address > 293 million BTSx
I should add some code to generate these numbers .. makes it easier to understand .. thanks for the hint!
-
I forget a correction term .. the numbers in the genesisblock are off by factor 200:
python3 script from here: https://github.com/xeroc/pytshares/blob/master/genesisStats.py
-
I forget a correction term .. the numbers in the genesisblock are off by factor 200:
Correction term: 1/ 200.00
address with > 10 : 58,427
address with > 30 : 56,327
address with > 50 : 55,115
address with > 70 : 54,310
address with > 90 : 53,702
address with > 100 : 53,446
address with > 300 : 50,695
address with > 500 : 49,268
address with > 700 : 47,946
address with > 900 : 46,625
address with > 1,000 : 45,964
address with > 3,000 : 39,318
address with > 5,000 : 36,934
address with > 7,000 : 35,404
address with > 9,000 : 34,092
address with > 10,000 : 33,523
address with > 30,000 : 28,427
address with > 50,000 : 26,300
address with > 70,000 : 24,893
address with > 90,000 : 23,571
address with > 100,000 : 22,911
address with > 300,000 : 16,363
address with > 500,000 : 13,736
address with > 700,000 : 12,189
address with > 900,000 : 11,060
address with > 1,000,000 : 10,613
address with > 3,000,000 : 6,174
address with > 5,000,000 : 4,038
address with > 7,000,000 : 2,871
address with > 9,000,000 : 2,129
address with > 10,000,000 : 1,851
address with > 30,000,000 : 88
address with > 50,000,000 : 0
does this look about right?
Looks much better. Perhaps update the graphs?
-
That doesn't seem right. 88 * 30,000,000 > 2bn.
Maybe you need to divide by precision?
-
xeroc, give this a try.
$ cat ./btsx_stake.py
#!/usr/bin/env python
import json
with open('genesis_btsx.json', 'rt') as f:
b = [ i[1]/500000.0 for i in json.load(f)['balances']]
def gt(b, t):
print "%10d addresses > %10d BTSX"%(len([i for i in b if i>t]),t)
print "total supply: %s, number of addresses: %s"%(sum(b), len(b))
for i in range(10):
gt(b, 100000*2**i)
$ ./btsx_stake.py
total supply: 1999999999.94, number of addresses: 57973
2365 addresses > 100000 BTSX
1379 addresses > 200000 BTSX
792 addresses > 400000 BTSX
431 addresses > 800000 BTSX
182 addresses > 1600000 BTSX
60 addresses > 3200000 BTSX
26 addresses > 6400000 BTSX
15 addresses > 12800000 BTSX
8 addresses > 25600000 BTSX
2 addresses > 51200000 BTSX
-
xeroc, give this a try.
$ cat ./btsx_stake.py
#!/usr/bin/env python
import json
with open('genesis_btsx.json', 'rt') as f:
b = [ i[1]/500000.0 for i in json.load(f)['balances']]
def gt(b, t):
print "%10d addresses > %10d BTSX"%(len([i for i in b if i>t]),t)
print "total supply: %s, number of addresses: %s"%(sum(b), len(b))
for i in range(10):
gt(b, 100000*2**i)
$ ./btsx_stake.py
total supply: 1999999999.94, number of addresses: 57973
2365 addresses > 100000 BTSX
1379 addresses > 200000 BTSX
792 addresses > 400000 BTSX
431 addresses > 800000 BTSX
182 addresses > 1600000 BTSX
60 addresses > 3200000 BTSX
26 addresses > 6400000 BTSX
15 addresses > 12800000 BTSX
8 addresses > 25600000 BTSX
2 addresses > 51200000 BTSX
This is much more in line with my intuition, for what it's worth.
-
Why devide by 5e5? what is the sum of all stakes then?
-
Why devide by 5e5? what is the sum of all stakes then?
The supply in the genesis_btsx.json is BIPS (1billion with a precision of 10e6) dividing by 5x10e5 adjusts the BIPS to 2 billion BTSX supply.
$ ./btsx_stake.py
================================================================================
total supply: 1999999999.94, number of addresses: 57973
================================================================================
2365 addresses > 100000 BTSX
1379 addresses > 200000 BTSX
792 addresses > 400000 BTSX
431 addresses > 800000 BTSX
182 addresses > 1600000 BTSX
60 addresses > 3200000 BTSX
26 addresses > 6400000 BTSX
15 addresses > 12800000 BTSX
8 addresses > 25600000 BTSX
2 addresses > 51200000 BTSX
57973 addresses > 0 BTSX
344 addresses > 1000000 BTSX
128 addresses > 2000000 BTSX
66 addresses > 3000000 BTSX
43 addresses > 4000000 BTSX
35 addresses > 5000000 BTSX
27 addresses > 6000000 BTSX
25 addresses > 7000000 BTSX
21 addresses > 8000000 BTSX
20 addresses > 9000000 BTSX
17 addresses > 10000000 BTSX
17 addresses > 11000000 BTSX
15 addresses > 12000000 BTSX
14 addresses > 13000000 BTSX
14 addresses > 14000000 BTSX
14 addresses > 15000000 BTSX
11 addresses > 16000000 BTSX
9 addresses > 17000000 BTSX
8 addresses > 18000000 BTSX
8 addresses > 19000000 BTSX
8 addresses > 20000000 BTSX
top 1 addresses collectively own ( 58783756) 2.94% of shares
top 2 addresses collectively own ( 116215883) 5.81% of shares
top 3 addresses collectively own ( 157771274) 7.89% of shares
top 4 addresses collectively own ( 190946909) 9.55% of shares
top 5 addresses collectively own ( 223154898) 11.16% of shares
top 6 addresses collectively own ( 255362887) 12.77% of shares
top 7 addresses collectively own ( 282127576) 14.11% of shares
top 8 addresses collectively own ( 307893968) 15.39% of shares
top 9 addresses collectively own ( 324971244) 16.25% of shares
top 10 addresses collectively own ( 341644607) 17.08% of shares
top 11 addresses collectively own ( 358311274) 17.92% of shares
top 12 addresses collectively own ( 374067717) 18.70% of shares
top 13 addresses collectively own ( 389663029) 19.48% of shares
top 14 addresses collectively own ( 404917610) 20.25% of shares
top 15 addresses collectively own ( 417725418) 20.89% of shares
top 16 addresses collectively own ( 429209511) 21.46% of shares
top 17 addresses collectively own ( 440587350) 22.03% of shares
top 18 addresses collectively own ( 450355417) 22.52% of shares
top 19 addresses collectively own ( 459722773) 22.99% of shares
top 20 addresses collectively own ( 468729134) 23.44% of shares
top 21 addresses collectively own ( 476972291) 23.85% of shares
top 22 addresses collectively own ( 484644642) 24.23% of shares
top 23 addresses collectively own ( 492006313) 24.60% of shares
top 24 addresses collectively own ( 499160491) 24.96% of shares
top 25 addresses collectively own ( 506245604) 25.31% of shares
top 26 addresses collectively own ( 512746709) 25.64% of shares
top 27 addresses collectively own ( 519130333) 25.96% of shares
top 28 addresses collectively own ( 524931889) 26.25% of shares
top 29 addresses collectively own ( 530649218) 26.53% of shares
top 30 addresses collectively own ( 536298967) 26.81% of shares
top 31 addresses collectively own ( 541828437) 27.09% of shares
top 32 addresses collectively own ( 547242762) 27.36% of shares
top 33 addresses collectively own ( 552606593) 27.63% of shares
top 34 addresses collectively own ( 557763399) 27.89% of shares
top 35 addresses collectively own ( 562915683) 28.15% of shares
top 36 addresses collectively own ( 567822092) 28.39% of shares
top 37 addresses collectively own ( 572700864) 28.64% of shares
top 38 addresses collectively own ( 577461725) 28.87% of shares
top 39 addresses collectively own ( 582104631) 29.11% of shares
top 40 addresses collectively own ( 586613750) 29.33% of shares
top 41 addresses collectively own ( 591030033) 29.55% of shares
top 42 addresses collectively own ( 595234377) 29.76% of shares
top 43 addresses collectively own ( 599361284) 29.97% of shares
top 44 addresses collectively own ( 603290659) 30.16% of shares
top 45 addresses collectively own ( 607217915) 30.36% of shares
top 46 addresses collectively own ( 611082793) 30.55% of shares
top 47 addresses collectively own ( 614867655) 30.74% of shares
top 48 addresses collectively own ( 618532892) 30.93% of shares
top 49 addresses collectively own ( 622197190) 31.11% of shares
top 50 addresses collectively own ( 625860395) 31.29% of shares
top 51 addresses collectively own ( 629403274) 31.47% of shares
top 52 addresses collectively own ( 632881737) 31.64% of shares
top 53 addresses collectively own ( 636360120) 31.82% of shares
top 54 addresses collectively own ( 639815798) 31.99% of shares
top 55 addresses collectively own ( 643182415) 32.16% of shares
top 56 addresses collectively own ( 646532040) 32.33% of shares
top 57 addresses collectively own ( 649850763) 32.49% of shares
top 58 addresses collectively own ( 653111821) 32.66% of shares
top 59 addresses collectively own ( 656334022) 32.82% of shares
top 60 addresses collectively own ( 659551600) 32.98% of shares
top 61 addresses collectively own ( 662749651) 33.14% of shares
top 62 addresses collectively own ( 665867502) 33.29% of shares
top 63 addresses collectively own ( 668906271) 33.45% of shares
top 64 addresses collectively own ( 671928432) 33.60% of shares
top 65 addresses collectively own ( 674940312) 33.75% of shares
top 66 addresses collectively own ( 677941692) 33.90% of shares
top 67 addresses collectively own ( 680921575) 34.05% of shares
top 68 addresses collectively own ( 683886009) 34.19% of shares
top 69 addresses collectively own ( 686783438) 34.34% of shares
top 70 addresses collectively own ( 689675063) 34.48% of shares
top 71 addresses collectively own ( 692553726) 34.63% of shares
top 72 addresses collectively own ( 695427368) 34.77% of shares
top 73 addresses collectively own ( 698284732) 34.91% of shares
top 74 addresses collectively own ( 701141573) 35.06% of shares
top 75 addresses collectively own ( 703995576) 35.20% of shares
top 76 addresses collectively own ( 706797377) 35.34% of shares
top 77 addresses collectively own ( 709566749) 35.48% of shares
top 78 addresses collectively own ( 712334623) 35.62% of shares
top 79 addresses collectively own ( 715077622) 35.75% of shares
top 80 addresses collectively own ( 717815997) 35.89% of shares
top 81 addresses collectively own ( 720527826) 36.03% of shares
top 82 addresses collectively own ( 723216838) 36.16% of shares
top 83 addresses collectively own ( 725902455) 36.30% of shares
top 84 addresses collectively own ( 728539203) 36.43% of shares
top 85 addresses collectively own ( 731174924) 36.56% of shares
top 86 addresses collectively own ( 733799647) 36.69% of shares
top 87 addresses collectively own ( 736407156) 36.82% of shares
top 88 addresses collectively own ( 738983279) 36.95% of shares
top 89 addresses collectively own ( 741545729) 37.08% of shares
top 90 addresses collectively own ( 744103394) 37.21% of shares
top 91 addresses collectively own ( 746628798) 37.33% of shares
top 92 addresses collectively own ( 749150497) 37.46% of shares
top 93 addresses collectively own ( 751662720) 37.58% of shares
top 94 addresses collectively own ( 754114643) 37.71% of shares
top 95 addresses collectively own ( 756530035) 37.83% of shares
top 96 addresses collectively own ( 758923852) 37.95% of shares
top 97 addresses collectively own ( 761310156) 38.07% of shares
top 98 addresses collectively own ( 763693852) 38.18% of shares
top 99 addresses collectively own ( 766053668) 38.30% of shares
top 100 addresses collectively own ( 768380351) 38.42% of shares
--------------------------------------------------------------------------------
top 150 addresses individual percentage
--------------------------------------------------------------------------------
1 58783756 (2.94%)
2 57432126 (2.87%)
3 41555391 (2.08%)
4 33175634 (1.66%)
5 32207989 (1.61%)
6 32207989 (1.61%)
7 26764689 (1.34%)
8 25766391 (1.29%)
9 17077276 (0.85%)
10 16673362 (0.83%)
11 16666666 (0.83%)
12 15756443 (0.79%)
13 15595312 (0.78%)
14 15254581 (0.76%)
15 12807807 (0.64%)
16 11484093 (0.57%)
17 11377839 (0.57%)
18 9768066 (0.49%)
19 9367356 (0.47%)
20 9006360 (0.45%)
21 8243157 (0.41%)
22 7672351 (0.38%)
23 7361670 (0.37%)
24 7154177 (0.36%)
25 7085113 (0.35%)
26 6501105 (0.33%)
27 6383623 (0.32%)
28 5801556 (0.29%)
29 5717329 (0.29%)
30 5649748 (0.28%)
31 5529469 (0.28%)
32 5414325 (0.27%)
33 5363831 (0.27%)
34 5156805 (0.26%)
35 5152283 (0.26%)
36 4906409 (0.25%)
37 4878772 (0.24%)
38 4760861 (0.24%)
39 4642905 (0.23%)
40 4509118 (0.23%)
41 4416283 (0.22%)
42 4204344 (0.21%)
43 4126906 (0.21%)
44 3929374 (0.20%)
45 3927256 (0.20%)
46 3864878 (0.19%)
47 3784861 (0.19%)
48 3665237 (0.18%)
49 3664298 (0.18%)
50 3663205 (0.18%)
51 3542878 (0.18%)
52 3478462 (0.17%)
53 3478383 (0.17%)
54 3455678 (0.17%)
55 3366616 (0.17%)
56 3349624 (0.17%)
57 3318722 (0.17%)
58 3261058 (0.16%)
59 3222200 (0.16%)
60 3217578 (0.16%)
61 3198050 (0.16%)
62 3117851 (0.16%)
63 3038769 (0.15%)
64 3022160 (0.15%)
65 3011880 (0.15%)
66 3001380 (0.15%)
67 2979883 (0.15%)
68 2964433 (0.15%)
69 2897428 (0.14%)
70 2891625 (0.14%)
71 2878662 (0.14%)
72 2873641 (0.14%)
73 2857364 (0.14%)
74 2856840 (0.14%)
75 2854003 (0.14%)
76 2801800 (0.14%)
77 2769371 (0.14%)
78 2767873 (0.14%)
79 2742998 (0.14%)
80 2738375 (0.14%)
81 2711829 (0.14%)
82 2689011 (0.13%)
83 2685617 (0.13%)
84 2636748 (0.13%)
85 2635720 (0.13%)
86 2624722 (0.13%)
87 2607508 (0.13%)
88 2576123 (0.13%)
89 2562449 (0.13%)
90 2557664 (0.13%)
91 2525404 (0.13%)
92 2521698 (0.13%)
93 2512223 (0.13%)
94 2451922 (0.12%)
95 2415392 (0.12%)
96 2393816 (0.12%)
97 2386304 (0.12%)
98 2383695 (0.12%)
99 2359816 (0.12%)
100 2326682 (0.12%)
101 2296374 (0.11%)
102 2290479 (0.11%)
103 2283298 (0.11%)
104 2273360 (0.11%)
105 2247281 (0.11%)
106 2246884 (0.11%)
107 2220930 (0.11%)
108 2218040 (0.11%)
109 2214284 (0.11%)
110 2171617 (0.11%)
111 2159797 (0.11%)
112 2156815 (0.11%)
113 2154175 (0.11%)
114 2133075 (0.11%)
115 2127135 (0.11%)
116 2121827 (0.11%)
117 2102519 (0.11%)
118 2097921 (0.10%)
119 2094096 (0.10%)
120 2087144 (0.10%)
121 2061556 (0.10%)
122 2055383 (0.10%)
123 2053970 (0.10%)
124 2047357 (0.10%)
125 2036753 (0.10%)
126 2027721 (0.10%)
127 2024862 (0.10%)
128 2006044 (0.10%)
129 1994740 (0.10%)
130 1986672 (0.10%)
131 1980159 (0.10%)
132 1964291 (0.10%)
133 1956322 (0.10%)
134 1936345 (0.10%)
135 1932751 (0.10%)
136 1932485 (0.10%)
137 1930349 (0.10%)
138 1922749 (0.10%)
139 1916867 (0.10%)
140 1915761 (0.10%)
141 1909669 (0.10%)
142 1900547 (0.10%)
143 1892317 (0.09%)
144 1890150 (0.09%)
145 1881665 (0.09%)
146 1866750 (0.09%)
147 1861346 (0.09%)
148 1843122 (0.09%)
149 1838428 (0.09%)
150 1834548 (0.09%)
-
I see ...
Could you publish the code you wrote for the above please?
Excellent work
-
I see ...
Could you publish the code you wrote for the above please?
Excellent work
#!/usr/bin/env python
import json
with open('genesis_btsx.json', 'rt') as f:
b = [ i[1]/500000.0 for i in json.load(f)['balances']]
b.sort()
def gt(b, t):
print "%10d addresses > %10d BTSX"%(len([i for i in b if i>t]),t)
def top(b, n):
tn=sum(b[-n:])
tb=sum(b)
print "top %6d addresses collectively own (%10d) %3.2f%% of shares"%(n,tn,tn*100.0/tb)
def itop(b,n):
print "-"*80
print "top %d addresses individual percentage"%n
print "-"*80
tb = b[-n:]
tb.sort(reverse=True)
for e,i in enumerate(tb):
print "%3d %10d (%3.2f%%)"%(e+1,i,i/20000000)
def main():
print "="*80
print "total supply: %s, number of addresses: %s"%(sum(b), len(b))
print "="*80
for i in range(10):
gt(b, 100000*2**i)
for i in range(21):
gt(b, 1000000*i)
for i in range(1,101):
top(b,i)
itop(b,150)
if __name__ == '__main__':
main()
-
Thanks ..
-
I found my mistake .. a stupid btw :) .. I search for the thresholds in the cumulative sum .. not in the individual address balances :) .. just stupid :)
@bitder: it seems you use a different BTSX genesis json file?! Maybe you use the one from the bitshares_toolkit?!
wget https://raw.githubusercontent.com/dacsunlimited/bitsharesx/master/libraries/blockchain/genesis.json
-
good work guys, and the distribution very well spread for a starting point.
-
I found my mistake .. a stupid btw :) .. I search for the thresholds in the cumulative sum .. not in the individual address balances :) .. just stupid :)
@bitder: it seems you use a different BTSX genesis json file?! Maybe you use the one from the bitshares_toolkit?!
I think you should be using the following genesis (Feb 28 snapshot)
https://raw.githubusercontent.com/dacsunlimited/bitsharesx/master/libraries/blockchain/genesis_btsx.json
The other one is from the post AGS snapshot.
-
ok .. I see now .. the other one states:
" genesis.json bump testnet version " ..
thanks for pointing out