[DO NOT MERGE] Disable Solana non-LOOP mode #22139
[DO NOT MERGE] Disable Solana non-LOOP mode #22139huangzhen1997 wants to merge 22 commits intodevelopfrom
Conversation
|
👋 huangzhen1997, thanks for creating this pull request! To help reviewers, please consider creating future PRs as drafts first. This allows you to self-review and make any final changes before notifying the team. Once you're ready, you can mark it as "Ready for review" to request feedback. Thanks! |
|
✅ No conflicts with other open PRs targeting |
|
I see you updated files related to
|
There was a problem hiding this comment.
Pull request overview
Risk Rating: HIGH — changes the Solana relayer instantiation path in a core factory and removes the embedded (non-LOOP) fallback, which can materially affect runtime behavior and deploy configuration expectations.
This PR removes the ability to run Solana in embedded (non-LOOP) mode and updates the relayer factory to always create Solana relayers via a LOOP plugin.
Changes:
- Removes the embedded Solana chain fallback and always constructs a LOOP relayer for each enabled Solana chain.
- Hardcodes the Solana plugin command to
chainlink-solanaand keeps env-file parsing for plugin env vars.
Human review focus:
- Configuration/feature-gating implications of ignoring
CL_SOLANA_CMD(and consistency with other Solana plugin “supported” checks). - Runtime behavior when the
chainlink-solanabinary is not present or when env-file settings differ across deployments.
|
| -- -v -run "Test_CCIPMessaging_EVM2EVM" -timeout 18m -count=1 -parallel=4 ./smoke/ccip | ||
| test_go_project_path: integration-tests | ||
|
|
||
| - id: smoke/ccip/ccip_messaging_test.go:Test_CCIPMessaging_EVM2Solana |
There was a problem hiding this comment.
Remove the NON-LOOP in-process Solana e2e testcase. The LOOP supported is kept below.
| assertTableRenders(t, r) | ||
| } | ||
|
|
||
| func TestShell_IndexSolanaChains(t *testing.T) { |
There was a problem hiding this comment.
Moved to a different file core/cmd/chains_commands_integration_test.go where we run it with //go:build integration to enable LOOP
| assert.Contains(t, renderLines[14], n2.State) | ||
| } | ||
|
|
||
| func solanaStartNewApplication(t *testing.T, cfgs ...*solcfg.TOMLConfig) *cltest.TestApplication { |
There was a problem hiding this comment.
Same as here. Moved to core/cmd/node_commands_integration_test.go.
| } | ||
| } | ||
|
|
||
| func Test_SolanaChainsController_Show(t *testing.T) { |
There was a problem hiding this comment.
Same idea, moved to different file to run with LOOP
| @@ -0,0 +1,33 @@ | |||
| //go:build integration | |||
|
|
|||
| package cmd_test | |||
There was a problem hiding this comment.
Moved from core/cmd/blocks_commands_test.go
| assertTableRenders(t, r) | ||
| } | ||
|
|
||
| func TestShell_IndexSolanaChains(t *testing.T) { |
There was a problem hiding this comment.
Moved from core/cmd/shell_remote_test.go
Besides solana config, I have another branch in progress that removes the codec in core and import it from chain specific repo, like TON does. |
CORA - Pending Reviewers
Legend: ✅ Approved | ❌ Changes Requested | 💬 Commented | 🚫 Dismissed | ⏳ Pending | ❓ Unknown For more details, see the full review summary. |
|
| test_go_project_path: integration-tests | ||
| install_plugins_public: true | ||
| test_env_vars: | ||
| CL_SOLANA_CMD: chainlink-solana |
There was a problem hiding this comment.
NewLOOPRelayer() now uses plugin default value
| ChainRW: ChainRWProvider{}, | ||
| ExtraDataCodec: ExtraDataDecoder{}, | ||
| PriceOnlyCommitFn: consts.MethodCommitPriceOnly, | ||
| CCIPProviderSupported: env.SolanaPlugin.Cmd.Get() != "", |
There was a problem hiding this comment.
LOOP mode only, so CCIP provide always supported
| --format=github-actions \ | ||
| -- -v -run "^TestRMNCurse$" -timeout 20m -count=1 -parallel=4 smoke/ccip/ccip_cs_rmn_curse_uncurse_test.go | ||
| test_go_project_path: integration-tests | ||
| install_plugins_public: true |
There was a problem hiding this comment.
Is this really necessary? It's testing against EVM?
| --format=github-actions \ | ||
| -- -v -run "^TestRMNCurseIdempotent$" -timeout 20m -count=1 -parallel=4 smoke/ccip/ccip_cs_rmn_curse_uncurse_test.go | ||
| test_go_project_path: integration-tests | ||
| install_plugins_public: true |
There was a problem hiding this comment.
Same for all these other tests
| lggr := logger.TestLogger(t) | ||
| reg := plugins.NewTestLoopRegistry(lggr) | ||
| ks := &keystore.StarknetLooppSigner{StarkNet: mocks.NewStarkNet(t)} | ||
| ks := &keystore.SolanaLooppSigner{Solana: mocks.NewSolana(t)} |
| @@ -619,78 +619,78 @@ HTTPURL = 'http://broadcast.mirror' | |||
| SendOnly = true | |||
|
|
|||
| [[Solana]] | |||
There was a problem hiding this comment.
Hmm why are all these configs changed?




Jira: https://smartcontract-it.atlassian.net/browse/NONEVM-4683
Prerequisite: Chainlink-solana raw config smartcontractkit/chainlink-solana#1541
Similar to Cosmos/Starnet transformation, Solana now will run exclusively as a LOOP plugin, matching every other non-EVM chain in the codebase.
(cmp.Or(env.SolanaPlugin.Cmd.Get(), env.SolanaPlugin.CmdDefault))and fails fast if empty. There's a next step to refactor the solana config so we can invoke NewLOOPRelayer directly, and remove Solana codec by importing from chainlink-solana