Layman's questions about 51% and hard fork


I am revisiting grin after a while and it is nice to see the progress. Slatepacks and Grin++ have made it more of a usable experience for me. Thank you to the devs.

I don’t know exactly what to make of the big news events I see while I was away so I have some questions.

Regarding the hard fork I believe I understand that one, an exploit would have allowed coin creation. As I understand it, once known, that potential coin creation is visible after the fact and we can see retroactively that the recognized exploit is not present in the chain up until that point. Let me know if that’s not correct.

Regarding the “51% attack” I am less clear about the potential harms. Does a 51% attack allow coin creation or unauthorized transactions? Was the 51% event observably malicious or just a case where a pool did achieve 51% temporarily and the intentions unknown? Does a 51% event permanently mar the integrity of the chain in a way that we can never be fully confident of? Does regaining distributed control of the chain rewrite it back to before the 51% event?

Yes, grin++ node spotted the invalid transaction, rust node then fixed the issue. In grin you can show there is no hidden inflation IF rangeproofs are correctly implemented.

51% attack is always possible on a pow chain, even on btc (it’s just more expensive and harder to pull off). Mostly 51% attack is a double spend attack on people who don’t wait for enough confirmations (theoretically the number of confirmations you should wait depends on the amount you’re sending, so you should wait long enough to make 51% attack non profitable). Such attacks don’t break the chain, they’re just “let me steal some money from someone who doesn’t wait for enough confirmations and then I’m out” type of attacks. You can read more about it here.


Thank you that clears up the 51% stuff.

What is the IF here, is it just a recognition that there could be yet unknown vulnerabilities in Grin’s range proofs?

There was a flaw is the rangeproof cash implementation in grin rust. After Grin++ detected the invalid rangeproofs because Grin++ did not have the same bug, grin rust quickly fixed the issue. The chain with the invalid rangeproof was not further mind, meaning it was outcompeted by the chain with valid rangeproof.
All nodes can always check no additional coins are created by checking the rangeproofs of all transactions.

So the IF refers to that temporary bug that was fixed.

1 Like

IF was just a normal if, it’s just an important if so i capitalized it. There could be other unknown bugs in the implementation although i doubt it