* `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
* Change copyright year to 2023 from 2022
* Fix incorrect update of copyright year
* Remove years from copy right header
* Fix remaining files
* Fix typo in a header and remove update-copyright.sh
* frame-system: explicit call index
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Use explicit call indices
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* pallet-template: explicit call index
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* DNM: Temporarily require call_index
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Revert "DNM: Temporarily require call_index"
This reverts commit c4934e312e12af72ca05a8029d7da753a9c99346.
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* BREAKING: Rename Origin
* more renaming
* a bit more renaming
* fix
* more fixing
* fix in frame_support
* even more fixes
* fix
* small fix
* ...
* update .stderr
* docs
* update docs
* update docs
* docs
* construct_runtime: Fix generation of types behind features
With the recent addition of supporting features in `construct_runtime!` there was a bug overseen.
The `AllPalletsWithSystem` etc type declarations would be declared twice when a certain was enabled.
The problem was that in the macro we didn't feature gate the types that should be declared when
there is no feature enabled. This pull request now takes care of feature gating this type behind
`all(#( not(feature) ))`. So, these types will only be enabled if no of the configured features is enabled.
* Fix tests
* FMT
* Implement ResultQuery
* Fix test expectations
* Add more tests
* Fix test expectations
* Clean up some names
* Silence warnings
* Specify error type when supplying error type to ResultQuery
* cargo fmt
* Add support for type parameters in parameter_types macro
* Reduce deeply indented code
* Fixes
* Update test expectation
* Rewrite and document formula for calculating max storage size
* More docs
* cargo fmt
* formatting
Co-authored-by: parity-processbot <>
* generate_storage_alias: Rewrite as proc macro attribute
This rewrites the `generate_storage_alias!` declarative macro as proc-macro attribute. While doing
this the name is changed to `storage_alias`. The prefix can now also be the name of a pallet. This
makes storage aliases work in migrations for all kind of chains and not just for the ones that use
predefined prefixes.
* Fix compilation and FMT
* Moare fixes
* 🤦
* ......
* Rework the syntax and support instancing
* FMT
* Prefix variants with `Storage`
* Make it compile
* Fix where clause on rust stable
* Allow pallet errors to contain at most one field
* Update docs on pallet::error
* Reword documentation
* cargo fmt
* Introduce CompactPalletError trait and require #[pallet::error] fields to implement them
* cargo fmt
* Do not assume tuple variants
* Add CompactPalletError derive macro
* Check for error type compactness in construct_runtime
* cargo fmt
* Derive CompactPalletError instead of implementing it directly during macro expansion
* Implement CompactPalletError on OptionBool instead of Option<bool>
* Check for type idents instead of variant ident
* Add doc comments for ErrorCompactnessTest
* Add an trait implementation of ErrorCompactnessTest for ()
* Convert the error field of DispatchError to a 4-element byte array
* Add static check for pallet error size
* Rename to MAX_PALLET_ERROR_ENCODED_SIZE
* Remove ErrorCompactnessTest trait
* Remove check_compactness
* Return only the most significant byte when constructing a custom InvalidTransaction
* Rename CompactPalletError to PalletError
* Use counter to generate unique idents for assert macros
* Make declarative pallet macros compile with pallet error size checks
* Remove unused doc comment
* Try and fix build errors
* Fix build errors
* Add macro_use for some test modules
* Test fix
* Fix compilation errors
* Remove unneeded #[macro_use]
* Resolve import ambiguity
* Make path to pallet Error enum more specific
* Fix test expectation
* Disambiguate imports
* Fix test expectations
* Revert appending pallet module name to path
* Rename bags_list::list::Error to BagError
* Fixes
* Fixes
* Fixes
* Fix test expectations
* Fix test expectation
* Add more implementations for PalletError
* Lift the 1-field requirement for nested pallet errors
* Fix UI test expectation
* Remove PalletError impl for OptionBool
* Use saturating operations
* cargo fmt
* Delete obsolete test
* Fix test expectation
* Try and use assert macro in const context
* Pull out the pallet error size check macro
* Fix UI test for const assertion
* cargo fmt
* Apply clippy suggestion
* Fix doc comment
* Docs for create_tt_return_macro
* Ensure TryInto is imported in earlier Rust editions
* Apply suggestions from code review
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
* Fix up comments and names
* Implement PalletError for Never
* cargo fmt
* Don't compile example code
* Bump API version for block builder
* Factor in codec attributes while derving PalletError
* Rename module and fix unit test
* Add missing attribute
* Check API version and convert ApplyExtrinsicResult accordingly
* Rename BagError to ListError
Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>
* Use codec crate re-exported from frame support
* Add links to types mentioned in doc comments
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
* cargo fmt
* cargo fmt
* Re-add attribute for hidden docs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>
* fix doc
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Add MaxEncodedLen to implement_per_thing!
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Test that Percent et.al. can be used in Storage.
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Add comment
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Revert "Test that Percent et.al. can be used in Storage."
This reverts commit 52558afea6f9b53fb07521f1b6393bc320d21dfc.
* Test MaxEncodedLen in implement_per_thing!
Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
* Revert "Add comment"
This reverts commit 27a96f6e527f71a57ace289c041de514edbe9104.
* fix order
* Update frame/support/procedural/src/construct_runtime/mod.rs
Co-authored-by: Alexander Popiak <alexander.popiak@parity.io>
* format
* more accurate description
* format
* better explicit types
* fix tests
* address feedback
* add a type to ease non breaking implementation
* add comment about constraint
* fix test
* add test for generated types
Co-authored-by: Alexander Popiak <alexander.popiak@parity.io>
* Rebased with master. Resolved merge conflict in
frame/support/test/tests/pallet.rs
* Switching Account ID to SomeType1, as SomeType3 was giving me conversion error.
* Wrong indent config. Fixed.
* These tabs look fine locally, but look different on Github. Trying to get the style config right.
* Parsing pallet::constant_name.
Passing unit tests, which is confusing because I didn't change `ident` in the ExtraConstantDef initialization.
* Finalized parsing of extra constant name by adding optional metadata field.
Added expansion logic that replaces respective `idents` where they exist.
* Erasing this to try to keep the format the same across the source code.
* Another formatting change for consistency.
* Update frame/support/procedural/src/pallet/expand/constants.rs
strictly more idiomatic.
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
* Update frame/support/procedural/src/pallet/parse/extra_constants.rs
strictly idiomatic change.
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
* Fixing formatting and CI warnings.
* switched to nightly compiler to use rustfmt.toml
Co-authored-by: Eric Miller <emiller@lirio.co>
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
* Move `PalletVersion` away from the crate version
Before this pr, `PalletVersion` was referring to the crate version that
hosted the pallet. This pr introduces a custom `package.metadata.frame`
section in the `Cargo.toml` that can contain a `pallet-version` key
value pair. While the value is expected to be a valid u16. If this
key/value pair isn't given, the version is set to 1.
It also changes the `PalletVersion` declaration. We now only have one
`u16` that represents the version. Not a major/minor/patch version. As
the old `PalletVersion` was starting with the `u16` major, decoding the
old values will work.
* Overhaul the entire implementation
- Drop PalletVersion
- Introduce StorageVersion
- StorageVersion needs to be set in the crate and set for the macros
- Added migration
* Fix migrations
* Review feedback
* Remove unneeded dep
* remove pub consts
* Brings back logging and implements `GetStorageVersion`
* Return weight from migration
* Fmt and remove unused import
* Update frame/support/src/dispatch.rs
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
* Update frame/support/src/traits/metadata.rs
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
* Run cargo fmt on the whole code base
* Second run
* Add CI check
* Fix compilation
* More unnecessary braces
* Handle weights
* Use --all
* Use correct attributes...
* Fix UI tests
* AHHHHHHHHH
* 🤦
* Docs
* Fix compilation
* 🤷
* Please stop
* 🤦 x 2
* More
* make rustfmt.toml consistent with polkadot
Co-authored-by: André Silva <andrerfosilva@gmail.com>
* Update impl-codec to use new upstream MaxEncodedLen trait
* Adapt crates to use the updated codec crate for `MaxEncodedLen`
* Remove max-encoded-len crate altogether
* Fix test compilation in `pallet-proxy`
* reorganize import (#9186)
* Fix remaining `MaxEncodedLen` imports
* Fix remaining old usages of max-encoded-len crate
* Fix UI test
* Manually depend on new impl-codec to fix Polkadot companion build
* Use newly released primitive-types v0.9.1 that has new codec impls
* Make sure codec deps are up-to-date in crates that use them
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
* always implement storage info on Pallet
* fix UI test
* Fold span computation into trait and method computation
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
* Emit error when construct_runtime imports a non-existent Call part
* Reword and display pallet name when emitting part not found error
* Migrate decl_outer_dispatch to a proc macro
* Rename calls.rs to call.rs
* Create new construct_runtime_v2 macro
* Add UI test for importing non-existent call part in construct_runtime
* Emit error when construct_runtime imports a non-existent Config part
* Emit error when construct_runtime imports a non-existent Event part
* Migrate decl_outer_inherent to a proc macro
* Emit error when construct_runtime imports a non-existent Inherent part
* Migrate decl_outer_validate_unsigned to a proc macro
* Emit error when construct_runtime imports a non-existent ValidateUnsigned part
* impl for old macro
* fix line width
* add doc
* hide macroes and use unique counter everywhere
* Remove construct_runtime_v2
* Encapsulate pallet part check macros in a module
* Fix macro definitions in dummy part checker
* Tag ProvideInherent impl with #[pallet::inherent] properly for authorship pallet
* Remove Call part from pallets that do not define it
* Add Call part unit tests
* Remove undefined Call part import from offences pallet
* Add tests for expand_outer_inherent
* Remove Call part from pallets that do not define them
* Remove Call part imports from pallets that do not have it defined
* Remove Call part import of the offences pallet from grandpa pallet mocks
* Update frame/support/test/tests/pallet.rs
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
* Remove Call part imports for pallets that do not define them
* Move inherent tests to inherent_expand
* Add unit tests for expand_outer_validate_unsigned
* Add newline at the end of file
* fix ui test
* Small prayer to RNGsus for fixing CI
* Remove Call part from construct_runtime for randomness collective flip pallet
* Remove Call part import for randomness collective flip pallet
* Summon Laplace's demon instead of praying to RNGsus
* Update test expectations
* fix ui test and make sure it's flaky
* Revert "fix ui test and make sure it's flaky"
This reverts commit 362b6881389c911ef8d9ef85d71c9463f5694b20.
* Comment out test instead of putting it in conditional compilation
* Update UI test expectations
* Update UI test expectations
* Emit error when construct_runtime imports a non-existent Origin part
Co-authored-by: thiolliere <gui.thiolliere@gmail.com>
Co-authored-by: Denis P <denis.pisarev@parity.io>
* Implement parsing for #[pallet::storage_name] on storage items
* Rename storage prefix when a #[pallet::storage_name] is supplied
* Fix test_storage_info
* Rename storage_name to storage_prefix
* Check for duplicates when renaming storage prefixes
* Allow only string literals for storage_prefix renames
* Use proper spans for attribute errors
* Check for valid identifiers when parsing storage prefix renames
* make all extrinsics public so they are available from outside
* Impl
* fix
* more fix
* more pub
* few more
* merge fix
* fix ui test
* fix ui test
Co-authored-by: Alexander Popiak <alexander.popiak@parity.io>
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
Co-authored-by: Bastian Köcher <info@kchr.de>
* Remove unused event_metadata variable
* Eliminate mod_name and use pallet names to name enum variants
* Rename field name `pallet` to `path`
* Use only the pallet name to generate variant names
* Use new naming scheme for Event enum in sudo pallet tests
* Use new naming scheme for Event enum in offences pallet tests
* Use new naming scheme for Event enum in contracts pallet tests
* Use new naming scheme for Event enum in collective pallet tests
* Use new naming scheme for Event enum in bounties pallet tests
* Use new naming scheme for Event enum in balances pallet tests
* Use new naming scheme for Event enum in assets pallet tests
* Use new naming scheme for Event enum in frame support tests
* Use new naming scheme for Event enum in tips pallet tests
* Use new naming scheme for Event enum in transaction payment pallet tests
* Use new naming scheme for GenesisConfig fields in example pallet tests
* Use new naming scheme for GenesisConfig fields in elections pallet tests
* Use new naming scheme for Event enum in election provider multi-phase pallet tests
* Use new naming scheme for Event enum in elections phragmen pallet tests
* Use new naming scheme for GenesisConfig fields in chain spec
* Use new naming scheme for Event enum in staking pallet mock
* Use new naming scheme for GenesisConfig fields in node-template chain spec
* Use new naming scheme for GenesisConfig fields in node-testing chain spec
* Use new naming scheme for Event enum in node executor tests
* Use new naming scheme for GenesisConfig fields in transaction storage pallet mock
* Refactor match conditions
* Make #[pallet::hooks] optional
* Make #[pallet::call] optional
* Remove unused imports
* Update UI test expectations
* Update UI test expectations
* Remove unnecessary HooksDef::empty method
* Remove unnecessary CallDef::empty method
* Clarify what would happen when no call or hooks are specified in a pallet