Skip to content

ChugSplash needs a contract that authenticates and executes upgrades as internal transactions #703

@karlfloersch

Description

@karlfloersch

Is your feature request related to a problem? Please describe.
Deployments at our level of complexity require multiple transactions spaced out over multiple blocks. This introduces annoyances around ensuring that all deployments are carried out to completion before operation of the chain continues.

Additionally, authenticating a deployment should be extremely high security & therefore it is extremely expensive to perform a deployment where you need to authenticate every transaction in a deployment that requires, say, 20 transactions. It's just unreasonable to sign 20 multisig txs!

Describe the solution you'd like
In order to solve this we propose a deployment system which:

  1. Can authenticate a very large deployment in 1 transaction and allow anyone to actually execute the deployment.
  2. Locks the entire contract system while a deployment is in progress, ensuring that no transactions are executed against a partial deployment.
  3. Can perform deployments across L1 and L2 (the deployment pauses both L1 and L2 contracts so that we can upgrade any component of our system)
  4. Will never get stuck in the middle of a deployment.
  5. Tracks the version of the deployment.

To create this we need to create a DeploymentManager contract which handles initiating a new upgrade, shutting down the system, performing upgrades, updating the upgrade if needed, resuming the system, and emitting useful information which describes what the upgrade did.

There is a WIP implementation here:

This issue is specifically scoped to implementing the DeploymentManager contract. Note that we will need to extend the functionality when we want to implement the specific pausing & resuming logic for L1 and L2 as they differ per environment.

Blockers
#697
#696

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions