为什么我的智能合约构造函数在部署后没有自动调用?

时间:2019-08-03 10:59:23

标签: ethereum solidity smartcontracts

当我部署以下智能合约时,变量管理器的地址为0x0000000000000000000000000000000000000000000000。只有在我调用构造函数(Lottery())之后,变量管理器的地址才与部署它的帐户匹配。

为什么我的构造函数没有被自动调用?

pragma solidity ^0.4.17;

contract Lottery {
    address public manager;

    function Lottery() public {
        manager = msg.sender;
    }
}

1 个答案:

答案 0 :(得分:0)

应该自动调用您的构造函数。

我在编译器版本0.4.17中使用了Remix(https://remix.ethereum.org),然后进行了部署,并按预期将manager设置为部署地址。

如果合同名称和构造函数的名称不同,则会遇到您遇到的问题,因此该函数不再是构造函数。

Solidity 0.4.22更改为使用constructor代替合同名称,以避免这些类型的错误:

  

https://github.com/ethereum/solidity/releases/tag/v0.4.22
  现在应该使用构造函数(uint arg1,uint arg2){...}来定义构造函数,以使其脱颖而出,并避免在重命名合同而不是重命名其构造函数时出现错误。

我建议您考虑使用更高版本的Solidity 0.5.x。