Skip to content

chore: bump canton-api-client to 3.6.0-0.1.0#52

Merged
schronck merged 5 commits into
mainfrom
chore/bump-canton-api-client-3.6.0
May 19, 2026
Merged

chore: bump canton-api-client to 3.6.0-0.1.0#52
schronck merged 5 commits into
mainfrom
chore/bump-canton-api-client-3.6.0

Conversation

@scolear
Copy link
Copy Markdown
Member

@scolear scolear commented May 15, 2026

Summary

Bumps canton-api-client from 3.3.0-0.1.0 to 3.6.0-0.1.0 and the
underlying canton-lib deps from a v0.5.0 tag to v0.6.0. Also bumps
this crate's own version 0.4.2 → 0.6.0 to signal the transitive wire
change.

Changes

  • Cargo.toml
    • canton-api-client = "3.6.0-0.1.0" (was 3.3.0-0.1.0)
    • ledger/keycloak/registry/common git deps pinned to
      tag = "v0.6.0" (was tag = "v0.5.0")
    • Package version bumped to 0.6.0
  • Cargo.lock regenerated by cargo update -p ledger -p keycloak -p registry -p common.
  • src/ — spec adaptations for the 3.6.0 wire changes:
    Option<bool> / contract_entry / create_argument shape adjustments
    (canton-lib v0.6.0 absorbs most of these inside its conversion
    functions; the bits surfaced to cbtc-lib are the call-site updates in
    this commit).
  • examples/integration_test.rs — filters list_holdings to
    instrument_id == "CBTC" before the step-20 split (also on the
    separate standalone PR fix(integration_test): filter holdings to CBTC before splitting #54, in case this one is reworked).

Verification

cargo run --example integration_test against devnet, with the final
wiring (canton-lib tag = "v0.6.0" at commit 83446199):

  • All 20/20 integration steps passed in 136.3s.
  • Sender balance settled exactly through the round-trip + burn
    (21.27819308 → 21.17819308, -0.1 from step 17).
  • The intermittent participant 503s observed earlier (cbtc-lib#53) did
    not recur in the final run.

Cross-references

  • canton-lib v0.6.0 release: https://github.com/DLC-link/canton-lib/releases/tag/v0.6.0
  • canton-lib#18 (the underlying API bump)
  • canton-lib#19 (Keycloak Quarkus token URL helpers)
  • canton-lib#20 (canton-lib version bump to 0.6.0)
  • cbtc-lib#54 (standalone copy of the integration_test fix)
  • cbtc-lib#53 (intermittent devnet participant 503s — infra issue, not a
    regression from this PR)

Follow-up after merge

  • Tag cbtc-lib v0.6.0 on the merge commit (mirroring canton-lib's
    release workflow).

Closes #51

scolear added 2 commits May 15, 2026 14:43
Note: this PR also requires a new canton-lib tag containing the same
canton-api-client bump in its `common` crate. Blocked on
DLC-link/canton-lib#18 and the follow-up release.
Adapts cbtc-lib to the spec deltas introduced in Canton 3.6.0 — many
previously required fields are now optional, `create_argument` is no
longer double-wrapped (`Option<Option<Value>>` → `Option<Value>`),
`transaction.events` and `package_ids` are now required (no longer
`Option<Vec>`), `created_event_blob` is now `Option<String>`,
`CreatedEvent` gained required `representativePackageId`/`acsDelta`
fields, and `ExercisedEvent` gained `acsDelta`.

Mechanical changes:

- accept/cancel_offers/utils/list_incoming_offers/list_outgoing_offers:
  drop the outer `Some(...)` from `if let Some(Some(create_arg)) = ...`
  patterns on `create_argument`.
- credentials/mint_redeem/models: drop the
  `.and_then(|opt| opt.as_ref())` middle step from the
  `create_argument.as_ref().and_then(...).and_then(|v| v.as_object())`
  chains used to read the create-argument map.
- credentials/mint_redeem/models: `created_event.created_event_blob` is
  now `Option<String>`; `unwrap_or_default()` to preserve the existing
  `String` surface on the local types.
- consolidate/split/transfer/mint_redeem/credentials parsers:
  `transaction.events` is no longer `Option<Vec<Event>>`; drop the
  `.as_ref().ok_or("Failed to find events")?` indirection and iterate
  the Vec directly.
- consolidate/split/transfer parsers: `ExercisedEvent.exercise_result`
  is `Option<Option<Value>>` in 3.6 — match `Some(Some(result))` rather
  than the single-layer pattern that used to compile against 3.3.
- dar_check: `ListPackagesResponse.package_ids` is now a plain
  `Vec<String>`; drop the `.ok_or_else(...)` that handled the previous
  optional wrapping.
- utils test fixtures: include the new required
  `representativePackageId`/`acsDelta` fields on `CreatedEvent`,
  `acsDelta` on `ExercisedEvent`, and always emit `events: []` (rather
  than omitting the field) since `JsTransaction.events` is required.
- parser unit tests for the "missing events" case: update assertions to
  the new error messages each parser returns when given an empty events
  list (the old "Failed to find events" branch no longer exists, since
  the typed model guarantees events is present).

NOTE: this commit temporarily points the four canton-lib deps at the
`chore/bump-canton-api-client-3.6.0` branch so the workspace can
resolve end-to-end against the matching canton-api-client 3.6.0 bump
there. The maintainer should swap these back to a real v0.6.0 tag
before merging.
The step 20 split called `holdings.first()` on the result of
`list_holdings`, which returns every Holding-template contract owned by
the party. On devnet the sender's account holds legacy `CBTCV0RC8`
instrument holdings alongside `CBTC`, so `.first()` could pick a
non-CBTC holding. The split request then asserted `instrument_id = "CBTC"`,
and the registry correctly rejected the mismatch with 400 "Given holdings
are invalid".

Filter to `instrument_id == "CBTC"` before picking, matching the pattern
already used by `submit_withdraw` in `mint_redeem::redeem`.

Verified end-to-end on devnet: 20/20 integration_test steps pass.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
gyorgybalazsi and others added 2 commits May 19, 2026 15:27
Replaces the temporary branch refs (`branch =
"chore/bump-canton-api-client-3.6.0"`) on `ledger`/`keycloak`/`registry`/
`common` with `tag = "v0.6.0"`. canton-lib v0.6.0 (DLC-link/canton-lib#20)
contains the 3.6.0 bump (#18) plus the keycloak Quarkus token-URL helpers
(#19); the upstream PR branch was deleted on merge, so the previous refs no
longer resolve.

Cargo.lock updated by `cargo update -p ledger -p keycloak -p registry -p
common`. `cargo check` clean.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Aligns cbtc-lib's crate version with the canton-lib v0.6.0 release this
PR depends on. Skips 0.5.x — the version jump reflects the canton-api-client
3.6.0 wire bump pulled in transitively (breaking change in dependency
behavior, see CHANGELOG of canton-lib v0.6.0 for the `ledger_end::get`
error-path change).

cbtc-lib's public API is unchanged.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@socket-security
Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatedcanton-api-client@​3.3.0-0.1.1 ⏵ 3.6.0-0.1.010010093100100

View full report

@scolear scolear marked this pull request as ready for review May 19, 2026 14:22
@schronck schronck merged commit a7e06f7 into main May 19, 2026
2 checks passed
@schronck schronck deleted the chore/bump-canton-api-client-3.6.0 branch May 19, 2026 14:37
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.

Upgrade canton-api-client to 3.6.0-0.1.0 (Canton 3.6.0 spec regen)

3 participants