A Case for Stake-weighted Voting?

in #steem5 years ago (edited)

Or at least more work required on the auditing side of things for Account-based voting....



Today I planned to have a look at @theycallmedan's current Poll in which one lucky community will receive 10,000 delegated Steem Power for a whole year.

https://dpoll.xyz/detail/@theycallmedan/which-steem-project-should-i-delegate-10k-steempower-to-for-1-year/

I was thinking of pulling some alternative metrics, such as:

  • What if the votes were stake-weighted (totaling the Owned Steem Power of the voters)
  • Subtracting votes from accounts without a post
  • Subtracting votes from accounts < 40 rep
  • And, perhaps most controversially, subtracting votes from accounts that were created after the start of the Poll

Of course, none of these findings were to in any way alter the final vote counts - it was more for personal interest than anything else.

And so I made my SQL query and gave it a whirl. Damn JSON, he can be a right pain:


    select
    IIF(isjson(json_metadata) = 1, IIF(CHARINDEX('/', json_value(json_metadata, '$.votes[0]')) > 0, SUBSTRING(json_value(json_metadata, '$.votes[0]'), 1, CHARINDEX('/', json_value(json_metadata, '$.votes[0]'))-1),json_value(json_metadata, '$.votes[0]')), null) as [Voted],
    count(*)
    from comments where parent_permlink = 'which-steem-project-should-i-delegate-10k-steempower-to-for-1-year' and depth = 1
    and IIF(isjson(json_metadata) = 1, IIF(CHARINDEX('/', json_value(json_metadata, '$.app')) > 0, SUBSTRING(json_value(json_metadata, '$.app'), 1, CHARINDEX('/', json_value(json_metadata, '$.app'))-1),json_value(json_metadata, '$.app')), null) = 'dpoll'
    group by
    IIF(isjson(json_metadata) = 1, IIF(CHARINDEX('/', json_value(json_metadata, '$.votes[0]')) > 0, SUBSTRING(json_value(json_metadata, '$.votes[0]'), 1, CHARINDEX('/', json_value(json_metadata, '$.votes[0]'))-1),json_value(json_metadata, '$.votes[0]')), null) 
    order by count(*) desc


The above gave me the following output:



Scanning the numbers, something didn't look right. @votovzla, 3 out, @steemitbloggers, 2 out, and @team-cn, 58 out out when compared to the screenshot at the top of the post.

And so I simplified the query and ignored looking for the exact JSON. This included the rest of the comments on Dan's post, but the numbers were still way off.



And so I phoned a friend who can pull the same data directly from the chain. The screenshot below is an hour or so behind the ones above, but you get the idea - still a pretty sizable discrepancy:



So what could it be?

The number of entries on the chain, particularly for the @team-cn vote, do not match the count on @dpoll.curation.

Deleted Comments.

The following accounts voted on Dan's Poll, and then deleted their comment on the post.

'public-advocate', 'prominent', 'ninedragons', 'vote4u', 'dragon-blade', 'al-amanah', 'mk111', 'worldclub', 'the-excavator', 'woodside', 'quarantine', 'dolphin-power9', 'sukhoi-su', 'simpanan', 'dolphin-power10', 'dolphinp', 'coonawarra', 'whalepower', 'storm-shadow', 'sky-bolt', 'l00', 'the-exocet', 'seawise-giant', 'ballarat', 'freeservice', 'whalepower-guide', 'balancepower', 'tenaga-satu', 'the-reef', 'sbd4vot', 'dolphin-power3', 'steem4vote', 'meko200', 'paul-gillbanks', 'pterosaur', 'bullionstackers', 'globalex', 'c-solstice', 'ppagoda', 'word-of-the-day', 'point-blank', 'v-1', 'dolphin-power6', 'helios', 'applex', 'shenyang-j', 'timeblock', 'bagger293', 'tanaman', 'surion', 'reservoir', 'dolphin-power7', 'cairns', 'author-fund', 'minuteman111', 'dolphin-power8', 'solidgold', 'global-pillar'

Why would you do that then?

And 58 you say? Where have I seen that number before......


I think it would be unwise for me to point fingers right now, particularly before @emrebeyler has done a full audit (which he undertaking at present), and so I'll leave my opinions for later.

Just to be clear. Nothing against @dpoll.curation here, and the great work Emre has been doing for Steem.


We saw the @steemalliance put their votes out to the public for review, likely after suspecting foul play. And the above doesn't look great, does it?

Stake-weighted voting back in the game?


Cheers

Asher

Sort:  

Would be interesting to see some type of vote scoring system like 90% of the score is based on stake weight and 10% is based on the total number of votes. I don't like the thought of being able to buy victories, but just creating large numbers of spam accounts to boost polls doesn't feel right either.

Maybe the answer is when the poll is created no new accounts can vote after the poll creation and a snapshot is taken of SP for accounts and that's what stake you get to vote with in the poll. I know suggestions are always easier than implementing said ideas, but worth a thought I think.

Yeah I think that is worth considering.

I did think of a what if < 1000 SP = 1 vote, and then every 1k SP owned is an extra vote. It could be worth a look to see if there is any scope there.

Maybe the answer is when the poll is created no new accounts can vote after the poll creation

I think this is definitely worth implementing.

Totally agree. I don't think it'd be too hard to code either...

The account created date would be a really quick job.

Thank you for checking the data @abh12345! :)

I am currently doing an extensive audit. I will post the results, and scripts tonight, hopefully.

My pleasure. To some extent, I'm sorry to have found these 'discrepancies', and was looking to do a 'fun' post on the data.

Hopefully the audit will clear things up

great find, Asher! If we have anything on Steem, then it's plenty of accounts controlled by few entities. This was by design from the mining phase, not successfully prevented from the Steemit signups and required for genuine signups. This inevitably raises some doubts on account based voting systems. How to ensure that one account is one natural person? Close to impossible, if you ask me. Do I spot some very similar account names in the list of deleted comment authors?

We are certainly plentiful in those :)

I would agree, pretty much impossible without performing checks that many will (perhaps rightly) choose not to be a part of.

Do I spot some very similar account names in the list of deleted comment authors?

dolphin-power 1 though 10 you mean? hmmm

You know, @abh12345, you haven't quite opened the can of worms these findings lead to, so hey, I will. :)

We could have one account voting if we had any kind of 'know your customer' in place. Surely there's a way to do it and preserve the all mighty anonymity and security everyone seems to be concerned with (until for whatever reasons, they're not).

I'm not a developer, or a decentralized evangelist, or a blockchain brain, so I'm sure I'm missing all kinds of things, but having all accounts opened by a single individual tied back to that one individual, account based voting or not, seems like a simple ask. If no one wants anyone having access to that information, then what about writing it into the code.

I don't know the way to do it, but there's got to be one. Telling me it can't be done (not you, just anyone) because of this and this and this is no more a solution than the nonsense I may be ignorantly spewing now. Somewhere out there is the way to do this. There's no reason why we can't just have fair voting (outside of human nature, which I guess we're always going to be combating), but dang it, we could certainly make it way harder, and way more costly to do.

Yeah.

At present, most accounts are coming through the claims route, and so we know who the original marker sat with.

There are still multiple ways to pay for an account and be anonymous, or go through the Steemit inc sign up process (perhaps with a throw-away phone number), and I suspect these methods aren't going anywhere soon.

Sooo, at present, I have nothing with regards to a solution. Oracles were touted as being a step towards implying an account was 'good', but those are seemingly some way off yet.

I believe a calculation involving the following should be considered:

  1. 1 for 1 vote aka dpoll
  2. stake-based (then would we treat stake as proxy?)
  3. time-based (age of account) + activity

#1 This is the current simplest way if no one cheats and gets their bot accounts to vote.

#2 Delegations should be excluded but its debatable whether stake would be calculated same as for witness approvals, aka with proxying. I would say yes to allow users who have a distributed stake amongst numerous accounts to have one vote. On the flipside, that brings up the question of whether an account that has a lot of proxies would then overshadow the individual votes of its proxies. In that case the solution may be using the trustee information. That would once again have issues as some accounts are the creators of other autonomous accounts. Anyway, this is a point worth debating.

#3 refers to the fact that a user who's been active for let's say two years would have a greater knowledge and personal investment in the ecosystem then someone who's been here for a week. The activity parameter would be needed to prevent botnets and old miners. Activity would be based on posts/comments, not trading activity or just votes.

I'd have to get out my stats notes to come up with a calculation.

Yeah it's possible that a compilation of the 3 or a mix n match could be investigated.

1 vote per 1k SP owned, starting with 1 at < 1000 SP might be interesting. It's stake weighted but means a Whale would have 501 votes and a Redfish 1 vote - 500 more votes instead of 1000+.

A users activity is an interesting one. I guess some of the 'quieter' whales would have something to say about that.

Oracles could have a say in the future too......

I think these oracles will be so subjective they'll negate any value. Good point on the quieter whales. One option would be to encode github contributions onto the chain but then we're dealing with an immense amount of spam. It is pretty hard to gauge a user's true activity, which is why every calculation so far failed.

Loading...

The implications of this — once again — points to the fundamental "rift" we seem to have in this ecosystem... I can't draw specific "lines" here, but they fall loosely along the "cleverness" vs "effort" spectrum... I'm part of the @steemitbloggers group, too... as well as your own leagues, and I'm a firm believe that the only long term hope we have for this ball of wax is for the community builders to gain upper hand.

I realize that I may be a "partial" participant here... but I am also a realist in recognizing that our tiny group is a long shot. The potentially "bitter pill" isn't in not winning because we busted out butt, but in losing because of manipulation and foul play.

So I'm glad you've opened this particular can of worms @abh12345! And I will be curious to see what @emrebeyler's audit reveals.

As for my comment about "the future of this ecosystem," my point is that NO social platform can expect to develop life and longevity based on "who can create the smarter piece of code to outmaneuver the opposition." But then again, I know lots of people who — upon release of a new game — the FIRST thing they do is go in search of "cheat codes," rather than actually play the game.

From where I am sitting, that says way more about their character than mine.

And yes, I'm being judgmental.

Ahh, the cheat-code searchers. What a sure-fire way to spoil the entertainment of a game.

The audit Post was released the other day, and it seems the decision on the matter will be left to the Poll creator.

Yea, I mean no one really wants account-based voting, they want person-based voting, and there's currently no feasible way to do that here. Any whale or voting bot with a large amount of SP could create 10,000+ accounts, for free, right now, and then be able to swing any poll on the platform. It wouldn't be very hard to get them to 40+ rep either. At the end of the day that just means that these polls should only really be used for lighthearted things that don't carry serious monetary value or importance.

Posted using Steeve, an AI-powered Steem interface

Yes for sure, we are seemingly a long way from people-based voting methods.

If the vote relates to money or major decisions then stake should have the say. What's the point in holding influence if you have no more of that than someone who signed up yesterday and has invested nothing?!

Why, for any reason, did anyone think account-based voting on a blockchain with no true identity verification would be a functional approach to holding a ballot?

Am I missing something? Projecting forwards towards Oracles and future-tech, or...?

Yeah...

I think yabapmatt mentioned that Polls have some value for the non-serious stuff, but as soon as you are talking money the risks of foul play grows significantly.

I suspect, while we await Oracles, that stake will need to play a part - some won't like it of course, but I've not seen any better ideas surface with what we have available at present.

We need DNA/retina/fingerprint scan to become standard issue in all modern PCs. Turn the data into a cryptographic hash somehow and implement.

Also, I would quibble that if something is possible, it cannot truly be considered foul play, if the goal is an immutable matrix of information, as the universe is. I know it's something of a personal stance though, as there's little I detest more than unenforceable rules in contradistinction to actual natural law, like the boiling point of water.

However, we're in that painful period of technological transition (at least, we, the homely populace: can't speak for what the rich elite have achieved in military applications) where we fall very short of emulating that sort of informational integrity. It's nice in a way because it pushes human ingenuity to keep innovating and striving for a closer understanding of how things operate in nature.

You are eagle eyed and nothing gets past you. Maybe you should have been an auditor.

heh :)

My intention was to have some fun with the numbers, seeing as their were a good number of respondents. But the numbers did suggest an audit was required. @emrebeyler has posted recently.

Coin Marketplace

STEEM 0.30
TRX 0.12
JST 0.034
BTC 63877.55
ETH 3143.56
USDT 1.00
SBD 3.97