[Action Required] Celo Legacy TX type deprecation

As was previously announced during the Gingerbread hardfork, two TX types were deprecated - Celo Legacy Type 0 TXs and CIP-42.

This post gives some context on why it was done and contains a call to action for dApp developers for migrating to one of the non-deprecated types.

What is Celo Legacy TX type

Legacy Celo Legacy Type 0 TXs is the oldest TX type, incompatible with Ethereum tooling. It was the only available type at the Mainnet Launch.
About a year later, in CIP-35 we added Ethereum-compatible transactions support and, finally, in CIP-42 EIP-2718 Envelope TXs were added removing the last use case for the original Ethereum-incompatible type. That’s why we made a decision not to migrate it to CEL2.

What it means for you

If you’re still using the Celo Legacy Type 0 transactions, please migrate to one of the supported types.
If you’re not paying for gas with ERC-20 tokens (cStables, USDC etc), consider migrating to EIP-1559 Type 2 or Ethereum-compatible legacy Type 0 TXs.
If you’re paying for gas with ERC-20 tokens, please use CIP-64-style TXs.

Our client libraries already implement this behavior. viem has been following this logic from the beginning, ContractKit follows the same behavior by default starting with version 8.0.0.

How to check if I’m affected

If you’re using versions of ContractKit prior to 8.0.0 there is a chance that you’re using Celo Legacy transactions.

You can check type and ethCompatible fields in the RPC response of the eth_getTransactionByHash method for your transaction. If type is 0x0 and ethCompatible is false, it means that you’re using Celo Legacy Type 0 transactions and need to migrate.

curl -s -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x669f7704413672f348b1a70b095ec64bea3d201214849007a180e22ae9b2498b"],"id":1}' "<https://forno.celo.org>"
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "hash": "0x669f7704413672f348b1a70b095ec64bea3d201214849007a180e22ae9b2498b",
    "blockHash": "0x49f734d16553c13d079fb92c603b5bc28b4686ab39f130b30a4a147e927ea87a",


    **"ethCompatible": false**

For more information on supported types, see our explainer. If you have any questions or concerns, I’m happy to address them here!


From the docs, type 124 is also scheduled for deprecation. Is there a timeline of when we can expect 0 and 124 to stop working?

Yes, CIP-42 TXs (or Type 124) are also scheduled for deprecation. Both types won’t be ported to CEL2 but they would keep working on CEL1. So the sooner the community migrates, the better, as it would simplify the migration.