Paper 2020/1101

NC-Max: Breaking the Security-Performance Tradeoff in Nakamoto Consensus

Ren Zhang, Dingwei Zhang, Quake Wang, Shichen Wu, Jan Xie, and Bart Preneel


First implemented in Bitcoin, Nakamoto Consensus (NC) is the most influential consensus protocol in cryptocurrencies despite all the alternative protocols designed afterward. Nevertheless, NC is trapped by a security-performance tradeoff. While existing efforts mostly attempt to break this tradeoff via abandoning or adjusting NC's backbone protocol, we alternatively forward the relevance of the network layer. We identify and experimentally prove that the crux resides with the prolonged block propagation latency caused by not-yet-propagated transactions. We thus present a two-step mechanism to confirm only fully-propagated transactions, and therefore remove the limits upon NC's performance imposed by its security demands, realizing NC's untapped potential. Implementing this two-step mechanism, we propose NC-Max, whose (1) security is analyzed, proving that it provides stronger resistance than NC against transaction withholding attacks, and (2) performance is evaluated, showing that it exhausts the full throughput supported by the network, and shortens the transaction confirmation latency by 3.0 to 6.6 times compared to NC without compromising security. NC-Max is implemented in Nervos CKB, a public permissionless blockchain.

Available format(s)
Cryptographic protocols
Publication info
Published elsewhere. MINOR revision.NDSS 2022
Nakamoto Consensusproof-of-work
Contact author(s)
ren @ nervos org
2022-01-28: last of 3 revisions
2020-09-15: received
See all versions
Short URL
Creative Commons Attribution


      author = {Ren Zhang and Dingwei Zhang and Quake Wang and Shichen Wu and Jan Xie and Bart Preneel},
      title = {NC-Max: Breaking the Security-Performance Tradeoff in Nakamoto Consensus},
      howpublished = {Cryptology ePrint Archive, Paper 2020/1101},
      year = {2020},
      doi = {10.14722/ndss.2022.24370},
      note = {\url{}},
      url = {}
Note: In order to protect the privacy of readers, does not use cookies or embedded third party content.