Search code examples
rustethereumsubstrateparity-ioevm

`paint_evm::Event` is not implemented for `Event`


Following the adding a module to your runtime, I'm trying to implement the Parity Substrate paint-evm trait for the Dothereum Runtime.

According to my previous work: How to implement the EVM Trait for a Substrate Runtime?

I implemented the EVM Trait for the Dothereum Runtime:

// Implement the EVM Trait for the Dothereum Runtime.
impl evm::Trait for Runtime {
    type FeeCalculator = FixedGasPrice;
    type ConvertAccountId = TruncatedAccountId;
    type Currency = Balances;
    type Event = Event;
    type Precompiles = ();
}

However, the paint_evm::Event trait is not implemented for Event:

error: failed to run custom build command for `dothereum-runtime v0.2.2 (/home/user/.opt/dothereum/runtime)`

Caused by:
  process didn't exit successfully: `/home/user/.opt/dothereum/target/debug/build/dothereum-runtime-54902422e823ba8e/build-script-build` (exit code: 1)
--- stdout
Executing build command: "rustup" "run" "nightly" "cargo" "build" "--target=wasm32-unknown-unknown" "--manifest-path=/home/user/.opt/dothereum/target/debug/wbuild/dothereum-runtime/Cargo.toml"

--- stderr
    Blocking waiting for file lock on package cache
   Compiling wasm-build-runner-impl v1.0.0 (/home/user/.opt/dothereum/target/debug/wbuild-runner/dothereum-runtime)
    Finished dev [unoptimized + debuginfo] target(s) in 1.62s
     Running `/home/user/.opt/dothereum/target/debug/wbuild-runner/dothereum-runtime/target/debug/wasm-build-runner-impl`
   Compiling dothereum-runtime v0.2.2 (/home/user/.opt/dothereum/runtime)
error[E0277]: the trait bound `Event: core::convert::From<paint_evm::Event>` is not satisfied
   --> /home/user/.opt/dothereum/runtime/src/lib.rs:255:2
    |
251 | impl evm::Trait for Runtime {
    | --------------------------- in this `impl` item
...
255 |     type Event = Event;
    |     ^^^^^^^^^^^^^^^^^^^ the trait `core::convert::From<paint_evm::Event>` is not implemented for `Event`
    |
    = help: the following implementations were found:
              <Event as core::convert::From<paint_balances::RawEvent<substrate_primitives::crypto::AccountId32, u128, paint_balances::DefaultInstance>>>
              <Event as core::convert::From<paint_grandpa::Event>>
              <Event as core::convert::From<paint_indices::RawEvent<substrate_primitives::crypto::AccountId32, u32>>>
              <Event as core::convert::From<paint_sudo::RawEvent<substrate_primitives::crypto::AccountId32>>>
              <Event as core::convert::From<paint_system::Event>>

error: aborting due to previous error

For more information about this error, try `rustc --explain E0277`.
error: could not compile `dothereum-runtime`.

To learn more, run the command again with --verbose.

What does the paint_evm module expect here. How can this be substituted?


Solution

  • The error here is misleading. The real problem here is that you did not put the EVM module into your construct_runtime! macro.

    You need to add this line to you construct_runtime! definition:

    EVM: evm::{Module, Call, Storage, Config, Event},
    

    To explain in a bit more detail, the construct_runtime! macro will implement the core::convert::From<YOUR_MODULE::Event> trait for each of YOUR_MODULEs. Because you did not include your module into the macro, it does not generate the trait implementation and you get the error you see here.

    This is why you see the error message suggest to you all of the other modules which do have this trait implemented, simply because they were included into your construct_runtime!.

    Once you add this line, you will get past the error you have shown here and find any real errors related to other parts of your configuration.