Skip to content

Add support for SUI, Hedera, and FQ 2.0#197

Open
finleydecker wants to merge 11 commits intomainfrom
support-sui-hedera-fq2.0
Open

Add support for SUI, Hedera, and FQ 2.0#197
finleydecker wants to merge 11 commits intomainfrom
support-sui-hedera-fq2.0

Conversation

@finleydecker
Copy link
Copy Markdown

@finleydecker finleydecker commented Mar 19, 2026

  • Added support for SUI and Hedera CCIP sends
  • Added FQ 2.0 ABI to support token transfers with the new FQ

@vercel
Copy link
Copy Markdown

vercel Bot commented Mar 19, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
ccip-tools-ts Ready Ready Preview, Comment Mar 19, 2026 8:25am

Request Review

@github-actions
Copy link
Copy Markdown

Coverage Report

ℹ tests 770
ℹ suites 221
ℹ pass 768
ℹ fail 0
ℹ cancelled 0
ℹ skipped 2
ℹ todo 0
ℹ duration_ms 155545.791172

> @chainlink/ccip-cli@1.2.1 test
> node --test

▶ lane-latency command
  ✔ should output JSON format correctly (4.388217ms)
  ✔ should resolve chain IDs to chain selectors (0.706952ms)
  ✔ should use custom API URL when provided (1.297719ms)
  ✔ should output log format correctly (0.722272ms)
  ✔ should handle chain IDs as input (0.567568ms)
  ✔ should handle chain selectors as input (0.545492ms)
  ✔ should throw CCIPApiClientNotAvailableError when --no-api flag is set (1.200501ms)
  ✔ should work normally when --no-api flag is false (0.699363ms)
  ✔ should forward blockConfirmations to API URL (0.610106ms)
  ✔ should not include numOfBlocks when blockConfirmations is not provided (0.728697ms)
  ▶ CCIP_API environment variable integration
    ✔ should respect CCIP_API=false environment variable (0.514218ms)
  ✔ CCIP_API environment variable integration (0.70052ms)
✔ lane-latency command (14.03135ms)
▶ e2e command show EVM
  ▶ pretty format (default)
    ✔ should show complete CCIP transaction details EVM to EVM (10174.309826ms)
  ✔ pretty format (default) (10175.379797ms)
  ▶ json format
    ✔ should output valid JSON with all expected fields (8306.484475ms)
  ✔ json format (8306.673043ms)
  ▶ log format
    ✔ should output in log format with object assignments (8126.569617ms)
  ✔ log format (8126.930134ms)
  ▶ verbose flag
    ✔ should work with verbose flag enabled (9072.425332ms)
  ✔ verbose flag (9072.631818ms)
  ▶ error handling
    ✔ should handle invalid transaction hash gracefully (6245.075662ms)
    ✔ should require transaction hash argument (1430.093309ms)
  ✔ error handling (7675.454581ms)
  ✔ should show complete CCIP transaction details EVM to Aptos (10007.513029ms)
  ✔ should show complete CCIP transaction details EVM to Solana (8207.163269ms)
✔ e2e command show EVM (61575.797926ms)
▶ e2e command show Solana
  ✔ should show complete CCIP transaction details Solana to EVM (9401.902884ms)
✔ e2e command show Solana (9402.135166ms)
▶ e2e command show Aptos
  ✔ should show complete CCIP transaction details Aptos to EVM (7506.420643ms)
✔ e2e command show Aptos (7506.647149ms)
﹣ e2e command show TON (0.061252ms) # SKIP
▶ formatCCIPError
  ✔ should return null for non-CCIPError instances (1.140541ms)
  ✔ should format CCIPError with code and message (0.481374ms)
  ✔ should include help section with recovery hint (0.145954ms)
  ✔ should include note section for transient errors (0.220814ms)
  ✔ should include retry timing for transient errors with retryAfterMs (0.263141ms)
  ✔ should not include note section for permanent errors (0.186054ms)
  ✔ should format error with structured output (0.212995ms)
  ✔ should include stack trace when verbose is true (0.327438ms)
  ✔ should not include stack trace when verbose is false (0.19554ms)
✔ formatCCIPError (4.500505ms)
ℹ tests 30
ℹ suites 12
ℹ pass 30
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 78659.350628
-------------------------------|---------|----------|---------|---------|---------------------------
File                           | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s         
-------------------------------|---------|----------|---------|---------|---------------------------
All files                      |   71.84 |    77.57 |   58.41 |   71.84 |                           
 ccip-cli/src                  |   83.78 |    77.77 |      50 |   83.78 |                           
  index.ts                     |   83.78 |    77.77 |      50 |   83.78 | ...64,87-91,97-98,103-108 
 ccip-cli/src/commands         |   52.35 |    72.89 |   53.84 |   52.35 |                           
  index.ts                     |     100 |      100 |     100 |     100 |                           
  lane-latency.ts              |   72.56 |     90.9 |   33.33 |   72.56 | 41-56,63-70,105-111       
  manual-exec.ts               |   26.43 |      100 |       0 |   26.43 | 61-114,121-131,133-259    
  parse.ts                     |   57.14 |      100 |       0 |   57.14 | 46-50,57-64,66-91         
  send.ts                      |   15.88 |      100 |       0 |   15.88 | ...71-178,188-217,219-428 
  show.ts                      |   88.76 |     62.5 |      60 |   88.76 | ...78-180,189-190,230-231 
  supported-tokens.ts          |   20.64 |      100 |       0 |   20.64 | ...99-209,211-266,268-281 
  token.ts                     |   22.72 |      100 |       0 |   22.72 | 24-53,60-67,69-132        
  types.ts                     |     100 |      100 |     100 |     100 |                           
  utils.ts                     |   85.29 |    74.28 |    92.3 |   85.29 | ...85-595,603-611,621-627 
 ccip-cli/src/providers        |   51.62 |    75.51 |      16 |   51.62 |                           
  aptos.ts                     |   53.65 |      100 |       0 |   53.65 | ...70,78-85,91-92,101-123 
  evm.ts                       |    39.7 |      100 |       0 |    39.7 | 23,40-50,56-85,97-136     
  index.ts                     |   81.65 |    72.72 |      80 |   81.65 | 50-51,190-229             
  solana.ts                    |   50.42 |      100 |       0 |   50.42 | ...-71,79-85,89-90,99-117 
  sui.ts                       |      50 |      100 |       0 |      50 | 11-20                     
  ton.ts                       |   14.58 |      100 |       0 |   14.58 | 22-144                    
 ccip-sdk/src                  |   94.41 |    81.78 |   93.67 |   94.41 |                           
  chain.ts                     |   93.32 |    80.28 |      75 |   93.32 | ...04,1548-1549,1638-1639 
  commits.ts                   |     100 |    94.73 |     100 |     100 | 52                        
  execution.ts                 |   92.19 |     92.3 |     100 |   92.19 | 130-137,149-156           
  explorer.ts                  |     100 |      100 |     100 |     100 |                           
  extra-args.ts                |     100 |    86.66 |     100 |     100 | 179,214                   
  gas.ts                       |   89.69 |       40 |     100 |   89.69 | 107-118,146-150           
  http-status.ts               |     100 |      100 |     100 |     100 |                           
  index.ts                     |     100 |      100 |     100 |     100 |                           
  messages.ts                  |   88.48 |    45.09 |     100 |   88.48 | ...19-220,229-230,254-255 
  offchain.ts                  |   91.91 |    76.74 |     100 |   91.91 | ...89,207,222-224,226-232 
  requests.ts                  |   90.89 |    81.08 |     100 |   90.89 | ...65-369,434-435,439-440 
  supported-chains.ts          |     100 |      100 |     100 |     100 |                           
  types.ts                     |     100 |      100 |     100 |     100 |                           
  utils.ts                     |   96.36 |    90.49 |     100 |   96.36 | ...43,759,856-857,864-872 
 ccip-sdk/src/api              |   93.65 |    84.87 |   94.11 |   93.65 |                           
  index.ts                     |   93.65 |    84.87 |   94.11 |   93.65 | ...26-731,742-745,748-751 
 ccip-sdk/src/aptos            |   56.49 |    69.92 |   56.66 |   56.49 |                           
  exec.ts                      |   29.31 |      100 |       0 |   29.31 | 18-58                     
  hasher.ts                    |   76.31 |       80 |   66.66 |   76.31 | 19-38,52-58               
  index.ts                     |      58 |    75.67 |   59.52 |      58 | ...83-721,725-827,831-842 
  logs.ts                      |   78.52 |    57.44 |      75 |   78.52 | ...90-196,200-233,264-268 
  send.ts                      |    25.2 |      100 |       0 |    25.2 | 10-51,62-79,92-123        
  token.ts                     |   23.75 |       75 |     100 |   23.75 | 35-156                    
  types.ts                     |   65.62 |      100 |       0 |   65.62 | 25-32,64-88               
 ccip-sdk/src/errors           |   87.26 |    77.25 |   47.58 |   87.26 |                           
  CCIPError.ts                 |     100 |      100 |     100 |     100 |                           
  codes.ts                     |     100 |      100 |     100 |     100 |                           
  index.ts                     |     100 |      100 |     100 |     100 |                           
  recovery.ts                  |     100 |      100 |     100 |     100 |                           
  specialized.ts               |   84.49 |    72.61 |   44.91 |   84.49 | ...20,3341-3350,3371-3380 
  utils.ts                     |   94.44 |    81.48 |     100 |   94.44 | 15,17,22,24               
 ccip-sdk/src/evm              |   84.77 |    74.95 |   91.25 |   84.77 |                           
  const.ts                     |     100 |      100 |     100 |     100 |                           
  errors.ts                    |   86.42 |    79.22 |     100 |   86.42 | ...12-113,159-161,202-220 
  extra-args.ts                |   94.44 |    62.29 |     100 |   94.44 | ...82-183,208-209,326-338 
  fork.test.data.ts            |     100 |      100 |     100 |     100 |                           
  gas.ts                       |   97.97 |    53.33 |     100 |   97.97 | 72-73,75                  
  hasher.ts                    |     100 |     92.3 |     100 |     100 | 134                       
  index.ts                     |   83.22 |    75.92 |   93.22 |   83.22 | ...94,2059-2075,2101-2108 
  logs.ts                      |   34.32 |    68.42 |      25 |   34.32 | ...13-214,229-258,275-302 
  messages.ts                  |     100 |      100 |     100 |     100 |                           
  offchain.ts                  |   81.25 |    33.33 |     100 |   81.25 | 11,13-14                  
  types.ts                     |     100 |      100 |     100 |     100 |                           
 ccip-sdk/src/evm/viem         |   77.72 |       92 |   69.23 |   77.72 |                           
  client-adapter.ts            |     100 |     92.3 |     100 |     100 | 48                        
  index.ts                     |     100 |      100 |     100 |     100 |                           
  wallet-adapter.ts            |   63.09 |     90.9 |   55.55 |   63.09 | ...6,53-73,91-124,131-157 
 ccip-sdk/src/hasher           |   94.29 |    78.94 |     100 |   94.29 |                           
  common.ts                    |     100 |      100 |     100 |     100 |                           
  hasher.ts                    |     100 |    66.66 |     100 |     100 | 19                        
  index.ts                     |     100 |      100 |     100 |     100 |                           
  merklemulti.ts               |   93.43 |       78 |     100 |   93.43 | ...59-260,306-307,315-316 
 ccip-sdk/src/shared           |   88.05 |    69.23 |     100 |   88.05 |                           
  bcs-codecs.ts                |   87.87 |    66.66 |     100 |   87.87 | 75-87,104-106             
  constants.ts                 |     100 |      100 |     100 |     100 |                           
 ccip-sdk/src/solana           |   52.99 |    69.58 |   54.76 |   52.99 |                           
  cleanup.ts                   |   12.22 |      100 |       0 |   12.22 | 29-229                    
  exec.ts                      |    9.43 |      100 |       0 |    9.43 | ...68-343,345-384,386-498 
  hasher.ts                    |   96.58 |    81.81 |     100 |   96.58 | 67-70                     
  index.ts                     |   73.08 |    74.28 |    64.7 |   73.08 | ...15,1519-1543,1547-1568 
  logs.ts                      |   74.83 |    31.42 |     100 |   74.83 | 38-39,50-51,53-54,56-88   
  offchain.ts                  |   62.22 |      100 |       0 |   62.22 | 29-45                     
  patchBorsh.ts                |   65.06 |    57.14 |      75 |   65.06 | 30-49,65-66,72-78         
  send.ts                      |   13.93 |      100 |       0 |   13.93 | ...57-246,259-325,327-366 
  types.ts                     |   74.46 |      100 |       0 |   74.46 | 36-47                     
  utils.ts                     |   54.27 |    77.77 |   54.54 |   54.27 | ...40-353,395-458,464-479 
 ccip-sdk/src/sui              |   30.71 |    90.47 |   15.15 |   30.71 |                           
  discovery.ts                 |   15.13 |      100 |       0 |   15.13 | 20-36,49-185,188-218      
  events.ts                    |   19.85 |      100 |       0 |   19.85 | ...18-275,280-398,407-428 
  exec.ts                      |   31.29 |      100 |       0 |   31.29 | 31-74,86-131              
  hasher.ts                    |   98.16 |    66.66 |     100 |   98.16 | 33,49                     
  index.ts                     |   38.59 |    93.61 |   17.94 |   38.59 | ...84-885,889-890,894-895 
  objects.ts                   |   18.93 |      100 |       0 |   18.93 | ...04-119,133-184,195-338 
  resolve-execute-opts.ts      |   61.53 |      100 |       0 |   61.53 | 9-13                      
  send.ts                      |   12.44 |      100 |       0 |   12.44 | ...36-188,201-316,321-434 
  types.ts                     |   93.05 |      100 |       0 |   93.05 | 43-47                     
 ccip-sdk/src/sui/manuallyExec |   39.63 |      100 |       0 |   39.63 |                           
  encoder.ts                   |   47.67 |      100 |       0 |   47.67 | 42-86                     
  index.ts                     |   34.35 |      100 |       0 |   34.35 | 46-131                    
 ccip-sdk/src/ton              |   74.69 |    82.24 |   64.78 |   74.69 |                           
  exec.ts                      |     100 |      100 |     100 |     100 |                           
  hasher.ts                    |   77.95 |    77.77 |      75 |   77.95 | 99-107,155-186            
  index.ts                     |   70.96 |    76.47 |   52.27 |   70.96 | ...16,1223-1224,1231-1232 
  logs.ts                      |     100 |    98.43 |     100 |     100 | 56                        
  send.ts                      |   96.38 |    70.83 |     100 |   96.38 | 38-45                     
  types.ts                     |   77.94 |    69.23 |   66.66 |   77.94 | ...-73,91,118-131,133-136 
  utils.ts                     |   60.88 |    83.33 |    87.5 |   60.88 | ...55-261,269-327,329-332 
-------------------------------|---------|----------|---------|---------|---------------------------

@finleydecker finleydecker marked this pull request as ready for review March 19, 2026 08:30
@finleydecker finleydecker requested review from a team, PabloMansanet and aelmanaa as code owners March 19, 2026 08:30
Comment on lines +321 to +328
const feeTokenArg = (argv.feeToken ?? '').toLowerCase()
if (feeTokenArg === 'native' || feeTokenArg === 'hbar') {
// CCIP Directory lists native HBAR as a fee token on Hedera; use ZeroAddress so EVM sends msg.value
feeToken = ZeroAddress
const wrappedNative = await source.getNativeTokenForRouter(argv.router)
feeTokenInfo = await source.getTokenInfo(wrappedNative)
feeTokenInfo = { ...feeTokenInfo, symbol: feeTokenInfo.symbol.replace(/^W/, '') || 'HBAR' }
} else if (argv.feeToken) {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This doesn't seem like the right abstraction level to do. this. Can this logic be moved down to the implementations of getTokenInfo? I don't know much about Hedera but it seems like we're bleeding pretty chain and token-specific behaviour into a file that's chain-agnostic.

Comment on lines +388 to +392
feeToken === ZeroAddress
? feeTokenInfo.symbol
: feeTokenInfo.symbol.startsWith('W')
? feeTokenInfo.symbol.substring(1)
: feeTokenInfo.symbol
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

NIT: These chains of ternaries get pretty difficult to read, I think at this point good old if-elses would read easier.

Comment on lines +1 to +3
export default [
// FeeQuoter 2.0.0 ABI
{
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

If you look at the other ABI files in this folder, we follow a pattern where we generate them dynamically using a generate block that fetches directly from the chainlink-ccip repo. Please implement that pattern on this one too.

Comment thread ccip-sdk/src/evm/const.ts
Token: new Interface(Token_ABI),
TokenAdminRegistry: new Interface(TokenAdminRegistry_ABI),
FeeQuoter: new Interface(FeeQuoter_ABI),
FeeQuoter: new Interface(FeeQuoter_1_6_ABI),
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Let's get rid of this one and keep only the versioned consts.

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.

2 participants