Hi,

I am the lead developer of Coinprism, the new colored coins web wallet. After some discussions with the other people involved with colored coins, I wrote a specification document describing the colored coins protocol that we are using in coinprism.

I am looking for feedback/discussions regarding the protocol before we move from TestNet to MainNet. The document is here: https://github.com/Flavien/colored-coins-protocol/blob/master/specification.mediawiki.

The colored coin protocol is layered on top of the existing Bitcoin protocol and requires no modification of the existing protocol, so it can be used today. This means that SPV is not as efficient, as the client needs to backtrack up to the issuing transaction to find the color of an output, but that is something we can live with.


The protocol marks transactions either as issuance or transfer transactions by using an OP_RETURN output with a 9 bytes marker. The protocol uses the value of an output as the colored value. So if an output has 1 BTC and is colored with color A, that means we have 1 BTC colored with color A.

An alternative would have been to completely disconnect the colored value and the real BTC value. The colored value of each output would be encoded in an OP_RETURN output. Someone who wants to send 1000 colored coins would craft a transaction with an output with the smallest possible amount of BTC (5,400 satoshis) and indicate in the OP_RETURN that they are sending 1000 colored coins.
The two reasons why we haven't chosen that approach is that first, this only works with a limited number of outputs given that we have only 40 bytes. And second, this could lead to people spamming the network with very small outputs (but containing an arbitrary number of colored coins).

On the other hand, with the approach we're using (colored value = actual value of the output), the 5,400 satoshis rule means that the smallest unit of colored coin you can send is 5,400 satoshis.

If you want to issue 1 million shares, while still being able to trade each share individually, you'd have to set 1 share = 5,400 satoshis, and you would need a capital of 54 BTC for issuing a million shares. It's not a big problem in itself, but still a slight inconvenience.

Do you think this is the right approach?

Feel free to reply with any feedback regarding the protocol.

Thanks,
Flavien