Skip to content

Releases: paritytech/polkadot-sdk

Polkadot stable2506-7

08 Jan 17:05
d173a5f

Choose a tag to compare

This release contains the changes from polkadot-stable2512 to polkadot-stable2506-7-rc1.

ℹ️ Please note:

⚠️ This is a patch release for the stable version: stable2506 and contains only patches and fixes to the crates (list
below). No binary or docker images will be provided for this release.

The tag corresponding to the current patch release polkadot-stable2506-7 and matching the old pattern will be
available under polkadot-v1.19.7.
The following crates were updated to the corresponding versions:

Changelog

Changelog for Runtime Dev

ℹ️ These changes are relevant to: All of those who rely on the runtime. A parachain team that is using a pallet. A DApp that is using a pallet. These are people who care about the protocol (WASM, not the meta-protocol (client).)

[#10592]: fix: ensure metadata v15 is generated by frame-metadata

This is a companion PR to paritytech/frame-metadata#110.
This PR ensures that CheckMetadataHash generated with both v15 and v16 are the same.

Rust compiler versions

This release was built and tested against the following versions of rustc.
Other versions may work.

  • Rust Stable: 1.84.1

Polkadot stable2512

22 Dec 12:30
1b9a876

Choose a tag to compare

This release contains the changes from polkadot-stable2509 to polkadot-stable2512.

ℹ️ Please note:

The node version for this release is: v1.21.0
The tag corresponding to the current release polkadot-stable2512 and matching the old pattern will be available under polkadot-v1.21.0.

Changelog

Changelog for Node Dev

ℹ️ These changes are relevant to: Those who build around the client side code. Alternative client builders, SMOLDOT, those who consume RPCs. These are people who are oblivious to the runtime changes. They only care about the meta-protocol, not the protocol itself.

[#9003]: fatxpool: add labels for mempool revalidation invalid txs counting

This PR considers errors propagated from mempool revalidation in the context of fork-aware transaction pool and groups them under unique labels to count them under mempool_revalidation_invalid_txs prometheus metric. This results in a breakdown of the type of root causes for why a transaction is considered invalid, helping with debugging.

[#10175]: revive-eth-rpc: fix blocks pruning

Fixes the blocks pruning for the revive eth rpc in case of forks or chain reversions.

[#9811]: Elastic scaling runtime upgrade tests

Add runtime upgrade tests for sync and async backing chains

[#9844]: prospective-parachains: add more logs

Log all candidate processing errors (especially FragmentValidityError) to observe how many
are dropped and why.

[#10305]: Cumulus: fix pre-connect to backers for single collator parachains

When running a single collator (most commonly on testnets), the block builder task is always able to claim a slot, so we're never triggering the pre-connect mechanism which happens for slots owned by other authors.

[#9927]: Log: log candidate_hash nor the pov_hash when collations expire

When collations expire we do not log the candidate_hash nor the pov_hash, making it hard to map the logged entries about Candidate generated and Candidate expired together.

This PR adds pov_hash and candidate_hash to the CollationStats struct and use these fields when we log "Collation expired".

[#10590]: sc-client-db: Make jemalloc optional

This changes sc-client-db to not always enable jemalloc by default for rocksdb. Instead it is now controlled by jemalloc-allocator feature. This is now also forwarded up to polkadot via polkadot-cli and sc-service. There we ultimately decide if jemalloc should be enabled or not.

[#10129]: Add upload evm code function

EVM Runtime Code Upload for Foundry Integrationю
This feature enables direct upload of EVM runtime bytecode (deployed contract code without constructor) to the pallet-revive, supporting Foundry's code migration functionality between REVM and pallet-revive execution environments.

[#10446]: collator-protocol: pre-connect fix

Keep the connections to backers open until the relay parent of the advertised collation expires.

[#9662]: Removes deprecated collator-related code in cumulus

Removes deprecated collator-related code in cumulus.

[#10416]: Added CID filtering to Bitswap server

This PR adds CID (Content Identifier) validation and filtering to the Bitswap server
implementation. The server now validates incoming CID requests before processing them.

[#9869]: Removes legacy consensus code that was no longer used.

Removes the ParachainConsensus trait and legacy consensus code that was no longer used.

[#9417]: Measure backed in block count vs backable

Added a mechanism to measure the difference between the number of candidates backed on chain versus offchain from the perspective of the node.

[#9904]: FinalityNotification: Directly include stale blocks

The finality notification was already carrying the information about the stale heads. However, most users of the stale heads were expanding these stale heads to all the stale blocks. So, we were iterating the same forks multiple times in the node for each finality notification. Also in a possible future where we start actually pruning headers as well, expanding these forks would fail.

So, this pull request is changing the finality notification to directly carry the stale blocks (which were calculated any way already).

[#9884]: Add criterion benches for statement-store

Description

Adds micro benches simulating concurrent work with the statement-store.

Integration

This PR does not not affect downstream projects.

[#10242]: Upgrade kvdb-rocksdb

This includes a fix for when we are writing a lot of state, e.g. after a warp sync. In this case the rocksdb will compact its own db to improve read speed.

[#10194]: Fix executor parameters classification

Executor parameters may be hashed in two ways: a full hash that changes if any parameter changes, and a prep_hash, which changes only if the parameter change will affect the prepared artifact (thus requiring artifact recompilation).
This PR aims to fix a bug in the initial classification and to add a test that should prevent those bugs from happening in the future.

[#10541]: test-utils/fix: Parachains test-utils relay parent descendants mock data

This PR ensures that the parachains test-utils crate has 2 relay parent descendants for testing purposes.

Effectively fixes a panic because we missed this mock data for chains that started with RP_offset > 0:

 Unable to verify provided relay parent descendants. expected_rp_descendants_num: 1 error: InvalidNumberOfDescendants { expected: 2, received: 0 }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Detected in:

Unblocks:

Inspired by a similar fix I've introduced in:

[#9821]: wasmtime: support for perfmap added

This PR add support for perfmap in wasmtime executor.

For more technical details refer to this doc.

Instruction on how to configure profiling on substrate nodes (tested with cumulus benchmarks) is here.

The following environment variable needs to be set when executing the node binary:

export WASMTIME_PROFILING_STRATEGY=perfmap

[#9774]: Fix executor param fetching session index

Fix executor environment parameters fetching inconsistency

[#9443]: move released primitives and APIs out of staging

Solves #9400

No logic change, only moves types from polkadot/primitives/src/vstaging into polkadot/primitives/src/v9 (renamed from v8 to v9).

[#9685]: Upgrade litep2p to v0.12.0

litep2p v0.12.0 adds ability to track whether publishing a DHT record or provider was successful. This PR brings this functionality to substrate. Particularly, this fixes authority-discovery unnecessarily republishing DHT records due to litep2p not emitting KademliaEvent::PutRecordSuccess before v0.12.0.

[#10525]: fix(rpc-spec-v2): best block not announced immediately after initialised

Description

Fixes polkadot-api/polkadot-api#1244

The current chainHead_v1 implementation is not spec-compliant, as it states:

  • Generates an initialized notification
  • Generates one newBlock notification for each non-finalized block
  • Then a bestBlockChanged notification
  • When a new block arrives, generates a newBlock notification
  • When the node finalizes a block, generates a finalized notification

And the current implemention only emits the bestBlockChanged notification after initialized iif the best block is different from the finalized block.

PAPI recently is using this part of the spec as an assumption. Most chains are unaffected, but those that produce blocks on-demand (e.g. manual-seal) then have polkadot-api hanging until there's a higher block different than the finalized one.

Integration

This PR doesn't change any of the APIs of the node. Upgrade should be automatic.

Review Notes

This PR removes that condition so that the bestBlockChanged notification is always emited. All tests are updated to this new behaviour

[#9418]: frame/revive: ETH block storage

This PR constructs the Ethereum block in the following way:

  • events (logs) are captured via an environmental! variable to reduce reliance on pallet storage
    • A maximum of 512 events is allowed per transaction, with the size of an event capped to self.ext.max_value_size()
  • A memory-efficient intermediate block builder is deserialized and serialized back to the pallet storage
    • The intermediate block builder builds the transaction and event root hashes using low level RLP encoding primitives to achieve around 90% pallet storage optimization
    • For more details, see #9764
  • A fixup is included for 7702 transaction rlp serialization/deserialization is added to ensure we can build the Ethereum block hash from live Ethereum blocks.
  • The maximum CALL_PARAMS_MAX_SIZE is increased to 512 to 244 to accommodate the transaction added to the Eth call

This PR also includes benchmarking:

Testing Done

  • pallet storage testing and capturing of events / transactions are added at tests/block_hash.rs
  • incremental block storage is tested in evm/block_hash.rs, which ensures RLP encoding / hash builder and identic...
Read more

Polkadot stable2509-3

17 Dec 09:18
8e5ee34

Choose a tag to compare

This release contains the changes from polkadot-stable2509-2 to polkadot-stable2509-3.

ℹ️ Please note:

This is a patch release for the latest stable version: stable2509. If your nodes are already running on this stable release,
you should upgrade to this patch version to get the latest fixes.

The tag corresponding to the current patch release polkadot-stable2509-3 and matching the old pattern will be
available under polkadot-v1.20.3.
The following crates were updated to the corresponding versions:

Changelog

Changelog for Node Dev

ℹ️ These changes are relevant to: Those who build around the client side code. Alternative client builders, SMOLDOT, those who consume RPCs. These are people who are oblivious to the runtime changes. They only care about the meta-protocol, not the protocol itself.

[#10525]: fix(rpc-spec-v2): best block not announced immediately after initialised

Description

Fixes polkadot-api/polkadot-api#1244

The current chainHead_v1 implementation is not spec-compliant, as it states:

  • Generates an initialized notification
  • Generates one newBlock notification for each non-finalized block
  • Then a bestBlockChanged notification
  • When a new block arrives, generates a newBlock notification
  • When the node finalizes a block, generates a finalized notification

And the current implementation only emits the bestBlockChanged notification after initialized if the best block is different from the finalized block.

PAPI recently is using this part of the spec as an assumption. Most chains are unaffected, but those that produce blocks on-demand (e.g. manual-seal) then have polkadot-api hanging until there's a higher block different than the finalized one.

Integration

This PR doesn't change any of the APIs of the node. Upgrade should be automatic.

Review Notes

This PR removes that condition so that the bestBlockChanged notification is always emitted. All tests are updated to this new behavior

[#10154]: aura/slot_based: Reduce authoring duration of the last produced block

This PR adjusts the block authoring to stop producing blocks 1 second before the scheduled slot change.
This introduces a safety buffer to prevent blocks from being authored too late wrt when next author is expected to produce a block.

  • 2s blocks / 3 cores: The authoring duration of the last block is reduced from 2s to 1s.
  • 500ms blocks / 12 cores: The authoring duration cannot be reduced past 500ms, therefore the last two blocks are no longer authored

[#10479]: cargo: Update yamux to 0.13.8 to avoid panics

This PR updates rust-yamux to 0.13.8 from 0.13.6:

This aims at not polling sockets past the point they return errors, effectively avoids panics when tungstenite websocket connections are used in combination with rust-yamux.

The fix was backported on 2512 but not on 2509

[#10541]: test-utils/fix: Parachains test-utils relay parent descendants mock data

This PR ensures that the parachains test-utils crate has 2 relay parent descendants for testing purposes.

Effectively fixes a panic because we missed this mock data for chains that started with RP_offset > 0:

 Unable to verify provided relay parent descendants. expected_rp_descendants_num: 1 error: InvalidNumberOfDescendants { expected: 2, received: 0 }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Detected in:

Unblocks:

Inspired by a similar fix I've introduced in:

[#10362]: net/peerset: Optimize substream opening duration for SetReservedPeers

While triaging the Versi-net, I've discovered that the connection between collators and validators sometimes takes less than 20ms, while at other times it takes more than 500ms.

In both cases, the validators are already connected to a different protocol. Therefore, opening and negotiating substreams must be almost instant.

The slot timer of the peerset artificially introduces the delay:

  • The SetReservedPeers is received by the peerset. At this step, the peerset propagated the closedSubstream to signal that it wants to disconnect previously reserved peers.
  • At the next slot allocation timer tick (after 1s), the newly added reserved peers are requested to be connected

This can introduce an artificial delay of up to 1s, which is unnecessary.

To mitigate this behavior, this PR:

  • Transforms the enum PeersetNotificationCommand into a structure. Effectively, the peerset can specify directly to close some substreams and open other substreams
  • Upon receiving the SetReservedPeers command, peers are moved into the Opening state and the request is propagated to the litep2p to open substreams.
  • The behavior of the slot allocation timer remains identical. This is needed to capture the following edge cases:
    • The reserved peer of the SetReservedPeers is not disconnected, but backoff / pending closing.
    • The reserved peer is banned

cc @paritytech/networking

Detected during versi-net triaging of elastic scaling: #10310 (comment)

Changelog for Runtime Dev

ℹ️ These changes are relevant to: All of those who rely on the runtime. A parachain team that is using a pallet. A DApp that is using a pallet. These are people who care about the protocol (WASM, not the meta-protocol (client).)

[#10311]: [Staking] Async Elections Post AHM

Staking elections can be configured so they run as soon as the era starts, but their results are buffered and only sent to RC after the end of session n - 2 and before start of session n - 1, assuming the new validator set must activate at end of session n.

This helps us avoid difficulty of timing the election precisely as elections are long running and can sometimes take longer than usual.

See documentation for pallet_staking_async::Config::PlanningEraOffset and pallet_staking_async_rc_client::Config::ValidatorSetExportSession to learn more.

Rust compiler versions

This release was built and tested against the following versions of rustc.
Other versions may work.

  • Rust Stable: 1.88.0

Docker images

The docker images for the polkadot node binary and the polkadot-parachain binary can be found at Docker hub (will be available a few minutes after the release has been published):

You may also pull it with:

docker pull parity/polkadot:stable2509-3

or

docker pull parity/polkadot-parachain:stable2509-3

Polkadot stable2512-rc2

12 Dec 14:05
polkadot-stable2512-rc2
760719f

Choose a tag to compare

Pre-release

This release contains the changes from polkadot-stable2509-2 to polkadot-stable2512-rc2.

⚠️ Warning: Pre-release Version

The currently published version is a pre-release and is not yet a final stable version. This release is provided for testing purposes only, and there is no guarantee that everything will work as expected. Errors and unusual behaviours of some features are to be expected.

Please use this version at your own risk and report any issues you encounter. We recommend waiting for the official release if you need a stable version.

Changelog

Changelog for Node Dev

ℹ️ These changes are relevant to: Those who build around the client side code. Alternative client builders, SMOLDOT, those who consume RPCs. These are people who are oblivious to the runtime changes. They only care about the meta-protocol, not the protocol itself.

[#10145]: Send PeerId via UMP

Resolves #7749

This PR propagates the network PeerId of the collator to the parachain inherent.
Then the parachain runtime emits a UMP signal containing the collator PeerId.

[#9774]: Fix executor param fetching session index

Fix executor environment parameters fetching inconsistency

[#10175]: revive-eth-rpc: fix blocks pruning

Fixes the blocks pruning for the revive eth rpc in case of forks or chain reversions.

[#9884]: Add criterion benches for statement-store

Description

Adds micro benches simulating concurrent work with the statement-store.

Integration

This PR does not not affect downstream projects.

[#10155]: RawIter: stop iterating on incomplete DB only with stop_on_incomplete_database

On RawIter there is an argument stop_on_incomplete_database. In contrast to what it is saying, the Iterator was always stopping on incomplete DB.

[#9443]: move released primitives and APIs out of staging

Solves #9400

No logic change, only moves types from polkadot/primitives/src/vstaging into polkadot/primitives/src/v9 (renamed from v8 to v9).

[#9178]: collator-protocol: cleanup connecting to backing group

Have collators always connect to the backing group they got assigned to and keep the connection open
until backing group changes. Also, try to connect when have something to advertise or on timeout to
have more chances of being correctly connected.

[#9691]: DB: Ensure that when we revert blocks, we actually delete all their data

Delete block data on revert and ensure the cache is also cleared.

[#9662]: Removes deprecated collator-related code in cumulus

Removes deprecated collator-related code in cumulus.

[#10304]: Reenable interest-cache for tracing-log

Reenable interest-cache for tracing-log crate.

See #8760 (comment)

[#9295]: MMR: add ancestry proof generation runtime method and RPC call

This PR adds the mmr_generateAncestryProof call to the RPC.

[#9921]: Log consistency: use para_id= like everywhere else, instead of para=

We incoherently sometimes use "para=" and sometimes "para_id=", this PR fixes that. This
makes it easier to follow the path of a parablock in logs, e.g. Loki (Grafana).

[#9869]: Removes legacy consensus code that was no longer used.

Removes the ParachainConsensus trait and legacy consensus code that was no longer used.

[#9930]: Introduce ReplayProofSizeProvider, RecordingProofProvider & transactional extensions

The ProofSizeExt extension is used to serve the proof size to the runtime. It uses the proof recorder to request the current proof size. The RecordingProofProvider extension can record the calls to the proof size function. Later the ReplayProofSizeProvider can be used to replay these recorded proof sizes. So, the proof recorder is not required anymore.

Extensions are now also hooked into the transactional system. This means they are called when a new transaction is created and informed when a transaction is committed or reverted.

[#10048]: cumulus-bootnodes: Do not require a specific hash

On the wire the hash is represented as Vec<u8> any way. So, there is no need to take this as an extra type.

[#9821]: wasmtime: support for perfmap added

This PR add support for perfmap in wasmtime executor.

For more technical details refer to this doc.

Instruction on how to configure profiling on substrate nodes (tested with cumulus benchmarks) is here.

The following environment variable needs to be set when executing the node binary:

export WASMTIME_PROFILING_STRATEGY=perfmap

[#9418]: frame/revive: ETH block storage

This PR constructs the Ethereum block in the following way:

  • events (logs) are captured via an environmental! variable to reduce reliance on pallet storage
    • A maximum of 512 events is allowed per transaction, with the size of an event capped to self.ext.max_value_size()
  • A memory-efficient intermediate block builder is deserialized and serialized back to the pallet storage
    • The intermediate block builder builds the transaction and event root hashes using low level RLP encoding primitives to achieve around 90% pallet storage optimization
    • For more details, see #9764
  • A fixup is included for 7702 transaction rlp serialization/deserialization is added to ensure we can build the Ethereum block hash from live Ethereum blocks.
  • The maximum CALL_PARAMS_MAX_SIZE is increased to 512 to 244 to accommodate the transaction added to the Eth call

This PR also includes benchmarking:

Testing Done

  • pallet storage testing and capturing of events / transactions are added at tests/block_hash.rs
  • incremental block storage is tested in evm/block_hash.rs, which ensures RLP encoding / hash builder and identical hashes from live ethereum blocks
  • tested via RPC work

Next Steps

Builds upon #9413

Part of: paritytech/contract-issues#139

[#10129]: Add upload evm code function

EVM Runtime Code Upload for Foundry Integration
This feature enables direct upload of EVM runtime bytecode (deployed contract code without constructor) to the pallet-revive, supporting Foundry's code migration functionality between REVM and pallet-revive execution environments.

[#9878]: pallet-revive: add custom addr recovery logic in ReceiptExtractor

Add ability to customize pallet-revive-eth-rpc's ReceiptExtractor ethereum address recovery logic, used when parsing through blocks' transactions.

[#9920]: [debug]: change impl of Debug of (para)Id to be just "".

The std::fmt::Debug impl (derived) of Id results in "Id(42)" instead of "42", this causes discrepancies in logs.
Sometimes we log "para_id=Id(3392)" but sometimes we log "para_id=3392" (without the "Id()").

This makes e.g. Grafana PromQL queries harder to do, and logs harder to search in general.

This PR changes the impl of Debug to be just "".

[#10147]: Upgrade arkworks 0.4.1 -> 0.5.0

Arkworks minor upgrade and some refactory.

[#9909]: pallet-revive: add interface to implement mocks and pranks

Needed for: paritytech/foundry-polkadot#334.

In foundry-polkadot we need the ability to be able to manipulate the msg.sender and the tx.origin that a solidity contract sees cheatcode documentation, plus the ability to mock calls and functions.

Currently all create/call methods use the bare_instantiate/bare_call to run things in pallet-revive, the caller then normally gets set automatically, based on what is the call stack, but for forge test we need to be able to manipulate, so that we can set it to custom values.

Additionally, for delegate_call, bare_call is used, so there is no way to specify we are dealing with a delegate call, so the call is not working correcly.

For both this paths, we need a way to inject this information into the execution environment, hence I added an optional hooks interface that we implement from foundry cheatcodes for prank and mock functionality.

[#9844]: prospective-parachains: add more logs

Log all candidate processing errors (especially FragmentValidityError) to observe how many
are dropped and why.

[#9664]: basic-authorship: Improve inherent logging

This PR aims to improve the inherent logging situation a bit. After the recent incident it was unnecessary painful to figure out what exactly happened. The logs should now be a bit more clear.

  • We get how many inherents where provided by the runtime
  • We get the names of the data items

[#10286]: Fix some 'unnecessary parentheses around type' warnings

Removes some unnecessary parentheses around types to fix compilation warnings.

[#9976]: Log: fix bug where incorrect relay_parent was used for expired collations.

Fixes a bug in logging of expried collations, the wrong relay_parent hash
was used.

Now we properly log the correct relay_parent in the "Collation expired"
message.

[#9701]: revive-rpc: use generic RpcClient

Support for a generic RPC client in the revive eth rpc proxy, instead of the previously hardcoded
ReconnectingRpcClient. This enables more flexible usage of the revive rpc as a library.

[#10305]: Cumulus: fix pre-connect to backers for single...

Read more

Polkadot stable2506-6

05 Dec 06:46
cc59097

Choose a tag to compare

This release contains the changes from polkadot-stable2506-5 to polkadot-stable2506-6.

ℹ️ Please note:

⚠️ This is a patch release for the stable version: stable2506 and contains only patches and fixes to the crates (list
below). No binary or docker images will be provided for this release.

The tag corresponding to the current patch release polkadot-stable2506-6 and matching the old pattern will be
available under polkadot-v1.19.6.

The following crates were updated to the corresponding versions:

Changelog

Changelog for Node Dev

ℹ️ These changes are relevant to: Those who build around the client side code. Alternative client builders, SMOLDOT, those who consume RPCs. These are people who are oblivious to the runtime changes. They only care about the meta-protocol, not the protocol itself.

[#10280]: Accept only one block in validate_block when upgrading a runtime

As the validation is running the entire time using the same validation code, we can not accept any other blocks after a runtime upgrade was applied.

Rust compiler versions

This release was built and tested against the following versions of rustc.
Other versions may work.

  • Rust Stable: 1.84.1

Polkadot stable2512-rc1

26 Nov 13:53
polkadot-stable2512-rc1
ec0d4a3

Choose a tag to compare

Pre-release

This release contains the changes from polkadot-stable2509 to polkadot-stable2512-rc1.

⚠️ Warning: Pre-release Version

The currently published version is a pre-release and is not yet a final stable version. This release is provided for testing purposes only, and there is no guarantee that everything will work as expected. Errors and unusual behaviours of some features are to be expected.

Please use this version at your own risk and report any issues you encounter. We recommend waiting for the official release if you need a stable version.

Changelog

Changelog for Node Dev

ℹ️ These changes are relevant to: Those who build around the client side code. Alternative client builders, SMOLDOT, those who consume RPCs. These are people who are oblivious to the runtime changes. They only care about the meta-protocol, not the protocol itself.

[#9418]: frame/revive: ETH block storage

This PR constructs the Ethereum block in the following way:

  • events (logs) are captured via an environmental! variable to reduce reliance on pallet storage
    • A maximum of 512 events is allowed per transaction, with the size of an event capped to self.ext.max_value_size()
  • A memory-efficient intermediate block builder is deserialized and serialized back to the pallet storage
    • The intermediate block builder builds the transaction and event root hashes using low level RLP encoding primitives to achieve around 90% pallet storage optimization
    • For more details, see #9764
  • A fixup is included for 7702 transaction rlp serialization/deserialization is added to ensure we can build the Ethereum block hash from live Ethereum blocks.
  • The maximum CALL_PARAMS_MAX_SIZE is increased to 512 to 244 to accommodate the transaction added to the Eth call

This PR also includes benchmarking:

Testing Done

  • pallet storage testing and capturing of events / transactions are added at tests/block_hash.rs
  • incremental block storage is tested in evm/block_hash.rs, which ensures RLP encoding / hash builder and identical hashes from live ethereum blocks
  • tested via RPC work

Next Steps

Builds upon #9413

Part of: paritytech/contract-issues#139

[#10056]: Upgrade litep2p 0.10.0 -> 0.11.0

This upgrade fixes the initialization of mDNS in the environment with no multicast addresses available and compatibility with kubo IPFS >= 0.37 when run with --ipfs-server. It also enables communication with remote peers having RSA network identity keys.

[#9990]: cumulus: Skip building on blocks on relay parents in old session

Collators building on older relay parents must skip building blocks when the chosen RP session is different than best block session.

The relay chain will not accept such candidate. We can see this happening on the Kusama Canary parachain at each session boundary.

Slot-based Aura has been modified in Cumulus to skip building blocks on relay parents in old session.

[#10048]: cumulus-bootnodes: Do not require a specific hash

On the wire the hash is represented as Vec<u8> any way. So, there is no need to take this as an extra type.

[#9443]: move released primitives and APIs out of staging

Solves #9400

No logic change, only moves types from polkadot/primitives/src/vstaging into polkadot/primitives/src/v9 (renamed from v8 to v9).

[#10145]: Send PeerId via UMP

Resolves #7749

This PR propagates the network PeerId of the collator to the parachain inherent.
Then the parachain runtime emits a UMP signal containing the collator PeerId.

[#9884]: Add criterion benches for statement-store

Description

Adds micro benches simulating concurrent work with the statement-store.

Integration

This PR does not not affect downstream projects.

[#10129]: Add upload evm code function

EVM Runtime Code Upload for Foundry Integration
This feature enables direct upload of EVM runtime bytecode (deployed contract code without constructor) to the pallet-revive, supporting Foundry's code migration functionality between REVM and pallet-revive execution environments.

[#9909]: pallet-revive: add interface to implement mocks and pranks

Needed for: paritytech/foundry-polkadot#334.

In foundry-polkadot we need the ability to be able to manipulate the msg.sender and the tx.origin that a solidity contract sees cheatcode documentation, plus the ability to mock calls and functions.

Currently all create/call methods use the bare_instantiate/bare_call to run things in pallet-revive, the caller then normally gets set automatically, based on what is the call stack, but for forge test we need to be able to manipulate, so that we can set it to custom values.

Additionally, for delegate_call, bare_call is used, so there is no way to specify we are dealing with a delegate call, so the call is not working correcly.

For both this paths, we need a way to inject this information into the execution environment, hence I added an optional hooks interface that we implement from foundry cheatcodes for prank and mock functionality.

[#10147]: Upgrade arkworks 0.4.1 -> 0.5.0

Arkworks minor upgrade and some refactory.

[#10155]: RawIter: stop iterating on incomplete DB only with stop_on_incomplete_database

On RawIter there is an argument stop_on_incomplete_database. In contrast to what it is saying, the Iterator was always stopping on incomplete DB.

[#9921]: Log consistency: use para_id= like everywhere else, instead of para=

We incoherently sometimes use "para=" and sometimes "para_id=", this PR fixes that. This
makes it easier to follow the path of a parablock in logs, e.g. Loki (Grafana).

[#9869]: Removes legacy consensus code that was no longer used.

Removes the ParachainConsensus trait and legacy consensus code that was no longer used.

[#9920]: [debug]: change impl of Debug of (para)Id to be just "".

The std::fmt::Debug impl (derived) of Id results in "Id(42)" instead of "42", this causes discrepancies in logs.
Sometimes we log "para_id=Id(3392)" but sometimes we log "para_id=3392" (without the "Id()").

This makes e.g. Grafana PromQL queries harder to do, and logs harder to search in general.

This PR changes the impl of Debug to be just "".

[#9929]: Pre-connect to backers before own slot

Implements a mechanism to pre-connect to backers, see #9767 (comment).
Improve backing group connectivity.

[#9664]: basic-authorship: Improve inherent logging

This PR aims to improve the inherent logging situation a bit. After the recent incident it was unnecessary painful to figure out what exactly happened. The logs should now be a bit more clear.

  • We get how many inherents where provided by the runtime
  • We get the names of the data items

[#9691]: DB: Ensure that when we revert blocks, we actually delete all their data

Delete block data on revert and ensure the cache is also cleared.

[#10286]: Fix some 'unnecessary parentheses around type' warnings

Removes some unnecessary parentheses around types to fix compilation warnings.

[#10242]: Upgrade kvdb-rocksdb

This includes a fix for when we are writing a lot of state, e.g. after a warp sync. In this case the rocksdb will compact its own db to improve read speed.

[#9878]: pallet-revive: add custom addr recovery logic in ReceiptExtractor

Add ability to customize pallet-revive-eth-rpc's ReceiptExtractor ethereum address recovery logic, used when parsing through blocks' transactions.

[#10162]: Make tasks local only.

In frame-system: tasks are now only valid from local source, external source is invalid.

The reason is that transaction are identified by their provided tag in the transaction pool, tasks provided tag is simply the hash of the tasks. Therefore, depending on how tasks are written, it may be possible to have a very large number of tasks that actually do the same operation but where the hash is different, thus it can be used to spam the transaction pool. A simple solution against this is to accept tasks only from local source.

Fix: #9693

[#9904]: FinalityNotification: Directly include stale blocks

The finality notification was already carrying the information about the stale heads. However, most users of the stale heads were expanding these stale heads to all the stale blocks. So, we were iterating the same forks multiple times in the node for each finality notification. Also in a possible future where we start actually pruning headers as well, expanding these forks would fail.

So, this pull request is changing the finality notification to directly carry the stale blocks (which were calculated any way already).

[#9811]: Elastic scaling runtime upgrade tests

Add runtime upgrade tests for sync and async backing chains

[#9774]: Fix executor param fetching session index

Fix executor environment parameters fetching inconsistency

[#9662]: Removes deprecated collator-related code in cumulus

Removes deprecated collator-related code in cumulus.

[#10103]: rpc-v2/archive: Remove unused structs and align with 1.90 rust

This PR removes unused structures from the RPC V2 archive.

While at it, remove unnecessary parentheses to make clippy happy.

cc @paritytech/subxt-te...

Read more

Polkadot stable2509-2

17 Nov 10:49
7304752

Choose a tag to compare

This release contains the changes from polkadot-stable2509-1 to polkadot-stable2509-2.

ℹ️ Please note:

This is a patch release for the latest stable version: stable2509. If your nodes are already running on this version, you can consider upgrading to it to have the latest fixes.

The tag corresponding to the current patch release polkadot-stable2509-2 and matching the old pattern will be available under polkadot-v1.20.2.

The node version for this release is: v1.20.2

The following crates were updated to the corresponding versions:

Announcement

Starting from this release we are publishing RPM for the Polkadot binary and installation instructions can be found here.

Changelog

Changelog for Node Dev

ℹ️ These changes are relevant to: Those who build around the client side code. Alternative client builders, SMOLDOT, those who consume RPCs. These are people who are oblivious to the runtime changes. They only care about the meta-protocol, not the protocol itself.

[#9871]: trace_block: Support overwriting execute_block

This is required for example for parachains that require special extensions to be registered (e.g. ProofSizeExt) to succeed the block execution.
The node will make a best effort to detect whether its a parachain or not.

[#10163]: Better hadling of held off collations for AHM stop-gap solution

Make logging around held off AHM collations better.

[#10280]: Accept only one block in validate_block when upgrading a runtime

As the validation is running the entire time using the same validation code, we can not accept any other blocks after a runtime upgrade was applied.

[#9965]: Limit the size of the statement for further gossiping

Limits the size of statements that are further gossiped over the network to prevent skipping oversized messages. The limit is set to match the network protocol's MAX_STATEMENT_NOTIFICATION_SIZE (1 MB), accounting for 1-byte vector length overhead because statements are sent as Vec<Statement>.

Changelog for Runtime Dev

ℹ️ These changes are relevant to: All of those who rely on the runtime. A parachain team that is using a pallet. A DApp that is using a pallet. These are people who care about the protocol (WASM, not the meta-protocol (client).)

[#9725]: bags-list: implement pending rebag

Fix the issue where registering a nominator or validator while the bags list is locked would completely ignore the account, making it unreachable for on_idle rebagging.

Changes:

  • Add PendingRebag storage to queue accounts that fail insertion during lock.
  • Modify on_idle to process pending accounts with priority before regular accounts.
  • Add cleanup logic for non-staking pending accounts.

[#10180]: frame-system: Ensure that BlockNumber is strictly increasing

Otherwise a block should fail to build/import.

[#10235]: offchain-worker: Do not intialize the entire System again

When calling offchain-worker we were initializing the entire System again with the same block we are running on top of. However, with the change to require strictly increasing block numbers the offchain-worker was failing. This is now solved by just registering the missing digests. The rest of the changes done by initialize are not important for offchain workers.

The pull request ensures that we are actually testing this behavior of the offchain worker now.

[#10248]: Fix origin check in EPMB's manage extrinsic

Fix origin check in EPMB's manage extrinsic and:

  • Break down Admin and Manager origins/extrinsics for easier configuration
  • update the corresponding weights

[#10149]: Ensure that multiple blocks in a PoV form a chain

validate_block ensures that all the blocks are connected to each other.

[#10073]: Emit event for remove proxies extrinsic

Emits event for remote proxies extrinsic

Changelog for Node Operator

ℹ️ These changes are relevant to: Those who don't write any code and only run code.

[#9581]: fix: parachain informant

The parachain informant was logging information for all parachains, not just ours. This PR fixes that by filtering the events by parachain ID.

[#10206]: Add rpm build for polkadot node

This PR adds an rpm build for the polkadot node. The rpm package was tested on Rocky Linux 10 and Alma Linux 10 distributions

Changelog for Runtime User

ℹ️ These changes are relevant to: Anyone using the runtime. This can be a token holder or a dev writing a front end for a chain.

Rust compiler versions

This release was built and tested against the following versions of rustc.
Other versions may work.

  • Rust Stable: 1.88.0

Docker images

The docker images for the polkadot node binary and the polkadot-parachain binary can be found at Docker hub (will be available a few minutes after the release has been published):

You may also pull it with:

docker pull parity/polkadot:stable2509-2

or

docker pull parity/polkadot-parachain:stable2509-2

Polkadot stable2506-5

11 Nov 08:23
e6ec303

Choose a tag to compare

This release contains the changes from polkadot-stable2506-4 to polkadot-stable2506-5.

ℹ️ Please note:

⚠️ This is a patch release for the stable version: stable2506 and contains only patches and fixes to the crates (list below).

The tag corresponding to the current patch release polkadot-stable2506-5 and matching the old pattern will be available under polkadot-v1.19.5.

The following crates were updated to the corresponding versions:

Changelog

Changelog for Node Dev

ℹ️ These changes are relevant to: Those who build around the client side code. Alternative client builders, SMOLDOT, those who consume RPCs. These are people who are oblivious to the runtime changes. They only care about the meta-protocol, not the protocol itself.

[#9871]: trace_block: Support overwriting execute_block

This is required for example for parachains that require special extensions to be registered (e.g. ProofSizeExt) to succeed the block execution.
The node will make a best effort to detect whether its a parachain or not.

[#9965]: Limit the size of the statement for further gossiping

Limits the size of statements that are further gossiped over the network to prevent skipping oversized messages. The limit is set to match the network protocol's MAX_STATEMENT_NOTIFICATION_SIZE (1 MB), accounting for 1-byte vector length overhead because statements are sent as Vec<Statement>.

[#9912]: [WIP] Fix statement-store gossiping

Fixes gossiping and scalability issues in the statement-store networking: reduces traffic by propagating only recent statements, skips duplicate processing, and splits large batches to stay under MAX_STATEMENT_NOTIFICATION_SIZE.

Changelog for Runtime Dev

ℹ️ These changes are relevant to: All of those who rely on the runtime. A parachain team that is using a pallet. A DApp that is using a pallet. These are people who care about the protocol (WASM, not the meta-protocol (client).)

[#10235]: offchain-worker: Do not intialize the entire System again

When calling offchain-worker we were initializing the entire System again with the same block we are running on top of. However, with the change to require strictly increasing block numbers the offchain-worker was failing. This is now solved by just registering the missing digests. The rest of the changes done by initialize are not important for offchain workers.

The pull request ensures that we are actually testing this behavior of the offchain worker now.

[#10180]: frame-system: Ensure that BlockNumber is strictly increasing

Otherwise a block should fail to build/import.

[#10149]: Ensure that multiple blocks in a PoV form a chain

validate_block ensures that all the blocks are connected to each other.

Rust compiler versions

This release was built and tested against the following versions of rustc.
Other versions may work.

  • Rust Stable: 1.84.1

Polkadot stable2503-11

30 Oct 15:49
6600d9c

Choose a tag to compare

This release contains the changes from polkadot-stable2503-10 to polkadot-stable2503-11.

ℹ️ Please note:

⚠️ This is a patch release for the stable version: stable2503 and contains only patches and fixes to the crates (list below). No binary or docker images will be provided for this release.

The tag corresponding to the current patch release polkadot-stable2503-11 and matching the old pattern will be available under polkadot-v1.18.11.

The following crates were updated to the corresponding versions:

Changelog

Changelog for Node Dev

ℹ️ These changes are relevant to: Those who build around the client side code. Alternative client builders, SMOLDOT, those who consume RPCs. These are people who are oblivious to the runtime changes. They only care about the meta-protocol, not the protocol itself.

[#10082]: approval-distribution: improve test coverage

Add few more test in approval-distribution to improve coverage.

Rust compiler versions

This release was built and tested against the following versions of rustc.
Other versions may work.

  • Rust Stable: 1.84.1

Polkadot stable2412-11

23 Oct 09:08
3366310

Choose a tag to compare

This release contains the changes from polkadot-stable2509-1 to polkadot-stable2412-11.

ℹ️ Please note:

⚠️ This is a patch release for the stable version: stable2412 and contains only patches and fixes to the crates (list below). No binary or docker images will be provided for this release.

The tag corresponding to the current patch release polkadot-stable2412-11 and matching the old pattern will be available under polkadot-v1.17.11.

The following crates were updated to the corresponding versions:

Changelog

Changelog for Node Dev

ℹ️ These changes are relevant to: Those who build around the client side code. Alternative client builders, SMOLDOT, those who consume RPCs. These are people who are oblivious to the runtime changes. They only care about the meta-protocol, not the protocol itself.

[#10082]: approval-distribution: improve test coverage

Add few more test in approval-distribution to improve coverage.

Rust compiler versions

This release was built and tested against the following versions of rustc.
Other versions may work.

  • Rust Stable: "1.81.0"