Escribín un artigo que explicaba Hai uns anos ese proxecto foi o meu primeiro encontro real coa tecnoloxía de proba de coñecemento cero, e axudoume a comprender o seu funcionamento interno. Neste novo artigo, vou introducir un concepto que se basea en Tornado Cash - esencialmente un zCash-como "blockchain incorporado." Non é unha verdadeira solución Layer 2, xa que toda a actividade ocorre totalmente en cadea. Pero antes de explorar a mecánica, imos tomar un momento para revisar os fundamentos. Como funciona Tornado Cash Como funciona Tornado Cash? Xa que xa escribín un artigo detallado sobre o tema, darei un resumo aquí.Se vostede está interesado no mergullo técnico profundo, recomendo ler os meus artigos anteriores: A maxia da proba de coñecemento cero a través do código fonte de Tornado Cash JavaScript Tutorial para probas de coñecemento cero usando snarkjs e circom Como construín un sistema de votación anónimo na Blockchain de Ethereum usando probas de coñecemento cero En resumo, Tornado Cash funciona ao ter un depósito de usuario ETH ou outro token no contrato intelixente Tornado Cash, xunto cun Cada empresa ten un asociado , que só é coñecido polo usuario. O contrato intelixente almacena o compromiso nunha árbore Merkle. Máis tarde, o usuario pode retirar os fondos desde un enderezo diferente ao revelar o anulador. commitment nullifier Porque só o usuario coñece o anulador, ninguén pode vincular a retirada ao depósito orixinal. Con todo, o contrato intelixente aínda necesita verificar que o anulador está ligado a un compromiso válido. que mostra: zero-knowledge proof O compromiso é parte da árbore Merkle (o usuario realmente depositado no contrato), e A nulidade derivou dese compromiso. Cada cancelación só se pode usar unha vez, garantindo que os fondos non poden ser retirados máis dunha vez. En Tornado Cash, os hashes de compromiso e nullifier calcúlanse do seguinte xeito: commitment_hash = HASH(nullifier, secret) nullifier_hash = HASH(nullifier) Dado que os hash criptográficos son funcións unidireccionais (non se pode determinar a entrada orixinal do hash sen forza bruta), é imposible vincular o hash. e o Con todo, a súa relación pode ser probada usando probas de coñecemento cero. commitment_hash nullifier_hash A principal limitación deste sistema é que o importe transferido pode vazar información. Por exemplo, se deposita 12.34 ETH e despois retira exactamente 12.34 ETH, alguén podería razoablemente adiviñar que os dous están relacionados. O concepto que describirei na seguinte sección aborda esta limitación, inspirándose en como zCash resolve o problema. Resolver o problema da denominación fixa A limitación dos importes fixos de depósito pódese superar introducindo dous métodos adicionais xunto ao depósito e retirada: e . split merge A súa A función funciona de xeito similar a unha retirada, pero en vez de especificar un enderezo Ethereum, o usuario proporciona dous novos compromisos. Unha división permite ao usuario dividir o importe almacenado en calquera dúas partes - e o importante é que isto ocorre sen revelar os novos importes a calquera que observe a blockchain. split No sistema actualizado, o compromiso estrutúrase do seguinte xeito: commitment_hash = HASH(amount, nullifier, secret) Esta estrutura é esencial porque, durante unha división, o usuario debe probar que os dous novos compromisos conteñen cantidades que se suman exactamente ao importe do compromiso orixinal. É fácil ver como este mecanismo aborda o problema de denominación fixa en Tornado Cash. Por exemplo, un usuario podería depositar un importe arbitrario como 100 ETH, dividilo en partes (por exemplo, 60 ETH e 40 ETH), e posteriormente retiralos a diferentes enderezos. Xa que os valores están ocultos dentro de compromisos, ninguén pode vincular a retirada ao depósito orixinal baseado só no importe. Tamén non hai necesidade de retirar fondos inmediatamente. os usuarios poden , funcionando como unha especie de carteira virtual. Isto é permitido polo operación, que permite que dous compromisos almacenados (referenciados a través dos seus nullifiers) se combinen nun único novo compromiso. store value in the smart contract itself merge Para realizar unha fusión, o usuario debe demostrar que o importe total nos dous compromisos de entrada coincide co importe no novo compromiso. Isto crea unha especie de , onde cada usuario ten un saldo privado e pode enviar fondos libremente a outros. as retiradas só son necesarias cando alguén quere saír do sistema e gastar os seus activos fóra desta capa privada. embedded ledger Xestión de privacidade en Ethereum Imos pasar por un exemplo para ver como esta capa de privacidade funciona na práctica: Alice crea un pool de 100 ETH no contrato intelixente depositando 100 ETH xunto cun compromiso. Bob fai o mesmo, creando unha piscina de 10 ETH co seu propio compromiso. Alice quere enviar 10 ETH a Bob. Ela usa a función de división, que consome o seu nullifier e divide o 100 ETH orixinal en dous novos compromisos: un para 10 ETH e un para 90 ETH. Agora, Alice ten dous nullifiers - un que representa 10 ETH, o outro 90 ETH. Alice encripta o nulo de 10 ETH usando a clave pública de Bob e escríbeo á blockchain. Bob descifra a mensaxe usando a súa clave privada e obtén o nullifier. Agora pode retirar o 10 ETH ou fusionalo co seu saldo existente. Bob elixe manter os fondos no sistema, polo que usa a operación de fusión. proporciona o nullifier do seu propio compromiso de 10 ETH e o recibido de Alice, a continuación, crea un novo compromiso para 20 ETH. Despois da transacción: Alice ten un saldo restante de 90 ETH, Bob agora controla 20 ETH na capa de privacidade. Debido a que os nullifiers e os compromisos non levan información visíbel ao público, e as mensaxes entre os usuarios son cifradas, todas estas transaccións ocorren. . completely anonymously Dado que os usuarios poden transferir libremente valor dentro do sistema sen revelar cantidades ou identidades, a miúdo non hai necesidade de retirar. Con unha diferenza fundamental: . Layer 2 blockchain everything happens on-chain Conclusion Conclusión Introducindo dúas operacións sinxelas - e - podemos mellorar significativamente o concepto orixinal Tornado Cash e transformalo nun completo en Ethereum. a diferenza dos mixers tradicionais limitados a denominacións fixas, este modelo actualizado soporta Permite aos usuarios dividir, fusionar e transferir valor de forma flexible e anónima. split merge privacy-preserving transaction layer arbitrary amounts No seu núcleo, o sistema baséase , , e Ao incorporar o importe directamente no compromiso, os usuarios poden demostrar a corrección de operacións de conservación de valor como a división e a fusión, sen revelar nunca os importes reais ou participantes implicados. zero-knowledge proofs commitments nullifiers O resultado é unha especie de que funciona totalmente Os usuarios poden almacenar fondos en privado, enviar activos uns a outros usando mensaxes cifradas, e só retirar cando precisan interactuar coa capa pública de Ethereum. Coa súa , creando un poderoso marco para a transferencia de valor anónima e programable. embedded blockchain on-chain privacy features of zCash smart contract capabilities of Ethereum O mellor de todo é que este modelo é compatible con , facéndoo unha base práctica e escalable para aplicacións que preservan a privacidade no ecosistema máis amplo de Ethereum. any EVM-based blockchain