Wednesday, 17 October 2012

Coloured coin stock exchange project

An interesting thread - https://bitcointalk.org/index.php?topic=118672.0

Stock exchange based on colored coins

Stock market needs some unique features, so I'm going to describe how they map unto 'colored coin' concept.

(Please check general intro into colored coins first if you aren't familiar with it: https://bitcointalk.org/index.php?topic=106373.0)

I. Issuing shares.

So you have a company and you want to issue shares. To do that, you create a color definition (with help of client software, which will likely have "issue shares" button). Color definition should include:

1. Genesis transaction information (transaction hash, output number). Genesis transaction will be created by client software out of coins you already own.
2. Information about units, e.g. 1 satoshi in genesis transaction = 1 share.
3. Display name, e.g. "XYZ corporation"
4. Identifier of a contract, e.g. its hash
5. Identifier of a color, e.g. hash of address used to issue shares.

Once you've made this color definition you can upload it to your site or maybe into some color definition directory. Anybody who is interested in XYZ corporation will be able to get this definition and import it into their client software.

After that you can sell your shares in an IPO. People who have imported color definition will be able to distinguish shares from normal bitcoins. (How exactly shares can be traded is discussed below.)

But we have an open question: how would we handle additional share issues? Quite often company needs to issue more shares.

There is a couple of possible approaches:

1. Do not allow additional issues at all. All authorized shares should be included into original color definition. If necessary, company can sell them in blocks, keeping some unissued/treasury shares for itself. So one should authorize more shares than he plans to sell, just in case...

2. Client software should recognize ALL outputs which come from issuing address as issues of shares. So, basically, issuer can make any amount of shares at any time.

3. Client software will identify all outputs which come from issuing address, but it will ask confirmation from user before it will start recognizing coins coming from those new outputs. I.e. client software will show a message: "XYZ corporation issued 1000 more shares. Do you approve that?"

4. Additional issue is done through updated color definition. Users will have to import updated definition manually. (Or perhaps client software will pull it from some directory and will ask whether they approve changes.)

Approaches 1 and 2 are problematic because issuer can suddenly release a large quantity of shares, thus diluting existing shareholders/bondholders. It can make shareholder identification rather problematic.

So I'm more for approaches where user needs to consent to new issue. It is more democratic, i.e. people kind of vote for whether they authorize new issue (it is different from a normal shareholder vote because it is implicit). Also they have control: if something weird will happen, people will have a warning before they accept diluted shares. E.g. consider a scenario with a hacked server: attacker obtains private key used to sign color definition, issues more shares and tries to dump them on market to get money. If there is a confirmation, he won't be able to do that.
In next releases we'll discuss these topics:

II. Trading, i.e. exchange proper functionality.
III. Shareholder voting, shareholder identification.
IV. Dividends.
V. Buybacks.

Stay tuned!

I'm going to sleep now, though...

https://bitcointalk.org/index.php?topic=118672.0