Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
120 changes: 120 additions & 0 deletions espresso_e2e/nitro/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
services:
demo-l1-network:
image: ghcr.io/espressosystems/timeboost/geth-l1:rollup-creator-round2
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why are we using timeboost image?

Copy link
Copy Markdown
Contributor Author

@lukeiannucci lukeiannucci May 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this was a prebuilt l1 image we used for timeboost. i will move away from this.

command: --dev --dev.period=1 --verbosity=2
ports:
- 8545:8545
- 8546:8546
espresso-dev-node:
image: ghcr.io/espressosystems/espresso-sequencer/espresso-dev-node:release-20251120-lip2p-tcp-3855
ports:
- "41000:41000"
- "41003:41003"
- "20000:20000"
environment:
- ESPRESSO_BUILDER_PORT=41003
- ESPRESSO_DEPLOYER_ACCOUNT_INDEX=5
- ESPRESSO_DEV_NODE_PORT=20000
- ESPRESSO_SEQUENCER_API_PORT=41000
- ESPRESSO_SEQUENCER_ETH_MNEMONIC=indoor dish desk flag debris potato excuse depart ticket judge file exit
- ESPRESSO_SEQUENCER_L1_PROVIDER=http://demo-l1-network:8545
- ESPRESSO_SEQUENCER_DATABASE_MAX_CONNECTIONS=25
- ESPRESSO_DEV_NODE_EPOCH_HEIGHT=1000000
- ESPRESSO_DEV_NODE_MAX_BLOCK_SIZE=10485760
- ESPRESSO_SEQUENCER_STORAGE_PATH=/data/espresso
- RUST_LOG=WARN
- RUST_LOG_FORMAT
- ESPRESSO_DEV_NODE_VERSION=0.4
volumes:
- espresso_storage:/data/espresso
depends_on:
demo-l1-network:
condition: service_healthy
healthcheck:
test:
[
"CMD",
"curl",
"-s",
"-X",
"POST",
"--data",
'{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}',
"-H",
"Content-Type: application/json",
"http://localhost:8545",
]
interval: 5s
timeout: 3s
retries: 10

rollup-creator:
image: ghcr.io/espressosystems/timeboost/rollup-creator:rpc
volumes:
- "config:/config"
- "./nitro-config:/nitro-config"
environment:
AUTHORIZE_VALIDATORS: 10
CHAIN_DEPLOYMENT_INFO: "/config/deployment.json"
CHILD_CHAIN_CONFIG_PATH: "/nitro-config/l2_chain_config.json"
CHILD_CHAIN_INFO: "/config/deployed_chain_info.json"
CHILD_CHAIN_NAME: "arb-dev-test"
DEPLOYER_PRIVKEY: 0x4f3edf983ac636a65a842ce7c78d9aa706d3b113b37f60c1b6d9d1f0a5b2b5ff
MAX_DATA_SIZE: 117964
OWNER_ADDRESS: 0x3f1Eae7D46d88F08fc2F8ed27FCb2AB183EB2d0E
PARENT_CHAIN_ID: 1337
PARENT_CHAIN_RPC: "http://demo-l1-network:8545"
SEQUENCER_ADDRESS: 0x2F1eAe7Dd46D88f08fC2f8ED27Fcb2Ab183eb2d0
WASM_MODULE_ROOT: 0xdb698a2576298f25448bc092e52cf13b1e24141c997135d70f217d674bbeb69a
command: ["create-rollup-testnode"]
depends_on:
demo-l1-network:
condition: service_healthy

nitro:
image: ghcr.io/espressosystems/nitro-espresso-integration/nitro-node:integration-v3.9.8
entrypoint: /usr/local/bin/nitro
ports:
- "8547:8547"
- "8548:8548"
- "9642:9642"
volumes:
- "nitro:/home/user/.arbitrum/local/nitro"
- "l1keystore:/home/user/l1keystore"
- "config:/config"
- "./nitro-config:/nitro-config"
command:
- --conf.file=/nitro-config/nitro_config.json
- --node.feed.output.enable
- --node.feed.output.port=9642
- --http.api=net,web3,eth,txpool,debug,timeboost,auctioneer,batcher
- --node.seq-coordinator.my-url=http://nitro:8547
- --graphql.enable
- --graphql.vhosts=*
- --graphql.corsdomain=*
depends_on:
rollup-creator:
condition: service_completed_successfully
healthcheck:
test:
[
"CMD",
"curl",
"-s",
"-X",
"POST",
"--data",
'{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"id\":1}',
"-H",
"Content-Type: application/json",
"http://localhost:8547",
]
interval: 5s
timeout: 3s
retries: 12

volumes:
config:
l1keystore:
espresso_storage:
nitro:
33 changes: 33 additions & 0 deletions espresso_e2e/nitro/nitro-config/l2_chain_config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"chainId": 412346,
"homesteadBlock": 0,
"daoForkSupport": true,
"eip150Block": 0,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"muirGlacierBlock": 0,
"berlinBlock": 0,
"londonBlock": 0,
"clique": {
"period": 0,
"epoch": 0
},
"alloc": {
"0x3f1eae7d46d88f08fc2f8ed27fcb2ab183eb2d0e": {
"balance": "0x21e19e0c9bab2400000"
}
},
"arbitrum": {
"EnableArbOS": true,
"AllowDebugPrecompiles": true,
"DataAvailabilityCommittee": false,
"InitialArbOSVersion": 40,
"InitialChainOwner": "0x3f1eae7d46d88f08fc2f8ed27fcb2ab183eb2d0e",
"GenesisBlockNum": 0
}
}
141 changes: 141 additions & 0 deletions espresso_e2e/nitro/nitro-config/nitro_config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
{
"ensure-rollup-deployment": false,
"parent-chain": {
"connection": {
"url": "ws://demo-l1-network:8546"
}
},
"chain": {
"id": 412346,
"info-files": [
"/config/deployed_chain_info.json"
]
},
"node": {
"staker": {
"dangerous": {
"without-block-validator": false
},
"parent-chain-wallet": {
"account": "0x6A568afe0f82d34759347bb36F14A6bB171d2CBe",
"password": "passphrase",
"pathname": "/home/user/l1keystore"
},
"disable-challenge": false,
"enable": false,
"staker-interval": "10s",
"make-assertion-interval": "10s",
"strategy": "MakeNodes"
},
"sequencer": true,
"dangerous": {
"no-sequencer-coordinator": true,
"disable-blob-reader": true
},
"delayed-sequencer": {
"enable": true
},
"seq-coordinator": {
"enable": false,
"redis-url": "redis://redis:6379",
"lockout-duration": "30s",
"lockout-spare": "1s",
"my-url": "",
"retry-interval": "0.5s",
"seq-num-duration": "24h0m0s",
"update-interval": "3s"
},
"batch-poster": {
"enable": true,
"max-delay": "1m",
"l1-block-bound": "ignore",
"parent-chain-wallet": {
"private-key": "4f3edf983ac636a65a842ce7c78d9aa706d3b113b37f60c1b6d9d1f0a5b2b5ff"
},
"data-poster": {
"redis-signer": {
"signing-key": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
},
"wait-for-l1-finality": false,
"replacement-times": [
"5s",
"10s",
"20s"
]
},
"poll-interval": "10s"
},
"espresso": {
"batch-poster": {
"hotshot-first-posting-block": 0,
"hotshot-url": "http://espresso-dev-node:41000",
"resubmit-espresso-tx-deadline": "2m",
"tee-type": "SGX",
"txns-monitoring-interval": "1s"
},
"streamer": {
"txns-polling-interval": "1s"
}
},
"block-validator": {
"validation-server": {
"url": "ws://validation_node:8549",
"jwtsecret": "/config/val_jwt.hex"
}
},
"feed": {
"input": {
"url": []
},
"output": {
"enable": true,
"signed": false,
"addr": "0.0.0.0",
"port": 9642
}
},
"data-availability": {
"enable": false,
"rpc-aggregator": {
"enable": false,
"assumed-honest": 1,
"backends": [
{
"url": "http://das-committee-a:9876",
"pubkey": ""
},
{
"url": "http://das-committee-b:9876",
"pubkey": ""
}
]
},
"rest-aggregator": {
"enable": true,
"urls": [
"http://das-mirror:9877"
]
},
"parent-chain-node-url": "ws://geth:8546",
Comment thread
lukeiannucci marked this conversation as resolved.
Outdated
"sequencer-inbox-address": "0x6be3f7c539009f9b3ae2ce11e231bf064c081cd9"
}
},
"execution": {
"sequencer": {
"enable": false
},
"forwarding-target": "null"
},
"persistent": {
"chain": "local"
},
"ws": {
"addr": "0.0.0.0"
},
"http": {
"addr": "0.0.0.0",
"vhosts": "*",
"corsdomain": "*"
},
"log-level": "INFO"
}
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ go 1.25.1

require (
github.com/EspressoSystems/espresso-network/sdks/go v0.3.4
github.com/EspressoSystems/espresso-streamers v1.0.2
github.com/ccoveille/go-safecast v1.1.0
github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260429183138-dabd77150dff
github.com/ethereum-optimism/optimism v1.16.7
github.com/ethereum/go-ethereum v1.17.1
github.com/spf13/pflag v1.0.6
Expand All @@ -25,6 +24,7 @@ require (
github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect
github.com/btcsuite/btcd/btcutil v1.1.5 // indirect
github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect
github.com/ccoveille/go-safecast v1.8.2 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cockroachdb/errors v1.11.3 // indirect
github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect
Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e h1:ZIWapoIRN1VqT8GR
github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
github.com/EspressoSystems/espresso-network/sdks/go v0.3.4 h1:1hf/k2rGqIGEGQW8O3fQFltPIyxSmumph8aKIa6AjCk=
github.com/EspressoSystems/espresso-network/sdks/go v0.3.4/go.mod h1:kaxR08mJb5Mijy7a2RhWCIWOevFI4PcXwDkzoEbsVTk=
github.com/EspressoSystems/espresso-streamers v1.0.2 h1:7MV5HK0QCumv6WPQ9Z6eB9COUQHYNGbLcCqH84tHF1U=
github.com/EspressoSystems/espresso-streamers v1.0.2/go.mod h1:Op3SNwQnZ3bqwrUXMAORnL2/pNiFzpfOED4ltYs5o/U=
github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260429183138-dabd77150dff h1:yBjgxfSZuqLpJ/PB7GjwKfXpsPi8fgDcZv2Og/rNJmc=
github.com/EspressoSystems/espresso-streamers v1.0.3-0.20260429183138-dabd77150dff/go.mod h1:sKRBDnO5UMSEXDvc4kHM18GMfGCuwa5L/DSGBB2l3Qg=
github.com/EspressoSystems/optimism-espresso-integration v0.0.0-20260320193702-1e85078aed7b h1:7XWJ3ZLlYrf9Oz5BmRssllw9S60LDDF/IFPKtb4mPH4=
github.com/EspressoSystems/optimism-espresso-integration v0.0.0-20260320193702-1e85078aed7b/go.mod h1:yZLWZ4Vz0KfVVQ7XS2AD1EkSGX51MYxatscuCSQm8Ic=
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
Expand Down Expand Up @@ -51,8 +51,8 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku
github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY=
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
github.com/ccoveille/go-safecast v1.1.0 h1:iHKNWaZm+OznO7Eh6EljXPjGfGQsSfa6/sxPlIEKO+g=
github.com/ccoveille/go-safecast v1.1.0/go.mod h1:QqwNjxQ7DAqY0C721OIO9InMk9zCwcsO7tnRuHytad8=
github.com/ccoveille/go-safecast v1.8.2 h1:+d+s5UGQiCVJX9oYc8XvYcB2zCMBlax6lIP7YdxXLHA=
github.com/ccoveille/go-safecast v1.8.2/go.mod h1:M0Ubpl11x63fE7iOfk5MtngQFXsntcRzOoSsFDqQYDY=
github.com/celo-org/op-geth v1.101411.1-0.20260316145005-3a40c398c038 h1:jq/uIi/RBva6kPt103r+5UM/9iY07yLuQMnFYzibJa8=
github.com/celo-org/op-geth v1.101411.1-0.20260316145005-3a40c398c038/go.mod h1:9J7De8kDwXE/lrMgVEHc0F33TZqcN1Lb5nYaW6UZt38=
github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk=
Expand Down
41 changes: 41 additions & 0 deletions mock_light_client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package main

import (
"context"
"math/big"

opStreamer "github.com/EspressoSystems/espresso-streamers/op"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
)

const finalizedBlocks = 500

// mockLightClient implements opStreamer.LightClientCallerInterface for dev/test
// environments where the real light client contract is not available.
// It tracks the live Espresso head and returns a height lagged by finalizedBlocks.
type mockLightClient struct {
client opStreamer.EspressoClient
last uint64
}

var _ opStreamer.LightClientCallerInterface = (*mockLightClient)(nil)

func newMockLightClient(client opStreamer.EspressoClient) *mockLightClient {

Check failure on line 23 in mock_light_client.go

View workflow job for this annotation

GitHub Actions / ci

func newMockLightClient is unused (unused)
return &mockLightClient{client: client}
}

func (m *mockLightClient) FinalizedState(_ *bind.CallOpts) (opStreamer.FinalizedState, error) {
current, err := m.client.FetchLatestBlockHeight(context.Background())
result := m.last
if err == nil {
m.last = 0
if current > finalizedBlocks {
m.last = current - finalizedBlocks
}
}
return opStreamer.FinalizedState{
BlockHeight: result,
ViewNum: 0,
BlockCommRoot: big.NewInt(0),
}, nil
}
Comment thread
lukeiannucci marked this conversation as resolved.
Outdated
Loading
Loading