Join GitHub today
EPOBC: Enhanced padded order-based coloring
Simple order-based coloring becomes inconvenient when anti-dust rules are in effect: if protocol disallows outputs smaller than 5500 satoshi and someone wants to issuer 1 million atomic units, he needs 55 BTC for that.
With padded order-based coloring we can keep using the idea of encoding output colorvalues in output satoshi values, but have an atomic unit as small as 1 satoshi.
Another feature which differentiates EPOBC from OBC is transaction-tagging: it gives us an ability to differentiate uncolored, genesis and transfer transactions. It has following benefits:
- fast detection of uncolored outputs
- we can assume that there is at most one EPOBC colorvalue per output, which can make implementation simpler and more efficient
- one address can be used for different EPOBC colors
- it is possible to identify color of a received coin
Compared to other protocols (e.g based on OP_RETURN), EPOBC is simpler and has fewer limitations. E.g. number of inputs and outputs is limited only by Bitcoin protocol.
However, associating colorvalues with number satoshis can be limiting in case application needs a large number of atomic units. In that case OpenAssets protocol would be better than EPOBC.
Another important difference between EPOBC and OpenAssets is that in case with EPOBC total amount of colored coins of a specific color is defined in genesis transaction and cannot be changed.
Each transaction which transfers or creates EPOBC coins must have a transaction-tag, which is placed into nSequence of the first input (this field is otherwise unused). Tags for genesis and transfer transactions are different. Additionally, this tag encodes amount of padding used for outputs of this transaction.
Padding is either 0 (no padding used), or
1 <= pc <= 63, where pc is padding code contained in nSequence tag.
Color kernel is identical to simple OBC color kernel once satoshi values of inputs and outputs are reduced by corresponding padding values. (For inputs, we use padding of transaction it came from.)
Particularly, if padding of a transaction is zero, and padding of transactions referenced by inputs are also zero, produced coloring as same as OBC.