Skip to content

Commit 9f240c1

Browse files
fix: replace log.Fatal with proper error handling (#19)
1 parent ca4c946 commit 9f240c1

5 files changed

Lines changed: 356 additions & 293 deletions

File tree

cmd/cli/balance.go

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -18,47 +18,52 @@ import (
1818

1919
func RunBalance(cmd *cobra.Command, args []string) {
2020
configPath, _ := cmd.Flags().GetString("config-path")
21-
executeBalance(configPath)
21+
if err := executeBalance(configPath); err != nil {
22+
log := gologger.Get()
23+
log.Error().Err(err).Msg("Balance check failed")
24+
}
2225
}
2326

24-
func executeBalance(configPath string) {
27+
func executeBalance(configPath string) error {
2528
log := gologger.Get().With().Str("component", "balance").Logger()
2629

2730
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
2831
defer cancel()
2932

3033
cfg, walletAdapter, err := initializeWallet(configPath, log)
3134
if err != nil {
32-
return // Error already logged in initializeWallet
35+
return err
3336
}
3437

35-
displayTokenBalance(ctx, walletAdapter, cfg, log)
38+
if err := displayTokenBalance(ctx, walletAdapter, cfg, log); err != nil {
39+
return err
40+
}
3641

3742
deviceID, err := getDeviceID(log)
3843
if err != nil {
39-
return
44+
return err
4045
}
4146

42-
displayStakeInfo(ctx, walletAdapter, cfg, deviceID, log)
47+
return displayStakeInfo(ctx, walletAdapter, cfg, deviceID, log)
4348
}
4449

4550
func initializeWallet(configPath string, log zerolog.Logger) (*config.Config, *wallet.Adapter, error) {
4651
configManager := config.NewConfigManager(configPath)
4752
cfg, err := configManager.GetConfig()
4853
if err != nil {
49-
log.Fatal().Err(err).Msg("Failed to load config")
54+
log.Error().Err(err).Msg("Failed to load config")
5055
return nil, nil, err
5156
}
5257

5358
keystoreAdapter, err := keystore.NewAdapter(nil)
5459
if err != nil {
55-
log.Fatal().Err(err).Msg("Failed to create keystore")
60+
log.Error().Err(err).Msg("Failed to create keystore")
5661
return nil, nil, err
5762
}
5863

5964
privateKey, err := keystoreAdapter.LoadPrivateKey()
6065
if err != nil {
61-
log.Fatal().Err(err).Msg("No private key found - please authenticate first using 'parity auth'")
66+
log.Error().Err(err).Msg("No private key found - please authenticate first using 'parity auth'")
6267
return nil, nil, err
6368
}
6469

@@ -70,76 +75,81 @@ func initializeWallet(configPath string, log zerolog.Logger) (*config.Config, *w
7075
StakeAddress: common.HexToAddress(cfg.BlockchainNetwork.StakeWalletAddress),
7176
})
7277
if err != nil {
73-
log.Fatal().Err(err).Msg("Failed to create Ethereum client")
78+
log.Error().Err(err).Msg("Failed to create Ethereum client")
7479
return nil, nil, err
7580
}
7681

7782
return cfg, walletAdapter, nil
7883
}
7984

80-
func displayTokenBalance(ctx context.Context, walletAdapter *wallet.Adapter, cfg *config.Config, log zerolog.Logger) {
85+
func displayTokenBalance(ctx context.Context, walletAdapter *wallet.Adapter, cfg *config.Config, log zerolog.Logger) error {
8186
token, err := walletAdapter.NewParityToken(common.HexToAddress(cfg.BlockchainNetwork.TokenAddress))
8287
if err != nil {
83-
log.Fatal().Err(err).Msg("Failed to create token contract")
84-
return
88+
log.Error().Err(err).Msg("Failed to create token contract")
89+
return err
8590
}
8691

8792
tokenBalance, err := walletAdapter.GetTokenBalance(ctx, token, walletAdapter.GetAddress())
8893
if err != nil {
8994
select {
9095
case <-ctx.Done():
91-
log.Fatal().Err(ctx.Err()).Msg("Operation timed out while getting token balance")
96+
log.Error().Err(ctx.Err()).Msg("Operation timed out while getting token balance")
97+
return ctx.Err()
9298
default:
93-
log.Fatal().Err(err).Msg("Failed to get token balance")
99+
log.Error().Err(err).Msg("Failed to get token balance")
100+
return err
94101
}
95-
return
96102
}
97103

98104
log.Info().
99105
Str("wallet_address", walletAdapter.GetAddress().Hex()).
100106
Str("balance", tokenBalance.String()+" "+cfg.BlockchainNetwork.TokenSymbol).
101107
Msg("Wallet token balance")
108+
109+
return nil
102110
}
103111

104112
func getDeviceID(log zerolog.Logger) (string, error) {
105113
deviceIDManager := deviceid.NewManager(deviceid.Config{})
106114
deviceID, err := deviceIDManager.VerifyDeviceID()
107115
if err != nil {
108-
log.Fatal().Err(err).Msg("Failed to get device ID")
116+
log.Error().Err(err).Msg("Failed to get device ID")
109117
return "", err
110118
}
111119
return deviceID, nil
112120
}
113121

114-
func displayStakeInfo(ctx context.Context, walletAdapter *wallet.Adapter, cfg *config.Config, deviceID string, log zerolog.Logger) {
122+
func displayStakeInfo(ctx context.Context, walletAdapter *wallet.Adapter, cfg *config.Config, deviceID string, log zerolog.Logger) error {
115123
stakeWallet, err := walletAdapter.NewStakeWallet(
116124
common.HexToAddress(cfg.BlockchainNetwork.StakeWalletAddress),
117125
common.HexToAddress(cfg.BlockchainNetwork.TokenAddress),
118126
)
119127
if err != nil {
120-
log.Fatal().Err(err).Msg("Failed to create stake wallet contract")
121-
return
128+
log.Error().Err(err).Msg("Failed to create stake wallet contract")
129+
return err
122130
}
123131

124132
stakeInfo, err := walletAdapter.GetStakeInfo(ctx, stakeWallet, deviceID)
125133
if err != nil {
126134
select {
127135
case <-ctx.Done():
128-
log.Fatal().Err(ctx.Err()).Msg("Operation timed out while getting stake info")
136+
log.Error().Err(ctx.Err()).Msg("Operation timed out while getting stake info")
137+
return ctx.Err()
129138
default:
130-
log.Fatal().Err(err).Msg("Failed to get stake info")
139+
log.Error().Err(err).Msg("Failed to get stake info")
140+
return err
131141
}
132-
return
133142
}
134143

135144
if stakeInfo.Exists {
136-
displayExistingStakeInfo(ctx, walletAdapter, cfg, stakeInfo, log)
145+
return displayExistingStakeInfo(ctx, walletAdapter, cfg, stakeInfo, log)
137146
} else {
138147
log.Info().Msg("No active stake found")
148+
return nil
139149
}
140150
}
141151

142-
func displayExistingStakeInfo(ctx context.Context, walletAdapter *wallet.Adapter, cfg *config.Config, stakeInfo walletsdk.StakeInfo, log zerolog.Logger) {
152+
func displayExistingStakeInfo(ctx context.Context, walletAdapter *wallet.Adapter, cfg *config.Config, stakeInfo walletsdk.StakeInfo, log zerolog.Logger) error {
143153
log.Info().
144154
Str("amount", stakeInfo.Amount.String()+" PRTY").
145155
Str("device_id", stakeInfo.DeviceID).
@@ -148,23 +158,26 @@ func displayExistingStakeInfo(ctx context.Context, walletAdapter *wallet.Adapter
148158

149159
token, err := walletAdapter.NewParityToken(common.HexToAddress(cfg.BlockchainNetwork.TokenAddress))
150160
if err != nil {
151-
log.Fatal().Err(err).Msg("Failed to create token contract")
152-
return
161+
log.Error().Err(err).Msg("Failed to create token contract")
162+
return err
153163
}
154164

155165
contractBalance, err := walletAdapter.GetTokenBalance(ctx, token, common.HexToAddress(cfg.BlockchainNetwork.StakeWalletAddress))
156166
if err != nil {
157167
select {
158168
case <-ctx.Done():
159-
log.Fatal().Err(ctx.Err()).Msg("Operation timed out while getting contract balance")
169+
log.Error().Err(ctx.Err()).Msg("Operation timed out while getting contract balance")
170+
return ctx.Err()
160171
default:
161-
log.Fatal().Err(err).Msg("Failed to get contract balance")
172+
log.Error().Err(err).Msg("Failed to get contract balance")
173+
return err
162174
}
163-
return
164175
}
165176

166177
log.Info().
167178
Str("balance", contractBalance.String()+" PRTY").
168179
Str("contract_address", cfg.BlockchainNetwork.StakeWalletAddress).
169180
Msg("Contract token balance")
181+
182+
return nil
170183
}

cmd/cli/client.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,30 +68,35 @@ func RunChain(port int, cmd *cobra.Command) {
6868
log := gologger.Get().With().Str("component", "chain").Logger()
6969

7070
if err := client.IsPortAvailable(port); err != nil {
71-
log.Fatal().Err(err).Int("port", port).Msg("Port is not available")
71+
log.Error().Err(err).Int("port", port).Msg("Port is not available")
72+
return
7273
}
7374

7475
configPath, _ := cmd.Flags().GetString("config-path")
7576
configManager := config.NewConfigManager(configPath)
7677
cfg, err := configManager.GetConfig()
7778
if err != nil {
78-
log.Fatal().Err(err).Msg("Failed to load config")
79+
log.Error().Err(err).Msg("Failed to load config")
80+
return
7981
}
8082

8183
deviceIDManager := deviceid.NewManager(deviceid.Config{})
8284
deviceID, err := deviceIDManager.VerifyDeviceID()
8385
if err != nil {
84-
log.Fatal().Err(err).Msg("Failed to verify device ID")
86+
log.Error().Err(err).Msg("Failed to verify device ID")
87+
return
8588
}
8689

8790
creatorAddress, err := getCreatorAddress()
8891
if err != nil {
89-
log.Fatal().Err(err).Msg("Failed to get creator address. Please authenticate first using 'auth' command")
92+
log.Error().Err(err).Msg("Failed to get creator address. Please authenticate first using 'auth' command")
93+
return
9094
}
9195

9296
server := proxy.NewServer(cfg, deviceID, creatorAddress, port)
9397
if err := server.Start(); err != nil {
94-
log.Fatal().Err(err).Msg("Failed to start chain proxy server")
98+
log.Error().Err(err).Msg("Failed to start chain proxy server")
99+
return
95100
}
96101
}
97102

0 commit comments

Comments
 (0)