1+ package settings
2+
3+ import (
4+ "fmt"
5+ "os"
6+ "reflect"
7+ )
8+
9+ type KeyperConfig struct {
10+ InstanceID int `env:"_ASSETS_INSTANCE_ID"`
11+ DatabaseURL string `env:"SHUTTER_DATABASE_URL"`
12+ BeaconAPIURL string `env:"SHUTTER_BEACONAPIURL"`
13+ MaxNumKeysPerMessage int `env:"_ASSETS_MAX_NUM_KEYS_PER_MESSAGE"`
14+ Gnosis struct {
15+ EncryptedGasLimit int `env:"_ASSETS_ENCRYPTED_GAS_LIMIT"`
16+ MaxTxPointerAge int `env:"_ASSETS_MAX_TX_POINTER_AGE"`
17+ GenesisSlotTimestamp int `env:"_ASSETS_GENESIS_SLOT_TIMESTAMP"`
18+ SyncStartBlockNumber int `env:"_ASSETS_SYNC_START_BLOCK_NUMBER"`
19+ Node struct {
20+ PrivateKey string `env:"SHUTTER_GNOSIS_NODE_PRIVATEKEY"`
21+ ContractsURL string `env:"SHUTTER_GNOSIS_NODE_CONTRACTSURL"`
22+ DeploymentDir string `env:"SHUTTER_DEPLOYMENT_DIR"` // Unused
23+ EthereumURL string `env:"SHUTTER_GNOSIS_NODE_ETHEREUMURL"`
24+ }
25+ Contracts struct {
26+ KeyperSetManager string `env:"_ASSETS_KEYPER_SET_MANAGER"`
27+ KeyBroadcastContract string `env:"_ASSETS_KEY_BROADCAST_CONTRACT"`
28+ Sequencer string `env:"_ASSETS_SEQUENCER"`
29+ ValidatorRegistry string `env:"_ASSETS_VALIDATOR_REGISTRY"`
30+ }
31+ }
32+ P2P struct {
33+ P2PKey string `env:"SHUTTER_P2P_KEY"`
34+ ListenAddresses string `env:"SHUTTER_P2P_LISTENADDRESSES"`
35+ AdvertiseAddresses string `env:"SHUTTER_P2P_ADVERTISEADDRESSES"`
36+ CustomBootstrapAddresses []string `env:"_ASSETS_CUSTOM_BOOTSTRAP_ADDRESSES"`
37+ DiscoveryNamespace string `env:"_ASSETS_DISCOVERY_NAME_PREFIX"`
38+ }
39+ Shuttermint struct {
40+ ShuttermintURL string `env:"SHUTTER_SHUTTERMINT_SHUTTERMINTURL"`
41+ ValidatorPublicKey string `env:"VALIDATOR_PUBLIC_KEY"`
42+ EncryptionKey string `env:"SHUTTER_SHUTTERMINT_ENCRYPTION_PUBLIC_KEY"`
43+ DKGPhaseLength int `env:"_ASSETS_DKG_PHASE_LENGTH"`
44+ DKGStartBlockDelta int `env:"_ASSETS_DKG_START_BLOCK_DELTA"`
45+ }
46+ Metrics struct {
47+ Enabled bool `env:"SHUTTER_ENABLED"`
48+ }
49+ }
50+
51+ // AddSettingsToKeyper modifies the keyper settings by combining the generated, config, and environment variables.
52+ func AddSettingsToKeyper (generatedFilePath , configFilePath , outputFilePath string ) error {
53+ var keyperConfig KeyperConfig
54+ var generatedConfig map [string ]interface {}
55+
56+ fmt .Println ("Adding user settings to keyper..." )
57+
58+ if _ , err := os .Stat (generatedFilePath ); os .IsNotExist (err ) {
59+ return fmt .Errorf ("generated file does not exist: %s" , generatedFilePath )
60+ }
61+
62+ if _ , err := os .Stat (configFilePath ); os .IsNotExist (err ) {
63+ return fmt .Errorf ("config file does not exist: %s" , configFilePath )
64+ }
65+
66+ // Read and unmarshal the keyper config file
67+ if err := UnmarshallFromFile (configFilePath , & keyperConfig ); err != nil {
68+ return err
69+ }
70+
71+ PopulateFromEnv (& keyperConfig )
72+
73+ // Read and unmarshal the generated file
74+ if err := UnmarshallFromFile (generatedFilePath , & generatedConfig ); err != nil {
75+ return err
76+ }
77+
78+ ApplyConfigToGenerated (reflect .ValueOf (keyperConfig ), & generatedConfig , nil )
79+
80+ MarshalToFile (outputFilePath , generatedConfig )
81+
82+ fmt .Println ("Keyper TOML file modified successfully and saved to" , outputFilePath )
83+
84+ return nil
85+ }
0 commit comments