为什么 msg.sender 有部署者的地址(地址不是调用者)

Why msg.sender has the address of the deployer (address isnt the caller)

我目前正在为以太坊区块链开发一个简单的命名服务。 msg.sender 有来自合约而非调用者的部署者地址。

    address public caller;

      constructor() {
      caller = msg.sender;
   }

使用 remix.ethereum.orgpragma solidity >=0.7.0 <0.9.0; 并部署在 JavaScript VM(伦敦)上。

谁能解释一下为什么?

现在 caller 将等于部署合约的地址,因为那是 msg.sender 将引用的地址。如果你试图让 caller 成为合约地址,那么你需要做 caller = address(this);address(this)为实际合约地址