Skip to content

feat(cct-sdk):Add createPoolSignerATA option to deploy token pool - #412

Merged
mervin-link merged 3 commits into
feat/DAPP-11371-get-token-infofrom
feat/DAPP-11373-create-pool-signer-ata
Sep 8, 2026
Merged

feat(cct-sdk):Add createPoolSignerATA option to deploy token pool#412
mervin-link merged 3 commits into
feat/DAPP-11371-get-token-infofrom
feat/DAPP-11373-create-pool-signer-ata

Conversation

@mervin-link

@mervin-link mervin-link commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

What

  • DAPP-11373
  • Add createPoolSignerATA to Solana CCT token-pool deployment options
  • Create the pool signer ATA idempotently in the deploy transaction when enabled
  • Add validation, TSDoc, and unit coverage

Why

  • Simplifies token-pool setup by avoiding a separate ATA creation transaction before setting the pool

@vercel

vercel Bot commented Sep 8, 2026

Copy link
Copy Markdown

You must have Developer access to commit code to Chainlink Labs on Vercel. If you contact an administrator and receive Developer access, commit again to see your changes.

Learn more: https://vercel.com/docs/accounts/team-members-and-roles/access-roles#team-level-roles

@aelmanaa

aelmanaa commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

Overview

APPROVE — 0 blockers, 0 majors. Correct, type-safe, grounded, and live-proven.

Adds createPoolSignerATA?: boolean (default false) option to Solana deployTokenPool: when set, it appends idempotent creation of the pool signer PDA's ATA (the pool_token_account) into the deploy transaction.

What it solves: Closes the mesh gap where a freshly deployed pool couldn't receive a ccip-send until that ATA was created separately (failed AccountNotInitialized (3012)).

Architecture:

  • Opt-in, defaults false — preserves the reviewed M2 split (deliberately separate createTokenAccount op still exists)
  • Idempotent via createAssociatedTokenAccountIdempotentInstruction
  • Same composition pattern as sibling options (createRecipientATA on mintTokens, includeApproval on provideLiquidity)
  • Type-safe, TS clean, oxfmt green

Live Devnet Verification:

Note on CI: The red "Run npm ci" is a trunk-wide cct-sdk lockfile issue (axios duplication), not this PR. This PR's own code passes: tests green (including ATA creation + validation), tsc clean.


[COMMENT 1/4] 🟡 Medium (DX) — Field doc omits the WHY

Current doc:

createPoolSignerATA?: boolean
/** Create the pool signer PDA's associated token account idempotently. Defaults to false. */

Problem: This describes what it does but not why you need it. A developer reading this has no context that the pool_token_account is required for transfers or that omitting it causes a mesh AccountNotInitialized (3012) error.

Fix: Add the reason to the JSDoc:

/**
 * Create the pool signer PDA's associated token account (`pool_token_account`) idempotently.
 * 
 * @remarks
 * Without this account, the pool cannot lock/release or mint on transfers, and a `ccip-send` fails
 * with `AccountNotInitialized (3012)`. Setting this to `true` creates the account in the deploy
 * transaction; otherwise you must create it separately before any transfer.
 * 
 * Defaults to false.
 */

This gives the developer the context to decide: "If I'm deploying a pool that will immediately receive transfers, set this to true."

@aelmanaa

aelmanaa commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

[COMMENT 2/4] 🟡 Medium (DX) — Name↔protocol-term bridge

Problem: A developer debugging a 3012 error on the blockchain may search for the account name pool_token_account in the SDK docs and error messages, but the SDK only uses the programmatic identifier poolSignerAddress (the PDA). The option name createPoolSignerATA doesn't textually map to the protocol term pool_token_account, so the connection is invisible.

Impact: The debugging loop is broken: error references pool_token_account, but SDK docs only mention poolSignerAddress and createPoolSignerATA. A user hitting 3012 won't find this option.

Fix: Explicitly name the account in the option's @remarks and in the facade @remarks for both generateUnsignedDeployTokenPool and deployTokenPool. Example:

/**
 * Create the pool signer PDA's associated token account (`pool_token_account`) idempotently.
 * 
 * @remarks
 * The pool requires a `pool_token_account` (the associated token account owned by the pool_signer PDA)
 * to lock/release or mint on transfers. Without it, a `ccip-send` fails with `AccountNotInitialized (3012)`.
 * Setting `createPoolSignerATA: true` creates this account in the deploy transaction.
 * 
 * Defaults to false.
 */

And in the facade @remarks:

/**
 * @remarks
 * ...
 * Set `createPoolSignerATA: true` to also create the pool's `pool_token_account` idempotently;
 * otherwise create it separately via `generateUnsignedCreateTokenAccount` before `generateUnsignedSetPool`.
 */

Now a dev searching for "pool_token_account" finds this option.

@aelmanaa

aelmanaa commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

[COMMENT 3/4] 🟡 Medium (DX) — False-path consequence: state the hard prerequisite

Current facade @remarks:

Set `createPoolSignerATA` to also create the pool signer PDA's associated token account 
idempotently; otherwise use the returned `poolSignerAddress` with `generateUnsignedCreateTokenAccount` 
before `generateUnsignedSetPool`.

Problem: This reads as a sequencing suggestion ("you can do it in two steps"), not as a hard prerequisite. A developer might interpret it as optional advice rather than understanding that leaving it false makes any transfer fail with 3012 until the ATA is created.

Impact: Developers deploy pools with createPoolSignerATA: false (default), then hit 3012 errors on transfers and don't understand why, because the docs don't state the consequence clearly.

Fix: Reframe the false-path as a hard requirement with consequences, mirroring the pattern used for createRecipientATA on mintTokens and includeApproval on provideLiquidity:

/**
 * @remarks
 * Initializes a Solana token pool for the canonical `burn-mint` and `lock-release` programs.
 * 
 * **Important:** The pool requires a `pool_token_account` to lock/release or mint on transfers.
 * Set `createPoolSignerATA: true` to create this account in the deploy transaction.
 * If omitted (defaults to `false`), you must create the account separately via
 * `generateUnsignedCreateTokenAccount` before `generateUnsignedSetPool`, or any transfer will fail
 * with `AccountNotInitialized (3012)`.
 */

And in @throws or a new @remarks section on the facade, add:

/**
 * @throws {@link CCTTxFailedError} If the transaction fails (e.g., `AccountNotInitialized (3012)`
 * if `createPoolSignerATA: false` and the pool's `pool_token_account` was not created separately).
 */

This makes the hard prerequisite explicit: if you leave it false, transfers will fail without a separate ATA creation.

@aelmanaa

aelmanaa commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

[COMMENT 4/4] 🔵 Nits — Placement asymmetry & parity notes

Placement asymmetry (architectural intent)

This PR appends the ATA creation (instructions.push(...); mainIndex: 0), while the sibling option createRecipientATA on mintTokens prepends (instructions = [..., ...]; mainIndex: 1). Both are correct:

  • deployTokenPool: pool initialize is the main instruction (must run first), ATA creation is secondary
  • mintTokens: when createRecipientATA: true, ATA creation is the first instruction, mint is second (mainIndex: 1)

Fix: Document this intentional difference so maintainers understand the asymmetry:

if (createPoolSignerATA) {
  // Append ATA creation after initialize (initialize must be main instruction index 0)
  instructions.push(...ata.instructions)
}

Cross-family/parity notes

  1. @see link to sibling option: Add @see {@link mintTokens} parity note on the facade methods, noting this is analogous to the createRecipientATA option (same idiomatic pattern for atomicity).

  2. When to use this vs. the separate op: Optional guidance in @remarks:

    @remarks
    When to use `createPoolSignerATA: true` vs. the separate `generateUnsignedCreateTokenAccount` op:
    - Use this option when deploying a pool that will immediately receive transfers (simplest, one tx)
    - Use the separate op for vault-owned pools or when decoupling pool initialization from ATA setup
    
  3. Cross-family note: Add a brief parity note that this is Solana-only (no EVM equivalent), matching the pattern from getTokenInfo and getTokenPoolState reviews.

@aelmanaa

aelmanaa commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

[COMMENT 5/5] 📋 Informational — CI status (not this PR)

The red "Run npm ci" is a trunk-wide cct-sdk lockfile issue, not caused by this PR.

Issue: package-lock.json carries two axios versions:

  • Root 1.19.0 (from Ledger/TON dependencies)
  • Nested ccip-sdk 1.20.0

This causes npm ci's prepare build to fail on a ccip-cli tsc AxiosRequestTransformer type conflict. Every CCT branch inherits this until the lock is regenerated.

This PR's code quality: Green across the board:

  • deploy-token-pool.test.ts passes all cases (initialize, allowlist, ATA creation, validation)
  • SDK tsc clean (no type errors)
  • All test assertions pass locally

Fix (once, at cct-sdk): rm package-lock.json && npm install to deduplicate axios to a single 1.20.0. The PR itself is unaffected.

Full write-up: See the ci-npm-ci-axios-duplicate-failure.md document for the complete diagnosis and resolution steps.

@mervin-link
mervin-link requested a review from a team as a code owner September 8, 2026 11:02
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown

CI Test Report

2506/2512 tests passed (650 suites) in 4m 59s

Summary

ℹ tests 2512
ℹ suites 650
ℹ pass 2506
ℹ fail 0
ℹ cancelled 0
ℹ skipped 6
ℹ todo 0
ℹ duration_ms 299047.217854
Coverage report
File                                   | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
---------------------------------------|---------|----------|---------|---------|-------------------
All files                              |   84.24 |    82.84 |   76.56 |   84.24 |                   
 ccip-cli/src                          |   90.42 |    59.25 |      75 |   90.42 |                   
  index.ts                             |   90.42 |    59.25 |      75 |   90.42 | ...73-174,180-185 
 ccip-cli/src/commands                 |   52.71 |    75.94 |    62.9 |   52.71 |                   
  index.ts                             |     100 |      100 |     100 |     100 |                   
  lane-latency.ts                      |   70.76 |    83.33 |   33.33 |   70.76 | ...,76-83,119-128 
  lane.ts                              |   86.98 |    68.42 |     100 |   86.98 | ...41-144,148-150 
  manual-exec.ts                       |   20.34 |      100 |       0 |   20.34 | ...39-149,151-347 
  parse.ts                             |    55.2 |      100 |       0 |    55.2 | 47-51,58-65,67-96 
  search.ts                            |   81.25 |      100 |       0 |   81.25 | 24-29             
  send.ts                              |   14.13 |      100 |       0 |   14.13 | ...09-237,239-552 
  show.ts                              |   75.68 |    63.75 |     100 |   75.68 | ...15-318,399-401 
  supported-tokens.ts                  |   17.93 |      100 |       0 |   17.93 | ...80-353,355-368 
  token.ts                             |   22.72 |      100 |       0 |   22.72 | ...3,60-67,69-132 
  types.ts                             |     100 |      100 |     100 |     100 |                   
  utils.ts                             |   88.13 |     80.2 |   96.66 |   88.13 | ...11-721,729-737 
 ccip-cli/src/commands/search          |   53.89 |    76.19 |    12.5 |   53.89 |                   
  messages.ts                          |   53.89 |    76.19 |    12.5 |   53.89 | ...36-258,260-295 
 ccip-cli/src/providers                |   53.37 |    86.45 |   21.73 |   53.37 |                   
  aptos.ts                             |   51.47 |      100 |       0 |   51.47 | ...,95-96,105-136 
  evm.ts                               |    36.3 |      100 |       0 |    36.3 | ...69-104,116-168 
  index.ts                             |   81.37 |    85.71 |    90.9 |   81.37 | ...20,290,344-392 
  solana.ts                            |   47.44 |      100 |       0 |   47.44 | ...02-103,112-137 
  sui.ts                               |    49.5 |      100 |       0 |    49.5 | ...57-258,267-301 
  ton.ts                               |   15.03 |      100 |       0 |   15.03 | 24-153            
 ccip-cli/src/providers/canton         |    85.4 |    77.89 |      68 |    85.4 |                   
  auth.ts                              |   82.41 |    73.01 |   53.33 |   82.41 | ...17-333,464-469 
  config.ts                            |   80.41 |    81.81 |     100 |   80.41 | 36-43,48-58       
  index.ts                             |     100 |      100 |     100 |     100 |                   
  wallet.ts                            |   92.93 |      100 |   85.71 |   92.93 | 172-184           
 ccip-sdk/src                          |   95.43 |    88.25 |    92.9 |   95.43 |                   
  chain.ts                             |   96.49 |    84.03 |   84.37 |   96.49 | ...2427,2460-2461 
  commits.ts                           |    90.9 |    81.25 |     100 |    90.9 | ...06,115-118,120 
  execution.ts                         |   93.13 |    88.23 |     100 |   93.13 | ...53-159,192-199 
  explorer.ts                          |     100 |      100 |     100 |     100 |                   
  extra-args.ts                        |     100 |    89.47 |     100 |     100 | 225,260,297,312   
  fetch.ts                             |   98.06 |    93.56 |   97.77 |   98.06 | ...-881,1127-1129 
  gas.ts                               |   85.17 |    86.04 |      75 |   85.17 | ...83-294,403-452 
  http-status.ts                       |     100 |      100 |     100 |     100 |                   
  index.ts                             |     100 |      100 |     100 |     100 |                   
  messages.ts                          |    79.2 |    47.16 |      40 |    79.2 | ...99-310,314-327 
  networks.ts                          |     100 |      100 |     100 |     100 |                   
  offchain.ts                          |   84.64 |    76.92 |     100 |   84.64 | ...18-227,236-237 
  requests.ts                          |    95.4 |    90.58 |     100 |    95.4 | ...54-655,680-685 
  supported-chains.ts                  |     100 |      100 |     100 |     100 |                   
  types.ts                             |     100 |      100 |     100 |     100 |                   
  utils.ts                             |    99.2 |       96 |     100 |    99.2 | ...12,217-218,220 
 ccip-sdk/src/api                      |   93.22 |    83.44 |   94.73 |   93.22 |                   
  index.ts                             |   93.22 |    83.44 |   94.73 |   93.22 | ...92-895,898-901 
 ccip-sdk/src/aptos                    |   78.76 |     78.1 |   76.19 |   78.76 |                   
  exec.ts                              |   29.31 |      100 |       0 |   29.31 | 18-58             
  hasher.ts                            |   75.89 |       80 |   66.66 |   75.89 | 17-36,50-56       
  index.ts                             |   68.84 |    80.15 |   67.44 |   68.84 | ...1072,1076-1087 
  logs.ts                              |   96.47 |    77.41 |    92.3 |   96.47 | ...1442-1444,1731 
  send.ts                              |    25.6 |      100 |       0 |    25.6 | ...2,63-80,93-125 
  token.ts                             |   23.75 |       75 |     100 |   23.75 | 35-156            
  types.ts                             |   65.97 |      100 |       0 |   65.97 | 26-33,65-89       
 ccip-sdk/src/canton                   |   45.32 |    76.16 |   31.66 |   45.32 |                   
  amount.ts                            |   92.59 |       70 |     100 |   92.59 | 22-23             
  ccv-addresses.ts                     |     100 |    91.07 |     100 |     100 | 13,30,64,67       
  defaults.ts                          |   99.28 |    90.24 |     100 |   99.28 | 93                
  events.ts                            |   45.38 |     52.5 |   23.52 |   45.38 | ...15-527,533-542 
  index.ts                             |   34.89 |    58.82 |   12.82 |   34.89 | ...2614,2617-2619 
  types.ts                             |   95.26 |      100 |      50 |   95.26 | 55-62             
  update-id.ts                         |   98.11 |    88.88 |     100 |   98.11 | 52                
 ccip-sdk/src/canton/authentication    |   92.93 |    79.31 |    92.3 |   92.93 |                   
  authorization-code.ts                |   89.83 |    84.31 |    90.9 |   89.83 | ...58-376,432-443 
  client-credentials.ts                |   91.28 |       75 |     100 |   91.28 | ...92-196,198-202 
  index.ts                             |    96.8 |       75 |     100 |    96.8 | 168-173           
  metadata.ts                          |   81.89 |    44.44 |      50 |   81.89 | ...55,73-78,93-94 
  static.ts                            |     100 |      100 |     100 |     100 |                   
  token-source.ts                      |   97.81 |    77.77 |     100 |   97.81 | 167-170           
  types.ts                             |     100 |      100 |     100 |     100 |                   
 ccip-sdk/src/canton/client            |    57.4 |    60.86 |   22.85 |    57.4 |                   
  client.ts                            |   55.62 |    59.09 |   22.85 |   55.62 | ...37-756,771-791 
  index.ts                             |     100 |      100 |     100 |     100 |                   
 ...dk/src/canton/explicit-disclosures |   74.81 |    69.35 |    55.1 |   74.81 |                   
  acs.ts                               |   87.36 |     69.1 |      90 |   87.36 | ...20,568,606-607 
  eds.ts                               |   54.34 |      100 |       0 |   54.34 | ...86-393,397-402 
 ccip-sdk/src/canton/token-metadata    |   61.37 |      100 |       0 |   61.37 |                   
  client.ts                            |   61.37 |      100 |       0 |   61.37 | 111-178,185-189   
 ...dk/src/canton/transfer-instruction |    52.4 |      100 |       0 |    52.4 |                   
  client.ts                            |    52.4 |      100 |       0 |    52.4 | 104-197,204-208   
 ccip-sdk/src/cct                      |     100 |    87.09 |     100 |     100 |                   
  errors.ts                            |     100 |    83.33 |     100 |     100 | 138-142,203       
  operation.ts                         |     100 |      100 |     100 |     100 |                   
  query.ts                             |     100 |      100 |     100 |     100 |                   
  token-manager.ts                     |     100 |      100 |     100 |     100 |                   
 ccip-sdk/src/cct/evm                  |   96.36 |     95.9 |    58.2 |   96.36 |                   
  index.ts                             |   94.85 |      100 |   36.36 |   94.85 | ...1234,1266-1269 
  operation.ts                         |     100 |      100 |     100 |     100 |                   
  query.ts                             |     100 |      100 |     100 |     100 |                   
  submit.ts                            |     100 |    79.16 |     100 |     100 | 28,52,68-69,87    
  validate.ts                          |     100 |      100 |     100 |     100 |                   
 .../cct/evm/artifacts/bytecode/V2_0_0 |     100 |      100 |     100 |     100 |                   
  burn-from-mint-token-pool.ts         |     100 |      100 |     100 |     100 |                   
  burn-mint-token-pool.ts              |     100 |      100 |     100 |     100 |                   
  burn-with-from-mint-token-pool.ts    |     100 |      100 |     100 |     100 |                   
  cross-chain-token.ts                 |     100 |      100 |     100 |     100 |                   
  erc20-lockbox.ts                     |     100 |      100 |     100 |     100 |                   
  lock-release-token-pool.ts           |     100 |      100 |     100 |     100 |                   
 ccip-sdk/src/cct/evm/lockbox          |     100 |      100 |     100 |     100 |                   
  contracts.ts                         |     100 |      100 |     100 |     100 |                   
 ...sdk/src/cct/evm/lockbox/operations |     100 |      100 |     100 |     100 |                   
  authorize-callers.ts                 |     100 |      100 |     100 |     100 |                   
  deploy-lockbox.ts                    |     100 |      100 |     100 |     100 |                   
 ccip-sdk/src/cct/evm/token            |    97.1 |    66.66 |      50 |    97.1 |                   
  contracts.ts                         |    97.1 |    66.66 |      50 |    97.1 | 45-46             
 ...k/src/cct/evm/token-admin-registry |     100 |      100 |     100 |     100 |                   
  contracts.ts                         |     100 |      100 |     100 |     100 |                   
 ...vm/token-admin-registry/operations |     100 |      100 |     100 |     100 |                   
  accept-admin.ts                      |     100 |      100 |     100 |     100 |                   
  get-supported-tokens.ts              |     100 |      100 |     100 |     100 |                   
  get-token-admin-registry.ts          |     100 |      100 |     100 |     100 |                   
  register-admin.ts                    |     100 |      100 |     100 |     100 |                   
  set-pool.ts                          |     100 |      100 |     100 |     100 |                   
  transfer-admin.ts                    |     100 |      100 |     100 |     100 |                   
 ccip-sdk/src/cct/evm/token-pool       |     100 |      100 |     100 |     100 |                   
  contracts.ts                         |     100 |      100 |     100 |     100 |                   
  rate-limit.ts                        |     100 |      100 |     100 |     100 |                   
  remote-pool.ts                       |     100 |      100 |     100 |     100 |                   
 .../src/cct/evm/token-pool/operations |   99.82 |    97.57 |     100 |   99.82 |                   
  add-remote-pool.ts                   |     100 |      100 |     100 |     100 |                   
  apply-allowlist-updates.ts           |     100 |    96.29 |     100 |     100 | 229               
  apply-chain-updates.ts               |     100 |      100 |     100 |     100 |                   
  deploy-token-pool.ts                 |     100 |    85.71 |     100 |     100 | 83-86             
  get-token-pool-remotes.ts            |     100 |      100 |     100 |     100 |                   
  get-token-pool-state.ts              |   98.61 |       95 |     100 |   98.61 | 282-285           
  remove-remote-pool.ts                |     100 |      100 |     100 |     100 |                   
  set-chain-rate-limiter-configs.ts    |     100 |    97.05 |     100 |     100 | 112               
  set-dynamic-config.ts                |     100 |      100 |     100 |     100 |                   
  set-rate-limit-admin.ts              |     100 |      100 |     100 |     100 |                   
  set-remote-pool.ts                   |     100 |      100 |     100 |     100 |                   
  transfer-ownership.ts                |     100 |      100 |     100 |     100 |                   
 ccip-sdk/src/cct/evm/token/operations |     100 |      100 |     100 |     100 |                   
  deploy-token.ts                      |     100 |      100 |     100 |     100 |                   
 ccip-sdk/src/cct/solana               |   99.73 |    96.78 |   97.97 |   99.73 |                   
  index.ts                             |   99.67 |      100 |   97.22 |   99.67 | 258-259,2425-2430 
  operation.ts                         |     100 |      100 |     100 |     100 |                   
  query.ts                             |     100 |      100 |     100 |     100 |                   
  serialize.ts                         |     100 |     92.3 |     100 |     100 | 27                
  submit.ts                            |     100 |    81.81 |     100 |     100 | 31,48,53,72       
  validate.ts                          |     100 |    98.05 |     100 |     100 | 214,321           
 ccip-sdk/src/cct/solana/programs      |     100 |      100 |     100 |     100 |                   
  alt.ts                               |     100 |      100 |     100 |     100 |                   
  fee-quoter.ts                        |     100 |      100 |     100 |     100 |                   
  router.ts                            |     100 |      100 |     100 |     100 |                   
  token-pool.ts                        |     100 |      100 |     100 |     100 |                   
  token.ts                             |     100 |      100 |     100 |     100 |                   
 ccip-sdk/src/cct/solana/token         |     100 |      100 |     100 |     100 |                   
  constants.ts                         |     100 |      100 |     100 |     100 |                   
 ...rc/cct/solana/token-admin-registry |     100 |      100 |     100 |     100 |                   
  constants.ts                         |     100 |      100 |     100 |     100 |                   
 ...na/token-admin-registry/operations |   99.61 |    98.74 |     100 |   99.61 |                   
  accept-admin.ts                      |     100 |      100 |     100 |     100 |                   
  append-to-lookup-table.ts            |     100 |      100 |     100 |     100 |                   
  create-lookup-table.ts               |     100 |      100 |     100 |     100 |                   
  get-supported-tokens.ts              |     100 |      100 |     100 |     100 |                   
  get-token-admin-registry.ts          |     100 |      100 |     100 |     100 |                   
  index.ts                             |     100 |      100 |     100 |     100 |                   
  ...override-pending-administrator.ts |     100 |      100 |     100 |     100 |                   
  register-admin.ts                    |   97.95 |    94.44 |     100 |   97.95 | 212-216           
  set-pool.ts                          |     100 |      100 |     100 |     100 |                   
  transfer-admin.ts                    |     100 |      100 |     100 |     100 |                   
 ...c/cct/solana/token-pool/operations |   99.62 |    98.23 |     100 |   99.62 |                   
  accept-ownership.ts                  |     100 |      100 |     100 |     100 |                   
  append-remote-pool-addresses.ts      |     100 |      100 |     100 |     100 |                   
  apply-chain-updates.ts               |     100 |    98.36 |     100 |     100 | 148               
  configure-allowlist.ts               |     100 |      100 |     100 |     100 |                   
  create-token-multisig.ts             |    95.9 |     92.5 |     100 |    95.9 | ...01-102,104-109 
  delete-chain-remote-config.ts        |     100 |      100 |     100 |     100 |                   
  deploy-token-pool.ts                 |     100 |      100 |     100 |     100 |                   
  edit-chain-remote-config.ts          |     100 |      100 |     100 |     100 |                   
  get-token-pool-remotes.ts            |     100 |      100 |     100 |     100 |                   
  get-token-pool-state.ts              |     100 |      100 |     100 |     100 |                   
  index.ts                             |     100 |      100 |     100 |     100 |                   
  init-chain-remote-config.ts          |     100 |      100 |     100 |     100 |                   
  provide-liquidity.ts                 |     100 |      100 |     100 |     100 |                   
  remove-from-allowlist.ts             |     100 |    94.11 |     100 |     100 | 126               
  set-can-accept-liquidity.ts          |     100 |      100 |     100 |     100 |                   
  set-chain-rate-limit.ts              |   99.11 |    96.15 |     100 |   99.11 | 64-65             
  set-rate-limit-admin.ts              |     100 |      100 |     100 |     100 |                   
  set-rebalancer.ts                    |     100 |      100 |     100 |     100 |                   
  transfer-ownership.ts                |     100 |      100 |     100 |     100 |                   
  withdraw-liquidity.ts                |     100 |      100 |     100 |     100 |                   
 ...dk/src/cct/solana/token/operations |     100 |    98.41 |     100 |     100 |                   
  approve-token.ts                     |     100 |      100 |     100 |     100 |                   
  create-token-account.ts              |     100 |      100 |     100 |     100 |                   
  deploy-token.ts                      |     100 |      100 |     100 |     100 |                   
  get-token-info.ts                    |     100 |       70 |     100 |     100 | 69,80-81          
  index.ts                             |     100 |      100 |     100 |     100 |                   
  mint-tokens.ts                       |     100 |      100 |     100 |     100 |                   
  set-token-authority.ts               |     100 |      100 |     100 |     100 |                   
  update-metadata-authority.ts         |     100 |      100 |     100 |     100 |                   
 ccip-sdk/src/errors                   |   90.42 |    77.16 |   59.55 |   90.42 |                   
  CCIPError.ts                         |     100 |      100 |     100 |     100 |                   
  codes.ts                             |     100 |      100 |     100 |     100 |                   
  index.ts                             |     100 |      100 |     100 |     100 |                   
  pure.ts                              |     100 |       75 |     100 |     100 | 32                
  recovery.ts                          |     100 |      100 |     100 |     100 |                   
  specialized.ts                       |   88.26 |    73.91 |   57.36 |   88.26 | ...3636,3659-3668 
  utils.ts                             |   94.44 |    81.48 |     100 |   94.44 | 15,17,22,24       
 ccip-sdk/src/evm                      |   93.08 |    82.47 |   93.16 |   93.08 |                   
  const.ts                             |   98.66 |    92.85 |     100 |   98.66 | 122-123           
  errors.ts                            |   91.98 |    81.57 |     100 |   91.98 | ...85,239-242,247 
  extra-args.ts                        |    94.5 |    61.01 |     100 |    94.5 | ...11-212,328-340 
  fork.test.data.ts                    |     100 |      100 |     100 |     100 |                   
  gas.ts                               |   98.19 |    63.15 |     100 |   98.19 | 90-91,93          
  hasher.ts                            |     100 |     92.3 |     100 |     100 | 135               
  index.ts                             |   88.69 |    80.64 |    90.9 |   88.69 | ...2716,2871-2902 
  logs.ts                              |   99.16 |    92.02 |      90 |   99.16 | 69-70,75-76       
  messageCodec.ts                      |     100 |      100 |     100 |     100 |                   
  messages.ts                          |     100 |      100 |     100 |     100 |                   
  offchain.ts                          |    87.5 |    71.42 |     100 |    87.5 | 13-14             
  simulate.ts                          |     100 |    94.82 |     100 |     100 | 109-111,425       
  types.ts                             |     100 |      100 |     100 |     100 |                   
 ccip-sdk/src/evm/viem                 |   79.76 |    90.62 |   69.23 |   79.76 |                   
  client-adapter.ts                    |     100 |       90 |     100 |     100 | 48,74             
  index.ts                             |     100 |      100 |     100 |     100 |                   
  wallet-adapter.ts                    |   63.09 |     90.9 |   55.55 |   63.09 | ...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 | ...06-307,315-316 
 ccip-sdk/src/shared                   |   85.32 |    84.33 |   82.35 |   85.32 |                   
  bcs-codecs.ts                        |   79.07 |    60.86 |   66.66 |   79.07 | ...42-252,260-269 
  codec.ts                             |    94.3 |    93.22 |     100 |    94.3 | 139-140,178-186   
  constants.ts                         |     100 |      100 |     100 |     100 |                   
 ccip-sdk/src/solana                   |   79.13 |    75.73 |   84.34 |   79.13 |                   
  cleanup.ts                           |   26.95 |    66.66 |   33.33 |   26.95 | ...59-101,114-227 
  exec.ts                              |   69.11 |    62.96 |   66.66 |   69.11 | ...69-473,513-514 
  extra-args.ts                        |   59.49 |    76.47 |      60 |   59.49 | 86-122,132-190    
  fork.test.data.ts                    |     100 |      100 |     100 |     100 |                   
  gas.ts                               |   92.06 |    68.57 |     100 |   92.06 | ...,81-90,170-171 
  hasher.ts                            |   96.49 |    81.81 |     100 |   96.49 | 64-67             
  index.ts                             |   83.03 |    78.91 |   87.03 |   83.03 | ...2129,2133-2166 
  logs.ts                              |   87.79 |    74.07 |     100 |   87.79 | ...50-151,163-164 
  offchain.ts                          |     100 |      100 |     100 |     100 |                   
  patchBorsh.ts                        |   78.31 |       50 |     100 |   78.31 | ...47,65-66,72-78 
  send.ts                              |    77.6 |    33.33 |      80 |    77.6 | ...52-360,403-442 
  signatures-cache.ts                  |   79.78 |    71.15 |    87.5 |   79.78 | ...51-260,274-275 
  token-admin-registry.ts              |     100 |    96.29 |     100 |     100 | 27                
  types.ts                             |     100 |      100 |     100 |     100 |                   
  utils.ts                             |   81.56 |     77.1 |   83.33 |   81.56 | ...87-588,625-640 
 ccip-sdk/src/sui                      |   73.18 |    70.62 |   81.14 |   73.18 |                   
  discovery.ts                         |   47.37 |    48.27 |      60 |   47.37 | ...34-782,785-819 
  events.ts                            |   89.83 |    72.67 |     100 |   89.83 | ...19-626,685-698 
  exec.ts                              |   30.71 |      100 |       0 |   30.71 | 37-89,101-153     
  hasher.ts                            |   98.19 |    66.66 |     100 |   98.19 | 35,51             
  index.ts                             |   76.12 |    70.39 |   79.68 |   76.12 | ...2314,2330-2331 
  logs.ts                              |   97.89 |    74.02 |     100 |   97.89 | ...62-165,186-187 
  objects.ts                           |    54.6 |    83.33 |   83.33 |    54.6 | ...57-313,324-467 
  types.ts                             |     100 |      100 |     100 |     100 |                   
 ccip-sdk/src/sui/manuallyExec         |   53.36 |       75 |      50 |   53.36 |                   
  encoder.ts                           |    83.9 |    66.66 |     100 |    83.9 | 51-58,73-77,82    
  index.ts                             |   33.82 |      100 |       0 |   33.82 | 47-136            
 ccip-sdk/src/ton                      |      86 |    80.53 |   88.28 |      86 |                   
  exec.ts                              |     100 |      100 |     100 |     100 |                   
  extra-args.ts                        |   98.66 |    72.72 |     100 |   98.66 | 156-157,222       
  hasher.ts                            |   78.07 |    77.77 |      75 |   78.07 | 100-108,156-187   
  index.ts                             |   84.81 |     79.6 |   79.03 |   84.81 | ...2111,2118-2119 
  logs.ts                              |   93.84 |    83.43 |     100 |   93.84 | ...09-616,672-675 
  send.ts                              |   95.52 |    66.66 |     100 |   95.52 | 37-44,188         
  ton-cache.ts                         |     100 |    96.55 |     100 |     100 | 102               
  types.ts                             |   91.24 |    81.25 |     100 |   91.24 | ...61-63,71-74,92 
  utils.ts                             |    63.1 |    77.77 |    90.9 |    63.1 | ...37-395,397-400 
 scripts                               |   87.95 |    63.88 |     100 |   87.95 |                   
  test-endpoints.ts                    |   97.98 |    72.72 |     100 |   97.98 | 137-139           
  useResource.ts                       |   83.57 |    62.29 |     100 |   83.57 | ...81-286,301-302 
---------------------------------------|---------|----------|---------|---------|-------------------

@mervin-link

Copy link
Copy Markdown
Collaborator Author

Overview

APPROVE — 0 blockers, 0 majors. Correct, type-safe, grounded, and live-proven.

Adds createPoolSignerATA?: boolean (default false) option to Solana deployTokenPool: when set, it appends idempotent creation of the pool signer PDA's ATA (the pool_token_account) into the deploy transaction.

What it solves: Closes the mesh gap where a freshly deployed pool couldn't receive a ccip-send until that ATA was created separately (failed AccountNotInitialized (3012)).

Architecture:

  • Opt-in, defaults false — preserves the reviewed M2 split (deliberately separate createTokenAccount op still exists)
  • Idempotent via createAssociatedTokenAccountIdempotentInstruction
  • Same composition pattern as sibling options (createRecipientATA on mintTokens, includeApproval on provideLiquidity)
  • Type-safe, TS clean, oxfmt green

Live Devnet Verification:

Note on CI: The red "Run npm ci" is a trunk-wide cct-sdk lockfile issue (axios duplication), not this PR. This PR's own code passes: tests green (including ATA creation + validation), tsc clean.

[COMMENT 1/4] 🟡 Medium (DX) — Field doc omits the WHY

Current doc:

createPoolSignerATA?: boolean
/** Create the pool signer PDA's associated token account idempotently. Defaults to false. */

Problem: This describes what it does but not why you need it. A developer reading this has no context that the pool_token_account is required for transfers or that omitting it causes a mesh AccountNotInitialized (3012) error.

Fix: Add the reason to the JSDoc:

/**
 * Create the pool signer PDA's associated token account (`pool_token_account`) idempotently.
 * 
 * @remarks
 * Without this account, the pool cannot lock/release or mint on transfers, and a `ccip-send` fails
 * with `AccountNotInitialized (3012)`. Setting this to `true` creates the account in the deploy
 * transaction; otherwise you must create it separately before any transfer.
 * 
 * Defaults to false.
 */

This gives the developer the context to decide: "If I'm deploying a pool that will immediately receive transfers, set this to true."

@aelmanaa Addressed all comments except for #5 which was already handled by different PR.

@mervin-link
mervin-link merged commit f2357e1 into feat/DAPP-11371-get-token-info Sep 8, 2026
3 of 4 checks passed
@mervin-link
mervin-link deleted the feat/DAPP-11373-create-pool-signer-ata branch September 8, 2026 12:14
mervin-link added a commit that referenced this pull request Sep 8, 2026
* feat: add transfer pool ownership op solana

* feat: add accept pool ownership op solana

* feat: add transfer authority op solana

* fix: update export barrel

* feat: add mint tokens op solana

* fix: address comments

* fix: address comments

* feat: add set can accept liquidity op solana

* fix: add lock release token pool idl

* feat: add set rebalancer op solana

* fix: update tsdoc

* feat: add approve token op solana

* feat: add provider liquidity op solana

* fix: address comments

* fix: revert unrelated changes

* fix: add preflight checks

* fix: update tsdoc

* fix: extract validate pool liquidity config

* feat: add withdraw liquidity op solana

* fix: add preflight checks

* feat: add update metadata authority op solana

* fix: lint errors

* fix: lint errors

* fix: address comments

* fix: refactor unit tests

* fix: refactor export

* feat: add owner override pending admint op solana

* fix: update tsdoc and add preflight check

* fix: update tsdoc @example

* feat: add includeApproval option in provide liquidity

* feat: add createRecipientATA option to mint tokens op

* feat: add get token info op solana

* fix: address comments

* fix: package lock file - remove stale axios version

* feat(cct-sdk):Add createPoolSignerATA option to deploy token pool (#412)

* feat: add createPoolSignerATA option to deploy token pool op

* fix: address comments
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