Paper 2020/044

Bypassing Non-Outsourceable Proof-of-Work Schemes Using Collateralized Smart Contracts

Alexander Chepurnoy and Amitabh Saxena


Centralized pools and renting of mining power are considered as sources of possible censorship threats and even 51% attacks for decentralized cryptocurrencies. Non-outsourceable Proof-of-Work schemes have been proposed to tackle these issues. However, tenets in the folklore say that such schemes could potentially be bypassed by using escrow mechanisms. In this work, we propose a concrete example of such a mechanism which is using collateralized smart contracts. Our approach allows miners to bypass non-outsourceable Proof-of-Work schemes if the underlying blockchain platform supports smart contracts in a sufficiently advanced language. In particular, the language should allow access to the PoW solution. At a high level, our approach requires the miner to lock collateral covering the reward amount and protected by a smart contract that acts as an escrow. The smart contract has logic that allows the pool to collect the collateral as soon as the miner collects any block reward. We propose two variants of the approach depending on when the collateral is bound to the block solution. Using this, we show how to bypass previously proposed non-outsourceable Proof-of-Work schemes (with the notable exception for strong non-outsourceable schemes) and show how to build mining pools for such schemes.

Available format(s)
Publication info
Published elsewhere. 4th Workshop on Trusted Smart Contracts in Association with Financial Cryptography 2020
blockchainproof-of-workproof-of-worksmart contractsnon-outsourceable proof-of-work
Contact author(s)
kushti @ protonmail ch
2020-01-17: received
Short URL
Creative Commons Attribution


      author = {Alexander Chepurnoy and Amitabh Saxena},
      title = {Bypassing Non-Outsourceable Proof-of-Work Schemes Using Collateralized Smart Contracts},
      howpublished = {Cryptology ePrint Archive, Paper 2020/044},
      year = {2020},
      note = {\url{}},
      url = {}
Note: In order to protect the privacy of readers, does not use cookies or embedded third party content.