Recuerdo cuando empecé a escuchar de la blockchain y que se podían programar contratos inteligentes abriendo un abanico enorme de potenciales aplicaciones donde podemos etiquetarnos como desarrolladores de “smart contracts” (contratos inteligentes), a mi manera de ver, seríamos como el backend en la web3. Mientras la tecnología de Ethereum se iba popularizando (capa 1) aparecieron nuevos desafíos y con ellos nuevos recursos que debemos estudiar para estar a la vanguardia. Actualmente, tenemos soluciones de capa 2 y en esta ocasión vamos a hablar específicamente de zkSync y cómo puedes empezar a desarrollar con ella.

Si no se te hace familiar zkSync, no te preocupes aquí te lo explicamos.   


Índice


Descripción general del zkSync

zkSync Era es un ZK-rollup, un protocolo sin confianza que utiliza pruebas de validez criptográficas para proporcionar transacciones escalables y de bajo costo en Ethereum. 
El flujo de trabajo de este zk-rollup es el siguiente:

  • Los usuarios pueden recibir, depositar y transferir activos entre sí.
  • Los usuarios pueden retirar activos bajo su control a una dirección L1.

Las operaciones rollup requieren la asistencia de un operador, quien agrupa las transacciones, calcula la prueba ZK de la transacción de estado correcta, y afecta la transición de estado al interactuar con el contrato rollup. Para comprender el diseño, debemos analizar cómo funcionan las transacciones rollup de zkSync.

Las operaciones de zkSync se dividen en transacciones rollup (iniciadas dentro del paquete rollup por una cuenta rollup) y operaciones prioritarias (iniciadas en la cadena principal por una cuenta Ethereum).

Los ciclos de vida de las operaciones rollup de zkSync son los siguientes:

  • Un usuario crea una transacción o una operación prioritaria. 
  • Después de procesar esta solicitud, el operador crea una operación rollup y la agrega al bloque. 
  • Una vez que se completa el bloque, el operador lo envía al contrato inteligente zkSync como un compromiso de bloque. El contrato inteligente verifica parte de la lógica de algunas operaciones rollup. 
  • La prueba del bloque se envía al contrato inteligente de zkSync como verificación del bloque. Si la verificación tiene éxito, el nuevo estado se considera definitivo.

Además, en zkSync, cada bloque L2 avanzará a través de las siguientes cuatro etapas hasta que sea final:

  • Pending: La transacción fue recibida por el operador, pero aún no ha sido procesada.
  • Processed: La transacción es procesada por el operador y se confirma su inclusión en el siguiente bloque.
  • Commited: Esto indica que los datos de la transacción de este bloque se publicaron en Ethereum. No prueba que se haya ejecutado de forma válida, pero asegura la disponibilidad de los datos del bloque.
  • Finalized: Esto indica que la prueba de validez de SNARK para la transacción ha sido enviada y verificada por el contrato inteligente. Después de este paso, la transacción se considera definitiva.

El tiempo típico para que una transacción pase de Processed a Finalized es de un par de horas en la etapa actual.

Mis queridos desarrolladores tengan en cuenta que, para su comodidad, generalmente se trata a los estados Processed y Commited como una sola etapa llamada Commited, ya que no tienen diferencias desde el punto de vista de UX/DevEx.

Alcance actual de zkSync

La versión actual de zkSync Era resuelve las necesidades de la mayoría de las aplicaciones en Ethereum y proporciona a los desarrolladores un espacio de diseño para experimentar con aplicaciones que hoy no son posibles en Ethereum. Con esta versión, se admiten las siguientes funciones:

  • Soporte nativo de firmas ECDSA: no se requiere ninguna operación especial para registrar la clave privada del usuario. Cualquier cuenta se puede administrar en L2 con la misma clave privada que se usa para L1.
  • Compatibilidad con Solidity 0.8.x: implementa tu código base existente con pocos o ningún cambio requerido.
  • Con pequeñas excepciones, la API Web3 es totalmente compatible con Ethereum. Esto permite una integración perfecta con indexadores, exploradores, etc.
  • Compatibilidad con primitivas criptográficas de Ethereum: zkSync admite de forma nativa keccak256, sha256 y ecrecover mediante precompilaciones.
  • Hardhat plugin: permite probar y desarrollar fácilmente contratos inteligentes en zkSync.
  • Mensajería de contratos inteligentes L1 → L2: permite a los desarrolladores pasar datos de Ethereum a contratos inteligentes en zkSync, proporcionando la información necesaria para ejecutar varios contratos inteligentes.
  • Account Abstraction nativa: esto aporta múltiples mejoras de UX para todas las cuentas.

UX en zkSync Era

  • Las transacciones tienen confirmaciones instantáneas y una finalidad rápida en L1.
  • Las fees de las transacciones son extremadamente bajas.
  • Las fees de las transacciones se pueden pagar cómodamente con tokens ERC20.
  • Soporte para billeteras existentes basadas en Ethereum como Metamask, TrustWallet o Zerion.

Experiencias del desarrollador en zkSync Era

  • Los contratos inteligentes se pueden escribir en Solidity o Vyper.
  • La mayoría de los contratos funcionan de forma inmediata, por lo que la migración de proyectos es perfecta.
  • La compatibilidad con la API Web3 permite la compatibilidad con la mayoría de las herramientas de desarrollo.
  • Para mayor facilidad usa los frameworks existentes como Hardhat y Foundry.
  • Compile contratos inteligentes con compiladores personalizados: zksolc y zkvyper.
  • Disponibilidad de diferentes herramientas para realizar pruebas localmente.

Deploy un “Hola Mundo” en ZkSync usando Remix

  1. Abre remix
  2. En Remix busca el plugin “zkSync” y habilítalo. Los plugins los encuentras al hacer clic en este ícono: que se encuentra al lado izquierdo inferior del Remix.
  3. En el Explorador de Archivos del Remix, crea el siguiente contrato inteligente Greeter.sol que contenga el siguiente código:

//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.8;

contract Greeter {
    string private greeting;

    constructor(string memory _greeting) {
        greeting = _greeting;
    }

    function greet() public view returns (string memory) {
        return greeting;
    }

    function setGreeting(string memory _greeting) public {
        greeting = _greeting;
    }
}

4. Compilar el contrato inteligente haciendo clic en el ícono ZkSync
5. Para nuestro ejemplo vamos a configurar nuestro ambiente (Enviroment) en Remote Devnet, desde el cual tendrás acceso a 10 cuentas para jugar.

6. Hacer deploy del contrato, seleccionando nuestro contrato Greeter y haciendo clic en el botón Deploy.  

Remix "Hola Mundo" zksync

7. Puedes interactuar con las funciones del contrato en la sección Interact.

Interact "Hola Mundo" zkSync

8. Luego de interactuar con el contrato “deployado” puedes ver las transacciones en la pestaña “Transactions”; también puedes hacer clic en cada transacción para ver más detalles o consultarlos en el explorador de bloques si estuvieran en la red de prueba.

Transactions "Hola Mundo" zkSync

Eso es todo, te invito a probar zkSync y empezar a crear tus propios contratos inteligentes en Capa 2. Si deseas explorar más a fondo, te invito a revisar la documentación que tiene el protocolo zkSync disponible en su web

También te puede interesar