I am working on Substrate node update.

During the testing, I found out that the deployed smart contract (incrementer, tag: v3.0.0-rc4) "dies" during the node updates from:

  1. v0.8.27 to v0.8.28;
  2. v0.8.28 to v0.8.29;
  3. v0.8.29 to v0.8.30.

What does "dies" mean? The network sees the SC but during execution the following errors are received:

  1. In Polkadot.js apps' console;
    RPC-CORE: rentProjection(address: AccountId, at?: BlockHash): Option<BlockNumber>:: 3: The contract is a tombstone and doesn't have any storage.
  2. Transaction fails in the Network.
      Module: {
        index: 17,
        error: 12
    The contract that was called is either no contract at all (a plain account),  or is a tombstone.
      weight: 0,
      class: Normal,
      paysFee: Yes

At the same time:

  1. I am able to deploy SC each time after node runtime update and it is working as expected;
  2. Starting v0.8.30 -> v0.9.0 this issue is not reproducing (tested up to 0.9.3 including).

Does somebody have any ideas on how to avoid "dying"?

1 Answer 1


The problem here is that you were upgrading between pallet-contracts versions which offered no upgrade path. Neither they offered compatibility for already deployed contracts nor did we include storage migrations.

This changed with v0.8.30. You still need to make sure to include the storage migrations contained in pallet-contracts in your runtime.

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.