### This PR is a port of this [PR for
substrate](https://github.com/paritytech/substrate/pull/13013) by
@kianenigma
Add infrastructure needed to have a Pallet::decode_entire_state(), which
makes sure all "typed" storage items defined in the pallet are
decode-able.
This is not enforced in any way at the moment. Teams who wish to
integrate/use this in the try-runtime feature flag should add
frame_support::storage::migration::EnsureStateDecodes as the LAST ITEM
of the runtime's custom migrations, and pass it to frame-executive. This
will make it usable in try-runtime on-runtime-upgrade.
This now catches cases like
https://github.com/paritytech/polkadot-sdk/pull/1969:
```pre
ERROR runtime::executive] failed to decode the value at key: Failed to decode value at key: 0x94eadf0156a8ad5156507773d0471e4ab8ebad86f546c7e0b135a4212aace339. Storage info StorageInfo { pallet_name: Ok("ParaScheduler"), storage_name: Ok("AvailabilityCores"), prefix: Err(Utf8Error { valid_up_to: 0, error_len: Some(1) }), max_values: Some(1), max_size: None }. Raw value: Some("0x0c010101010101")
```
... or:

Closes#241
---------
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: Liam Aharon <liam.aharon@hotmail.com>
Updates `docify` to 0.2.6, which fixes a bug that was preventing nesting
`#[docify::export]` within sub-items of items that already have
`#[docify::export]` attached to them from working properly.
Release notes here:
https://github.com/sam0x17/docify/releases/tag/v0.2.6
cc @ggwpez @kianenigma
Updates `docify` to 0.2.5, which fixes some indentation bugs and adds
the new `#[docify::export_content]` attribute which can be used like
regular `#[docify::export]` but will only export the _underlying
contents_ of the item it is attached to, if applicable (otherwise it
just behaves exactly like `#[docify::export]`).
Release notes here:
https://github.com/sam0x17/docify/releases/tag/v0.2.5
cc @kianenigma
Adds a config file that allows to run `zepter` without any arguments in
the workspace to address all issues.
A secondary workflow for the CI is provided as `zepter run check`. Both
the formatting and linting are now in one check for efficiancy.
The latest version also detects some more things that `featalign` was
already showing.
Error message [in the
CI](https://gitlab.parity.io/parity/mirrors/polkadot-sdk/-/jobs/3916205)
now looks like this:
```pre
...
crate 'test-parachains' (/Users/vados/Documents/work/polkadot-sdk/polkadot/parachain/test-parachains/Cargo.toml)
feature 'std'
must propagate to:
parity-scale-codec
Found 55 issues (run with --fix to fix).
Error: Command 'lint propagate-feature' failed with exit code 1
Polkadot-SDK uses the Zepter CLI to detect abnormalities in the feature configuration.
It looks like one more more checks failed; please check the console output. You can try to automatically address them by running `zepter`.
Otherwise please ask directly in the Merge Request, GitHub Discussions or on Matrix Chat, thank you.
For more information, see:
- https://github.com/paritytech/polkadot-sdk/issues/1831
- https://github.com/ggwpez/zepter
```
TODO:
- [x] Check that CI fails correctly
---------
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
The `xcm` crate was renamed to `staging-xcm` to be able to publish it to
crates.io as someone as squatted `xcm`. The problem with this rename is
that the `TypeInfo` includes the crate name which ultimately lands in
the metadata. The metadata is consumed by downstream users like
`polkadot-js` or people building on top of `polkadot-js`. These people
are using the entire `path` to find the type in the type registry. Thus,
their code would break as the type path would now be [`staging_xcm`,
`VersionedXcm`] instead of [`xcm`, `VersionedXcm`]. This pull request
fixes this by renaming the path segment `staging_xcm` to `xcm`.
This requires: https://github.com/paritytech/scale-info/pull/197
---------
Co-authored-by: Francisco Aguirre <franciscoaguirreperez@gmail.com>
# Description
Upgrades `macro_magic` to 0.4.3, which introduces the ability to have
`export_tokens` use the same name as the underlying item for its
auto-generated macro name. Ultimately this will allow for better dev ux
in our derive_impl feature.
* Make `storage_alias` more generic over the `prefix`
* Make `UnlockAndUnreserveAllFunds` indepenend from the pallet
* FMT
* Fix error reporting
* Rename prefix type
* Add test
* Apply suggestions from code review
Co-authored-by: Sam Johnson <sam@durosoft.com>
* ".git/.scripts/commands/fmt/fmt.sh"
---------
Co-authored-by: Sam Johnson <sam@durosoft.com>
Co-authored-by: command-bot <>
* Fix std, runtime-benchmarks and try-runtime features
zepter lint propagate-feature --feature try-runtime --left-side-feature-missing=ignore --workspace --fix --feature-enables-dep="try-runtime:frame-try-runtime"
zepter lint propagate-feature --feature runtime-benchmarks --left-side-feature-missing=ignore --workspace --fix --feature-enables-dep="runtime-benchmarks:frame-benchmarking"
zepter lint propagate-feature --feature std --left-side-feature-missing=ignore --workspace --fix
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Add propagate feature CI check
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Test CI by adding an error
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Use --locked
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Add help msg
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Revert "Test CI by adding an error"
This reverts commit cf4ff6cc0632269b0a109e547686e5e3314b02de.
* Test CI by adding an error
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* No newline in help msg
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Revert "Test CI by adding an error"
This reverts commit 5daa06ada8e01f5bebafb9d1c76804dd79bc1006.
* Test CI by adding an error
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Revert "Test CI by adding an error"
This reverts commit ca15de5729507a564f140a10ec2e87b19516ec4c.
* Fix msg
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Revert back to master
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Re-do with Zepter v0.7.4
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Update Zepter to 0.7.4
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Disable rococo try-runtime check
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Apply suggestions from code review
Co-authored-by: Bastian Köcher <git@kchr.de>
* More review fixes
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
---------
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: Bastian Köcher <git@kchr.de>
* update libp2p to 0.52.0
* proto name now must implement `AsRef<str>`
* update libp2p version everywhere
* ToSwarm, FromBehaviour, ToBehaviour
also LocalProtocolsChange and RemoteProtocolsChange
* new NetworkBehaviour invariants
* replace `Vec<u8>` with `StreamProtocol`
* rename ConnectionHandlerEvent::Custom to NotifyBehaviour
* remove DialError & ListenError invariants
also fix pending_events
* use connection_limits::Behaviour
See https://github.com/libp2p/rust-libp2p/pull/3885
* impl `void::Void` for `BehaviourOut`
also use `Behaviour::with_codec`
* KademliaHandler no longer public
* fix StreamProtocol construction
* update libp2p-identify to 0.2.0
* remove non-existing methods from PollParameters
rename ConnectionHandlerUpgrErr to StreamUpgradeError
* `P2p` now contains `PeerId`, not `Multihash`
* use multihash-codetable crate
* update Cargo.lock
* reformat text
* comment out tests for now
* remove `.into()` from P2p
* confirm observed addr manually
See https://github.com/libp2p/rust-libp2p/blob/master/protocols/identify/CHANGELOG.md#0430
* remove SwarmEvent::Banned
since we're not using `ban_peer_id`, this can be safely removed.
we may want to introduce `libp2p::allow_block_list` module in the future.
* fix imports
* replace `libp2p` with smaller deps in network-gossip
* bring back tests
* finish rewriting tests
* uncomment handler tests
* Revert "uncomment handler tests"
This reverts commit 720a06815887f4e10767c62b58864a7ec3a48e50.
* add a fixme
* update Cargo.lock
* remove extra From
* make void uninhabited
* fix discovery test
* use autonat protocols
confirming external addresses manually is unsafe in open networks
* fix SyncNotificationsClogged invariant
* only set server mode manually in tests
doubt that we need to set it on node since we're adding public addresses
* address @dmitry-markin comments
* remove autonat
* removed unused var
* fix EOL
* update smallvec and sha2
in attempt to compile polkadot
* bump k256
in attempt to build cumulus
---------
Co-authored-by: parity-processbot <>
* improve pallet hooks docs
* Update frame/support/src/traits/hooks.rs
Co-authored-by: Sam Johnson <sam@durosoft.com>
* Update frame/support/src/traits/hooks.rs
Co-authored-by: Sam Johnson <sam@durosoft.com>
* Update frame/support/src/traits/hooks.rs
Co-authored-by: Sam Johnson <sam@durosoft.com>
* fix mastekn removal
* Apply suggestions from code review
Co-authored-by: Juan <juangirini@gmail.com>
* add diagram
* fix all links
* fix diagram
* improve diagram with some notes
* update
---------
Co-authored-by: Sam Johnson <sam@durosoft.com>
Co-authored-by: parity-processbot <>
Co-authored-by: Juan <juangirini@gmail.com>
* frame-metadata: Point to unreleased branch
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame: Generalize outer enum generation for events and errors
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame: Remove individual generation of outer enum events
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/traits: Add marker trait for outer runtime enums
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame: Derive Clone, PartialEq, Eq for RuntimeEvents only
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/pallet: Include `#[pallet::error]` enum into pallet parts
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* metadata-ir: Include call, event, error types
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/metadata: Include outer enum types in V15 metadata
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/tests: Ensure `RuntimeError` includes `#[pallet::error]` parts
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/support: Document the reserved name for `RuntimeError`
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame: Use self-generated `RuntimeEvent` for `GetRuntimeOuterEnumTypes`
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/ui: Fix UI tests
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/support: Remove unused system path
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/ui: Unexpected field and reintroduce frame_system::Config for RuntimeCall
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/support: Remove `GetRuntimeOuterEnumTypes` marker trait
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/support: Remove `;` from macro
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Update frame-metadata to point to unreleased branch
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Rename error_enum_ty to module_error_enum_ty
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Update module_error_ty documentation
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame: Implement from_dispatch_error
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/support: Adjust test to ModuleErrorType
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Fix clippy
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Improve documentation
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/tests: Check `from_dispatch_error` impl
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Update frame-metadata
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Remove the module_error_ty
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Apply fmt
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Revert unneeded parts
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Revert "Revert unneeded parts"
This reverts commit b94bbd16078a025775a48da1095edec1705e6a4d.
Revert "Apply fmt"
This reverts commit 9b1c3e7b4ef27d32e10b35054a99916067e0397b.
Revert "Remove the module_error_ty"
This reverts commit 98de5b24653f9f9ec6ee842b749401b18a01758a.
* Update frame-metadata to origin/master
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Add outerEnums to the metadata
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Add tests
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Keep backwards compatibility for explicit pallet parts
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Rename tt_error_part to be more generic
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Increase recursion_limit to 1k
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Rename `fully_expanded` to `expanded`
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Improve documentation
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Adjust UI tests
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Update UI tests
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Update undefined_validate_unsigned_part.stderr UI test
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Adjust yet again
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Optimise macro expansions
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Use latest frame-metadata and rename `moduleErrorType` to `RuntimeError`
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Fix comment
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Apply fmt
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Update frame/support/procedural/src/construct_runtime/parse.rs
Co-authored-by: Bastian Köcher <git@kchr.de>
* Update frame/support/procedural/src/construct_runtime/parse.rs
Co-authored-by: Bastian Köcher <git@kchr.de>
* Update frame-metadata PR
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Remove `expanded` from error messages and fix typo
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Move docs to the function
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* ui: Use the intermed syntax for pallet parts
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Update frame-metadata with latest release
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame: Address feedback for `from_dispatch_error`
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
---------
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
Co-authored-by: Bastian Köcher <git@kchr.de>
* first draft, probably won't work
* first draft, probably won't work
* good progress..
* good milestone, still a lot to do.
* EVERYTHING WORKS
* Update frame/support/procedural/src/derive_impl.rs
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Update frame/support/procedural/src/derive_impl.rs
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* clean up + cargo fmt
* import tokens WIP
* export_tokens working with impl Trait
* WIP / notes
* use macro_magic 0.2.0's export_tokens to access foreign items
* token importing working properly using macro_magic 0.2.5
* combine_impls almost working
* successfully get foreign path via macro_magic 0.2.6
* combine_impls using implementing_type generics
* working + clean up
* more clean up
* decrease rightwards drift and add docs to combine_impls
* add support for macros to impl_item_ident in case we hit that
* add docs for impl_item_ident method
* fix no_std issues
* re-export of macro_magic working in pallets 🎉
* clean up + fully resolve no_std issue with macro_magic with v0.2.11
* remove trait item code for different trait item types since this
is now handled directly by combine_impls
* clean up
* remove dev comments
* only generate default trait if #[pallet::default_trait] is attached
* authorship and most other pallets now compiling
* compiling 🎉
* add check for more than two pallet attributes on Config trait
* remove unused import in nomination-pool
* clean up debug code
* upgrade to macro_magic v0.2.12
* add neater #[register_default_config(SomeIdent)] macro
* really just a thin wrapper around #[export_tokens]
* upgrade to macro_magic 0.3.1
* rewrite parsing to be compatible with syn 2.x, compiling 🎉
* remove unused keywords
* macro stubs for the new pallet:: macros, preliminary docs
* upgrade to macro_magic v0.3.2
* rename register_default_config => register_default_impl
* bump to macro_magic v0.3.3
* custom disambiguation_path working as 2nd arg to derive_impl
* overhaul docs
* fixes, ident-style paths shortcut working
* remove ident-style shortcut because it makes testing difficult
* add passing UI tests for derive_impl
* switch to `ForeignPath as DisambiguationPath` syntax + update docs
* add UI test for bad foreign path
* add UI test for bad disambiguation path
* add UI test for missing disambiguation path
* add UI test for attached to non impl
* fix derive_impl_attr_args_parsing test
* move tests to bottom
* fix nightly issue
* add doc notes on importing/re-exporting
* remove explicit use of macro_magic::use_attr
Co-authored-by: Bastian Köcher <git@kchr.de>
* use explicit macro_magic::use_attr
Co-authored-by: Bastian Köcher <git@kchr.de>
* remove unneeded {}
Co-authored-by: Bastian Köcher <git@kchr.de>
* remove unneeded collect
Co-authored-by: Bastian Köcher <git@kchr.de>
* add docs for TestDefaultConfig
* remove unneeded `#[export_tokens]` on `DefaultConfig`
* add docs for auto-generated `DefaultConfig`
* no need to clone
Co-authored-by: Bastian Köcher <git@kchr.de>
* clean up combine_impls + compiling again
* remove unused dependency
* simplify struct definition
Co-authored-by: Bastian Köcher <git@kchr.de>
* fix register_default_impl docs
* reduce rightward drift / refactor
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
* fix derive_impl after keith's changes
* simplify disambiguation_path calculation
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
* compiling again
* simplify parsing of trait item
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
* rename preludes => prelude
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
* fix other places where we used preludes instead of prelude
* fix indents
* simplify PalletAttr parsing
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
* go back to having no_default and constant as keywords
* make it more clear that disambiguation_path is optional
* make default_trait_items just a Vec instead of Option<Vec>
* rename foreign_path => default_impl_path within substrate
* fix docs
* Change {} to ;
Co-authored-by: Bastian Köcher <git@kchr.de>
* highlight full end-to-end example with link
* add pallet-default-config-example, start by copying dev mode code
* update dev-mode specific docs
* use Person and Points instead of Dummy and Bar
* add docs to example pallet
* revert changes to pallets other than the default config example
* fix outdated references to basic example pallet
* re-order docs to be a bit more clear
* better errors for extra attributes
* add UI tests for duplicate/extra attributes on trait items
* change `#[pallet::default_config]` to option on `#[pallet::config()]`
* update UI tests
* add UI test covering missing `#[pallet::config(with_default)]` when
`#[pallet::no_default]` is used
* add note about new optional conventions
* improve docs about `DefaultConfig` and link to these from a few places
* fix doc comment
* fix old comment referencing `pallet::default_config`
* use u32 instead of u64 for block number
Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>
* use () instead of u32 for `AccountData`
Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>
* use ConstU32<10> for BlockHashCount instead of ConstU64<10>
Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>
* people are not dummies
Co-authored-by: Liam Aharon <liam.aharon@hotmail.com>
* fix wording
Co-authored-by: Just van Stam <vstam1@users.noreply.github.com>
* Person => People and compiling again
* add docs for `prelude` module in frame_system
* update Cargo.lock
* cleaner example
* tweaks
* update docs more
* update docs more
* update docs more
* update docs more
* fix ui tests
* err
* Update frame/support/test/tests/pallet_ui.rs
* update ui tests
---------
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: Sam Johnson <sam@durosoft.com>
Co-authored-by: parity-processbot <>
Co-authored-by: Bastian Köcher <git@kchr.de>
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
Co-authored-by: Liam Aharon <liam.aharon@hotmail.com>
Co-authored-by: Just van Stam <vstam1@users.noreply.github.com>
We didn't had the tuples features declared for the `frame-support-procedural` crate and thus, it
could not properly detect that the feature was already enabled.
* impl_runtime_apis: Generate getters for `metadata_at` functions
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* runtime: Implement new `Metadata` runtime trait
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* runtime: Move `metadata_at` functions to construct_runtime macro
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* contruct_runtime: Use `OpaqueMetadata` from hidden imports
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Adjust testing
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/tests: Add tests for the new API
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/proc-macro: Helper to extract documentation literals
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/proc-macro: Helper to filter all `cfg` attributes
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/proc-macro: Generate documentation getters for metadata
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/proc-macro: Avoid trait collision with snake case methods
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* proc-macro/tests: Check doc getters
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/proc-macro: Generate metadata for runtime methods
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/api: Export scale-info and frame-metadata
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/proc-macro: Generate metadata for runtime traits
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/runtime: Expose metadata v15 internally
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* test: Use metadata v15 from `lexnv/md_v15_test` branch
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/proc-macro: Generate crate access one module up
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame: Implement `runtime_metadata` for mocks and tests
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/proc-macro: Fix warnings
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/proc-macro: Add no-docs flag
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame: Adjust more tests
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/tests: Check runtime metadata correctness
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/benchmarking: Adjust benchmarks
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/benchmarks: Adjust more benchmarks
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/api: Fix clippy
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/proc-macro: Generate runtime metadata on the `decl_runtime_apis`
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame: Abuse Deref to resolve `runtime_metadata`
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Revert "frame: Implement `runtime_metadata` for mocks and tests"
This reverts commit b7f41aa189218589392a6e713ea9488e93c4db45.
Revert "frame: Adjust more tests"
This reverts commit 3cba5982c7f45552e76335e96c430aecbc42d8c6.
Revert "frame/benchmarking: Adjust benchmarks"
This reverts commit 60b382ada486c791ffceeb65da587e949b90ec5d.
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
Revert "frame/benchmarks: Adjust more benchmarks"
This reverts commit eb75c477179b1a27347a5554c5732ef26a00d7e8.
* primitives/proc-macro: Remove unused imports and function
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/support: Adjust runtime metadata test
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/tests: Remove doc getter test
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/support: Enable `no-metadata-docs` feature from `sp-api`
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/tests: Add `TypeInfo` for test::extrinsic
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/api: Expose scale-info and frame-metadata
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Update frame-metadata to include v15
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Fix merge conflicts
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/metadata_ir: Add IR for runtime API metadata
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/metadata_ir: Convert IR to V15
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/api: Collect IR metadata for runtime API
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/api: Move `metadata_ir` from frame/support
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/tests: Adjust testing
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame/tests: Adjust `metadata_versions` test
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/runtime_metadata: Exclude default type parameters from methods
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Update primitives/api/proc-macro/src/runtime_metadata.rs
Co-authored-by: Bastian Köcher <git@kchr.de>
* Update primitives/api/src/metadata_ir/types.rs
Co-authored-by: Bastian Köcher <git@kchr.de>
* Update primitives/api/src/metadata_ir/mod.rs
Co-authored-by: Bastian Köcher <git@kchr.de>
* Update primitives/api/proc-macro/src/utils.rs
Co-authored-by: Bastian Köcher <git@kchr.de>
* Update primitives/api/proc-macro/src/runtime_metadata.rs
Co-authored-by: Bastian Köcher <git@kchr.de>
* Update primitives/api/proc-macro/src/runtime_metadata.rs
Co-authored-by: Bastian Köcher <git@kchr.de>
* Update primitives/api/proc-macro/src/runtime_metadata.rs
Co-authored-by: Bastian Köcher <git@kchr.de>
* Update primitives/api/proc-macro/src/runtime_metadata.rs
Co-authored-by: Bastian Köcher <git@kchr.de>
* Update primitives/api/proc-macro/src/runtime_metadata.rs
Co-authored-by: Bastian Köcher <git@kchr.de>
* Update primitives/api/proc-macro/src/runtime_metadata.rs
Co-authored-by: Bastian Köcher <git@kchr.de>
* primitives: Fix build
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives/metadata-ir: Move IR to dedicated crate
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives: Reexport metadata-ir and frame-metadata
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* frame: Use apis field instead of runtime
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Better documentation for the `Deref` abstraction
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* ui-tests: Check empty `impl_runtime_apis`
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives: Remove unneeded bounds on generic params
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives: Rename `collect_where_bounds` to `get_argument_type_param`
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives: Generate crate access per fn call
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Revert "primitives: Remove unneeded bounds on generic params"
This reverts commit 5178e38cf21cfb481156eefd628d62989201d59a.
* metadata-ir: Add no-std
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* primitives: Adjust where bounds
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Change `frame-metadata` branch to "origin/main"
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Update to `main` from origin
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Update frame-metadata to crates.io v15.1
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Revert "ui-tests: Check empty `impl_runtime_apis`"
This reverts commit cf78a7190ad9cba3c3bb2e78dc3d0dc382b2fea9.
* Move ui test to primitives/ui
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Update frame/support/test/tests/runtime_metadata.rs
Co-authored-by: Bastian Köcher <git@kchr.de>
* Update primitives/api/proc-macro/src/runtime_metadata.rs
Co-authored-by: Bastian Köcher <git@kchr.de>
* Test already covered by `empty_impl_runtime_apis_call.stderr`
This reverts commit 3bafb294cbe9745569bf5e5a1a2e6b4a4c1aadc5.
* Retriger CI
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
* Import `TokenStream` as `TokenStream2`
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
---------
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
Co-authored-by: parity-processbot <>
Co-authored-by: Bastian Köcher <git@kchr.de>
* `pallet-treasury`: Ensure we respect `max_amount` for spend across batch calls
When calling `spend` the origin defines the `max_amount` of tokens it is allowed to spend. The
problem is that someone can send a `batch(spend, spend)` to circumvent this restriction as we don't
check across different calls that the `max_amount` is respected. This pull request fixes this
behavior by introducing a so-called dispatch context. This dispatch context is created once per
outer most `dispatch` call. For more information see the docs in this pr. The treasury then uses
this dispatch context to attach information about already spent funds per `max_amount` (we assume
that each origin has a different `max_amount` configured). So, a `batch(spend, spend)` is now
checked to stay inside the allowed spending bounds.
Fixes: https://github.com/paritytech/substrate/issues/13167
* Import `Box` for wasm
* FMT
* add stub for new benchmark macro
* benchmark syntax
* add #[extrinsic call] separator
* parse #[benchmark] item as a function
* proper emission of error when #[extrinsic_call] annotation is missing
* clean up
* enclosing module via benchmarks! { } working
* use an attribute macro on the module instead of benchmarks! { }
* cargo fmt
* working component implementation
* WIP
* working
* add syntax for Linear<A, B>
* parsing of param ranges (still need to build tuple though)
* params parsing WIP
* clean up (don't need extrinsic call name)
* use proper Result syntax for BenchmarkDef parsing
* proper parsing of Linear<0, 1> style args
* successfully parse and make use of linear component ranges 💥
* rename support variable => home because eventually will be moved
* compile-time check that param range types implement ParamRange
* switch to using balances as example, failing on instance pallet
* successfully set up __origin and __call with balances 💥
* clean up
* use a module
* don't need a variable for transfer
* rename benchmark_transfer -> transfer because no longer conflicts
* clean up
* working with transfer_increasing_users as well 💥
* re-add BareBlock
* add comments for undocumented structs+functions+traits
* refactor in preparation for removing module requirements
* switch to a block instead of a module
* use the outer macro pattern to to enable #[benchmarks] aggregation
* successfully generate SelectedBenchmark 💥
* implement components for SelectedBenchmark
* implement instance for SelectedBenchmark
* properly track #[extra]
* working impl for fn benchmarks()
* run_benchmarks WIP
* finish run_benchmark! impl 💥
* import balances transfer_best_case benchmark
* import transfer_keep_alive balances pallet benchmark
* import set_balance_creating balances pallet benchmark
* import set_balance_killing balances pallet benchmark
* import force_transfer balances pallet benchmark
* add #[extra] annotation and docs to transfer_increasing_users
* import transfer_all balances pallet benchmark
* import force_unreserve balances pallet benchmark
* prepare to implement impl_benchmark_test_suite!
* ensure tests cover #[extra] before and after #[benchmark] tag
* refactor
* clean up
* fix
* move to outer
* switch to benchmarks/instance_benchmarks
* test impl almost done, strange compiler error
* benchmark test suites working 💥
* clean up
* add stub and basic parsing for where_clause
* working except where clause and extrinsic calls containing method chains
* assume option (2) for now wrt https://github.com/paritytech/substrate/pull/12924#issuecomment-1372938718
* clean up
* switch to attribute-style
* properly handle where clauses
* fix subtle missing where clause, now just MessageQueue issues
* fix block formatting in message-queue pallet
* switch to block vs non-block parsing of extrinsic call
* working now but some benchmark tests failing
* message-queue tests working (run order issue fixed) 🎉
* add comments and internal docs for fame_support_procedural::benchmark
* fix license years
* docs for lib.rs
* add docs to new support procedural macros
* don't allow #[benchmark] outside of benchmarking module
* add docs
* use benchmark(extra, skip_meta) style args
* update docs accordingly
* appease clippy
* bump ci
* add notes about `extra` and `skip_meta`
* fix doc tests
* re-run CI
* use `ignore` instead of `no_run` on doc examples
* bump CI
* replace some if-lets with if-elses
* more refactoring of if-let statements
* fix remaining if-lets in BenchmarkDef::from()
* fix if-lets in benchmarks()
* fix remaining if-lets, use nested find_map for extrinsic call
* switch to use #[extrinsic_call] or #[block] situationally
* refactor ExtrinsicCallDef => BenchmarkCallDef
* update docs with info about #[block]
* add macro stub for #[extrinsic_call]
* fix docs and add stub for #[block] as well
* remove unused extern crate line
* fix clippy nits
* Use V2 bench syntax in pallet-example-basic
Just testing the dev-ex...
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* carry over comment
* use curly-brace style for impl_benchmark_test_suite!
* remove unneeded parenthesis
* proper handling of _() extrinsic call style
* add docs for _() syntax
* fix crate access
* simplify keyword access
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
* simplify module content destructuring
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
* fix crate access "frame_benchmarking" => "frame-benchmarking", compiles
* use _() extrinsic call syntax where possible in balances
* simplify attr.path.segments.last()
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
* fix compile error being suppressed
* simplify extrinsic call keyword parsing
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
* use ? operator instead of return None
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
* rename generics => type_use_generics
rename full_generics => type_impl_generics
* simplify extrinsic call extraction with transpose
* bump CI
* nit
* proper handling of too many + too few block/extrinsic call annotations
* change to B >= A
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* remove unneeded ignore
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* remove another ignore
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* add ui tests
* use _() style extrinsic call on accumulate_dummy
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* add range check to ParamRange
* ui test for bad param ranges
* fix failing example
* add ignore back to other failing example
* tweak expr_call span
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
* fix typo
* eliminate a match
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
* change pub fn benchmarks to return Result<TokenStream>
* fix origin error span
* more informative error for invalid benchmark parameter name
* fix spans on a few benchmark errors
* remove unneeded clone
* refactor inner loop of benchmark function parsing
* preserve mod attributes
* refactor outer loop of benchmark def parsing code, greatly simplified
* simplify to use a ? operator when parsing benchmark attr path
* fix another ? operator
* further simplify benchmark function attr parsing with more ? ops
* refactor extrinsic call handling to use if let rather than match
* replace is_ok => is_err
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
* re-use name during expansion of benchmark def
* remove unneeded clone
* fix span for origin missing error
* fix missing semi
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
Co-authored-by: parity-processbot <>