All notable changes to the contracts will be documented in this file.
Version 5.2 is scheduled for upgrade.
- Cleanup after previous upgrade with regenesis.
- Minor issues from audit fixed.
Version 5.1 is scheduled for upgrade.
MintNFT
,WithdrawNFT
operations, which enable native NFT support.Swap
operation, which depending on the implementation may serve either order book or atomic swaps functionality.- The security council, which is able to shorten the upgrade notice period. More on that here.
RegeneisMultisig.sol
to handle submissions of the new root hash by the security council during the upgrade.- A special account with id
2**24 - 1
. It is used to ensure the correctness of the NFT data.
- The maximum amount of tokens that can be used to pay transaction fees is increased to 1023.
- The account tree depth for each account increased to
32
. - Due to the smart contract size limitations,
ZkSync.sol
was split into two parts: the originalZkSync.sol
and theAdditionalZkSync.sol
, to which some functionality is delegated. ZkSyncNFTFactory.sol
which serves as a default NFT factory, where all the NFTs are withdrawn by default.
Version 5 is scheduled for upgrade.
tokenGovernance
address is added to theGovernance
contract.tokenGovernance
can list new tokens.TokenGovernance
contract is added to allow anybody to pay fee and list new tokens.
- Maximum amount of tokens that can be used to pay tx fee is increased to 512.
- Circuit now enforces that
ForcedExit
target account pubkey hash is empty.
Version 4 is released.
Version 4 is scheduled for upgrade.
- Multiple blocks can be committed, proven or executed with one transaction.
- Rollup block timestamp is added.
ChangePubKey
can be authorized without L1 transaction for smart-contract accounts that can be deployed using CREATE2 function with specific salt.- Block processing is split into three parts: commit, proving onchain, execution. Block is finalized when its executed.
- Governance now can pause deposits of some tokens.
- New events
Deposit(token, amount)
,Withdrawal(token, amount)
are added when funds are deposited or removed from the contract.
- Cost of
Deposit
andFullExit
for user is reduced significantly. - Priority queue storage format is changed for gas cost optimization.
- Block storage format is changed for gas cost optimization.
ChangePubKey
message that should be signed by ETH private key is changed.- Upgrade notice period is increased to 2 weeks.
ChangePubKey
with L2 public key that was authorized onchain can be reset if needed after waiting period of 1 day.- Maximum gas limit for ETH and ERC20 token withdrawal from zkSync contract is set to be 100k.
- Proof of the L2 funds in the exodus mode now can be provided by anyone on behalf of any user.
- Withdrawal from zkSync contract (funds that are withdrawn from L2 but failed to be pushed out of the zkSync contract) now can be done on behalf of any user.
- Some of the public variables are made internal.
- Withdraw from the zkSync contract now should be performed using
withdrawPendingBalance
instead of (withdrawETH
,withdrawERC20
). - Multiple functions and variables are renamed:
fullExit
->requestFullExit
exit
->performExodus
triggerExodusIfNeeded
->activateExodusMode
balanceToWithdraw
->pendingBalance
- Pending withdrawal queue is removed, instead we try to execute token transfers when we finalize block.
- All events for user operations (Deposit, Withdraw, etc.) are removed.
Version 3 is released.
ForcedExit
operation which allows user to force a withdrawal from another account that does not have signing key set and is older than 24h.
ChangePubKey
operation requires fee for processing.
Version 2 is released.
- Event denoting information about pending and completed withdrawals.
- Support for tokens that aren't fully compatible with ERC20.
- Block revert interval is 0 hours.
PRIORITY_EXPRIRATION_PERIOD
is reduced to 3 days.UPGRADE_NOTICE_PERIOD
is increased to 8 days.
- Redundant priority request check is removed from contract upgrade logic.