通常的直觉是智能合约应该在构造完之后(即构造函数 constructor 执行完之后),其实并不是,在 constructor 中是可以使用 this 来表示当前合约的地址,因为在发起交易的时候,就已经可以确定合约的地址,参考合约地址的计算。
可以使用下面的代码测试一下:
pragma solidity ^0.5.0;
contract Test {
address public thisAddress;
event LogAddr(address);
constructor() {
thisAddress = address(this);
emit LogAddr(address(this));
}
}