Solidityでaddress(0)
が何であるかを説明できますか?私はドキュメントで次のことを見つけましたが、私には本当に意味がありません:
ターゲットアカウントがゼロアカウント(アドレス0のアカウント)である場合、トランザクションは新しい契約を作成します。すでに述べたように、その契約のアドレスはゼロアドレスではなく、送信者と送信されたトランザクションの数(「nonce」)から派生したアドレスです。このような契約作成トランザクションのペイロードは、EVMバイトコードと見なされて実行されます。この実行の出力は、契約のコードとして永続的に保存されます。これは、コントラクトを作成するために、コントラクトの実際のコードを送信するのではなく、実際にはそのコードを返すコードを送信することを意味します。
イーサリアムトランザクション内では、ゼロアカウントは、新しい契約が展開されていることを示すために使用される特別なケースです。 rawトランザクションのto
フィールドに文字通り「0x0」が設定されます。
2つの外部アカウント間の転送、契約コードの実行要求、または新しい契約の展開要求など、すべてのEthereumトランザクションは同じ方法でエンコードされます。生のトランザクションオブジェクトは次のようになります。
_transaction = {
nonce: '0x0',
gasLimit: '0x6acfc0', // 7000000
gasPrice: '0x4a817c800', // 20000000000
to: '0x0',
value: '0x0',
data: '0xfffff'
};
_
to
が「0x0」以外の値に設定されている場合、この要求により、etherがアドレスに転送され(value
がゼロ以外の場合)、data
フィールドにエンコードされた関数が実行されます。アドレスは契約または外部アカウントのいずれかであることに注意してください。
to
アドレスがゼロアドレスの場合、data
のコードを実行することで新しいコントラクトが作成されます(これは「コードを返すコード」が意味するものです)。新しく作成されたコントラクトのアドレスは、送信者のアドレスと現在のナンスに基づいているため、事前に技術的に知られています。そのアドレスは、マイニング後の契約の公式アドレスになります。
Ethereumトランザクションに関する非常に良い読み物については、これをチェックしてください ブログ投稿 。
注:実際のSolidityコードステートメントaddress(0)
もあります。これは、タイプaddress
の変数の初期値です。ただし、投稿したドキュメントは、トランザクションのto
アカウントアドレスが「0x0」に設定されている場合に特に言及しています。