smartcontractkit / smartcontractkit/ccip-tools-ts

canton: released 1.13.0 still ships the broken CCIPReceiver package plumbing that main already fixes — please cut a release

Open
#426 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
17
Forks
19
Avg merge
2d 23h
Merged PRs (30d)
51

Description

Summary

The Canton receiver package plumbing that is already fixed on main is still broken in the latest released SDK (@chainlink/ccip-sdk@1.13.0 on npm, and 1.12.0 pinned by ccip-starter-kit-canton). Could you cut a release that includes the fix — or point at the planned release date?

What is broken in 1.13.0 (verified against the pristine npm tarball)
  1. ccipPackages drops the receiver package. dist/canton/index.js:89-92 builds this.ccipPackages with only perPartyRouter and ccipSender; the ccipReceiver key from cantonConfig.packages is never copied. Every ACS lookup that goes through buildCcipTemplates(this.ccipPackages) (dist/canton/explicit-disclosures/acs.js:167) therefore renders the receiver template as #undefined:CCIP.CCIPReceiver:CCIPReceiver.
  2. Receiver create and lookup disagree on the package name. Creation/updates hardcode '#ccip-receiver:CCIP.CCIPReceiver:CCIPReceiver' (dist/canton/index.js:943, :980) while the lookup uses packages.ccipReceiver (see 1). The lookup never finds what creation created, so ensureReceiverForExecute creates a fresh CCIPReceiver on every execute — on our testnet participant we accumulated 38 receiver contracts before noticing.
  3. Aggravated by the starter kit: config/canton-config.example.json ships "ccipReceiver": "ccip-receiver-v2", which guarantees the mismatch with the hardcoded #ccip-receiver creation path (filed separately on the starter kit repo).

On main this is already addressed — ccip-sdk/src/canton/index.ts now includes ccipReceiver in ccipPackages (line ~277) and the hardcoded template id is gone. The fix just never shipped to npm.

Minor residue on main: explicit-disclosures/acs.ts still carries a 'ccip-receiver' default while CantonChain defaults to 'ccip-receiver-v2' — harmless for CantonChain callers, but a trap for anyone calling the ACS helpers directly.

Environment
  • @chainlink/ccip-sdk 1.13.0 (npm latest as of 2026-09-16); starter kit pins 1.12.0 with the same defect
  • Canton 3.5.16, Canton TestNet, self-hosted validator participant
  • Worked around locally by patching dist/canton/index.js (add ccipReceiver to ccipPackages, replace the two hardcoded template ids) — with that patch the full Canton → Ethereum Sepolia flow works end to end, message 0x<REDACTED-KEY>, executed in Sepolia tx 0x<REDACTED-KEY>.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing src/canton/index.ts and the related explicit-disclosures/acs.ts paths cited in the issue, then inspect the repository's package and release configuration. Confirm that the existing main-branch fix is included in the built npm tarball, and verify the published version no longer drops or hardcodes the receiver package template.

Written by the indexing model from the issue text.

Assessment

Tech stack
node.js, typescript
Domain
release
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
64/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.