From c2d13afeaf9e803a8da0a823704f1ec06f163552 Mon Sep 17 00:00:00 2001 From: Dmytro Haidashenko Date: Mon, 8 Dec 2025 14:12:29 +0200 Subject: [PATCH 1/2] Forwarder Set Config use contract qualifier --- deployment/cre/forwarder/configure.go | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/deployment/cre/forwarder/configure.go b/deployment/cre/forwarder/configure.go index 071336d7959..015e15f4e84 100644 --- a/deployment/cre/forwarder/configure.go +++ b/deployment/cre/forwarder/configure.go @@ -54,7 +54,8 @@ func (d DonConfiguration) ForwarderConfig(chainFamily string, c offchain.Client) } type ConfigureSeqInput struct { - DON DonConfiguration // the DON to configuration for the forwarder to accept + DON DonConfiguration // the DON to configuration for the forwarder to accept + Qualifier string // used to differentiate Forwarder contracts deployed to the same chain. // MCMSConfig is optional. If non-nil, the changes will be proposed using MCMS. MCMSConfig *contracts.MCMSConfig @@ -96,14 +97,23 @@ var ConfigureSeq = operations.NewSequence[ConfigureSeqInput, ConfigureSeqOutput, continue } - addressesRefs := deps.Env.DataStore.Addresses().Filter( + filters := []datastore.FilterFunc[datastore.AddressRefKey, datastore.AddressRef]{ datastore.AddressRefByChainSelector(chain.Selector), - datastore.AddressRefByType(datastore.ContractType(contracts.KeystoneForwarder)), - ) + datastore.AddressRefByType(datastore.ContractType(contracts.KeystoneForwarder))} + if input.Qualifier != "" { + filters = append(filters, datastore.AddressRefByQualifier(input.Qualifier)) + } + + addressesRefs := deps.Env.DataStore.Addresses().Filter(filters...) if len(addressesRefs) == 0 { return ConfigureSeqOutput{}, fmt.Errorf("configure-forwarders-seq failed: no KeystoneForwarder contract found for chain selector %d", chain.Selector) } + if len(addressesRefs) > 1 { + deps.Env.Logger.Warnf( + "Found %d forwarder contract for a chain. Config will be applied to all of them.", len(addressesRefs)) + } + var mcmsContracts *changesetstate.MCMSWithTimelockState if input.MCMSConfig != nil { var mcmsErr error From a1303e6ac9c53ec938daef66ee1fe43418dc49b4 Mon Sep 17 00:00:00 2001 From: Dmytro Haidashenko <34754799+dhaidashenko@users.noreply.github.com> Date: Mon, 8 Dec 2025 14:54:28 +0200 Subject: [PATCH 2/2] Update deployment/cre/forwarder/configure.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- deployment/cre/forwarder/configure.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/cre/forwarder/configure.go b/deployment/cre/forwarder/configure.go index 015e15f4e84..25f7dc27069 100644 --- a/deployment/cre/forwarder/configure.go +++ b/deployment/cre/forwarder/configure.go @@ -111,7 +111,7 @@ var ConfigureSeq = operations.NewSequence[ConfigureSeqInput, ConfigureSeqOutput, if len(addressesRefs) > 1 { deps.Env.Logger.Warnf( - "Found %d forwarder contract for a chain. Config will be applied to all of them.", len(addressesRefs)) + "Found %d forwarder contracts for a chain. Config will be applied to all of them.", len(addressesRefs)) } var mcmsContracts *changesetstate.MCMSWithTimelockState