# Description
We derive few useful traits on `ErrorOrigin` and `ExecError`, including
`codec::Encode` and `codec::Decode`, so that `ExecResult` is
en/decodable as well. This is required for a contract mocking feature
(already prepared in drink:
https://github.com/Cardinal-Cryptography/drink/pull/61). In more detail:
`ExecResult` must be passed from runtime extension, through runtime
interface, back to the pallet, which requires that it is serializable to
bytes in some form (or implements some rare, auxiliary traits).
**Impact on runtime size**: Since most of these traits is used directly
in the pallet now, compiler should be able to throw it out (and thus we
bring no new overhead). However, they are very useful in secondary tools
like drink or other testing libraries.
# Checklist
- [x] My PR includes a detailed description as outlined in the
"Description" section above
- [ ] My PR follows the [labeling requirements](CONTRIBUTING.md#Process)
of this project (at minimum one label for `T`
required)
- [x] I have made corresponding changes to the documentation (if
applicable)
- [x] I have added tests that prove my fix is effective or that my
feature works (if applicable)
# Description
This PR introduces two changes:
- the previous `Tracing` trait has been modified to accept contract
address instead of code hash (seems to be way more convenient)
- a new trait `CallInterceptor` that allows intercepting contract calls;
in particular the default implementation for `()` will just proceed in a
standard way (after compilation optimizations, there will be no
footprint of that); however, implementing type might decide to mock
invocation and return `ExecResult` instead
Note: one might try merging `before_call` and `intercept_call`. However,
IMHO this would be bad, since it would mix two completely different
abstractions - tracing without any effects and actual intervention into
execution process.
This will unblock working on mocking contracts utility in drink and
similar tools (https://github.com/Cardinal-Cryptography/drink/issues/33)
# Checklist
- [x] My PR includes a detailed description as outlined in the
"Description" section above
- [ ] My PR follows the [labeling
requirements](https://github.com/paritytech/polkadot-sdk/blob/master/docs/CONTRIBUTING.md#process)
of this project (at minimum one label for `T` required)
- [x] I have made corresponding changes to the documentation (if
applicable)
- [x] I have added tests that prove my fix is effective or that my
feature works (if applicable)
* Provide basic breakpoints
* Rename to Observer
* Rename feature. Single trait. Borrow-checker
* : frame_system::Config
* Confused type name
* Minor bugs
* pub trait
* No unnecessary cloning
* Make node compile with all features
* Move everything debug-related to a single module
* Add docs and implementation for ()
* fmt
* Make it feature-gated or for tests
* Prepare testing kit
* Testcase
* Fmt
* Use feature in dev-deps
* ?
* feature propagation
* AAAA
* lol, that doesn't make much sense to me
* Turn on
* clippy
* Remove self dep
* fmt, feature-gating test
* Noop to trigger CI
* idk
* add feature to pipeline
* Corrupt test to see if it is actually being run
* Revert change
* Doc for conf type
* Review
* Imports
* ...
* Remove debug for kitchen-sink
* Move test
* Fix imports
* I must have already tried this one...
* Adjust to the new API
* Remove mutability
* Async constructor
* unwrap result
* do not panic
* suggestion
* leftover
* update lockfile for {"substrate"}
Co-authored-by: parity-processbot <>