EIP-6120: Universal Token Router

ETH is designed with transfer-and-call as the default behavior in a transaction. Unfortunately, EIP-20 is not designed with that pattern in mind and newer standards (EIP-223, EIP-667, EIP-777, and EIP-995) are too late to replace EIP-20 as the de facto standard.

Application and router contracts have to use the approve-then-call pattern which costs additional n*m*l allow (or permit) transactions, for n contracts, m tokens, and l user addresses. These allowance transactions not only cost enormous amounts of user gas, waste network storage and throughput, and worsen user experience, but also put users at serious security risks as they often have to approve unaudited, unverified and upgradable proxy contracts.

The Universal Token Router (UTR) separates the token allowance from the application logic, allowing any token to be spent in a contract call the same way with ETH, without approving any other application contracts.

Tokens approved to the Universal Token Router can only be spent in transactions directly signed by their owner, and they have clearly visible token transfer behavior, including token types (ETH, EIP-20, EIP-721 or EIP-1155), amountInMax, amountOutMin, and recipient.

The Universal Token Router contract is counter-factually deployed using CREATE2 at a single address across all EVM-compatible networks, so new token contracts can pre-configure it as a trusted spender and no approval transaction is necessary ever again.

1 Like

New update has been merged with the following changes:

  • Using mode for input tokens and flags for action for better visibility
  • add IN_TX_PAYMENT input token mode for payment-in-callback style contracts (e.g. Uniswap/v3)
  • add ALLOWANCE_BRIDGE as a compatibility input token mode for contracts that directly called transferFrom for pull payment
  • add more Sample Usages for Uniswap/v3 swap and liquidity functionalities.