Cosmosアドレス変換ツール:Bech32プレフィックス変更

Cosmosエコシステムのアドレスを貼り付けると、同じアカウントを20の主要チェーン向けに再エンコードした結果と、生の20バイトhexが表示されます。0xアカウントをInjectiveやEvmosなどのbech32形式にエンコードすることもできます。

任意のbech32アドレス(cosmos、osmo、juno、celestia、dydx、inj、sei、kava、akash、stars、axelar、noble、neutron、strideなど)、valoper / valconsアドレス、または20バイトか32バイトの0x hexアカウント。

ブラウザ内のJavaScriptでチェックします。アドレスがアップロードや保存されることはありません。

Cosmosアドレス変換ツールとは

Cosmosアドレス変換ツールは、任意のCosmos SDKチェーンのbech32アドレスを生のアカウントバイト列(ウォレットは20バイト、モジュールアカウントやコントラクトアカウントは32バイト)にデコードし、そのバイト列を別の人間可読プレフィックスで再エンコードします。Cosmos SDKチェーンはすべてCosmos SDKのアカウントドキュメントに記載された同じエンコーディングを使います。プレフィックス、区切り文字の 1、bech32の32文字アルファベットによるデータ、6文字のチェックサムという構成です。チェーン間で異なるのはプレフィックスだけなので、同じバイト列を持つ cosmos1…、osmo1…、juno1… アドレスは同じ鍵に属します。

変換の仕組み

  1. プレフィックスを含む文字列全体に対してbech32チェックサムを検証します。ツールはSegWitアドレスと同じpolymodを、bech32定数1で使用します(Cosmosはbech32mを使いません)。
  2. 5ビットのデータグループをパディングなしでバイト列に戻し、20バイトまたは32バイトであることを要求します。
  3. 表中の各プレフィックスについて、バイト列を5ビット値に再グループ化し、そのプレフィックスで新しいチェックサムを計算します。

変換例

アドレス cosmos15c20sqakl4uqnp4y93uwe8rlwlnda5futtjxsl は20バイトの 0xa614f803b6fd780986a42c78ec9c7f77e6ded13c にデコードされます。このバイト列をOsmosisのプレフィックスで再エンコードすると、32文字のデータ部分は同じで6文字のチェックサムだけが異なる osmo1… アドレスになります。プレフィックスがチェックサムの入力に含まれるためです。EIP-55チェックサム付きの 0x 形式は、EVM互換チェーンが同じバイト列に対して表示するアドレスです。

表に含まれるプレフィックス

プレフィックスチェーン鍵導出プレフィックスチェーン鍵導出
cosmosCosmos Hubsecp256k1celestiaCelestiasecp256k1
osmoOsmosissecp256k1dydxdYdX Chainsecp256k1
junoJunosecp256k1nobleNoblesecp256k1
starsStargazesecp256k1neutronNeutronsecp256k1
akashAkashsecp256k1strideStridesecp256k1
kavaKavasecp256k1evmosEvmosethsecp256k1
secretSecret Networksecp256k1creCrescentsecp256k1
axelarAxelarsecp256k1regenRegensecp256k1
injInjectiveethsecp256k1terraTerrasecp256k1
seiSeisecp256k1(EVMアドレスをオンチェーンで関連付け)kujiraKujirasecp256k1

このリストにないプレフィックスのアドレスもデコードされ、そのプレフィックスのまま表の先頭に表示されます。

変換後のアドレスが自分のものである場合とそうでない場合

KeplrやLeapなどのウォレットは、ニーモニックからチェーンごとに1つの鍵を導出します。標準のコインタイプ118とsecp256k1導出を共有するチェーンでは、各チェーンで導出されるアドレスは再エンコードしたものと完全に一致します。「別チェーン上の自分のアドレス」へのIBC送金が成り立つのはこのためです。コインタイプ60とEthereum式の鍵を使うチェーン(Injective、Evmos)は異なるバイト列を導出し、Seiはバイト列を共有するのではなく、オンチェーンの関連付けによって別のEVMアドレスをsei1アカウントに紐付けます。変換後のアドレスに送金する前に、そのチェーンのウォレットで確認してください。

典型的な用途

任意のプレフィックスを持つ生のbech32文字列にはbech32エンコーダー / デコーダーを、EIP-55形式の検証にはEthereumチェックサム変換ツールをご利用ください。

よくある質問

cosmos1…とosmo1…のアドレスは同じアカウント?

どちらも同じ20バイトを持ち、標準のsecp256k1導出を使うチェーンでは同じニーモニックから両方が生成されます。ただし各チェーンは独立した台帳です。Osmosis上のトークンはosmo1アドレスに、Cosmos Hub上のトークンはcosmos1アドレスにあります。再エンコードしても何も移動しません。自分のアドレスが他のチェーンでどう表記されるかが分かるだけです。

InjectiveやEvmosのアドレスが変換結果の行と一致しないのはなぜ?

Injective、Evmosなどのethsecp256k1チェーンはEthereumと同様にアカウントバイト列を導出します(非圧縮公開鍵のkeccak-256)。一方、ほとんどのCosmosチェーンは圧縮公開鍵のsha256の後にripemd160を取ります。そのため同じニーモニックでも2つの系統で異なるバイト列になります。変換ツールは貼り付けられたバイト列をそのまま再エンコードするため、inj1アドレスをcosmos1に変換した結果は有効な文字列ではあるものの、ウォレットがCosmos Hub用に表示するアドレスとは異なります。

0x形式は何に使える?

InjectiveとEvmosでは、0x形式はそのアカウントのEthereumアドレスで、MetaMaskやEVMツールで使われます。他のチェーンでは単なる生のバイト列で、デバッグやモジュールアカウントの検索に役立ちます。ツールはEIP-55チェックサム付きで表示します。

valoperアドレスとvalconsアドレスとは?

cosmosvaloper1…はバリデーターのオペレーターアドレスで、オペレーターのウォレットと同じ20バイトをプレフィックスだけ変えたものです。cosmosvalcons1…はバリデーターのコンセンサス鍵のハッシュです。どちらもトークンを受け取ることはできません。変換ツールは両方を認識し、valoperについては対応するアカウントアドレスを表示します。

アドレスが59文字あるのはなぜ?

それは32バイトのアドレスです。モジュールアカウント、インターチェーンアカウント、CosmWasmコントラクトアドレスはsha256から導出され、ウォレットアドレスより長くなります。ツールはこれらをデコードして他のプレフィックスで再エンコードしますが、こうしたアカウントは作成したチェーン上にしか存在しません。

ツールはbech32チェックサムを検証する?

はい。CosmosアドレスはBIP-173の元のbech32チェックサム(bech32mではない)を使い、ツールは変換前にそれを検証します。チェックサムの不一致は入力ミスを意味し、bech32mチェックサムであれば、その文字列はTaprootアドレスなどであってCosmosアドレスではありません。