使用和不使用 `new` 关键字创建新的 Solidity 合约有什么区别

RFV*_*V5s 4 contract ethereum solidity

new创建新智能合约的关键字有什么用。为什么不直接省略这个关键字?

小智 6

您可以通过两种方式创建合约

  1. 使用“新”关键字
  2. 使用合约地址

使用 new 关键字实例化合约的新实例并使用新创建的合约实例

而在后一个选项中,您使用已经部署和实例化的合约的地址。您可以查看以下代码以供参考:

pragma solidity ^0.5.0;

contract Communication {

    string public user_message;

    function getMessage() public view returns (string memory) {
        return user_message;
    }

    function setMessage(string memory _message) public {
        user_message = _message;
    }
}

contract GreetingsUsingNew {

    function sayHelloUsingNew() public returns (string memory) {
        Communication newObj = new Communication();
        newObj.setMessage("Contract created using New!!!");

        return newObj.getMessage();
    }

}

contract GreetingsUsingAddress {

    function sayHelloUsingAddress(address _addr) public returns (string memory) {
        Communication addObj = Communication(_addr);
        addObj.setMessage("Contract created using an Address!!!");

        return addObj.getMessage();
    }
}
Run Code Online (Sandbox Code Playgroud)


RFV*_*V5s 4

new创建新合约时不能省略关键字。

  • 如果是:token = new Token;

    创建一个新合约并将地址传递到token

  • 如果是:token = existingToken;

    existingToken必须是现有合约(已创建)并且token将传递 的当前地址existingToken