Skip to content

Fix Solana msghasher to handle LOOP gRPC type conversions for SVMExtraArgsV1 #21790

Merged
archseer merged 4 commits intodevelopfrom
jh/support-for-ton-to-solana
Mar 31, 2026
Merged

Fix Solana msghasher to handle LOOP gRPC type conversions for SVMExtraArgsV1 #21790
archseer merged 4 commits intodevelopfrom
jh/support-for-ton-to-solana

Conversation

@huangzhen1997
Copy link
Copy Markdown
Contributor

@huangzhen1997 huangzhen1997 commented Mar 31, 2026

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:

  • uint32 → int64
  • [32]byte → []byte
  • [][32]byte → []interface{}

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.

@huangzhen1997 huangzhen1997 requested review from a team as code owners March 31, 2026 01:24
Copilot AI review requested due to automatic review settings March 31, 2026 01:24
@github-actions
Copy link
Copy Markdown
Contributor

👋 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!

@github-actions
Copy link
Copy Markdown
Contributor

I see you updated files related to core. Please run make gocs in the root directory to add a changeset as well as in the text include at least one of the following tags:

  • #added For any new functionality added.
  • #breaking_change For any functionality that requires manual action for the node to boot.
  • #bugfix For bug fixes.
  • #changed For any change to the existing functionality.
  • #db_update For any feature that introduces updates to database schema.
  • #deprecation_notice For any upcoming deprecation functionality.
  • #internal For changesets that need to be excluded from the final changelog.
  • #nops For any feature that is NOP facing and needs to be in the official Release Notes for the release.
  • #removed For any functionality/config that is removed.
  • #updated For any functionality that is updated.
  • #wip For any change that is not ready yet and external communication about it should be held off till it is feature complete.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 31, 2026

✅ No conflicts with other open PRs targeting develop

@huangzhen1997 huangzhen1997 changed the title Jh/support for ton to solana Fix Solana msghasher to handle LOOP gRPC type conversions for SVMExtraArgsV1 Mar 31, 2026
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-ton pseudo-version across core, deployment, and test modules.
  • Update Solana CCIP parseExtraDataMap to 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-ton gitRef.

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-tooling for /integration-tests/*)

Areas needing scrupulous human review:

  • parseExtraDataMap type coercions and their impact on CCIP message hash stability across plugin boundaries.
  • plugins/plugins.public.yaml correctness (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.

Comment thread plugins/plugins.public.yaml Outdated
ton:
- moduleURI: "github.com/smartcontractkit/chainlink-ton"
gitRef: "v0.0.0-20260326230916-bcfdbe85f221"
gitRef: "v0.0.0-20260331005855-7b5a4b3384f8
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Suggested change
gitRef: "v0.0.0-20260331005855-7b5a4b3384f8
gitRef: "v0.0.0-20260331005855-7b5a4b3384f8"

Copilot uses AI. Check for mistakes.
Comment thread deployment/go.mod
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
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Suggested change
github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260326230916-bcfdbe85f221
github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260331005855-7b5a4b3384f8

Copilot uses AI. Check for mistakes.
Comment thread integration-tests/go.mod
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
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Suggested change
github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260326230916-bcfdbe85f221
github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260331005855-7b5a4b3384f8

Copilot uses AI. Check for mistakes.
Comment on lines 505 to 510
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
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Copilot uses AI. Check for mistakes.
Comment thread system-tests/lib/go.mod
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
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Suggested change
github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260326230916-bcfdbe85f221 // indirect
github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260331005855-7b5a4b3384f8 // indirect

Copilot uses AI. Check for mistakes.
Comment thread system-tests/tests/go.mod
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
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Suggested change
github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260326230916-bcfdbe85f221 // indirect
github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260331005855-7b5a4b3384f8 // indirect

Copilot uses AI. Check for mistakes.
Comment thread core/scripts/go.mod
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
Copy link

Copilot AI Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Suggested change
github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260326230916-bcfdbe85f221 // indirect
github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20260331005855-7b5a4b3384f8 // indirect

Copilot uses AI. Check for mistakes.
@archseer archseer enabled auto-merge March 31, 2026 01:33
archseer
archseer previously approved these changes Mar 31, 2026
ogtownsend
ogtownsend previously approved these changes Mar 31, 2026
@huangzhen1997 huangzhen1997 dismissed stale reviews from ogtownsend and archseer via e5b6d9f March 31, 2026 01:42
@trunk-io
Copy link
Copy Markdown

trunk-io Bot commented Mar 31, 2026

Static BadgeStatic BadgeStatic BadgeStatic Badge

View Full Report ↗︎Docs

@cl-sonarqube-production
Copy link
Copy Markdown

@archseer archseer added this pull request to the merge queue Mar 31, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Mar 31, 2026
@archseer archseer added this pull request to the merge queue Mar 31, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Mar 31, 2026
@archseer archseer added this pull request to the merge queue Mar 31, 2026
Merged via the queue into develop with commit 2f75e59 Mar 31, 2026
220 of 222 checks passed
@archseer archseer deleted the jh/support-for-ton-to-solana branch March 31, 2026 05:19
prashantkumar1982 pushed a commit that referenced this pull request Apr 2, 2026
…raArgsV1 (#21790)

* bump cl-ton first

* fix solana extra data handler

* fix yaml

* lint
huangzhen1997 added a commit that referenced this pull request Apr 7, 2026
…raArgsV1 (#21790)

* bump cl-ton first

* fix solana extra data handler

* fix yaml

* lint
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants