# Polkadot Release Analysis v1.14.0
:warning: ***The following report is not an exhaustive list of changes included in the release, but a set of changes that we felt deserved to be highlighted due to their impact on the Polkadot ecosystem builders.***
***Please do not stop reading the [release notes v1.14.0](https://github.com/paritytech/polkadot-sdk/releases/tag/polkadot-v1.14.0). This report is complementary to the changelogs, not a replacement.***
***Highlights are categorized into High Impact, Medium Impact, and Low Impact for ease of navigation.***
***Also there is a section related to all note worthy changes related to tooling integration.***
# Summary
In the following report, we are featuring some of the changes included in the [polkadot node release v1.14.0](https://github.com/paritytech/polkadot-sdk/releases/tag/polkadot-v1.14.0). Runtime changes that are part of this release will be included in the corresponding [runtime release](https://github.com/polkadot-fellows/runtimes/releases) done by the fellowship.
Next to every PR name you can find the code base related to these changes. The notation is as follows:
- [S]: Changes related to Substrate
- [P]: Changes related to Polkadot
- [C]: Changes related to Cumulus
- [S/P/C]: Changes related to a combination of the noted code bases.
## :hammer_and_wrench: Tooling Updates
* Sidecar - [v19.0.2](https://github.com/paritytech/substrate-api-sidecar/releases/tag/v19.0.2)
* TxWrapper - [v7.5.1](https://github.com/paritytech/txwrapper-core/releases/tag/v7.5.1)
* PolkadotJS - [v12.2.1](https://github.com/polkadot-js/api/releases/tag/v12.2.1)
* Asset Transfer Api - [v0.3.1](https://github.com/paritytech/asset-transfer-api/releases/tag/v0.3.1)
* [Refactor: parachain template](https://github.com/paritytech/polkadot-sdk/pull/4684): In this release, parachain template has been updated with the latest Polkadot-SDK changes such as construct runtime V2.
---
# ⚠️ Medium Impact
### [C,P] [XCM] Runtime api for LocationToAccount conversions
PR: https://github.com/paritytech/polkadot-sdk/pull/4857
**Why is this important?**
This PR adds a new runtime API `xcm-runtime-apis` to convert XCM `Location` to the local `AccountId` on-chain for easier verification.
**How does this impact Polkadot builders?**
This PR also merges `xcm-fee-payment-runtime-api` module into this new api. If you are using `xcm-fee-payment-runtime-api`, this would be a breaking change for you. To avoid this breaking change, please make following changes:
1. Make the similar change in the other part of `Cargo.toml`.
```diff=
- xcm-fee-payment-runtime-api = { workspace = true }
+ xcm-runtime-apis = { workspace = true }
```
2. Replace `xcm_fee_payment_runtime_api` with `xcm_runtime_apis`.
```diff=
- use xcm_fee_payment_runtime_api::*;
+ use xcm_runtime_apis::*;
```
Related Issue: [#4298](https://github.com/paritytech/polkadot-sdk/issues/4298)
### [S] [FRAME] Remove storage migration type
PR: https://github.com/paritytech/polkadot-sdk/pull/3828
**Why is this important?**
As a part of this PR, a new migration type `RemoveStorage` has been introduced, which will remove a storage item from a pallet during migration. This migration type can be used to clean the data from the removed storage items, that are not used anymore.
**How does this impact Polkadot builders?**
At the moment, there is already a migration type `RemovePallet`, to clean the storage but this will remove all storage items associated with a specific pallet. However, `RemoveStorage` will remove only a specific storage item.
During runtime upgrade, this will clean the storage from the specified storage. If `try-runtime` feature is enabled, the `pre_upgrade` and `post_upgrade` will verify the storage before and after the upgrade.
Here is an example:
```rust=
construct_runtime! {
pub enum Runtime
{
System: frame_system = 0,
TemplatePallet: pallet_template = 1,
}
};
parameter_types! {
pub const TemplatePallet: &'static str = "TemplatePallet";
pub const StorageSomething: &'static str = "Something";
pub const StorageSomethingCount: &'static str = "SomethingCount";
}
pub type Migrations = (
RemoveStorage<TemplatePallet, StorageSomething, RocksDbWeight>,
RemoveStorage<TemplatePallet, StorageSomethingCount, RocksDbWeight>,
);
pub type Executive = frame_executive::Executive<
Runtime,
Block,
frame_system::ChainContext<Runtime>,
Runtime,
Migrations
>;
```
Related Issue: [#3820](https://github.com/paritytech/polkadot-sdk/pull/3820)
### [S] Use real rust type for pallet alias in runtime macro
PR: https://github.com/paritytech/polkadot-sdk/pull/4769
**Why is this important?**
As a part of [#1378](https://github.com/paritytech/polkadot-sdk/pull/1378), `Construct Runtime v2` was introduced, which provides outer-macro approach for defining `construct_runtime`. But the pallet assignment type was not a valid Rust syntax. This PR fixes this issue and allows to use of a real rust type for pallet aliases.
**How does this impact Polkadot builders?**
This PR doesn't contain any breaking changes because it will continue supporting the current syntax. However, if you want to use real rust type for pallet alias in runtime macro, please make following changes in your runtime:
```diff
- pub type System = frame_system;
+ pub type System = frame_system::Pallet<Runtime>;
```
Related Issues: [#4723](https://github.com/paritytech/polkadot-sdk/issues/4723), [#4622](https://github.com/paritytech/polkadot-sdk/issues/4622)
### [S] Implement pallet-assets-freezer
PR: https://github.com/paritytech/polkadot-sdk/pull/3951
**Why is this important?**
As a part of this PR, a new pallet [pallet_assets_freezer](https://paritytech.github.io/polkadot-sdk/master/pallet_assets_freezer/index.html) has been introduced, which:
* is an extension of [pallet-assets](https://paritytech.github.io/polkadot-sdk/master/pallet_assets/index.html)
* implements both fungibles::freeze::Inspect and fungibles::freeze::Mutate
* handles freezing fungibles from [pallet-assets](https://paritytech.github.io/polkadot-sdk/master/pallet_assets/index.html)
**How does this impact Polkadot builders?**
At the moment, [pallet_balances](https://paritytech.github.io/polkadot-sdk/master/pallet_balances/index.html) has the functionality to lock/freeze on a specified amount of an account's free balance until a block number due to some use cases like staking, voting, etc. However, there are some other use cases like multi-governance where locks are needed to be implemented on pallet-assets. This pallet provides the functionality to freeze balance and fetch the frozen balance for an account on a given asset.
To implement this pallet:
```rust=
// Allow Freezes for the `Assets` pallet
pub type AssetsFreezerInstance = pallet_assets_freezer::Instance1;
impl pallet_assets_freezer::Config<AssetsFreezerInstance> for Runtime {
type RuntimeFreezeReason = RuntimeFreezeReason;
type RuntimeEvent = RuntimeEvent;
}
impl pallet_assets::Config<Instance1> for Runtime {
//Other config
type Freezer = AssetsFreezer;
}
```
Related Issue: [#3342](https://github.com/paritytech/polkadot-sdk/issues/3342)
---
# ℹ️ Low Impact
### [S] Remove deprecated Treasury pallet calls
PR: https://github.com/paritytech/polkadot-sdk/pull/3820
**Why is this important?**
As a part of this PR, all deprecated methods(`propose_spend`, `reject_proposal`, and `approve_proposal`) of [Treasury Pallet](https://docs.rs/pallet-treasury/latest/pallet_treasury/) have been removed. These methods were marked as deprecated as a part of [#14538](https://github.com/paritytech/substrate/pull/14538).
This PR also includes:
* Removal of associated config parameter types: `ProposalBond`, `ProposalBondMaximum`, `ProposalBondMinimum`.
* Removal of relevant deprecated code in `pallet-tips`, `pallet-bounties` and `pallet-child-bounties`.
* Removal of related weight functions and test cases.
**How does this impact Polkadot builders?**
The functionality of these deprecated methods has been replaced by `spend_local`(for native token) and `spend`(for using any other asset) dispatchables. This PR also contains a breaking change since a few config parameter types have been removed. If you are using [Treasury Pallet](https://docs.rs/pallet-treasury/latest/pallet_treasury/) for managing pot of funds and spending proposals, you need to remove the following parameters from your runtime.
```diff
impl pallet_treasury::Config for Runtime {
\\ Other config
- type ProposalBond = ProposalBond;
- type ProposalBondMinimum = ProposalBondMinimum;
- type ProposalBondMaximum = ();
}
```
Related PR: [#15438](https://github.com/paritytech/substrate/pull/14538)
Related Issue: [#3800](https://github.com/paritytech/polkadot-sdk/issues/3800)
### [S] Treasury Pallet: Remove unused config parameters
PR: https://github.com/paritytech/polkadot-sdk/pull/4831
**Why is this important?**
This release includes one more important change related to [Treasury Pallet](https://docs.rs/pallet-treasury/latest/pallet_treasury/). As a part of this PR, two unused config parameters `ApproveOrigin` and `OnSlash` have been removed. This PR also adds `OnSlash` to the [Bounties](https://paritytech.github.io/polkadot-sdk/master/pallet_bounties/index.html) and [Tips](https://paritytech.github.io/polkadot-sdk/master/pallet_tips/index.html) pallet for handling imbalanced decreases.
**How does this impact Polkadot builders?**
This PR includes breaking changes. If you have included Treasury, Bounties, or Tips pallets in your runtime, you will need to make the following changes in your runtime:
```diff
impl pallet_treasury::Config for Runtime {
\\ Other config...
- type ApproveOrigin = EitherOfDiverse<EnsureRoot<AccountId>, pallet_collective::EnsureProportionAtLeast<AccountId, CouncilCollective, 3, 5>,>;
- type OnSlash = ();
}
impl pallet_bounties::Config for Runtime {
\\ Other config...
+ type OnSlash = Treasury;
}
impl pallet_tips::Config for Runtime {
\\ Other config...
+ type OnSlash = Treasury;
}
```
Related Issue: [#3800](https://github.com/paritytech/polkadot-sdk/issues/3800)
### [S] Add `set_partial_params` dispatchable function
PR: https://github.com/paritytech/polkadot-sdk/pull/3843
**Why is this important?**
Substrate's [Core-Fellowship pallet](https://paritytech.github.io/polkadot-sdk/master/pallet_core_fellowship/index.html) contains logic specific to the salary, registers activity, and promotion. It is coupled with [Salary pallet](https://paritytech.github.io/polkadot-sdk/master/pallet_salary/index.html). This pallet has storage item `Params`, which stores information about active/passive salary and about member's promotion and demotion periods.
As a part of this PR, a new dispatchable function `set_partial_params` has been added to the [Core-Fellowship pallet](https://paritytech.github.io/polkadot-sdk/master/pallet_core_fellowship/index.html), which will help update `Params` only with those fields, which need to be updated.
**How does this impact Polkadot builders?**
Currently, the [Core-Fellowship pallet](https://paritytech.github.io/polkadot-sdk/master/pallet_core_fellowship/index.html) has a dispatchable `set_params`, which requires all parameters of `Params`, whether they need to be updated or not. This duplicates the fields that don't need to be updated. After this PR, builders will have the option to selectively set these parameters.
Related Issue: [#3617](https://github.com/paritytech/polkadot-sdk/issues/3617)
### [S] Pallet Assets: optional auto-increment for the asset ID
PR: https://github.com/paritytech/polkadot-sdk/pull/4757
**Why is this important?**
A new optional auto-increment setup for the IDs of new assets has been added in [Pallet-Assets](https://paritytech.github.io/polkadot-sdk/master/pallet_assets/index.html). With this change, builders will have the option to use auto-incremented asset IDs.
**How does this impact Polkadot builders?**
This feature is completely optional until we set `NextAssetId`. It won't impact existing asset storage items. If `NextAssetId` is set in pallet-assets, then the asset ID provided during new asset creation, must be equal to current value in`NextAssetId`.
### [S] Chain-Spec-Builder: Add support for Code Substitutes
PR: https://github.com/paritytech/polkadot-sdk/pull/4685
**Why is this important?**
As a part of this PR, a new `AddCodeSubstitute` subcommand has been added to the chain spec builder command. With this feature, builders will be able to use new runtime from a given block onwards. This feature is helpful if a chain halts due to any runtime bug and stops producing blocks.
**How does this impact Polkadot builders?**
After enabling `codeSubstitutes`, builders can run following command to provide a runtime WASM that they want to use from a given block onwards.
```
chain-spec-builder add-code-substitute chain_spec.json my_runtime.compact.compressed.wasm 1234
```
Note: It is important for parachains to update the validation function on the relay chain accordingly, otherwise `codeSubstitute` subcommand will be rejected.
Related PR: [#4600](https://github.com/paritytech/polkadot-sdk/pull/4600)
### [S] Pallet ranked collective: max member count per rank
PR: https://github.com/paritytech/polkadot-sdk/pull/4807
**Why is this important?**
Substrate's [Ranked-Collective pallet](https://paritytech.github.io/polkadot-sdk/master/pallet_ranked_collective/index.html) is a pallet for managing memberships for collectives, which could be used in use-cases like Governance, Salary, Promotion/Demotion, etc. Each member has its rank. At the moment, there is no limitation on either the number of members at a rank or the number of ranks in the system.
As a part of this PR, a new config type `MaxMemberCount` has been added to this pallet to control a number of members for a given rank.
**How does this impact Polkadot builders?**
Builders will have the option to either assign the value for `MaxMemberCount` or keep it as `()` for no limit. If you are using a [Ranked-Collective pallet](https://paritytech.github.io/polkadot-sdk/master/pallet_ranked_collective/index.html) in your runtime, this would be a breaking change. To avoid breaking change, please add the following code in your runtime:
```rust=
impl pallet_ranked_collective::Config for Runtime {
// Other config...
type MaxMemberCount = ();
}
```
---