Duskのコントラクト・アドレス生成ロジックを見れば見るほど、ある小さな点が際立ってきました。

「デプロイヤーの鍵 + ノンス」という観点だけで考えるのではなく、Duskの実行状態は現在のブロック高と、そのブロック内ですでに作成されたコントラクト数も追跡します。

それによって、興味深い結果が生まれます。

同じブロック内で2つのコントラクトがデプロイされると、それらの生成されるアドレスは、そのブロックの実行シーケンスにおける位置によって変わり得ます。

つまり、2つのトランザクションがほぼ同時刻にブロードキャストされたとしても、どちらのデプロイが先に処理されるかによって、結果のアドレスは変わる可能性があります。

これは、多くのEVM開発者が慣れ親しんでいるアドレス予測の前提からすると、微妙ながらも重要なズレです。

このことが自動的に設計を問題にするわけではありません。ですが、重要なツール面の問いが生まれます。

ファクトリー、デプロイスクリプト、インデクサ、あるいは、デプロイ前にコントラクトのアドレスを知る必要がある何かを作っている場合、その依存関係はどう扱っていますか?

私は、Duskの実行モデルを注意深く見直すまで、その前提を深く疑ったことはありませんでした。

@Dusk の上で開発している方からの話が聞きたいです。

ブロックの順序(処理順)が、事前に計算していたコントラクト・アドレスに影響したことはありますか?

#dusk $DUSK @Dusk