Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var Subcommands = cli.Commands{ { Name: "devnet", Usage: "Initialize new L1 and L2 genesis files and rollup config suitable for a local devnet", Flags: []cli.Flag{ cli.StringFlag{ Name: "deploy-config", Usage: "Path to hardhat deploy config file", }, cli.StringFlag{ Name: "outfile.l1", Usage: "Path to L1 genesis output file", }, cli.StringFlag{ Name: "outfile.l2", Usage: "Path to L2 genesis output file", }, cli.StringFlag{ Name: "outfile.rollup", Usage: "Path to rollup output file", }, }, Action: func(ctx *cli.Context) error { deployConfig := ctx.String("deploy-config") config, err := genesis.NewDeployConfig(deployConfig) if err != nil { return err } l1Genesis, err := genesis.BuildL1DeveloperGenesis(config) if err != nil { return err } l1StartBlock := l1Genesis.ToBlock() l2Genesis, err := genesis.BuildL2DeveloperGenesis(config, l1StartBlock, nil) if err != nil { return err } rollupConfig := makeRollupConfig(config, l1StartBlock, l2Genesis, predeploys.DevOptimismPortalAddr, predeploys.DevSystemConfigAddr) if err := writeGenesisFile(ctx.String("outfile.l1"), l1Genesis); err != nil { return err } if err := writeGenesisFile(ctx.String("outfile.l2"), l2Genesis); err != nil { return err } return writeGenesisFile(ctx.String("outfile.rollup"), rollupConfig) }, }, { Name: "l2", Usage: "Generates an L2 genesis file and rollup config suitable for a deployed network", Flags: []cli.Flag{ cli.StringFlag{ Name: "l1-rpc", Usage: "L1 RPC URL", }, cli.StringFlag{ Name: "deploy-config", Usage: "Path to hardhat deploy config file", }, cli.StringFlag{ Name: "deployment-dir", Usage: "Path to deployment directory", }, cli.StringFlag{ Name: "outfile.l2", Usage: "Path to L2 genesis output file", }, cli.StringFlag{ Name: "outfile.rollup", Usage: "Path to rollup output file", }, }, Action: func(ctx *cli.Context) error { deployConfig := ctx.String("deploy-config") config, err := genesis.NewDeployConfig(deployConfig) if err != nil { return err } if config.L1StartingBlockTag == nil { return errors.New("must specify a starting block tag in genesis") } if config.L2GenesisBlockGasLimit == 0 { config.L2GenesisBlockGasLimit = 15_000_000 } client, err := ethclient.Dial(ctx.String("l1-rpc")) if err != nil { return err } var l1StartBlock *types.Block if config.L1StartingBlockTag.BlockHash != nil { l1StartBlock, err = client.BlockByHash(context.Background(), *config.L1StartingBlockTag.BlockHash) } else if config.L1StartingBlockTag.BlockNumber != nil { l1StartBlock, err = client.BlockByNumber(context.Background(), big.NewInt(config.L1StartingBlockTag.BlockNumber.Int64())) } if err != nil { return fmt.Errorf("error getting l1 start block: %w", err) } depPath, network := filepath.Split(ctx.String("deployment-dir")) hh, err := hardhat.New(network, nil, []string{depPath}) if err != nil { return err } l1SBP, err := hh.GetDeployment("L1StandardBridgeProxy") if err != nil { return err } l1XDMP, err := hh.GetDeployment("L1CrossDomainMessengerProxy") if err != nil { return err } portalProxy, err := hh.GetDeployment("OptimismPortalProxy") if err != nil { return err } sysCfgProxy, err := hh.GetDeployment("SystemConfigProxy") if err != nil { return err } l1ERC721BP, err := hh.GetDeployment("L1ERC721BridgeProxy") if err != nil { return err } l2Addrs := &genesis.L2Addresses{ ProxyAdminOwner: config.ProxyAdminOwner, L1StandardBridgeProxy: l1SBP.Address, L1CrossDomainMessengerProxy: l1XDMP.Address, L1ERC721BridgeProxy: l1ERC721BP.Address, } l2Genesis, err := genesis.BuildL2DeveloperGenesis(config, l1StartBlock, l2Addrs) if err != nil { return fmt.Errorf("error creating l2 developer genesis: %w", err) } rollupConfig := makeRollupConfig(config, l1StartBlock, l2Genesis, portalProxy.Address, sysCfgProxy.Address) if err := rollupConfig.Check(); err != nil { return fmt.Errorf("generated rollup config does not pass validation: %w", err) } if err := writeGenesisFile(ctx.String("outfile.l2"), l2Genesis); err != nil { return err } return writeGenesisFile(ctx.String("outfile.rollup"), rollupConfig) }, }, }
Functions ¶
This section is empty.
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.