Skip to content

Commit 5168e28

Browse files
committed
✨ feat: implement configuration loading for Casper facilitator
Add functionality to load configuration details for the Casper facilitator in the settler application. This includes default values if the configuration file does not exist, ensuring smoother operation and easier configuration management. Update the `SettlerConfig` struct to include the new fields for facilitator URL and token.
1 parent ef4555b commit 5168e28

2 files changed

Lines changed: 37 additions & 9 deletions

File tree

cmd/settler/main.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,16 @@ func runProxy(args []string) {
263263
}
264264
defer udsServer.Close()
265265

266+
// 3. Load config for Casper facilitator details
267+
localCfg, err := config.LoadConfig()
268+
if err != nil {
269+
log.Printf("⚠️ Could not load local config, using defaults: %v", err)
270+
localCfg = &config.SettlerConfig{
271+
CasperFacilitatorURL: "https://x402-facilitator.cspr.cloud",
272+
CasperFacilitatorToken: "",
273+
}
274+
}
275+
266276
targetURL, err := url.Parse(*target)
267277
if err != nil {
268278
log.Fatalf("Invalid target URL: %v", err)
@@ -286,11 +296,13 @@ func runProxy(args []string) {
286296
ChainID: parsedChainID,
287297
VerifyingContract: common.HexToAddress("0x0000000000000000000000000000000000000000"),
288298
},
289-
NonceExpiry: 5 * time.Minute,
290-
Recipient: *recipient,
291-
Asset: *asset,
292-
Amount: *amount,
293-
DB: db,
299+
NonceExpiry: 5 * time.Minute,
300+
Recipient: *recipient,
301+
Asset: *asset,
302+
Amount: *amount,
303+
DB: db,
304+
CasperFacilitatorURL: localCfg.CasperFacilitatorURL,
305+
CasperFacilitatorToken: localCfg.CasperFacilitatorToken,
294306
}
295307

296308
mw := x402.NewMiddleware(cfg)

pkg/config/config.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ import (
88
)
99

1010
type SettlerConfig struct {
11-
RPCURL string `json:"rpc_url"`
12-
PrivateKey string `json:"private_key"`
13-
RegistryAddress string `json:"registry_address"`
14-
AgentID string `json:"agent_id"`
11+
RPCURL string `json:"rpc_url"`
12+
PrivateKey string `json:"private_key"`
13+
RegistryAddress string `json:"registry_address"`
14+
AgentID string `json:"agent_id"`
15+
CasperFacilitatorURL string `json:"casper_facilitator_url"`
16+
CasperFacilitatorToken string `json:"casper_facilitator_token"`
1517
}
1618

1719
func GetConfigPath() (string, error) {
@@ -33,6 +35,20 @@ func LoadConfig() (*SettlerConfig, error) {
3335
}
3436
data, err := os.ReadFile(path)
3537
if err != nil {
38+
if os.IsNotExist(err) {
39+
// Auto-initialize default config if it doesn't exist
40+
defaultCfg := &SettlerConfig{
41+
RPCURL: "https://rpc.sepolia.mantle.xyz",
42+
RegistryAddress: "0x33aE8331a2406EEc3A33483001aC5650DA2e0662",
43+
AgentID: "42",
44+
CasperFacilitatorURL: "https://x402-facilitator.cspr.cloud",
45+
CasperFacilitatorToken: "", // empty/permissionless default
46+
}
47+
if err := SaveConfig(defaultCfg); err != nil {
48+
return nil, err
49+
}
50+
return defaultCfg, nil
51+
}
3652
return nil, err
3753
}
3854
var cfg SettlerConfig

0 commit comments

Comments
 (0)