Counos Coin

 

 CSC  Int. GmbH 

Suiza

CounosCoin


Visión general

Una versión completamente peer-to-peer o entre pares de un método de pago electrónico permitirá que los pagos en línea sean enviados directamente de una parte a otra sin tener que pasar por una institución financiera. Las firmas digitales son parte de la solución, pero las ventajas principales se pierden si una tercera parte de confianza continúa siendo requerida para evitar el doble gasto. Nosotros proponemos una solución ante el problema del doble gasto al utilizar una red entre pares. La red incluye una marca de tiempo o timestamp en las transacciones a través de un algoritmo hash en una cadena continua de prueba de trabajo basada en el algoritmo hash, creando un registro que no puede ser modificado sin recrear dicha prueba de trabajo. La extensa cadena no solo sirve como prueba de la secuencia de los acontecimientos presenciados, sino que también sirve como prueba de que proviene de una gran reserva de CPU power. Siempre que la mayoría de CPU power esté controlada por nodos que no cooperan para atacar a la red, generarán la cadena más larga y será más rápida que los atacantes. La red en sí misma requiere solamente una estructura mínima. Los mensajes se transmiten siempre dentro de lo posible y los nodos pueden arbitrariamente abandonar la red y volver a entrar, aceptando la cadena de prueba de trabajo más larga como prueba de lo que ha sucedido mientras que se encontraban fuera de ella.


Algo muy similar al algoritmo Bitcoin, ya se han minado más de 16 800 000 monedas y menos de 4 800 000 se minarán en todo el mundo.

Counos Coin no tiene una autoridad central o intermediario. Al contrario, se encuentra respaldado por un equipo de profesionales con el fin de hacerlo muy útil en un futuro próximo.

 

Transacciones

 

Definimos una moneda electronica (coin) como una cadena de firmas. Cada propietario transfiere la moneda al siguiente al firmar digitalmente un hash de la transacción anterior y la clave pública del siguiente propietario y agregarlo al final de la moneda. El receptor del pago puede verificar las firmas para comprobar la cadena de propietarios.

El problema, por supuesto, es que el beneficiario no puede verificar si uno de los propietarios ha podido duplicar la moneda. Una solución estándar puede ser la de introducir una petición central y de confianza o servicio denominado Mint, que comprueba cada transacción para identificar el doble gasto. Después de cada compra, la moneda debe devolverse al Mint para una nueva expedición, y solo las monedas expedidas directamente desde el Mint pueden ser confiadas de no haber sido duplicadas. El problema que conlleva esta solución es que el destino del sistema monetario al completo depende de la empresa que lleva a cabo el Mint y que cada transacción tiene que pasar a través de ello como si de un banco se tratase.


Necesitamos una manera de asegurar al beneficiario que los propietarios anteriores no han firmado transacciones pasadas. Para nuestros fines, la primera transacción es la única que cuenta, así que no tenemos que preocuparnos más tarde por intentos de expediciones múltiples. La única manera de confirmar la ausencia de una transacción es conocer todas las transacciones. En el modelo basado en el sistema Mint, este hubiera reconocido todas las transacciones y podría decidir cuáles llegarían primero. Para hacerlo sin una persona de confianza, las transacciones se deben hacer públicas[1], y necesitamos un sistema en el cual los suscriptores estén de acuerdo con una única trayectoria del orden en el que llegarán. El beneficiario requiere una prueba de que en el momento de cada transacción, la mayoría de los nodos de la red estaban de acuerdo y que que los han recibido primero.

 

El servidor de sellado de tiempo o timestamp

La solución que proponemos empieza con un servidor timestamp. Un servidor timestamp trabaja por medio del hash de un bloque de registro timestamp y publicando el hash de manera extensa, como por ejemplo en un periódico o en una publicación Usenet [2-5]. El timestamp demuestra que los datos existían en este punto, obviamente, de lo contrario, no habría una función hash. Cada timestamp contiene el timestamp anterior en su hash y forma una cadena donde cada timestamp adicional fortalece a los timestamp previos.

 

Prueba de trabajo

Para implementar un servidor timestamping distribuido entre pares, necesitamos utilizar un sistema de prueba de trabajo, similar al sistema hash de Adam Back[6], en lugar de las publicaciones en periódicos o Usenet. La prueba de trabajo supone encontrar un valor donde, una vez se haya aplicado la función hash, como a través de SHA-256, el hash empieza con una cuenta de cero bits.
Para nuestra red timestamp, implementamos la prueba de trabajo al aumentar un nonce en el bloque hasta que se encuentre un valor que de al hash del bloque los cero bits que sean necesarios. Después de que la CPU haya trabajado lo suficiente para hacer la prueba de trabajo, el bloque no se podrá modificar sin volver a iniciar el trabajo.

Como los siguientes bloques están encadenados a ello, el trabajo para mejorar el bloque supone recrear todos los bloques subsecuentes. La prueba de trabajo también resuelve el problema para determinar la mayoría con el “voto de la mayoría”. Si la mayoría se ha basado en un voto por dirección IP, se podría filtrar por cualquier que pueda reservar varias IPs. La prueba de trabajo supone un voto por CPU.

 

 

La red

 

Los pasos para operar en la red son los siguientes:

Se difunden nuevas transacciones a todos los nodos.

Cada nodo recoge las nuevas transacciones en un bloque.

Cada nodo trabaja para encontrar una prueba evidente del trabajo para su bloque.

Cuando un nodo encuentra la prueba del trabajo, envía el bloque a todos los nodos.

Los nodos aceptan el bloque solo si todas las transacciones que se encuentran en él son válidas y no se han expedido aún.

Los nodos expresan su aceptación del bloque al trabajar para crear el siguiente bloque en la cadena, utilizando el hash del bloque actual como el anterior hash.



Los nudos siempre asumen que la cadena más larga es la correcta y trabajan para extenderla. Si dos nodos transmiten al mismo tiempo diferentes versiones del siguiente bloque, algunos nodos pueden recibir una o la otra versión primero. En este caso, trabajan en el primero que los recibió pero guarda la otra rama en caso de que se haga más larga. El lazo se rompe cuando se encuentra la siguiente prueba de trabajo, y se hace más largo; los nodos que trabajaron en la otra rama se moverán a la más larga. La transmisión de nuevas transacciones no necesariamente tiene que alcanzar cada nodo. Siempre que alcancen varios nodos, tarde o temprano serán retomados en un bloque. Las emisiones de los bloques también son tolerantes con los mensajes perdidos. Si un nodo no recibe un bloque, lo solicitará en cuanto alcance el siguiente bloque y lo reconozca como el que se ha perdido.