Saltar al contenido
0%

Cómo empezar a desarrollar en zkSync (2025)

Petar Todorov headshot

Escrito por Petar Todorov

Publicado el 5 de mayo de 20235 min de lectura

Matter Labs ahora tiene un representante en la carrera contra Scroll y Polygon por ejecutar el primer EVM de conocimiento cero del mundo: zkSync Era.

Lanzado en marzo de 2023, zkSync Era es un ZK Rollup compatible con EVM que utiliza pruebas de conocimiento cero para escalar la velocidad y capacidad de procesamiento de la red de Ethereum.

Desarrollar en zkSync tiene los beneficios de comisiones de gas bajas para ETH y tokens ERC20, además de swaps atómicos, órdenes límite y soporte nativo de NFT en Layer-2.

Este artículo explicará qué es zkSync Era y cómo desplegar un smart contract en la testnet pública de zkSync en cinco pasos.

¿Qué es zkSync era?

zkSync Era es una nueva solución Layer-2 de Matter Labs que combina pruebas ZK y tecnología de Ethereum Virtual Machine para escalar el throughput de la mainnet de Ethereum. Al combinar ambas tecnologías, zkSync Era permite transacciones de Ethereum más rápidas y seguras.

Además de la equivalencia completa con EVM, Era introduce el concepto de account abstraction al stack de Ethereum, propuesto inicialmente en EIP-4337.

Con account abstraction, las wallets se convierten en smart contracts que pueden tener características como un algoritmo de firma personalizado, transacciones patrocinadas y autenticación de dos factores.

Cómo empezar a desarrollar en zkSync era

El desarrollo en zkSync Era involucra en gran medida las mismas herramientas que usaría un desarrollador web3 para desplegar un contrato en Ethereum. Este tutorial cubrirá cómo desplegar un smart contract en la testnet pública de zkSync.

Requisitos previos

Para el tutorial, se necesita lo siguiente:

  • Clave privada de una wallet de Ethereum
  • Test ether
  • IDE Hardhat (Integrated Development Environment) con los plugins requeridos
  • Un gestor de paquetes (NPM o Yarn)
  • VScode
  • Comprensión básica de Typescript

1. Configurar un IDE para zkSync era

Primero, crea una carpeta para el proyecto.

Abre VScode (o la terminal de tu máquina) y escribe:

Luego, inicializa npm con el comando: npm init -y

La flag -y ahorra tiempo al rellenar previamente todos los campos de entrada del archivo package.json con sus valores por defecto.

Ahora que npm y la carpeta del proyecto están listos, instala las dependencias requeridas.‍

En la terminal de VScode, escribe:

Aquí está el desglose del comando:

  • $ npm i -D: Un alias para el comando install. La flag -D guarda todos los paquetes como dependencias de desarrollador.
  • $ typescript ts-node: instalación de Typescript y el motor de ejecución de Typescript para Node.js.
  • $ ethers@^5.7.2 zksync-web3@^0.13.1: Dos librerías que ayudan a desplegar e interactuar con el contrato.
  • $ hardhat: El IDE en uso.
  • $ @matterlabs/hardhat-zksync-solc @matterlabs/hardhat-zksync-deploy: Dos plugins de Hardhat que ayudan a compilar y desplegar el smart contract.

A continuación viene la inicialización del proyecto Hardhat.‍

En la terminal, escribe:

npx hardhat init

Selecciona 'Create a TypeScript Project' y presiona enter para rellenar previamente los siguientes campos con sus valores por defecto.

Así es como debería verse la estructura de carpetas del proyecto:

En la carpeta contracts, elimina el contrato Lock.sol, que se genera automáticamente por defecto ya que no será necesario.‍

El último paso de la configuración del IDE es ir al archivo hardhat.config.ts.

El archivo hardhat.config.ts es el 'centro de comando' que define estos parámetros para el despliegue:

  • Versión del compilador zkSync
  • Chain en la cual se desplegará el contrato
  • Versión del compilador de Solidity en la que se escribirá el contrato.

Elimina el contenido del archivo hardhat.config.ts y reemplázalo con lo siguiente:

La configuración del IDE ya está lista y el siguiente paso es crear el smart contract.

2. Crear el smart contract

El contrato que registrará el nombre y la edad de una persona.

Ve a la carpeta contracts en el directorio del proyecto y crea un nuevo archivo llamado Registry.sol‍

Luego, copia y pega el siguiente código del smart contract en el archivo:

El contrato debe compilarse antes del despliegue. En la terminal, escribe:

npx hardhat compile

3. Configurar una wallet para zkSync era

No es necesario crear una nueva wallet, ya que zkSync Era soporta wallets de Ethereum existentes.

Por lo tanto, se puede usar cualquier wallet existente como Metamask.

Nota: No se recomienda usar una wallet de Ethereum personal que almacene inversiones o ahorros, ya que el procedimiento de despliegue requiere exportar la clave privada.

4. Obtener Sepolia ETH de prueba y hacer bridge a zkSync era

Puede requerirse test ether en la testnet de zkSync Era para desplegar el contrato.

Para obtener algo de test ether, haz bridge de Sepolia ETH desde la wallet del deployer hacia su instancia en zkSync Era.

  • Para hacer esto, navega al faucet de Sepolia de Alchemy para obtener ether en Sepolia.

  • Crea una cuenta gratuita de Alchemy antes de continuar.

  • Luego, abre Metamask y haz clic en la dirección de la wallet para copiarla.

  • En la página del faucet, pega la dirección de la wallet y solicita Sepolia ETH.

A continuación, ve al bridge actual de Sepolia de zkSync Era.

Haz clic en "Connect via a browser wallet Metamask".

Selecciona la wallet que se usará para el despliegue del contrato.

Haz clic en MAX (o ingresa la cantidad que prefieras, pero asegúrate de que sea al menos 0.1 ETH) y haz clic en Deposit.

Nota: Verifica que la red de destino sea la testnet actual de Sepolia de zkSync Era.

Mientras esperas a que el bridging concluya, finaliza el despliegue creando el script de despliegue.

5. Crear un script de despliegue y exportar la clave privada

A continuación, crea un script de despliegue y exporta la clave privada desde Metamask, copia la clave privada y despliega el smart contract.

Aquí se explica cómo hacerlo:

Crear un script de despliegue

De vuelta en VSCode, renombra la carpeta scripts a deploy, y dentro, crea un archivo llamado deploy.ts.

Después, copia el siguiente código en el archivo:

Los comentarios, marcados con "//", explican la lógica del código.

Exportar la clave privada desde MetaMask

En Metamask, abre la wallet que se usó durante el bridging y exporta su clave privada.

Haz clic en los tres puntos verticales y luego en Account details, después en Export private key.

Ingresa la contraseña y copia la cadena revelada.

Pegar la clave privada y desplegar el smart contract

De vuelta en el archivo deploy.ts, busca la siguiente línea:

** const wallet = new Wallet("<WALLET-PRIVATE-KEY>");**

Pega la clave privada en el lugar de <WALLET-PRIVATE-KEY>.

Asegúrate de que las comillas dobles no se eliminen.

Finalmente, ve a la terminal de VScode y escribe: npx hardhat deploy-zksync

6. Verificar el smart contract a través del block explorer

Usa el block explorer de la testnet de zkSync Era para verificar el contrato desplegado.

Ve al block explorer. En la barra de búsqueda, pega la dirección del contrato desplegado.

Una vez que se encuentre el contrato, haz clic en la pestaña Contract y luego en Verify Smart Contract.

Luego, completa los detalles requeridos:

Contract Name debe ser "Registry".

Zksolc version - v1.3.

Solc version - 0.8.17.

Tanto Zksolc Version como Solc Version se pueden obtener del archivo hardhat.config.ts.

En el campo Enter the Solidity Contract Code, pega el contenido del archivo Registry.sol.

Haz clic en Verify Smart Contract para finalizar el proceso.

‍7. Interactuar con el contrato desplegado en ZkSync Era

En el block explorer, encuentra el contrato de nuevo por su dirección y haz clic en la pestaña Contract.

Esta vez, el block explorer debería mostrar dos nuevos campos:

  1. Read para las funciones getter
  2. Write para las funciones setter

Dado que la visibilidad del mapping personInfo se define como public, se genera automáticamente un método getter para él.

Asegúrate de que la wallet del deployer esté conectada al explorer. Haz clic en addPerson.

La sección se expandirá y aparecerán dos nuevos campos: uno para definir el nombre de la persona y otro para su edad.‍

Después de completarlos, haz clic en Write y confirma la transacción.

Después de que la transacción se confirme, haz clic en personInfo e ingresa el nombre de la persona que se acaba de agregar.

La GUI debería devolver la edad de la persona agregada.‍

Background gradient

Construye magia blockchain

Alchemy combina los productos y herramientas de desarrollo Web3 más potentes con recursos, comunidad y un soporte legendario.