From 12d5b27c3cdc3034ffa57f332646e6c8941a6e91 Mon Sep 17 00:00:00 2001 From: Margaret Ma Date: Thu, 27 Feb 2025 09:09:12 -0500 Subject: [PATCH] allow addresses to be filtered by labels in external api (#16600) --- deployment/keystone/changeset/state.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/deployment/keystone/changeset/state.go b/deployment/keystone/changeset/state.go index 3cad434525d..5161c9b1d79 100644 --- a/deployment/keystone/changeset/state.go +++ b/deployment/keystone/changeset/state.go @@ -23,6 +23,11 @@ import ( type GetContractSetsRequest struct { Chains map[uint64]deployment.Chain AddressBook deployment.AddressBook + + // Labels indicates the label set that a contract must include to be considered as a member + // of the returned contract set. By default, an empty label set implies that only contracts without + // labels will be considered. Otherwise, all labels must be on the contract (e.g., "label1" AND "label2"). + Labels []string } type GetContractSetsResponse struct { @@ -135,7 +140,10 @@ func GetContractSets(lggr logger.Logger, req *GetContractSetsRequest) (*GetContr if err != nil { return nil, fmt.Errorf("failed to get addresses for chain %d: %w", id, err) } - cs, err := loadContractSet(lggr, chain, addrs) + + filtered := deployment.LabeledAddresses(addrs).And(req.Labels...) + + cs, err := loadContractSet(lggr, chain, filtered) if err != nil { return nil, fmt.Errorf("failed to load contract set for chain %d: %w", id, err) }