diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5fd143aaee..e48e82ac0a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,9 +4,116 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [0.28.0] - 2022-04-11
+
+This is a fairly significant change; what follows is a description of the main changes to be aware of:
+
+### Unify how we encode and decode static and dynamic types ([#842](https://github.com/paritytech/subxt/pull/842))
+
+Prior to this, static types generated by codegen (ie subxt macro) would implement `Encode` and `Decode` from the `parity-scale-codec` library. This meant that they woule be encoded-to and decoded-from based on their shape. Dynamic types (eg the `subxt::dynamic::Value` type) would be encoded and decoded based on the node metadata instead.
+
+This change makes use of the new `scale-encode` and `scale-decode` crates to auto-implement `EncodeAsType` and `DecodeAsType` on all of our static types. These traits allow types to take the node metadata into account when working out how best to encode and decode into them. By using metadata, we can be much more flexible/robust about how to encode/decode various types (as an example, nested transactions will now be portable across runtimes). Additionally, we can merge our codepaths for static and dynamic encoding/decoding, since both static and dynamic types can implement these traits. Read [the PR description](https://github.com/paritytech/subxt/pull/842) for more info.
+
+A notable impact of this is that any types you wish to substitute when performing codegen (via the CLI tool or `#[subxt]` macro) must also implement `EncodeAsType` and `DecodeAsType` too. Substrate types, for instance, generally do not. To work around this, [#886](https://github.com/paritytech/subxt/pull/886) introduces a `Static` type and enhances the type substitution logic so that you're able to wrap any types which only implement `Encode` and `Decode` to work (note that you lose out on the improvements from `EncodeAsType` and `DecodeAsType` when you do this):
+
+```rust
+#[subxt::subxt(
+ runtime_metadata_path = "/path/to/metadata.scale",
+ substitute_type(
+ type = "sp_runtime::multiaddress::MultiAddress",
+ with = "::subxt::utils::Static<::sp_runtime::multiaddress::MultiAddress>"
+ )
+)]
+pub mod node_runtime {}
+```
+
+So, if you want to substitute in Substrate types, wrap them in `::subxt::utils::Static` in the type substitution, as above. [#886](https://github.com/paritytech/subxt/pull/886) also generally improves type substitution so that you can substitute the generic params in nested types, since it's required in the above.
+
+Several types have been renamed as a result of this unification (though they aren't commonly made explicit use of). Additionally, to obtain the bytes from a storage address, instead of doing:
+
+```rust
+let addr_bytes = storage_address.to_bytes()
+```
+
+You must now do:
+
+```rust
+let addr_bytes = cxt.client().storage().address_bytes(&storage_address).unwrap();
+```
+
+This is because the address on it's own no longer requires as much static information, and relies more heavily now on the node metadata to encode it to bytes.
+
+### Expose Signer payload ([#861](https://github.com/paritytech/subxt/pull/861))
+
+This is not a breaking change, but notable in that is adds `create_partial_signed_with_nonce` and `create_partial_signed` to the `TxClient` to allow you to break extrinsic creation into two steps:
+
+1. building a payload, and then
+2. when a signature is provided, getting back an extrinsic ready to be submitted.
+
+This allows a signer payload to be obtained from Subxt, handed off to some external application, and then once a signature has been obtained, that can be passed back to Subxt to complete the creation of an extrinsic. This opens the door to using browser wallet extensions, for instance, to sign Subxt payloads.
+
+### Stripping unneeded pallets from metadata ([#879](https://github.com/paritytech/subxt/pull/879))
+
+This is not a breaking change, but adds the ability to use the Subxt CLI tool to strip out all but some named list of pallets from a metadata bundle. Aside from allowing you to store a significantly smaller metadata bundle with only the APIs you need in it, it will also lead to faster codegen, since there's much less of it to do.
+
+Use a command like `subxt metadata --pallets Balances,System` to select specific pallets. You can provide an existing metadata file to take that and strip it, outputting a smaller bundle. Alternately it will grab the metadata from a local node and strip that before outputting.
+
+### Dispatch error changes ([#878](https://github.com/paritytech/subxt/pull/878))
+
+The `DispatchError` returned from either attempting to submit an extrinsic, or from calling `.dry_run()` has changed. It's now far more complete with respect to the information it returns in each case, and the interface has been tidied up. Changes include:
+
+- For `ModuleError`'s, instead of `err.pallet` and `err.error`, you can obtain error details using `let details = err.details()?` and then `details.pallet()` and `details.error()`.
+- `DryRunResult` is now a custom enum with 3 states, `Success`, `DispatchError` or `TransactionValidityError`. The middle of these contains much more information than previously.
+- Errors in general have been marked `#[non_exahustive]` since they could grow and change at any time. (Owing to our use of `scale-decode` internally, we are not so contrained when it comes to having precise variant indexes or anything now, and can potentially deprecate rather than remove old variants as needed).
+- On a lower level, the `rpc.dry_run()` RPC call now returns the raw dry run bytes which can then be decoded with the help of metadata into our `DryRunResult`.
+
+### Extrinsic submission changes ([#897](https://github.com/paritytech/subxt/pull/897))
+
+It was found by [@furoxr](https://github.com/furoxr) that Substrate nodes will stop sending transaction progress events under more circumstances than we originally expected. Thus, now calls like `wait_for_finalized()` and `wait_for_in_block()` will stop waiting for events when any of the following is sent from the node:
+
+- `Usurped`
+- `Finalized`
+- `FinalityTimeout`
+- `Invalid`
+- `Dropped`
+
+Previously we'd only close the subscription and stop waiting when we saw a `Finalized` or `FinalityTimeout` event. Thanks for digging into this [@furoxr](https://github.com/furoxr)!
+
+### Add `at_latest()` method ([#900](https://github.com/paritytech/subxt/pull/900) and [#904](https://github.com/paritytech/subxt/pull/904))
+
+A small breaking change; previously we had `.at(None)` or `.at(Some(block_hash))` methods in a few places to obtain things at either the latest block or some specific block hash.
+
+This API has been clarified; we now have `.at_latest()` to obtain the thing at the latest block, or `.at(block_hash)` (note; no more option) to obtain the thing at some fixed block hash. In a few instances this has allowed us to ditch the `async` from the `.at()` call.
+
+That covers the larger changes in this release. For more details, have a look at all of the notable PRs since the last release here:
+
+### Added
+
+- added at_latest ([#900](https://github.com/paritytech/subxt/pull/900) and [#904](https://github.com/paritytech/subxt/pull/904))
+- Metadata: Retain a subset of metadata pallets ([#879](https://github.com/paritytech/subxt/pull/879))
+- Expose signer payload to allow external signing ([#861](https://github.com/paritytech/subxt/pull/861))
+- Add ink! as a user of `subxt` ([#837](https://github.com/paritytech/subxt/pull/837))
+- codegen: Add codegen error ([#841](https://github.com/paritytech/subxt/pull/841))
+- codegen: allow documentation to be opted out of ([#843](https://github.com/paritytech/subxt/pull/843))
+- re-export `sp_core` and `sp_runtime` ([#853](https://github.com/paritytech/subxt/pull/853))
+- Allow generating only runtime types in subxt macro ([#845](https://github.com/paritytech/subxt/pull/845))
+- Add 'Static' type and improve type substitution codegen to accept it ([#886](https://github.com/paritytech/subxt/pull/886))
+
+### Changed
+
+- Improve Dispatch Errors ([#878](https://github.com/paritytech/subxt/pull/878))
+- Use scale-encode and scale-decode to encode and decode based on metadata ([#842](https://github.com/paritytech/subxt/pull/842))
+- For smoldot: support deserializing block number in header from hex or number ([#863](https://github.com/paritytech/subxt/pull/863))
+- Bump Substrate dependencies to latest ([#905](https://github.com/paritytech/subxt/pull/905))
+
+### Fixed
+
+- wait_for_finalized behavior if the tx dropped, usurped or invalid ([#897](https://github.com/paritytech/subxt/pull/897))
+
+
## [0.27.1] - 2022-02-15
-## Added
+### Added
- Add `find_last` for block types ([#825](https://github.com/paritytech/subxt/pull/825))
@@ -18,15 +125,16 @@ The main breaking change is fairly small: [#804](https://github.com/paritytech/s
Note worthy PRs merged since the last release:
-## Added
+### Added
- Add find last function ([#821](https://github.com/paritytech/subxt/pull/821))
- Doc: first item is current version comment ([#817](https://github.com/paritytech/subxt/pull/817))
-## Changed
+### Changed
- Remove unneeded Config bounds and BlockNumber associated type ([#804](https://github.com/paritytech/subxt/pull/804))
+
## [0.26.0] - 2022-01-24
This release adds a number of improvements, most notably:
@@ -167,6 +275,7 @@ Some other note worthy PRs that were merged since the last release:
- Fix decoding events via `.as_root_event()` and add test ([#767](https://github.com/paritytech/subxt/pull/767))
- Retain Rust code items from `mod` decorated with `subxt` attribute ([#721](https://github.com/paritytech/subxt/pull/721))
+
## [0.25.0] - 2022-11-16
This release resolves the `parity-util-mem crate` several version guard by updating substrate related dependencies which makes
@@ -200,6 +309,7 @@ Notable PRs merged:
- expose jsonrpc-core client ([#672](https://github.com/paritytech/subxt/pull/672))
- Upgrade clap to v4 ([#678](https://github.com/paritytech/subxt/pull/678))
+
## [0.24.0] - 2022-09-22
This release has a bunch of smaller changes and fixes. The breaking changes are fairly minor and should be easy to address if encountered. Notable additions are:
@@ -234,6 +344,7 @@ Notable PRs merged:
- Fix codegen for `codec::Compact` as type parameters ([#651](https://github.com/paritytech/subxt/pull/651))
- Support latest substrate release ([#653](https://github.com/paritytech/subxt/pull/653))
+
## [0.23.0] - 2022-08-11
This is one of the most significant releases to date in Subxt, and carries with it a number of significant breaking changes, but in exchange, a number of significant improvements. The most significant PR is [#593](https://github.com/paritytech/subxt/pull/593); the fundamental change that this makes is to separate creating a query/transaction/address from submitting it. This gives us flexibility when creating queries; they can be either dynamically or statically generated, but also flexibility in our client, enabling methods to be exposed for online or offline use.
@@ -441,6 +552,7 @@ For more details about all of the changes, the full commit history since the las
- Bump Swatinem/rust-cache from 1.4.0 to 2.0.0 ([#597](https://github.com/paritytech/subxt/pull/597))
- Update jsonrpsee requirement from 0.14.0 to 0.15.1 ([#603](https://github.com/paritytech/subxt/pull/603))
+
## [0.22.0] - 2022-06-20
With this release, subxt can subscribe to the node's runtime upgrades to ensure that the metadata is updated and
@@ -479,6 +591,7 @@ bytes instead of the JSON format.
- Replace `log` with `tracing` and record extrinsic info ([#535](https://github.com/paritytech/subxt/pull/535))
- Bump jsonrpsee ([#528](https://github.com/paritytech/subxt/pull/528))
+
## [0.21.0] - 2022-05-02
This release adds static metadata validation, via comparing the statically generated API with the target node's runtime
@@ -515,6 +628,7 @@ The number of dependencies is reduced for individual subxt crates.
- Export `BaseExtrinsicParams` ([#516](https://github.com/paritytech/subxt/pull/516))
- bump jsonrpsee to v0.10.1 ([#504](https://github.com/paritytech/subxt/pull/504))
+
## [0.20.0] - 2022-04-06
The most significant change in this release is how we create and sign extrinsics, and how we manage the
@@ -550,6 +664,7 @@ is to make it easier to customise this for your own chains, and provide a simple
- Add `dev_getBlockStats` RPC ([#489](https://github.com/paritytech/subxt/pull/489))
- scripts: Hardcode github subxt pull link for changelog consistency ([#482](https://github.com/paritytech/subxt/pull/482))
+
## [0.19.0] - 2022-03-21
### Changed
@@ -560,12 +675,14 @@ is to make it easier to customise this for your own chains, and provide a simple
- README updates ([#472](https://github.com/paritytech/subxt/pull/472))
- Make EventSubscription and FilterEvents Send-able ([#471](https://github.com/paritytech/subxt/pull/471))
+
## [0.18.1] - 2022-03-04
# Fixed
- Remove unused `sp_version` dependency to fix duplicate `parity-scale-codec` deps ([#466](https://github.com/paritytech/subxt/pull/466))
+
## [0.18.0] - 2022-03-02
### Added
@@ -589,6 +706,7 @@ is to make it easier to customise this for your own chains, and provide a simple
- Fix conversion of `Call` struct names to UpperCamelCase ([#441](https://github.com/paritytech/subxt/pull/441))
- Update release documentation with dry-run ([#435](https://github.com/paritytech/subxt/pull/435))
+
## [0.17.0] - 2022-02-04
### Added
@@ -605,6 +723,7 @@ is to make it easier to customise this for your own chains, and provide a simple
- Move Subxt crate into a subfolder ([#424](https://github.com/paritytech/subxt/pull/424))
- Add release checklist ([#418](https://github.com/paritytech/subxt/pull/418))
+
## [0.16.0] - 2022-02-01
*Note*: This is a significant release which introduces support for V14 metadata and macro based codegen, as well as making many breaking changes to the API.
@@ -674,6 +793,7 @@ is to make it easier to customise this for your own chains, and provide a simple
- update jsonrpsee ([#251](https://github.com/paritytech/subxt/pull/251))
- return none if subscription returns early ([#250](https://github.com/paritytech/subxt/pull/250))
+
## [0.15.0] - 2021-03-15
### Added
@@ -691,6 +811,7 @@ is to make it easier to customise this for your own chains, and provide a simple
- Add hooks to register event types for decoding - [#227](https://github.com/paritytech/subxt/pull/227)
- Substrate 3.0 - [#232](https://github.com/paritytech/subxt/pull/232)
+
## [0.14.0] - 2021-02-05
- Refactor event type decoding and declaration [#221](https://github.com/paritytech/subxt/pull/221)
@@ -705,6 +826,7 @@ is to make it easier to customise this for your own chains, and provide a simple
- propagate 'RuntimeError's to 'decode_raw_bytes' caller [#189](https://github.com/paritytech/subxt/pull/189)
- Derive `Clone` for `PairSigner` [#184](https://github.com/paritytech/subxt/pull/184)
+
## [0.13.0]
- Make the contract call extrinsic work [#165](https://github.com/paritytech/subxt/pull/165)
@@ -719,6 +841,7 @@ is to make it easier to customise this for your own chains, and provide a simple
- Decode option event arg [#158](https://github.com/paritytech/subxt/pull/158)
- Remove unnecessary Sync bound [#172](https://github.com/paritytech/subxt/pull/172)
+
## [0.12.0]
- Only return an error if the extrinsic failed. [#156](https://github.com/paritytech/subxt/pull/156)
@@ -729,6 +852,7 @@ is to make it easier to customise this for your own chains, and provide a simple
- Implement the `concat` in `twox_64_concat` [#150](https://github.com/paritytech/subxt/pull/150)
- Storage map iter [#148](https://github.com/paritytech/subxt/pull/148)
+
## [0.11.0]
- Fix build error, wabt 0.9.2 is yanked [#146](https://github.com/paritytech/subxt/pull/146)
@@ -739,15 +863,18 @@ is to make it easier to customise this for your own chains, and provide a simple
- Document the #[module] macro [#135](https://github.com/paritytech/subxt/pull/135)
- Support authors api. [#134](https://github.com/paritytech/subxt/pull/134)
+
## [0.10.1] - 2020-06-19
- Release client v0.2.0 [#133](https://github.com/paritytech/subxt/pull/133)
+
## [0.10.0] - 2020-06-19
- Upgrade to substrate rc4 release [#131](https://github.com/paritytech/subxt/pull/131)
- Support unsigned extrinsics. [#130](https://github.com/paritytech/subxt/pull/130)
+
## [0.9.0] - 2020-06-25
- Events sub [#126](https://github.com/paritytech/subxt/pull/126)
@@ -757,12 +884,14 @@ is to make it easier to customise this for your own chains, and provide a simple
- Fix optional store items. [#120](https://github.com/paritytech/subxt/pull/120)
- Make signing fallable and asynchronous [#119](https://github.com/paritytech/subxt/pull/119)
+
## [0.8.0] - 2020-05-26
- Update to Substrate release candidate [#116](https://github.com/paritytech/subxt/pull/116)
- Update to alpha.8 [#114](https://github.com/paritytech/subxt/pull/114)
- Refactors the api [#113](https://github.com/paritytech/subxt/pull/113)
+
## [0.7.0] - 2020-05-13
- Split subxt [#102](https://github.com/paritytech/subxt/pull/102)
@@ -771,6 +900,7 @@ is to make it easier to customise this for your own chains, and provide a simple
- Double map and plain storage support, introduce macros [#93](https://github.com/paritytech/subxt/pull/93)
- Raw payload return SignedPayload struct [#92](https://github.com/paritytech/subxt/pull/92)
+
## [0.6.0] - 2020-04-15
- Raw extrinsic payloads in Client [#83](https://github.com/paritytech/subxt/pull/83)
@@ -778,6 +908,7 @@ is to make it easier to customise this for your own chains, and provide a simple
- Wrap and export BlockNumber [#87](https://github.com/paritytech/subxt/pull/87)
- All substrate dependencies upgraded to `alpha.6`
+
## [0.5.0] - 2020-03-25
- First release
diff --git a/Cargo.lock b/Cargo.lock
index 49e9fb8996..970c2c424c 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1612,7 +1612,7 @@ dependencies = [
[[package]]
name = "integration-tests"
-version = "0.27.1"
+version = "0.28.0"
dependencies = [
"assert_matches",
"frame-metadata",
@@ -3488,7 +3488,7 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
[[package]]
name = "subxt"
-version = "0.27.1"
+version = "0.28.0"
dependencies = [
"base58",
"bitvec",
@@ -3525,7 +3525,7 @@ dependencies = [
[[package]]
name = "subxt-cli"
-version = "0.27.1"
+version = "0.28.0"
dependencies = [
"clap 4.2.1",
"color-eyre",
@@ -3543,7 +3543,7 @@ dependencies = [
[[package]]
name = "subxt-codegen"
-version = "0.27.1"
+version = "0.28.0"
dependencies = [
"bitvec",
"darling",
@@ -3564,7 +3564,7 @@ dependencies = [
[[package]]
name = "subxt-examples"
-version = "0.27.1"
+version = "0.28.0"
dependencies = [
"futures",
"hex",
@@ -3579,7 +3579,7 @@ dependencies = [
[[package]]
name = "subxt-macro"
-version = "0.27.1"
+version = "0.28.0"
dependencies = [
"darling",
"proc-macro-error",
@@ -3589,7 +3589,7 @@ dependencies = [
[[package]]
name = "subxt-metadata"
-version = "0.27.1"
+version = "0.28.0"
dependencies = [
"bitvec",
"criterion",
@@ -3644,7 +3644,7 @@ dependencies = [
[[package]]
name = "test-runtime"
-version = "0.27.1"
+version = "0.28.0"
dependencies = [
"jsonrpsee",
"parity-scale-codec",
@@ -3974,7 +3974,7 @@ checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
[[package]]
name = "ui-tests"
-version = "0.27.1"
+version = "0.28.0"
dependencies = [
"frame-metadata",
"parity-scale-codec",
diff --git a/cli/Cargo.toml b/cli/Cargo.toml
index 0c0537a52c..8198dcf4e9 100644
--- a/cli/Cargo.toml
+++ b/cli/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "subxt-cli"
-version = "0.27.1"
+version = "0.28.0"
authors.workspace = true
edition.workspace = true
rust-version.workspace = true
@@ -18,9 +18,9 @@ path = "src/main.rs"
[dependencies]
# perform subxt codegen
-subxt-codegen = { version = "0.27.1", path = "../codegen" }
+subxt-codegen = { version = "0.28.0", path = "../codegen" }
# perform node compatibility
-subxt-metadata = { version = "0.27.1", path = "../metadata" }
+subxt-metadata = { version = "0.28.0", path = "../metadata" }
# parse command line args
clap = { version = "4.1.11", features = ["derive", "cargo"] }
# colourful error reports
diff --git a/codegen/Cargo.toml b/codegen/Cargo.toml
index 3d2940fdf8..8f65e8197d 100644
--- a/codegen/Cargo.toml
+++ b/codegen/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "subxt-codegen"
-version = "0.27.1"
+version = "0.28.0"
authors.workspace = true
edition.workspace = true
rust-version.workspace = true
@@ -21,7 +21,7 @@ proc-macro2 = "1.0.55"
quote = "1.0.8"
syn = "1.0.109"
scale-info = "2.5.0"
-subxt-metadata = { version = "0.27.1", path = "../metadata" }
+subxt-metadata = { version = "0.28.0", path = "../metadata" }
jsonrpsee = { version = "0.16.0", features = ["async-client", "client-ws-transport", "http-client"] }
hex = "0.4.3"
tokio = { version = "1.27", features = ["macros", "rt-multi-thread"] }
diff --git a/examples/Cargo.toml b/examples/Cargo.toml
index be6e756901..66491ba71f 100644
--- a/examples/Cargo.toml
+++ b/examples/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "subxt-examples"
-version = "0.27.1"
+version = "0.28.0"
authors.workspace = true
edition.workspace = true
rust-version.workspace = true
diff --git a/macro/Cargo.toml b/macro/Cargo.toml
index cabbc12c47..6a3c8c3e54 100644
--- a/macro/Cargo.toml
+++ b/macro/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "subxt-macro"
-version = "0.27.1"
+version = "0.28.0"
authors.workspace = true
edition.workspace = true
rust-version.workspace = true
@@ -21,4 +21,4 @@ darling = "0.14.4"
proc-macro-error = "1.0.4"
syn = "1.0.109"
-subxt-codegen = { path = "../codegen", version = "0.27.1" }
+subxt-codegen = { path = "../codegen", version = "0.28.0" }
diff --git a/metadata/Cargo.toml b/metadata/Cargo.toml
index e64b927f45..396f28b96c 100644
--- a/metadata/Cargo.toml
+++ b/metadata/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "subxt-metadata"
-version = "0.27.1"
+version = "0.28.0"
authors.workspace = true
edition.workspace = true
rust-version.workspace = true
diff --git a/subxt/Cargo.toml b/subxt/Cargo.toml
index 665c07b5eb..561c2d711f 100644
--- a/subxt/Cargo.toml
+++ b/subxt/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "subxt"
-version = "0.27.1"
+version = "0.28.0"
authors.workspace = true
edition.workspace = true
rust-version.workspace = true
@@ -53,8 +53,8 @@ frame-metadata = "15.0.0"
derivative = "2.2.0"
either = "1.8.1"
-subxt-macro = { version = "0.27.1", path = "../macro" }
-subxt-metadata = { version = "0.27.1", path = "../metadata" }
+subxt-macro = { version = "0.28.0", path = "../macro" }
+subxt-metadata = { version = "0.28.0", path = "../metadata" }
# Provides some deserialization, types like U256/H256 and hashing impls like twox/blake256:
impl-serde = { version = "0.4.0" }
diff --git a/testing/integration-tests/Cargo.toml b/testing/integration-tests/Cargo.toml
index 6e76b57b80..57a1a58fdb 100644
--- a/testing/integration-tests/Cargo.toml
+++ b/testing/integration-tests/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "integration-tests"
-version = "0.27.1"
+version = "0.28.0"
authors.workspace = true
edition.workspace = true
rust-version.workspace = true
@@ -27,8 +27,8 @@ sp-core = { version = "20.0.0", default-features = false }
sp-runtime = "23.0.0"
sp-keyring = "23.0.0"
syn = "1.0.109"
-subxt = { version = "0.27.1", path = "../../subxt" }
-subxt-codegen = { version = "0.27.1", path = "../../codegen" }
+subxt = { version = "0.28.0", path = "../../subxt" }
+subxt-codegen = { version = "0.28.0", path = "../../codegen" }
test-runtime = { path = "../test-runtime" }
tokio = { version = "1.27", features = ["macros", "time"] }
tracing = "0.1.34"
diff --git a/testing/test-runtime/Cargo.toml b/testing/test-runtime/Cargo.toml
index a07027a1fc..e78c5e1cc2 100644
--- a/testing/test-runtime/Cargo.toml
+++ b/testing/test-runtime/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "test-runtime"
-version = "0.27.1"
+version = "0.28.0"
edition = "2021"
publish = false
diff --git a/testing/ui-tests/Cargo.toml b/testing/ui-tests/Cargo.toml
index 21ca7e3cff..da76100381 100644
--- a/testing/ui-tests/Cargo.toml
+++ b/testing/ui-tests/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "ui-tests"
-version = "0.27.1"
+version = "0.28.0"
edition = "2021"
publish = false