Glosario cripto
CREATE2 y direcciones contrafactuales
CREATE2 es un opcode de la EVM que despliega contratos en una dirección calculada de antemano, de modo que puede usarse antes de que el contrato exista.
Con el opcode original, CREATE, la dirección de un contrato nuevo depende de quién lo despliega y de su número de transacciones, algo difícil de prever. CREATE2, añadido en la actualización Constantinople de 2019 mediante la EIP-1014, la deriva del desplegador, de una sal elegida y del hash del código de creación. Quien conozca esos datos puede calcular la dirección antes del despliegue: es lo que se llama dirección contrafactual.
Buena parte del diseño moderno de wallets se apoya en esto. Una cuenta inteligente puede mostrar al usuario una dirección para recibir fondos desde el primer momento y desplegar el contrato solo cuando se envía la primera transacción, ahorrando gas. Las fábricas lo usan para desplegar el mismo contrato en la misma dirección en muchas cadenas, y protocolos como los exchanges descentralizados localizan así las direcciones de sus pools sin guardar tablas.
Tiene trampas. Los fondos enviados a una dirección en una cadena donde nunca se desplegó el contrato pueden quedar perdidos, o en manos de quien lo despliegue primero si la fábrica lo permite, como ocurrió en 2022 con una pérdida conocida de tokens en Optimism. Coincidir en dirección no garantiza el mismo código ni dueño.
Ejemplo
Una smart wallet nueva muestra al usuario su dirección de recepción al instante; el contrato de la cuenta solo se despliega, mediante CREATE2, cuando hace su primer pago.
