Guía Práctica de EIP-7702: Agrupa Transacciones y Controla Privilegios en Ethereum

EIP-7702 introduce un nuevo tipo de transacción que permite a las billeteras tipo EOA (también conocidas como "wallets normales") convertirse tempralmente en contratos inteligentes de una manera sencilla, evitando la necesidad de crear y mantener una Smart Wallet. Esto permite una variedad de mejoras en la experiencia del usuario, como la agrupación de transacciones, el patrocinio de gas y la configuración de privilegios granular. En este artículo, exploraremos el alcance de EIP-7702 y realizaremos un ejemplo práctico para desarrolladores, y así demostrar cómo se puede usar para agrupar transacciones, permitiendo a los usuarios realizar múltiples acciones en una sola transacción. Alcance y Uso del EIP-7702 Profundicemos en los casos tres casos de uso más importantes de EIP-7702. 1. Agrupación de Transacciones Esta funcionalidad mejora la experiencia del usuario en cualquier dApp al permitir combinar múltiples acciones en una sola transacción. El caso de uso más obvio es aprobar y transferir tokens en un solo paso, como aprobar que un DEX use tus tokens y luego ejecutar el swap. Pero también permite a los usuarios realizar operaciones complejas con un solo click, como depositar colateral y sacar un préstamo en una sola transacción, o interactuar con múltiples protocolos sin necesidad de firmar varias veces. Esto no solo mejora la experiencia del usuario, sino que también aumenta la seguridad al minimizar el riesgo de errores o ejecuciones parciales. 2. Patrocinio de Gas El patrocinio de gas hace que Ethereum sea más accesible al permitir que los usuarios ejecuten transacciones sin tener ETH en sus billeteras para pagar la comisiones de gas. Los usuarios firman una transacción segura, que se publica para que un patrocinador pague el gas por ellos y la ejecute en on-chain. Los patrocinadores podrían recuperar sus costos a través de mécánicas previamente definidas con EIP-7702 que los recompensen por ejecutar transacciones, o podrían no ser reembolsados, como parte de una estrategia comercial, como dApps que cubren el gas de sus usuarios para incorporar nuevos usuarios y fomentar la adopción. 3. Control de Privilegios Granular También conocido como desescalamiento de privilegios, puede integrarse en billeteras para especificar controles de acceso a fondos o cualquier acción en general. Por ejemplo, puedes establecer un estipendio diario que define la cantidad de tokens que una billetera puede gastar. Alternativamente, puedes determinar y restringir las interacciones a contratos inteligentes específicos, como permitir que un agente de trading de IA solo interactúe con ciertos pares de tokens en DEXes específicos. Puedes pensar en esto como una billetera personal con la seguridad de un MultiSig, pero diseñada para ser tan simple e intuitiva como una billetera estándar. Nota: Por razones de seguridad, la implementación de EIP-7702 debe manejarse a nivel de billetera, no a nivel de aplicación. Sin embargo, es muy importante que tanto los desarrolladores de dApps como los usuarios comprendan cómo funciona esta función para construir mejores productos y usarlos de manera más segura. Ejemplo práctico: Implementación e interacción con contratos usando EIP-7702 En este tutorial paso a paso, implementaremos un contrato de prueba donde los usuarios depositan tokens, similar a intercambiar en Uniswap o depositar colateral en Aave. Normalmente, esto requeriría dos transacciones: una para aprobar el contrato y otra para depositar los tokens. Con EIP-7702, mostraremos cómo agruparlas en una sola transacción. Paso 1: Lanzar Contratos de Prueba Al momento de escribir este artículo, EIP-7702 ya está implementado en la testnet Holesky. Conéctate a la testnet Holesky (TODO). Conectate a Holesky Primero, instala una billetera como MetaMask o Rabby como extensión de navegador. Para conectarte a Holesky puedes hacerlo a través de Chainlist.org dándo clic en "Conectar a Metamask" o manualmente usando los siguientes detalles: Primero seleciona la opción de agregar red desde tu billetera. Seleciona la opción de agregar red desde tu billetera Luego coloca los siguientes datos. Nombre de la red: Holesky RPC URL: https://1rpc.io/holesky (el nombre puede ir en blanco, y una URL es suficiente) Chain ID: 17000 Símbolo de moneda: ETH Explorador de bloques: https://holesky.etherscan.io/ También puedes agregar la red de Holesky de manera manual. Obtén fondos de Testnet Visita la Faucet de Alchemy, inicia sesión con una cuenta de Alchemy y coloca la address de tu billetera de ethereum (Metamask, Rabby, ...). Nota que debes tener al menos 0.001 ether reales (en Ethereum Mainnet) en esa billetera para obtener fondos de prueba. Inicia sesión o crea una cuenta de Alchemy, coloca tu address y recibe tokens de prueba gratis. Alternativamente, puedes pedirme fondos directamente taggeando mi usuario @turupawn en Discord, puedes encontrar el link a mi server

Mar 20, 2025 - 20:16
 0
Guía Práctica de EIP-7702: Agrupa Transacciones y Controla Privilegios en Ethereum

EIP-7702 introduce un nuevo tipo de transacción que permite a las billeteras tipo EOA (también conocidas como "wallets normales") convertirse tempralmente en contratos inteligentes de una manera sencilla, evitando la necesidad de crear y mantener una Smart Wallet. Esto permite una variedad de mejoras en la experiencia del usuario, como la agrupación de transacciones, el patrocinio de gas y la configuración de privilegios granular.

En este artículo, exploraremos el alcance de EIP-7702 y realizaremos un ejemplo práctico para desarrolladores, y así demostrar cómo se puede usar para agrupar transacciones, permitiendo a los usuarios realizar múltiples acciones en una sola transacción.

Alcance y Uso del EIP-7702

Profundicemos en los casos tres casos de uso más importantes de EIP-7702.

  • 1. Agrupación de Transacciones

EIP 7702 Agrupación de Transacciones

Esta funcionalidad mejora la experiencia del usuario en cualquier dApp al permitir combinar múltiples acciones en una sola transacción. El caso de uso más obvio es aprobar y transferir tokens en un solo paso, como aprobar que un DEX use tus tokens y luego ejecutar el swap. Pero también permite a los usuarios realizar operaciones complejas con un solo click, como depositar colateral y sacar un préstamo en una sola transacción, o interactuar con múltiples protocolos sin necesidad de firmar varias veces. Esto no solo mejora la experiencia del usuario, sino que también aumenta la seguridad al minimizar el riesgo de errores o ejecuciones parciales.

  • 2. Patrocinio de Gas

EIP7702 Patrocinio de Gas

El patrocinio de gas hace que Ethereum sea más accesible al permitir que los usuarios ejecuten transacciones sin tener ETH en sus billeteras para pagar la comisiones de gas. Los usuarios firman una transacción segura, que se publica para que un patrocinador pague el gas por ellos y la ejecute en on-chain. Los patrocinadores podrían recuperar sus costos a través de mécánicas previamente definidas con EIP-7702 que los recompensen por ejecutar transacciones, o podrían no ser reembolsados, como parte de una estrategia comercial, como dApps que cubren el gas de sus usuarios para incorporar nuevos usuarios y fomentar la adopción.

  • 3. Control de Privilegios Granular

Control de Privilegios Granular con EIP-7702

También conocido como desescalamiento de privilegios, puede integrarse en billeteras para especificar controles de acceso a fondos o cualquier acción en general. Por ejemplo, puedes establecer un estipendio diario que define la cantidad de tokens que una billetera puede gastar. Alternativamente, puedes determinar y restringir las interacciones a contratos inteligentes específicos, como permitir que un agente de trading de IA solo interactúe con ciertos pares de tokens en DEXes específicos. Puedes pensar en esto como una billetera personal con la seguridad de un MultiSig, pero diseñada para ser tan simple e intuitiva como una billetera estándar.

Nota: Por razones de seguridad, la implementación de EIP-7702 debe manejarse a nivel de billetera, no a nivel de aplicación. Sin embargo, es muy importante que tanto los desarrolladores de dApps como los usuarios comprendan cómo funciona esta función para construir mejores productos y usarlos de manera más segura.

Ejemplo práctico: Implementación e interacción con contratos usando EIP-7702

En este tutorial paso a paso, implementaremos un contrato de prueba donde los usuarios depositan tokens, similar a intercambiar en Uniswap o depositar colateral en Aave. Normalmente, esto requeriría dos transacciones: una para aprobar el contrato y otra para depositar los tokens. Con EIP-7702, mostraremos cómo agruparlas en una sola transacción.

Paso 1: Lanzar Contratos de Prueba

Al momento de escribir este artículo, EIP-7702 ya está implementado en la testnet Holesky. Conéctate a la testnet Holesky (TODO).

Conectate a Holesky

Primero, instala una billetera como MetaMask o Rabby como extensión de navegador. Para conectarte a Holesky puedes hacerlo a través de Chainlist.org dándo clic en "Conectar a Metamask" o manualmente usando los siguientes detalles:

Primero seleciona la opción de agregar red desde tu billetera.

Agrega Red desde Metamask
Seleciona la opción de agregar red desde tu billetera

Luego coloca los siguientes datos.

  • Nombre de la red: Holesky
  • RPC URL: https://1rpc.io/holesky (el nombre puede ir en blanco, y una URL es suficiente)
  • Chain ID: 17000
  • Símbolo de moneda: ETH
  • Explorador de bloques: https://holesky.etherscan.io/

Holesky Testnet Metamask agregar de manera manual
También puedes agregar la red de Holesky de manera manual.

Obtén fondos de Testnet

Visita la Faucet de Alchemy, inicia sesión con una cuenta de Alchemy y coloca la address de tu billetera de ethereum (Metamask, Rabby, ...). Nota que debes tener al menos 0.001 ether reales (en Ethereum Mainnet) en esa billetera para obtener fondos de prueba.

Fondos de Sepolia gratis en la faucet de Alchemy
Inicia sesión o crea una cuenta de Alchemy, coloca tu address y recibe tokens de prueba gratis.

Alternativamente, puedes pedirme fondos directamente taggeando mi usuario @turupawn en Discord, puedes encontrar el link a mi server en mi video de youtube mas reciente. En caso de no estar vigente puedes pedirme un nuevo link a través de un comentario en el video.

Recuerda, los fondos de prueba en Testnet no tienen un valor monetario.

Contrato de depósito

Este contrato permite a los usuarios depositar y retirar tokens ERC-20.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

interface IERC20 {
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

contract ERC20Deposit {
    mapping(address => mapping(address => uint256)) public balances;

    function deposit(address _token, uint256 _amount) external {
        require(_amount > 0, "Amount must be greater than zero");
        require(IERC20(_token).transferFrom(msg.sender, address(this), _amount), "Transfer failed");
        balances[msg.sender][_token] += _amount;
    }

    function withdraw(address _token, uint256 _amount) external {
        require(balances[msg.sender][_token] >= _amount, "Insufficient balance");
        balances[msg.sender][_token] -= _amount;
        require(IERC20(_token).transfer(msg.sender, _amount), "Transfer failed");
    }
}

Contrato de token ERC-20

Este es un contrato simple de token ERC-20 para pruebas.

// SPDX-License-Identifier: MIT
// Compatible with OpenZeppelin Contracts ^5.0.0
pragma solidity ^0.8.22;

import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract MyToken is ERC20 {
    constructor() ERC20("MyToken", "MTK") {
        _mint(msg.sender, 21000000 ether);
    }
}

Paso 2: Configurar la Delegación de tu Billetera

Antes de enviar transacciones, vas a configurar tu billetera para imitar Multicall, un contrato que permite la agrupación de transacciones.

Configurar las variables de entorno

Ejecuta lo siguiente reemplazando YOUR_WALLET_ADDRESS y YOUR_PRIVATE_KEY con los detalles de tu billetera. Y YOUR_TOKEN_ADDRESS y YOUR_DEPOSITERC20_ADDRESS con los dos contratos que acabas de lanzar.

my_wallet="YOUR_WALLET_ADDRESS"
my_wallet_pk="YOUR_PRIVATE_KEY"

# Dirección de Contratos que recién lanzaste
mytoken="YOUR_TOKEN_ADDRESS"
depositcontract="YOUR_DEPOSITERC20_ADDRESS"
multicall="0xcA11bde05977b3631167028862bE2a173976CA11"

# Vas a enviar un token, en formato wei
amount="1000000000000000000"

# Vas a conectarte a la red de Holesky
rpc_url="https://ethereum-holesky-rpc.publicnode.com"

Revisamos el código actual de tu wallet

Antes de la delegación, el código de tu wallet debería retornar 0x.

cast code --rpc-url $rpc_url "$my_wallet"

Ejecuta la Delegación EIP-7702

Delega tu wallet para que actúe como el contrato de Multicall.

cast send --rpc-url $rpc_url --from "$my_wallet" --private-key "$my_wallet_pk" --auth "$multicall" $(cast az)

Verifica tu Delegación

Despúes de la delegación, el código de tu wallet debería devolver 0xef0100ca11bde05977b3631167028862be2a173976ca11, donde 0xef0100 es el prefijo de delegación y ca11bde05977b3631167028862be2a173976ca11 es la dirección de Multicall.

cast code --rpc-url $rpc_url "$my_wallet"

Paso 3: Envía una Transacción con EIP-7702

Ahora que tu billetera está lista, envía una transacción agrupadata con EIP-7702.

Construye una sequencia de llamadas

Agrupa tres acciones: aprobar tokens, deposítalos y resetea la aprobación a 0.

calls=()

calldata=$(cast calldata "approve(address spender, uint256 value)" "$depositcontract" "$amount")
calls+=("($mytoken, false, 0, $calldata)")

calldata=$(cast calldata "deposit(address _token,uint256 _amount)" "$mytoken" "$amount")
calls+=("($depositcontract, false, 0, $calldata)")

calldata=$(cast calldata "approve(address spender, uint256 value)" "$depositcontract" "0")
calls+=("($mytoken, false, 0, $calldata)")

Envía la transacción

Ahora ejecuta la transacción agrupada.

Si estás usando Linux corre este comando.

cast send --rpc-url $rpc_url --from "$my_wallet" --unlocked "$my_wallet" "aggregate3Value((address,bool,uint256,bytes)[] calldata calls)" "[${calls[0]}, ${calls[1]}, ${calls[2]}]"

Si estás usando MacOs, corre este.

cast send --rpc-url $rpc_url --from "$my_wallet" --unlocked "$my_wallet" "aggregate3Value((address,bool,uint256,bytes)[] calldata calls)" "[${calls[1]}, ${calls[2]}, ${calls[3]}]"

EIP7702 transaction in etherscan
You should be able to see your batched transactions on Holesky Etherscan marked as self.

Conclusion

EIP-7702 es un paso significativo hacia la mejora de la experiencia del usuario en Ethereum, simplificando las transacciones y permitiendo a los usuarios realizar múltiples acciones en una sola transacción. Al permitir que las EOAs actúen temporalmente como contratos inteligentes, EIP-7702 permite funciones como la agrupación de transacciones, el patrocinio y el control de privilegios detallado.

Para aprender más sobre los detalles técnicos de EIP-7702, visita el EIP original, está explicación sobre los cambios que se vienen en la actualización Pectra y únete a conversación en el foro de los Ethereum Magicians.