Skip to content

Commit 827aae3

Browse files
authored
Update signet node env (#70)
* refactor: update SignetNodeEnv structure and validation logic - Reorganized fields in SignetNodeEnv to categorize required, optional, and conditional fields. - Introduced default values for optional fields (RpcPort and WsRpcPort) and added ApplyDefaults method to set these defaults. - Enhanced validation logic to enforce conditional requirements based on the presence of ChainName. - Updated tests to cover new validation scenarios and default application for SignetNodeEnv. * style: remove unnecessary whitespace in constants.go * fix: default ports
1 parent 915ff6e commit 827aae3

File tree

4 files changed

+316
-157
lines changed

4 files changed

+316
-157
lines changed

pkg/signet_node/constants.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,13 @@ const (
2727
RollupHttpPort = 8645
2828
RollupWsPort = 8646
2929

30+
// SignetNode environment defaults
31+
DefaultSignetRpcPort = 8645
32+
DefaultSignetWsRpcPort = 8646
33+
3034
// Component name
3135
ComponentKind = "the-builder:index:SignetNode"
32-
36+
3337
// Default mount paths for volumes
3438
DefaultSignetNodeDataMountPath = "/root/.local/share/reth"
3539
DefaultRollupDataMountPath = "/root/.local/share/exex"

pkg/signet_node/types.go

Lines changed: 69 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -71,56 +71,56 @@ type SignetNodeComponent struct {
7171

7272
// Public-facing environment struct with base Go types
7373
type SignetNodeEnv struct {
74-
HostZenithAddress string `pulumi:"hostZenithAddress" validate:"required"`
75-
RuOrdersContractAddress string `pulumi:"ruOrdersContractAddress" validate:"required"`
76-
HostOrdersContractAddress string `pulumi:"hostOrdersContractAddress" validate:"required"`
77-
SignetChainId int `pulumi:"signetChainId" validate:"required"`
78-
BlobExplorerUrl string `pulumi:"blobExplorerUrl" validate:"required"`
79-
SignetStaticPath string `pulumi:"signetStaticPath" validate:"required"`
80-
SignetDatabasePath string `pulumi:"signetDatabasePath" validate:"required"`
81-
RustLog string `pulumi:"rustLog"`
82-
IpcEndpoint string `pulumi:"ipcEndpoint" validate:"required"`
83-
RpcPort int `pulumi:"rpcPort" validate:"required"`
84-
WsRpcPort int `pulumi:"wsRpcPort" validate:"required"`
85-
TxForwardUrl string `pulumi:"txForwardUrl" validate:"required"`
86-
GenesisJsonPath string `pulumi:"genesisJsonPath" validate:"required"`
87-
HostZenithDeployHeight string `pulumi:"hostZenithDeployHeight" validate:"required"`
88-
BaseFeeRecipient string `pulumi:"baseFeeRecipient" validate:"required"`
89-
HostPassageContractAddress string `pulumi:"hostPassageContractAddress" validate:"required"`
90-
HostTransactorContractAddress string `pulumi:"hostTransactorContractAddress" validate:"required"`
91-
RuPassageContractAddress string `pulumi:"ruPassageContractAddress" validate:"required"`
92-
SignetClUrl string `pulumi:"signetClUrl" validate:"required"`
93-
SignetPylonUrl string `pulumi:"signetPylonUrl" validate:"required"`
94-
HostStartTimestamp int `pulumi:"hostStartTimestamp" validate:"required"`
95-
HostSlotOffset int `pulumi:"hostSlotOffset" validate:"required"`
96-
HostSlotDuration int `pulumi:"hostSlotDuration" validate:"required"`
74+
// Always required
75+
BlobExplorerUrl string `pulumi:"blobExplorerUrl" validate:"required"`
76+
SignetStaticPath string `pulumi:"signetStaticPath" validate:"required"`
77+
SignetDatabasePath string `pulumi:"signetDatabasePath" validate:"required"`
78+
79+
// Optional with defaults (RpcPort: 5959, WsRpcPort: 5960)
80+
RpcPort int `pulumi:"rpcPort"`
81+
WsRpcPort int `pulumi:"wsRpcPort"`
82+
83+
// Optional (no defaults)
84+
ChainName string `pulumi:"chainName"`
85+
SignetClUrl string `pulumi:"signetClUrl"`
86+
SignetPylonUrl string `pulumi:"signetPylonUrl"`
87+
TxForwardUrl string `pulumi:"txForwardUrl"`
88+
IpcEndpoint string `pulumi:"ipcEndpoint"`
89+
RustLog string `pulumi:"rustLog"`
90+
91+
// Conditional: required if ChainName is not set
92+
RollupGenesisJsonPath string `pulumi:"rollupGenesisJsonPath"`
93+
HostGenesisJsonPath string `pulumi:"hostGenesisJsonPath"`
94+
StartTimestamp int `pulumi:"startTimestamp"`
95+
SlotOffset int `pulumi:"slotOffset"`
96+
SlotDuration int `pulumi:"slotDuration"`
9797
}
9898

9999
// Internal environment struct with Pulumi types
100100
type signetNodeEnvInternal struct {
101-
HostZenithAddress pulumi.StringInput `pulumi:"hostZenithAddress" validate:"required"`
102-
RuOrdersContractAddress pulumi.StringInput `pulumi:"ruOrdersContractAddress" validate:"required"`
103-
HostOrdersContractAddress pulumi.StringInput `pulumi:"hostOrdersContractAddress" validate:"required"`
104-
SignetChainId pulumi.StringInput `pulumi:"signetChainId" validate:"required"`
105-
BlobExplorerUrl pulumi.StringInput `pulumi:"blobExplorerUrl" validate:"required"`
106-
SignetStaticPath pulumi.StringInput `pulumi:"signetStaticPath" validate:"required"`
107-
SignetDatabasePath pulumi.StringInput `pulumi:"signetDatabasePath" validate:"required"`
108-
RustLog pulumi.StringInput `pulumi:"rustLog"`
109-
IpcEndpoint pulumi.StringInput `pulumi:"ipcEndpoint" validate:"required"`
110-
RpcPort pulumi.StringInput `pulumi:"rpcPort" validate:"required"`
111-
WsRpcPort pulumi.StringInput `pulumi:"wsRpcPort" validate:"required"`
112-
TxForwardUrl pulumi.StringInput `pulumi:"txForwardUrl" validate:"required"`
113-
GenesisJsonPath pulumi.StringInput `pulumi:"genesisJsonPath" validate:"required"`
114-
HostZenithDeployHeight pulumi.StringInput `pulumi:"hostZenithDeployHeight" validate:"required"`
115-
BaseFeeRecipient pulumi.StringInput `pulumi:"baseFeeRecipient" validate:"required"`
116-
HostPassageContractAddress pulumi.StringInput `pulumi:"hostPassageContractAddress" validate:"required"`
117-
HostTransactorContractAddress pulumi.StringInput `pulumi:"hostTransactorContractAddress" validate:"required"`
118-
RuPassageContractAddress pulumi.StringInput `pulumi:"ruPassageContractAddress" validate:"required"`
119-
SignetClUrl pulumi.StringInput `pulumi:"signetClUrl" validate:"required"`
120-
SignetPylonUrl pulumi.StringInput `pulumi:"signetPylonUrl" validate:"required"`
121-
HostStartTimestamp pulumi.StringInput `pulumi:"hostStartTimestamp" validate:"required"`
122-
HostSlotOffset pulumi.StringInput `pulumi:"hostSlotOffset" validate:"required"`
123-
HostSlotDuration pulumi.StringInput `pulumi:"hostSlotDuration" validate:"required"`
101+
// Always required
102+
BlobExplorerUrl pulumi.StringInput `pulumi:"blobExplorerUrl" validate:"required"`
103+
SignetStaticPath pulumi.StringInput `pulumi:"signetStaticPath" validate:"required"`
104+
SignetDatabasePath pulumi.StringInput `pulumi:"signetDatabasePath" validate:"required"`
105+
106+
// Optional with defaults
107+
RpcPort pulumi.StringInput `pulumi:"rpcPort"`
108+
WsRpcPort pulumi.StringInput `pulumi:"wsRpcPort"`
109+
110+
// Optional (no defaults)
111+
ChainName pulumi.StringInput `pulumi:"chainName"`
112+
SignetClUrl pulumi.StringInput `pulumi:"signetClUrl"`
113+
SignetPylonUrl pulumi.StringInput `pulumi:"signetPylonUrl"`
114+
TxForwardUrl pulumi.StringInput `pulumi:"txForwardUrl"`
115+
IpcEndpoint pulumi.StringInput `pulumi:"ipcEndpoint"`
116+
RustLog pulumi.StringInput `pulumi:"rustLog"`
117+
118+
// Conditional: required if ChainName is not set
119+
RollupGenesisJsonPath pulumi.StringInput `pulumi:"rollupGenesisJsonPath"`
120+
HostGenesisJsonPath pulumi.StringInput `pulumi:"hostGenesisJsonPath"`
121+
StartTimestamp pulumi.StringInput `pulumi:"startTimestamp"`
122+
SlotOffset pulumi.StringInput `pulumi:"slotOffset"`
123+
SlotDuration pulumi.StringInput `pulumi:"slotDuration"`
124124
}
125125

126126
// Conversion function to convert public args to internal args
@@ -147,29 +147,29 @@ func (args SignetNodeComponentArgs) toInternal() signetNodeComponentArgsInternal
147147
// Conversion function to convert public env to internal env
148148
func (e SignetNodeEnv) toInternal() signetNodeEnvInternal {
149149
return signetNodeEnvInternal{
150-
HostZenithAddress: pulumi.String(e.HostZenithAddress),
151-
RuOrdersContractAddress: pulumi.String(e.RuOrdersContractAddress),
152-
HostOrdersContractAddress: pulumi.String(e.HostOrdersContractAddress),
153-
SignetChainId: pulumi.String(strconv.Itoa(e.SignetChainId)),
154-
BlobExplorerUrl: pulumi.String(e.BlobExplorerUrl),
155-
SignetStaticPath: pulumi.String(e.SignetStaticPath),
156-
SignetDatabasePath: pulumi.String(e.SignetDatabasePath),
157-
RustLog: pulumi.String(e.RustLog),
158-
IpcEndpoint: pulumi.String(e.IpcEndpoint),
159-
RpcPort: pulumi.String(strconv.Itoa(e.RpcPort)),
160-
WsRpcPort: pulumi.String(strconv.Itoa(e.WsRpcPort)),
161-
TxForwardUrl: pulumi.String(e.TxForwardUrl),
162-
GenesisJsonPath: pulumi.String(e.GenesisJsonPath),
163-
HostZenithDeployHeight: pulumi.String(e.HostZenithDeployHeight),
164-
BaseFeeRecipient: pulumi.String(e.BaseFeeRecipient),
165-
HostPassageContractAddress: pulumi.String(e.HostPassageContractAddress),
166-
HostTransactorContractAddress: pulumi.String(e.HostTransactorContractAddress),
167-
RuPassageContractAddress: pulumi.String(e.RuPassageContractAddress),
168-
SignetClUrl: pulumi.String(e.SignetClUrl),
169-
SignetPylonUrl: pulumi.String(e.SignetPylonUrl),
170-
HostStartTimestamp: pulumi.String(strconv.Itoa(e.HostStartTimestamp)),
171-
HostSlotOffset: pulumi.String(strconv.Itoa(e.HostSlotOffset)),
172-
HostSlotDuration: pulumi.String(strconv.Itoa(e.HostSlotDuration)),
150+
// Always required
151+
BlobExplorerUrl: pulumi.String(e.BlobExplorerUrl),
152+
SignetStaticPath: pulumi.String(e.SignetStaticPath),
153+
SignetDatabasePath: pulumi.String(e.SignetDatabasePath),
154+
155+
// Optional with defaults
156+
RpcPort: pulumi.String(strconv.Itoa(e.RpcPort)),
157+
WsRpcPort: pulumi.String(strconv.Itoa(e.WsRpcPort)),
158+
159+
// Optional (no defaults)
160+
ChainName: pulumi.String(e.ChainName),
161+
SignetClUrl: pulumi.String(e.SignetClUrl),
162+
SignetPylonUrl: pulumi.String(e.SignetPylonUrl),
163+
TxForwardUrl: pulumi.String(e.TxForwardUrl),
164+
IpcEndpoint: pulumi.String(e.IpcEndpoint),
165+
RustLog: pulumi.String(e.RustLog),
166+
167+
// Conditional fields
168+
RollupGenesisJsonPath: pulumi.String(e.RollupGenesisJsonPath),
169+
HostGenesisJsonPath: pulumi.String(e.HostGenesisJsonPath),
170+
StartTimestamp: pulumi.String(strconv.Itoa(e.StartTimestamp)),
171+
SlotOffset: pulumi.String(strconv.Itoa(e.SlotOffset)),
172+
SlotDuration: pulumi.String(strconv.Itoa(e.SlotDuration)),
173173
}
174174
}
175175

pkg/signet_node/validation.go

Lines changed: 37 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,18 @@ func (args *SignetNodeComponentArgs) ApplyDefaults() {
1515
if args.ExecutionJwtMountPath == "" {
1616
args.ExecutionJwtMountPath = DefaultExecutionJwtMountPath
1717
}
18+
// Apply defaults to env
19+
args.Env.ApplyDefaults()
20+
}
21+
22+
// ApplyDefaults sets default values for optional SignetNodeEnv fields
23+
func (env *SignetNodeEnv) ApplyDefaults() {
24+
if env.RpcPort == 0 {
25+
env.RpcPort = DefaultSignetRpcPort
26+
}
27+
if env.WsRpcPort == 0 {
28+
env.WsRpcPort = DefaultSignetWsRpcPort
29+
}
1830
}
1931

2032
func (args *SignetNodeComponentArgs) Validate() error {
@@ -56,71 +68,38 @@ func (args *SignetNodeComponentArgs) Validate() error {
5668
}
5769

5870
func (env *SignetNodeEnv) Validate() error {
59-
if env.BaseFeeRecipient == "" {
60-
return fmt.Errorf("base fee recipient is required")
61-
}
71+
// Always required fields
6272
if env.BlobExplorerUrl == "" {
6373
return fmt.Errorf("blob explorer url is required")
6474
}
65-
if env.GenesisJsonPath == "" {
66-
return fmt.Errorf("genesis json path is required")
67-
}
68-
if env.HostOrdersContractAddress == "" {
69-
return fmt.Errorf("host orders contract address is required")
70-
}
71-
if env.HostPassageContractAddress == "" {
72-
return fmt.Errorf("host passage contract address is required")
73-
}
74-
if env.HostSlotDuration <= 0 {
75-
return fmt.Errorf("host slot duration must be a positive integer")
76-
}
77-
if env.HostSlotOffset < 0 {
78-
return fmt.Errorf("host slot offset must be a positive integer")
79-
}
80-
if env.HostStartTimestamp <= 0 {
81-
return fmt.Errorf("host start timestamp must be a positive integer")
82-
}
83-
if env.HostTransactorContractAddress == "" {
84-
return fmt.Errorf("host transactor contract address is required")
85-
}
86-
if env.HostZenithAddress == "" {
87-
return fmt.Errorf("host zenith address is required")
88-
}
89-
if env.HostZenithDeployHeight == "" {
90-
return fmt.Errorf("host zenith deploy height is required")
91-
}
92-
if env.IpcEndpoint == "" {
93-
return fmt.Errorf("ipc endpoint is required")
94-
}
95-
if env.RpcPort <= 0 {
96-
return fmt.Errorf("rpc port must be a positive integer")
97-
}
98-
if env.RuOrdersContractAddress == "" {
99-
return fmt.Errorf("ru orders contract address is required")
100-
}
101-
if env.RuPassageContractAddress == "" {
102-
return fmt.Errorf("ru passage contract address is required")
103-
}
104-
if env.SignetChainId <= 0 {
105-
return fmt.Errorf("signet chain id must be a positive integer")
106-
}
107-
if env.SignetClUrl == "" {
108-
return fmt.Errorf("signet cl url is required")
109-
}
110-
if env.SignetDatabasePath == "" {
111-
return fmt.Errorf("signet database path is required")
112-
}
113-
if env.SignetPylonUrl == "" {
114-
return fmt.Errorf("signet pylon url is required")
115-
}
11675
if env.SignetStaticPath == "" {
11776
return fmt.Errorf("signet static path is required")
11877
}
119-
if env.TxForwardUrl == "" {
120-
return fmt.Errorf("tx forward url is required")
78+
if env.SignetDatabasePath == "" {
79+
return fmt.Errorf("signet database path is required")
12180
}
122-
if env.WsRpcPort <= 0 {
123-
return fmt.Errorf("ws rpc port must be a positive integer")
81+
82+
// Conditional validation: if ChainName is not set, require genesis and slot calculator vars
83+
if env.ChainName == "" {
84+
// Genesis configuration required
85+
if env.RollupGenesisJsonPath == "" {
86+
return fmt.Errorf("rollup genesis json path is required when chain name is not set")
87+
}
88+
if env.HostGenesisJsonPath == "" {
89+
return fmt.Errorf("host genesis json path is required when chain name is not set")
90+
}
91+
92+
// Slot calculator configuration required
93+
if env.StartTimestamp <= 0 {
94+
return fmt.Errorf("start timestamp must be a positive integer when chain name is not set")
95+
}
96+
if env.SlotOffset < 0 {
97+
return fmt.Errorf("slot offset must be a non-negative integer when chain name is not set")
98+
}
99+
if env.SlotDuration <= 0 {
100+
return fmt.Errorf("slot duration must be a positive integer when chain name is not set")
101+
}
124102
}
103+
125104
return nil
126105
}

0 commit comments

Comments
 (0)