* Runtime API versioning
Related to issue #11577
Add support for multiple versions of a Runtime API. The purpose is to
have one main version of the API, which is considered stable and
multiple unstable (aka staging) ones.
How it works
===========
Some methods of the API trait can be tagged with `#[api_version(N)]`
attribute where N is version number bigger than the main one. Let's call
them **staging methods** for brevity.
The implementor of the API decides which version to implement.
Example (from https://github.com/paritytech/substrate/issues/11577#issuecomment-1145347025):
```
decl_runtime_apis! {
#{api_version(10)]
trait Test {
fn something() -> Vec<u8>;
#[api_version(11)]
fn new_cool_function() -> u32;
}
}
```
```
impl_runtime_apis! {
#[api_version(11)]
impl Test for Runtime {
fn something() -> Vec<u8> { vec![1, 2, 3] }
fn new_cool_function() -> u32 {
10
}
}
}
```
Version safety checks (currently not implemented)
=================================================
By default in the API trait all staging methods has got default
implementation calling `unimplemented!()`. This is a problem because if
the developer wants to implement version 11 in the example above and
forgets to add `fn new_cool_function()` in `impl_runtime_apis!` the
runtime will crash when the function is executed.
Ideally a compilation error should be generated in such cases.
TODOs
=====
Things not working well at the moment:
[ ] Version safety check
[ ] Integration tests of `primitives/api` are messed up a bit. More
specifically `primitives/api/test/tests/decl_and_impl.rs`
[ ] Integration test covering the new functionality.
[ ] Some duplicated code
* Update primitives/api/proc-macro/src/impl_runtime_apis.rs
Code review feedback and formatting
Co-authored-by: asynchronous rob <rphmeier@gmail.com>
* Code review feedback
Applying suggestions from @bkchr
* fmt
* Apply suggestions from code review
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
* Code review feedback
* dummy trait -> versioned trait
* Implement only versioned traits (not compiling)
* Remove native API calls (still not compiling)
* fmt
* Fix compilation
* Comments
* Remove unused code
* Remove native runtime tests
* Remove unused code
* Fix UI tests
* Code review feedback
* Code review feedback
* attribute_names -> common
* Rework `append_api_version`
* Code review feedback
* Apply suggestions from code review
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
* Code review feedback
* Code review feedback
* Code review feedback
* Use type alias for the default trait - doesn't compile
* Fixes
* Better error for `method_api_ver < trait_api_version`
* fmt
* Rework how we call runtime functions
* Update UI tests
* Fix warnings
* Fix doctests
* Apply suggestions from code review
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
* Fix formatting and small compilation errors
* Update primitives/api/proc-macro/src/impl_runtime_apis.rs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Co-authored-by: asynchronous rob <rphmeier@gmail.com>
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Co-authored-by: Bastian Köcher <info@kchr.de>
* add new runtime and remove unnecessary pallets
* make runtime build
* add collectives to collator node
* sketch alliance config in runtime
* Slash handler was supposed to be commented out (for now)
* correct signature
* move to impls
* add alliance to runtime
* rustfmt
* IsReserve, remove Ping, update fn deposit
* add transaction_payment event
* Update parachains/runtimes/collectives/collectives-polkadot/src/lib.rs
Co-authored-by: Squirrel <gilescope@gmail.com>
* fmt
* add genesis config to chain spec
* fix merge
* local and dev configs only (for now)
* remove duplicate imports
* Collectives polkadot runtime to cargo workspace members (#1397)
* Collectives polkadot runtime: use unit type impl for identity verifier (#1398)
* apply fn rename
* fmt
* one less todo
* Less code in magic macros (#1407)
* Less code in magic macros
* cargo fmt
* Bench alliance (#1427)
* add benchmarks
* call one script from the other
* shebang changes so works on nixos too.
* bench in parallel as separate jobs
* hyphens can turn into underscores
* remove workaround to trigger bench
Co-authored-by: alvicsam <alvicsam@gmail.com>
Co-authored-by: paritytech-ci <paritytech-ci@parity.io>
* enable ci jobs
* fix publish bench results jobs
* chainspecs for collectives-westend (#1441)
* initial chainspecs for collections relay chain
* plumb in the collectives-westend chainspec
* add Runtime::CollectivesWestend
* lock
* Collectives: teleport slashed assets (#1433)
* Collectives: teleport slashed assets
* fmt
* Cargo.lock > polkadot-parachain 0.9.25
* create temp account for imbalance
* treasury acc id from pallet id
* move accounts into constants, use here junction for assets
* assets location is relay chain, accounts as parameters
* fix typos
* fix typo
* Update parachains/runtimes/collectives/collectives-polkadot/src/constants.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com>
* Move alliance proposal provider to impls.rs (#1464)
* Move to impls alliance proposal provider
* rustfmt
* Bumping spec version
(so that we can redeploy with slashing change.)
* cargo lock
* slurp collectives digest to make appear in release notes (#1473)
* add slurp
* Slurp better :)
* Bring some order
Co-authored-by: Chevdor <chevdor@users.noreply.github.com>
Co-authored-by: Wilfried Kopp <wilfried@parity.io>
* reorder barrier
* Update parachains/runtimes/collectives/collectives-polkadot/src/xcm_config.rs
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
* address review
* clean construct runtime
* fmt
* looks pretty but brings in too much
Co-authored-by: Squirrel <gilescope@gmail.com>
Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com>
Co-authored-by: alvicsam <alvicsam@gmail.com>
Co-authored-by: paritytech-ci <paritytech-ci@parity.io>
Co-authored-by: Chevdor <chevdor@users.noreply.github.com>
Co-authored-by: Wilfried Kopp <wilfried@parity.io>
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
* add unit tests to run runtime migrations
* Update runtime/westend/src/lib.rs
Co-authored-by: Mara Robin B. <mara@broda.me>
* fix
* fmt
* Update runtime/westend/src/lib.rs
Co-authored-by: Mara Robin B. <mara@broda.me>