Skip to content

Releases: stellar/rs-soroban-sdk

27.0.2

Choose a tag to compare

@leighmcculloch leighmcculloch released this 23 Jul 04:20
45d378a

What's Changed

Full Changelog: v27.0.1...v27.0.2

27.0.1

Choose a tag to compare

@leighmcculloch leighmcculloch released this 21 Jul 07:20
19a2d48

What's Changed

  • Rename allowance expiration argument to live_until_ledger by @fnando in #1932
  • Update the version of stellar-env-* crates to fix a dependent version constraint by @leighmcculloch ef0f7e9
  • Bump version to 27.0.1 by @github-actions[bot] in #1942

New Contributors

Full Changelog: v27.0.0...v27.0.1

26.1.1

Choose a tag to compare

@leighmcculloch leighmcculloch released this 21 Jul 05:49

What's Changed

  • Update the version of stellar-env-* crates to fix a dependent version constraint 09564a7

Full Changelog: v26.1.0...v26.1.1

25.3.2

Choose a tag to compare

@leighmcculloch leighmcculloch released this 21 Jul 05:39

What's Changed

  • Update the version of stellar-env-* crates to fix a dependent version constraint 076083c

Full Changelog: v25.3.1...v25.3.2

27.0.0

Choose a tag to compare

@mootz12 mootz12 released this 08 Jul 19:48
e5cb4b5

What's Changed

New Features

  • CAP-71 — Auth delegation for custom accounts — Adds support for delegating a custom account's __check_auth to another address. CustomAccount::delegate_auth hands authorization to a G- or C-address that performs the actual authentication logic, and CustomAccount::get_delegated_signers returns the delegated signers supplied in the transaction's authorization payload for verification. (#1896)

Improvements

  • Zero-copy BytesN::from for [u8; N]BytesN::from now uses BytesN::to_array instead of allocating, avoiding extra memory allocation and significantly reducing CPU cost on conversions (up to ~80% on larger arrays in end-to-end benchmarks). (#1888)

What's Changed

Full Changelog: v26.1.0...v27.0.0

27.0.0-rc.1

27.0.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@mootz12 mootz12 released this 17 Jun 14:52
6656a27

What's Changed

New Features

  • CAP-71 — Auth delegation for custom accounts — Adds support for delegating a custom account's __check_auth to another address. CustomAccount::delegate_auth hands authorization to a G- or C-address that performs the actual authentication logic, and CustomAccount::get_delegated_signers returns the delegated signers supplied in the transaction's authorization payload for verification. (#1896)

Improvements

  • Zero-copy BytesN::from for [u8; N]BytesN::from now uses BytesN::to_array instead of allocating, avoiding extra memory allocation and significantly reducing CPU cost on conversions (up to ~80% on larger arrays in end-to-end benchmarks). (#1888)

All Changes

Full Changelog: v26.1.0...v27.0.0-rc.1

26.1.0

Choose a tag to compare

@mootz12 mootz12 released this 08 Jun 13:53
175aa41

What's Changed

Deprecations

  • Deprecate and ignore export for spec generation in spec shaking v2 — When experimental_spec_shaking_v2 is enabled, the export argument on contracttype, contracterror, and contractevent is ignored. A deprecation warning is emitted if used. (#1876)

Improvements

  • Fix cfg handling for contracttrait and contractimpl blocks#[contractimpl] methods with cfg attributes now correctly gate their generated args helpers and testutils registration. cfg-gated override methods in #[contractimpl(contracttrait)] blocks are also properly supported. Both cfg and cfg_attr result in compiler errors when used on #[contracttrait] default functions. (#1871)

All Changes

Full Changelog: v26.0.1...v26.1.0

26.0.1

Choose a tag to compare

@leighmcculloch leighmcculloch released this 26 May 20:04
f52b6aa

What's Changed

Improvements

  • Update docs clarifying guarantees of the Hash type (#1870)
  • Surface env!/include! deps in contractmeta! to dep-info (#1872)
  • Zero-copy improvement for U256 and I256 (#1867)

All Changes

New Contributors

Full Changelog: v26.0.0...v26.0.1

26.0.0

Choose a tag to compare

@mootz12 mootz12 released this 06 May 17:16
e1bf74b

What's Changed

Breaking Changes

  • Renamed assert_in_contract to debug_assert_in_contract — The assert_in_contract macro has been renamed to debug_assert_in_contract and hidden from public documentation, as it is intended for internal use only. The old name has been deprecated. (#1806)

  • Removed deprecated token event format from soroban-token-sdk — The deprecated TokenUtils::events() helper, the legacy event module, and the Events wrapper have been removed. These were originally deprecated in v23. (#1822)

  • Removed #[macro_export] from internal impl_bytesn_repr macro — This macro was only intended as an internal helper. Its public export has been removed. (#1829)

Deprecations

  • Deprecate BLS/BN short type aliases and disambiguate Frbls12_381::Fr is renamed to Bls12381Fr and bn254::Fr is renamed to Bn254Fr, with the original names kept as deprecated aliases. The other BLS12-381 short aliases (G1Affine, G2Affine, Fp, Fp2) and the crypto::BnScalar re-export are also deprecated. Existing code continues to compile but will emit deprecation warnings pointing to the new names. This avoids a confusing case where a contract using bn254::Fr as a contract type would silently resolve to the BLS12-381 scalar in the spec mapping. (#1714)

New Features

  • CAP-73 — Stellar Asset Contract trust() function: Enables the Stellar Asset Contract to create trustlines for classic G-accounts. The new trust() function creates an unlimited trustline for a specified address, requiring the recipient's authorization via require_auth. (#1814)

  • CAP-78 — Limited TTL extensions on contract data: Introduces new TTL extension methods that allow developers to set explicit maximum limits on TTL extensions for persistent and instance storage entries. (#1807)

  • CAP-79 — Muxed address strkey conversion: Adds host functions for converting between Stellar strkey format strings and muxed address objects (strkey_to_muxed_address and muxed_address_to_strkey). MuxedAddress now uses these for from_string and to_strkey. (#1745)

  • CAP-80 — Additional BN254 and BLS12-381 host functions: Adds new functions for BN254 MSM, BN254 modular arithmetic, and curve membership checks for BLS12-381 and BN254. (#1745)

  • CAP-82 — Checked arithmetic for 256-bit integers: Adds checked_{add, sub, mul, pow, div, rem_euclid, shl, shr} functions for 256-bit integer types. These return Option instead of trapping on overflow, allowing contracts to handle arithmetic errors gracefully. Also adds min_value and max_value helpers and == operator support for 256-bit number types. (#1801, #1823)

Improvements

  • Updated stellar-xdr and soroban-env-* crates — Updates stellar-xdr to 26.0.1 and the soroban-env-common, soroban-env-guest, and soroban-env-host crates to 26.1.3. Includes adjustments to testutils for the renamed invocation hook/event API and dependency updates that patch compiler errors introduced in a recent nightly. (#1830, #1841)

  • Return errors instead of panicking in soroban-spec-rust — All code-generation functions in soroban-spec-rust (generate_struct, generate_union, generate_enum, generate_error_enum, generate_event, generate_function, and their _with_options variants) are now fallible and return a GenerateError. Previously, the generator would panic on Wasm contracts with invalid UTF-8 bytes or non-identifier strings in spec entry names. (#1810)

  • Fix Result type generation for user-defined error enums named Error — When a contract defines its own error enum named Error and uses it in a Result<T, Error> return type, the generated client code now emits Result<T, Error> (referencing the user-defined enum) instead of Result<T, soroban_sdk::Error>. The on-the-wire spec format is unchanged, so already-deployed contracts benefit immediately the next time their Rust client is regenerated. (#1862)

  • Normalize raw identifiers (r#) in contract macros — Names, generated Rust idents, and downstream comparison/sort keys now consistently use the unraw'd form of a user's Ident across the Soroban macros. Tokens that must refer back to user fields, variants, or functions still preserve the raw Ident so the generated code remains valid Rust. (#1837)

  • Document version support policy — A new Support section in the repository README, crate README, and lib.rs describes which soroban-sdk versions receive security fixes, bug fixes, and new features. (#1855)

Feature: Experimental Spec Shaking V2

This release includes several improvements to the experimental_spec_shaking_v2 feature. It remains opt-in — users must enable the experimental_spec_shaking_v2 cargo feature to use it.

  • Cleaner failure when the build environment variable is missing — When experimental_spec_shaking_v2 is enabled and SOROBAN_SDK_BUILD_SYSTEM_SUPPORTS_SPEC_SHAKING_V2 is not set (e.g. building with cargo build directly instead of stellar-cli), the WASM build now exits with status code 1 and a clear message that the feature requires the CLI, instead of panicking. (#1846)

  • Retain panic-only error enums — A #[contracterror] enum used only via panic_with_error! or assert_with_error! (i.e. never appearing in a Result<_, E> return type) is now correctly retained in the contract spec. Previously, such enums were stripped from the WASM even though they are part of the contract's observable error interface. (#1852)

  • Keep alive subtype markers for container types via reference — Spec markers for nested types in Vec<T>, Map<K, V>, and reference types are now preserved across the linker's DCE pass without invoking them at runtime. This fixes a stack overflow that could occur with recursive type definitions. Contracts may see a small size increase (~15 bytes per occurrence; ~100 bytes total in the SDK's test contracts). (#1835)

All Changes

Full Changelog: v25.3.1...v26.0.0

26.0.0-rc.1

26.0.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@mootz12 mootz12 released this 09 Apr 15:07
c80fb1b

What's Changed

Breaking Changes

  • Spec shaking v2 enabled by default — The experimental_spec_shaking_v2 feature is now included in the default feature set, improving the specification optimization process. Users can still disable it via feature flags if needed. (#1812)

  • Renamed assert_in_contract to debug_assert_in_contract — The assert_in_contract macro has been renamed to debug_assert_in_contract and hidden from public documentation, as it is intended for internal use only. The old name has been deprecated. (#1806)

  • Removed deprecated token event format from soroban-token-sdk — The deprecated TokenUtils::events() helper, the legacy event module, and the Events wrapper have been removed. These were originally deprecated in v23. (#1822)

  • Removed #[macro_export] from internal impl_bytesn_repr macro — This macro was only intended as an internal helper. Its public export has been removed. (#1829)

New Features

  • CAP-73 — Stellar Asset Contract trust() function: Enables the Stellar Asset Contract to create trustlines for classic G-accounts. The new trust() function creates an unlimited trustline for a specified address, requiring the recipient's authorization via require_auth. (#1814)

  • CAP-78 — Limited TTL extensions on contract data: Introduces new TTL extension methods that allow developers to set explicit maximum limits on TTL extensions for persistent and instance storage entries. (#1807)

  • CAP-79 — Muxed address strkey conversion: Adds host functions for converting between Stellar strkey format strings and muxed address objects (strkey_to_muxed_address and muxed_address_to_strkey). MuxesAddress now uses these for from_string and to_strkey. (#1745)

  • CAP-80 — Additional BN254 and BLS12-381 host functions: Add new functions for BN254 MSM, BN254 modular arithmetic, and curve membership checks for BLS12-381 and BN254. (#1745)

  • CAP-82 — Checked arithmetic for 256-bit integers: Adds checked_{add, sub, mul, pow, div, rem_euclid, shl, shr} functions for 256-bit integer types. These return Option instead of trapping on overflow, allowing contracts to handle arithmetic errors gracefully. Also adds min_value and max_value helpers and == operator support for 256-bit number types. (#1801) (#1823)

Improvements

  • Spec shaking v2 gracefully falls back to v1 — When the SOROBAN_SDK_BUILD_SYSTEM_SUPPORTS_SPEC_SHAKING_V2 environment variable is not set (e.g. when building with cargo build directly instead of stellar-cli), spec shaking v2 now falls back to v1 instead of panicking. A compiler warning is emitted on Wasm targets. (#1831)

  • Updated soroban-env-* crates to v26.1.2 — Updates soroban-env-common, soroban-env-guest, and soroban-env-host to v26.1.2, including adjustments to testutils for the renamed invocation hook/event API. (#1830)

All Changes

  • Update to v26 and add support for CAP-73, 78, 79, 80 and 82 by @mootz12 in #1814
  • Enable spec shaking v2 by default by @leighmcculloch in #1812
  • clean up macro impl_bytesn_repr and remove export by @jayz22 in #1829
  • Update soroban-env-* crates to version =v26.1.2 by @mootz12 in #1830
  • Rename assert_in_contract to debug_assert_in_contract by @mootz12 in #1806
  • Remove deprecated token event format from soroban-token-sdk by @mootz12 in #1822
  • Fallback to spec shaking v1 if env var is not set by @mootz12 in #1831

Full Changelog: v25.3.1...v26.0.0-rc.1