# Moneda coloreada

Una moneda coloreada, en inglés colored coin, es un conjunto de satoshis de Bitcoin marcados para darle un significado especial. Este marcado se realiza asociando información extra a ese monto de monedas. A esta información se le llama metafóricamente 'color'. Al protocolo superpuesto a Bitcoin para añadir/interpretar/gestionar esa información adicional se le llama protocolo de monedas coloreadas. Los satoshis de Bitcoin coloreados siguen siendo válidos y se podrían gastar. Sin embargo ya no se suelen usar como moneda porque tienen más valor como moneda coloreada. El concepto, aunque fue ideado para Bitcoin, puede extenderse para otras cadenas de bloques
Las monedas coloreadas se aprovechan de las prestaciones que aporta la cadena de bloques subyacente. Por ejemplo las construidas sobre Bitcoin son validadas por los nodos, añadidas a los bloques, y añadidas a la cadena de bloques con el mismo nivel de verificación que cualquier bitcoin lo que permite tener ventajas de transparencia, inmutabilidad, facilidad de transferencia, eliminación de intermediarios y imposibilidad de doble gasto. Además, por diseño, los protocolos para monedas coloreadas comparten el modelo de autenticación de la cadena subyacente.
Las monedas coloreadas son manejadas por clientes especializados que graban e interpretan los metadatos adheridos. Estos clientes pueden generar monedas coloreadas a partir de monedas normales de la cadena subyacente. Una vez coloreadas estas monedas pueden ser vendidas, compradas, subdivididas, agregadas y recibir pagos de dividendos. Las monedas coloreadas puede además ser decoloreadas borrando los metadatos y por tanto su especial asociación.

## Usos

Las monedas coloreadas permiten asociar a una cantidad de criptomoneda un activo específico para que lo represente. El activo que representan puede ser por ejemplo una acción de una empresa, un lingote de oro, un dólar o un euro, un derivado, el título de propiedad de una casa, un voto o en general cualquier cosa. Implícitamente está la promesa del emisor de reembolsarla con algún bien o servicio. Los usuarios pueden usar monedas coloreadas como si fueran tokens virtuales que representan activos digitales. Estos tokens se pueden:
* Transferir entre individuos
* Combinar múltiples en uno con un valor más grande
* Dividir el valor en varios tokens de menos valor
* Usarlos en contratos en la cadena de bloques
* Almacenarlos en la cadena de bloques con procedimientos multifirma
* Probar de forma inequívoca que un token particular es un miembro válido de un conjunto creado por un emisor, sin requerir que el emisor cree y gestione un registro de tokens
Se pueden usar monedas coloreadas en una amplia variedad de aplicaciones como por ejemplo:
* Representar activos financieros (valores, acciones, materias primas como el oro etc.). Por ejemplo supongamos un emisor define el color 'oro' para la cadena de bloques Bitcoin. Él asocia cierto contrato con el color, por ejemplo, ofrece reembolsar oro físico. Así que este color 'oro' tiene el siguiente significado: Si txout es una salida de una transacción no gastado con la cadena de bloques Bitcoin y colorvalue(txout,oro)=x, entonces el emisor promete x gramos de oro a la parte que controle txout.
* Prueba de propiedad (una casa, un coche, una entrada para un concierto,...)
* Almacenar información (como películas, audio, documentos, certificado)
* Activos para operar con contratos inteligentes para por ejemplo transacciones financieras (convirtiendo así a las representaciones de la propiedad de los activos en propiedades inteligentes).
Podemos clasificar los diferente usos en tres categorías:
* Tickets.- Son tokens transferible que están diseñados para ser canjeados por algo del mundo real. Se pueden usar para por ejemplo: Entradas a espectáculos, cupones de oferta, puntos de vuelo.
* Certificados.- Son similares a los tickets pero además dan al portador alguna clase de recompensa pagada a través de la cadena de bloques por ejemplo préstamos, hipotecas, pago de dividendos
* Propiedades inteligentes.- Son transferibles como los tickets y certificados pero además cada propiedad inteligente es tanto única como atómica. Solo se crea una propiedad inteligente de un determinado identificador la cual es indivisible. Sus propiedades hacen que puedan ser usadas para indicar la productividad de un activo único del mundo real.

## Limitaciones

Tareas que los tokens virtuales no pueden realizar:
* No pueden obligar a que el mundo real cumpla los compromisos adquiridos cuando se emitieron. Las monedas coloreadas pueden representa algo que está fuera, en el mundo real, como una acción de una empresa o obligación de pagar una deuda. Intrínsecamente esto implica que están emitidas por una persona o entidad, lo que conlleva cierto riesgo asociado: Que el emisor no cumpla con sus obligaciones relacionadas o incluso puedan existir fraudes y que esas monedas no representen nada real en absoluto.
* No pueden prevenir que un usuario no manipule la criptomoneda subyacente de forma que destruya la información extra. Usar los tokens virtuales en una transacción que no cumple las reglas de las monedas coloreadas (más estrictas que las reglas de las transacciones de la cadena de bloques y no forzadas por esta) destruyen el significado extra, manteniendo únicamente su valor monetario en la cadena.
* La semántica de la información que indica lo que un token representa no puede ser almacenada. Por ejemplo la cadena de bloques puede registrar cuantos entradas a un concierto han sido emitidos y qué direcciones son las propietarias, pero no puede codificar el hecho de que representan una entrada autorizada respecto a un concierto particular en un lugar y hora determinada. El almacenamiento y las operaciones sobre metadatos requieren de un sistema externo como por ejemplo Open-Transactions. Open-Transactions es una librería libre de software con primitivas criptográficas financieras usada para implementar transacciones financieran criptográficamente seguras. Pue de ser usada para emitir stocks, pagar dividendos, vender y vender acciones etc.
* La velocidad de las transacciones y las capacidades de los procedimientos de los contratos que usan los tokens virtuales son los mismos que los de la cadena de bloque subyacente.

## Transacción génesis

Para crear un nuevo color, se tienen que emitir monedas de ese color a través de lo que se llama transacción génesis Bitcoin inicialmente no daba ningún soporte para meter en su cadena de bloques datos externos como por ejemplo el valor hash de un documento. Esto hizo que los desarrolladores que querían introducir datos externos en la cadena buscaran formas no ortodoxas para meter esos datos como por ejemplo usar para almacenar el dato el campo dirección en una salida. Después de que la transacción es minada esta información estará siempre en la cadena de bloques. De esta manera si alguien pide que se pruebe que un dato fue creado antes de cierta fecha se puede comprobar obteniendo el valor hash e indicando su posición en la cadena de bloques. Estos mecanismo producían que se perdieran satoshis ya que no existía una cartera que pudiera gastar ese satoshi. Además esa salida era monitoreada por los nodos de la red lo cual consumía recursos. Para proporcionar una alternativa menos destructiva y con la cual se pudiera indicar a los nodos que no requieren procesar la información de esa salida se incluyó en la versión 0.9 de Bitcoin la instrucción OP_RETURN.
Actualmente para crear una transacción génesis de monedas coloreadas se cumple lo siguiente:
* Reglas para la entradas
** Si se quiere un color no reeditable las entradas no son relevantes, el emisor no tendrá ningún poder una vez que la transacción se emita así que todo lo que se necesita es las salidas de la transacción. En este esquema lo importante es la transacción por eso se le llama coloreado basado en transacción
** Si se quiere color reeditable', es decir, el emisor puede crear posteriormente más monedas del mismo color. En este tipo el emisor debería escoger una dirección segura como dirección emisora y la entrada 0 de la transacción génesis será de esa dirección (la transacción puede tener más entradas). Más tarde, el emisor podrá emitir más unidades del color creando otras transacciones génesis con la misma dirección de la entrada 0. Lo que se hace es registrar los bitcoins que descienden de una transacción que pasa a través de direcciones definidas. Este funcionamiento implica que un ladrón que robe la clave privada de la dirección podría generar también nuevas unidades. Para asegurar su seguridad se recomienda que la dirección esté firmada por las claves privadas de otros usuarios En este esquema la importancia de la dirección emisora es crucial. Por eso se le llama Coloreado basado en direcciones.
* Las salidas de la transacción génesis son en este orden:
* Un conjunto de salidas que envían las monedas coloreadas a su propietario original. La cantidad de satoshis de cada salida indicará el monto de moneda coloreada que representa.
* Una transacción data output, con la instrucción OP_RETURN. Todos los datos que identifican la transacción como de emisión de monedas coloreadas están dentro de su campo de datos, el cual está organizado de la siguiente forma:
       Tamaño Campo Descripción 5 bytes 0,67,57,80,0 "CCP" rellenado por ceros a ambos lados identifica que se trata de una transacción génesis de color 2 bytes <versión protocolo> Número de versión del protocolo Resto <valor> Datos sobre el color (por ejemplo en la primera versión los dos primeros bytes indicaban la política de reemisión: 0 (no reemitible), 65535 para infinitamente reemitible desde la transacción génesis , resto de valores indican el número máximo de reemisiones)
* Una o más salidas de cambio para enviar el excenso de bitcoins no coloreados al emisor

## Transacciones de transferencia

Las monedas coloreadas se transfieren creando transacciones de transferencia que envían monedas coloreadas de una dirección a otra. Las transacciones de transferencia pueden tener como entrada monedas de diferentes colores o incluso monedas no coloreadas, todo en la misma transacción. De alguna forma se tiene que definir un mecanismo que permita pasar monedas de un determinado color de un usuario a otro. Todo este mecanismo tiene que ser comprobable a través de la cadena de bloques hasta llegar a la transacción génesis. Sin embargo en Bitcoin el protocolo no dicta una correspondencia entre entradas particulares y salidas. Por tanto independientemente de si tienen color asociado, el protocolo no permite identificar qué salidas específicas heredan el color de cierta entrada.
Sin embargo se pueden definir cierto convenios sobre cómo interpretar las transacciones para definir como se transfiere el color, esto es, convenio para determinar que salidas se corresponden con ciertos colores. Para que este convenio sea válido tiene que permitir el movimiento de monedas pero imposible crearlas. De esta forma verificar el color de una moneda consiste simplemente en aplicar este convenio a las transacciones hasta llegar a la transacción génesis.. A este convenio se le denomina función color kernel. Formalmente podemos decir que un color kernel (CK) es una función que dada una transacción (tx) con una serie de entradas, cada una de ellas color asociado a sus monedas (tx_in_cvalues), y unna serie de salidas, devuelve para cada salida un color asociado para sus monedas (tx_out_cvalues)
Como no podemos obtener el colorvalue de una entrada no coloreada, decimos que esta tiene color nulo..
Una solución naive podría ser requerir que todas las entradas tienen que ser del mismo color, y que en este caso las salidas son del mismo color también. Sin embargo con este método las comisiones de la transacción necesitarían ser pagados en monedas coloreadas, las cuales tienen más valor que monedas no reconocidas por la red. Además este método es demasiado estricto y no permitiría cierto tipo de aplicaciones.
El primer color kernel que permitía transferir en la misma transacción monedas con distintos colores fue OBC (del inglés Order-Based Coloring). Este color kernel tiene sus limitaciones. Poco a poco se han ido desarrollado otros como: TBC (del inglés Tagging-based Coloring), POBC (del inglés Padded Order-based Coloring), EPOBC (del inglés Enhanced, Padded, Order-Based Coloring), SPOBC (del inglés Smart Property Order-Based Coloring), DHKEC (del inglés Diffie-Hellman Key Exchange Coloring), CoinSpark, OpenAsset Protocol, Colu Colored Coins o Coloured Coins Protocol. Cada uno tiene sus ventajas, sus inconvenientes y sus propias posibles aplicaciones.< Así se han definido distintos protocolos dando lugar a implementaciones distintas las cuales son incompatibles entre sí.
Ejemplos de consideraciones que el color kernel puede tomar en consideración son:
* El balance de color de todas las entradas
* La posición de las salidas relativas a la entradas
* El tamaño relativo de las salidas
* Los detalles del script asociado a las salidas
* Información codificada en las cabeceras de la transacción. Por ejemplo el nSequence
Como las reglas del color kernel no son forzadas por la cadena de bloques subyacente, es posible crear transacciones de monedas coloreadas que no las cumplan. Estas transacciones no serán legítimas de cara a la conservación del color de cara al protocolo. El color será perdido. Los usuario de las monedas coloreadas tienen que tener cuidado de usarlas en transacciones que cumplan el convenio definido o si no perderán el color de sus monedas.
Como la validez de las transacciones de monedas coloreadas no son chequeadas por la red de la cadena de bloques, estos protocolos carecen de métodos de verificación de pagos eficientes

### OBC

Las siglas vienen del inglés Order-Based Coloring. El convenio se basa en las siguientes reglas:
* Las entradas y las salidas están ordenadas por color, las monedas no coloreadas están al final
* El mismo orden de colores se usará tanto para las entradas como para las salidas
* Para cada color, el valor total de las entradas es igual al valor total de las salidas, solo las monedas no coloreadas pueden ser de una cantidad más granda a la entrada que a las salida (las comisiones se pagarán con estas monedas)
Para interpretar una transacción:
* Ponemos los diferentes colores en orden
* Para cada color sumamos las monedas de entradas de este color.
* A continuación para cada salida en su orden asignamos cada color, hasta que el valor total de salida es igual al valor de entrada
* A continuación pasamos al siguiente color asignando monedas de salida hasta conseguir que las monedas de ese color a la salida sean iguales a las que se tienen en la entrada
* Así continuamos hasta que acabamos con las monedas de color y empezamos con las monedas no coloreadas. Si el total de monedas no coloreadas es menor que el de la entrada entonces el resto será para las comisiones de la transacción.
Si por ejemplo tengo una transacción con 5 entradas con respectivamente:
* 13 monedas rojas
* 6 monedas verdes
* 4 monedas verdes
* 9 monedas azules
* 2 monedas azules
* 8 monedas coloreadas
y tengo las siguientes salidas:
* 3 monedas para #0
* 6 monedas para #1
* 4 monedas para #2
* 10 monedas para #3
* 3 monedas para #4
* 8 monedas para #5
* 5 monedas para #6
* 2 monedas para #7
Entonces el color de las monedas será el siguiente:
* Para #0 3 monedas rojas
* Para #1 6 monedas rojas
* Para #2 4 monedas rojas
* Para #3 10 monedas verdes
* Para #4 3 monedas azules
* Para #5 8 monedas azules
* Para #6 5 monedas no coloreadas
* Para #8 2 monedas no coloreadas
Se deja 1 moneda para comisiones
Los inconvenientes de este sistema son los siguientes:
* Para representar pequeñas cantidades de color necesitamos transacciones con salidas con pequeñas cantidades de satoshis. Sin embargo este tipo de salidas están desaconsejadas en los nodos de Bitcoin porque pueden ser usadas para crear grandes cantidades de UTXO las cuales consumen los recursos de los nodos.
* Considerando solo la transacción no es posible identificar salidas que potencialmente no tengan monedas coloreadas. Los clientes tienen que ir hacia atrás para finalmente encontrar que no son monedas coloreadas, lo cual puede ser computacionamente muy caro.

### POBC

Las siglas vienen del inglés Padded Order-based Coloring. Es una evolución de OBC intentando remediar alguno de sus inconvenientes. Para evitar problemas con los valores pequeños de las salidas, usamos relleno. Definiremos el valor coloreado como el valor real menos el de relleno. El relleno es un parámetro el cual estará definido para el color (a esta operación se la llama calcular el balance de color). Si una entrada o una salida tienen un valor menor o igual al relleno utilizado, esta entrada/salida estará fuera de las consideraciones de color junto con susu subsecuentes entradas y salidas.
En este esquema las monedas coloreadas se transfieren solo si:
* Todas las entradas con monedas no coloreadas son adyacentes.
* Encontramos una secuencia de entradas que tienen todas las entradas con monedas coloreadas y existe una secuencia de salidas que se ajusta con ella.
En este caso todas las salidas de la secuencia encontrada obtendrán el color que le toque teniendo en cuenta el valor de relleno (el resto cogerán las monedas sin color). En otro caso la transacción no está bien formada y las monedas coloreadas se destruyen. Esta regla es añadida para permitir que los clientes reconozcan rápidamente muchas transacciones Bicoin como no coloreadas y por tanto las puedan descargar inmediatamente.
Por ejemplo, si una vez quitadas las cantidades de relleno, tenemos los tamaños de entrada [6,6,6,7,5,3] y las da las salidas [9,9,10,2,2,1], las secuencias que ajustan serían ([6,6,6], [9,9]), ([7,5],[10,2]) y ([3],[2,1]). Con cada secuencia si todas las entrada tienen el mismo color entonces las salidas serán de ese color, en otro caso las salidas no tendrán color.

### TBC

Las siglas vienen del inglés Tagging-based Coloring. En ella se usa una etiqueta para determinar el color. Los dos últimos dígitos de la salida son usados para representar el color de la salida. Como hay un riesgo de colisión (de hecho con 101 colores al menos dos tienen que tener los mismos dos dígitos), Asignamos a cada color 10 parejas de dos dígitos identificadoras, y damos al usuario libertad para escoger el identificador que es único para un particular color en el intercambio. A diferencia de otros algoritmos, en este hay que llevar a cabo un seguimiento para verificar que todo es consistente.