Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions ccv/chains/evm/deployment/v1_7_0/adapters/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
adapters1_6 "github.com/smartcontractkit/chainlink-ccip/chains/evm/deployment/v1_6_0/adapters"

"github.com/smartcontractkit/chainlink-ccip/deployment/deploy"
ccvadapters "github.com/smartcontractkit/chainlink-ccip/deployment/v1_7_0/adapters"
)

func init() {
Expand All @@ -22,4 +23,6 @@ func init() {
laneMigratorReg := deploy.GetLaneMigratorRegistry()
laneMigratorReg.RegisterRampUpdater(chainsel.FamilyEVM, semver.MustParse("1.7.0"), &LaneMigrator{})
laneMigratorReg.RegisterRouterUpdater(chainsel.FamilyEVM, semver.MustParse("1.2.0"), &adapters1_2.RouterUpdater{})

ccvadapters.GetVerifierJobConfigRegistry().Register(chainsel.FamilyEVM, &EVMVerifierJobConfigAdapter{})
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package adapters

import (
"fmt"

"github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm/deployment/v1_7_0/operations/committee_verifier"
execcontract "github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm/deployment/v1_7_0/operations/executor"
onrampoperations "github.com/smartcontractkit/chainlink-ccip/ccv/chains/evm/deployment/v1_7_0/operations/onramp"
"github.com/smartcontractkit/chainlink-ccip/chains/evm/deployment/v1_6_0/operations/rmn_remote"
dsutil "github.com/smartcontractkit/chainlink-ccip/deployment/utils/datastore"
ccvadapters "github.com/smartcontractkit/chainlink-ccip/deployment/v1_7_0/adapters"
"github.com/smartcontractkit/chainlink-deployments-framework/datastore"
)

type EVMVerifierJobConfigAdapter struct{}

var _ ccvadapters.VerifierConfigAdapter = (*EVMVerifierJobConfigAdapter)(nil)

func (a *EVMVerifierJobConfigAdapter) ResolveVerifierContractAddresses(
ds datastore.DataStore,
chainSelector uint64,
committeeQualifier string,
executorQualifier string,
) (*ccvadapters.VerifierContractAddresses, error) {
toAddress := func(ref datastore.AddressRef) (string, error) { return ref.Address, nil }

committeeVerifierAddr, err := dsutil.FindAndFormatFirstRef(ds, chainSelector, toAddress,
datastore.AddressRef{
Type: datastore.ContractType(committee_verifier.ResolverType),
Qualifier: committeeQualifier,
},
datastore.AddressRef{
Type: datastore.ContractType(committee_verifier.ContractType),
Qualifier: committeeQualifier,
},
)
if err != nil {
return nil, fmt.Errorf("failed to get committee verifier address for chain %d: %w", chainSelector, err)
}

onRampAddr, err := dsutil.FindAndFormatRef(ds, datastore.AddressRef{
Type: datastore.ContractType(onrampoperations.ContractType),
Version: onrampoperations.Version,
}, chainSelector, toAddress)
if err != nil {
return nil, fmt.Errorf("failed to get on ramp address for chain %d: %w", chainSelector, err)
}

executorAddr, err := dsutil.FindAndFormatRef(ds, datastore.AddressRef{
Type: datastore.ContractType(execcontract.ProxyType),
Qualifier: executorQualifier,
Version: execcontract.Version,
}, chainSelector, toAddress)
if err != nil {
return nil, fmt.Errorf("failed to get executor proxy address for chain %d: %w", chainSelector, err)
}

rmnRemoteAddr, err := dsutil.FindAndFormatRef(ds, datastore.AddressRef{
Type: datastore.ContractType(rmn_remote.ContractType),
Version: rmn_remote.Version,
}, chainSelector, toAddress)
if err != nil {
return nil, fmt.Errorf("failed to get rmn remote address for chain %d: %w", chainSelector, err)
}

return &ccvadapters.VerifierContractAddresses{
CommitteeVerifierAddress: committeeVerifierAddr,
OnRampAddress: onRampAddr,
ExecutorProxyAddress: executorAddr,
RMNRemoteAddress: rmnRemoteAddr,
}, nil
}
75 changes: 75 additions & 0 deletions deployment/v1_7_0/adapters/verifier_config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package adapters

import (
"fmt"
"sync"

chainsel "github.com/smartcontractkit/chain-selectors"
"github.com/smartcontractkit/chainlink-deployments-framework/datastore"
)

type VerifierContractAddresses struct {
CommitteeVerifierAddress string
OnRampAddress string
ExecutorProxyAddress string
RMNRemoteAddress string
}

type VerifierConfigAdapter interface {
ResolveVerifierContractAddresses(
ds datastore.DataStore,
chainSelector uint64,
committeeQualifier string,
executorQualifier string,
) (*VerifierContractAddresses, error)
}

type VerifierConfigRegistry struct {
mu sync.Mutex
adapters map[string]VerifierConfigAdapter
}

var (
singletonVerifierJobConfigRegistry *VerifierConfigRegistry
verifierJobConfigRegistryOnce sync.Once
)

func NewVerifierConfigRegistry() *VerifierConfigRegistry {
return &VerifierConfigRegistry{
adapters: make(map[string]VerifierConfigAdapter),
}
}

func GetVerifierJobConfigRegistry() *VerifierConfigRegistry {
verifierJobConfigRegistryOnce.Do(func() {
singletonVerifierJobConfigRegistry = NewVerifierConfigRegistry()
})
return singletonVerifierJobConfigRegistry
}

func (r *VerifierConfigRegistry) Register(family string, a VerifierConfigAdapter) {
r.mu.Lock()
defer r.mu.Unlock()
if _, exists := r.adapters[family]; !exists {
r.adapters[family] = a
}
}

func (r *VerifierConfigRegistry) Get(family string) (VerifierConfigAdapter, bool) {
r.mu.Lock()
defer r.mu.Unlock()
a, ok := r.adapters[family]
return a, ok
}

func (r *VerifierConfigRegistry) GetByChain(chainSelector uint64) (VerifierConfigAdapter, error) {
family, err := chainsel.GetSelectorFamily(chainSelector)
if err != nil {
return nil, fmt.Errorf("failed to get chain family for selector %d: %w", chainSelector, err)
}
adapter, ok := r.Get(family)
if !ok {
return nil, fmt.Errorf("no verifier job config adapter registered for chain family %q", family)
}
return adapter, nil
}
Loading
Loading