Are Top 20 Witnesses Voting Each Other? Introducing Witness-voting Factor

in #witness-category4 years ago (edited)

Let's introduce a concept i.e. witness-voting factor that represent the average witness voting each other in the TOP 20. The maximum value is 20, and the minimal is 0.

If the witness-voting factor is 20, it means that all top 20 witnesses are voting each other. This is not healthy as the gap (of votes) between TOP 20 and the rest will be always increasing. Also, since witnesses are voting each other, it is kinda controlled by a group of people who share the same interests - this is centralisation admit it or not.

SteemJs code to compute the witness-voting factor

The idea is to retrieve the list of the votes of the TOP 20, and group them, count the frequency and sort them. Compute the average. The witness-voting factor for Top 20 on STEEM blockchain is 4.5, compared to 12.65 on HIVE.

Run the following in SteemJs Editor

function getTotalWitnesses() {
    return new Promise((resolve, reject) => {
      steem.api.getWitnessCount(function(err, result) {
          if (!err) {
              resolve(result);
          } else {
              reject(err);
          }
      });
    });
}

function getAllWitnessAccounts(total) {
    return new Promise((resolve, reject) => {
          steem.api.getWitnesses([...Array(total).keys()], function(err, result) {
            if (!err) {
                resolve(result);
            } else {
                reject(err);
           }
        });
    });
}   

function getAccounts(accounts) {
    return new Promise((resolve, reject) => {
          steem.api.getAccounts(accounts, function(err, result) {
            if (!err) {
                resolve(result);
            } else {
                reject(err);
           }
        });
    });
}   


(async function () {
    const totalWitnesses = await getTotalWitnesses();
    let data = await getAllWitnessAccounts(totalWitnesses);
    data = data.filter(x => {
        // reduce the noise
        return (x.votes > 0) && (x.running_version === "0.23.1");
    });
    // sort by votes
    data.sort((a, b) => {
        return b.votes - a.votes;
    });
    // only count TOP 20 witnesses
    data = data.slice(0, 20);
    let top = [];
    data.map((x) => {
        top.push(x.owner);
    });
    const accountData = await getAccounts(top);
    let votes = {};
    data.map((x) => {
        const account = accountData.filter(v => {
            return v.name === x.owner
        });
        // count the vote frequency for each witness
        for (let w of account[0].witness_votes) {
            if (typeof votes[w] === "undefined") {
                votes[w] = 1;
            } else {
                votes[w] ++;
            }
        }
    });    
    
    var items = Object.keys(votes).map(function(key) {
      return [key, votes[key]];
    });
    
    items.sort(function(first, second) {
      return second[1] - first[1];
    });
    
    let x = 0, cnt = 0;
    for (let w of items) {
        // TOP 20 witnesses only
        if (top.includes(w[0])) {
            log(w[0] + ", " + w[1]);
            x += w[1];
            cnt ++;
        }
    }
    log(x/cnt);
})();

Here is the detail list:

future.witness, 7
justyy, 7
steem-agora, 7
steemchiller, 7
dev.supporters, 6
dlike, 6
maiyude, 6
steem-supporter, 6
symbionts, 6
steem-dragon, 4
scissor.sisters, 4
cryptoking777, 3
hivei0, 3
hoasen, 3
juddsmith079, 3
matreshka, 3
protoss20, 3
hinomaru-jp, 2
inwi, 2
rnt1, 2

Every little helps! I hope this helps!

Steem On!~
Reposted to Blog


If you like my work, please consider voting for me, thanks!
https://steemit.com/~witnesses type in justyy and click VOTE



Alternatively, you could proxy to me if you are too lazy to vote!

Also: you can vote me at the tool I made: https://steemyy.com/witness-voting/?witness=justyy

Visit me at: https://steemyy.com

Sort:  
Loading...

What about strenght of the votes and the witness-voting factor.
Like share in voting power of the voters in top20.
Simple sum votes in top20 then chart with share of the voter.
Or same method you did but instead of witnesses voting witnesses, just top voters voting in top20.

One voter have 50%+ of votes ?

And does it really matter?

Your thing is funny joke with witnesses in top20 who don't even vote :D.
Did you checked data before publishing such thing ? how can it be reliable measure when half of the accounts you checked don't even vote. Maybe they don't know yet how to vote on witnesses ? And it's most important factor in your statistic...

Respect for doing anything with code. But you need to learn bit more about data to create anything reliable...

Thanks for your comment.

  1. This model is trying to answer the question in the title, so voting weight is not taken into account as it is irrelevant. But since you are interested, I'll do that in the next few days (if i have time).
  2. The witnesses in TOP 20 are either voting at least one (voting for himself counts) or setting a proxy, so they do know how to vote.
  3. The only thing I would revise for this model is to use Median instead of Average.

dev.supporters ( don't vote )
hoasen ( don't vote )
protoss20 ( don't vote )
juddsmith079 ( don't vote )
matreshka ( don't vote )
inwi ( don't vote )
hivei0 ( don't vote )
rnt1 ( don't vote )
hinomaru-jp ( don't vote )
cryptoking777 ( don't vote )

scissor.sisters ( votes only himself )
steem-dragon ( votes only himself )

sad

it doesn't make sense to answer anything with data like this... or compare it...

but thanks to you i just discovered it :o

or maybe different questions about who they really are and what they really know about this blockchain...

Would be interesting to see how top20 would change if all the top20 witnesses remove votes, on hive side. On steem i know that nothing will change...