Colored Coinプロトコル
Tapyrusでは、基軸通貨(TPC)以外のトークンを取引するために、Colored Coinと呼ばれる仕組みを採用しています。 これはブロックチェーンの1stレイヤーでネイティブにサポートされるトークン機能で、 コンセンサスレベルでトークンの正当性が検証されます。
1 Colored Coinの概要
ブロックチェーン上で基軸通貨以外のトークンを取り扱うには、各トークンを識別するためのIDが必要になります。 BitcoinベースのOpen Assets Protocolのような2ndレイヤープロトコルでは、トークンのIDを特定するために 発行トランザクションまでの履歴を遡る必要がありました。
Tapyrusでは、新しくOP_COLOR opcodeを導入し、コンセンサスレベルでトークンの識別と検証を行います。
これにより、各UTXOに直接Color IDが含まれるため、トランザクションを遡ることなく即座にトークンを識別できます。
これは特に軽量ノードにとって大きなメリットとなります。
2 OP_COLORと検証ルール
Colored Coinの検証は、スクリプトレベルとトランザクションレベルの2段階で行われます。
2.1 OP_COLOR opcode
OP_COLOR(0xbc)は、トークンの発行、転送、焼却を可能にするopcodeです。
スクリプトレベルの検証:
- スタックの最上位要素をColor IDとして解釈します
- スタックが空の場合、スクリプトの評価は失敗します
- Color IDが33バイトでない場合、スクリプトの評価は失敗します
2.2 トランザクションレベルの検証
スクリプトの評価が成功した後、トランザクション全体で以下の検証が行われます。
原資の確認: アウトプットで指定されたColor IDと同じIDを持つトークンが、インプットに含まれているか確認します。 これにより、持っていないトークンを勝手に作成することを防ぎます。
ただし、発行トランザクションの場合は例外で、インプットのscriptPubkey(C1)またはOutPoint(C2/C3)から 正しくColor IDが導出されていれば、新規トークンの作成が許可されます。
量の保存: 同じColor IDについて、インプットのトークン総量 ≥ アウトプットのトークン総量であることを確認します。 これにより、トークンを勝手に増やすこと(インフレーション)を防ぎます。
例えば、100トークン持っている場合、最大100トークンまでしか送れません。 50トークン送ると、残り50トークンは別のアウトプットでお釣りとして受け取るか、焼却されます。
その他の条件:
- C3タイプの場合、発行量は必ず1でなければなりません
3 Color ID
Color IDは、1バイトのタイプと32バイトのペイロードで構成されます:
Color ID = Type (1 byte) + Payload (32 bytes)
| タイプ | 名称 | ペイロードの生成方法 | 特徴 |
|---|---|---|---|
| 0xC1 | Reissuable | 発行インプットのscriptPubkeyのSHA256ハッシュ | 再発行可能なトークン |
| 0xC2 | Non-reissuable | 発行インプットのOutPointのSHA256ハッシュ | 再発行不可能なトークン |
| 0xC3 | NFT | 発行インプットのOutPointのSHA256ハッシュ | 発行量が1に限定されるNFT |
Table #1: Color IDのタイプ
3.1 Reissuable Token(C1)
再発行可能なトークンです。Color IDは、インプットが参照するscriptPubkeyのSHA256ハッシュ値から生成されます。
Color ID = 0xC1 || SHA256(scriptPubkey)
同じscriptPubkeyを持つUTXOから、同じIDのトークンを何度でも発行できます。 これにより、特定のアドレス(スクリプト)の所有者が追加発行を行う権限を持つトークンを実現できます。
3.2 Non-reissuable Token(C2)
| 再発行不可能なトークンです。Color IDは、インプットの参照値(OutPoint = TXID | index)のSHA256ハッシュ値から生成されます。 |
Color ID = 0xC2 || SHA256(OutPoint)
OutPointはブロックチェーン上で重複できないため、同じIDのトークンを再度発行することはできません。 発行時に総供給量が確定するトークンに適しています。
3.3 NFT(C3)
Non-Fungible Token(NFT)です。C2と同様にOutPointからColor IDを生成しますが、発行量が必ず1に制限されます。
Color ID = 0xC3 || SHA256(OutPoint)
一意のデジタル資産を表現するのに適しています。
4 トークン操作
4.1 発行(Issue)
新しいトークンを発行するには:
- 任意のUTXOをインプットとして使用
- Color IDを導出(タイプに応じてscriptPubkeyまたはOutPointから)
- CP2PKHまたはCP2SHスクリプトを含むアウトプットを作成
4.2 転送(Transfer)
トークンを転送するには:
- 既存のトークンUTXOをインプットとして使用
- 同じColor IDを持つアウトプットを作成
- 手数料用のTPCインプットも必要
重要: 入力のトークン総量 ≥ 出力のトークン総量である必要があります。
4.3 焼却(Burn)
トークンを焼却(破棄)するには:
- 焼却したいトークンUTXOをインプットとして使用
- 手数料用のTPCインプットも必要
- アウトプットにはTPCのお釣りのみ(トークンアウトプットなし)
トークンアウトプットを作成しないことで、インプットのトークンは永久に消滅します。
5 スクリプトフォーマット
Colored Coinでは、2種類のスクリプトタイプがサポートされています。
5.1 CP2PKH(Colored Pay to Public Key Hash)
通常のP2PKHスクリプトの先頭にColor IDとOP_COLORを付加した形式です。
<Color ID> OP_COLOR OP_DUP OP_HASH160 <H(pubkey)> OP_EQUALVERIFY OP_CHECKSIG
5.2 CP2SH(Colored Pay to Script Hash)
通常のP2SHスクリプトの先頭にColor IDとOP_COLORを付加した形式です。
<Color ID> OP_COLOR OP_HASH160 <H(redeem script)> OP_EQUAL
6 アドレスフォーマット
CP2PKHおよびCP2SHアドレスは、53バイトのペイロードを使用します:
Payload = Color ID (33 bytes) + Pubkey Hash or Script Hash (20 bytes)
| フォーマット | Production Version | Development Version |
|---|---|---|
| CP2PKH | 0x01 | 0x70 |
| CP2SH | 0x06 | 0xC5 |
Table #2: アドレスバージョンバイト
7 トークンメタデータ(TIP20)
TIP20は、Colored Coinトークンにメタデータを紐付けるための標準仕様です。 これにより、ウォレットやアプリケーション間で一貫したトークン情報の表示が可能になります。
7.1 メタデータの紐付け方法
メタデータはPay to Contract(P2C)アドレスを通じてトークンに紐付けられます。
- P2Cアドレスの導出: ベースとなる公開鍵と正規化されたメタデータのハッシュを組み合わせて、P2C公開鍵を生成
- トークン発行: P2Cアドレスに送金し、そのUTXOをトークン発行トランザクションのインプットとして使用
- 暗号学的な紐付け: このインプットからColor IDが導出されるため、メタデータとトークンが暗号学的に結び付けられます
この仕組みにより、メタデータが特定のColor IDに対して正当なものであることを暗号学的に検証できます。
7.2 必須フィールド
| フィールド | 説明 | 制約 |
|---|---|---|
| name | トークンの名称 | 最大64文字 |
| symbol | トークンのシンボル(ティッカー) | 最大12文字 |
7.3 オプションフィールド
| フィールド | 説明 |
|---|---|
| decimals | 小数点以下の桁数(0〜18) |
| description | トークンの説明 |
| icon | トークンのアイコン画像(HTTPS URLまたはData URI) |
| website | 公式ウェブサイト |
| issuer | 発行者情報 |
| terms | 利用規約へのリンク |
| properties | カスタム属性 |
NFTの場合は、image、animation_url、external_url、attributes(トレイト情報)などの追加フィールドも利用可能です。
7.4 メタデータの検証
- メタデータはRFC 8785に基づいてJSON正規化され、決定論的なハッシュ計算が行われます
- P2Cの仕組みにより、メタデータが対応するColor IDに対して正当であることを検証できます
7.5 メタデータの共有
メタデータは直接ブロックチェーンに登録されるわけではないため、オフチェーンで共有する必要があります。 共有方法は特に限定されていませんが、Tapyrus Token Registryを利用することで、 メタデータを公開・共有できます。
Token Registryへの登録方法:
- tapyrus-token-registryリポジトリにアクセス
- 「Token Registration」テンプレートを使用してIssueを作成
- 必要な情報(Color ID、メタデータ、ベース公開鍵、発行トランザクションのOutPointなど)を入力
- 入力内容がTIP20のルールに適合しているか自動検証される
- 検証をパスするとレジストリに登録され、共有される
8 メリット
Tapyrus Colored Coinの主なメリット:
- コンセンサスレベルでの検証: トークンの正当性がネットワーク全体で検証される
- 即時識別: UTXOを見るだけでColor IDを特定可能(トランザクション履歴の遡りが不要)
- 軽量ノード対応: SPVノードでもトークンを安全に扱える
- 効率的なスペース利用: 2ndレイヤープロトコルで必要だったMarker Outputが不要
- 柔軟なトークン設計: 用途に応じてC1/C2/C3を選択可能