I would like to know if it would be possible to create a Fork of Ethereum or Ethereum Classic where only few smart contracts can be deployed?

The goal is to create a fork and launch a brand new blockchain but I would like to limit the possibility to deploy smart contracts.

Do you think there is a way to make it possbile? I thought about using a config file where the community would set the smart contracts hashs able to be deployed? But it is not possible to get a hash of a smart contract before it is deployed on mainnet right? Or maybe by acting on the gas fee and make it prohibitive, and then create a rule that would lower the gas fee? Or just setting a very high fee for smart contract deployment so that only the smart contracts that gather community consensus and fund raising can be deployed?

Plus I want my chain to be proof of work. Would you recommend to fork Ethereu Classic or Ethereum? Because Ethereum has been implementing none reversible changes towards proof of stake for some time.

Thank you very much for your help!

Best regards

  • You could use a smart contract on another blockchain as governance to approve certain contracts. Also I think using CREATE2 you can determine hashes ahead of time of certain contracts. Your fork could allow anyone to deploy contracts, but they could only be interacted with if accepted by the community. Sep 2, 2021 at 20:55

1 Answer 1


HECO blockchain recently implemented something like this.

HECO is an Ethereum fork modified to implement POSA and other features. As far as I know, nodes are probably all controlled by Huobi (CEX).

Last june, they implemented a hard fork that allowed to blacklist addresses and, similarly to what you want, to only allow a whitelist of addresses to deploy contracts. The latter is not currently enabled, but the code to do it is already there.

You may want to browse the commits of this particular release (1.1.0 Redcoast hardfork) and implement something similar.

  • This is interesting. I though such an implementation would open a DoS attack vector. Any way, could you point me to the place in the code where it is implemented? I only see code to blacklist validators (in the congress pkg)
    – scibuff
    Jan 5, 2022 at 1:23
  • 1
    I did not check where exactly it is in the code.
    – Undead8
    Jan 6, 2022 at 14:37
  • 1
    I dove into the code and found that ultimately the check is done in the CanCreate function in /consensus/congress.go at line 1201
    – scibuff
    Jan 19, 2022 at 22:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.