Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1785 commits
Select commit Hold shift + click to select a range
3ef0ddb
chore(relayer): improve logging in gw listener
manoranjith Dec 17, 2025
4b01499
feat(relayer): add parallel listeners with deduplication
manoranjith Dec 17, 2025
3e63548
refactor(relayer): refactor listener into modular functions
manoranjith Dec 17, 2025
3a58910
chore(relayer): move listener reconnection logic from lib to app
manoranjith Dec 17, 2025
a2cf013
chore(relayer): add in-flight status in migrations
manoranjith Dec 17, 2025
d76b957
chore(relayer): bump version to v0.8.0-rc.8
manoranjith Dec 17, 2025
f743dd6
chore(relayer): bump version to v0.8.0
manoranjith Dec 18, 2025
bd1323c
test(relayer): add missing tests for parallel listeners
manoranjith Dec 17, 2025
6a1c655
test(relayer): make cron configurable and add tests
manoranjith Dec 18, 2025
bed3293
test(relayer): add negative test cases for transaction errors
manoranjith Dec 18, 2025
93d42ad
chore(relayer): separate preparing transaction and transaction loop
nboisde Dec 18, 2025
7ead85f
chore(relayer): queuing wip
nboisde Dec 22, 2025
e813292
chore(relayer): requests for tx in flight status update
nboisde Dec 22, 2025
d95cab2
chore(relayer): hooks and in flight status integration
nboisde Dec 22, 2025
9cb2979
chore(relayer): clippy
nboisde Dec 23, 2025
139398d
chore(relayer): passing receipt extraction to hook for input proof
nboisde Dec 27, 2025
b734499
chore(relayer): removing helper returning receipt
nboisde Dec 27, 2025
2835a65
chore(relayer): remove send raw tx sync from engine, separated
nboisde Dec 27, 2025
a650e21
chore(relayer): upgrading ruint and alloy to address cve
nboisde Dec 29, 2025
efd5d6b
fix(relayer): add request-id and log (warn) rate limit errors
manoranjith Dec 30, 2025
7635d98
chore(relayer): merge 504 errors into 503 errors
manoranjith Dec 30, 2025
28da354
chore(relayer): mempool struct
nboisde Jan 1, 2026
71dda36
chore(relayer): queue, wip before error dispatcher
nboisde Jan 1, 2026
1fabff6
chore(relayer): queue integration and error dispatch for input proof
nboisde Jan 1, 2026
0a75284
chore(relayer): adding queuing to public decrypt
nboisde Jan 1, 2026
09df80c
chore(relayer): queue integration in user decrypt flow
nboisde Jan 2, 2026
08f08c2
chore(relayer): adding tx queue configuration
nboisde Jan 2, 2026
a6bde87
chore(relayer): adding throttling queue to orchestrator and renaming
nboisde Jan 2, 2026
2c352b6
chore(relayer): changing unbounded to bounded
nboisde Jan 4, 2026
eaadb35
chore(relayer): adding error management to queue and refactor
nboisde Jan 5, 2026
454d7e2
chore(relayer): soft_capacity added to throttler
nboisde Jan 5, 2026
ecd1647
chore(relayer): moving throttler instanciation
nboisde Jan 5, 2026
bd92872
chore(relayer): bouncing applied on public decrypt v1 v2
nboisde Jan 6, 2026
f21e239
chore(relayer): adding bouncing onto user_decrypt
nboisde Jan 6, 2026
dca79d1
chore(relayer): bouncing on input proof
nboisde Jan 6, 2026
3df061f
chore(relayer): update default config values for queue
manoranjith Jan 6, 2026
216f5cf
refactor(relayer): fix a naming issue
manoranjith Jan 6, 2026
b5c03b8
chore(relayer)!: use rate_limited error label for protocol overloaded
manoranjith Jan 6, 2026
be98a01
feat(relayer): add admin endpoint for updating throttle rate
manoranjith Jan 6, 2026
c6e86ef
refactor(relayer): use derive default for UsageLimit enum
manoranjith Jan 6, 2026
8c9cb4b
chore(relayer): release v0.8.2
nboisde Jan 6, 2026
2f8eb90
chore(relayer): settings for readiness check
nboisde Jan 7, 2026
467ce48
chore(relayer): wip on public decrypt readiness queue
nboisde Jan 7, 2026
5316a06
chore(relayer): public decrypt readiness flow
nboisde Jan 7, 2026
df3ccbb
chore(relayer): pub dec readiness bouncer
nboisde Jan 7, 2026
9af400d
chore(relayer): user decrypt readiness processor
nboisde Jan 7, 2026
0d06266
chore(relayer): readiness check proc user decrypt
nboisde Jan 7, 2026
a78f650
chore(relayer): integration fhevm readiness user dec
nboisde Jan 7, 2026
30af33c
chore(relayer): user decrypt readiness bouncing
nboisde Jan 7, 2026
8e67581
chore(relayer): clippy
nboisde Jan 7, 2026
d55602f
chore: minor dockerfile improvements
enitrat Jan 8, 2026
8a24ee6
chore(relayer): declaring one tx queue per flow
nboisde Jan 12, 2026
d2490b5
chore(relayer): throttlers declaration refactor
nboisde Jan 12, 2026
533c20e
chore(relayer): queue metrics declaration
nboisde Jan 12, 2026
af56604
chore(relayer): adding metrics to queues
nboisde Jan 12, 2026
275fe9c
chore(relayer): init metrics for throttlers unit tests
nboisde Jan 12, 2026
f03a750
chore(relayer): rename fhevm_relayer.rs to startup.rs for clarity
manoranjith Dec 11, 2025
c7d0234
feat(relayer): add startup recovery
manoranjith Jan 8, 2026
22dba61
chore(relayer): reset in-flight->processing during recovery
manoranjith Jan 8, 2026
f53ab36
chore(relayer): add tests for startup recovery
manoranjith Jan 12, 2026
9133bdb
fix(relayer): deserialize ct handles to fix recovery
manoranjith Jan 12, 2026
5ffad99
chore(relayer): treat extra data as string everywhere internally
manoranjith Dec 11, 2025
e6f169f
chore(relayer): make repo updates idempotent
manoranjith Jan 7, 2026
f90c230
fix(relayer): handle user decrypt insert share response correctly
manoranjith Jan 12, 2026
6806523
feat(relayer): add configurable cron startup delay after recovery
manoranjith Jan 12, 2026
871edb5
feat(relayer): handle reverts due to pause, funds insuff, invalid signs
manoranjith Dec 31, 2025
b86b0c9
fix(relayer)!: make a new ext_job_id when repeating failed/timed_out …
manoranjith Jan 13, 2026
13687e7
fix(relayer): remove 408 response on v1 pub decrypt
manoranjith Jan 14, 2026
a9d6f12
fix(relayer): add deduplication at http handler for v1 pub decrypt
manoranjith Jan 15, 2026
ee191f1
chore(relayer): extend deduplication to other three cases as well
manoranjith Jan 15, 2026
6c647ac
chore(relayer): use same conn for fetching shares
manoranjith Jan 15, 2026
00a8485
test(relayer): per test schema in same db for isolation
manoranjith Jan 15, 2026
42b0737
ci(relayer): install psql natively for more conn
manoranjith Jan 15, 2026
7104c08
fix(relayer): type in throttler name via /admin
manoranjith Jan 15, 2026
1b59172
chore(relayer): version bump
nboisde Jan 15, 2026
bacd2df
chore(relayer): fix clippy errors
manoranjith Jan 16, 2026
30192a4
feat(relayer): make each listener url configurable
manoranjith Jan 16, 2026
44a59af
chore(relayer): filter by event topics in ws subscription
manoranjith Jan 16, 2026
5eb83b6
chore(relayer): recycle ws connections on listener
manoranjith Jan 16, 2026
ce49a0d
feat(relayer): add polling based listener
manoranjith Jan 17, 2026
61ada1b
chore(relayer): continue after max retries for ws reconn
manoranjith Jan 17, 2026
8fe4ad7
fix(relayer): do nothing on dupl event in gw handler
manoranjith Jan 17, 2026
27809f6
fix(relayer): redact private key in logs
manoranjith Jan 17, 2026
05a6290
chore(relayer): bump to v0.8.5
manoranjith Jan 17, 2026
8d6ec47
chore(relayer): adding array to yaml seq conf
nboisde Jan 17, 2026
7d6db37
chore(relayer): bumping version to relayer v0.8.6
nboisde Jan 17, 2026
0d7a69e
chore(relayer): separate config for read http url
nboisde Jan 18, 2026
ec23459
fix(relayer): race condition in user decrypt queries
manoranjith Jan 18, 2026
0a7bbdc
chore(relayer): handle revert acl selector
nboisde Jan 19, 2026
9efa4c7
feat(relayer): dynamic retry-after based on queue status
manoranjith Jan 19, 2026
7cd1dcd
fix(relayer): address clippy warnings in recovery tests
manoranjith Jan 16, 2026
816e677
fix(relayer): show JobId as hex in logs
manoranjith Jan 19, 2026
9f63c9c
fix(relayer): decrement metrics on expiry purge
manoranjith Jan 19, 2026
4dbe059
fix(relayer): init status metrics from DB on startup
manoranjith Jan 19, 2026
5ab8462
chore(relayer): redact uneeded data from logs
manoranjith Jan 19, 2026
f8084fd
fix(relayer): redact blockchain RPC URLs in logs
manoranjith Jan 19, 2026
50cc467
fix(relayer): pass full error upstream
manoranjith Jan 19, 2026
3800afe
chore(relayer): handle conversion errors
manoranjith Jan 19, 2026
fe874e4
chore(relayer): alert log on fail w/ empty reason
manoranjith Jan 19, 2026
4b04ed6
docs(relayer): add logging policy docs
manoranjith Jan 19, 2026
31fdca9
feat(relayer): add logging primitives
manoranjith Jan 19, 2026
ea650ea
chore(relayer): improve logs in tx engine, helper
manoranjith Jan 19, 2026
bbe40a4
chore(relayer): improve logs in tx throttler
manoranjith Jan 19, 2026
dee9e08
chore(relayer): improve logs in tx processor
manoranjith Jan 19, 2026
0efc874
chore(relayer): improve logs in cron workers
manoranjith Jan 19, 2026
a2d87b1
chore(relayer): improve logs in cron workers
manoranjith Jan 19, 2026
7159cfb
chore(relayer): improve logs in public decr handlers
manoranjith Jan 19, 2026
f1f094e
chore(relayer): improve logs in user decr handlers
manoranjith Jan 19, 2026
86fb4fa
chore(relayer): improve logs in input proof handlers
manoranjith Jan 19, 2026
bfb782e
chore(relayer): bump relayer & migrate to v0.8.7
manoranjith Jan 19, 2026
812ee04
fix(relayer): clippy issue (use fallible incorrectly)
manoranjith Jan 19, 2026
7fd23d2
feat(relayer): dedup + job based for input proofs
manoranjith Jan 16, 2026
ab4006c
chore(relayer): improve logs in input proof handlers
manoranjith Jan 19, 2026
a853101
fix(relayer): improved logs + config validation
manoranjith Jan 19, 2026
466ea63
chore(relayer): down migration for v0.8.8 -> 0.8.7
manoranjith Jan 19, 2026
9f9dcea
chore(relayer): bump relayer & migrate to v0.8.8
manoranjith Jan 19, 2026
5a565be
chore(relayer): revise eta computation formulae
manoranjith Jan 20, 2026
4230c17
feat(relayer): incldue ecdsa errors to inv sign
manoranjith Jan 20, 2026
af26bcb
chore(relayer): bump relayer & migrate to v0.8.9
manoranjith Jan 20, 2026
34a94ad
fix(relayer): correct return type for inv sig
manoranjith Jan 20, 2026
35e9092
chore(relayer): bump relayer & migrate to v0.8.10
manoranjith Jan 20, 2026
aa433d4
fix(relayer): make clippy happy (#850)
enitrat Jan 22, 2026
3d1e417
fix(relayer): update tests for invalid_signature API change (#851)
enitrat Jan 22, 2026
0771677
fix(ci): use bracket notation for jq service map access (#852)
enitrat Jan 26, 2026
800c587
fix(relayer): correct read_http_url validation and error message (#853)
enitrat Jan 26, 2026
679e8c3
feat: implement delegated user decryption use case for V2 endpoints
isaacdecoded Jan 28, 2026
96a8106
chore(relayer): bump relayer & migrate to v0.9.0-rc.2
manoranjith Feb 2, 2026
ab61830
fix(ci): upgrade raven-actions/actionlint to v2.1.1
manoranjith Feb 2, 2026
1585947
fix(relayer): make updated_at trigger conditional on actual row changes
manoranjith Jan 30, 2026
3eb5d4a
fix(relayer): skip timestamp update in input proof ON CONFLICT
manoranjith Jan 30, 2026
fb097bf
fix(relayer): add status field to V2 POST error responses
manoranjith Jan 30, 2026
a16ca6b
chore(relayer): use enum for response.status field
manoranjith Jan 30, 2026
c153a12
test(relayer): update integ test to validate status
manoranjith Jan 30, 2026
e1ef3bf
test(relayer): add negative test cases in v2 tests
manoranjith Jan 30, 2026
3656e44
fix(relayer): use UUIDv4 for request_id in HTTP handlers
manoranjith Jan 30, 2026
df4fabd
feat(relayer): add HTTP response logging for V2 endpoints
manoranjith Jan 30, 2026
5cbf1ab
feat(relayer): add HTTP response logging for delegated user decrypt
manoranjith Jan 30, 2026
c133a34
fix(relayer): race due to send_raw_tx_sync latency spike
manoranjith Jan 30, 2026
de07216
fix(relayer): port V2 response fixes to delegated user decrypt handler
manoranjith Jan 30, 2026
20c0cfc
fix(relayer): fix case conversion bug for err msg
manoranjith Feb 4, 2026
0adb99a
fix(relayer): reorder migrations due to hot fix
manoranjith Feb 4, 2026
ebec5d0
fix(relayer): dependabot issue by upgrading package
manoranjith Feb 4, 2026
4669986
fix(relayer): add missing error handlers for deleg
manoranjith Feb 4, 2026
a6de2b7
chore(relayer): bump relayer & migrate to v0.9.0-rc.3
manoranjith Jan 30, 2026
b0ea164
chore(relayer): remove Tower rate limiter middleware (#865)
zmalatrax Feb 9, 2026
ed48376
chore: remove code outside relayer scope (#869)
zmalatrax Feb 18, 2026
031d322
chore(relayer): add test coverage tooling (#953)
paulo-zama Feb 17, 2026
adb4990
chore: update README (#870)
zmalatrax Feb 20, 2026
f16906a
chore: update alloy deps (#876)
zmalatrax Feb 20, 2026
e858664
ci: simplify CI for relayer-only repository (#873)
zmalatrax Feb 20, 2026
377e6c8
chore(relayer): relayer-sdk metrics (#986) (#872)
paulo-zama Feb 20, 2026
5a6a670
feat: enhance makefile devx (#877)
zmalatrax Feb 23, 2026
57192fa
docs: refactor README to use makefile targets (#880)
zmalatrax Feb 24, 2026
0a4f4a0
chore(relayer): documentation update - deletion policy (#1074)
paulo-zama Feb 24, 2026
d2abec7
chore: remove unused deps, update deps (#878)
zmalatrax Feb 25, 2026
ae91f74
fix(relayer): no matching rows on SQL insert/update (#989)
paulo-zama Feb 23, 2026
f012989
chore(relayer): Cleanup custom metrics (#951)
paulo-zama Feb 24, 2026
3d9ec38
test(relayer): prove queued-to-failure bug
manoranjith Feb 26, 2026
492fdd8
fix(relayer): queued-to-failure SQL transitions
manoranjith Feb 26, 2026
c5be399
test(relayer): assert error labels in V2 tests
manoranjith Feb 26, 2026
755d9ba
fix(relayer): fix timeout label assigning in V2 GET
manoranjith Feb 26, 2026
038ed54
fix(relayer): use correct selector for delegated decrypt
manoranjith Feb 27, 2026
4a47527
ci(relayer): add delegated user decrypt test to ci
manoranjith Feb 27, 2026
bd6adab
chore(relayer): improve comments
manoranjith Feb 27, 2026
81f962e
test(relayer): rm redundant test in test utility
manoranjith Mar 3, 2026
b4e22f4
fix(relayer): v2 proof rejection returns 200 OK
manoranjith Mar 3, 2026
97336e5
refactor(relayer): deduplicate classify_error
manoranjith Mar 3, 2026
876a1d1
feat(relayer): validate ACL on host chain directly
manoranjith Feb 26, 2026
7767c7c
feat(relayer): remove MultichainACL bindings
manoranjith Mar 2, 2026
df1486e
test(relayer): add host ACL integration tests
manoranjith Feb 27, 2026
1fdb4de
fix(relayer): redact RPC URLs from contract errors
manoranjith Mar 2, 2026
6841708
refactor(relayer): split host/gateway/readiness
manoranjith Mar 4, 2026
84bfdb5
chore: remove v1 routes (#891)
zmalatrax Mar 9, 2026
7e87a8d
refactor: move event_id mapping to inner enums (#894)
zmalatrax Mar 10, 2026
1bbd1dc
refactor: remove orchestrator deadcode generics (#895)
zmalatrax Mar 10, 2026
396ba90
fix(relayer): delete transaction_helper_test.rs which silently swallo…
zmalatrax Mar 11, 2026
142e5b0
fix: move all validation to settings (#898)
zmalatrax Mar 11, 2026
f6feae9
chore(relayer): update histogram bucket config
paulo-zama Mar 11, 2026
c41e803
refactor: reduce throttler boilerplate (#900)
zmalatrax Mar 11, 2026
f63f5c1
refactor: remove eyre for anyhow (#899)
zmalatrax Mar 11, 2026
787405c
chore(relayer): migrate once_cell::sync::OnceCell to std::sync::OnceL…
zmalatrax Mar 11, 2026
8509907
chore(relayer): ci - pipeline update
paulo-zama Mar 4, 2026
3477387
feat(relayer): add AWS KMS signer support (#903)
manoranjith Mar 13, 2026
73940cf
fix(relayer): removing filters from listener (#914)
nboisde Mar 17, 2026
1654c26
refactor: adjust extra data validations to be propagated verbatim
isaacdecoded Mar 17, 2026
7a4fa01
fix(relayer): wiz security findings in Dockerfiles (#1165)
paulo-zama Mar 19, 2026
6c20b30
refactor: revise log levels (#920)
zmalatrax Mar 20, 2026
8b90c9b
fix(relayer): dependabot alerts and improve metrics (#1174)
paulo-zama Mar 20, 2026
2959130
refactor: make data deletion opt-in with explicit `expiry_enabled` co…
zmalatrax Mar 23, 2026
ae0385a
fix: use old isUserDecryptionReady signature for backward compatibili…
zmalatrax Mar 23, 2026
65fdb4e
refactor(relayer): unify V2 error response types (#915)
manoranjith Mar 23, 2026
7ee76df
feat(relayer): update open api spec + cmd to gen it (#803)
manoranjith Mar 23, 2026
dad85d4
docs(relayer): add mainnet self-hosting guide and restructure README …
zmalatrax Mar 23, 2026
1f82e36
chore(relayer): migrate relayer to fhevm (#914)
paulo-zama Mar 24, 2026
14a2572
chore(relayer): migrate relayer to fhevm (#914)
paulo-zama Mar 24, 2026
2963255
chore(relayer): migrate relayer to fhevm (#914)
paulo-zama Mar 24, 2026
16ac4d4
chore(relayer): migrate relayer to fhevm (#914)
paulo-zama Mar 24, 2026
6104aa6
feat(kms-connector): eth_getLogs event listening
eudelins-zama Mar 24, 2026
fcb9417
chore(kms-connector): event listener error handling
eudelins-zama Mar 24, 2026
114d711
chore(kms-connector): code cleaning
eudelins-zama Mar 24, 2026
28d6226
fix(kms-connector): error metric handling
eudelins-zama Mar 25, 2026
1bac5a6
fix(kms-connector): fix flaky tests
eudelins-zama Mar 25, 2026
0553ab3
chore(kms-connector): batch db insertion
eudelins-zama Mar 25, 2026
fd1af77
chore(kms-connector): rename metric
eudelins-zama Mar 25, 2026
29f83bf
chore(kms-connector): code cleaning
eudelins-zama Mar 26, 2026
92ab2b9
fix(kms-connector): fix ob1 error
eudelins-zama Mar 26, 2026
2a91508
feat(ci): add contract ABI compatibility checks
Eikix Mar 24, 2026
8d439f4
fix(ci): improve abi compat script output
Eikix Mar 24, 2026
cc9151a
fix(contracts): allow accepted ABI deltas in CI
Eikix Mar 25, 2026
a93cd58
fix(contracts): fail local abi wrapper on setup errors
Eikix Mar 25, 2026
b15b826
fix(contracts): document workflow permissions
Eikix Mar 25, 2026
5724ee3
fix(contracts): remove abi check note from readme
Eikix Mar 25, 2026
b1b3bc0
docs(common): add ci readme for abi checks
Eikix Mar 25, 2026
2a572fe
fix(contracts): explain workflow default permissions
Eikix Mar 25, 2026
7277dec
refactor(contracts): group abi compat scripts under ci
Eikix Mar 25, 2026
68f26ca
refactor(contracts): remove old abi compat script paths
Eikix Mar 25, 2026
589c648
fix(contracts): update upgrade check abi helper path
Eikix Mar 25, 2026
fc6f9b2
fix(contracts): correct nested abi compat repo root
Eikix Mar 25, 2026
2ff2496
fix(ci): correct broken import in abi-compat exceptions
Eikix Mar 26, 2026
891232f
refactor(ci): move merge-address-constants to ci/shared
Eikix Mar 26, 2026
52dd342
refactor(ci): group upgrade-check scripts under ci/upgrade-check
Eikix Mar 26, 2026
30f5ac1
fix(ci): harden upgrade-check list.ts error handling
Eikix Mar 26, 2026
5f15262
refactor(ci): extract upgrade-check config to match abi-compat pattern
Eikix Mar 26, 2026
20a2638
docs(ci): update readme with upgrade-check and shared entries
Eikix Mar 26, 2026
9b50494
fix(ci): use inline permission comments for zizmor compliance
Eikix Mar 26, 2026
4450335
fix(ci): remove --force from forge inspect and fix minor code smells
Eikix Mar 26, 2026
59fa81d
fix(ci): restore --force on forge inspect to avoid stale cache
Eikix Mar 26, 2026
de06470
fix(ci): extract JSON from forge stdout to handle compilation preamble
Eikix Mar 26, 2026
4ccd701
fix(common): include deployed ABI compat contracts
Eikix Mar 26, 2026
589a600
chore(common): retrigger ci
Eikix Mar 26, 2026
d927f50
refactor(common): derive abi compat coverage from manifests
Eikix Mar 26, 2026
79957cc
fix(coprocessor): improve error handling in edge cases
antoniupop Mar 26, 2026
46e0daf
chore(relayer): migrate relayer to fhevm (#914)
paulo-zama Mar 26, 2026
f266c6b
fix(ci): log abi inspect parse failures
Eikix Mar 26, 2026
09e540b
chore(relayer): migrate relayer to fhevm (#914)
paulo-zama Mar 26, 2026
15bc3ec
chore(kms-connector): docs
eudelins-zama Mar 26, 2026
f164252
chore(relayer): migrate relayer to fhevm (#914)
paulo-zama Mar 26, 2026
26fde36
hore(common): extend getRequiredEnvVar method to check empty values
isaacdecoded Mar 23, 2026
90a12a3
refactor(common): implement same empty values check for the library s…
isaacdecoded Mar 25, 2026
ea3eb4a
chore(common): introduce integrity check for contract licenses
isaacdecoded Mar 23, 2026
edf6bc2
Update ci/check_spdx_licenses.sh
isaacdecoded Mar 25, 2026
fae55f3
ci(common): include library solidity and host library in the spdx lic…
isaacdecoded Mar 25, 2026
1fde968
chore(kms-connector): docs
eudelins-zama Mar 26, 2026
e2b787c
chore(kms-connector): u8 to usize
eudelins-zama Mar 26, 2026
215c702
Merge of #2184
mergify[bot] Mar 26, 2026
34cab75
Merge of #2180
mergify[bot] Mar 26, 2026
6b7d8d9
Merge of #2182
mergify[bot] Mar 26, 2026
6951f13
Merge of #2156
mergify[bot] Mar 26, 2026
87be6fb
Merge of #2154
mergify[bot] Mar 26, 2026
4a83ece
Merge of #2166
mergify[bot] Mar 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 2 additions & 1 deletion .github/config/commitlint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ const Configuration = {
'sdk',
'test-suite',
'charts',
'common'
'common',
'relayer'
]
],
},
Expand Down
109 changes: 109 additions & 0 deletions .github/workflows/contracts-abi-compat-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
name: contracts-abi-compat-check

# Default to no token permissions at the workflow level; each job opts into the
# minimum read scopes it needs.
permissions: {}

on:
pull_request:

env:
ABI_COMPAT_FROM_TAG: v0.11.1

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

jobs:
check-changes:
name: contracts-abi-compat-check/check-changes
permissions:
contents: read # Required by actions/checkout to clone the repository
pull-requests: read # Required by dorny/paths-filter to inspect changed files
runs-on: ubuntu-latest
outputs:
packages: ${{ steps.filter.outputs.changes }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
persist-credentials: "false"
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36
id: filter
with:
filters: |
host-contracts:
- .github/workflows/contracts-abi-compat-check.yml
- ci/abi-compat/**
- ci/shared/**
- host-contracts/**
gateway-contracts:
- .github/workflows/contracts-abi-compat-check.yml
- ci/abi-compat/**
- ci/shared/**
- gateway-contracts/**

check:
name: contracts-abi-compat-check/${{ matrix.package }}
needs: check-changes
if: ${{ needs.check-changes.outputs.packages != '[]' }}
permissions:
contents: read # Required by actions/checkout to clone the PR branch and baseline tag
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
package: ${{ fromJSON(needs.check-changes.outputs.packages) }}
include:
- package: host-contracts
extra-deps: forge soldeer install
- package: gateway-contracts
extra-deps: ""
steps:
- name: Checkout PR branch
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
persist-credentials: "false"

- name: Checkout baseline
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
ref: ${{ env.ABI_COMPAT_FROM_TAG }}
path: baseline
persist-credentials: "false"

- name: Install Bun
uses: oven-sh/setup-bun@735343b667d3e6f658f44d0eca948eb6282f2b76

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@82dee4ba654bd2146511f85f0d013af94670c4de

- name: Install PR dependencies
working-directory: ${{ matrix.package }}
run: npm ci

- name: Install baseline dependencies
working-directory: baseline/${{ matrix.package }}
run: npm ci

- name: Install Forge dependencies
if: matrix.extra-deps != ''
env:
PACKAGE: ${{ matrix.package }}
EXTRA_DEPS: ${{ matrix.extra-deps }}
run: |
(cd "$PACKAGE" && $EXTRA_DEPS)
(cd "baseline/$PACKAGE" && $EXTRA_DEPS)

- name: Setup compilation
env:
PACKAGE: ${{ matrix.package }}
run: |
(cd "$PACKAGE" && make ensure-addresses)
(cd "baseline/$PACKAGE" && make ensure-addresses)
bun ci/shared/merge-address-constants.ts "baseline/$PACKAGE/addresses" "$PACKAGE/addresses"
cp "$PACKAGE/foundry.toml" "baseline/$PACKAGE/foundry.toml"

- name: Run ABI compatibility check
env:
PACKAGE: ${{ matrix.package }}
run: bun ci/abi-compat/check.ts "baseline/$PACKAGE" "$PACKAGE" "$PACKAGE"
14 changes: 6 additions & 8 deletions .github/workflows/contracts-upgrade-version-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,13 @@ jobs:
filters: |
host-contracts:
- .github/workflows/contracts-upgrade-version-check.yml
- ci/check-upgrade-versions.ts
- ci/merge-address-constants.ts
- ci/upgrade-version-check-lib.ts
- ci/upgrade-check/**
- ci/shared/**
- host-contracts/**
gateway-contracts:
- .github/workflows/contracts-upgrade-version-check.yml
- ci/check-upgrade-versions.ts
- ci/merge-address-constants.ts
- ci/upgrade-version-check-lib.ts
- ci/upgrade-check/**
- ci/shared/**
- gateway-contracts/**
check:
Expand Down Expand Up @@ -110,11 +108,11 @@ jobs:
# the full union of constants with consistent values (PR wins for shared).
(cd "$PACKAGE" && make ensure-addresses)
(cd "baseline/$PACKAGE" && make ensure-addresses)
bun ci/merge-address-constants.ts "baseline/$PACKAGE/addresses" "$PACKAGE/addresses"
bun ci/shared/merge-address-constants.ts "baseline/$PACKAGE/addresses" "$PACKAGE/addresses"
# Use PR's foundry.toml for both so compiler settings match (cbor_metadata, bytecode_hash)
cp "$PACKAGE/foundry.toml" "baseline/$PACKAGE/foundry.toml"
- name: Run upgrade version check
env:
PACKAGE: ${{ matrix.package }}
run: bun ci/check-upgrade-versions.ts "baseline/$PACKAGE" "$PACKAGE"
run: bun ci/upgrade-check/check.ts "baseline/$PACKAGE" "$PACKAGE"
6 changes: 6 additions & 0 deletions .github/workflows/gateway-contracts-integrity-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ jobs:
gw-contracts:
- .github/workflows/gateway-contracts-integrity-checks.yml
- gateway-contracts/**
- ci/check_spdx_licenses.sh
- ci/contracts_bindings_update.py
contract-integrity-checks:
name: gateway-contracts-integrity-checks/contract-integrity-checks (bpr)
needs: check-changes
Expand Down Expand Up @@ -72,6 +74,10 @@ jobs:
working-directory: gateway-contracts
run: make check-mocks

- name: Check SPDX license headers
working-directory: gateway-contracts
run: make check-spdx-headers

- name: Check licenses compliance
working-directory: gateway-contracts
run: make check-licenses
6 changes: 6 additions & 0 deletions .github/workflows/host-contracts-integrity-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ jobs:
host-contracts:
- .github/workflows/host-contracts-integrity-checks.yml
- host-contracts/**
- ci/check_spdx_licenses.sh
- ci/contracts_bindings_update.py
contract-integrity-checks:
name: host-contracts-integrity-checks/contract-integrity-checks (bpr)
Expand Down Expand Up @@ -68,3 +70,7 @@ jobs:
- name: Check contract selectors are up-to-date
working-directory: host-contracts
run: make check-selectors

- name: Check SPDX license headers
working-directory: host-contracts
run: make check-spdx-headers
50 changes: 50 additions & 0 deletions .github/workflows/library-solidity-integrity-checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# This workflow verifies that:
# - Dependency licenses compliance
name: library-solidity-integrity-checks

on:
pull_request:

permissions: {}

concurrency:
group: library-solidity-integrity-checks-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

jobs:
check-changes:
name: library-solidity-integrity-checks/check-changes
permissions:
contents: 'read' # Required to checkout repository code
runs-on: ubuntu-latest
outputs:
changes-library-solidity: ${{ steps.filter.outputs.library-solidity }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: 'false'
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
id: filter
with:
filters: |
library-solidity:
- .github/workflows/library-solidity-integrity-checks.yml
- library-solidity/**
- ci/check_spdx_licenses.sh
contract-integrity-checks:
name: library-solidity-integrity-checks/contract-integrity-checks (bpr)
needs: check-changes
if: ${{ needs.check-changes.outputs.changes-library-solidity == 'true' }}
permissions:
contents: 'read' # Required to checkout repository code
runs-on: ubuntu-latest
steps:
- name: Checkout project
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: 'false'

- name: Check SPDX license headers
working-directory: library-solidity
run: make check-spdx-headers
5 changes: 5 additions & 0 deletions ci/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# CI Scripts

- [`abi-compat/`](./abi-compat/README.md): contract ABI compatibility checks
- [`upgrade-check/`](./upgrade-check/): contract upgrade version checks
- [`shared/`](./shared/): utilities shared across CI subsystems
24 changes: 24 additions & 0 deletions ci/abi-compat/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# ABI Compatibility

ABI coverage is derived from each package's `upgrade-manifest.json`.
Stable-surface policy lives in [`config.ts`](./config.ts): initializer, ownership, upgrade,
and other intentionally non-public entrypoints are excluded there.

Compare the stable contract ABI surface between two refs locally with:

```bash
bun ci/abi-compat/list.ts --from v0.11.1 --to v0.12.0-0
```

Limit the scope with:

```bash
bun ci/abi-compat/list.ts --from v0.11.1 --to v0.12.0-0 --package host-contracts
bun ci/abi-compat/list.ts --from v0.11.1 --to v0.12.0-0 --package gateway-contracts
```

Use the lower-level checker when both package directories are already prepared:

```bash
bun ci/abi-compat/check.ts <baseline-pkg-dir> <target-pkg-dir> <host-contracts|gateway-contracts>
```
70 changes: 70 additions & 0 deletions ci/abi-compat/check.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#!/usr/bin/env bun
import { PACKAGE_CONFIG, type PackageName } from "./config";
import { collectAbiCompatResults } from "./lib";

const [baselineDir, targetDir, pkg] = process.argv.slice(2) as [
string | undefined,
string | undefined,
PackageName | undefined,
];

if (!baselineDir || !targetDir || !pkg || !(pkg in PACKAGE_CONFIG)) {
console.error(
"Usage: bun ci/abi-compat/check.ts <baseline-pkg-dir> <target-pkg-dir> <host-contracts|gateway-contracts>",
);
process.exit(1);
}

const results = collectAbiCompatResults(baselineDir, targetDir, pkg);
let errors = 0;

for (const result of results) {
console.log(`::group::Checking ${result.name}`);
try {
if (!result.baselineExists) {
console.log(`Skipping ${result.name} (new contract, not in baseline)`);
continue;
}

console.log(
`${result.name}: ${result.baselineStableCount} stable baseline ABI entries, ${result.targetStableCount} stable target ABI entries`,
);

for (const error of result.errors) {
console.error(`::error::${error}`);
errors++;
}

for (const signature of result.missing) {
console.error(`::error::${result.name} missing stable ABI signature: ${signature}`);
errors++;
}

if (result.allowedMissing.length > 0) {
console.log(`${result.name}: accepted stable ABI exceptions`);
for (const signature of result.allowedMissing) {
console.log(` ~ ${signature}`);
}
}

if (result.added.length > 0) {
console.log(`${result.name}: added stable ABI entries`);
for (const signature of result.added) {
console.log(` + ${signature}`);
}
}

if (result.errors.length === 0 && result.missing.length === 0 && result.added.length === 0) {
console.log(`${result.name}: no stable ABI changes`);
}
} finally {
console.log("::endgroup::");
}
}

if (errors > 0) {
console.error(`::error::ABI compatibility check failed with ${errors} error(s)`);
process.exit(1);
}

console.log("All contracts passed ABI compatibility checks");
42 changes: 42 additions & 0 deletions ci/abi-compat/config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
export type PackageName = "host-contracts" | "gateway-contracts";

export const EXCLUDED_MODIFIERS = new Set([
"onlyOwner",
"onlyACLOwner",
"onlyGatewayOwner",
"onlyFromEmptyProxy",
"onlyPauser",
"onlyCoprocessorTxSender",
"onlyKmsTxSender",
"onlyRegisteredHostChain",
"onlyHandleFromRegisteredHostChain",
"onlyDecryptionContract",
"onlyInputVerificationContract",
]);

export const EXCLUDED_FUNCTION_PATTERNS = [
/^initialize/,
/^reinitializeV\d+$/,
/^acceptOwnership$/,
/^owner$/,
/^transferOwnership$/,
/^upgradeToAndCall$/,
];

// ABI coverage is derived from each package's upgrade-manifest.json.
// Keep only stable-surface exclusions here.
export const EXCLUDED_CONTRACT_FUNCTION_PATTERNS: Record<string, RegExp[]> = {
HCULimit: [/^checkHCUFor/],
};

export const PACKAGE_CONFIG: Record<
PackageName,
{
extraDeps?: string;
}
> = {
"host-contracts": {
extraDeps: "forge soldeer install",
},
"gateway-contracts": {},
};
Loading
Loading