Now for the interesting 75% part:
You can calculate in advance, which nonce each of your accounts would have and then choose the best one. So statistically speaking, all your accounts are behaving like accounts with your 0.98% stake in them. And you can freely choose between any of the 100.000 accounts in advance, already knowing the nonce. The chance that one of them has a nonce so good that it's better than all the others is extremely high: If you'd (theoretically speaking) combine all of those 100,000 accounts with 0.98% stake each, you have a stake of 98,000 % (yes, I know, that's more than 100%, but that's the whole point of having the prior knowledge
). So the total stake of the currency for that next block becomes 98,000 % (you) + 99.02 % (others) = 98,099.02 %. Which means, you suddenly own nearly 99.9 % of the stake and have the respective chance of forging that block.
So with that methodology, we have a forging chance of 25%*0.98%+75%*99.9% = 75.17 %.
Good catch. Looks like this trick will work if u r the only one who uses this strategy. Will freezing recently moved coins for 1440 blocks solve the issue?
PS: It's not the injected flaw, but still post ur Nxt account for 10K reward plz.
Wait a minute.... another possibly better solution could be for the generation signature to include a hash of the transactions contained in the block.
1) Suppose you've forged the current block B1 with account a1, but have not broadcast it.
2) Next, you compute corresponding generating signature sig(B1).
3) From this, you calculate the subordinate account a2 (one of your 100 pre-generated accounts) that generates the next block B2.
4) However, the transaction to move your NXT stake from a1 -> a2 (so you are able to solve B2) must to be part of B1.
5) So, you need to update the current block C with transaction a1 -> a2 and re-generate the generating sig(B1).
6) However, you've now changed B1, so you need to goto step (3) and repeat the process.
Thus, we have thwarted the adversary with a chicken-or-egg/halting-problem kind of puzzle.
Does this work as a solution?
Maybe a hash of the transactions is already included in the generation signature, in which case there was no issue in the first place.
Also,
https://bitcointalksearch.org/topic/m.4307553 seems to indicate that my earlier recollection that there
is a 1440 block forging penalty for transferred coins is true.
In essence it works by having the author of the next block be selected by comparing the public key that he is using to hold his stake to the public key of the author of the previous block. In-order to prevent the new block author from simply creating a public key that would win and loading that public key with his stake BTCNext introduced the idea of effective stake. Only stake that has remained stationary for 1440 blocks (24 hours) has the right to author a block. Would be attackers can not calculate 1440 blocks into the future because they have no idea who is going to author the very next block, let alone the next 1440 blocks. Inorder to prevent an attacker from creating a "trap" where if he manages to become lucky enough to author one block in the future than he has prepared a set of funded addresses which would "catch" the subsequent blocks, we don't only rely on the previous block authors signature alone, but build an entirely separate "block chain" which is the result of hashing every public key ever used to author a block.
However, the source code defines getEffectiveBlance() with
...
if (Block.getLastBlock().height - height < 1440) {
return 0;
}
...
which seems to imply the 1440 penalty is on the account, rather than on the NXT balance.
Could someone please confirm whether either of my two solutions work and whether they are already, in fact, implemented in the latest source code?