Repository navigation
Support fully qualified type names for v30 - #2798
Merged
Merged
Conversation
Contributor
There was a problem hiding this comment.
🔵 Needs a closer look
Two moderate build-path issues remain unresolved; the warning wording also needs correction.
0 open findings
What changed in this PR
Updates Soroban dependencies and CLI contract builds for v30 fully qualified type/event names.
Changes:
- Pins v30 SDK, environment, XDR, and related revisions.
- Adds spec shaking and qualified-name reduction.
- Updates fixtures, tests, interface generation, and CI workflows.
Review findings:
Cargo.toml— moderate: raw fixture builds bypass required v30 post-processing.build.rs— moderate:--imagebuilds bypass the new transformation.build.rs— nit: collision warnings also cover reserved-name renaming.
| File | Description |
|---|---|
deny.toml |
Allows temporary pinned Git dependencies. |
cmd/soroban-cli/src/utils/contract-workspace-template/Cargo.toml.removeextension |
Updates the generated SDK version to v30. |
cmd/soroban-cli/src/commands/contract/info/interface.rs |
Passes SDK version to Rust interface generation. |
cmd/soroban-cli/src/commands/contract/build.rs |
Adds version-aware shaking and qualified-name reduction. |
cmd/soroban-cli/src/commands/contract/arg_parsing.rs |
Adapts tests to widened XDR names. |
cmd/crates/soroban-test/tests/it/build.rs |
Adds qualified-name and shaking integration coverage. |
cmd/crates/soroban-test/tests/fixtures/workspace-with-qualified-names/contracts/names/src/lib.rs |
Defines qualified-name fixture types and events. |
cmd/crates/soroban-test/tests/fixtures/workspace-with-qualified-names/contracts/names/Cargo.toml |
Defines fixture contract metadata. |
cmd/crates/soroban-test/tests/fixtures/workspace-with-qualified-names/Cargo.toml |
Defines the fixture workspace. |
cmd/crates/soroban-test/tests/fixtures/test-wasms/token/Cargo.toml |
Updates the token fixture to v30. |
cmd/crates/soroban-test/tests/fixtures/test-wasms/token_renamed/Cargo.toml |
Updates the renamed-token fixture to v30. |
cmd/crates/soroban-test/tests/fixtures/test-wasms/swap/Cargo.toml |
Updates the swap fixture to v30. |
cmd/crates/soroban-test/tests/fixtures/test-wasms/hello_world/Cargo.toml |
Updates the hello-world fixture to v30. |
cmd/crates/soroban-test/tests/fixtures/test-wasms/empty_constructor/Cargo.toml |
Updates the empty-constructor fixture to v30. |
cmd/crates/soroban-test/tests/fixtures/test-wasms/custom_type/Cargo.toml |
Updates the custom-type fixture to v30. |
cmd/crates/soroban-test/tests/fixtures/test-wasms/custom_account/Cargo.toml |
Updates the custom-account fixture to v30. |
cmd/crates/soroban-test/tests/fixtures/test-wasms/constructor/Cargo.toml |
Updates the constructor fixture to v30. |
cmd/crates/soroban-test/tests/fixtures/test-wasms/auth/Cargo.toml |
Updates the auth fixture to v30. |
cmd/crates/soroban-test/tests/fixtures/hello/Cargo.toml |
Updates the hello fixture. |
cmd/crates/soroban-test/tests/fixtures/bye/Cargo.toml |
Updates the bye fixture. |
cmd/crates/soroban-spec-tools/src/lib.rs |
Supports widened type and event names. |
cmd/crates/soroban-spec-tools/src/event.rs |
Updates event-name construction. |
cmd/crates/soroban-spec-tools/src/contract.rs |
Formats widened contract names. |
Cargo.toml |
Updates workspace dependencies and v30 revisions. |
Cargo.lock |
Locks updated dependency revisions. |
.github/workflows/rpc-tests.yml |
Updates the protocol version. |
.github/workflows/ledger-emulator.yml |
Updates the protocol version. |
.github/workflows/bindings-ts.yml |
Updates the protocol version. |
🧠 Review effort: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
1 of 3 tasks
leighmcculloch
force-pushed
the
qualified-spec-names-for-v30
branch
from
October 16, 2026 16:45
08c60c7 to
de1b884
Compare
leighmcculloch
added a commit
to jayz22/rs-soroban-sdk
that referenced
this pull request
Oct 19, 2026
### What In `soroban-token-spec` and `stellar-asset-spec`, change `xdr()` to return the spec with its type and event names reduced by `soroban_spec::reduce::reduce`, and keep the unreduced spec in a `const` fn `xdr_unprocessed()`. Make both crates std, and exclude them from the wasm publish dry run. Document on the generated `spec_xdr` fns, and in a v30 migration note, that their entries are unprocessed and must be reduced when assembled into a spec. Also add docs to all spec xdr fns noting they are unprocessed. ### Why Specs generated by the SDK have not yet passed through `stellar contract build`, so the assembled spec names types and events by their fully qualified paths, such as `::stellar_asset_spec::TransferWithMuxedString`, which tooling cannot decode. It's not possible for the spec xdr functions generated by the sdk to return processed versions because the spec xdr fns hold a single entry and a single entry cannot be reduced on its own, so best we can do is document their new behaviour. A change like this is not ideal, but a tradeoff in the new way specs are generated. These functions are not typically used by contracts in any case. The `*-spec` crates are designed specifically for other applications, like the stellar-cli, to import the spec. So it makes sense to offer processed versions in those crates. Close stellar#2140 Blocking stellar/stellar-cli#2798 ### SemVer Change - [x] Major (`vX._._`) - Breaking change to the public API. - [ ] Minor (`v_.Y._`) - Additive change to the public API. - [ ] Patch (`v_._.Z`) - No change to the public API.
leighmcculloch
added a commit
to stellar/quickstart
that referenced
this pull request
Oct 22, 2026
### What Add protocol 30 Soroban config settings for the local network, which are the p27 settings plus the host's cost params for the nine ML-DSA cost types protocol 30 adds, and a pull-request-only `nightly-p30` image that runs core master with the `protocol-next` rpc and horizon. ### Why At protocol 30 the local network falls back to the p27 settings, whose cost param lists are nine entries short, so the config upgrade fails and the container never becomes healthy, and no published image pairs a protocol 30 core with an rpc that can read its ledger close meta, which blocks testing protocol 30 contracts (stellar/stellar-cli#2798).
leighmcculloch
marked this pull request as ready for review
October 22, 2026 00:47
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


What
Update the xdr, sdk and env crates for v30 and teach
contract buildto reduce the fully qualified type and event names in contract specs and to shake specs by the version recorded in the wasm.Why
Contracts built with soroban-sdk v30 name user-defined types and events by their fully qualified path, which the CLI must read, shorten and shake correctly; this replaces #2751, #2674 and #2720.
Known limitations
The sdk, env and xdr crates are pinned to git revisions until they are released.