retep wrote a comment in github discussion of anti-dust patch (
https://github.com/bitcoin/bitcoin/pull/2577 ):
You know, if the colored coin people can't figure out how to make colored coin systems work with this patch, screw them. I've told them how to do it right multiple times and they don't listen, which is plenty enough evidence that they're amateurs who don't understand what they're doing. So why let their lack of imagination threaten Bitcoin?
Sure:
https://github.com/petertodd/trustbits/blob/master/fidelitybond.md#contracts It's from my fidelity bonds stuff, but the mechanism is just a way of doing colored coins really. The advantage is that because value isn't a fixed ratio of shared to satoshi's you can divide however much you want and still avoid dust rules, and it's friendly to SPV nodes. Now if your bond value is smaller than a tx fee, well, use a off-chain tx system that's compatible with Bitcoin transactions, basically a blockchain who's contents is guaranteed by a third party.
I want to comment on this...
First, I don't think that anti-dust patch causes problem for colored coins... People should just accept that creating units has non-zero cost.
Suppose you want to issue USDcoins (a pegged currency). You can make a unit such that 50000 satoshi = 1 USDcoin.
Then to create 1 USDcoin you need $0.065 worth of Bitcoins at current exchange rate. E.g. to issue $10000 in USDcoins you need $650 worth of Bitcoins. Is it a problem?
It might be a problem if you're 12 year old scammer who doesn't get enough money from parents, but if you're a honest issuer getting Bitcoins upfront won't be a problem.
Then, Gavin's patch would ban sending less than $0.11, while retep's patch would require to send at least $1 in USDcoins.
Is that a problem? I don't think so... If you need to send something on $1 scale, fees will bite you anyway... At such scales off-blockchain transactions can be useful.
Divisibility might be desired for some uses, such as issuing shares which might fluctuate in value (e.g. see what happened to Berkshire Hathaway), but I don't think it is a crucial issue. If anything, there is a mechanism for issuer to re-issue shares and exchange old shares for new shares.
Another question is why we don't use retep's coloring mechanism... Well, there are several reasons for that.
First of all, we considered something similar (color tags in value or in scriptPubKey), but:
1. Odd/even trick works only for one color in transaction, which rules out plenty of interesting things, such as, for example, exchanging GOLDcoins for USDcoins, Ripple-like multiparty transactions, multiple issues and assets with multiple issuers.
2. There are two problems with tags in scriptPubKey: they add to blockchain bloat, and they need a specific scriptPubKey format.
So, basically, we need to define how output is color-tagged for each scriptPubKey form... Which is a bad thing, I think.
Only fixed number of script forms can be used, and adding more will require a colored coin analog of hard-fork, i.e. an upgrade for all colored coin clients.
On the other hand, order-based coloring does not require any particular form of script. You can use P2SH, not use P2SH, use multi-signature transactions, any contracts... It just works (tm), and requires no hard forks, ever.
So the reason to use order-based coloring instead of color tagging is minimal overhead and maximum flexibility w.r.t. advanced scripts.
Another reason is complexity... Order-based coloring requires just a couple hundred lines of code to implement, and so does modification of wallet. p2ptrade implementation is just 500 lines of code in Python. (It is pretty much trivial to compose multi-party transactions, see here:
http://i.imgur.com/UIFfvr8.png)
On the other hand, implementing retep's contracts would require like 10000 lines of code... It's not only a problem to write such code, it is a problem that there will be a shitload of corner cases and, thus, bugs. (There is a reason why we have colored coin implementations (I think we now have something like four of them), but no fidelity bond implementations, right?)
Even contract value accounting is a problem:
Vout_n = SUM(Vin) * vout_n/SUM(vout)
To implement this exactly, you need infinite precision rational numbers (SUM(vout) can be anything, right?)... and this is not what I want to see in finance software, let alone crypto software...
One could require SUM(vout) to be in form 10^i for some integer i. But even then you need bignums to work with these numbers... Suppose somebody clever will divide shares into 0.1 and 0.00000000000000000000000000001, and will add them together. How much memory do you need to store this value?
So, to summarize, retep's contract mechanism offers small advantages, but big disadvantages, and we aren't going to use it.
(Also there is a desire to get shit done without spending years on discussion. Even if that accounting mechanism was clearly superior, solution which is "good enough" shouldn't be replaced with something better just because it is better.)