Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
568799b
feat: Aztec sequencers integration
khalifaa55 Dec 17, 2025
45d2176
feat: add templates
khalifaa55 Dec 18, 2025
9a17a0a
feat: add generate aztec sequencer command
khalifaa55 Dec 19, 2025
f13ef8b
chore: update changelog
khalifaa55 Dec 19, 2025
451868c
fix: generation script
khalifaa55 Dec 19, 2025
14c167d
fix: add keystore test data
khalifaa55 Dec 19, 2025
8eb2341
feat: add cli command ans tests
khalifaa55 Dec 23, 2025
8b7099d
fix: format
khalifaa55 Dec 23, 2025
9b7b5f0
feat: add extra flags option
khalifaa55 Dec 23, 2025
5be9860
fix: update formatting
khalifaa55 Dec 23, 2025
03e600b
feat: add aztec full node integration
khalifaa55 Jan 8, 2026
2acad9f
chore: update changelog
khalifaa55 Jan 8, 2026
52c0533
fix: remove old aztec sequencer variables
khalifaa55 Jan 8, 2026
147f81d
fix: args test
khalifaa55 Jan 8, 2026
fef9544
refac: rename aztec full node value
khalifaa55 Jan 8, 2026
09a0f0a
fix: update e2e test
khalifaa55 Jan 8, 2026
452a55b
refac: address coments
khalifaa55 Jan 13, 2026
69b12a7
fix: adjust formatting
khalifaa55 Jan 13, 2026
14b3fff
fix: execution engine name
khalifaa55 Jan 13, 2026
e62e01c
refac: aztec image logic
khalifaa55 Jan 13, 2026
7756a21
fix: update aztec template
khalifaa55 Jan 22, 2026
4238354
fix: remove optimism from aztec cli
khalifaa55 Jan 22, 2026
0166bd3
fix: update tests
khalifaa55 Jan 22, 2026
b20d40c
refac: p2p ip required for both fullnode and sequencers
khalifaa55 Jan 27, 2026
e5831f1
refac: remove extra cli prompt for aztec
khalifaa55 Jan 27, 2026
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,4 @@ node*/

keystore*
!cli/actions/testdata/charon/validator_keys/keystore*
!cli/testdata/cli_tests/aztec_keystore/**/keystore.json
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added
- New command `sedge generate aztec` to generate an Aztec node setup.
- Support for Aztec Sequencer on Sepolia and Mainnet networks.
- Support for Aztec Full Node on Sepolia and Mainnet networks.

## [v1.10.0] - 2025-11-12

### Changed
Expand Down
15 changes: 15 additions & 0 deletions cli/actions/generation.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ import (
"os"
"path/filepath"

"github.com/NethermindEth/sedge/internal/utils"

"github.com/NethermindEth/sedge/configs"
"github.com/NethermindEth/sedge/internal/pkg/generate"
log "github.com/sirupsen/logrus"
Expand Down Expand Up @@ -53,6 +55,19 @@ func (s *sedgeActions) Generate(options GenerateOptions) (generate.GenData, erro
options.GenerationData.CustomGenesisPath = customConfigsPaths.GenesisPath
options.GenerationData.CustomDeployBlockPath = customConfigsPaths.DeployBlockPath

// If Aztec sequencer mode is used, copy the keystore.json into the generation directory
if options.GenerationData.AztecNodeType == "sequencer" && options.GenerationData.AztecSequencerKeystorePath != "" {
relKeystorePath := "./.aztec/keystore/key1.json"
absKeystorePath := filepath.Join(options.GenerationPath, ".aztec", "keystore", "key1.json")
if err := os.MkdirAll(filepath.Dir(absKeystorePath), 0o755); err != nil {
return options.GenerationData, err
}
if err := utils.CopyFile(options.GenerationData.AztecSequencerKeystorePath, absKeystorePath); err != nil {
return options.GenerationData, err
}
options.GenerationData.AztecSequencerKeystorePath = relKeystorePath
}

log.Info(configs.GeneratingDockerComposeScript)
// open output file
out, err := os.Create(filepath.Join(options.GenerationPath, configs.DefaultDockerComposeScriptName))
Expand Down
123 changes: 122 additions & 1 deletion cli/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package cli
import (
"errors"
"fmt"
"net"
"os"
"path/filepath"
"strings"
Expand Down Expand Up @@ -50,6 +51,7 @@ const (
NodeTypeExecution = "execution"
NodeTypeConsensus = "consensus"
NodeTypeValidator = "validator"
NodeTypeAztec = "aztec"

Randomize = "randomize"

Expand Down Expand Up @@ -98,6 +100,7 @@ func CliCmd(p ui.Prompter, actions actions.SedgeActions, depsMgr dependencies.De
- Execution Node
- Consensus Node
- Validator Node
- Aztec Node (execution + consensus + aztec)
- Lido CSM Node

Follow the prompts to select the options you want for your node. At the end of the process, you will
Expand All @@ -123,13 +126,81 @@ using docker compose command behind the scenes.
return setupConsensusNode(p, o, actions, depsMgr, monitoringMgr)
case NodeTypeValidator:
return setupValidatorNode(p, o, actions, depsMgr, monitoringMgr)
case NodeTypeAztec:
return setupAztecSequencerNode(p, o, actions, depsMgr, monitoringMgr)
}
return nil
},
}
return cmd
}

func setupAztecSequencerNode(p ui.Prompter, o *CliCmdOptions, a actions.SedgeActions, depsManager dependencies.DependenciesManager, monitoringMgr MonitoringManager) (err error) {
o.genData.Services = []string{"execution", "consensus", aztec}

if o.genData.Network == NetworkCustom {
if err := runPromptActions(p, o,
inputCustomNetworkConfig,
inputCustomChainSpec,
inputCustomGenesis,
inputCustomDeployBlock,
inputExecutionBootNodes,
inputConsensusBootNodes,
); err != nil {
return err
}
}

if err := runPromptActions(p, o,
selectExecutionClient,
selectConsensusClient,
selectAztecClient,
selectAztecNodeType,
); err != nil {
return err
}
// P2P IP is required for both full node and sequencer
if err := runPromptActions(p, o,
inputAztecP2pIP,
); err != nil {
return err
}
// Keystore is only required for sequencer
if o.genData.AztecNodeType == aztecNodeTypeSequencer {
if err := runPromptActions(p, o,
inputAztecSequencerKeystorePath,
); err != nil {
return err
}
}
if err := runPromptActions(p, o,
inputCheckpointSyncURL,
inputFeeRecipientNoValidator,
); err != nil {
return err
}

if err := confirmExposeAllPorts(p, o); err != nil {
return err
}
if err := setupJWT(p, o, false); err != nil {
return err
}
if err := confirmEnableMonitoring(p, o); err != nil {
return err
}

// Call generate action
o.genData, err = a.Generate(actions.GenerateOptions{
GenerationData: o.genData,
GenerationPath: o.generationPath,
})
if err != nil {
return err
}
return postGenerate(p, o, a, depsManager, monitoringMgr)
}

func setupFullNode(p ui.Prompter, o *CliCmdOptions, a actions.SedgeActions, depsManager dependencies.DependenciesManager, monitoringMgr MonitoringManager) (err error) {
o.genData.Services = []string{"execution", "consensus"}
if err := confirmWithValidator(p, o); err != nil {
Expand Down Expand Up @@ -376,6 +447,8 @@ func postGenerate(p ui.Prompter, o *CliCmdOptions, a actions.SedgeActions, depsM
services = []string{"consensus"}
case NodeTypeValidator:
services = []string{"validator"}
case NodeTypeAztec:
services = []string{"execution", "consensus", aztec}
}
run, err := p.Confirm("Run services now?", false)
if err != nil {
Expand Down Expand Up @@ -666,7 +739,7 @@ func selectNetwork(p ui.Prompter, o *CliCmdOptions) error {
}

func selectNodeType(p ui.Prompter, o *CliCmdOptions) error {
options := []string{NodeTypeFullNode, NodeTypeExecution, NodeTypeConsensus, NodeTypeValidator}
options := []string{NodeTypeFullNode, NodeTypeExecution, NodeTypeConsensus, NodeTypeValidator, NodeTypeAztec}
index, err := p.Select("Select node type", "", options)
if err != nil {
return err
Expand All @@ -675,6 +748,54 @@ func selectNodeType(p ui.Prompter, o *CliCmdOptions) error {
return nil
}

func selectAztecClient(p ui.Prompter, o *CliCmdOptions) (err error) {
selectedAztecClient := "aztec"
o.genData.AztecClient = &clients.Client{
Name: selectedAztecClient,
Type: aztec,
}
o.genData.AztecClient.SetImageOrDefault("")
return nil
}

func selectAztecNodeType(p ui.Prompter, o *CliCmdOptions) (err error) {
options := []string{aztecNodeTypeFullNode, aztecNodeTypeSequencer}
index, err := p.Select("Select aztec node type", "", options)
if err != nil {
return err
}
o.genData.AztecNodeType = options[index]
return nil
}

func inputAztecSequencerKeystorePath(p ui.Prompter, o *CliCmdOptions) (err error) {
path, err := p.InputFilePath("Aztec sequencer keystore.json path", "", true, ".json")
if err != nil {
return err
}
abs, err := loadAztecSequencerKeystore(path)
if err != nil {
return err
}
o.genData.AztecSequencerKeystorePath = abs
return nil
}

func inputAztecP2pIP(p ui.Prompter, o *CliCmdOptions) (err error) {
ip, err := p.Input("Aztec node P2P IP address", "", true, func(s string) error {
parsed := net.ParseIP(s)
if parsed == nil {
return fmt.Errorf("invalid IP address: %s", s)
}
return nil
})
if err != nil {
return err
}
o.genData.AztecP2pIp = ip
return nil
}

func selectExecutionClient(p ui.Prompter, o *CliCmdOptions) (err error) {
c := clients.ClientInfo{Network: o.genData.Network}
supportedClients, err := c.SupportedClients(execution)
Expand Down
Loading
Loading