Skip to content

Commit fb8821b

Browse files
committed
fix: simplify datastore query logic with existing cldf helpers
1 parent 30a5f52 commit fb8821b

4 files changed

Lines changed: 40 additions & 64 deletions

File tree

mcms/changesets/set-config/changeset_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -416,18 +416,20 @@ func TestChangeset_EVM_Qualifier(t *testing.T) {
416416
name: "missing qualifier",
417417
qualifier: "",
418418
wantErr: fmt.Sprintf(
419-
"validate timelock ref for chain %s: no addresses found for chain %s",
419+
"validate timelock ref for chain %s: multiple address refs matched query: expected exactly 1 ref matching query {ChainSelector: %s, Type: %s}, found 2",
420420
selectorStr,
421421
selectorStr,
422+
mcmscontracts.RBACTimelock,
422423
),
423424
},
424425
{
425426
name: "unknown qualifier",
426427
qualifier: "does-not-exist",
427428
wantErr: fmt.Sprintf(
428-
"validate timelock ref for chain %s: no addresses found for chain %s with qualifier \"does-not-exist\"",
429+
"validate timelock ref for chain %s: no address ref matched query: expected exactly 1 ref matching query {ChainSelector: %s, Type: %s, Qualifier: does-not-exist}, found 0",
429430
selectorStr,
430431
selectorStr,
432+
mcmscontracts.RBACTimelock,
431433
),
432434
},
433435
} {

mcms/evm/readers/reader.go

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -66,31 +66,11 @@ func evmAddressRef(e cldf.Environment, chainSelector uint64, contractType cldf.C
6666
return datastore.AddressRef{}, fmt.Errorf("datastore not available for chain %d", chainSelector)
6767
}
6868

69-
filters := []datastore.FilterFunc[datastore.AddressRefKey, datastore.AddressRef]{
70-
datastore.AddressRefByChainSelector(chainSelector),
71-
datastore.AddressRefByType(datastore.ContractType(contractType)),
72-
datastore.AddressRefByQualifier(qualifier),
73-
}
74-
75-
refs := e.DataStore.Addresses().Filter(filters...)
76-
if len(refs) == 0 {
77-
if qualifier != "" {
78-
return datastore.AddressRef{}, fmt.Errorf("no addresses found for chain %d with qualifier %q", chainSelector, qualifier)
79-
}
80-
81-
return datastore.AddressRef{}, fmt.Errorf("no addresses found for chain %d", chainSelector)
82-
}
83-
if len(refs) > 1 {
84-
ref := refs[0]
85-
return datastore.AddressRef{}, fmt.Errorf(
86-
"found more than one instance of contract %s v%s (labels=%s)",
87-
contractType,
88-
ref.Version.String(),
89-
ref.Labels.String(),
90-
)
91-
}
92-
93-
return refs[0], nil
69+
return datastore.FindUniqueRef(e.DataStore.Addresses(), datastore.AddressRef{
70+
ChainSelector: chainSelector,
71+
Type: datastore.ContractType(contractType),
72+
Qualifier: qualifier,
73+
})
9474
}
9575

9676
func evmMCMSRef(e cldf.Environment, chainSelector uint64, input cldf.MCMSTimelockProposalInput) (datastore.AddressRef, error) {

mcms/evm/readers/reader_test.go

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,6 @@ func TestReaderGetRefs(t *testing.T) {
3838
Version: version,
3939
}))
4040
}
41-
require.NoError(t, ds.Addresses().Add(datastore.AddressRef{
42-
Address: "0x0000000000000000000000000000000000000aaa",
43-
ChainSelector: selector,
44-
Type: datastore.ContractType(mcmscontracts.ProposerManyChainMultisig),
45-
Version: version,
46-
Qualifier: "qualified",
47-
}))
48-
4941
env := readerTestEnv(ds.Seal())
5042
reader := Reader{}
5143

@@ -75,9 +67,30 @@ func TestReaderGetRefs(t *testing.T) {
7567
})
7668
}
7769

78-
gotQualified, err := reader.GetMCMSRef(env, selector, cldf.MCMSTimelockProposalInput{Qualifier: "qualified"})
79-
require.NoError(t, err)
80-
require.Equal(t, "0x0000000000000000000000000000000000000aaa", gotQualified.Address)
70+
t.Run("qualified proposer", func(t *testing.T) {
71+
t.Parallel()
72+
73+
qualifiedDS := datastore.NewMemoryDataStore()
74+
for typ, address := range refs {
75+
require.NoError(t, qualifiedDS.Addresses().Add(datastore.AddressRef{
76+
Address: address,
77+
ChainSelector: selector,
78+
Type: typ,
79+
Version: version,
80+
}))
81+
}
82+
require.NoError(t, qualifiedDS.Addresses().Add(datastore.AddressRef{
83+
Address: "0x0000000000000000000000000000000000000aaa",
84+
ChainSelector: selector,
85+
Type: datastore.ContractType(mcmscontracts.ProposerManyChainMultisig),
86+
Version: version,
87+
Qualifier: "qualified",
88+
}))
89+
90+
gotQualified, refErr := reader.GetMCMSRef(readerTestEnv(qualifiedDS.Seal()), selector, cldf.MCMSTimelockProposalInput{Qualifier: "qualified"})
91+
require.NoError(t, refErr)
92+
require.Equal(t, "0x0000000000000000000000000000000000000aaa", gotQualified.Address)
93+
})
8194
}
8295

8396
func TestReaderErrors(t *testing.T) {
@@ -96,7 +109,8 @@ func TestReaderErrors(t *testing.T) {
96109
_, err = reader.GetMCMSRef(readerTestEnv(datastore.NewMemoryDataStore().Seal()), 1, cldf.MCMSTimelockProposalInput{
97110
Qualifier: "missing",
98111
})
99-
require.EqualError(t, err, `no addresses found for chain 1 with qualifier "missing"`)
112+
require.ErrorContains(t, err, "no address ref matched query")
113+
require.ErrorContains(t, err, "Qualifier: missing")
100114
}
101115

102116
func readerTestEnv(ds datastore.DataStore) cldf.Environment {

mcms/solana/readers/reader.go

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -104,31 +104,11 @@ func solanaAddressRef(e cldf.Environment, chainSelector uint64, contractType cld
104104
return datastore.AddressRef{}, fmt.Errorf("datastore not available for chain %d", chainSelector)
105105
}
106106

107-
filters := []datastore.FilterFunc[datastore.AddressRefKey, datastore.AddressRef]{
108-
datastore.AddressRefByChainSelector(chainSelector),
109-
datastore.AddressRefByType(datastore.ContractType(contractType)),
110-
datastore.AddressRefByQualifier(qualifier),
111-
}
112-
113-
refs := e.DataStore.Addresses().Filter(filters...)
114-
if len(refs) == 0 {
115-
if qualifier != "" {
116-
return datastore.AddressRef{}, fmt.Errorf("no addresses found for chain %d with qualifier %q", chainSelector, qualifier)
117-
}
118-
119-
return datastore.AddressRef{}, fmt.Errorf("no addresses found for chain %d", chainSelector)
120-
}
121-
if len(refs) > 1 {
122-
ref := refs[0]
123-
return datastore.AddressRef{}, fmt.Errorf(
124-
"found more than one instance of contract %s v%s (labels=%s)",
125-
contractType,
126-
ref.Version.String(),
127-
ref.Labels.String(),
128-
)
129-
}
130-
131-
return refs[0], nil
107+
return datastore.FindUniqueRef(e.DataStore.Addresses(), datastore.AddressRef{
108+
ChainSelector: chainSelector,
109+
Type: datastore.ContractType(contractType),
110+
Qualifier: qualifier,
111+
})
132112
}
133113

134114
func solanaMCMSRef(e cldf.Environment, chainSelector uint64, input cldf.MCMSTimelockProposalInput) (datastore.AddressRef, error) {

0 commit comments

Comments
 (0)