Cosmosアドレス変換ツールとは
Cosmosアドレス変換ツールは、任意のCosmos SDKチェーンのbech32アドレスを生のアカウントバイト列(ウォレットは20バイト、モジュールアカウントやコントラクトアカウントは32バイト)にデコードし、そのバイト列を別の人間可読プレフィックスで再エンコードします。Cosmos SDKチェーンはすべてCosmos SDKのアカウントドキュメントに記載された同じエンコーディングを使います。プレフィックス、区切り文字の 1、bech32の32文字アルファベットによるデータ、6文字のチェックサムという構成です。チェーン間で異なるのはプレフィックスだけなので、同じバイト列を持つ cosmos1…、osmo1…、juno1… アドレスは同じ鍵に属します。
変換の仕組み
- プレフィックスを含む文字列全体に対してbech32チェックサムを検証します。ツールはSegWitアドレスと同じpolymodを、bech32定数1で使用します(Cosmosはbech32mを使いません)。
- 5ビットのデータグループをパディングなしでバイト列に戻し、20バイトまたは32バイトであることを要求します。
- 表中の各プレフィックスについて、バイト列を5ビット値に再グループ化し、そのプレフィックスで新しいチェックサムを計算します。
変換例
アドレス cosmos15c20sqakl4uqnp4y93uwe8rlwlnda5futtjxsl は20バイトの 0xa614f803b6fd780986a42c78ec9c7f77e6ded13c にデコードされます。このバイト列をOsmosisのプレフィックスで再エンコードすると、32文字のデータ部分は同じで6文字のチェックサムだけが異なる osmo1… アドレスになります。プレフィックスがチェックサムの入力に含まれるためです。EIP-55チェックサム付きの 0x 形式は、EVM互換チェーンが同じバイト列に対して表示するアドレスです。
表に含まれるプレフィックス
| プレフィックス | チェーン | 鍵導出 | プレフィックス | チェーン | 鍵導出 |
|---|---|---|---|---|---|
| cosmos | Cosmos Hub | secp256k1 | celestia | Celestia | secp256k1 |
| osmo | Osmosis | secp256k1 | dydx | dYdX Chain | secp256k1 |
| juno | Juno | secp256k1 | noble | Noble | secp256k1 |
| stars | Stargaze | secp256k1 | neutron | Neutron | secp256k1 |
| akash | Akash | secp256k1 | stride | Stride | secp256k1 |
| kava | Kava | secp256k1 | evmos | Evmos | ethsecp256k1 |
| secret | Secret Network | secp256k1 | cre | Crescent | secp256k1 |
| axelar | Axelar | secp256k1 | regen | Regen | secp256k1 |
| inj | Injective | ethsecp256k1 | terra | Terra | secp256k1 |
| sei | Sei | secp256k1(EVMアドレスをオンチェーンで関連付け) | kujira | Kujira | secp256k1 |
このリストにないプレフィックスのアドレスもデコードされ、そのプレフィックスのまま表の先頭に表示されます。
変換後のアドレスが自分のものである場合とそうでない場合
KeplrやLeapなどのウォレットは、ニーモニックからチェーンごとに1つの鍵を導出します。標準のコインタイプ118とsecp256k1導出を共有するチェーンでは、各チェーンで導出されるアドレスは再エンコードしたものと完全に一致します。「別チェーン上の自分のアドレス」へのIBC送金が成り立つのはこのためです。コインタイプ60とEthereum式の鍵を使うチェーン(Injective、Evmos)は異なるバイト列を導出し、Seiはバイト列を共有するのではなく、オンチェーンの関連付けによって別のEVMアドレスをsei1アカウントに紐付けます。変換後のアドレスに送金する前に、そのチェーンのウォレットで確認してください。
典型的な用途
- ウォレットが1つのチェーンしか表示しないときに、Cosmos HubアドレスからOsmosisやCelestiaの入金アドレスを調べる。
- MetaMaskの0xアドレスを、取引所の出金フォームが要求する
inj1…やevmos1…形式に変換する。 - アカウントアドレスを入れるべき場所に
valoperアドレスが貼り付けられていないか確認する。
任意のプレフィックスを持つ生のbech32文字列にはbech32エンコーダー / デコーダーを、EIP-55形式の検証にはEthereumチェックサム変換ツールをご利用ください。