Skip to content

feat(cct-sdk): Add token mint and role reads - #406

Merged
apedrob merged 3 commits into
cct-sdkfrom
feature/DAPP-11353-mint-tokens-role-reads
Sep 9, 2026
Merged

feat(cct-sdk): Add token mint and role reads#406
apedrob merged 3 commits into
cct-sdkfrom
feature/DAPP-11353-mint-tokens-role-reads

Conversation

@apedrob

@apedrob apedrob commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

What

  • Add mint and the two role reads for B&M tokens (1.5.1 / 1.6.2):
    • generateUnsignedMintand mint + getMinters and getBurners
    • isMinter and isBurner queries

Why

  • There was no way to mint supply or to see which accounts hold the mint and burn roles.

Testing

  • Unit tests

@apedrob
apedrob requested a review from mervin-link September 7, 2026 12:10
@apedrob
apedrob requested review from a team, PabloMansanet and aelmanaa as code owners September 7, 2026 12:10
@vercel

vercel Bot commented Sep 7, 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

@mervin-link mervin-link left a comment

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.

Approved ✅

Tested getBurners, getMinters and mint ops:

@apedrob
apedrob requested a review from a team as a code owner September 8, 2026 14:35
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown

CI Test Report

2562/2568 tests passed (661 suites) in 7m 52s

Summary

ℹ tests 2568
ℹ suites 661
ℹ pass 2562
ℹ fail 0
ℹ cancelled 0
ℹ skipped 6
ℹ todo 0
ℹ duration_ms 472422.230552
Coverage report
File                                   | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
---------------------------------------|---------|----------|---------|---------|-------------------
All files                              |   84.37 |    82.91 |   76.87 |   84.37 |                   
 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.87 |    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.1 |   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.24 |    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 |    95.97 |     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.03 |   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 |    79.83 |   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    |   93.05 |    79.31 |    92.3 |   93.05 |                   
  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                      |   98.88 |    77.77 |     100 |   98.88 | 165-166           
  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 |    96.87 |     100 |     100 |                   
  errors.ts                            |     100 |       96 |     100 |     100 | 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.63 |    96.09 |   61.64 |   96.63 |                   
  index.ts                             |   95.37 |      100 |      44 |   95.37 | ...1381,1413-1416 
  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            |   98.93 |     62.5 |   83.33 |   98.93 |                   
  contracts.ts                         |   98.93 |     62.5 |   83.33 |   98.93 | 51-52             
 ...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 |                   
  get-burners.ts                       |     100 |      100 |     100 |     100 |                   
  get-minters.ts                       |     100 |      100 |     100 |     100 |                   
  is-burner.ts                         |     100 |      100 |     100 |     100 |                   
  is-minter.ts                         |     100 |      100 |     100 |     100 |                   
  mint.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.66 |   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.47 |   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.38 |     100 |   87.95 |                   
  test-endpoints.ts                    |   97.98 |    72.72 |     100 |   97.98 | 137-139           
  useResource.ts                       |   83.57 |    61.66 |     100 |   83.57 | ...81-286,301-302 
---------------------------------------|---------|----------|---------|---------|-------------------

@aelmanaa

aelmanaa commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

✅ APPROVE — 0 blockers, 0 correctness majors

Summary: Correct (mint-role gate is right and live-proven), type-safe, contract-grounded. Adds getMinters/getBurners (read the BurnMintERC677 role sets), a role-gated manual mint, and the token/contracts.ts helpers getErc20Token, readTokenRole, readTokenRoleHolders.

Key Verification:

  • mint auth gate is CORRECT — gated on the mint role (readTokenRole(isMinter, sender)), NOT owner. Mirrors the on-chain mint(...) onlyMinter modifier exactly. Owner is only the role admin and need not hold the role.
  • getMinters()/getBurners() exist as address[] views on FactoryBurnMintERC20 v1.5.1, identical at v1.6.2. v2 CrossChainToken (AccessControl) lacks them → duck-typing family check rejects it.
  • TypeScript clean: readTokenRoleHolders union typed correctly, returns checksummed string[]; empty set decodes to [] (not BAD_DATA); mint amount via validateUint256; @throws complete.

Live Sepolia Proofs (real v1.5.1 FactoryBurnMintERC20):

  • getMinters / getBurners: Accurate checksummed role sets, revoked members correctly absent
  • mint v2 rejection: ✅ CCTContractTypeInvalidError (family check)
  • mint(recipient, 1000) as role-holder: SUCCESS, balance 0 → 1000
  • Non-minter sender: ✅ CCTParamsInvalidError (isMinter gate enforced)

One coordination finding + DX items (see comments below). Recommend coordination on merge order with DAPP-11352 (shared contracts.ts helpers).

@aelmanaa

aelmanaa commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

[COMMENT 1/4] 🟠 Coordination — Merge collision with DAPP-11352 on token/contracts.ts

Problem: Both this branch (DAPP-11353) and the sibling DAPP-11352 independently add the SAME helpers to token/contracts.ts:

DAPP-11352 adds: getErc20Token, readTokenRole, readTokenOwner, assertTokenOwner
DAPP-11353 (this PR) adds: getErc20Token, readTokenRole, readTokenRoleHolders

Overlap: getErc20Token and readTokenRole are defined by both unmerged branches → whichever merges first, the second conflicts on those two functions.

Why it happened: Both branches are splitting the mint/burn-role feature (writes in 11352, reads+mint in 11353) and independently re-implementing the shared foundation layer.

Resolution Options:

  1. Stack them: Merge DAPP-11352 first → rebase DAPP-11353 onto cct-sdk (post-11352), removing the duplicate getErc20Token and readTokenRole definitions.

  2. Extract base PR: Create a base/token-contracts-helpers PR with just getErc20Token, readTokenRole, readTokenRoleHolders, readTokenOwner, assertTokenOwner. Land it first, then rebase both 11352 and 11353 onto it (removes the helpers from both).

  3. Coordinate merge: Ensure merge order is deliberate — document in commit message which branch depends on the other.

Recommendation: Option 1 (stack) is lowest friction: merge 11352 (writes), then rebase/merge 11353 (reads+mint) on top. Avoids creating a third PR for the extracted helpers.

Action: Coordinate with the author of DAPP-11352 (@apedrob). Decide merge order before either lands.

@aelmanaa

aelmanaa commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

[COMMENT 2/4] 🟡 Medium (DX) — isMinter/isBurner not exposed in SDK

Problem: The getMinters/getBurners JSDoc recommends single-address checks via isMinter(address)/"one call instead of an unbounded set plus client scan". However, isMinter/isBurner are not exposed in the SDK facade — they only exist internally as part of readTokenRole.

This creates an asymmetry:

  • Heavy read (getMinters/getBurners) is exposed and documented
  • Light read (isMinter/isBurner) is recommended but hidden

Impact: A developer following the recommendation must either:

  1. Drop to raw ethers and call the token contract directly, or
  2. Use readTokenRole which is internal (not a public API)

Fix Options:

  1. Expose the reads: Add thin SDK facades isMinter() and isBurner() (simple wrappers over readTokenRole) to EVMTokenManager, matching the v1.5.1/v1.6.2 contract interface.

  2. Reword the docs: If single-address checks are intentionally not an SDK responsibility, clarify in getMinters/getBurners remarks that isMinter(address) is a raw contract call the SDK doesn't wrap, with an example ethers snippet.

Recommendation: Option 1 (expose) is better DX — keeps the recommendation internal to the SDK without requiring raw contract knowledge.

Location (reference):

  • index.ts:750-764 (getMinters remarks)
  • index.ts:769-781 (getBurners remarks)
  • token/contracts.ts:106-133 (readTokenRole internal helper)

@aelmanaa

aelmanaa commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

[COMMENT 3/4] 🟡 Low (DX) — Missing cross-family @remarks/@see

Problem: The repo convention (established in other CCT families) is to document cross-family counterparts via @remarks and @see links. This PR adds three reads with no cross-family context:

  • mint has no note mentioning the Solana counterpart mintTokens (different name, different result shape)
  • getMinters/getBurners have no note that these are EVM-only (Solana uses the SPL authority model, not readable role sets)
  • No @see links connecting the seeding workflow: deployToken → grant role → mint → check role set

Examples of the pattern elsewhere:

  • Token pool ops link cross-family equivalent (e.g., "Solana: createTokenPool")
  • Reads note why a counterpart doesn't exist ("EVM-only because...")

Fix: Add to facades in index.ts:

  1. On mint: Add @remarks noting Solana has mintTokens (different builder pattern, direct to account not intermediate role gate)
  2. On getMinters/getBurners: Add @remarks noting EVM-only (Solana uses SPL authority events, not enumerable role sets)
  3. Add workflow @see links: mintgetMinters, mintgrantMintRole (after DAPP-11352 lands)

Locations:

  • index.ts:700-745 (mint / generateUnsignedMint)
  • index.ts:750-764 (getMinters)
  • index.ts:769-781 (getBurners)

Dependency: These cross-refs should land alongside or after DAPP-11352 (the role-write ops).

@aelmanaa

aelmanaa commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

[COMMENT 4/4] 🔵 Nit — Op-level Mint.execute @throws thinner than facade

Problem: The Mint op class's execute method @throws is minimal:

/**
 * Signs and submits as a minter...
 * @throws {@link CCIPWalletInvalidError} if `wallet` is not a valid signer
 * @throws {@link CCTParamsInvalidError} if `sender` is given and is not the wallet's address...
 */
override async execute(...)

But the facade method EVMTokenManager.mint has much fuller documentation:

/**
 * ...
 * @throws {@link CCIPWalletInvalidError} if `wallet` is not a valid signer
 * @throws {@link CCTContractTypeInvalidError} if `tokenAddress` is not a BurnMintERC677 token
 * @throws {@link CCTParamsInvalidError} if any param is invalid...
 * @throws {@link CCIPExecTxRevertedError} if the tx reverts on-chain
 * @throws {@link CCTTxFailedError} if submission fails before broadcast
 * @throws {@link CCTTxNotConfirmedError} if it is not confirmed in time
 */
mint(opts: EVMExecuteParams<MintParams>): Promise<TransactionResult> {
  return this.#mint.execute(this.chain, opts)
}

The op class is missing the family check (CCTContractTypeInvalidError), on-chain revert (CCIPExecTxRevertedError), and submission errors (CCTTxFailedError, CCTTxNotConfirmedError).

Fix: Either:

  1. Mirror the facade @throws onto the op class, or
  2. Add a JSDoc note on the op class directing readers to the facade for the full error contract

Recommendation: Option 1 (mirror). The op class is the source of truth; the facade should reference it or both should be in sync.

Location: token/operations/mint.ts:73-84

@apedrob

apedrob commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

@aelmanaa

  1. I'll handle any merge conflict and drop duplicated on next PR
  2. Added isMinter and isBurner queries
  3. Changed tsdoc (skipped solana references on evm doc)
  4. Added

@apedrob
apedrob merged commit 19bb2a5 into cct-sdk Sep 9, 2026
2 of 3 checks passed
@apedrob
apedrob deleted the feature/DAPP-11353-mint-tokens-role-reads branch September 9, 2026 14:05
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.

3 participants