From 125a306b7f9dc781acd6a2e3882ea9e32fd7ad9d Mon Sep 17 00:00:00 2001
From: Jun Luo <4catcode@gmail.com>
Date: Wed, 28 Oct 2026 14:37:31 +0800
Subject: [PATCH] release: 6.0.0
---
CHANGELOG.md | 33 +++++++++----------
android_test/app/build.gradle.kts | 2 +-
build.gradle.kts | 2 +-
examples/build.gradle.kts | 2 +-
pom.xml | 2 +-
readme.md | 4 +--
skills/java-stellar-sdk/SKILL.md | 4 +--
.../java-stellar-sdk/references/quickstart.md | 2 +-
8 files changed, 24 insertions(+), 27 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d4495c403..40de1b867 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,25 +2,22 @@
## Pending
+## 6.0.0
+
+**This release adds support for Protocol 30.**
+
### Update
-- fix: `AssembledTransaction` now backs off between `getTransaction` polls while waiting for a submitted transaction. It used to poll again immediately on every `NOT_FOUND`, hammering the RPC server for the whole `submitTimeout`.
- - The first poll is made right after `sendTransaction`; each further poll waits 1s, then 1.5× longer each time, capped at 6s (about one ledger), until `submitTimeout` seconds have passed, with one final poll at the deadline.
- - A network error raised while polling is no longer swallowed and retried. It now propagates as a `NetworkException`.
- - `submitTimeout` bounds the polling loop only. Each individual request is still bounded by the `SorobanServer` HTTP timeouts.
- - This applies to `submit`, `signAndSubmit`, `restoreFootprint`, and therefore to `ContractClient.invoke` when it submits.
-- fix: always encode text as UTF-8 in `Scv.toString(String)`, `Sep10Challenge` (`web_auth_domain` / `client_domain`), `Util.paddedByteArray(String, int)`, and the `SorobanServer` request body. They used the JVM default charset, so non-ASCII text produced different bytes on JVMs where that is not UTF-8.
-- chore: upgrade generated XDR definitions to Protocol 30.
-- fix: `StrKey.decodeClaimableBalance` and `StrKey.isValidClaimableBalance` now reject a claimable balance strkey (`B...`) whose type byte is not 0, as SEP-23 requires; `CLAIMABLE_BALANCE_ID_TYPE_V0` is the only type. Such a key used to be accepted, so `new Address(...)` took it and the error only surfaced in `Address.toSCAddress`. `new Address(...)` now throws `IllegalArgumentException` up front.
-- refactor: deprecate `GetEventsResponse.EventInfo.inSuccessfulContractCall`. Stellar RPC no longer returns it from `getEvents` ([stellar-rpc#1050](https://github.com/stellar/stellar-rpc/pull/1050)), so it is `null` with newer servers. It will be removed in the next major release.
-- feat: add CAP-84 muxed contract address (`W...`) support.
- - New `StrKey.encodeMuxedContract`, `StrKey.decodeMuxedContract`, and `StrKey.isValidMuxedContract`. The raw form is the 32-byte contract ID followed by the 8-byte big-endian ID, as specified by SEP-23.
- - `Address` accepts `W...` addresses and converts `SC_ADDRESS_TYPE_MUXED_CONTRACT` to and from `SCAddress` and `SCVal`, with the new `Address.AddressType.MUXED_CONTRACT` and `Address.fromMuxedContract(byte[])`. Contract return values and events that hold a muxed contract address no longer fail to decode.
- - Map keys holding muxed contract addresses are now sorted correctly when building an `SCV_MAP`.
- - A muxed contract address is only valid where a muxed account (`M...`) is, such as the `to` parameter of the SAC `transfer`. The SDK now applies the Soroban host's rules up front instead of building transactions that fail at simulation or submission:
- - Authorization addresses must be an account (`G...`) or a contract (`C...`), as the host requires. `Auth.authorizeInvocation`, the `forAddress` of `Auth.authorizeEntry`, `Auth.DelegateSignature`, and the credentials of an entry passed to `Auth.authorizeEntry`, `Auth.buildAuthorizationEntryPreimage`, or `Auth.buildWithDelegatesEntry` reject any other address type, including muxed accounts (`M...`), which were accepted before.
- - `SorobanServer.getContractData` requires a contract address (`C...`) and rejects a `key` that contains a muxed address (`M...` or `W...`) anywhere, since the host never stores such keys.
- - `TransactionBuilder.buildRestoreAssetBalanceEntryTransaction` requires `balanceOwner` to be a contract address (`C...`). Only contracts hold SAC balances in contract data; an account's balance lives in its trustline.
-- feat: add `contractMuxed` and `contractMuxedId` to `ContractCreditedEffectResponse`. Horizon sets them when a Stellar Asset Contract `transfer` or `mint` goes to a muxed contract address (`W...`); `contract` is then its base contract address (`C...`). ([stellar-horizon#237](https://github.com/stellar/stellar-horizon/pull/237))
+- feat: support CAP-84 muxed contract addresses (`W...`). Like a muxed account (`M...`), one is only valid as a destination, such as the `to` of a SAC `transfer`. ([#827](https://github.com/lightsail-network/java-stellar-sdk/pull/827))
+ - New `StrKey.encodeMuxedContract`, `StrKey.decodeMuxedContract`, and `StrKey.isValidMuxedContract`. The raw form is the 32-byte contract ID followed by the 8-byte big-endian ID (SEP-23).
+ - `Address` parses `W...` and converts it to and from `SCAddress` and `SCVal` (`Address.AddressType.MUXED_CONTRACT`, `Address.fromMuxedContract(byte[])`), so return values and events holding one now decode. `Scv.toMap` sorts them as keys.
+- feat: add `contractMuxed` and `contractMuxedId` to `ContractCreditedEffectResponse`, set when a SAC `transfer` or `mint` goes to a `W...` address. ([#828](https://github.com/lightsail-network/java-stellar-sdk/pull/828))
+- feat: check addresses the Soroban network would reject before building anything: `Auth` signs only for `G...`/`C...` addresses, `SorobanServer.getContractData` takes a `C...` and no muxed address in the key, and `TransactionBuilder.buildRestoreAssetBalanceEntryTransaction` takes a `C...` `balanceOwner`. These now throw `IllegalArgumentException` instead of failing at simulation or submission. ([#827](https://github.com/lightsail-network/java-stellar-sdk/pull/827))
+- fix: `AssembledTransaction` waits between `getTransaction` polls (1s, then 1.5× longer each time up to 6s, until `submitTimeout`) instead of polling continuously, and a network error while polling now propagates as `NetworkException` instead of being retried. This covers `submit`, `signAndSubmit`, `restoreFootprint`, and `ContractClient.invoke`. ([#819](https://github.com/lightsail-network/java-stellar-sdk/pull/819))
+- fix: always encode text as UTF-8 instead of the JVM default charset in `Scv.toString(String)`, `Sep10Challenge`, `Util.paddedByteArray(String, int)`, and `SorobanServer` requests. ([#820](https://github.com/lightsail-network/java-stellar-sdk/pull/820))
+- fix: `StrKey.decodeClaimableBalance` and `StrKey.isValidClaimableBalance` reject a claimable balance ID whose type byte is not 0, as SEP-23 requires, so `new Address(...)` now fails up front for one. ([#826](https://github.com/lightsail-network/java-stellar-sdk/pull/826))
+- refactor: deprecate `GetEventsResponse.EventInfo.inSuccessfulContractCall`. Stellar RPC no longer returns it ([stellar-rpc#1050](https://github.com/stellar/stellar-rpc/pull/1050)), so it is `null`; it will be removed in 7.0.0. ([#825](https://github.com/lightsail-network/java-stellar-sdk/pull/825))
+- chore: upgrade generated XDR definitions to Protocol 30 (CAP-84, CAP-87, CAP-88). ([#822](https://github.com/lightsail-network/java-stellar-sdk/pull/822))
+- chore: update dependencies and build tooling (OkHttp `4.12.1`, Gson `2.15.0`, Bouncy Castle `1.86`, Commons Codec `1.23.0`, Gradle `9.8.2`, Kotlin `2.4.21`, Spotless plugin `8.10.4`, Lombok plugin `9.8.2`, NMCP plugin `1.6.2`). Bouncy Castle `1.86` fixes [CVE-2026-8763](https://github.com/advisories/GHSA-9pwp-9qqc-pr26) (critical) and [CVE-2026-13506](https://github.com/advisories/GHSA-qp49-qgx5-5m26) (high) in the `1.84` shipped with 5.0.0. ([#824](https://github.com/lightsail-network/java-stellar-sdk/pull/824))
## 5.0.0
diff --git a/android_test/app/build.gradle.kts b/android_test/app/build.gradle.kts
index d7a3cd7d8..e4ddb2823 100644
--- a/android_test/app/build.gradle.kts
+++ b/android_test/app/build.gradle.kts
@@ -68,7 +68,7 @@ dependencies {
implementation("androidx.compose.material3:material3")
// Since we are adding local jar(libs/stellar-sdk.jar) as dependency,
// gradle cannot automatically download the required third-party dependencies.
- implementation(files("libs/stellar-sdk-5.0.0.jar"))
+ implementation(files("libs/stellar-sdk-6.0.0.jar"))
implementation("com.squareup.okhttp3:okhttp:4.12.1")
implementation("com.squareup.okhttp3:okhttp-sse:4.12.1")
implementation("com.moandjiezana.toml:toml4j:0.7.2")
diff --git a/build.gradle.kts b/build.gradle.kts
index 0dc9916c8..826d5e39a 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -11,7 +11,7 @@ plugins {
}
group = "network.lightsail"
-version = "5.0.0"
+version = "6.0.0"
java {
toolchain {
diff --git a/examples/build.gradle.kts b/examples/build.gradle.kts
index 6adefd484..8f87d5478 100644
--- a/examples/build.gradle.kts
+++ b/examples/build.gradle.kts
@@ -22,7 +22,7 @@ spotless {
dependencies {
// Use https://central.sonatype.com/artifact/network.lightsail/stellar-sdk in prod.
- implementation("network.lightsail:stellar-sdk:5.0.0")
+ implementation("network.lightsail:stellar-sdk:6.0.0")
testImplementation(platform("org.junit:junit-bom:6.1.3"))
testImplementation("org.junit.jupiter:junit-jupiter")
}
diff --git a/pom.xml b/pom.xml
index 3b60bf8d1..7203fb307 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
network.lightsail
stellar-sdk
- 5.0.0
+ 6.0.0
jar
stellar-sdk
diff --git a/readme.md b/readme.md
index ffebbef3a..4ab139453 100644
--- a/readme.md
+++ b/readme.md
@@ -14,13 +14,13 @@ The Java Stellar SDK library provides APIs to build transactions and connect to
network.lightsail
stellar-sdk
- 5.0.0
+ 6.0.0
```
### Gradle
```groovy
-implementation 'network.lightsail:stellar-sdk:5.0.0'
+implementation 'network.lightsail:stellar-sdk:6.0.0'
```
You can find instructions on how to install this dependency using alternative package managers [here](https://central.sonatype.com/artifact/network.lightsail/stellar-sdk).
diff --git a/skills/java-stellar-sdk/SKILL.md b/skills/java-stellar-sdk/SKILL.md
index b12670e3b..9e4828412 100644
--- a/skills/java-stellar-sdk/SKILL.md
+++ b/skills/java-stellar-sdk/SKILL.md
@@ -22,14 +22,14 @@ Maven:
network.lightsail
stellar-sdk
- 5.0.0
+ 6.0.0
```
Gradle:
```groovy
-implementation 'network.lightsail:stellar-sdk:5.0.0'
+implementation 'network.lightsail:stellar-sdk:6.0.0'
```
## Import style
diff --git a/skills/java-stellar-sdk/references/quickstart.md b/skills/java-stellar-sdk/references/quickstart.md
index 593de66ed..d89f3101d 100644
--- a/skills/java-stellar-sdk/references/quickstart.md
+++ b/skills/java-stellar-sdk/references/quickstart.md
@@ -6,7 +6,7 @@ from the environment. See `transactions.md` for the full lifecycle.
## Install (Gradle)
```groovy
-implementation 'network.lightsail:stellar-sdk:5.0.0'
+implementation 'network.lightsail:stellar-sdk:6.0.0'
```
## Generate or load a keypair