⚠️ Upcoming RPC breaking changes in ZKsync Era #929
Pinned
uF4No
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
We have released a platform upgrade in ZKsync Era Sepolia testnet with a breaking change that might impact some projects. Find below the details and instructions to follow if your project is affected:
Details of the change
The change applies to the transaction receipt RPC methods (
eth_getTransactionReceipt
,eth_getBlockReceipts
), affectingcontractAddress
field.ContractDeployer.{create, create2, createAccount, create2Account}
. This means that transactions to a Factory contract that calls theContractDeployer
will not include thecontractAddress
in their receipt, as the deployment is done as an internal call. The deployment doesn’t need to be successful forcontractAddress
to be set; the address is derived from the transaction and maybe storage data (such as the deployment nonce).Additionally, EVM-like deployments (transactions where
to == None
) are also considered deployment transactions, but they are only supported if the EVM emulator is enabled on the chain. Currently, the emulator is NOT enabled on either the Era testnet or mainnet (more info about the emulator here).Why is this change being made?
This update is designed to align the behavior of
contractAddress
with how it is handled on Ethereum (although Ethereum does not have aContractDeployer
). This is a breaking change in the RPC, so we're communicating it to teams to ensure they are aware before this change is deployed on mainnet.When will this change be deployed on ZKsync Era mainnet?
This protocol upgrade which planned to be released on ZKsync Era mainnet in March. More specific dates will be announced closer to the date.
What do you need to do?**
Please test your project on ZKsync Era Sepolia testnet to check if it's affected.
What's the recommended fix or workaround?
If your project uses a Factory to deploy other contracts we recommend emitting events with the contract address and reading those instead of relaying on the
contractAddress
field of the transaction receipt.Let us know if you have any questions or if you need some help!
Beta Was this translation helpful? Give feedback.
All reactions