从零地址发送交易

Rac*_*and 6 ethereum solidity

我正在编写和测试智能合约。使用 web3,我无法从零地址(0x0)发送交易。我想知道是否可以使用零地址签署并发送交易。实际上,msg.sender函数中的地址应该是零。

换句话说,这个 require 语句可以随时返回吗true

require(msg.sender == address(0))
Run Code Online (Sandbox Code Playgroud)

据我了解:

  1. 合约 A 无法使用零地址调用另一个合约 B 的函数。合约 B 中的函数msg.sender将始终是合约 A 的发送者。
  2. 不可能生成零地址作为以太坊钱包中的地址之一。也不可能找出与零地址相关的私钥。

我的理解有问题还是我遗漏了什么?

在此先感谢您的帮助。

Pet*_*jda 10

我想知道是否可以使用零地址签署并发送交易。

仅当您持有控制零地址的私钥时。目前这可能是未知的,甚至可能不存在。如您所见,目前该地址没有发送任何交易。

require(msg.sender == address(0))

该语句与检查具有大致相同的价值require(block.timestamp == 0)。如果 EVM 正常工作,这种情况就永远不会发生。

我不能代表作者的意图 - 也许他们msg.sender对以下事实感到困惑:通常的做法是Transfer()使用具有地址的第一个参数来发出事件0x0(通常用于铸造代币,看起来就像是从该0x0地址发送的)。


注意:直到 2017 年,发送专门签名的交易(没有正确的私钥)才可能导致发件人地址为msg.sender空。这已在EIP-86中得到修复,您可以在本文中找到更多详细信息。0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF