合约地址冲突

Contract address collision

因此,根据我的理解,在创建合约时,用于确定合约地址的两个变量是 msg.sender 和 nonce 值。因此,如果我在同一个交易中创建两个合约,就像我使用此代码所做的那样 https://ropsten.etherscan.io/address/0xcb7d7e99e56406a675173f0ddbde7d8cc3392e5e#code

为什么它会在两个不同的地址生成两个合约,我认为它们会在同一个地址生成,而一个会简单地覆盖另一个或类似的东西。

你了解由消息创建者的地址确定的合约地址,随机数是正确的。但是,在您发布的示例中,msg.senderTest 合约的地址。

这些是发生的步骤:

  1. 您发起交易以从您的外部帐户 (0x98081ce968e5643c15de9c024de96b18be8e5ace) 部署 Test。根据交易信息,当时账户的nonce为639
  2. 这导致 Test 合约的地址为 0xcb7d7e99e56406a675173f0ddbde7d8cc3392e5e
  3. Test 的部署过程中,构造函数随后通过 "internal transactions" 创建了两个新合约。 Divert0xcb7d7e99e56406a675173f0ddbde7d8cc3392e5e 的合约地址和 nonce=1 部署。 OverRide 从与 nonce=2 相同的地址部署。

您可以查看内部交易详情here