NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #4077 most downloaded on crates.io
Decode extrinsics and storage from Substrate based chains
Last release 2 months ago
06 Aug 2026
Release timing varies
gaps range from 8 days to 5 months
Most releases are documented
notes for 28 of 35 stable releases
1 version withdrawn
withdrawn after publishing
2 years old
37 releases · first in 2024
One column per month.
Note: 0.18.0 was published to crates.io by accident and yanked; this release takes its place.
Note: 0.18.0 was published to crates.io by accident and yanked; this release takes its place.
VerifyMultiSignature), matching FRAME's transaction extension pipeline semantics.TransactionExtension::is_authorization_extension (and the corresponding TransactionExtensions method), which extensions like VerifyMultiSignature should override to return true. It defaults to false.TransactionExtension::encode_value_for_signer_payload_to and TransactionExtensions::encode_extension_value_for_signer_payload_to; extension values are now encoded identically in transactions and signer payloads, with authorization extensions excluded via is_authorization_extension instead.encode_v5_signer_payload_with_info to require the transaction extension version needed to construct a valid V5 signer payload.Fix V5 signer payloads to hash the transaction extension version and call, followed by the extension values and implicits of only the extensions after
VerifyMultiSignature), matching FRAME's transaction extension pipeline semantics.TransactionExtension::is_authorization_extension (and the corresponding TransactionExtensions method), which extensions like VerifyMultiSignature should override to return true. It defaults to false.TransactionExtension::encode_value_for_signer_payload_to and TransactionExtensions::encode_extension_value_for_signer_payload_to; extension values are now encoded identically in transactions and signer payloads, with authorization extensions excluded via is_authorization_extension instead.encode_v5_signer_payload_with_info to require the transaction extension version needed to construct a valid V5 signer payload.When encoding extrinsics, unknown Transaction Extensions that are Option will now be accepted, and encoded as 0u8 (ie the None variant) by default if
Option<SomeType> will now be accepted, and encoded as 0u8 (ie the None variant) by default if an extension with the corresponding name is not provided by the user. This allows transaction encoding to succeed in more cases, such as when a bunch of optional extensions exist for a chian, but still allows the user to properly implement and provide those extensions if they wish.Fixed: update some Kusama types to fix decode issues (#94).
Add extrinsic encode methods in frame_decode::extrinsics. This covers encoding v4 and v5 unsigned and signed extrinsics, new traits for providing tran
frame_decode::extrinsics. This covers encoding v4 and v5 unsigned and signed extrinsics, new traits for providing transaction extensions, encoding v4 and v5 signer payloads and encoding call data.Nothing published for this version
Expose the crate::ToTypeRegistry trait so that inputs to crate::type_registry_from_metadata can be named. Make it sealed so that others cannot rely on
crate::helpers::ToTypeRegistry trait so that inputs to crate::helpers::type_registry_from_metadata can be named. Make it sealed so that others cannot rely on it.Add a flag to StorageInfo which can be set in order to tell frame-decode to use the old version of V9 storage hashers when decoding storage keys. We n
StorageInfo which can be set in order to tell frame-decode to use the old version of V9 storage hashers when decoding storage keys. We need to manually toggle this flag when using metadata produced by runtimes prior to this change, which altered the storage hashers (and thus their encoding/decoding). Kusama prior to spec version 1032 is one such case when this needs to be toggled.Update to scale-info-legacy 0.4.0.
scale-info-legacy 0.4.0.AccountId32 types to be unnamed structs rather than tuple types, so that they get a path.legacy_types::from_bytes to convert provided bytes into a ChainTypeRegistry, negating the need to include serde_yaml or whatever in other crates.Add Kusama RC types capable of decoding historic blocks.
Separate the iterating over entries from the core frame-decode *Info traits; One only needs to implement *Info traits to work with frame-decode; the o
frame-decode *Info traits; One only needs to implement *Info traits to work with frame-decode; the other traits are convenience traits.Entry type generic so that it can potentially be used in more places, expose it, and expose concrete versions from each module.helpers::list_storage_entries_any: it was a bit of an anomaly to have this and not a version for any other thing. Better to keep this upstream for now.Add map_ids() functions to RuntimeApiInfo, StorageInfo and ViewFunctionInfo to make translating the TypeId parameter simpler. This adds a 'static boun
map_ids() functions to RuntimeApiInfo, StorageInfo and ViewFunctionInfo to make translating the TypeId parameter simpler.
This adds a 'static bound to StorageInfo type IDs, but it is not expected that this will break anything as this is already the case for u32 and LookupName IDs (and is required in many other places).Bump to scale-info-legacy 0.3.0.
*Info traits, and to do so in only one pallet/trait where that is applicable.Fix storage info logic in the case of one hasher and a tuple of keys.
Fix storage info logic in the case of one hasher and a tuple of keys.
This release adds encode/decode logic for Runtime APIs, Constants and Custom Values, and removes some unused bits and pieces. Additionally we merge th
This release adds encode/decode logic for Runtime APIs, Constants and Custom Values, and removes some unused bits and pieces. Additionally we merge the trait functions for getting lists of entries into the main *TypeInfo traits, and do a little renaming for consistency. See #46 for more information.
Provide information about the default value in StorageInfo, if one exists. This may be borrowed, and so adds a lifetime to the StorageInfo type (which
StorageInfo, if one exists. This may be borrowed, and so adds a lifetime to the StorageInfo type (which .into_owned() can handle if necessary).Remove the _legacy functions; just use the non suffixed versions which are identical.
_legacy functions; just use the non suffixed versions which are identical.frame_decode::storage::encode_storage_key, frame_decode::storage::encode_storage_key_to, andframe_decode::storage::encode_storage_key_with_info_to, with supporting traits.prefix to encode_prefix to align with the above.Make a couple of methods in crate::extrinsics return impl ExactSizeIterator rather than impl Iterator, enabling them to be used with scale_decode::Dec
crate::extrinsics return impl ExactSizeIterator rather than impl Iterator, enabling them to be used with scale_decode::DecodeAsFields.Make the crate::NamedArg type public, since it's in the public interface.`
crate::extrinsics::NamedArg type public, since it's in the public interface.`Expose a crate::legacy_types module which provides crate::legacy_types::relay_chain() to access the relay chain types. This is gated behind the "legac
crate::legacy_types module which provides crate::legacy_types::polkadot::relay_chain() to access the relay chain types. This is gated behind the "legacy-types" feature which is disabled by default.Support frame-metadata v23. That stabilized V16 metadata, so we implement the relevant traits for that here to support it.
frame-metadata v23. That stabilized V16 metadata, so we implement the relevant traits for that here to support it.Support frame-metadata v20-v21.
frame-metadata v20-v21.Bump frame-metadata to latest: 20.0.0
frame-metadata to latest: 20.0.0Fix a decoding error where the ranges end at 0 if an extrinsic is 0 bytes in length
Bump frame-metadata to 18.0, scale-decode to 0.16 and scale-value to 0.18 (latest versions at time of release).
Nothing published for this version
Bump scale-decode 0.14, scale-value 0.17 and scale-info v2.11.4
Split ExtrinsicTypeInfo trait to get signature and extensions info separately, and support being given an extension version in the latter.
ExtrinsicTypeInfo trait to get signature and extensions info separately, and support being given an extension version in the latter.Fix extrinsic.call_range() and extensions.range() functions, and clarify descriptions.
extrinsic.call_range() and extensions.range() functions, and clarify descriptions.extrinsic.call_args_range() to return the call data arguments.Consistify helper functions; have list_storage_entries{_any} and type_registry_from_metadata{_any}, where the any versions take a RuntimeMetadata enum
list_storage_entries{_any} and type_registry_from_metadata{_any}, where
the any versions take a RuntimeMetadata enum and the others take the specific metadata versions contained within.Initial release.
Initial release.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →