Skip to content

Add data feeds cache and proxy bindings - #162

Open
Fletch153 wants to merge 2 commits into
feature/DF-25429/data-feeds-contractsfrom
feature/DF-25434/data-feeds-deployment
Open

Add data feeds cache and proxy bindings#162
Fletch153 wants to merge 2 commits into
feature/DF-25429/data-feeds-contractsfrom
feature/DF-25434/data-feeds-deployment

Conversation

@Fletch153

@Fletch153 Fletch153 commented Jul 22, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Adds generated Go clients for the data feeds cache and proxy contracts, so deployment tooling and tests can talk to them with typed methods instead of hand-rolled XDR.
  • Extends the existing generator only where the data feeds contracts needed it: no CCIP bindings or interfaces change.
  • Teaches the deployer to deploy contracts with constructor arguments and to upload WASM for upgrades, and fixes a fee-estimation gap that caused intermittent transaction failures.

Context

Soroban's contract spec doesn't say which functions are read-only, and the generator's old name heuristic (get_*/is_*) doesn't cover reads like latest_round or decimals. Instead of guessing, each contract now declares its read-only functions explicitly in the generation script: listed functions become free simulations, everything else submits a real transaction, and a misspelled name fails generation immediately. The same pattern covers void functions (ownership transfer, upgrade), which the old parser silently dropped. CCIP contracts don't use the new lists and generate byte-identically to before.

Changes

  • Generator: support for i256 values (as *big.Int everywhere they can appear), the per-contract read-only and void-function lists, and decoding of #[topic] event fields: these travel in an event's topic list, not its body, and were previously left empty when parsing events. That last fix also repairs the CRE forwarder client, which is why one regenerated CCIP-adjacent file appears in the diff.
  • Interfaces + bindings: the wasm-derived interface snapshots and generated Go packages for both contracts, marked linguist-generated. CI's check-generated job rebuilds the contracts and regenerates everything, so these cannot drift from the contract source.
  • Deployer: DeployContractWithArgs / UploadContractWASM for the changesets, plus a fix that applies the existing fee safety margin to the declared Soroban resource fee: the part that pays for storage rent and events. Without it, transactions could fail when ledger state shifted between simulation and submission.
  • Scripts: generation now fails loudly if an expected wasm or interface file is missing, instead of silently skipping and leaving stale output that CI can't detect.

Testing

  • Unit tests across the generator, scval encoding (including i256 round-trips at every boundary), and the deployer all pass.
  • A full smoke run against a live local network exercised every generated method on both contracts: all reads as simulations, all writes as real transactions, every event parser decoding real on-chain events, including negative and >64-bit i256 answers.
  • The downstream changeset suite and the full CRE write-path e2e both pass against these bindings.
  • Regeneration from source is verified byte-identical for all CCIP packages.

Notes

@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown

Soroban Contract Test Coverage

92.57% line coverage — 18067 / 19517 lines hit

Metric Hit Total Coverage
Lines 18067 19517 92.57%
Functions 1196 1538 77.76%
Regions 33594 35986 93.35%

Per-Contract Breakdown

Contract Lines (Hit / Total) Line Cov Funcs (Hit / Total) Func Cov
other 18067 / 19517 92.6% 1196 / 1538 77.8%
Full file-level coverage report
Filename                                                 Regions    Missed Regions     Cover   Functions  Missed Functions  Executed       Lines      Missed Lines     Cover    Branches   Missed Branches     Cover
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ccip-ramp-registry/src/lib.rs                                188                75    60.11%           8                 3    62.50%         104                41    60.58%           0                 0         -
ccip-ramp-registry/src/test.rs                               214                 0   100.00%           5                 0   100.00%         128                 0   100.00%           0                 0         -
ccip-ramp-registry/src/types.rs                               83                11    86.75%          17                 6    64.71%          83                11    86.75%           0                 0         -
ccvs/committee-verifier/src/lib.rs                           588                54    90.82%          26                 2    92.31%         382                10    97.38%           0                 0         -
ccvs/committee-verifier/src/test.rs                         1300                25    98.08%          48                 2    95.83%         587                13    97.79%           0                 0         -
ccvs/committee-verifier/src/types.rs                          17                 8    52.94%           6                 5    16.67%          14                 7    50.00%           0                 0         -
ccvs/versioned-verifier-resolver/src/lib.rs                  287                21    92.68%          14                 1    92.86%         162                 4    97.53%           0                 0         -
ccvs/versioned-verifier-resolver/src/test.rs                 680                 9    98.68%          20                 0   100.00%         359                 3    99.16%           0                 0         -
ccvs/versioned-verifier-resolver/src/types.rs                 89                 6    93.26%          16                 4    75.00%          83                 4    95.18%           0                 0         -
common/authorization/src/allowlist.rs                        167                51    69.46%          12                 4    66.67%         110                40    63.64%           0                 0         -
common/authorization/src/lib.rs                              426                27    93.66%          16                 0   100.00%         277                16    94.22%           0                 0         -
common/authorization/src/ownable.rs                          102                13    87.25%           9                 1    88.89%          62                 6    90.32%           0                 0         -
common/authorization/src/test.rs                            1195                 0   100.00%          57                 0   100.00%         462                 0   100.00%           0                 0         -
common/guard/src/initializable.rs                             30                 1    96.67%           4                 0   100.00%          22                 1    95.45%           0                 0         -
common/guard/src/lib.rs                                       32                 1    96.88%           4                 0   100.00%          22                 0   100.00%           0                 0         -
common/guard/src/test.rs                                     101                 0   100.00%           8                 0   100.00%          47                 0   100.00%           0                 0         -
common/helpers/src/curse_checkable.rs                        103                24    76.70%           6                 1    83.33%          56                12    78.57%           0                 0         -
common/helpers/src/map_updater.rs                             94                15    84.04%           7                 3    57.14%          39                 8    79.49%           0                 0         -
common/helpers/src/soroban_invoke.rs                         277                 7    97.47%          12                 0   100.00%         115                 1    99.13%           0                 0         -
common/interfaces/src/ccip_receiver.rs                         8                 8     0.00%           8                 8     0.00%           8                 8     0.00%           0                 0         -
common/interfaces/src/committee_verifier.rs                   13                13     0.00%          13                13     0.00%          13                13     0.00%           0                 0         -
common/interfaces/src/fee_quoter.rs                           17                17     0.00%          17                17     0.00%          17                17     0.00%           0                 0         -
common/interfaces/src/offramp.rs                              11                11     0.00%          11                11     0.00%          11                11     0.00%           0                 0         -
common/interfaces/src/onramp.rs                                9                 9     0.00%           9                 9     0.00%           9                 9     0.00%           0                 0         -
common/interfaces/src/ramp_registry.rs                         5                 5     0.00%           5                 5     0.00%           5                 5     0.00%           0                 0         -
common/interfaces/src/rmn_proxy.rs                             6                 6     0.00%           6                 6     0.00%           6                 6     0.00%           0                 0         -
common/interfaces/src/router.rs                                9                 9     0.00%           9                 9     0.00%           9                 9     0.00%           0                 0         -
common/interfaces/src/siloed_lock_release_pool.rs             21                21     0.00%          21                21     0.00%          21                21     0.00%           0                 0         -
common/interfaces/src/token_admin_registry.rs                  8                 8     0.00%           8                 8     0.00%           8                 8     0.00%           0                 0         -
common/interfaces/src/token_lock_box.rs                        6                 6     0.00%           6                 6     0.00%           6                 6     0.00%           0                 0         -
common/interfaces/src/token_pool.rs                           11                11     0.00%          11                11     0.00%          11                11     0.00%           0                 0         -
common/interfaces/src/versioned_verifier_resolver.rs          10                10     0.00%          10                10     0.00%          10                10     0.00%           0                 0         -
common/message/src/lib.rs                                    586                41    93.00%          28                 4    85.71%         298                 9    96.98%           0                 0         -
common/message/src/test.rs                                   641                 2    99.69%          28                 0   100.00%         323                 0   100.00%           0                 0         -
common/pool/src/decimals.rs                                  109                10    90.83%           6                 0   100.00%          76                 3    96.05%           0                 0         -
common/pool/src/finality_codec.rs                             52                 1    98.08%           3                 0   100.00%          41                 0   100.00%           0                 0         -
common/pool/src/lib.rs                                       460                31    93.26%          32                 1    96.88%         409                26    93.64%           0                 0         -
common/pool/src/rate_limit.rs                                180                 7    96.11%           9                 0   100.00%         145                 3    97.93%           0                 0         -
common/pool/src/types.rs                                      20                14    30.00%          16                14    12.50%          30                14    53.33%           0                 0         -
common/signature/src/config.rs                                44                12    72.73%           6                 2    66.67%          28                 5    82.14%           0                 0         -
common/signature/src/quorum.rs                                68                 1    98.53%           2                 0   100.00%          44                 1    97.73%           0                 0         -
common/signature/src/scheme.rs                                45                 0   100.00%           2                 0   100.00%          29                 0   100.00%           0                 0         -
cre/forwarder/src/error.rs                                     8                 3    62.50%           1                 0   100.00%           8                 3    62.50%           0                 0         -
cre/forwarder/src/lib.rs                                     462                24    94.81%          18                 0   100.00%         318                 7    97.80%           0                 0         -
cre/forwarder/src/test.rs                                   2886                14    99.51%         128                 2    98.44%        1204                 8    99.34%           0                 0         -
cre/forwarder/src/types.rs                                    62                 6    90.32%          10                 6    40.00%          36                 6    83.33%           0                 0         -
cre/test/read_fixture/src/lib.rs                             125               125     0.00%          33                33     0.00%         103               103     0.00%           0                 0         -
cre/test/receiver/src/lib.rs                                  53                53     0.00%           5                 5     0.00%          26                26     0.00%           0                 0         -
cre/test/rejecting_receiver/src/lib.rs                         3                 3     0.00%           1                 1     0.00%           8                 8     0.00%           0                 0         -
fee-quoter/src/lib.rs                                        771               164    78.73%          20                 3    85.00%         527               100    81.02%           0                 0         -
fee-quoter/src/test.rs                                       861                 0   100.00%          17                 0   100.00%         427                 0   100.00%           0                 0         -
fee-quoter/src/types.rs                                       13                13     0.00%          13                13     0.00%          13                13     0.00%           0                 0         -
mcms/src/abi_encoding.rs                                     216                 4    98.15%          10                 0   100.00%          98                 1    98.98%           0                 0         -
mcms/src/constants.rs                                         10                 0   100.00%           2                 0   100.00%           6                 0   100.00%           0                 0         -
mcms/src/crypto.rs                                           202                 3    98.51%           7                 0   100.00%         109                 2    98.17%           0                 0         -
mcms/src/error.rs                                              8                 4    50.00%           1                 0   100.00%           8                 4    50.00%           0                 0         -
mcms/src/lib.rs                                              713                50    92.99%          20                 0   100.00%         483                23    95.24%           0                 0         -
mcms/src/test.rs                                            2278                19    99.17%          59                 0   100.00%        1095                 2    99.82%           0                 0         -
mcms/src/types.rs                                             10                10     0.00%          10                10     0.00%          10                10     0.00%           0                 0         -
offramp/src/lib.rs                                           729               400    45.13%          23                 8    65.22%         473               224    52.64%           0                 0         -
offramp/src/test.rs                                          890                 0   100.00%          28                 0   100.00%         363                 0   100.00%           0                 0         -
offramp/src/types.rs                                          21                 9    57.14%           6                 5    16.67%          17                 7    58.82%           0                 0         -
onramp/src/lib.rs                                           1181               149    87.38%          27                 2    92.59%         739                61    91.75%           0                 0         -
onramp/src/test.rs                                          1591                 4    99.75%          37                 0   100.00%         708                 4    99.44%           0                 0         -
onramp/src/types.rs                                           23                 9    60.87%           6                 5    16.67%          19                 7    63.16%           0                 0         -
pools/burn-mint-pool/src/lib.rs                              390               107    72.56%          28                 9    67.86%         282                55    80.50%           0                 0         -
pools/burn-mint-pool/src/test.rs                            2671                24    99.10%          56                 5    91.07%        1744                55    96.85%           0                 0         -
pools/lock-release-pool/src/lib.rs                           404               100    75.25%          28                 8    71.43%         288                48    83.33%           0                 0         -
pools/lock-release-pool/src/test.rs                         2330                24    98.97%          55                 5    90.91%        1524                55    96.39%           0                 0         -
pools/siloed-lock-release-pool/src/lib.rs                    556               196    64.75%          38                17    55.26%         384               123    67.97%           0                 0         -
pools/siloed-lock-release-pool/src/test.rs                  1303                12    99.08%          38                 2    94.74%         695                18    97.41%           0                 0         -
pools/token-lock-box/src/lib.rs                              197                17    91.37%          13                 1    92.31%         113                 2    98.23%           0                 0         -
pools/token-lock-box/src/test.rs                             257                 0   100.00%           7                 0   100.00%          73                 0   100.00%           0                 0         -
registry/src/lib.rs                                            8                 0   100.00%           1                 0   100.00%           3                 0   100.00%           0                 0         -
registry/src/test.rs                                          27                 0   100.00%           1                 0   100.00%          11                 0   100.00%           0                 0         -
rmn_proxy/src/lib.rs                                          66                12    81.82%           5                 1    80.00%          34                 3    91.18%           0                 0         -
rmn_proxy/src/test.rs                                        279                 0   100.00%          11                 0   100.00%          91                 0   100.00%           0                 0         -
rmn_remote/src/lib.rs                                        302                26    91.39%          16                 1    93.75%         171                10    94.15%           0                 0         -
rmn_remote/src/test.rs                                       393                 0   100.00%          14                 0   100.00%         133                 0   100.00%           0                 0         -
router/src/lib.rs                                            593                87    85.33%          18                 1    94.44%         374                43    88.50%           0                 0         -
router/src/test.rs                                          1186                 0   100.00%          29                 0   100.00%         497                 0   100.00%           0                 0         -
router/src/test_panic_receiver.rs                              5                 0   100.00%           2                 0   100.00%           5                 0   100.00%           0                 0         -
router/src/types.rs                                            3                 3     0.00%           3                 3     0.00%           3                 3     0.00%           0                 0         -
timelock/src/error.rs                                          6                 2    66.67%           1                 0   100.00%           6                 2    66.67%           0                 0         -
timelock/src/lib.rs                                          649                46    92.91%          32                 2    93.75%         393                18    95.42%           0                 0         -
timelock/src/roles.rs                                        141                10    92.91%           6                 0   100.00%          76                 7    90.79%           0                 0         -
timelock/src/storage.rs                                      115                15    86.96%          12                 1    91.67%          68                 7    89.71%           0                 0         -
timelock/src/test.rs                                        1479                16    98.92%          37                 0   100.00%         531                 1    99.81%           0                 0         -
timelock/src/types.rs                                          3                 3     0.00%           3                 3     0.00%           3                 3     0.00%           0                 0         -
token-admin-registry/src/lib.rs                              368                23    93.75%          18                 1    94.44%         257                 4    98.44%           0                 0         -
token-admin-registry/src/test.rs                             825                 0   100.00%          21                 0   100.00%         287                 0   100.00%           0                 0         -
token-admin-registry/src/types.rs                              2                 2     0.00%           2                 2     0.00%           2                 2     0.00%           0                 0         -
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TOTAL                                                      35986              2392    93.35%        1538               342    77.76%       19517              1450    92.57%           0                 0         -```

</details>

> Commit `e357d4a1` | [Full CI run](https://github.com/smartcontractkit/chainlink-stellar/actions/runs/31728148622)

<!-- Sticky Pull Request Commentcontract-coverage -->

@Fletch153

Fletch153 commented Jul 22, 2026

Copy link
Copy Markdown
Collaborator Author

The five failing Go CI checks (E2E, Go Unit Tests, Integration ×2, Coverage) are pre-existing on main with byte-identical failure signatures — not introduced here: deployment/adapters references CommitteeVerifierClient.GetAllSignatureConfigs, which is absent from the bindings at current main, so every Go job fails at build. All contract-side checks (test-contracts, formatting, generated code) pass.

@Fletch153
Fletch153 force-pushed the feature/DF-25434/data-feeds-deployment branch from aeaff42 to 3410c65 Compare July 22, 2026 19:26
@Fletch153 Fletch153 changed the title Add data feeds cache deployment package and Go bindings Add data feeds cache and proxy bindings via reworked generator Jul 22, 2026
@Fletch153
Fletch153 force-pushed the feature/DF-25434/data-feeds-deployment branch from c393651 to 9b5104c Compare July 23, 2026 13:21
@Fletch153 Fletch153 changed the title Add data feeds cache and proxy bindings via reworked generator Add data feeds cache and proxy bindings Jul 23, 2026
@Fletch153
Fletch153 force-pushed the feature/DF-25434/data-feeds-deployment branch 7 times, most recently from f7386a7 to d6b704d Compare July 23, 2026 15:20
@Fletch153
Fletch153 force-pushed the feature/DF-25434/data-feeds-deployment branch from d6b704d to fda599a Compare July 23, 2026 16:00
@Fletch153
Fletch153 force-pushed the feature/DF-25429/data-feeds-contracts branch from 019b250 to 14b9721 Compare July 23, 2026 18:16
@Fletch153
Fletch153 force-pushed the feature/DF-25434/data-feeds-deployment branch 6 times, most recently from 62fb6b4 to 667504a Compare July 23, 2026 19:43
@Fletch153
Fletch153 marked this pull request as ready for review July 27, 2026 13:41
@Fletch153
Fletch153 force-pushed the feature/DF-25434/data-feeds-deployment branch 2 times, most recently from 1a71e41 to 7d7cc17 Compare August 3, 2026 17:44
@Fletch153
Fletch153 force-pushed the feature/DF-25429/data-feeds-contracts branch from 943fa11 to 099909e Compare August 4, 2026 13:39
@Fletch153
Fletch153 force-pushed the feature/DF-25434/data-feeds-deployment branch from 541f9d7 to 971e21a Compare August 4, 2026 13:39
Generated Go clients for both contracts via the v0 generator with
additive support: i256 as *big.Int in all positions, explicit
per-contract -readonly and -include-void lists, #[topic] event
field decoding, and a resource-fee cushion in the deployer so
refundable rent/event costs survive simulate-to-submit drift.
Deployer gains constructor-arg deploys and WASM upload; the
generation scripts fail hard on missing inputs.
@Fletch153
Fletch153 force-pushed the feature/DF-25434/data-feeds-deployment branch from 971e21a to 5c98a9c Compare August 10, 2026 22:42
- New deployment/data-feeds package embedding the compiled cache and
  proxy WASM with an Artifact accessor, so Go consumers can deploy the
  pinned bytecode without a Rust toolchain
- Move the DataFeedsCacheWasm constant out of deployment/cre, which
  never shipped a blob behind it
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.

1 participant