
Presentación magistral de ZK Compression: Breakpoint 2024
Tabla de contenido
- ZK Compression: llévalo a cero
- Compresión de estado + ZK
- ¿Por qué ZK Compression?
- PDA comprimidas
- Mejoras de componibilidad
- Descompresión
- Tokens comprimidos
- ¿Cómo funciona ZK Compression?
- Un bosque de árboles de estado
- Comparación con la compresión de cuentas SPL existente
- Light System Program y Compressed Token Program
- Nodos Forester
- Photon
- Creado por desarrolladores, para desarrolladores
- Airship
- Un nuevo espacio de diseño para aplicaciones
A continuación, encontrarás un resumen y los puntos clave de la presentación magistral y la sesión de preguntas y respuestas sobre ZK Compression en la conferencia Breakpoint 2024, a cargo de Swen Schaeferjohann, cofundador de Light Protocol, y Nicolas Pennie, cofundador de Helius. La presentación explora ZK compression: qué es, cómo funciona y, lo más importante, por qué es crucial para el futuro de Solana.
Descarga las diapositivas de la presentación.
ZK Compression: llévalo a cero
Algo que los desarrolladores descubren rápidamente al trabajar con Solana es que, aunque el cómputo es relativamente económico, almacenar datos cuesta mucho. Por ejemplo, con un precio de SOL de $150, crear 1,000 cuentas de tokens cuesta unos $300, mientras que crear un millón de cuentas costaría $300,000. Esto hace que escalar aplicaciones para una gran base de usuarios sea financieramente inviable, ya que estos costos aumentan con el precio de SOL. Además, el crecimiento del estado es un desafío para todas las blockchains con estado. A medida que se crean cuentas, deben pagarse tarifas de renta para mantenerlas, lo que resulta costoso. Actualmente, Solana tiene más de 500 millones de cuentas y se agregan alrededor de un millón de cuentas nuevas al día.
ZK compression resuelve estos problemas al ofrecer:
- Cuentas mil veces más económicas
- Una solución para el crecimiento del estado
- Una base para el cómputo ZK en Solana
Compresión de estado + ZK
Para entender ZK compression, primero analicemos la compresión de estado, que consta de cinco etapas clave:
- Millones de cuentas → «huella digital»
- Almacenar la huella digital on-chain
- Almacenar el historial de las cuentas en el libro mayor de Solana
- Guardar en caché el estado más reciente de las cuentas con un indexador
- Verificar el estado de las cuentas comprimidas mediante la «huella digital» on-chain
Comenzamos comprimiendo millones de cuentas de Solana y aplicándoles un hash para generar una «huella digital» compacta. Esta huella se almacena en una cuenta on-chain, mientras que todos los datos subyacentes de las cuentas siguen disponibles en el libro mayor de Solana. Para garantizar la validez de estas cuentas off-chain, usamos un mecanismo de prueba que verifica su integridad mediante la huella digital on-chain. El paso final de este proceso utiliza SNARK de conocimiento cero, que impulsan el sistema de pruebas encargado de verificar la integridad de estas cuentas.
¿Por qué ZK Compression?
Varias características clave hacen de ZK compression una solución ideal para comprimir el estado. Por ejemplo, las cuentas comprimidas funcionan de forma similar a las cuentas estándar de Solana. Esto permite que los desarrolladores aprovechen sus conocimientos y técnicas actuales con una curva de aprendizaje mínima. Así se reduce la barrera de entrada y se facilita la adopción de ZK compression.
La API que expone el indexador refleja de cerca las llamadas RPC existentes. Por ejemplo, el método getAccountInfo se asigna directamente a getCompressedAccount, y esta correspondencia uno a uno se extiende a toda la API RPC. Esta coherencia simplifica la integración de ZK compression con las herramientas y los flujos de trabajo existentes de Solana.
PDA comprimidas
Una característica clave de este sistema es su compatibilidad con direcciones derivadas de programas (PDA) comprimidas. Las PDA son direcciones de cuentas deterministas que pueden derivarse de forma consistente mediante una dirección de programa y una semilla específicas. Las PDA comprimidas ayudan a eliminar problemas como las condiciones de carrera, las colisiones de direcciones o la creación accidental de varias cuentas para la misma combinación de dirección de programa y semilla. Esta mejora es una de las principales razones para migrar del sistema actual de compresión de cuentas SPL a ZK compression.
Con compatibilidad total con ZK compression, el impacto potencial en Solana es considerable. Las PDA y la capacidad de combinar programas permiten crear arquitecturas más complejas que involucran varios programas y distintas PDA, lo que reproduce la experiencia habitual de desarrollar aplicaciones tradicionales. Esto puede lograrse por una fracción del costo, con una reducción de hasta mil veces en los gastos de las cuentas. Esta drástica reducción de costos permitirá nuevos casos de uso que antes eran inviables.
Mejoras de componibilidad
Todo se ejecuta directamente en Solana: no es una L2 ni un validium. El libro mayor de Solana proporciona automáticamente la disponibilidad de los datos, lo que garantiza una ejecución verificable y totalmente componible.
Las pruebas de conocimiento cero reducen el tamaño de las pruebas a un valor constante de 128 bytes. Esto libera más espacio en cada transacción para otras operaciones y facilita la componibilidad y la incorporación de actividades adicionales. El tamaño de las pruebas se mantiene constante sin importar cuántas cuentas se actualicen, lean o escriban en una sola transacción, ni cuántas inclusiones o exclusiones deban demostrarse. Esto es esencial porque las transacciones de Solana son inherentemente pequeñas (1.2 kilobytes). Para lograr tiempos de prueba rápidos, fue necesario usar una función hash diferente en los árboles de Merkle de estado. Por eso no pudimos usar el programa original de compresión de cuentas SPL.
Descompresión
Otra característica clave es la descompresión, que evita la dependencia exclusiva y permite una interoperabilidad fluida entre cuentas «normales» y comprimidas. Cualquier cuenta de Solana puede comprimirse, lo que te permite recuperar el costo de la renta. También puedes descomprimir una cuenta comprimida en cualquier momento y cambiar fácilmente entre ambas formas. Por ejemplo, si tienes un token comprimido que necesitas intercambiar, solo debes descomprimirlo y usarlo con Jupiter para ejecutar el intercambio.
La descompresión permite transiciones fluidas entre el estado activo y el inactivo. Por ejemplo, si desarrollas un juego con distintas cartas y objetos comprimidos, puedes descomprimirlos durante las batallas para permitir cambios rápidos de estado y volver a comprimirlos después para guardar el resultado final, como los cambios en los puntos de vida. Existen algunas limitaciones de concurrencia dentro de un mismo árbol durante un slot. Debes evitar la compresión si necesitas actualizar varias veces la misma cuenta dentro de un bloque. En esos casos, es mejor descomprimir permanentemente esa cuenta para que funcione como una cuenta on-chain normal. Por ejemplo, una cuenta de un pool de AMM sería más adecuada como cuenta normal, ya que su estado debe actualizarse con frecuencia. El sistema es lo bastante flexible como para interactuar con cuentas comprimidas y descomprimidas dentro de la misma transacción.
Esta solución completamente generalizada no se limita a un solo programa, lógica de negocio o aplicación. Las cuentas de Solana pueden comprimirse a bajo costo y cuentan con indexación integrada. Es totalmente de código abierto, está lista para producción y puede adaptarse a distintos casos de uso.
Tokens comprimidos
Los tokens comprimidos no son directamente compatibles con exchanges y plataformas DeFi, a menos que estos los admitan. Sin embargo, esto se resuelve fácilmente al descomprimir el token comprimido y convertirlo en un token SPL estándar, que puede usarse en DeFi y exchanges como cualquier token normal. Esta flexibilidad evita la dependencia exclusiva y permite que los usuarios cambien entre tokens comprimidos y normales según sea necesario. Los tokens comprimidos son ideales para aplicaciones inactivas que requieren interacciones menos frecuentes, mientras que las cuentas de tokens normales son más adecuadas para estados activos o activos de uso frecuente. Una de las principales ventajas de este sistema es su capacidad para resolver el problema del crecimiento del estado. Para ello, traslada los datos inactivos a almacenamiento comprimido, conserva todas las ventajas y administra el estado de manera más eficiente.
En nuestra versión inicial, presentamos tokens comprimidos creados con las mismas herramientas que usarías para cualquier aplicación compatible con compresión. El programa de tokens comprimidos es idéntico al programa de tokens de Solana. Ofrece la misma experiencia de usuario con un costo mil veces menor. Se espera que las extensiones de tokens estén disponibles a principios de 2025.
Con funciones como la descompresión, puedes distribuir grandes volúmenes de tokens mediante airdrops y descomprimirlos rápidamente cuando los necesites para actividades DeFi. Aunque las pruebas de conocimiento cero (ZK) suelen considerarse el Santo Grial del cómputo costoso, optimizamos el proceso para que las transferencias sean similares a las transferencias estándar de tokens SPL y reducimos los tiempos de prueba a milisegundos. Esto pone en primer plano la tecnología ZK para consumidores lista para producción y reduce considerablemente el costo de administrar cuentas de tokens.
¿Cómo funciona ZK Compression?
El sistema general tiene cinco componentes principales:
- Un bosque de árboles de estado
- Light System Program
- Compressed Token Program
- Nodos Forester
- Indexadores (Photon)
Un bosque de árboles de estado
Primero tenemos árboles de Merkle de estado, a los que llamamos el «bosque de árboles de Merkle de estado». Esta estructura crea una huella criptográfica única de un conjunto de cuentas que podemos almacenar on-chain. Por ejemplo, si tienes cuatro cuentas, puedes aplicarles hashes de forma recursiva para crear una estructura de árbol de Merkle.
El hash final de 32 bytes en la parte superior proporciona una garantía criptográfica de la integridad de los datos subyacentes de todas las cuentas. Esto garantiza que el estado de cualquier cuenta pueda verificarse fácilmente como parte del árbol de Merkle al compararlo con la raíz de estado. Usamos aquí el término «bosque» porque existen varios árboles de Merkle, cada uno con su propia raíz.
Comparación con la compresión de cuentas SPL existente
Una mejora importante de ZK compression respecto al programa existente de compresión de cuentas SPL es la capacidad de demostrar que una parte del estado pertenece a un árbol de Merkle determinado. Esto garantiza una generación eficiente de pruebas dentro de los límites de tamaño de las transacciones de Solana. Así podemos demostrar la unicidad de una dirección determinada mediante la administración de un árbol de direcciones, similar a un árbol de Merkle de estado, pero con una función adicional: demostrar la inclusión en una hoja también demuestra la exclusión de un intervalo específico de números. Esto permite manejar un espacio de direcciones de 248 bits con árboles de Merkle mucho más pequeños y garantiza la unicidad de las direcciones.
Se pueden demostrar M cuentas para N árboles mientras se mantiene un tamaño de prueba constante de 128 bytes, lo que se ajusta bien al límite de 1.2 kb para las transacciones de Solana. La generación de pruebas, que se realiza off-chain, es más costosa que en el programa existente de compresión de cuentas SPL. Sin embargo, la verificación de pruebas, que ocurre on-chain, se mantiene constante y, en la mayoría de los casos, suele ser más económica que en el programa de compresión existente.
Light System Program y Compressed Token Program
El protocolo incluye dos programas clave. Light System Program es un contrato on-chain que replica el programa del sistema de Solana. Interactúa con el árbol de Merkle, aplica el modelo estándar de cuentas de Solana y verifica la unicidad de las PDA. Compressed Token Program replica el programa de tokens SPL y aplica la estructura de datos SPL dentro del modelo de cuentas comprimidas.
Nodos Forester
Los nodos Forester se encargan de administrar este bosque ligero. Cuando actualizas una cuenta comprimida, se agrega al árbol el nuevo estado de la cuenta, mientras que el estado anterior se establece en cero o se anula.
Este enfoque tiene dos implicaciones clave. Primero, cualquier actualización del estado provoca un cambio en la raíz, ya que las modificaciones se propagan hasta la parte superior del árbol de Merkle invertido. Segundo, los árboles se llenan gradualmente y terminan alcanzando su capacidad máxima. Aquí es donde entra en juego el bosque de árboles ligeros.
Los nodos Forester se encargan de mantener la raíz de estado. Actualizan la raíz de forma asíncrona y gestionan la rotación de los árboles de estado llenos. Operar un nodo Forester para tus propios árboles de estado no requiere permisos y funciona de manera similar a ejecutar un RPC, lo que permite que cualquiera administre sus propias actualizaciones de estado. Como desarrollador de aplicaciones, te conviene mantener tu estado comprimido. Esto crea un incentivo natural para garantizar que tus árboles de estado se administren correctamente. Puedes ejecutar tu propio nodo para alojarlo por tu cuenta o pagar a un proveedor para que lo administre por ti.
Photon
El indexador Photon es una solución de código abierto diseñada para rastrear y administrar actualizaciones, creaciones, modificaciones y otros eventos relacionados con las cuentas comprimidas en la blockchain. Escucha la actividad on-chain y almacena en caché el estado actual de estas cuentas. Además, genera pruebas criptográficas que pueden usarse para verificar o modificar datos.
El indexador Photon, listo para producción, incorpora mejoras importantes basadas en lo aprendido de versiones anteriores de la compresión. Su objetivo es ser fácil de usar y accesible, tanto si eres un desarrollador individual como una empresa o un proveedor de RPC.
El desarrollo local ahora es mucho más sencillo. Incluye una herramienta CLI de un solo clic que se integra sin problemas con tu configuración local. También está disponible un explorador orientado a desarrolladores, que proporciona una interfaz visual para consultar cuentas comprimidas, rastrear sus cambios y examinar el historial de transacciones.
Photon genera snapshots diarios, lo que acelera el desarrollo y el despliegue. En lugar de volver a indexar desde el bloque génesis, los desarrolladores pueden comenzar desde un snapshot y reducir el tiempo de arranque e inicio a 15 minutos o menos. Estos snapshots también mejoran la replicación. Si un proveedor de RPC deja de admitir la compresión, puedes obtener fácilmente un snapshot y ejecutar el indexador de forma independiente. El riesgo de pérdida de datos se minimiza con snapshots que pueden almacenarse en soluciones descentralizadas como FileCoin.
Con Photon, tienes la flexibilidad de indexar solo un subconjunto de los datos, lo que reduce considerablemente los requisitos de hardware y el tamaño de la base de datos. Puedes hacerlo con SQLite y un solo comando de CLI. Como alternativa, si eres un proveedor de RPC, puedes indexar el conjunto de datos completo. Photon está disponible en cualquier plan de Helius. También puedes ejecutarlo de forma independiente o solicitar que otro proveedor lo ofrezca.
Creado por desarrolladores, para desarrolladores
Nos enfocamos por completo en los desarrolladores y trabajamos activamente en tres mejoras importantes diseñadas específicamente para optimizar su experiencia.
Web3.js para compresión
El SDK está diseñado para funcionar de forma similar a Solana web3.js, pero con compatibilidad total con compresión. Para iniciar una transferencia de tokens comprimidos, primero obtienes tus cuentas de tokens comprimidos. Luego usas esas cuentas para obtener una prueba de validez desde tu RPC o un nodo de prueba dedicado. Después, creas las instrucciones como lo harías con el programa de tokens SPL: especificas qué quieres enviar, la cantidad, la emisión y el destinatario para crear una transacción normal de Solana.
Configuración completa para desarrollo local
Ofrecemos un validador de prueba preconfigurado con todo lo necesario para el desarrollo local, incluidos todos los programas requeridos, el indexador Photon y un nodo de prueba local. Esto simplifica el proceso de configuración para los desarrolladores.
Macros de Anchor
Para quienes conocen el desarrollo de programas de Solana con Anchor, nuestro objetivo es que trabajar con cuentas comprimidas sea tan sencillo como trabajar con cuentas normales. Si ya escribiste un programa de Anchor, reconocerás de inmediato la experiencia habitual de desarrollo. Las macros de Anchor aún están en desarrollo.
Airship
Airship permite que los desarrolladores aprovechen ZK compression desde hoy mediante una herramienta para airdrops masivos de tokens que es fácil de usar y rentable. Ofrece una interfaz de usuario y una CLI. Como es completamente de código abierto, los desarrolladores pueden bifurcarla y modificarla según sus necesidades. A medida que más desarrolladores distribuyan tokens comprimidos mediante airdrops, el ecosistema comenzará a adoptarlos en distintas aplicaciones. Sin embargo, si quieres convertirlos de inmediato, puedes descomprimir los tokens al instante. Esto convierte a Airship en una herramienta de airdrop lista para usar con tokens normales desde hoy.
La herramienta admite automáticamente airdrops para titulares de Solana mobile, de tokens específicos o de colecciones NFT. Si tienes una lista pregenerada de destinatarios, también puedes importar un archivo CSV y especificar el token y la cantidad que se distribuirá mediante el airdrop. Tanto la CLI como la interfaz de usuario te permiten reanudar el airdrop desde el último estado guardado si tienes problemas, como perder la conexión a Internet. Esto resulta especialmente útil para airdrops grandes, que pueden tardar entre 30 y 45 minutos al distribuir tokens a una lista extensa de direcciones.
Un nuevo espacio de diseño para aplicaciones
ZK compression resuelve el problema del crecimiento del estado al almacenar en la memoria del validador activo únicamente el hash raíz final de todas las cuentas. Este enfoque mitiga eficazmente los problemas de crecimiento del estado. Además, ZK compression abre nuevas posibilidades de diseño para las aplicaciones. Estos son algunos posibles casos de uso:
- Compresores de tokens SPL
- Mil millones de meme coins
- Mercados de predicción para publicaciones de Twitter
- PDA identificadoras para nodos en redes DePin
- Cálculo y distribución verificables de recompensas
- Puentes con confianza minimizada
- Protocolos de identidad ZK
La documentación incluye más ideas.
¡ZK compression ya está disponible en mainnet y devnet! Para comenzar, consulta nuestra documentación y sigue los ejemplos. Además, organizamos un hackathon con hasta $45,000 en premios.
Si te interesa profundizar en ZK, consulta nuestras publicaciones anteriores del blog de Helius para conocer en detalle los fundamentos de las pruebas de conocimiento cero y sus aplicaciones en Solana.
Artículos relacionados
Suscríbete a Helius
Mantente al día con las novedades del desarrollo en Solana y recibe actualizaciones cuando publiquemos


