As previously stated, if you try to put limits on how much stake someone can use to vote than a whale will simply break his stake up into multiple accounts. If you try to say that you get 1 vote per account than fraudsters will make a zillion accounts with one nxt each. I think your judgment may be clouded by what you would like to be the case.
I have a solution that will allow almost complete fairness and can identify accounts being controlled by a singular user/group to change the result.
I think this a perfect time to use weak artificial intelligence algorithms.
I am all ears!
Currently developing the algorithm. It needs multiple voting events to start working.
This is the simplest explanation I can give without a coded application to demonstrate.
additional variable that needs to be added, amount of times an account has voted.
initialvoteWeight = (other variables)(1 / similarity)^2(TotalAccountVotes)
this prevents people from creating a new account each time to vote, or rather it docks them voting power
First vote will be initiated and completed.
"Banks" of accounts that have voted will be created for each option after each vote.
Bank A will always contain the accounts of the winning vote
bankA1[accounts[1-100]] 100 votes + accounts x, y, and z votes.
bankB1[accounts[101-150]] 50 votes
Bank A1 won by 66%
Second vote will commence
"Banks" of accounts that have voted will be created for each option after each vote.
bankA2[accounts[1-75 and 100-109]] 85 votes + accounts x, y, and z votes.
bankB2[accounts[76-99 and 110-150]] 65 votes
Bank A2 won by 56%
third vote will commence
"Banks" of accounts that have voted will be created for each option after each vote.
bankA3[accounts[1-35, 51-75 and 90-150]] 120 votes + accounts x and y votes.
bankB3[accounts[36-50 and 76-89]] 30 votes
BankA3 won by 80%
----
This will be translated into repeat and if statements soon.
if bankA1 contains account[z and x and y] and bankA2 contains account[z and x and y] and bankA3 contains account[z and x and y] set similarity of accounts z, x and y to similarity + 1
similarity[z] = 1
similarity[x] = 1
similarity[y] = 1
Set totalAccountVotes of account[z and x and y] to totalAccountVotes + 1
end if
if bankA1 contains account[x and y] and bankA2 contains account[x and y] and bankA3 contains account[x and y] and bankA4 contains account[x and y]
set similarity to similarity + 1
similarity[z] = 1
similarity[x] = 2
similarity[y] = 2
essentially voting power of z will be 4 times higher than x or y. This is just a rough construct of my idea.