Skip to content

Commit 8ab81b5

Browse files
RensRtt-cllma33rkylesmartinogtownsend
authored
Merge main 08/10/2025 (#1260)
* add owners for deployments (#1239) * owners * owners * add zksync gobinding (#1238) Co-authored-by: kylesmartin <[email protected]> * add warning gobindings (#1235) * Add factory param for LOOPP enabled families (#1231) * Add factory param for LOOPP enabled families * add tests for feature flag map for USDC reader * [CCIP-7090] Move chain family agnostic utilities to deployment module (#1237) * [CCIP-7090] Move chain family agnostic utilities to deployment module * Update top level deploy pkg * Fix, + add test workflows * Checkout * Fix * Fix again * Workflow * Add checkout * OpCount -> GetChainMetadata * Fix tests * Use mcms.Input * Move contract writes back to EVM * Rm global registry * update npm release action (#1252) * CCIP-6698 New USDC Token Pool Proxy for routing USDC messages to the proper token pool (#1134) * begin migrating files from other PR for phase 2 * initial compilation and tests passing. * cleanup and wrapper updates * remove previousPool from the USDC Token Pool as it will be moved to the future proxy * more cleanup * checkpointing * cleanup * productionize * comments and proxy updates * additional comments * forge fmt * bump type and version for future release cuts * wrappers regen * changeset * review comment fixes and test cleanup * formatting and gas optimization * add expectCall to lockOrBurn tests * fix CI from merge conflicts * fix CI from merge conflicts * code review fixes * feedback fixes * comment fix * resolve CI from merge conflicts in previous commit * typo fix * comment fixes and gas optimizations * add additional branches for direct non-transmitter-proxy upgrades * better comments and gas optimization * gobindings and comment fix * simplify proxy by removing tokenPool dependency * linter fix * constructor input sanitization check * modify lock release pools to be dynamic based on remote chain selector * fix dependency pathing * fix comment feedback * Change source pool data codec * update encoding schemes for more specific versioning * cleanup * fill in coverage test gaps * comment fixes and PoolV1 interface support for proxy * productionize codec library * add cctp fast transfer version tag * snapshot fix * remove superfluous constructor checks * forge fmt * comment feedback fixes * fill in coverage gaps and add new tokenPoolProxy helper contract. * *spiderman voice* let's try this one last time * deposit hash validation on destination * more fuzz tests and better message formatting comments * wrapper and snapshot fix from merge conflict resolution * add support for legacy source pool data format to prevent breaking changes * additional library test files, hash collision prevention, and better commenting * cld ccip api e2e (#1227) * wip * flatten * flatten * iterate * iterate * iterate * iterate * iterate * iterate * iterate * seed solana * move ref * [CCIP-7268-pt-1] Add ConfigureTokensForTransfers to product spec (#1242) * [CCIP-7090] Move chain family agnostic utilities to deployment module * Update top level deploy pkg * Fix, + add test workflows * Checkout * Fix * Fix again * Workflow * Add checkout * OpCount -> GetChainMetadata * Fix tests * Use mcms.Input * Move contract writes back to EVM * [CCIP-7268-pt-1] Add ConfigureTokensForTransfers to product spec * Very WIP * Rm global registry * Test * Comments * prevent breaking o11y with idl changes (#1247) * prevent breaking o11y with idl changes * test change idl * fix action * fix * change in idl * only ones we need to track * Revert "change in idl" This reverts commit 8378c29. * shouldn't trigger * should detect multiple * fix actin * Revert "should detect multiple" This reverts commit 1a8fd3d. * Revert "shouldn't trigger" This reverts commit c4e8ef2. * fix some comms * add unlabeled * should trigger * Revert "add unlabeled" This reverts commit 79a1d6c. * unlabeled * Revert "should trigger" This reverts commit b47dd70. * fix missing permissions for ID token (#1254) * fix missing permissions for ID token * move to job level * Validate dest pool in FTF pool (#1251) * add validation for destination pool * add tests * update wrapper * update comment + refactor * lint fix * update changesets setup --------- Co-authored-by: tt-cll <[email protected]> Co-authored-by: Matthew Romage <[email protected]> Co-authored-by: kylesmartin <[email protected]> Co-authored-by: Oliver Townsend <[email protected]> Co-authored-by: Josh Weintraub <[email protected]> Co-authored-by: Juan Farber <[email protected]> Co-authored-by: Suryansh <[email protected]>
2 parents 5d6d323 + 546a632 commit 8ab81b5

File tree

111 files changed

+7904
-1881
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

111 files changed

+7904
-1881
lines changed
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
name: IDL Compatibility Check
2+
3+
on:
4+
pull_request:
5+
paths:
6+
- "chains/solana/contracts/target/idl/base_token_pool.json"
7+
- "chains/solana/contracts/target/idl/ccip_common.json"
8+
- "chains/solana/contracts/target/idl/ccip_offramp.json"
9+
- "chains/solana/contracts/target/idl/ccip_router.json"
10+
- "chains/solana/contracts/target/idl/cctp_token_pool.json"
11+
- "chains/solana/contracts/target/idl/fee_quoter.json"
12+
- "chains/solana/contracts/target/idl/rmn_remote.json"
13+
types: [opened, synchronize, reopened, labeled, unlabeled]
14+
15+
jobs:
16+
check-idl-changes:
17+
runs-on: ubuntu-latest
18+
permissions:
19+
pull-requests: write
20+
contents: read
21+
steps:
22+
- name: Checkout code
23+
uses: actions/checkout@v3
24+
with:
25+
fetch-depth: 0
26+
27+
- name: Check for bypass label
28+
id: check-bypass
29+
uses: actions/github-script@v6
30+
with:
31+
script: |
32+
const { data: labels } = await github.rest.issues.listLabelsOnIssue({
33+
owner: context.repo.owner,
34+
repo: context.repo.repo,
35+
issue_number: context.issue.number
36+
});
37+
38+
if (labels.some(label => label.name === 'idl-check-confirmed')) {
39+
console.log('IDL check bypass label found');
40+
return true;
41+
}
42+
43+
return false;
44+
45+
- name: List changed IDL files
46+
id: changed-files
47+
run: |
48+
# Only check specific files to reduce noise
49+
CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }} HEAD -- \
50+
chains/solana/contracts/target/idl/base_token_pool.json \
51+
chains/solana/contracts/target/idl/ccip_common.json \
52+
chains/solana/contracts/target/idl/ccip_offramp.json \
53+
chains/solana/contracts/target/idl/ccip_router.json \
54+
chains/solana/contracts/target/idl/cctp_token_pool.json \
55+
chains/solana/contracts/target/idl/fee_quoter.json \
56+
chains/solana/contracts/target/idl/rmn_remote.json | tr '\n' ' ')
57+
echo "files=$CHANGED_FILES" >> $GITHUB_OUTPUT
58+
echo "Changed files:"
59+
echo "$CHANGED_FILES"
60+
61+
- name: Comment on PR
62+
if: steps.check-bypass.outputs.result != 'true'
63+
uses: actions/github-script@v6
64+
with:
65+
script: |
66+
const changedFiles = `${{ steps.changed-files.outputs.files }}`.trim().split(' ').filter(Boolean);
67+
68+
if (changedFiles.length === 0) {
69+
console.log('No monitored IDL files changed');
70+
return;
71+
}
72+
73+
const filesList = changedFiles.map(file => `- \`${file}\``).join('\n');
74+
const commentBody = [
75+
'## ⚠️ IDL Compatibility Check Required ⚠️',
76+
'',
77+
'### Changes detected in IDL files:',
78+
filesList,
79+
'',
80+
'⚠️ **IMPORTANT**: Please verify that these changes maintain compatibility with our observability pipeline!',
81+
'',
82+
'#### To bypass this check:',
83+
'- Add the `idl-check-confirmed` label to this PR'
84+
].join('\n');
85+
86+
await github.rest.issues.createComment({
87+
owner: context.repo.owner,
88+
repo: context.repo.repo,
89+
issue_number: context.issue.number,
90+
body: commentBody
91+
});
92+
93+
- name: Fail if no bypass
94+
if: steps.check-bypass.outputs.result != 'true' && steps.changed-files.outputs.files != ''
95+
run: |
96+
echo "::error::IDL changes detected - Please confirm compatibility with observability pipeline"
97+
exit 1

.github/workflows/solidity-build-and-publish.yml

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ defaults:
88
run:
99
shell: bash
1010

11+
permissions: {}
12+
1113
jobs:
1214
changes:
1315
name: Detect changes
@@ -130,6 +132,8 @@ jobs:
130132
name: Publish Beta NPM
131133
environment: publish-contracts
132134
needs: [tag-check, changes, lint, native-compile]
135+
permissions:
136+
id-token: write # Required for OIDC
133137
if: needs.tag-check.outputs.is-pre-release-ccip == 'true'
134138
runs-on: ubuntu-latest
135139
steps:
@@ -171,9 +175,8 @@ jobs:
171175
pnpm version "${version}" --no-git-tag-version --no-commit-hooks --no-git-checks
172176
173177
- name: Publish to NPM (beta)
174-
uses: smartcontractkit/.github/actions/ci-publish-npm@4b0ab756abcb1760cb82e1e87b94ff431905bffc # ci-publish-npm@0.4.0
178+
uses: smartcontractkit/.github/actions/ci-publish-npm@ci-publish-npm/v1
175179
with:
176-
npm-token: ${{ secrets.NPM_CHAINLINK_CCIP }}
177180
create-github-release: false
178181
publish-command: "pnpm publish-beta --no-git-checks"
179182
package-json-directory: chains/evm
@@ -182,10 +185,11 @@ jobs:
182185
name: Publish Prod NPM
183186
environment: publish-contracts
184187
needs: [tag-check, changes, lint, native-compile]
185-
if: needs.tag-check.outputs.is-release-ccip == 'true'
186-
runs-on: ubuntu-latest
187188
permissions:
189+
id-token: write # Required for OIDC
188190
contents: write
191+
if: needs.tag-check.outputs.is-release-ccip == 'true'
192+
runs-on: ubuntu-latest
189193
steps:
190194
- name: Checkout the repo
191195
uses: actions/checkout@v4
@@ -228,9 +232,8 @@ jobs:
228232
fi
229233
230234
- name: Publish to NPM (latest)
231-
uses: smartcontractkit/.github/actions/ci-publish-npm@4b0ab756abcb1760cb82e1e87b94ff431905bffc # ci-publish-npm@0.4.0
235+
uses: smartcontractkit/.github/actions/ci-publish-npm@ci-publish-npm/v1
232236
with:
233-
npm-token: ${{ secrets.NPM_CHAINLINK_CCIP }}
234-
create-github-release: false
237+
create-github-release: true
235238
publish-command: "pnpm publish-prod --no-git-checks"
236239
package-json-directory: chains/evm

.github/workflows/solidity-foundry.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ jobs:
2828
run: |
2929
cat <<EOF > matrix.json
3030
[
31-
{ "name": "ccip", "setup": { "run-coverage": true, "min-coverage": 98.3, "extra-coverage-params": "--no-match-path='*End2End*'", "run-gas-snapshot": true}}
31+
{ "name": "ccip", "setup": { "run-coverage": true, "min-coverage": 98.27, "extra-coverage-params": "--no-match-path='*End2End*'", "run-gas-snapshot": true}}
3232
]
3333
EOF
3434
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
name: "Test Deployments"
2+
permissions:
3+
contents: read
4+
5+
on:
6+
pull_request:
7+
merge_group:
8+
push:
9+
branches:
10+
- 'main'
11+
- 'develop'
12+
13+
jobs:
14+
detect_deployments_changes:
15+
runs-on: ubuntu-latest
16+
outputs:
17+
run_evm_deployment: ${{ steps.filter.outputs.run_evm_deployment }}
18+
run_deployment: ${{ steps.filter.outputs.run_deployment }}
19+
steps:
20+
- uses: actions/checkout@v4
21+
- name: Detect changes
22+
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
23+
id: filter
24+
with:
25+
list-files: "shell"
26+
filters: |
27+
run_deployment:
28+
- 'deployment/**'
29+
run_evm_deployment:
30+
- 'chains/evm/gobindings/generated/**'
31+
- 'chains/evm/deployment/**'
32+
33+
setup-go:
34+
runs-on: ubuntu-latest
35+
steps:
36+
- uses: actions/checkout@v4
37+
- name: Determine Go version
38+
id: go_version
39+
run: echo "GO_VERSION=$(cat go.mod |grep "^go"|cut -d' ' -f 2)" >> $GITHUB_ENV
40+
- name: Setup Go ${{ env.GO_VERSION }}
41+
uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0
42+
with:
43+
go-version: ${{ env.GO_VERSION }}
44+
- name: Display Go version
45+
run: go version
46+
47+
test-evm-deployments:
48+
needs: [detect_deployments_changes, setup-go]
49+
if: ${{ needs.detect_deployments_changes.outputs.run_evm_deployment == 'true' }}
50+
runs-on: ubuntu-latest
51+
defaults:
52+
run:
53+
working-directory: chains/evm/deployment
54+
steps:
55+
- uses: actions/checkout@v4
56+
- name: Run tests
57+
run: go test ./...
58+
59+
test-deployments:
60+
needs: [detect_deployments_changes, setup-go]
61+
if: ${{ needs.detect_deployments_changes.outputs.run_deployment == 'true' }}
62+
runs-on: ubuntu-latest
63+
defaults:
64+
run:
65+
working-directory: deployment
66+
steps:
67+
- uses: actions/checkout@v4
68+
- name: Run tests
69+
run: go test ./...

.github/workflows/test-evm-deployments.yml

Lines changed: 0 additions & 33 deletions
This file was deleted.

CODEOWNERS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@
99
/chains/solana @smartcontractkit/ccip-onchain-solana
1010
.github/workflows/solana.yml @smartcontractkit/ccip-onchain-solana
1111

12+
# Deployment tooling
13+
/deployment @smartcontractkit/ccip-tooling

chains/evm/.gas-snapshot

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -397,14 +397,35 @@ TokenPool_parseRemoteDecimals:test_parseRemoteDecimals() (gas: 14771)
397397
TokenPool_parseRemoteDecimals:test_parseRemoteDecimals_NoDecimalsDefaultsToLocalDecimals() (gas: 9831)
398398
TokenPool_removeRemotePool:test_removeRemotePool() (gas: 192465)
399399
TokenPool_setRateLimitAdmin:test_SetRateLimitAdmin() (gas: 38783)
400-
USDCTokenPoolCCTPV2_constructor:test_constructor() (gas: 4883139)
401-
USDCTokenPoolCCTPV2_lockOrBurn:test_lockOrBurn() (gas: 140972)
402-
USDCTokenPoolCCTPV2_lockOrBurn:test_lockOrBurn_MintRecipientOverride() (gas: 158720)
403-
USDCTokenPoolCCTPV2_releaseOrMint:test_releaseOrMint_RealTx() (gas: 266810)
404-
USDCTokenPool_constructor:test_constructor() (gas: 4886131)
405-
USDCTokenPool_lockOrBurn:test_LockOrBurn() (gas: 132520)
406-
USDCTokenPool_lockOrBurn:test_LockOrBurn_MintRecipientOverride() (gas: 160709)
407-
USDCTokenPool_releaseOrMint:test_ReleaseOrMintRealTx() (gas: 267471)
400+
USDCSourcePoolDataCodec__calculateDepositHash:test__calculateDepositHash() (gas: 9917)
401+
USDCSourcePoolDataCodec__decodeSourceTokenDataPayloadV2:test__decodeSourceTokenDataPayloadV2_CCTPV2() (gas: 5161)
402+
USDCSourcePoolDataCodec__decodeSourceTokenDataPayloadV2:test__decodeSourceTokenDataPayloadV2_CCTPV2CCV() (gas: 4916)
403+
USDCTokenPoolCCTPV2_constructor:test_constructor() (gas: 4913638)
404+
USDCTokenPoolCCTPV2_lockOrBurn:test_lockOrBurn() (gas: 130271)
405+
USDCTokenPoolCCTPV2_lockOrBurn:test_lockOrBurn_MintRecipientOverride() (gas: 158104)
406+
USDCTokenPoolCCTPV2_releaseOrMint:test_releaseOrMint_RealTx() (gas: 265655)
407+
USDCTokenPoolProxy_constructor:test_constructor() (gas: 1816306)
408+
USDCTokenPoolProxy_generateNewReleaseOrMintIn:test_generateNewReleaseOrMintIn() (gas: 35218)
409+
USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_CCTPV1() (gas: 104790)
410+
USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_CCTPV2() (gas: 94262)
411+
USDCTokenPoolProxy_lockOrBurn:test_lockOrBurn_LockRelease() (gas: 123788)
412+
USDCTokenPoolProxy_releaseOrMint:test_releaseOrMint_CCTPV1Flag() (gas: 40661)
413+
USDCTokenPoolProxy_releaseOrMint:test_releaseOrMint_CCTPV2Flag() (gas: 40967)
414+
USDCTokenPoolProxy_releaseOrMint:test_releaseOrMint_CCTPV2_CCVFlag() (gas: 40917)
415+
USDCTokenPoolProxy_releaseOrMint:test_releaseOrMint_InvalidVersion() (gas: 31615)
416+
USDCTokenPoolProxy_releaseOrMint:test_releaseOrMint_LegacyFormat_MessageTransmitterProxyNotSupported() (gas: 49353)
417+
USDCTokenPoolProxy_releaseOrMint:test_releaseOrMint_LegacyFormat_MessageTransmitterProxySupported() (gas: 65845)
418+
USDCTokenPoolProxy_releaseOrMint:test_releaseOrMint_LockReleaseFlag() (gas: 72954)
419+
USDCTokenPoolProxy_updateLockOrBurnMechanisms:test_updateLockOrBurnMechanisms() (gas: 102579)
420+
USDCTokenPoolProxy_updateLockReleasePoolAddresses:test_updateLockReleasePoolAddresses_Multiple() (gas: 121723)
421+
USDCTokenPoolProxy_updateLockReleasePoolAddresses:test_updateLockReleasePoolAddresses_Single() (gas: 52529)
422+
USDCTokenPoolProxy_updateLockReleasePoolAddresses:test_updateLockReleasePoolAddresses_ZeroAddress() (gas: 25431)
423+
USDCTokenPoolProxy_updatePoolAddresses:test_updatePoolAddresses() (gas: 55499)
424+
USDCTokenPool_constructor:test_constructor() (gas: 4865451)
425+
USDCTokenPool_lockOrBurn:test_LockOrBurn() (gas: 131394)
426+
USDCTokenPool_lockOrBurn:test_LockOrBurn_LegacySourcePoolDataFormat() (gas: 144526)
427+
USDCTokenPool_lockOrBurn:test_LockOrBurn_MintRecipientOverride() (gas: 160080)
428+
USDCTokenPool_releaseOrMint:test_ReleaseOrMintRealTx() (gas: 265877)
408429
USDCTokenPool_supportsInterface:test_SupportsInterface() (gas: 10210)
409430
VerifierProxy_fallback:test_fallback() (gas: 22825)
410431
VerifierProxy_setVerifier:test_setVerifier() (gas: 19935)

0 commit comments

Comments
 (0)