Hi there,
(Doomsday theories back again – sorry )
Going off of https://nubits.com/nushares/voting-mechanics#how-does-a-custodian-vote-work and the NuBits whitepaper, I’m hoping to bounce this idea off someone… My preferred answer would be “Nope! Can’t do that! Here’s why .”
There are two documented rules for passing a custodian vote:
- 5,001 out of the last 10,000 blocks must vote for the grant
- Those 5,001 blocks have to hold at least 50% of the share-age in that same 10,000 block window
This leads me to two questions:
- What would it take to for a single person (not necessarily a single address) to be able to mint 5,001 blocks in a 10,000 block window?
- What would it take for that same person to be able to hold 50% of the share age in the 10,000 block window?
Some thoughts…
Really really old shares?
If blocks were chosen based on their share age without a cap, holding them for a long time would increase the chances that they would be chosen. Looks like we have a fixed age that’s considered when choosing which block gets to mint: 7 days minimum age considered, and 7 days maximum age considered.
In other words, holding onto shares for a long time won’t increase the chances that your shares will be used to mint the next block.
In code:
static const int STAKE_MIN_AGE = 60 * 60 * 24 * 7; // changed to 7 days so only one vote in 10000 block voting period can be made
static const int STAKE_MAX_AGE = STAKE_MIN_AGE + 1; // changed to same as minimum to incentivize minting as soon as possible
This also seems to hint that the age requirement isn’t as important – as the min and max age considered is 7 days on the nose.
Buying lots of shares
This is the obvious one. If you have a large proportion of the shares issued (say 51+%), there’s a decent chance that you could get 5k+ of the last 10k blocks.
As we’ve talked about elsewhere, this is totally possible, but the hope is that anyone who owns such a large proportion of the networks shares would care enough about their investment not to tank it.
Luck…
How many shares does someone need to “get lucky”? What are the odds given N addresses each with 10k NSR?
I think we’re looking at… (assuming the blocks total are ~82k, and each block is 10k shares, and someone owns N 10k blocks)
Binomial[5k+1, 10k] * (n/82k)^5k+1 * ((82k-n)/82k)^4999
I can’t seem to get Wolfram Alpha to graph me a nice picture for this though… (anyone ?)
It seems like, assuming blocks are purely randomly selected, the chances of winning exactly (not at least) 5,001 blocks is pretty low even as you get towards a third of the shares outstanding.
Bigger share chunks?
The last idea is one I’m not quite sure about, and need someone a bit more versed in the code to tell me: Do we prioritize blocks with larger numbers of shares offered to mint a block?
It looks like you can offer up more than 10k shares (that’s just the minimum), but do two similarly aged chunks of shares get randomly chosen? Or does the larger one (containing more share-days) get priority to mint the block?
If larger chunks get priority, then it stands to reason that someone could turn their shares into 5,001 * 15k chunks, and get priority to mint lots of blocks in a row (because everyone else on the network is using blocks much closer to 10k). This would require 75 million NSR, which is in the 10% range of ownership. Not at all a small investment, but certainly far lower than the 51% discussed before.
Does anyone know where the code is in the Nu client that decides which of two different chains should be built on? Does that logic use share-days in determining the priority?