IMPERSONATECALL Opcode

I would like to open the discussion about a proposal for a new opcode named IMPERSONATECALL that calls other contracts and replaces the msg.sender at the same time. It saves gas and simplifies several use cases regarding meta-transactions and sponsored wallets.
You can read the proposal here:

The idea is that a contract can impersonate child contracts (created with a derivation similar, but not equal, to CREATE2). Therefore there is no practical risk that the caller impersonates a third party contract.

This opcode enables the creation of multi-user wallets, where each user is given a separate non-custodial smart-wallet having its own address for storing ethers and tokens, yet no contract code is deployed, and a main-wallet contract retains the common functionality (i.e. social private key recovery). Wallets are accessed by a meta-transaction system (i.e using EIP-712) embedded in the multi-user wallet contract.
Even if the same functionality can be achieved by using counterfactual contract creation, this solution is attractive because:

  • It’s much simpler to design and less error prone.
  • It provides the sponsor huge gas savings, removing the need for the deployment of thousands of wallets.

I’m sure there are plenty more use cases that can benefit from this opcode.

4 Likes

As IMPERSONATECALL sounds like a risky thing (it’s not), somebody suggested I rename it CALLFROM.

3 Likes

The EIP has been assigned a final number and, after reviews, it was accepted to the EIP repository. You can read the latest version here:

https://ethereum-magicians.org is usually the preferred place for EIP discussions :slight_smile:

1 Like

thanks for the tip!

The discussion has been moved to :

Please follow that link while I correct the EIP link.