title | lang | tags | description | ||
---|---|---|---|---|---|
Deployer |
en-US |
|
Learn how op-deployer can simplify deployment of the OP Stack. |
import {Callout, Steps} from 'nextra/components'
op-deployer
simplifies the process of deploying the OP Stack. It works similarly to Terraform. Like Terraform, you define a declarative config file called an "intent," then run a
command to apply the intent to your chain. op-deployer
will compare the state of your chain against the intent,
and make whatever changes are necessary for them to match.
op-deployer
is currently under active development, and must be compiled from source. Assuming you have the Go
toolchain installed, you can install op-deployer
by following these steps:
Run the following command to clone the monorepo:
```bash
git clone https://github.com/ethereum-optimism/optimism.git
```
### **Build the Binary**:
Run the following commands to build the binary:
```bash
cd op-chain-ops
make op-deployer
```
### (Optional) Move `op-deployer` Into `$PATH`
Run the following command to move the `op-deployer` binary into your `$PATH`. Note that the path for your system
may be different:
```bash
sudo mv ./bin/op-deployer /usr/local/bin/op-deployer
```
To get started with op-deployer
, you need to create an intent file that outlines your desired chain configuration. You can use the built-in op-deployer
utility to generate this file. Just run the following command to create an example intent file for a development chain:
op-deployer init --l1-chain-id 11155111 --l2-chain-ids 12345 --workdir .deployer
This command will create a directory called .deployer
in your current working directory containing the intent file
and an empty state.json
file. state.json
is populated with the results of your deployment, and never needs to
be edited directly.
Your intent file will look something like this:
l1ChainID = 11155111 # The chain ID of the L1 chain you'll be deploying to
fundDevAccounts = true # Whether or not to fund dev accounts using the test... junk mnemonic on L2.
contractsRelease = "op-contracts/v1.6.0" # The version of the smart contracts to deploy.
# List of L2s to deploy. op-deployer can deploy multiple L2s at once
[[chains]]
# Your chain's ID, encoded as a 32-byte hex string
id = "0x0000000000000000000000000000000000000000000000000000000000003039"
# Various ownership roles for your chain. When you use op-deployer init, these roles are generated using the
# test... junk mnemonic. You should replace these with your own addresses for production chains.
[chains.roles]
proxyAdminOwner = "0x7759a8a43aa6a7ee9434ddb597beed64180c40fd"
systemConfigOwner = "0x8e35d9523a0c4c9ac537d254079c2398c6f3b35f"
governanceTokenOwner = "0x7759a8a43aa6a7ee9434ddb597beed64180c40fd"
unsafeBlockSigner = "0xbb19dce4ce51f353a98dbab31b5fa3bc80dc7769"
batcher = "0x0e9c62712ab826e06b16b2236ce542f711eaffaf"
proposer = "0x86dfafe0689e20685f7872e0cb264868454627bc"
challenger = "0xf1658da627dd0738c555f9572f658617511c49d5"
See the code comments above for explanations of each field. By default, op-deployer
will fill in all other configuration variables
with those that match our standard config. You can override these defaults by adding them to your intent file, but
that won't be covered here.
Now that you've created your intent file, you can apply it to your chain:
op-deployer apply --workdir .deployer --l1-rpc-url <rpc-url> --private-key <private key hex>
Hardware wallets are not supported, but you can use ephemeral hot wallets since this deployer key has no privileges.
This command will deploy the OP Stack to L1. It will deploy all L2s specified in the intent file. Superchain configuration will be set to the Superchain-wide defaults - i.e., your chain will be opted into the Superchain pause and will use the same protocol versions address as other chains on the Superchain.
With the contracts deployed, you can generate a genesis file for any of your L2s. Run the following command to do so:
./bin/op-deployer inspect genesis <l2-chain-id> --outfile genesis.json
This will write the genesis file to genesis.json
. You can change the --outfile
parameter to write it somewhere
else. You can run another member of the inspect
family, rollup
, to get the rollup.json
file:
./bin/op-deployer inspect rollup <l2-chain-id> --outfile rollup.json
op-deployer
uses the OP Contracts Manager (OPCM) under the hood to deploy contracts.
- For more details, check out the tool and documentation in the op-deployer repository.
- For more information on OP Contracts Manager, refer to the OPCM documentation.