
Esta es la guía definitiva sobre attestations. ¿Qué son? ¿Para qué sirven? ¿Importan? Vamos a ir de 0 a 100% con ejemplos prácticos y de actualidad para usuarios y desarrolladores. ¿Por qué estoy haciendo este artículo? Pienso que no son una moda, que serán una parte fundamental de web3 en áreas como gobernanza, DeFi, protección contra problemas de IA, entre otros. Además, en los últimos meses he tenido contacto directo con los creadores de EAS para entender más a profunidad este tema. Así que les invito a leer el artículo hasta el final donde voy a estar compartiendo tips avanzados.
Primeros casos de uso
EAS ya lanzó en Ethereum Mainnet y también en varias L2 como Optimism, Arbitrum, Scroll, Base y Línea. Aunque EAS es un proyecto bastante reciente, tenemos un par de aplicaciones que ya lanzaron o están próximas a lanzar. La que más me ha llamado la atención es la integración degitcoin passport que ayudará a simplificar el proceso por medio del cual demostrás tu prueba de humanidad. Otro caso de uso que me parece muy interesante es cómo EAS puede ayudar a Coinbase a cumplir con la complejidad de la regulación en Estados Unidos por medio deverificación on chain en Base. Y moviéndonos un poco del tema de identad, tenemos a Optimism RPGF que uso EAS para registrar a losBadge Holders,aplicaciones y más. Me encanta este ejemplo porque yo participé en la RPGF y ni me dí cuenta que lo estaba usando.
Casos de uso en el futuro
Te comparto a continuación los casos de uso que me parecen más relevantes a continuación
- Proof of trade, esto para construir reputación on-chain y abrir posibilidad de préstamos sin colateral o acceso a diferentes tipos de derivados
- Legaltech, RWA, firmas de intención, anteriormente trabajé en legaltech en web2 y veo cómo EAS puede mejorar el estándar de validez y respaldo de todo tipo de documentos legales
- Grafos de identidad descentralizada, pruebas de reputación, mecanismos anti sybil
- Prueba de humanidad, diferenciación entre AI y humanos, pruebas anti deepfake
Estos son mis casos de uso favoritos, para mas casos de uso consultaesta lista oficial de ideas.
Creemos una attestation desde el website
Puedes crear una attestation en base a un schema ya existente o crear el tuyo propio. Los schemas son el formato de en el que se realizarán las attestations y en este caso usaremos el schemaIs Human para attestar que el dueño de cierto address es humano. Para este ejemplo solo necesitas colocar tu billetera deMetamask (o cualquier wallet) en Scroll Sepolia, luego colocar el address al que le quieres hacer una attestation y hacer click enMake attestation
. Puedes elegir si deseas la attestation off-chain, o sea gratis, que puedes obtener únicamente firmando una transacción. O alternativamente puedes elegir hacerla on-chain y pagar por la transacción para que quede pública y además la puedas conectar a lógica de smart contracts. En este caso necesitarás obtener fondos en Scroll Sepolia a través de unaScroll Sepolia Faucet
Ejemplo avanzado: Attestaciones de Swap
Este contrato hace un attestations de swaps deWETH
aGHO
en Uni V3 en Scroll Sepolia. Es un ejemplo que te puede ayudar a entender cómo integrar EAS en cualquier protocolo de manera autónoma, todo a través de Smart Contracts. Para probarlo, puedes lanzar este contracto y llamar la funciónswap()
pasando como parámentro la cantidad deWETH
que deseas cambiar. Luego puedes ver en el schema correspondiente enEAS Scan tu attestation. Recuerda que debes tenerWETH
de antemano, puedes obtenerlo mediante la funcióndeposit()
aquí.
// SPDX-License-Identifier: MITpragmasolidity0.8.23;import{IEAS,AttestationRequest,AttestationRequestData,RevocationRequest,RevocationRequestData}from"@ethereum-attestation-service/eas-contracts/contracts/IEAS.sol";import{NO_EXPIRATION_TIME,EMPTY_UID}from"@ethereum-attestation-service/eas-contracts/contracts/Common.sol";structExactInputSingleParams{addresstokenIn;addresstokenOut;uint24fee;addressrecipient;uintamountIn;uintamountOutMinimum;uint160sqrtPriceLimitX96;}interfaceIUniswapV3Router{functionexactInputSingle(ExactInputSingleParamscalldataparams)externalpayablereturns(uintamountOut);}interfaceIERC20{functiontotalSupply()externalviewreturns(uint256);functionbalanceOf(addressaccount)externalviewreturns(uint256);functiontransfer(addressto,uint256value)externalreturns(bool);functionallowance(addressowner,addressspender)externalviewreturns(uint256);functionapprove(addressspender,uint256value)externalreturns(bool);functiontransferFrom(addressfrom,addressto,uint256value)externalreturns(bool);}contractSwapAttestation{addressWETH=0x5300000000000000000000000000000000000004;addressGHO=0xD9692f1748aFEe00FACE2da35242417dd05a8615;addressuniswapRouter=0x17AFD0263D6909Ba1F9a8EAC697f76532365Fb95;uint24poolFee=500;// 100 500 3000 10000addresseasAddress=0xaEF4103A04090071165F78D45D83A0C0782c2B2a;bytes32schema=0x5312f94781cdc373a4f16ddb71e8aee048bc0e3fac0819ca0258cc170c646a1d;functionswap(uintamountIn)public{IERC20(WETH).transferFrom(msg.sender,address(this),amountIn);IERC20(WETH).approve(uniswapRouter,amountIn);ExactInputSingleParamsmemoryparams=ExactInputSingleParams({tokenIn:WETH,tokenOut:GHO,fee:poolFee,recipient:msg.sender,amountIn:amountIn,amountOutMinimum:0,sqrtPriceLimitX96:0});uintamountOut=IUniswapV3Router(uniswapRouter).exactInputSingle(params);IEAS(easAddress).attest(AttestationRequest({schema:schema,data:AttestationRequestData({recipient:msg.sender,expirationTime:NO_EXPIRATION_TIME,revocable:false,refUID:EMPTY_UID,data:abi.encode(WETH,GHO,amountIn,amountOut),value:0// No value/ETH})}));}}
¿Qué más puedo hacer con las Attestations?
Ahora que ya experimentamos las attestations, exploremos las posibilidades que nos ofrece EAS con ejemplos.
- Puedes crear schemas desdeel código o desdeEAS Scan.
- Puedes hacerattestation revocables.
- Puedes colocar callbacks para ejecutar cualquier código luego de cada attestation por medio deResolvers. Esto puede ayudar a automatizar tareas y a conectar EAS con el resto de ecosistema de Smart Contracts.
- Puedes hacer attestationexpirables.
- Puedes verificar attestationsgratis y offchain.
Herramientas interesantes para desarrollar attestation
- Attestations privadas, hacemos una attestation a un merkle root manteniendo encriptada la información almacenada en los nodos hoja.
- Verficación de firmas de Account Abstractionusando el EIP 1271.
- Indexador opensource.
- Metamask Snap que permite a los usuarios decodificar los mensajes que están firmando para una mejor UX.
Antes de diseñar tus attestations asegúrate de esto
Recientemente mientras diseñaba mis attestations tuve la oportunidad de platicar con el equipo de desarrollo de EAS. Yo les mostré un diseño de un schema muy similar a este a continuación, sobre attestations de ratings de libros.
- Book Rating Schema
- Book name
- Author name
- Rating
El equipo de EAS me advirtió que al momento de diseñar attestations muchas veces es mejor hacer "Attestations de attestations" para mantener un mejor orden y ahorrar gas. Me recomendó hacer 2 esquemas como detallo a continación:
- Book Schema
- Name
- Author name
- Book Rating Schema
- Book UID
- Rating
DondeBook UID
es una referencia a una attestation deBook Schema
ya existente. Así es más fácil de indexar la información y hacer búsquedas de todas las attestation de un libro. Además que nos ahorramos el gas de guardar el detalle de cada libro (Autor y Nombre) para cada attestation.
¡Gracias por leer este artículo!
Sígueme en dev.to y enYoutube para todo lo relacionado al desarrollo en Blockchain en Español.
Top comments(0)
For further actions, you may consider blocking this person and/orreporting abuse