44 "context"
55 "fmt"
66
7+ chainsel "github.com/smartcontractkit/chain-selectors"
78 "github.com/smartcontractkit/mcms"
89 "github.com/smartcontractkit/mcms/chainwrappers"
910 "github.com/smartcontractkit/mcms/sdk"
@@ -12,6 +13,15 @@ import (
1213 cldfmcmsadapters "github.com/smartcontractkit/chainlink-deployments-framework/chain/mcms/adapters"
1314)
1415
16+ func newChainAccessor (cfg * forkConfig ) * cldfmcmsadapters.ChainAccessAdapter {
17+ a := cldfmcmsadapters .Wrap (cfg .blockchains )
18+ return & a
19+ }
20+
21+ func selectorFamily (sel types.ChainSelector ) (string , error ) {
22+ return chainsel .GetSelectorFamily (uint64 (sel ))
23+ }
24+
1525// getInspectorFromChainSelector returns an inspector for the given chain selector.
1626func getInspectorFromChainSelector (cfg * forkConfig ) (sdk.Inspector , error ) {
1727 chainSelector := types .ChainSelector (cfg .chainSelector )
@@ -20,9 +30,28 @@ func getInspectorFromChainSelector(cfg *forkConfig) (sdk.Inspector, error) {
2030 return nil , fmt .Errorf ("failed to get chain metadata from timelock proposal for chain selector %v" , cfg .chainSelector )
2131 }
2232
23- chainAccessor := cldfmcmsadapters .Wrap (cfg .blockchains )
33+ family , err := selectorFamily (chainSelector )
34+ if err != nil {
35+ return nil , fmt .Errorf ("chain selector family: %w" , err )
36+ }
2437
25- return chainwrappers .BuildInspector (& chainAccessor , chainSelector , cfg .timelockProposal .Action , chainMetadata )
38+ acc := newChainAccessor (cfg )
39+ action := cfg .timelockProposal .Action
40+
41+ switch family {
42+ case chainsel .FamilyEVM :
43+ return buildEVMInspector (acc , action , chainSelector , chainMetadata )
44+ case chainsel .FamilySolana :
45+ return buildSolanaInspector (acc , action , chainSelector , chainMetadata )
46+ case chainsel .FamilyAptos :
47+ return buildAptosInspector (acc , action , chainSelector , chainMetadata )
48+ case chainsel .FamilySui :
49+ return buildSuiInspector (acc , action , chainSelector , chainMetadata )
50+ case chainsel .FamilyTon :
51+ return buildTonInspector (acc , action , chainSelector , chainMetadata )
52+ default :
53+ return chainwrappers .BuildInspector (acc , chainSelector , action , chainMetadata )
54+ }
2655}
2756
2857// createExecutable creates an MCMS executable for the proposal.
@@ -73,9 +102,28 @@ func getExecutorWithChainOverride(cfg *forkConfig, chainSelector types.ChainSele
73102 return nil , fmt .Errorf ("failed to get chain metadata from timelock proposal for chain selector %v" , chainSelector )
74103 }
75104
76- chainAccessor := cldfmcmsadapters .Wrap (cfg .blockchains )
105+ family , err := selectorFamily (chainSelector )
106+ if err != nil {
107+ return nil , fmt .Errorf ("chain selector family: %w" , err )
108+ }
77109
78- return chainwrappers .BuildExecutor (& chainAccessor , chainSelector , encoder , cfg .timelockProposal .Action , chainMetadata )
110+ acc := newChainAccessor (cfg )
111+ action := cfg .timelockProposal .Action
112+
113+ switch family {
114+ case chainsel .FamilyEVM :
115+ return buildEVMExecutor (acc , action , chainSelector , encoder , chainMetadata )
116+ case chainsel .FamilySolana :
117+ return buildSolanaExecutor (acc , action , chainSelector , encoder , chainMetadata )
118+ case chainsel .FamilyAptos :
119+ return buildAptosExecutor (acc , action , chainSelector , encoder , chainMetadata )
120+ case chainsel .FamilySui :
121+ return buildSuiExecutor (acc , action , chainSelector , encoder , chainMetadata )
122+ case chainsel .FamilyTon :
123+ return buildTonExecutor (acc , action , chainSelector , encoder , chainMetadata )
124+ default :
125+ return chainwrappers .BuildExecutor (acc , chainSelector , encoder , action , chainMetadata )
126+ }
79127}
80128
81129// getTimelockExecutorWithChainOverride returns a timelock executor for the given chain selector.
@@ -85,7 +133,26 @@ func getTimelockExecutorWithChainOverride(cfg *forkConfig, chainSelector types.C
85133 return nil , fmt .Errorf ("failed to get chain metadata from timelock proposal for chain selector %v" , chainSelector )
86134 }
87135
88- chainAccessor := cldfmcmsadapters .Wrap (cfg .blockchains )
136+ family , err := selectorFamily (chainSelector )
137+ if err != nil {
138+ return nil , fmt .Errorf ("chain selector family: %w" , err )
139+ }
89140
90- return chainwrappers .BuildTimelockExecutor (& chainAccessor , chainSelector , cfg .timelockProposal .Action , chainMetadata )
141+ acc := newChainAccessor (cfg )
142+ action := cfg .timelockProposal .Action
143+
144+ switch family {
145+ case chainsel .FamilyEVM :
146+ return buildEVMTimelockExecutor (acc , action , chainSelector , chainMetadata )
147+ case chainsel .FamilySolana :
148+ return buildSolanaTimelockExecutor (acc , action , chainSelector , chainMetadata )
149+ case chainsel .FamilyAptos :
150+ return buildAptosTimelockExecutor (acc , action , chainSelector , chainMetadata )
151+ case chainsel .FamilySui :
152+ return buildSuiTimelockExecutor (acc , action , chainSelector , chainMetadata )
153+ case chainsel .FamilyTon :
154+ return buildTonTimelockExecutor (acc , action , chainSelector , chainMetadata )
155+ default :
156+ return chainwrappers .BuildTimelockExecutor (acc , chainSelector , action , chainMetadata )
157+ }
91158}
0 commit comments