Skip to content
Snippets Groups Projects
  • PG Herveou's avatar
    [pallet-revive] Eth RPC integration (#5866) · 21930ed2
    PG Herveou authored
    
    This PR introduces the necessary changes to pallet-revive for
    integrating with our Ethereum JSON-RPC.
    The RPC proxy itself will be added in a follow up.
    
    ## Changes
    
    - A new pallet::call `Call::eth_transact`. This is used as a wrapper to
    accept unsigned Ethereum transaction, valid call will be routed to
    `Call::call` or `Call::instantiate_with_code`
    
    - A custom UncheckedExtrinsic struct, that wraps the generic one usually
    and add the ability to check eth_transact calls sent from an Ethereum
    JSON-RPC proxy.
    - Generated types and traits to support implementing a JSON-RPC Ethereum
    proxy.
    
    ## Flow Overview:
    - A user submits a transaction via MetaMask or another
    Ethereum-compatible wallet.
    - The proxy dry run the transaction and add metadata to the call (gas
    limit in Weight, storage deposit limit, and length of bytecode and
    constructor input for contract instantiation)
    - The raw transaction, along with the additional metadata, is submitted
    to the node as an unsigned extrinsic.
    - On the runtime, our custom UncheckedExtrinsic define a custom
    Checkable implementation that converts the unsigned extrinsics into
    checked one
     - It recovers the signer
    - validates the payload, and injects signed extensions, allowing the
    system to increment the nonce and charge the appropriate fees.
    - re-route the call to pallet-revive::Call::call or
    pallet-revive::Call::instantiateWithCode
    
    ## Dependencies
    
    - https://github.com/koute/polkavm/pull/188
    
    ## Follow up PRs
    - #5926  
    - #6147 (previously #5953)
    - #5502
    
    ---------
    
    Co-authored-by: default avatarAlexander Theißen <alex.theissen@me.com>
    Co-authored-by: default avatarCyrill Leutwiler <cyrill@parity.io>
    Unverified
    21930ed2
Code owners
Assign users and groups as approvers for specific file changes. Learn more.