我读到,在合约部署期间,在构造函数内,合约地址尚未定义。因此,如果这个构造函数调用另一个合约的函数,这个函数会得到什么作为 msg.sender ?
谢谢!
构造函数是在区块链上启动合约时运行的。 msg.sender 是变量指针,即正在启动或与合约交互的钱包地址。
所以我在虚拟网络上测试了我的问题,似乎在部署合约期间,构造函数内部调用的函数将收到与部署后的最终地址不同的地址,并且无法将这个部署地址检测为合约的地址地址与最终地址相反。
在 Solidity 中,在构造函数执行期间,
msg.sender
变量保存正在部署合约的账户或合约的地址。
举个例子来说明:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyContract {
address public owner;
constructor() {
owner = msg.sender;
}
}
在此示例中,构造函数将
owner
变量设置为部署 MyContract
合约的账户或合约的地址。这通常是外部拥有的帐户 (EOA) 或创建 MyContract
新实例的合约地址。