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.


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


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: 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.