These scripts empower NitroContracts1Point2Point1UpgradeAction
action contract which performs upgrade to 1.2.1 release of Nitro contracts for existing Orbit chains. Predeployed instances of the upgrade action exists on the chains listed in the following section with vanilla ArbOS20 wasm module root set. If you have a custom nitro machine, you will need to deploy the upgrade action yourself.
NitroContracts1Point2Point1UpgradeAction will perform the following action:
- Upgrade SequencerInbox to v1.2.1
- Upgrade ChallengeManager to v1.2.1
- Upgrade OneStepProof to v1.2.1
- Set the wasm module root to the new version
Note that contracts without code changes are not upgraded. It is normal to have some contracts still in the old version after the upgrade as they are equivalent to the new version. After the contract upgrade, you would need to schedule an ArbOS upgrade to ArbOS20 to enable the new features.
This upgrade only support upgrading from the following nitro-contract release:
- Inbox: v1.1.0 - v1.2.1 inclusive
- Outbox: v1.1.0 - v1.2.1 inclusive
- SequencerInbox: v1.1.0 or v1.1.1
- Bridge: v1.1.0 - v1.2.1 inclusive
- RollupProxy: v1.1.0 - v1.2.1 inclusive
- RollupAdminLogic: v1.1.0 - v1.2.1 inclusive
- RollupUserLogic: v1.1.0 - v1.2.1 inclusive
- ChallengeManager: v1.1.0 - v1.2.1 inclusive
Please refers to the top README Check Version and Upgrade Path
on how to determine your current nitro contracts version.
- L1 mainnet (eth fee token): 0xC159A3a21aFb34Dbc601a7A42aCD2eCa019393F7
- L1 mainnet (custom fee token): 0x2e0c12e2478a0dEc2EF6C2CCC2ED8d4fEd3597d1
- L2 Arb1 (eth fee token): 0x606Bb75B1f910F82086557aa14eD2Dc0bEB85D6B
- L2 Arb1 (custom fee token): 0xb28c89b6997F025BD35205b99a7968C264cCe353
- L1 Sepolia (eth fee token): 0xBC1e0ca800781F58F3a2f73dA4D895FdD61B0Cb5
- L1 Sepolia (custom fee token): 0xEFf65644557573e3E781B0B586fD7488a26c8E46
- L2 ArbSepolia (eth fee token): 0xe9F95d0975e87e8E633fceCDF17fFc0f646cCfb8
- L2 ArbSepolia (custom fee token): 0x86AdeeAcF16fdbCAEe615b12E56e064a665fCF47
- Setup .env according to the example files, make sure you have everything correctly defined. The script do some sanity checks but not everything can be checked.
Caution
The .env file must be in project root.
- (Skip this step if you can use the deployed instances of action contract)
DeployNitroContracts1Point2Point1UpgradeAction.s.sol
script deploys OSPs and ChallengeManager templates, blob reader and SequencerInbox template, and finally the upgrade action itself. It can be executed in this directory like this:
forge script --sender $DEPLOYER --rpc-url $PARENT_CHAIN_RPC --broadcast --slow ./DeployNitroContracts1Point2Point1UpgradeAction.s.sol -vvv --verify --skip-simulation
# use --account XXX / --private-key XXX / --interactive / --ledger to set the account to send the transaction from
As a result, all templates and upgrade action are deployed. Note the last deployed address - that's the upgrade action.
ExecuteNitroContracts1Point2Point1Upgrade.s.sol
script uses previously deployed upgrade action to execute the upgrade. It makes following assumptions - L1UpgradeExecutor is the rollup owner, and there is an EOA which has executor rights on the L1UpgradeExecutor. Proceed with upgrade using the owner account (the one with executor rights on L1UpgradeExecutor):
forge script --sender $EXECUTOR --rpc-url $PARENT_CHAIN_RPC --broadcast ./ExecuteNitroContracts1Point2Point1Upgrade.s.sol -vvv
# use --account XXX / --private-key XXX / --interactive / --ledger to set the account to send the transaction from
If you have a multisig as executor, you can still run the above command without broadcasting to get the payload for the multisig transaction.
- That's it, upgrade has been performed. You can make sure it has successfully executed by checking wasm module root:
cast call --rpc-url $PARENT_CHAIN_RPC $ROLLUP "wasmModuleRoot()"