合约地址冲突
Contract address collision
因此,根据我的理解,在创建合约时,用于确定合约地址的两个变量是 msg.sender 和 nonce 值。因此,如果我在同一个交易中创建两个合约,就像我使用此代码所做的那样 https://ropsten.etherscan.io/address/0xcb7d7e99e56406a675173f0ddbde7d8cc3392e5e#code
为什么它会在两个不同的地址生成两个合约,我认为它们会在同一个地址生成,而一个会简单地覆盖另一个或类似的东西。
你了解由消息创建者的地址确定的合约地址,随机数是正确的。但是,在您发布的示例中,msg.sender
是 Test
合约的地址。
这些是发生的步骤:
- 您发起交易以从您的外部帐户 (
0x98081ce968e5643c15de9c024de96b18be8e5ace
) 部署 Test
。根据交易信息,当时账户的nonce为639
- 这导致
Test
合约的地址为 0xcb7d7e99e56406a675173f0ddbde7d8cc3392e5e
。
- 在
Test
的部署过程中,构造函数随后通过 "internal transactions" 创建了两个新合约。 Divert
从 0xcb7d7e99e56406a675173f0ddbde7d8cc3392e5e
的合约地址和 nonce=1
部署。 OverRide
从与 nonce=2
相同的地址部署。
您可以查看内部交易详情here。
因此,根据我的理解,在创建合约时,用于确定合约地址的两个变量是 msg.sender 和 nonce 值。因此,如果我在同一个交易中创建两个合约,就像我使用此代码所做的那样 https://ropsten.etherscan.io/address/0xcb7d7e99e56406a675173f0ddbde7d8cc3392e5e#code
为什么它会在两个不同的地址生成两个合约,我认为它们会在同一个地址生成,而一个会简单地覆盖另一个或类似的东西。
你了解由消息创建者的地址确定的合约地址,随机数是正确的。但是,在您发布的示例中,msg.sender
是 Test
合约的地址。
这些是发生的步骤:
- 您发起交易以从您的外部帐户 (
0x98081ce968e5643c15de9c024de96b18be8e5ace
) 部署Test
。根据交易信息,当时账户的nonce为639 - 这导致
Test
合约的地址为0xcb7d7e99e56406a675173f0ddbde7d8cc3392e5e
。 - 在
Test
的部署过程中,构造函数随后通过 "internal transactions" 创建了两个新合约。Divert
从0xcb7d7e99e56406a675173f0ddbde7d8cc3392e5e
的合约地址和nonce=1
部署。OverRide
从与nonce=2
相同的地址部署。
您可以查看内部交易详情here。