• Bastian Köcher's avatar
    Make `decl_error!` errors usable (#4449) · fef0e752
    Bastian Köcher authored
    * Make `decl_error!` errors usable
    
    This pr implements support for returning errors of different pallets in
    a pallet. These errors need to be declared with `decl_error!`.
    
    The pr changes the following:
    
    - Each dispatchable function now returns a `DispatchResult` which is an
    alias for `Result<(), DispatchError>`.
    - `DispatchError` is an enum that has 4 variants:
      - `Other`: For storing string error messages
      - `CannotLookup`: Variant that is returned when something returns a
      `sp_runtime::LookupError`
      - `BadOrigin`: Variant that is returned for any kind of bad origin
      - `Module`: The error of a specific module. Contains the `index`,
      `error` and the `message`. The index is the index of the module in
      `construct_runtime!`. `error` is the index of the error in the error
      enum declared by `decl_error!`. `message` is the message to the error
      variant (this will not be encoded).
    - `construct_runtime!` now creates a new struct `ModuleToIndex`. This
    struct implements the trait `ModuleToIndex`.
    - `frame_system::Trait` has a new associated type: `ModuleToIndex` that
    expects the `ModuleToIndex` generated by `construct_runtime!`.
    - All error strings returned in any module are being converted now to `DispatchError`.
    - `BadOrigin` is the default error returned by any type that implements `EnsureOrigin`.
    
    * Fix frame system benchmarks
    fef0e752