Fix Solana msghasher to handle LOOP gRPC type conversions for SVMExtraArgsV1 #21790
Fix Solana msghasher to handle LOOP gRPC type conversions for SVMExtraArgsV1 #21790
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! |
|
I see you updated files related to
|
|
✅ No conflicts with other open PRs targeting |
There was a problem hiding this comment.
Pull request overview
Risk Rating: MEDIUM
This PR updates the TON relay dependency and plugin pin, and adjusts Solana CCIP message hashing to correctly parse ExtraArgs maps after LOOP gRPC type conversions (to support TON→Solana flows).
Changes:
- Bump
github.com/smartcontractkit/chainlink-tonpseudo-version across core, deployment, and test modules. - Update Solana CCIP
parseExtraDataMapto accept LOOP-converted types (int64,[]byte,[]interface{}/[][]byte) and add unit tests. - Update the public plugins manifest to point the TON plugin at the new
chainlink-tongitRef.
Suggested reviewers (per .github/CODEOWNERS):
core/capabilities/ccip/ccipsolana/*:@smartcontractkit/bix-build/deployment/*:@smartcontractkit/ccip-tooling@smartcontractkit/ccip-offchain@smartcontractkit/operations-platform@smartcontractkit/core- Go module/dependency changes:
@smartcontractkit/core@smartcontractkit/foundations(and@smartcontractkit/devex-toolingfor/integration-tests/*)
Areas needing scrupulous human review:
parseExtraDataMaptype coercions and their impact on CCIP message hash stability across plugin boundaries.plugins/plugins.public.yamlcorrectness (invalid YAML will break plugin installation).
Reviewed changes
Copilot reviewed 10 out of 17 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| system-tests/tests/go.mod | Bumps chainlink-ton version used by system tests. |
| system-tests/tests/go.sum | Updates checksums for the new chainlink-ton version. |
| system-tests/lib/go.mod | Bumps chainlink-ton version used by system test libraries. |
| system-tests/lib/go.sum | Updates checksums for the new chainlink-ton version. |
| integration-tests/load/go.mod | Bumps chainlink-ton version for load test module. |
| integration-tests/load/go.sum | Updates checksums for the new chainlink-ton version. |
| integration-tests/go.mod | Bumps chainlink-ton version for integration test module. |
| integration-tests/go.sum | Updates checksums for the new chainlink-ton version. |
| deployment/go.mod | Bumps chainlink-ton version for deployment tooling module. |
| deployment/go.sum | Updates checksums for the new chainlink-ton version. |
| core/scripts/go.mod | Bumps chainlink-ton version for scripts module. |
| core/scripts/go.sum | Updates checksums for the new chainlink-ton version. |
| go.mod | Bumps root module dependency on chainlink-ton. |
| go.sum | Updates root module checksums for the new chainlink-ton version. |
| plugins/plugins.public.yaml | Updates TON plugin gitRef (currently introduces a YAML syntax error). |
| core/capabilities/ccip/ccipsolana/msghasher.go | Adds LOOP gRPC-aware parsing for Solana ExtraArgs map fields. |
| core/capabilities/ccip/ccipsolana/msghasher_test.go | Adds unit tests covering native vs LOOP-converted ExtraArgs map types and invalid inputs. |
| ton: | ||
| - moduleURI: "github.com/smartcontractkit/chainlink-ton" | ||
| gitRef: "v0.0.0-20260326230916-bcfdbe85f221" | ||
| gitRef: "v0.0.0-20260331005855-7b5a4b3384f8 |
There was a problem hiding this comment.
gitRef value is missing a closing quote, which makes this YAML invalid and will likely break loopinstall parsing. Add the terminating " (and keep formatting consistent with other plugin entries).
| gitRef: "v0.0.0-20260331005855-7b5a4b3384f8 | |
| gitRef: "v0.0.0-20260331005855-7b5a4b3384f8" |
| github.com/smartcontractkit/chainlink-testing-framework/lib v1.54.5 | ||
| github.com/smartcontractkit/chainlink-ton v0.0.0-20260326230916-bcfdbe85f221 | ||
| github.com/smartcontractkit/chainlink-ton v0.0.0-20260331005855-7b5a4b3384f8 | ||
| github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260326230916-bcfdbe85f221 |
There was a problem hiding this comment.
chainlink-ton was bumped to a newer pseudo-version, but chainlink-ton/deployment remains pinned to an older commit. Mixing module commits from the same repo can cause subtle incompatibilities and makes it harder to track provenance; consider bumping chainlink-ton/deployment to the matching pseudo-version (or add a comment explaining why it must stay pinned).
| github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260326230916-bcfdbe85f221 | |
| github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260331005855-7b5a4b3384f8 |
| github.com/smartcontractkit/chainlink-testing-framework/seth v1.51.5 | ||
| github.com/smartcontractkit/chainlink-ton v0.0.0-20260326230916-bcfdbe85f221 | ||
| github.com/smartcontractkit/chainlink-ton v0.0.0-20260331005855-7b5a4b3384f8 | ||
| github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260326230916-bcfdbe85f221 |
There was a problem hiding this comment.
chainlink-ton was bumped to a newer pseudo-version, but chainlink-ton/deployment remains pinned to an older commit. Mixing module commits from the same repo can cause subtle incompatibilities and makes it harder to track provenance; consider bumping chainlink-ton/deployment to the matching pseudo-version (or add a comment explaining why it must stay pinned).
| github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260326230916-bcfdbe85f221 | |
| github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260331005855-7b5a4b3384f8 |
| github.com/smartcontractkit/chainlink-testing-framework/lib/grafana v1.51.0 // indirect | ||
| github.com/smartcontractkit/chainlink-testing-framework/parrot v0.6.2 // indirect | ||
| github.com/smartcontractkit/chainlink-testing-framework/sentinel v0.1.2 // indirect | ||
| github.com/smartcontractkit/chainlink-ton v0.0.0-20260326230916-bcfdbe85f221 // indirect | ||
| github.com/smartcontractkit/chainlink-ton v0.0.0-20260331005855-7b5a4b3384f8 // indirect | ||
| github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260326230916-bcfdbe85f221 // indirect | ||
| github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20260218133534-cbd44da2856b // indirect |
There was a problem hiding this comment.
chainlink-ton was bumped to a newer pseudo-version, but chainlink-ton/deployment remains pinned to an older commit. Mixing module commits from the same repo can cause subtle incompatibilities and makes it harder to track provenance; consider bumping chainlink-ton/deployment to the matching pseudo-version (or add a comment explaining why it must stay pinned).
| github.com/smartcontractkit/chainlink-testing-framework/parrot v0.6.2 // indirect | ||
| github.com/smartcontractkit/chainlink-ton v0.0.0-20260326230916-bcfdbe85f221 // indirect | ||
| github.com/smartcontractkit/chainlink-ton v0.0.0-20260331005855-7b5a4b3384f8 // indirect | ||
| github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260326230916-bcfdbe85f221 // indirect |
There was a problem hiding this comment.
chainlink-ton was bumped to a newer pseudo-version, but chainlink-ton/deployment remains pinned to an older commit. Mixing module commits from the same repo can cause subtle incompatibilities and makes it harder to track provenance; consider bumping chainlink-ton/deployment to the matching pseudo-version (or add a comment explaining why it must stay pinned).
| github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260326230916-bcfdbe85f221 // indirect | |
| github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260331005855-7b5a4b3384f8 // indirect |
| github.com/smartcontractkit/chainlink-testing-framework/parrot v0.6.2 // indirect | ||
| github.com/smartcontractkit/chainlink-ton v0.0.0-20260326230916-bcfdbe85f221 // indirect | ||
| github.com/smartcontractkit/chainlink-ton v0.0.0-20260331005855-7b5a4b3384f8 // indirect | ||
| github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260326230916-bcfdbe85f221 // indirect |
There was a problem hiding this comment.
chainlink-ton was bumped to a newer pseudo-version, but chainlink-ton/deployment remains pinned to an older commit. Mixing module commits from the same repo can cause subtle incompatibilities and makes it harder to track provenance; consider bumping chainlink-ton/deployment to the matching pseudo-version (or add a comment explaining why it must stay pinned).
| github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260326230916-bcfdbe85f221 // indirect | |
| github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260331005855-7b5a4b3384f8 // indirect |
| github.com/smartcontractkit/chainlink-testing-framework/parrot v0.6.2 // indirect | ||
| github.com/smartcontractkit/chainlink-ton v0.0.0-20260326230916-bcfdbe85f221 // indirect | ||
| github.com/smartcontractkit/chainlink-ton v0.0.0-20260331005855-7b5a4b3384f8 // indirect | ||
| github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260326230916-bcfdbe85f221 // indirect |
There was a problem hiding this comment.
chainlink-ton was bumped to a newer pseudo-version, but chainlink-ton/deployment remains pinned to an older commit. Mixing module commits from the same repo can cause subtle incompatibilities and makes it harder to track provenance; consider bumping chainlink-ton/deployment to the matching pseudo-version (or add a comment explaining why it must stay pinned).
| github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260326230916-bcfdbe85f221 // indirect | |
| github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260331005855-7b5a4b3384f8 // indirect |
|
…raArgsV1 (#21790) * bump cl-ton first * fix solana extra data handler * fix yaml * lint
…raArgsV1 (#21790) * bump cl-ton first * fix solana extra data handler * fix yaml * lint




When a non-EVM source chain (e.g. TON) sends a message to Solana, the source chain's ExtraDataCodec runs in a LOOP plugin. The decoded map[string]any goes through gRPC protobuf serialization which
changes Go types:
The Solana parseExtraDataMap only accepted the native types, causing "invalid type for ComputeUnits/TokenReceiver/Accounts" errors on TON→Solana lanes.
This follows the same pattern as the EVM msghasher which already handles int64 for destGasAmount (see comment on line 303 of deployment/common/msghasher.go).
Adds test coverage for both native and LOOP-converted type paths.