-
Notifications
You must be signed in to change notification settings - Fork 3.5k
/
Copy pathrollup.go
90 lines (74 loc) · 2.48 KB
/
rollup.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package inspect
import (
"fmt"
"github.com/ethereum-optimism/optimism/op-chain-ops/deployer/pipeline"
"github.com/ethereum-optimism/optimism/op-chain-ops/deployer/state"
"github.com/ethereum-optimism/optimism/op-chain-ops/genesis"
"github.com/ethereum-optimism/optimism/op-node/rollup"
"github.com/ethereum-optimism/optimism/op-service/ioutil"
"github.com/ethereum-optimism/optimism/op-service/jsonutil"
"github.com/ethereum/go-ethereum/common"
"github.com/urfave/cli/v2"
)
func RollupCLI(cliCtx *cli.Context) error {
cfg, err := readConfig(cliCtx)
if err != nil {
return err
}
env := &pipeline.Env{Workdir: cfg.Workdir}
globalState, err := env.ReadState()
if err != nil {
return fmt.Errorf("failed to read intent: %w", err)
}
rollupConfig, err := Rollup(globalState, cfg.ChainID)
if err != nil {
return fmt.Errorf("failed to generate rollup config: %w", err)
}
if err := jsonutil.WriteJSON(rollupConfig, ioutil.ToStdOutOrFileOrNoop(cfg.Outfile, 0o666)); err != nil {
return fmt.Errorf("failed to write rollup config: %w", err)
}
return nil
}
func Rollup(globalState *state.State, chainID common.Hash) (*rollup.Config, error) {
if globalState.AppliedIntent == nil {
return nil, fmt.Errorf("chain state is not applied - run op-deployer apply")
}
chainIntent, err := globalState.AppliedIntent.Chain(chainID)
if err != nil {
return nil, fmt.Errorf("failed to get applied chain intent: %w", err)
}
chainState, err := globalState.Chain(chainID)
if err != nil {
return nil, fmt.Errorf("failed to get chain ID %s: %w", chainID.String(), err)
}
l2Allocs, err := chainState.UnmarshalGenesis()
if err != nil {
return nil, fmt.Errorf("failed to unmarshal genesis: %w", err)
}
config, err := state.CombineDeployConfig(
globalState.AppliedIntent,
chainIntent,
globalState,
chainState,
)
if err != nil {
return nil, fmt.Errorf("failed to combine L2 init config: %w", err)
}
l2GenesisBuilt, err := genesis.BuildL2Genesis(&config, l2Allocs, chainState.StartBlock)
if err != nil {
return nil, fmt.Errorf("failed to build L2 genesis: %w", err)
}
l2GenesisBlock := l2GenesisBuilt.ToBlock()
rollupConfig, err := config.RollupConfig(
chainState.StartBlock,
l2GenesisBlock.Hash(),
l2GenesisBlock.Number().Uint64(),
)
if err != nil {
return nil, fmt.Errorf("failed to build rollup config: %w", err)
}
if err := rollupConfig.Check(); err != nil {
return nil, fmt.Errorf("generated rollup config does not pass validation: %w", err)
}
return rollupConfig, nil
}