Skip to content

Commit 1ffde0d

Browse files
feat: replace custom per-chain builders with the mcms lib's helpers (#21523)
1 parent 6cf71fb commit 1ffde0d

17 files changed

Lines changed: 319 additions & 324 deletions

File tree

core/scripts/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ require (
524524
github.com/smartcontractkit/cre-sdk-go v1.5.0 // indirect
525525
github.com/smartcontractkit/freeport v0.1.3-0.20250828155247-add56fa28aad // indirect
526526
github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect
527-
github.com/smartcontractkit/mcms v0.38.1 // indirect
527+
github.com/smartcontractkit/mcms v0.38.2 // indirect
528528
github.com/smartcontractkit/smdkg v0.0.0-20251029093710-c38905e58aeb // indirect
529529
github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20241009055228-33d0c0bf38de // indirect
530530
github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20251120172354-e8ec0386b06c // indirect

core/scripts/go.sum

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deployment/common/proposalutils/mcms_helpers.go

Lines changed: 25 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@ import (
1010

1111
owner_helpers "github.com/smartcontractkit/ccip-owner-contracts/pkg/gethwrappers"
1212
chain_selectors "github.com/smartcontractkit/chain-selectors"
13+
mcmschainwrappers "github.com/smartcontractkit/mcms/chainwrappers"
1314
mcmssdk "github.com/smartcontractkit/mcms/sdk"
1415
mcmsaptossdk "github.com/smartcontractkit/mcms/sdk/aptos"
1516
mcmsevmsdk "github.com/smartcontractkit/mcms/sdk/evm"
1617
mcmssolanasdk "github.com/smartcontractkit/mcms/sdk/solana"
1718
mcmstypes "github.com/smartcontractkit/mcms/types"
1819

20+
cldfmcmsadapters "github.com/smartcontractkit/chainlink-deployments-framework/chain/mcms/adapters"
1921
cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment"
2022
)
2123

@@ -86,59 +88,37 @@ func McmsInspectorForChain(env cldf.Environment, chain uint64, opts ...MCMSInspe
8688
opt(&options)
8789
}
8890

89-
chainFamily, err := mcmstypes.GetChainSelectorFamily(mcmstypes.ChainSelector(chain))
90-
if err != nil {
91-
return nil, fmt.Errorf("failed to get chain family for chain %d: %w", chain, err)
91+
action := mcmstypes.TimelockActionSchedule
92+
if options.AptosRole.String() != "unknown" {
93+
var err error
94+
action, err = mcmsaptossdk.ActionFromAptosRole(options.AptosRole)
95+
if err != nil {
96+
return nil, fmt.Errorf("failed to get action from aptos role %s: %w", options.AptosRole, err)
97+
}
9298
}
9399

94-
switch chainFamily {
95-
case chain_selectors.FamilyEVM:
96-
return mcmsevmsdk.NewInspector(env.BlockChains.EVMChains()[chain].Client), nil
97-
case chain_selectors.FamilySolana:
98-
return mcmssolanasdk.NewInspector(env.BlockChains.SolanaChains()[chain].Client), nil
99-
case chain_selectors.FamilyAptos:
100-
// NOTE: Aptos changesets do not use this function. They construct inspectors
101-
// directly in utils/mcms.go (GenerateProposal / GenerateCurseMCMSProposal)
102-
// because they need finer control over isCurseMCMS.
103-
if options.AptosRole.String() == "unknown" {
104-
return nil, fmt.Errorf("aptos role not properly set for chain: %d", chain)
105-
}
106-
inspector := mcmsaptossdk.NewInspector(env.BlockChains.AptosChains()[chain].Client, options.AptosRole)
100+
chainAccessor := cldfmcmsadapters.Wrap(env.BlockChains)
107101

108-
return inspector, nil
109-
default:
110-
return nil, fmt.Errorf("unsupported chain family %s", chainFamily)
111-
}
102+
return mcmschainwrappers.BuildInspector(&chainAccessor, mcmstypes.ChainSelector(chain), action,
103+
mcmstypes.ChainMetadata{})
112104
}
113105

114106
func McmsInspectors(env cldf.Environment) (map[uint64]mcmssdk.Inspector, error) {
115-
evmChains := env.BlockChains.EVMChains()
116-
solanaChains := env.BlockChains.SolanaChains()
117-
aptosChains := env.BlockChains.AptosChains()
118-
inspectors := make(map[uint64]mcmssdk.Inspector, len(evmChains)+len(solanaChains)+len(aptosChains))
119-
120-
for _, chain := range evmChains {
121-
var err error
122-
inspectors[chain.Selector], err = McmsInspectorForChain(env, chain.Selector)
123-
if err != nil {
124-
return nil, fmt.Errorf("failed to get mcms inspector for chain %s: %w", chain.String(), err)
125-
}
107+
chainsMetadata := map[mcmstypes.ChainSelector]mcmstypes.ChainMetadata{}
108+
for chainSelector := range env.BlockChains.All() {
109+
chainsMetadata[mcmstypes.ChainSelector(chainSelector)] = mcmstypes.ChainMetadata{}
126110
}
127111

128-
for _, chain := range solanaChains {
129-
var err error
130-
inspectors[chain.Selector], err = McmsInspectorForChain(env, chain.Selector)
131-
if err != nil {
132-
return nil, fmt.Errorf("failed to get mcms inspector for chain %s: %w", chain.String(), err)
133-
}
112+
chainAccessor := cldfmcmsadapters.Wrap(env.BlockChains)
113+
114+
mcmsInspectors, err := mcmschainwrappers.BuildInspectors(&chainAccessor, chainsMetadata, mcmstypes.TimelockActionSchedule)
115+
if err != nil {
116+
return nil, fmt.Errorf("failed to build inspectors: %w", err)
134117
}
135118

136-
for _, chain := range aptosChains {
137-
var err error
138-
inspectors[chain.Selector], err = McmsInspectorForChain(env, chain.Selector)
139-
if err != nil {
140-
return nil, fmt.Errorf("failed to get mcms inspector for chain %s: %w", chain.String(), err)
141-
}
119+
inspectors := make(map[uint64]mcmssdk.Inspector, len(mcmsInspectors))
120+
for chainSelector, inspector := range mcmsInspectors {
121+
inspectors[uint64(chainSelector)] = inspector
142122
}
143123

144124
return inspectors, nil
@@ -188,17 +168,8 @@ func BatchOperationForChain(
188168
}
189169

190170
func GetAptosRoleFromAction(action mcmstypes.TimelockAction) (mcmsaptossdk.TimelockRole, error) {
191-
switch action {
192-
case mcmstypes.TimelockActionSchedule:
193-
return mcmsaptossdk.TimelockRoleProposer, nil
194-
case mcmstypes.TimelockActionBypass:
195-
return mcmsaptossdk.TimelockRoleBypasser, nil
196-
case mcmstypes.TimelockActionCancel:
197-
return mcmsaptossdk.TimelockRoleCanceller, nil
198-
case "":
199-
// Default case for empty action to avoid breaking changes
171+
if action == "" {
200172
return mcmsaptossdk.TimelockRoleProposer, nil
201-
default:
202-
return mcmsaptossdk.TimelockRoleProposer, fmt.Errorf("invalid action: %s", action)
203173
}
174+
return mcmsaptossdk.AptosRoleFromAction(action)
204175
}

0 commit comments

Comments
 (0)