He escrito un artículo que explica Hace unos años. ese proyecto fue mi primer encuentro real con la tecnología de prueba de conocimiento cero, y me ayudó a comprender su funcionamiento interno. En este nuevo artículo, presentaré un concepto que se basa en Tornado Cash – esencialmente un “blockchain incorporado” como zCash. No es una verdadera solución Layer 2, ya que toda la actividad ocurre totalmente en cadena. Pero antes de explorar la mecánica, tomemos un momento para revisar los fundamentos. Cómo funciona Tornado Cash ¿Cómo funciona Tornado Cash? Dado que ya he escrito un artículo detallado sobre el tema, voy a dar un resumen aquí.Si está interesado en el buceo técnico profundo, recomiendo leer mis artículos anteriores: La magia de la prueba de conocimiento cero a través del código fuente de Tornado Cash JavaScript Tutorial para pruebas de conocimiento cero usando snarkjs y circo Cómo construí un sistema de votación anónimo en la Blockchain de Ethereum usando la prueba de conocimiento cero En pocas palabras, Tornado Cash funciona al tener un depósito de usuario ETH u otro token en el contrato inteligente Tornado Cash, junto con una Cada empresa tiene un asociado , que es conocido sólo al usuario. El contrato inteligente almacena el compromiso en un árbol Merkle. Más tarde, el usuario puede retirar los fondos de una dirección diferente al revelar el anulador. commitment nullifier Debido a que solo el usuario conoce el anulador, nadie puede vincular la retirada al depósito original. Sin embargo, el contrato inteligente todavía necesita verificar que el anulador está vinculado a un compromiso válido. Esto muestra: zero-knowledge proof El compromiso es parte del árbol Merkle (el usuario realmente depositado en el contrato), y El nulo se derivó de ese compromiso. Cada cancelación sólo se puede usar una vez, garantizando que los fondos no se puedan retirar más de una vez. En Tornado Cash, los hashes de compromiso y nullifier se calculan de la siguiente manera: commitment_hash = HASH(nullifier, secret) nullifier_hash = HASH(nullifier) Dado que las hash criptográficas son funciones unidireccionales (no se puede determinar la entrada original del hash sin fuerza bruta), es imposible vincular la Y el Sin embargo, su relación puede ser probada usando la prueba de conocimiento cero. commitment_hash nullifier_hash La principal limitación de este sistema es que la cantidad transferida puede filtrar información. Por ejemplo, si deposita 12.34 ETH y luego retira exactamente 12.34 ETH, alguien podría razonablemente adivinar que los dos están vinculados. El concepto que describiré en la próxima sección aborda esta limitación, inspirándose en cómo zCash resuelve el problema. Solucionar el problema de la denominación fija La limitación de los importes fijos de depósito se puede superar introduciendo dos métodos adicionales junto con el depósito y la retirada: y . split merge El La función funciona de manera similar a una retirada, pero en lugar de especificar una dirección Ethereum, el usuario proporciona dos nuevos compromisos. Una división permite al usuario dividir la cantidad almacenada en dos partes —y lo importante es que esto ocurre sin revelar las nuevas cantidades a cualquier persona que observe la blockchain. split En el sistema actualizado, el compromiso está estructurado de la siguiente manera: commitment_hash = HASH(amount, nullifier, secret) Esta estructura es esencial porque, durante una división, el usuario debe demostrar que los dos nuevos compromisos contienen cantidades que se suman exactamente al importe del compromiso original. Es fácil ver cómo este mecanismo aborda el problema de la denominación fija en Tornado Cash. Por ejemplo, un usuario podría depositar una cantidad arbitraria como 100 ETH, dividirla en partes (por ejemplo, 60 ETH y 40 ETH), y posteriormente retirarlas a diferentes direcciones. Dado que los valores están ocultos dentro de los compromisos, nadie puede vincular la retirada al depósito original basado únicamente en el importe. Tampoco es necesario retirar fondos inmediatamente. los usuarios pueden efectuar , funcionando como una especie de cartera virtual. Esto se permite por el operación, que permite que dos compromisos almacenados (referenciados a través de sus nullifiers) se combinen en un único nuevo compromiso. store value in the smart contract itself merge Para realizar una fusión, el usuario debe demostrar que el importe total en los dos compromisos de entrada coincide con el importe en el nuevo compromiso. Esto genera una especie de , donde cada usuario tiene un saldo privado y puede enviar fondos libremente a otros. Los retiros sólo son necesarios cuando alguien quiere salir del sistema y gastar sus activos fuera de esta capa privada. embedded ledger Protección de privacidad en Ethereum Pasemos por un ejemplo para ver cómo funciona esta capa de privacidad en la práctica: Alice crea un pool de 100 ETH en el contrato inteligente al depositar 100 ETH junto con un compromiso. Bob hace lo mismo, creando un pool de 10 ETH con su propio compromiso. Alice quiere enviar 10 ETH a Bob. Ella utiliza la función de división, que consume su nullifier y divide el 100 ETH original en dos nuevos compromisos: uno para 10 ETH y uno para 90 ETH. Ahora, Alice tiene dos nullifiers - uno que representa 10 ETH, el otro 90 ETH. Alice encripta el nulo de 10 ETH usando la clave pública de Bob y la escribe en la blockchain. Bob descifra el mensaje usando su clave privada y obtiene el nullifier. ahora puede retirar el 10 ETH o fusionarlo con su saldo existente. Bob elige mantener los fondos en el sistema, por lo que utiliza la operación de fusión. proporciona el nullifier de su propio compromiso de 10 ETH y el recibido de Alice, luego crea un nuevo compromiso para 20 ETH. Después de la transacción: Alice tiene un saldo de 90 ETH, Bob ahora controla 20 ETH en la capa de privacidad. Debido a que los nullifiers y los compromisos no llevan información visible públicamente, y los mensajes entre los usuarios son cifrados, todas estas transacciones ocurren. . completely anonymously Dado que los usuarios pueden transferir libremente valor dentro del sistema sin revelar cantidades o identidades, a menudo no hay necesidad de retirar. Con una diferencia clave: . Layer 2 blockchain everything happens on-chain Conclusion Conclusión Al introducir dos operaciones simples - y - podemos mejorar significativamente el concepto original de Tornado Cash y transformarlo en un en Ethereum. A diferencia de los mixers tradicionales limitados a las denominaciones fijas, este modelo actualizado soporta , permitiendo a los usuarios dividir, fusionar y transferir valor de manera flexible y anónima. split merge privacy-preserving transaction layer arbitrary amounts En su base, el sistema se basa en , de , y Al incorporar el importe directamente en el compromiso, los usuarios pueden demostrar la corrección de las operaciones de conservación de valor como la división y la fusión, sin revelar nunca los importes reales o los participantes involucrados. zero-knowledge proofs commitments nullifiers El resultado es una especie de Esto funciona totalmente Los usuarios pueden almacenar fondos en privado, enviar activos unos a otros usando mensajes cifrados, y solo retirar cuando necesitan interactuar con la capa pública de Ethereum. Con la , creando un poderoso marco para la transferencia de valor anónima y programable. embedded blockchain on-chain privacy features of zCash smart contract capabilities of Ethereum Lo mejor de todo es que es compatible con , lo que lo convierte en una base práctica y escalable para aplicaciones que preservan la privacidad en el ecosistema más amplio de Ethereum. any EVM-based blockchain