diff --git a/justfile b/justfile new file mode 100644 index 0000000..8bdc60f --- /dev/null +++ b/justfile @@ -0,0 +1,7 @@ +# Import all devnet management commands from templates +import 'templates/justfile' + +# Default recipe delegates to imported justfile +[private] +@_default: + just default diff --git a/templates/default-alphanet/README.md b/templates/default-alphanet/README.md new file mode 100644 index 0000000..8b3bf89 --- /dev/null +++ b/templates/default-alphanet/README.md @@ -0,0 +1,44 @@ +# Default Alphanet Template + +Full-featured alphanet template with comprehensive infrastructure for production-like testing. + +## Description + +This is the standard template for creating production-like alphanets. It provides a complete environment with multiple nodes, redundancy, and all standard services. + +## Infrastructure + +### Nodes (per chain) +- **3 Sequencer nodes** + - 2x op-geth (full) + - 1x op-reth (full) +- **2 RPC nodes** + - 1x op-geth (archive) + - 1x op-reth (archive) +- **2 Snapsync nodes** + - 1x op-geth (full) + - 1x op-reth (full) + +### Services (per chain) +- `op-proposer` - L2 output proposals +- `op-batcher` - Transaction batching to L1 +- `op-challenger` - Dispute resolution +- `proxyd-public` - Public RPC load balancer +- `peer-mgmt-service` - P2P peer management +- `op-conductor-mon` - Conductor monitoring +- `op-conductor-ops` - Conductor operations +- `op-dispute-mon` - Dispute monitoring +- `op-challenger-runner` - Challenger automation + +### Global Services +- `op-acceptor` - Test runner + +## Configuration + +### Environment Variables +- `OP_NODE_LOG_LEVEL: info` +- `GETH_LOG_LEVEL: info` +- `OP_CONDUCTOR_LOG_LEVEL: info` + +### Network +- L1: Sepolia diff --git a/templates/default-alphanet/inventory.yaml b/templates/default-alphanet/inventory.yaml new file mode 100644 index 0000000..7957a1d --- /dev/null +++ b/templates/default-alphanet/inventory.yaml @@ -0,0 +1,207 @@ +chains: + - values: + op-node: + env: + OP_NODE_LOG_LEVEL: info + op-geth: + env: + GETH_LOG_LEVEL: info + op-conductor: + env: + OP_CONDUCTOR_LOG_LEVEL: info + nodes: + - kind: "node" + name: "sequencer-0" + spec: + kind: "sequencer" + el: + kind: "op-geth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "sequencer-1" + spec: + kind: "sequencer" + el: + kind: "op-geth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "sequencer-2" + spec: + kind: "sequencer" + el: + kind: "op-reth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "rpc-0" + spec: + kind: "rpc" + el: + kind: "op-geth" + spec: + kind: "archive" + cl: + kind: "op-node" + + - kind: "node" + name: "rpc-1" + spec: + kind: "rpc" + el: + kind: "op-reth" + spec: + kind: "archive" + cl: + kind: "op-node" + + - kind: "node" + name: "rpc-2" + spec: + kind: "rpc" + el: + kind: "op-reth" + spec: + kind: "archive" + cl: + kind: "kona-node" + + - kind: "node" + name: "snapsync-0" + spec: + kind: "snapsync" + el: + kind: "op-geth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "snapsync-1" + spec: + kind: "snapsync" + el: + kind: "op-reth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "snapsync-2" + spec: + kind: "snapsync" + el: + kind: "op-geth" + spec: + kind: "full" + cl: + kind: "kona-node" + + services: + - kind: "proposer" + name: "op-proposer" + spec: + kind: "op-proposer" + deps: + nodes: + - "rpc-0" + + - kind: "batcher" + name: "op-batcher" + spec: + kind: "op-batcher" + deps: + nodes: + - "sequencer-0" + - "sequencer-1" + - "sequencer-2" + + - kind: "challenger" + name: "op-challenger" + spec: + kind: "op-challenger" + deps: + nodes: + - "rpc-0" + + - kind: "public-rpc" + name: "proxyd-public" + spec: + kind: "proxyd" + deps: + nodes: + - "rpc-0" + - "rpc-1" + - "rpc-2" + + - kind: "peer-mgmt-service" + name: "peer-mgmt-service" + spec: + kind: "peer-mgmt-service" + deps: + nodes: + - "sequencer-0" + - "sequencer-1" + - "sequencer-2" + - "rpc-0" + - "rpc-1" + - "rpc-2" + - "snapsync-0" + - "snapsync-1" + - "snapsync-2" + + - kind: "op-conductor-mon" + name: "op-conductor-mon" + spec: + kind: "op-conductor-mon" + deps: + nodes: + - "sequencer-0" + - "sequencer-1" + - "sequencer-2" + + - kind: "op-conductor-ops" + name: "op-conductor-ops" + spec: + kind: "op-conductor-ops" + deps: + nodes: + - "sequencer-0" + - "sequencer-1" + - "sequencer-2" + + - kind: "op-dispute-mon" + name: "op-dispute-mon" + spec: + kind: "op-dispute-mon" + deps: + nodes: + - "rpc-0" + services: + - "op-supervisor-rpc-0" + + - kind: "op-challenger-runner" + name: "op-challenger-runner" + spec: + kind: "op-challenger-runner" + deps: + nodes: + - "rpc-0" + +services: + - kind: "test-runner" + name: "op-acceptor" + spec: + kind: "op-acceptor" diff --git a/templates/default-alphanet/manifest.yaml b/templates/default-alphanet/manifest.yaml new file mode 100644 index 0000000..c12864f --- /dev/null +++ b/templates/default-alphanet/manifest.yaml @@ -0,0 +1,61 @@ +name: DEVNET_NAME +type: alphanet +status: offline +deployed_on: "" +description: | + Default alphanet configuration +l1: + name: sepolia + chain_id: 11155111 +l2: + deployment: + op-deployer: + version: "" + l1-contracts: + locator: "" + version: "" + l2-contracts: + locator: "" + version: "" + overrides: + l2GenesisJovianTimeOffset: "0x0" + gas_limit: 60000000 + eip1559_elasticity: 6 + eip1559_denominator: 50 + eip1559_denominator_canyon: 250 + components: + op-batcher: + version: "" + op-challenger: + version: "" + op-conductor: + version: "" + op-geth: + version: "" + op-node: + version: "" + op-program: + version: "" + op-proposer: + version: "" + op-reth: + version: "" + proxyd: + version: "" + kona-node: + version: "" + charts: {} + bootnodes: + - enode://e63f16f93b44938a43ba8304d9948da3304e47c7a14fb1ce9d75194f2bd6784665aab18a8b38dc7772cd9a7fa71dd51997cc6cd8af0fc8915bc2fddcb68dfc87@34.123.30.27:0?discport=30305 + - enode://524958a8fc12140491f59a78442d38d1f3cb96765136379dca2ce569f0d770de25931fc11ad1bcfe1af3d4db025d23c25a401e23c91f5f53ff281f25bd36e733@34.27.92.24:0?discport=30305 + - enode://7353cf20a38a59c67139ccceaf4fa94be3487f0ace88ca368c24026f0825ff6983493a6b7c6e4286e18394880f3f450987ca1f26d848b7057e7dfdf3eb6b71a5@34.28.88.99:0?discport=30305 + chains: + - name: DEVNET_NAME-0 + chain_id: "" + features: [] + deployment: + overrides: {} + gas_limit: 60000000 + eip1559_elasticity: 6 + eip1559_denominator: 50 + eip1559_denominator_canyon: 250 diff --git a/templates/default-betanet/README.md b/templates/default-betanet/README.md new file mode 100644 index 0000000..28a1990 --- /dev/null +++ b/templates/default-betanet/README.md @@ -0,0 +1,56 @@ +# Default Betanet Template + +Multi-chain betanet template with two chains: one permissioned and one permissionless. + +## Infrastructure + +### Chains +- **Chain 0** (Permissioned) +- **Chain 1** (Permissionless with `fp-permissionless` feature) + +### Nodes (per chain) +- **3 Sequencer nodes** + - 2x op-geth (full) + - 1x op-reth (full) +- **2 RPC nodes** + - 1x op-geth (archive) + - 1x op-reth (archive) +- **2 Snapsync nodes** + - 1x op-geth (full) + - 1x op-reth (full) + +### Services (per chain) +- `op-proposer` - L2 output proposals +- `op-batcher` - Transaction batching to L1 +- `op-challenger` - Dispute resolution +- `proxyd-public` - Public RPC load balancer +- `peer-mgmt-service` - P2P peer management +- `op-conductor-mon` - Conductor monitoring +- `op-conductor-ops` - Conductor operations +- `op-dispute-mon` - Dispute monitoring +- `op-faucet` - Testnet faucet + +### Chain-Specific Services +- **Chain 1 only**: `op-challenger-runner` - Automated challenger + +### Global Services +- `op-acceptor` - Test runner + +## Configuration + +### Manifest +- **Type**: betanet +- **L1**: Sepolia +- **Genesis offset**: `l2GenesisIsthmusTimeOffset: "0x0"` + +### Components +Includes all standard betanet components: +- op-batcher +- op-challenger +- op-conductor +- op-geth +- op-node +- op-program +- op-proposer +- op-reth +- proxyd diff --git a/templates/default-betanet/inventory.yaml b/templates/default-betanet/inventory.yaml new file mode 100644 index 0000000..99b95f8 --- /dev/null +++ b/templates/default-betanet/inventory.yaml @@ -0,0 +1,392 @@ +chains: + - nodes: + - kind: "node" + name: "sequencer-0" + spec: + kind: "sequencer" + el: + kind: "op-geth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "sequencer-1" + spec: + kind: "sequencer" + el: + kind: "op-geth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "sequencer-2" + spec: + kind: "sequencer" + el: + kind: "op-reth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "rpc-0" + spec: + kind: "rpc" + el: + kind: "op-geth" + spec: + kind: "archive" + cl: + kind: "op-node" + + - kind: "node" + name: "rpc-1" + spec: + kind: "rpc" + el: + kind: "op-reth" + spec: + kind: "archive" + cl: + kind: "op-node" + + - kind: "node" + name: "rpc-2" + spec: + kind: "rpc" + el: + kind: "op-reth" + spec: + kind: "archive" + cl: + kind: "kona-node" + + - kind: "node" + name: "snapsync-0" + spec: + kind: "snapsync" + el: + kind: "op-geth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "snapsync-1" + spec: + kind: "snapsync" + el: + kind: "op-reth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "snapsync-2" + spec: + kind: "snapsync" + el: + kind: "op-geth" + spec: + kind: "full" + cl: + kind: "kona-node" + + services: + - kind: "proposer" + name: "op-proposer" + spec: + kind: "op-proposer" + deps: + nodes: + - "rpc-0" + + - kind: "batcher" + name: "op-batcher" + spec: + kind: "op-batcher" + deps: + nodes: + - "sequencer-0" + - "sequencer-1" + - "sequencer-2" + + - kind: "challenger" + name: "op-challenger" + spec: + kind: "op-challenger" + deps: + nodes: + - "rpc-0" + + - kind: "public-rpc" + name: "proxyd-public" + spec: + kind: "proxyd" + deps: + nodes: + - "rpc-0" + - "rpc-1" + - "rpc-2" + + - kind: "peer-mgmt-service" + name: "peer-mgmt-service" + spec: + kind: "peer-mgmt-service" + deps: + nodes: + - "sequencer-0" + - "sequencer-1" + - "sequencer-2" + - "rpc-0" + - "rpc-1" + - "rpc-2" + - "snapsync-0" + - "snapsync-1" + - "snapsync-2" + + - kind: "op-conductor-mon" + name: "op-conductor-mon" + spec: + kind: "op-conductor-mon" + deps: + nodes: + - "sequencer-0" + - "sequencer-1" + - "sequencer-2" + + - kind: "op-conductor-ops" + name: "op-conductor-ops" + spec: + kind: "op-conductor-ops" + deps: + nodes: + - "sequencer-0" + - "sequencer-1" + - "sequencer-2" + + - kind: "op-dispute-mon" + name: "op-dispute-mon" + spec: + kind: "op-dispute-mon" + deps: + nodes: + - "rpc-0" + + - kind: "faucet" + name: "op-faucet" + spec: + kind: "op-faucet" + deps: + nodes: + - "rpc-0" + + - nodes: + - kind: "node" + name: "sequencer-0" + spec: + kind: "sequencer" + el: + kind: "op-geth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "sequencer-1" + spec: + kind: "sequencer" + el: + kind: "op-geth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "sequencer-2" + spec: + kind: "sequencer" + el: + kind: "op-reth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "rpc-0" + spec: + kind: "rpc" + el: + kind: "op-geth" + spec: + kind: "archive" + cl: + kind: "op-node" + + - kind: "node" + name: "rpc-1" + spec: + kind: "rpc" + el: + kind: "op-reth" + spec: + kind: "archive" + cl: + kind: "op-node" + + - kind: "node" + name: "rpc-2" + spec: + kind: "rpc" + el: + kind: "op-reth" + spec: + kind: "archive" + cl: + kind: "kona-node" + + - kind: "node" + name: "snapsync-0" + spec: + kind: "snapsync" + el: + kind: "op-geth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "snapsync-1" + spec: + kind: "snapsync" + el: + kind: "op-reth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "snapsync-2" + spec: + kind: "snapsync" + el: + kind: "op-geth" + spec: + kind: "full" + cl: + kind: "kona-node" + + services: + - kind: "proposer" + name: "op-proposer" + spec: + kind: "op-proposer" + deps: + nodes: + - "rpc-0" + + - kind: "batcher" + name: "op-batcher" + spec: + kind: "op-batcher" + deps: + nodes: + - "sequencer-0" + - "sequencer-1" + - "sequencer-2" + + - kind: "challenger" + name: "op-challenger" + spec: + kind: "op-challenger" + deps: + nodes: + - "rpc-0" + + - kind: "public-rpc" + name: "proxyd-public" + spec: + kind: "proxyd" + deps: + nodes: + - "rpc-0" + - "rpc-1" + - "rpc-2" + + - kind: "peer-mgmt-service" + name: "peer-mgmt-service" + spec: + kind: "peer-mgmt-service" + deps: + nodes: + - "sequencer-0" + - "sequencer-1" + - "sequencer-2" + - "rpc-0" + - "rpc-1" + - "rpc-2" + - "snapsync-0" + - "snapsync-1" + - "snapsync-2" + + - kind: "op-conductor-mon" + name: "op-conductor-mon" + spec: + kind: "op-conductor-mon" + deps: + nodes: + - "sequencer-0" + - "sequencer-1" + - "sequencer-2" + + - kind: "op-conductor-ops" + name: "op-conductor-ops" + spec: + kind: "op-conductor-ops" + deps: + nodes: + - "sequencer-0" + - "sequencer-1" + - "sequencer-2" + + - kind: "op-dispute-mon" + name: "op-dispute-mon" + spec: + kind: "op-dispute-mon" + deps: + nodes: + - "rpc-0" + + - kind: "op-challenger-runner" + name: "op-challenger-runner" + spec: + kind: "op-challenger-runner" + deps: + nodes: + - "rpc-0" + + - kind: "faucet" + name: "op-faucet" + spec: + kind: "op-faucet" + deps: + nodes: + - "rpc-0" + +services: + - kind: "test-runner" + name: "op-acceptor" + spec: + kind: "op-acceptor" diff --git a/templates/default-betanet/manifest.yaml b/templates/default-betanet/manifest.yaml new file mode 100644 index 0000000..face7ed --- /dev/null +++ b/templates/default-betanet/manifest.yaml @@ -0,0 +1,63 @@ +name: DEVNET_NAME +type: betanet +status: offline +deployed_on: "" +description: | + Default betanet configuration with two chains one permissioned and one permissionless +l1: + name: sepolia + chain_id: 11155111 +l2: + deployment: + op-deployer: + version: "" + l1-contracts: + locator: "" + version: "" + l2-contracts: + locator: "" + version: "" + overrides: + l2GenesisJovianTimeOffset: "0x0" + gas_limit: 60000000 + eip1559_elasticity: 6 + eip1559_denominator: 50 + eip1559_denominator_canyon: 250 + components: + op-batcher: + version: "" + op-challenger: + version: "" + op-conductor: + version: "" + op-geth: + version: "" + op-node: + version: "" + op-program: + version: "" + op-proposer: + version: "" + op-reth: + version: "" + proxyd: + version: "" + kona-node: + version: "" + charts: {} + bootnodes: + - enode://e63f16f93b44938a43ba8304d9948da3304e47c7a14fb1ce9d75194f2bd6784665aab18a8b38dc7772cd9a7fa71dd51997cc6cd8af0fc8915bc2fddcb68dfc87@34.123.30.27:0?discport=30305 + - enode://524958a8fc12140491f59a78442d38d1f3cb96765136379dca2ce569f0d770de25931fc11ad1bcfe1af3d4db025d23c25a401e23c91f5f53ff281f25bd36e733@34.27.92.24:0?discport=30305 + - enode://7353cf20a38a59c67139ccceaf4fa94be3487f0ace88ca368c24026f0825ff6983493a6b7c6e4286e18394880f3f450987ca1f26d848b7057e7dfdf3eb6b71a5@34.28.88.99:0?discport=30305 + chains: + - name: DEVNET_NAME-0 + chain_id: "" + features: [] + deployment: + overrides: {} + - name: DEVNET_NAME-1 + chain_id: "" + features: + - fp-permissionless + deployment: + overrides: {} diff --git a/templates/default-reth/inventory.yaml b/templates/default-reth/inventory.yaml new file mode 100644 index 0000000..f4eb3f6 --- /dev/null +++ b/templates/default-reth/inventory.yaml @@ -0,0 +1,122 @@ +chains: + - nodes: + - kind: "node" + name: "sequencer-0" + spec: + kind: "sequencer" + el: + kind: "op-reth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "sequencer-1" + spec: + kind: "sequencer" + el: + kind: "op-reth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "sequencer-2" + spec: + kind: "sequencer" + el: + kind: "op-reth" + spec: + kind: "full" + cl: + kind: "op-node" + + - kind: "node" + name: "rpc-0" + spec: + kind: "rpc" + el: + kind: "op-reth" + spec: + kind: "archive" + cl: + kind: "op-node" + + - kind: "node" + name: "rpc-1" + spec: + kind: "rpc" + el: + kind: "op-reth" + spec: + kind: "archive" + cl: + kind: "kona-node" + + services: + - kind: "batcher" + name: "op-batcher" + spec: + kind: "op-batcher" + deps: + nodes: + - "sequencer-0" + - "sequencer-1" + - "sequencer-2" + + - kind: "public-rpc" + name: "proxyd-public" + spec: + kind: "proxyd" + deps: + nodes: + - "rpc-0" + - "rpc-1" + + - kind: "peer-mgmt-service" + name: "peer-mgmt-service" + spec: + kind: "peer-mgmt-service" + deps: + nodes: + - "sequencer-0" + - "sequencer-1" + - "sequencer-2" + - "rpc-0" + - "rpc-1" + + - kind: "op-conductor-mon" + name: "op-conductor-mon" + spec: + kind: "op-conductor-mon" + deps: + nodes: + - "sequencer-0" + - "sequencer-1" + - "sequencer-2" + + - kind: "op-conductor-ops" + name: "op-conductor-ops" + spec: + kind: "op-conductor-ops" + deps: + nodes: + - "sequencer-0" + - "sequencer-1" + - "sequencer-2" + + - kind: "faucet" + name: "op-faucet" + spec: + kind: "op-faucet" + deps: + nodes: + - "rpc-0" + +services: + - kind: "test-runner" + name: "op-acceptor" + spec: + kind: "op-acceptor" diff --git a/templates/default-reth/manifest.yaml b/templates/default-reth/manifest.yaml new file mode 100644 index 0000000..4b84dfe --- /dev/null +++ b/templates/default-reth/manifest.yaml @@ -0,0 +1,57 @@ +name: DEVNET_NAME +type: alphanet +status: offline +deployed_on: "" +description: | + Default devnet configuration with a reth focus +l1: + name: sepolia + chain_id: 11155111 +l2: + deployment: + op-deployer: + version: "" + l1-contracts: + locator: "" + version: "" + l2-contracts: + locator: "" + version: "" + overrides: + l2GenesisJovianTimeOffset: "0x0" + gas_limit: 60000000 + eip1559_elasticity: 6 + eip1559_denominator: 50 + eip1559_denominator_canyon: 250 + components: + op-batcher: + version: "" + op-challenger: + version: "" + op-conductor: + version: "" + op-geth: + version: "" + op-node: + version: "" + op-program: + version: "" + op-proposer: + version: "" + op-reth: + version: "" + proxyd: + version: "" + kona-node: + version: "" + charts: {} + bootnodes: + - enode://e63f16f93b44938a43ba8304d9948da3304e47c7a14fb1ce9d75194f2bd6784665aab18a8b38dc7772cd9a7fa71dd51997cc6cd8af0fc8915bc2fddcb68dfc87@34.123.30.27:0?discport=30305 + - enode://524958a8fc12140491f59a78442d38d1f3cb96765136379dca2ce569f0d770de25931fc11ad1bcfe1af3d4db025d23c25a401e23c91f5f53ff281f25bd36e733@34.27.92.24:0?discport=30305 + - enode://7353cf20a38a59c67139ccceaf4fa94be3487f0ace88ca368c24026f0825ff6983493a6b7c6e4286e18394880f3f450987ca1f26d848b7057e7dfdf3eb6b71a5@34.28.88.99:0?discport=30305 + chains: + - name: DEVNET_NAME-0 + chain_id: "" + features: [] + deployment: + overrides: {} diff --git a/templates/justfile b/templates/justfile new file mode 100644 index 0000000..b9b7638 --- /dev/null +++ b/templates/justfile @@ -0,0 +1,92 @@ +# Shared devnet management commands +# This file can be used standalone or imported by other repositories + +# Show available commands and usage +default: + @echo "Devnet Management Commands" + @echo "==========================" + @echo "" + @echo "Usage: just [arguments]" + @echo "" + @echo "Commands:" + @echo " list-templates" + @echo " List all available devnet templates" + @echo "" + @echo " create-devnet