はじめに
『DApps開発入門』という本や色々記事を書いているかるでねです。
今回は、複数のブロックチェーンを一意に識別できる文字列を定義し、アセットやコントラクトを参照できる仕組みを提案しているCAIP2についてまとめていきます!
以下にまとめられているものを翻訳・要約・補足しながらまとめていきます。
他にも様々なEIP・BIP・SLIP・CAIPについてまとめています。
概要
CAIP2は、特定のブロックチェーンを人間にも開発者にもわかりやすく、さらにトランザクションで扱いやすい形式で識別するためのルールを提案しています。 これにより、Ethereum MainnetやGörliなどのEthereum系チェーンだけでなく、BitcoinやCosmos Hubといった異なるブロックチェーンも統一的に識別できます。 Ethereumでは通常、EIP155で定義されたチェーンIDを使いますが、これはEthereum系のネットワークしか識別できず、異なるチェーンには対応できません。 CAIP2はその制約を超えて、あらゆるチェーンを一貫した方法で参照できるようにします。
EIP155については以下の記事を参考にしてください。
動機
CAIP2が提案された直接のきっかけは、Ethereum Magiciansフォーラムで行われたEIP2256に関する議論でした。 その中で「ウォレットやスマートコントラクトが、どのチェーン上に存在するのかを正確かつ共通の形式で示す必要」が浮き彫りになりました。 また、同時期に立ち上げられた「Universal Chain Registry」というプロジェクトでも、正しく定義されたチェーン識別子が必要とされていました。 そこで、ネットワークIDの形式を議論する中で、EthereumコミュニティとChainAgnosticグループが合流し、ブロックチェーンを横断的に識別する統一仕様としてCAIP2の策定が進みました。 これにより、異なるチェーン間で資産やコントラクトを参照する際の混乱を防ぎ、開発や運用の効率を高めることができます。
仕様
CAIP2で定義される「ブロックチェーンID(chain ID)」は、開発者が扱いやすくかつチェーンを一意に識別できる文字列形式です。 この形式を使うことで、異なるブロックチェーンを同じルールで区別でき、アプリケーションやサービス間で統一した参照が可能になります。
構文(Syntax)
ブロックチェーンIDは以下の形式を持つ大文字・小文字を区別する文字列です。
chain_id: namespace + ":" + reference
namespace: [-a-z0-9]{3,8}
reference: [-_a-zA-Z0-9]{1,32}最初にnamespace(名前空間)があり、その後にコロン:で区切ってreference(参照名)が続きます。
namespaceは3〜8文字で、小文字の英数字とハイフンが使用可能です。referenceは1〜32文字で、英数字(大文字小文字)、ハイフン、アンダースコアが使用可能です。
セマンティクス(Semantics)
namespaceは、類似したブロックチェーンをまとめる分類名の役割を持ちます。
通常は特定のエコシステムや標準を示し、例えばcosmosやeip155といった名前が使われます。
1つのnamespaceは、チェーンを解決(識別)するための1つの決まった方法に対応します。
referenceは、そのnamespace内で特定のブロックチェーンを識別するための固有名です。
例えば、Ethereumのメインネットを示す場合は、eip155:1のように書かれます。
なお、namespaceごとの詳細な仕様や、referenceの細かい構文・意味は、それぞれ別のCAIP文書で定義されます。
これにより、エコシステムごとの識別方法を柔軟に拡張しながらも、統一的な識別ルールを保つことができます。
補足
CAIP2で定義されるチェーンID形式の目的は、大きく分けて4つあります。 まず、ブロックチェーン全体のエコシステムにおいて一意であることが最優先されます。これにより、どのチェーンを指しているかが世界中の開発者やシステムで共通に理解できます。 次に、人間がある程度読みやすく、簡単なデバッグにも役立つように設計されています。 さらに、オンチェーン上に保存できるよう、文字数や構造が制限されており、ハードウェアウォレットの画面でもトランザクション情報として安全に表示できるシンプルな文字構成が採用されています。
加えて、副次的な利点として、URLのパス部分にそのまま使用できたり、LinuxやGitなどの大文字・小文字を区別するUNIX系ファイルシステムでファイル名として使えるようになっています。 一方で、大文字・小文字を区別しないmacOSや、Windowsのファイルシステムでそのままファイル名として使えることは、仕様上の制約を守るためにあえて諦めています。
テストケース
CAIP2では、チェーンIDがどのように使われるのかを示す具体例が用意されています。
例えば、Ethereumメインネットはeip155:1、Bitcoinメインネットはbip122:000000000019d6689c085ae165831e93と表記します。
これは、それぞれのnamespaceとreferenceを組み合わせてチェーンを一意に表しています。
Cosmos Hubの場合は、ネットワークのバージョンに応じてcosmos:cosmoshub-2やcosmos:cosmoshub-3といった形式になります。
Binance Chainも同様にCosmos系のnamespaceを使い、cosmos:Binance-Chain-Tigrisという識別子を持ちます。
また、LitecoinやFeathercoinのように、Bitcoinをベースに派生したチェーンも、それぞれ固有のreferenceを持つbip122形式で表現されます。
その他にも、StarkNetテストネットはstarknet:SN_GOERLI、Liskメインネットはlip9:9ee11e9df416b18bと定義されます。
最後に、最大長の例として、namespaceが8文字、コロン、そしてreferenceが32文字で合計41文字のchainstd:8c3444cf8970a9e41a706fab93e7a6c4というダミー形式も示されています。
これにより、仕様上の制限内でどこまで長くできるかも確認できます。
引用
Copyright and related rights waived via CC0.
最後に
今回は「複数のブロックチェーンを一意に識別できる文字列を定義し、アセットやコントラクトを参照できる仕組みを提案しているCAIP2」についてまとめてきました! いかがだったでしょうか?
質問などがある方は以下のTwitterのDMなどからお気軽に質問してください!
他の媒体でも情報発信しているのでぜひ他も見ていってください!


