Skip to content

Commit cd095af

Browse files
committed
Validate network addresses
1 parent 4897296 commit cd095af

2 files changed

Lines changed: 62 additions & 18 deletions

File tree

internal/config/add-alias.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ import (
2222
"fmt"
2323

2424
"github.com/onflow/flow-cli/internal/prompt"
25+
"github.com/onflow/flow-cli/internal/util"
2526

26-
"github.com/onflow/flow-go-sdk"
27+
flow "github.com/onflow/flow-go-sdk"
2728
"github.com/spf13/cobra"
2829

2930
"github.com/onflow/flowkit/v2"
@@ -106,13 +107,14 @@ func flagsToAliasData(flags flagsAddAlias) (*prompt.AliasData, bool, error) {
106107
return nil, true, fmt.Errorf("address must be provided")
107108
}
108109

109-
if flow.HexToAddress(flags.Address) == flow.EmptyAddress {
110-
return nil, true, fmt.Errorf("invalid address")
110+
// Validate address is valid for the specified network
111+
if !util.IsAddressValidForNetwork(address, flags.Network) {
112+
return nil, true, fmt.Errorf("address %s is not valid for network %s", flags.Address, flags.Network)
111113
}
112114

113115
return &prompt.AliasData{
114116
Contract: flags.Contract,
115117
Network: flags.Network,
116118
Address: flags.Address,
117119
}, true, nil
118-
}
120+
}

internal/config/add-alias_test.go

Lines changed: 56 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func Test_AddAlias(t *testing.T) {
4545
// Set flags
4646
addAliasFlags.Contract = "MyContract"
4747
addAliasFlags.Network = "testnet"
48-
addAliasFlags.Address = "0x1234567890abcdef"
48+
addAliasFlags.Address = "0x9a0766d93b6608b7"
4949

5050
// Call the function
5151
result, err := addAlias(
@@ -68,7 +68,7 @@ func Test_AddAlias(t *testing.T) {
6868
// Verify the alias was added for the specified network
6969
alias := updatedContract.Aliases.ByNetwork("testnet")
7070
require.NotNil(t, alias)
71-
assert.Equal(t, "1234567890abcdef", alias.Address.String())
71+
assert.Equal(t, "9a0766d93b6608b7", alias.Address.String())
7272

7373
// Reset flags
7474
addAliasFlags = flagsAddAlias{}
@@ -95,7 +95,7 @@ func Test_AddAlias(t *testing.T) {
9595
// Add testnet alias
9696
addAliasFlags.Contract = "MultiContract"
9797
addAliasFlags.Network = "testnet"
98-
addAliasFlags.Address = "0xabcdef1234567890"
98+
addAliasFlags.Address = "0x631e88ae7f1d7c20"
9999

100100
result, err := addAlias(
101101
[]string{},
@@ -118,7 +118,7 @@ func Test_AddAlias(t *testing.T) {
118118

119119
testnetAlias := updatedContract.Aliases.ByNetwork("testnet")
120120
require.NotNil(t, testnetAlias)
121-
assert.Equal(t, "abcdef1234567890", testnetAlias.Address.String())
121+
assert.Equal(t, "631e88ae7f1d7c20", testnetAlias.Address.String())
122122

123123
// Reset flags
124124
addAliasFlags = flagsAddAlias{}
@@ -129,7 +129,7 @@ func Test_AddAlias(t *testing.T) {
129129

130130
addAliasFlags.Contract = "NonExistentContract"
131131
addAliasFlags.Network = "testnet"
132-
addAliasFlags.Address = "0x1234567890abcdef"
132+
addAliasFlags.Address = "0x9a0766d93b6608b7"
133133

134134
result, err := addAlias(
135135
[]string{},
@@ -159,7 +159,7 @@ func Test_AddAlias(t *testing.T) {
159159
// Set flags
160160
addAliasFlags.Contract = "TestContract"
161161
addAliasFlags.Network = "mainnet"
162-
addAliasFlags.Address = "0xabcdef1234567890"
162+
addAliasFlags.Address = "0xf233dcee88fe0abe"
163163

164164
// Call the function
165165
result, err := addAlias(
@@ -197,7 +197,7 @@ func Test_AddAlias(t *testing.T) {
197197
// Verify mainnet alias exists with correct address (stored without 0x prefix)
198198
mainnetAlias, ok := aliases["mainnet"].(string)
199199
require.True(t, ok, "mainnet alias should exist")
200-
assert.Equal(t, "abcdef1234567890", mainnetAlias)
200+
assert.Equal(t, "f233dcee88fe0abe", mainnetAlias)
201201

202202
// Reset flags
203203
addAliasFlags = flagsAddAlias{}
@@ -209,7 +209,7 @@ func Test_FlagsToAliasData(t *testing.T) {
209209
flags := flagsAddAlias{
210210
Contract: "TestContract",
211211
Network: "testnet",
212-
Address: "0x1234567890abcdef",
212+
Address: "0x9a0766d93b6608b7",
213213
}
214214

215215
data, flagsProvided, err := flagsToAliasData(flags)
@@ -218,7 +218,7 @@ func Test_FlagsToAliasData(t *testing.T) {
218218
assert.True(t, flagsProvided)
219219
assert.Equal(t, "TestContract", data.Contract)
220220
assert.Equal(t, "testnet", data.Network)
221-
assert.Equal(t, "0x1234567890abcdef", data.Address)
221+
assert.Equal(t, "0x9a0766d93b6608b7", data.Address)
222222
})
223223

224224
t.Run("No flags provided", func(t *testing.T) {
@@ -234,7 +234,7 @@ func Test_FlagsToAliasData(t *testing.T) {
234234
t.Run("Fail missing contract name", func(t *testing.T) {
235235
flags := flagsAddAlias{
236236
Network: "testnet",
237-
Address: "0x1234567890abcdef",
237+
Address: "0x9a0766d93b6608b7",
238238
}
239239

240240
data, flagsProvided, err := flagsToAliasData(flags)
@@ -247,7 +247,7 @@ func Test_FlagsToAliasData(t *testing.T) {
247247
t.Run("Fail missing network", func(t *testing.T) {
248248
flags := flagsAddAlias{
249249
Contract: "TestContract",
250-
Address: "0x1234567890abcdef",
250+
Address: "0x9a0766d93b6608b7",
251251
}
252252

253253
data, flagsProvided, err := flagsToAliasData(flags)
@@ -301,14 +301,56 @@ func Test_FlagsToAliasData(t *testing.T) {
301301
t.Run("Success with address without 0x prefix", func(t *testing.T) {
302302
flags := flagsAddAlias{
303303
Contract: "TestContract",
304-
Network: "testnet",
305-
Address: "1234567890abcdef",
304+
Network: "mainnet",
305+
Address: "1d7e57aa55817448",
306306
}
307307

308308
data, flagsProvided, err := flagsToAliasData(flags)
309309

310310
require.NoError(t, err)
311311
assert.True(t, flagsProvided)
312-
assert.Equal(t, "1234567890abcdef", data.Address)
312+
assert.Equal(t, "1d7e57aa55817448", data.Address)
313+
})
314+
315+
t.Run("Fail testnet address used for mainnet", func(t *testing.T) {
316+
flags := flagsAddAlias{
317+
Contract: "TestContract",
318+
Network: "mainnet",
319+
Address: "0x9a0766d93b6608b7", // Testnet address
320+
}
321+
322+
data, flagsProvided, err := flagsToAliasData(flags)
323+
324+
assert.Nil(t, data)
325+
assert.True(t, flagsProvided)
326+
assert.ErrorContains(t, err, "not valid for network mainnet")
327+
})
328+
329+
t.Run("Fail mainnet address used for testnet", func(t *testing.T) {
330+
flags := flagsAddAlias{
331+
Contract: "TestContract",
332+
Network: "testnet",
333+
Address: "0xf233dcee88fe0abe", // Mainnet address
334+
}
335+
336+
data, flagsProvided, err := flagsToAliasData(flags)
337+
338+
assert.Nil(t, data)
339+
assert.True(t, flagsProvided)
340+
assert.ErrorContains(t, err, "not valid for network testnet")
341+
})
342+
343+
t.Run("Fail emulator address used for testnet", func(t *testing.T) {
344+
flags := flagsAddAlias{
345+
Contract: "TestContract",
346+
Network: "testnet",
347+
Address: "0xf8d6e0586b0a20c7", // Emulator address
348+
}
349+
350+
data, flagsProvided, err := flagsToAliasData(flags)
351+
352+
assert.Nil(t, data)
353+
assert.True(t, flagsProvided)
354+
assert.ErrorContains(t, err, "not valid for network testnet")
313355
})
314356
}

0 commit comments

Comments
 (0)