Coda Whitepaper: economía y política monetaria

From Coda Wiki
Jump to navigation Jump to search

Originalmente publicado en economicsWP

Brad Cohn, Evan Shapiro y Emre Tekişalp

O(1) Labs

16 de enero de 2020


Resumen

A medida que las criptomonedas alcanzan nuevas cotas de popularidad y adopción, el coste de verificar la blockchain aumenta de forma proporcional al volumen de transacciones, quedando rápidamente fuera del alcance del usuario promedio. En consecuencia, las criptomonedas pueden terminar siendo víctimas de su propio éxito, cada vez más inaccesibles para sus usuarios, quienes además se verían obligados a confiar en terceros. El Protocolo Coda resuelve este problema reemplazando la blockchain con una demostración matemática de la misma fácilmente verificable. Un protocolo de estas características requiere de una cuidadosa separación de roles, un buen diseño de incentivos y una sólida política monetaria para funcionar correctamente y resistir a los posibles ataques y abusos. A continuación te presentamos sus principales características.


Introducción

Al combinar técnicas criptográficas con incentivos económicos, Bitcoin [Nak09] se convirtió en el primer protocolo descentralizado de pagos peer-to-peer. Un aspecto crítico del diseño de Bitcoin es la forma en la que sus diferentes componentes se refuerzan y fortalecen entre sí. Por ejemplo, el consenso basado en PoW (Proof of Work) impone un coste en la producción de bloques, lo que desalienta a los malos actores a enviar transacciones inválidas. Asimismo, ese incentivo se multiplica de forma dramática al utilizar la blockchain para almacenar transacciones históricas porque hace que cualquier manipulación sea evidente para todos los peers de la red de forma inmediata y con un coste computacional muy bajo. Esta técnica: hacer que los ataques sean costosos y la defensa barata, se ha convertido en la piedra angular de la criptografía moderna y en un sello distintivo de los protocolos cripto-económicos con buenos fundamentos.


Sin embargo, el diseño de Bitcoin tiene algunas limitaciones. Aunque las blockchains permiten una detección inmediata de cualquier manipulación, no proporcionan una forma rápida de comprobar la corrección de su estado. De hecho, cada vez que un nuevo participante se une a la red, debe verificar cada transacción desde el comienzo de la cadena para comprobar su corrección. Este requisito crece linealmente con el volumen total de transacciones quedando rápidamente fuera del alcance de los usuarios promedio, quienes utilizan principalmente dispositivos con recursos limitados, como teléfonos móviles.


De esta manera, a medida que las criptomonedas alcanzan nuevas cotas de popularidad y adopción, terminan siendo víctimas de su propio éxito, cada vez más inaccesibles para sus usuarios quienes además se ven obligados a confiar en terceros.


Los zk-SNARKs recursivos proporcionan una solución a este dilema. De forma similar a cómo las blockchains permiten la detección inmediata de cualquier manipulación, los zk-SNARKs recursivos permiten una verificación constante de la corrección del histórico de transacciones. En lugar de que cada participante verifique por sí mismo este histórico, la propia red colabora en la generación de demostraciones matemáticas de la corrección del histórico de transacciones (zk-SNARKs) y luego las comparte. En consecuencia, en lugar de que los usuarios se vean obligados a confiar en terceros para conocer el estado de la blockchain, se les proporciona un zk-SNARK que garantiza criptográficamente que el estado es correcto. En resumen, el Protocolo Coda reemplaza la blockchain con una demostración matemática fácilmente verificable. Para más detalles sobre la implementación técnica de este protocolo, consulte el documento técnico [MRS19].


Un protocolo de estas características requiere de una cuidadosa separación de roles, un buen diseño de incentivos y una sólida política monetaria para funcionar correctamente y resistir a los posibles ataques y abusos. A continuación te presentamos sus principales características.


Incentivos y Roles

La mayoría de protocolos de criptomonedas tienen al menos dos roles en sus redes: 1) los que verifican cada transacción en la red, normalmente denominados nodos completos, stakers o mineros, y 2) aquellos que confían en terceros para verificar las transacciones en su nombre, como por ejemplo los clientes ligeros. A medida que estos protocolos aumentan su tasa de adopción es cada vez más costoso verificar la blockchain, provocando que más participantes del primer grupo sean excluidos y empujados al segundo. Por ejemplo, a pesar de que Bitcoin ha procesado históricamente un promedio inferior a 1,5 transacciones por segundo, un nuevo participante debe verificar casi 500.000.000 transacciones para asegurar la instalación correcta de un nodo completo. Este problema se agrava en algunas criptomonedas que afirman tener un número de transacciones entre 10 y 100.000 veces superior al de Bitcoin, y que por lo tanto generan gigabytes o terabytes de datos cada semana.


Por contra, en Coda los requisitos en materia de recursos necesarios permanecen constantes independientemente de cuántas transacciones se hayan procesado en la red: los usuarios pueden verificar completamente el estado actual de la red a través de un solo zk-SNARK. Para ello, Coda tiene tres roles en su red, cada uno incentivado para participar en los diferentes procesos.


2.1 Verificadores

Consideramos que la gran mayoría de los participantes de la red serán capaces de verificar. Dado que Coda utiliza zk-SNARKs de forma recursiva para demostrar continuamente la validez del estado de la cadena, la seguridad de un nodo completo se alcanza sencillamente descargando un zk-SNARK que solamente pesa unos cientos de bytes y necesita de pocos milisegundos de cálculo para ser verificado. El zk-SNARK certifica la información sobre el consenso y la raíz de Merkle de un estado reciente. En este punto, los verificadores pueden solicitar rutas de Merkle a determinadas partes relevantes del estado. Comprobando la ruta de Merkle, los verificadores se aseguran de que las partes del estado que les interesan (como por ejemplo los saldos de sus cuenta) están verdaderamente contenidos en la misma blockchain que está certificada por el zk-SNARK.


2.2 Productores de bloque

Los productores de bloques son similares a los mineros o stakers de otros protocolos. Están incentivados por el propio protocolo a través de las recompensas de bloque y las comisiones pagadas por los usuarios. Es importante destacar que los productores de bloques no están incentivados por la amenaza de aplicar penalizaciones, ya que Coda utiliza el protocolo Ouroboros [DGKR17]. Además de realizar staking directamente, los usuarios pueden delegar su stake en otro productor de bloques. Esto permite al delegado hacer staking, pero no enviar transacciones en nombre de otros.


Los productores de bloques seleccionan qué transacciones incluirán en el siguiente bloque. Obviamente, les interesa incluir las transacciones que ofrecen comisiones más altas. Sin embargo, para garantizar que la blockchain sigue siendo ligera, los productores de bloques tienen una responsabilidad adicional: por cada transacción que agregan a un bloque, deben incluir un número equivalente de transacciones procesadas previamente (transacciones SNARK). Si no lo hacen, su bloque no cumplirá con las reglas de consenso y será rechazado por el resto de nodos. Puede ser útil imaginar una cola de transacciones. Si un productor de bloques quiere agregar 10 transacciones al final de la cola (para poder reclamar las correspondientes comisiones), deberá incluir también 10 transacciones procesadas (SNARK) del principio de la cola. Pueden procesar las transacciones ellos mismos generando sus correspondientes SNARKs, o pueden obtenerlos en una especie de mercado creado por otros participantes de la red, los Snarkers.


2.3 Snarkers

Los Snarkers, cuyo papel está descrito en el documento técnico de Coda [MRS19], son los participantes de la red responsables de producir los zk-SNARKs que verifican las transacciones. Se les recompensa a través de las tarifas que ofertan por hacerlo (bids), de tal forma que si sus snarks se incluyen en un bloque, el productor de dicho bloque les paga esas tarifas deduciéndolas del total que obtiene en forma de comisiones.


Muchos Snarkers pueden ofertar tarifas para procesar SNARKs de una misma transacción y a su vez los productores de bloques desean minimizar las tarifas que pagan por ellos. Esto hace que exista un mercado donde los participantes compiten por producir las demostraciones matemáticas zk-SNARK más rentables. Nos referirnos a este mercado como el Snarketplace. Más adelante analizaremos algunos de los aspectos de su dinámica económica.


En primer lugar, siempre que exista cierta capacidad de computación disponible en la red, hecho prácticamente garantizado por la existencia de la red de productores de bloques, el Snarketplace no afectará negativamente a la viabilidad del protocolo o a su resistencia a la censura, ya que siempre existirán ofertas para producir SNARKs a algún precio.


Para entender esto, consideremos los incentivos que tiene un participante de la red que tenga capacidad de cómputo adicional y observa que las tarifas de SNARK aumentan en la red debido a la falta de producción de SNARKs. Cuando las tarifas de los SNARKs superen el coste marginal de producción para este participante, y suponiendo que el participante es un actor económico racional, comenzará a hacer ofertas por encima de su precio de producción y por debajo del precio de mercado para así asegurarse un beneficio. Este mecanismo estabiliza automáticamente las tarifas de los SNARKs. Los productores de bloques pueden simplemente trasladar estas comisiones a quienes realizan las transacciones. A la práctica, el coste de cálculo para generar un SNARK debería ser extremadamente bajo, en el rango de menos de un céntimo por transacción según los precios actuales de computación en la nube.


En segundo lugar, si consideramos economías de escala, es posible que algunas operaciones de SNARK se hagan predominantes con el tiempo, tal y como ha sucedido con algunas operaciones de minería en Bitcoin. Sin embargo, cualquier concentración de producción de SNARKs no influiría en la resistencia a la censura o viabilidad del protocolo. Esto se debe a que cualquiera podría producir SNARKs a algún precio. Así que incluso en el caso de que hubiera algún productor de SNARK que ofreciera SNARKs más baratos, si se negaran a procesar ciertas transacciones, cualquier otro participante podría proporcionar un SNARK para dicha transacción por una tarifa un poco más alta, y los productores de bloques aún en este caso estarían incentivados para incluirla en la blockchain.


En tercer lugar, un mecanismo de coordinación explícito y voluntario que evite duplicar los cálculos SNARK probablemente reduciría las tarifas de los mismos y evitaría desperdiciar cómputo en la red, si bien un mecanismo de estas características no es necesario para la seguridad o viabilidad del protocolo.


2.3.1 Resistencia a la censura

Vale la pena profundizar un poco más en los argumentos en los que se basa la resistencia a la censura. Mientras que en Bitcoin existen una serie de posibles ataques a la resistencia a la censura de su protocolo [NBF+16], resulta que es posible conseguir ser incluido en un bloque simplemente ofreciendo una comisión lo suficientemente alta o esperando el tiempo suficiente. Coda es muy similar a Bitcoin, con la complicación adicional de que también es necesario que tu transacción sea procesada en forma SNARK en algún momento después de haber sido incluida la cola.


Por lo tanto, para que Coda no sea resistente a la censura, una transacción debería ser incluida en la cola para luego no conseguir tener forma SNARK nunca. Eso requeriría que todos los Snarkers se pusieran de acuerdo de forma maliciosa (los cuales se negarían a procesar un SNARK para esa transacción) o que lo hicieran todos los productores de bloques (que elegirían no incluir la transacción SNARK en las actualizaciones de la blockchain). Por los supuestos contemplados en el protocolo Ouroboros, podemos suponer que la red es descentralizada y que por lo tanto los productores de bloques no se están confabulando en su contra.


Ahora pasemos a los Snarkers. Debido a que el coste del cálculo del SNARK de una transacción es extremadamente bajo y accesible para cualquier persona con un ordenador, conseguir que todos los Snarkers se pongan de acuerdo para no generar el SNARK de una determinada transacción es aún más difícil que lograr que todos los productores de bloques lo hagan. Los Snarkers existentes no pueden evitar que un nuevo Snarker entre en el mercado. Si alguien detecta que una transacción no está recibiendo ofertas SNARK, podría ofrecerse de manera fácil y rentable, e incluso un productor de bloques con comisiones de transacción muy bajas podría incluir de manera rentable la transacción con dicho SNARK en una actualización de la cadena.


IMAGEN 1: Ciclo de una transacción CODA

https://i.ibb.co/hy0YMh1/2-1.png

https://images.ctfassets.net/737jygdrovm3/mXDlVMxyDzrD2oqAegCDR/fe8760dc6e3e11dd2b8c02bf096b73e1/2-1.png


IMAGEN 2: Economía de una transacción CODA

https://i.ibb.co/0CBrzrV/2-2.png

https://images.ctfassets.net/737jygdrovm3/2RlSIs0wIbjgTxJ0xt7Dc7/6935a13cdd0a50106ef587e87f967be5/2.2.png


3. Nomenclatura y Denominación

Las unidades individuales de la moneda se denominan CODA, ilustradas por el símbolo ◼ (UTF-16: U + 25FC). La cantidad monetaria inicial de CODA es de ◼1.000.000.000. Cada CODA es divisible en mil millones de unidades, llamadas nanocoda. Las denominaciones intermedias de la moneda utilizan los prefijos del sistema métrico decimal estándar:

1. ◼1 = 1 coda

2. ◼0.01 = 1 centicoda (céntimo)

3. ◼1 x 10−6 = 1 microcoda


4. Política monetaria

Debido a que Coda utiliza una variante del protocolo Ouroboros Proof of Stake [DGKR17] [MRS19], las recompensas de bloques y las comisiones se distribuyen aproximadamente de forma proporcional a los fondos de cada cuenta, considerando que todas hacen staking. Por lo tanto, suponiendo una alta tasa de participación en el staking, cualquier inflación nominal quedará compensada por el retorno nominal equivalente asignado por el protocolo. Este mecanismo asegura que los fondos contenidos en las cuentas mantengan siempre un poder adquisitivo constante.


Sin embargo, aquellos que elijan no hacer staking ni delegar sus fondos, experimentarán una minoración con respecto a aquellos que sí lo hagan. Para motivar a los participantes a hacer staking, la tasa de inflación inicial de Coda será del 12%. Posteriormente, a lo largo de los cinco primeros años, la tasa de inflación se reducirá al 7% y se mantendrá en ese 7% a partir de entonces, solamente sujeto a cambios a través del mecanismo de gobernanza de la cadena (1).


IMAGEN 3

https://images.ctfassets.net/737jygdrovm3/IZ4F41sWNwpatOYurSGvR/4c5722939ce7510e58704ff9375a7dfe/2-3.png

(1) Próximamente se publicará un documento sobre gobernanza.


Es importante destacar que el protocolo cumplirá estas tasas de inflación objetivo independientemente de la tasa de participación en staking. Esto implica que las recompensas de bloque cambiarán de forma dinámica para adaptarse a dicha tasa de inflación. Por ejemplo, si solamente el 50% de la red hace staking, las recompensas de bloque se duplicarán. Esto es así debido al protocolo Ouroboros, según el cual el número de bloques producidos por época será proporcional al ratio de staking. Esto incentiva de forma natural a que más usuarios hagan staking cuanto más baja sea la tasa de participación.


IMAGEN 4

https://images.ctfassets.net/737jygdrovm3/4qIVS7cKhfPbEwaMQYat9Q/da0b7e590da5a1d4608708c62fbbc993/2-4.png


La consideración principal a la hora de valorar una posible reducción de la tasa de inflación será determinar si las recompensas son más altas de lo necesario para garantizar que los productores de bloques tengan incentivos suficientes para validarlos sin que se produzca un aumento importante de las comisiones.


Por último, es relevante destacar la importancia de diseñar una política monetaria que facilite el desarrollo continuo de una red descentralizada como Coda. La inflación, en forma de recompensas de bloque, se utiliza para asegurar la cadena contra posibles ataques al incentivar la función de validación por parte de los productores de bloques. Sin embargo, la seguridad no es el único requisito de diseño de una nueva red. El mantenimiento a largo plazo y la mejora del protocolo también requerirá de financiación. Sugerimos que el mecanismo más adecuado para ello es la creación de recompensas especiales de bloque que serían asignadas a los destinatarios determinados por la gobernanza de la cadena.


Referencias

[DGKR17] Bernardo David, Peter Gaži, Aggelos Kiayias y Alexander Russell. Ouroboros praos: An adaptively-secure, semi-synchronous proof-of-stake protocol. Cryptology ePrint Archive. Informe 2017/573, 2017. [1].

[MRS19] Izaak Meckler, Vanishree Rao y Evan Shapiro. Coda: Decentralized Cryptocurrency at Scale, 2019.

[Nak09] Satoshi Nakamoto. Bitcoin: A peer-to-peer electronic cash system, 2009.

[NBF+16] Arvind Narayanan, Joseph Bonneau, Edward Felten, Andrew Miller y Steven Goldfeder. Bitcoin and Cryptocurrency Technologies: A Comprehensive Introduction, 2016. Feather Forking.