• Forum has been upgraded, all links, images, etc are as they were. Please see Official Announcements for more information

Which masternodes voted and what exactly voted on various proposals.

Status
Not open for further replies.
Among 4673 IPs I discovered 908 unique voting patterns. There is one operator who has 70 masternodes, and 594 operators who own just one masternode! Note that those who appear to have only 1 masternode may also be the case of an operator who forgot to vote a singe proposal in some of his masternodes (in that case a unique voting pattern is also created). There are also about 2500 IPs who didnt vote at all.
Here you are the statistics:
70 masternodes --> 1 operator
66 masternodes --> 1 operator
53 masternodes --> 1 operator
52 masternodes --> 1 operator
50 masternodes --> 1 operator
43 masternodes --> 2 operators
38 masternodes --> 1 operator
36 masternodes --> 2 operators
30 masternodes --> 2 operators
27 masternodes --> 1 operator
24 masternodes --> 1 operator
23 masternodes --> 2 operators
22 masternodes --> 2 operators
20 masternodes --> 1 operator
19 masternodes --> 3 operators
17 masternodes --> 3 operators
16 masternodes --> 2 operators
15 masternodes --> 1 operator
14 masternodes --> 1 operator
13 masternodes --> 3 operators
12 masternodes --> 5 operators
11 masternodes --> 2 operators
10 masternodes --> 6 operators
09 masternodes --> 7 operators
08 masternodes --> 9 operators
07 masternodes --> 13 operators
06 masternodes --> 15 operators
05 masternodes --> 16 operators
04 masternodes --> 27 operators
03 masternodes --> 53 operators
02 masternodes --> 128 operators
01 masternodes --> 594 operators

I execute the below code
Code:
curl -s https://demodun.github.io/mnowatch/the_results_dashd_31-12-2017.html| cut -f22 -d"<"|cut -f2 -d">"|grep -v [a-z]|grep -v [A-Z]| grep ^[0-9]|grep -v "-"|sort|uniq -c|sed -e s/'^   '/000/g|sed -s s/'000   '/000000/g|sed -e s/'000  '/00000/g|sed -s s/'000 '/0000/g|sort -r|cut -f1 -d" "|uniq -c

And here you are the new statistics. According to the voting pattern, there is one operator who has 119 masternodes, and 645 operators who own just one masternode.

operators- masternodes the operators own
1 0002211 (<--this operator owns 2211 masternodes!! It is the didnt_vote hash)
1 0000119
1 0000070
1 0000060
1 0000052
1 0000050
2 0000035
1 0000033
2 0000032
1 0000027
1 0000024
2 0000022
1 0000021
1 0000020
1 0000019
2 0000018
3 0000017
1 0000015
3 0000014
1 0000013
2 0000012
6 0000011
4 0000010
7 0000009
9 0000008
10 0000007
16 0000006
21 0000005
26 0000004
47 0000003
124 0000002
645 0000001

Obviously the votehash is not enough, in order to spot the operators having multiple masternodes. The R&D continues.
(dandelion?)
 
Last edited:
I execute the below code

Obviously the votehash is not enough, in order to spot the operators having multiple masternodes. The R&D continues.
(dandelion?)
Maybe i should use the intersection of set theory.
The intersection in bash can be found with the command comm.

Ex.https://stackoverflow.com/questions/2696055/intersection-of-two-lists-in-bash

I'm trying to write a simple script that will list the contents found in two lists. To simplify, let's use ls as an example. Imagine "one" and "two" are directories.

one=`ls one`
two=`ls two`
intersection $one $two

comm -12 <(ls 1) <(ls 2)

Use the comm command:

ls one | sort > /tmp/one_list
ls two | sort > /tmp/two_list
comm -12 /tmp/one_list /tmp/two_list
"sort" is not really needed but I always include it before using "comm" just in case.
comm is great but indeed need to work with sorted list. And fortunately here we use ls which from ls Bash man page

Sort entries alphabetically if none of -cftuSUX nor --sort.

comm -12 <(ls one) <(ls two)
Alternative with sort

Intersection of two lists:

sort <(ls one) <(ls two) | uniq -d
symmetric difference of two lists:

sort <(ls one) <(ls two) | uniq -u
 
Last edited:
So while I believe my core client is fully synced, it's still not pulling votes correctly into the Sentinel DB yet.

Code:
2018-01-09 23:46:37 CGovernanceManager::UpdateCachesAndClean -- Governance Objects: 221 (Proposals: 220, Triggers: 0, Watchdogs: 1/1, Other: 0; Erased: 20), Votes: 395474

Going to keep looking into this as there may be more to this than meets the eye.
 
Just spent a while looking through sentinel code. It would appear that despite having a table called votes, the only ones that it puts in there are votes that the masternode has voted on.

It might be possible to modify it further to pull in all votes though.
 
UPDATE - It now works and pulls in 179,000 votes+. The problem is that it's not pulling in the vote hash or the masternode IP or anything else especially useful.

Looks like the methods in Sentinel really are designed just to let it do its job.

Going to take some more modifications to get it working and useful. Feel free to contribute in a fork, or if you want, I can add you as a contributor on this repo.
 
UPDATE - It now works and pulls in 179,000 votes+. The problem is that it's not pulling in the vote hash or the masternode IP or anything else especially useful.

Looks like the methods in Sentinel really are designed just to let it do its job.

Going to take some more modifications to get it working and useful. Feel free to contribute in a fork, or if you want, I can add you as a contributor on this repo.

Yes add me. I would like to help.
 
Yes add me. I would like to help.

Just let me know what your Github account name is and I'll make you a collaborator and then I'll point out where I think it needs changes. I'm also wondering if it might just make sense to take Sentinel and condense it down to what we actually need and remove a lot of the stuff we don't, because at the end of the day it really just needs to scan the blockchain and pull out governance objects and their votes and then save that to the SQLite database and it doesn't need half the code it has to do that.
 
Just let me know what your Github account name is and I'll make you a collaborator and then I'll point out where I think it needs changes. I'm also wondering if it might just make sense to take Sentinel and condense it down to what we actually need and remove a lot of the stuff we don't, because at the end of the day it really just needs to scan the blockchain and pull out governance objects and their votes and then save that to the SQLite database and it doesn't need half the code it has to do that.

  1. put into the same directory: the script and the javascript code.
  2. run the script.
 
Just let me know what your Github account name is and I'll make you a collaborator and then I'll point out where I think it needs changes. I'm also wondering if it might just make sense to take Sentinel and condense it down to what we actually need and remove a lot of the stuff we don't, because at the end of the day it really just needs to scan the blockchain and pull out governance objects and their votes and then save that to the SQLite database and it doesn't need half the code it has to do that.

@jeffh, how someone can install your sentinel version in a dash (non masternode) wallet?
Is there a howto file?
 
@demo, I'll go ahead and make that small tweak to my github repo. It's basically just changing which repository you're pulling sentinel from since it's all coming from source.
 
UPDATE - It now works and pulls in 179,000 votes+. The problem is that it's not pulling in the vote hash or the masternode IP or anything else especially useful.


This is maybe because you defined only gobject getcurrentvotes.
Thats not enough. For our statistics to work we also need to know:

As shown in the script that gets reports from dashd:
./dash-cli masternodelist addr
./dash-cli gobject list


Are these data also imported into the database somehow?
Maybe in our version of sentinel we should also define:
def get_masternodelist_addr
def get_gobject_list
 
Last edited:
This is maybe because you defined only gobject getcurrentvotes.
Thats not enough. For our statistics to work we also need to know:

As shown in the script that gets reports from dashd:
./dash-cli masternodelist addr
./dash-cli gobject list


Are these data also imported into the database somehow?
Maybe in our version of sentinel we should also define:
def get_masternodelist_addr
def get_gobject_list

Yeah I'm aware that it doesn't get the rest of that info. It's on my To Do list but I'm pretty bogged down right now, so I'm not sure when I'll have time to come back and work on this some more. If you've got some time to throw at making those tweaks to Sentinel, go ahead and I'll merge those changes in.

What I got working was a bare minimum Sentinel install that doesn't care if you run a full node or a masternode and that saves all vote data that's sitting in the blockchain. The additional features we want are going to require some more work in tweaking the code to do what we want, rather than what the developers originally intended.
 
Wouldn’t it be a good idea to put this data in a database then you could cross reference votes and stuff easier?
 
Wouldn’t it be a good idea to put this data in a database then you could cross reference votes and stuff easier?
Yes of course, the database approach is much better.

But puting the data that my script produces into a database is awkward as long as my script is also awkward. The better approach is to use a patched sentinel database, that could run in a simple (non masternode) empty wallet that runs 24/7. This is what @jeffh is trying to do (and I am trying to help also)

Of course the database approach requires a dashd and/or/xor a LAMP web server to run 24/7. This is not my case, I have neither a dashd nor a lamp that runs 24/7. In my github site I am only allowed to upload static client side html files, thats why the bash script is still usefull for me. But wait, I think I may find a solution with sqlite and php!
 
Last edited:
Yes of course, the database approach is much better.

But puting the data that my script produces into a database is awkward as long as my script is also awkward. The better approach is to use a patched sentinel database, that could run in a simple (non masternode) empty wallet that runs 24/7. This is what @jeffh is trying to do (and I am trying to help also)

Of course the database approach requires a dashd and/or/xor a LAMP web server to run 24/7. This is not my case, I have neither a dashd nor a lamp that runs 24/7. In my github site I am only allowed to upload static client side html files, thats why the bash script is still usefull for me. But wait, I think I may find a solution with sqlite and php!

I updated the Github page, haven't made any changes to the code yet but I did adjust the Readme to better clarify that this is what I'm calling, the "Dash Sentinel Data Engine".

Looks like it's going to take some significant changes to the code to get it to do what we want. I'm probably going to end up tossing a lot of it and re-writing it because there are so many methods that just aren't necessary and all we really need are the parts that write to the database and that talk to the dashd instance.
 
I updated the Github page, haven't made any changes to the code yet but I did adjust the Readme to better clarify that this is what I'm calling, the "Dash Sentinel Data Engine".

Looks like it's going to take some significant changes to the code to get it to do what we want. I'm probably going to end up tossing a lot of it and re-writing it because there are so many methods that just aren't necessary and all we really need are the parts that write to the database and that talk to the dashd instance.
Why dont you upgrade to 12.2
Some of the problems you encounter may appear because of the old 12.1 version you refer to.
 
Status
Not open for further replies.
Back
Top