Derivation

Table of Contents

The Jovian network upgrade timestamp defines the timestamp at which all functionality in this document is considered the consensus rules for an OP Stack based network.

The upgrade transaction details below are based on a branch at commit hash 7daaabbf2c2cce892aa171bc7e1331ad31bcc8ca, and will be updated once a contracts release is made.

On the activation block, a set of deposit transaction based upgrade transactions are deterministically generated by the derivation pipeline in the following order:

Network Upgrade Transactions

L1Block Deployment

The L1Block contract is deployed.

A deposit transaction is derived with the following attributes:

  • from: 0x4210000000000000000000000000000000000006
  • to: null
  • mint: 0
  • value: 0
  • nonce: 0
  • gasLimit: 444775
  • data: 0x0x608060405234801561001057600080... (full bytecode)
  • sourceHash: 0x98faf23b9795967bc0b1c543144739d50dba3ea40420e77ad6ca9848dbfb62e8, computed with the "Upgrade-deposited" type, with intent = "Jovian: L1Block Deployment"

This results in the Jovian L1Block contract being deployed to 0x3Ba4007f5C922FBb33C454B41ea7a1f11E83df2C, to verify:

cast compute-address --nonce=0 0x4210000000000000000000000000000000000006
Computed Address: 0x3Ba4007f5C922FBb33C454B41ea7a1f11E83df2C

Verify sourceHash:

cast keccak $(cast concat-hex 0x0000000000000000000000000000000000000000000000000000000000000002 $(cast keccak "Jovian: L1Block Deployment"))
# 0x98faf23b9795967bc0b1c543144739d50dba3ea40420e77ad6ca9848dbfb62e8

Verify data:

git checkout 7daaabbf2c2cce892aa171bc7e1331ad31bcc8ca
make build-contracts
jq -r ".bytecode.object" packages/contracts-bedrock/forge-artifacts/L1Block.sol/L1Block.json

This transaction MUST deploy a contract with the following code hash 0xf7b6ef0de2a53625d467d98c2932a5a5d64ffa1a331ebbde5bb06e2591b5835a.

To verify the code hash:

git checkout 7daaabbf2c2cce892aa171bc7e1331ad31bcc8ca
make build-contracts
cast k $(jq -r ".deployedBytecode.object" packages/contracts-bedrock/forge-artifacts/L1Block.sol/L1Block.json)

L1Block Proxy Update

This transaction updates the L1Block Proxy ERC-1967 implementation slot to point to the new L1Block deployment.

A deposit transaction is derived with the following attributes:

  • from: 0x0000000000000000000000000000000000000000
  • to: 0x4200000000000000000000000000000000000015 (L1Block Proxy)
  • mint: 0
  • value: 0
  • gasLimit: 50,000
  • data: 0x3659cfe60000000000000000000000003ba4007f5c922fbb33c454b41ea7a1f11e83df2c
  • sourceHash: 0x08447273a4fbce97bc8c515f97ac74efc461f6a4001553712f31ebc11288bad2 computed with the "Upgrade-deposited" type, with intent = "Jovian: L1Block Proxy Update"

Verify data:

cast concat-hex $(cast sig "upgradeTo(address)") $(cast abi-encode "upgradeTo(address)" 0x3Ba4007f5C922FBb33C454B41ea7a1f11E83df2C)
# 0x3659cfe60000000000000000000000003ba4007f5c922fbb33c454b41ea7a1f11e83df2c

Verify sourceHash:

cast keccak $(cast concat-hex 0x0000000000000000000000000000000000000000000000000000000000000002 $(cast keccak "Jovian: L1Block Proxy Update"))
# 0x08447273a4fbce97bc8c515f97ac74efc461f6a4001553712f31ebc11288bad2