スマートコントラクトのアドレスはチェーン毎に異なるのか?

2024/04/19に公開

スマートコントラクトのアドレスは、それぞれのチェーンにアップロードすると異なるアドレスになります。これは、各チェーンが独立した名前空間を持つためです。

スマートコントラクトアドレスとチェーンにおける独立した名前空間

スマートコントラクトのアドレスは、各チェーンで異なるアドレスになる理由は、それぞれのチェーンが独立した名前空間を持つためです。これは、以下の2つの理由によります。

1. 技術的な理由

  • 各チェーンは独自のブロックチェーン技術を使用しており、アドレス生成アルゴリズムも異なります。
  • 例えば、EthereumはKeccak-256ハッシュ関数を使用しますが、バイナンススマートチェーン(BSC)はBlake2bハッシュ関数を使用します。

2. セキュリティ上の理由

  • 異なるチェーン間で同じアドレスを許可すると、アドレス衝突と呼ばれる問題が発生する可能性があります。
  • アドレス衝突は、ユーザーが誤ったチェーンに送金してしまうなどの問題を引き起こす可能性があります。

独立した名前空間を持つことの利点

  • アドレス衝突を防ぐことができる
  • 各チェーン上でスマートコントラクトを一意に識別できる
  • 異なるチェーン間の互換性を維持できる

以下は、同じスマートコントラクトをEthereumとバイナンススマートチェーン(BSC)にデプロイした場合のアドレスの例です。

  • Ethereum: 0x1234567890abcdef01234567890abcdef01234567
  • バイナンススマートチェーン(BSC): 0xbcdfe1234567890abcdef01234567890abcdef0123

アドレス生成方法

スマートコントラクトのアドレスは、以下の2つの方法で生成されます。

1. コントラクトコードのハッシュ

  • コントラクトコードをKeccak-256ハッシュ関数でハッシュ化します。
  • ハッシュ値の下位20バイトを切り取ります。
  • 生成されたアドレスは、そのチェーン上で一意になります。

2. nonceの追加

  • コントラクト作成者のアドレスに、nonceと呼ばれるランダムな値を追加します。
  • nonceを追加することで、異なるコントラクトコードであっても、同じアドレスになる可能性を低減できます。

アドレス確認方法

  • コントラクトをデプロイした後、Etherscanなどのブロックチェーンエクスプローラーを使用して、アドレスを確認できます。
  • コントラクトアドレスは、トランザクションハッシュやコントラクトABIファイルなどにも含まれます。

注意点

  • スマートコントラクトのアドレスは、一度生成されると変更できません。
  • アドレスを誤って公開してしまうと、セキュリティリスクに繋がる可能性があります。
  • アドレスを安全に管理することが重要です。

Discussion