Skip to content

Commit 349ce9b

Browse files
committed
merge
2 parents 7d65fe8 + 2975185 commit 349ce9b

38 files changed

+8368
-173
lines changed

ccv/chains/evm/deployment/go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ require (
1717
github.com/Masterminds/semver/v3 v3.4.0
1818
github.com/ethereum/go-ethereum v1.17.0
1919
github.com/smartcontractkit/chain-selectors v1.0.97
20-
github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260312161144-d895b42081a0
21-
github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260312161144-d895b42081a0
22-
github.com/smartcontractkit/chainlink-ccip/chains/evm/deployment v0.0.0-20260312161144-d895b42081a0
23-
github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260312161144-d895b42081a0
20+
github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20260312182032-b2b38700f19b
21+
github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm v0.0.0-20260312182032-b2b38700f19b
22+
github.com/smartcontractkit/chainlink-ccip/chains/evm/deployment v0.0.0-20260312182032-b2b38700f19b
23+
github.com/smartcontractkit/chainlink-ccip/deployment v0.0.0-20260312182032-b2b38700f19b
2424
github.com/smartcontractkit/chainlink-common v0.9.6-0.20260114142648-bd9e1b483e96
2525
github.com/smartcontractkit/chainlink-deployments-framework v0.80.2
2626
github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20260119171452-39c98c3b33cd
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package adapters
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm/deployment/latest/operations/committee_verifier"
7+
"github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm/deployment/v1_7_0/operations/versioned_verifier_resolver"
8+
ccvadapters "github.com/smartcontractkit/chainlink-ccip/deployment/v1_7_0/adapters"
9+
"github.com/smartcontractkit/chainlink-deployments-framework/datastore"
10+
)
11+
12+
type EVMCommitteeVerifierContractAdapter struct{}
13+
14+
var _ ccvadapters.CommitteeVerifierContractAdapter = (*EVMCommitteeVerifierContractAdapter)(nil)
15+
16+
func (a *EVMCommitteeVerifierContractAdapter) ResolveCommitteeVerifierContracts(
17+
ds datastore.DataStore,
18+
chainSelector uint64,
19+
qualifier string,
20+
) ([]datastore.AddressRef, error) {
21+
verifier, err := ds.Addresses().Get(datastore.NewAddressRefKey(
22+
chainSelector,
23+
datastore.ContractType(committee_verifier.ContractType),
24+
committee_verifier.Version,
25+
qualifier,
26+
))
27+
if err != nil {
28+
return nil, fmt.Errorf("committee verifier not found for chain %d qualifier %q: %w", chainSelector, qualifier, err)
29+
}
30+
31+
resolver, err := ds.Addresses().Get(datastore.NewAddressRefKey(
32+
chainSelector,
33+
datastore.ContractType(versioned_verifier_resolver.CommitteeVerifierResolverType),
34+
versioned_verifier_resolver.Version,
35+
qualifier,
36+
))
37+
if err != nil {
38+
return nil, fmt.Errorf("committee verifier resolver not found for chain %d qualifier %q: %w", chainSelector, qualifier, err)
39+
}
40+
41+
return []datastore.AddressRef{verifier, resolver}, nil
42+
}

ccv/chains/evm/deployment/v1_7_0/adapters/deploy_chain_contracts_adapter.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@ func convertMockReceivers(params []ccvadapters.MockReceiverDeployParams) []seque
304304
RequiredVerifiers: mr.RequiredVerifiers,
305305
OptionalVerifiers: mr.OptionalVerifiers,
306306
OptionalThreshold: mr.OptionalThreshold,
307+
MinimumBlockDepth: mr.MinimumBlockDepth,
307308
Qualifier: mr.Qualifier,
308309
})
309310
}

ccv/chains/evm/deployment/v1_7_0/adapters/indexer_config_adapter.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55

66
"github.com/Masterminds/semver/v3"
77

8-
"github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm/deployment/latest/operations/committee_verifier"
98
"github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm/deployment/v1_7_0/operations/cctp_verifier"
109
"github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm/deployment/v1_7_0/operations/lombard_verifier"
1110
"github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm/deployment/v1_7_0/operations/versioned_verifier_resolver"
@@ -48,7 +47,7 @@ func (a *EVMIndexerConfigAdapter) ResolveVerifierAddresses(
4847
func resolveContractMeta(kind ccvadapters.VerifierKind) (deployment.ContractType, *semver.Version, error) {
4948
switch kind {
5049
case ccvadapters.CommitteeVerifierKind:
51-
return versioned_verifier_resolver.CommitteeVerifierResolverType, committee_verifier.Version, nil
50+
return versioned_verifier_resolver.CommitteeVerifierResolverType, versioned_verifier_resolver.Version, nil
5251
case ccvadapters.CCTPVerifierKind:
5352
return cctp_verifier.ResolverType, cctp_verifier.Version, nil
5453
case ccvadapters.LombardVerifierKind:

ccv/chains/evm/deployment/v1_7_0/adapters/init.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,12 @@ func init() {
2929
laneMigratorReg.RegisterRouterUpdater(chainsel.FamilyEVM, semver.MustParse("1.2.0"), &adapters1_2.RouterUpdater{})
3030

3131
lanes.GetLaneAdapterRegistry().RegisterLaneAdapter(chainsel.FamilyEVM, v, &ChainFamilyAdapter{})
32+
ccvadapters.GetCommitteeVerifierContractRegistry().Register(chainsel.FamilyEVM, &EVMCommitteeVerifierContractAdapter{})
3233
ccvadapters.GetExecutorConfigRegistry().Register(chainsel.FamilyEVM, &EVMExecutorConfigAdapter{})
34+
ccvadapters.GetVerifierJobConfigRegistry().Register(chainsel.FamilyEVM, &EVMVerifierJobConfigAdapter{})
3335
ccvadapters.GetDeployChainContractsRegistry().Register(chainsel.FamilyEVM, &EVMDeployChainContractsAdapter{})
3436
ccvadapters.GetDeployChainContractsRegistry().RegisterConfigImporter(chainsel.FamilyEVM, semver.MustParse("1.6.0"), &adapters1_6.ConfigImportAdapter{})
3537
ccvadapters.GetIndexerConfigRegistry().Register(chainsel.FamilyEVM, &EVMIndexerConfigAdapter{})
3638
ccvadapters.GetAggregatorConfigRegistry().Register(chainsel.FamilyEVM, &EVMAggregatorConfigAdapter{})
39+
ccvadapters.GetTokenVerifierConfigRegistry().Register(chainsel.FamilyEVM, &EVMTokenVerifierConfigAdapter{})
3740
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package adapters
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm/deployment/latest/operations/onramp"
7+
"github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm/deployment/v1_7_0/operations/cctp_verifier"
8+
"github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm/deployment/v1_7_0/operations/lombard_verifier"
9+
"github.com/smartcontractkit/chainlink-ccip/chains/evm/deployment/v1_6_0/operations/rmn_remote"
10+
dsutil "github.com/smartcontractkit/chainlink-ccip/deployment/utils/datastore"
11+
ccvadapters "github.com/smartcontractkit/chainlink-ccip/deployment/v1_7_0/adapters"
12+
"github.com/smartcontractkit/chainlink-deployments-framework/datastore"
13+
)
14+
15+
type EVMTokenVerifierConfigAdapter struct{}
16+
17+
var _ ccvadapters.TokenVerifierConfigAdapter = (*EVMTokenVerifierConfigAdapter)(nil)
18+
19+
func (a *EVMTokenVerifierConfigAdapter) ResolveTokenVerifierAddresses(
20+
ds datastore.DataStore,
21+
chainSelector uint64,
22+
cctpQualifier string,
23+
lombardQualifier string,
24+
) (*ccvadapters.TokenVerifierChainAddresses, error) {
25+
toAddress := func(ref datastore.AddressRef) (string, error) { return ref.Address, nil }
26+
27+
onRampAddr, err := dsutil.FindAndFormatRef(ds, datastore.AddressRef{
28+
Type: datastore.ContractType(onramp.ContractType),
29+
}, chainSelector, toAddress)
30+
if err != nil {
31+
return nil, fmt.Errorf("failed to get on ramp address for chain %d: %w", chainSelector, err)
32+
}
33+
34+
rmnRemoteAddr, err := dsutil.FindAndFormatRef(ds, datastore.AddressRef{
35+
Type: datastore.ContractType(rmn_remote.ContractType),
36+
}, chainSelector, toAddress)
37+
if err != nil {
38+
return nil, fmt.Errorf("failed to get rmn remote address for chain %d: %w", chainSelector, err)
39+
}
40+
41+
result := &ccvadapters.TokenVerifierChainAddresses{
42+
OnRampAddress: onRampAddr,
43+
RMNRemoteAddress: rmnRemoteAddr,
44+
}
45+
46+
cctpVerifierAddr, cctpVerifierErr := dsutil.FindAndFormatRef(ds, datastore.AddressRef{
47+
Type: datastore.ContractType(cctp_verifier.ContractType),
48+
Qualifier: cctpQualifier,
49+
}, chainSelector, toAddress)
50+
51+
cctpResolverAddr, cctpResolverErr := dsutil.FindAndFormatRef(ds, datastore.AddressRef{
52+
Type: datastore.ContractType(cctp_verifier.ResolverType),
53+
Qualifier: cctpQualifier,
54+
}, chainSelector, toAddress)
55+
56+
if (cctpVerifierErr == nil) != (cctpResolverErr == nil) {
57+
return nil, fmt.Errorf(
58+
"chain %d: cctp verifier and resolver must both exist or both be absent (verifier error: %v, resolver error: %v)",
59+
chainSelector, cctpVerifierErr, cctpResolverErr,
60+
)
61+
}
62+
63+
if cctpVerifierErr == nil {
64+
result.CCTPVerifierAddress = cctpVerifierAddr
65+
result.CCTPVerifierResolverAddress = cctpResolverAddr
66+
}
67+
68+
lombardResolverAddr, lombardResolverErr := dsutil.FindAndFormatRef(ds, datastore.AddressRef{
69+
Type: datastore.ContractType(lombard_verifier.ResolverType),
70+
Qualifier: lombardQualifier,
71+
}, chainSelector, toAddress)
72+
73+
if lombardResolverErr == nil {
74+
result.LombardVerifierResolverAddress = lombardResolverAddr
75+
}
76+
77+
return result, nil
78+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package adapters
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm/deployment/latest/operations/onramp"
7+
"github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm/deployment/v1_7_0/operations/versioned_verifier_resolver"
8+
execcontract "github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm/deployment/v1_7_0/operations/executor"
9+
"github.com/smartcontractkit/chainlink-ccip/chains/evm/deployment/v1_6_0/operations/rmn_remote"
10+
dsutil "github.com/smartcontractkit/chainlink-ccip/deployment/utils/datastore"
11+
ccvadapters "github.com/smartcontractkit/chainlink-ccip/deployment/v1_7_0/adapters"
12+
"github.com/smartcontractkit/chainlink-deployments-framework/datastore"
13+
)
14+
15+
type EVMVerifierJobConfigAdapter struct{}
16+
17+
var _ ccvadapters.VerifierConfigAdapter = (*EVMVerifierJobConfigAdapter)(nil)
18+
19+
func (a *EVMVerifierJobConfigAdapter) ResolveVerifierContractAddresses(
20+
ds datastore.DataStore,
21+
chainSelector uint64,
22+
committeeQualifier string,
23+
executorQualifier string,
24+
) (*ccvadapters.VerifierContractAddresses, error) {
25+
toAddress := func(ref datastore.AddressRef) (string, error) { return ref.Address, nil }
26+
27+
committeeVerifierAddr, err := dsutil.FindAndFormatFirstRef(ds, chainSelector, toAddress,
28+
datastore.AddressRef{
29+
Type: datastore.ContractType(versioned_verifier_resolver.CommitteeVerifierResolverType),
30+
Qualifier: committeeQualifier,
31+
},
32+
datastore.AddressRef{
33+
Type: datastore.ContractType(versioned_verifier_resolver.CommitteeVerifierContractType),
34+
Qualifier: committeeQualifier,
35+
},
36+
)
37+
if err != nil {
38+
return nil, fmt.Errorf("failed to get committee verifier address for chain %d: %w", chainSelector, err)
39+
}
40+
41+
onRampAddr, err := dsutil.FindAndFormatRef(ds, datastore.AddressRef{
42+
Type: datastore.ContractType(onramp.ContractType),
43+
Version: onramp.Version,
44+
}, chainSelector, toAddress)
45+
if err != nil {
46+
return nil, fmt.Errorf("failed to get on ramp address for chain %d: %w", chainSelector, err)
47+
}
48+
49+
executorAddr, err := dsutil.FindAndFormatRef(ds, datastore.AddressRef{
50+
Type: datastore.ContractType(execcontract.ProxyType),
51+
Qualifier: executorQualifier,
52+
Version: execcontract.Version,
53+
}, chainSelector, toAddress)
54+
if err != nil {
55+
return nil, fmt.Errorf("failed to get executor proxy address for chain %d: %w", chainSelector, err)
56+
}
57+
58+
rmnRemoteAddr, err := dsutil.FindAndFormatRef(ds, datastore.AddressRef{
59+
Type: datastore.ContractType(rmn_remote.ContractType),
60+
Version: rmn_remote.Version,
61+
}, chainSelector, toAddress)
62+
if err != nil {
63+
return nil, fmt.Errorf("failed to get rmn remote address for chain %d: %w", chainSelector, err)
64+
}
65+
66+
return &ccvadapters.VerifierContractAddresses{
67+
CommitteeVerifierAddress: committeeVerifierAddr,
68+
OnRampAddress: onRampAddr,
69+
ExecutorProxyAddress: executorAddr,
70+
RMNRemoteAddress: rmnRemoteAddr,
71+
}, nil
72+
}

ccv/chains/evm/deployment/v1_7_0/operations/versioned_verifier_resolver/versioned_verifier_resolver.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
)
1313

1414
var ContractType cldf_deployment.ContractType = "VersionedVerifierResolver"
15+
var CommitteeVerifierContractType cldf_deployment.ContractType = "CommitteeVerifier"
1516
var CommitteeVerifierResolverType cldf_deployment.ContractType = "CommitteeVerifierResolver"
1617

1718
var Version = semver.MustParse("1.7.0")

deployment/.mockery.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,10 @@ packages:
66
filename: mock_jd_client.go
77
interfaces:
88
JDClient:
9+
github.com/smartcontractkit/chainlink-deployments-framework/offchain:
10+
config:
11+
dir: ./v1_7_0/mocks
12+
pkgname: mocks
13+
filename: mock_offchain_client.go
14+
interfaces:
15+
Client:
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package adapters
2+
3+
import (
4+
"fmt"
5+
"sync"
6+
7+
chainsel "github.com/smartcontractkit/chain-selectors"
8+
"github.com/smartcontractkit/chainlink-deployments-framework/datastore"
9+
)
10+
11+
type CommitteeVerifierContractAdapter interface {
12+
ResolveCommitteeVerifierContracts(
13+
ds datastore.DataStore,
14+
chainSelector uint64,
15+
qualifier string,
16+
) ([]datastore.AddressRef, error)
17+
}
18+
19+
type CommitteeVerifierContractRegistry struct {
20+
mu sync.Mutex
21+
adapters map[string]CommitteeVerifierContractAdapter
22+
}
23+
24+
var (
25+
singletonCommitteeVerifierContractRegistry *CommitteeVerifierContractRegistry
26+
committeeVerifierContractRegistryOnce sync.Once
27+
)
28+
29+
func NewCommitteeVerifierContractRegistry() *CommitteeVerifierContractRegistry {
30+
return &CommitteeVerifierContractRegistry{
31+
adapters: make(map[string]CommitteeVerifierContractAdapter),
32+
}
33+
}
34+
35+
func GetCommitteeVerifierContractRegistry() *CommitteeVerifierContractRegistry {
36+
committeeVerifierContractRegistryOnce.Do(func() {
37+
singletonCommitteeVerifierContractRegistry = NewCommitteeVerifierContractRegistry()
38+
})
39+
return singletonCommitteeVerifierContractRegistry
40+
}
41+
42+
func (r *CommitteeVerifierContractRegistry) Register(family string, a CommitteeVerifierContractAdapter) {
43+
r.mu.Lock()
44+
defer r.mu.Unlock()
45+
if _, exists := r.adapters[family]; !exists {
46+
r.adapters[family] = a
47+
}
48+
}
49+
50+
func (r *CommitteeVerifierContractRegistry) Get(family string) (CommitteeVerifierContractAdapter, bool) {
51+
r.mu.Lock()
52+
defer r.mu.Unlock()
53+
a, ok := r.adapters[family]
54+
return a, ok
55+
}
56+
57+
func (r *CommitteeVerifierContractRegistry) GetByChain(chainSelector uint64) (CommitteeVerifierContractAdapter, error) {
58+
family, err := chainsel.GetSelectorFamily(chainSelector)
59+
if err != nil {
60+
return nil, fmt.Errorf("failed to get chain family for selector %d: %w", chainSelector, err)
61+
}
62+
adapter, ok := r.Get(family)
63+
if !ok {
64+
return nil, fmt.Errorf("no committee verifier contract adapter registered for chain family %q", family)
65+
}
66+
return adapter, nil
67+
}

0 commit comments

Comments
 (0)