使用 Truffle 时的 Solidity 编译错误

Solidity Compiling Error When Using Truffle

我是 solidity 编程的新手,想知道我的编码什么时候出了问题。我正在按照关于如何制定智能合约的 udemy 课程的说明进行操作。我试图复制编码但导致错误,我还没有找到解决方案。

这是我文件中的内容:

pragma solidity >=0.4.22 <0.9.0;
contract Greeter {
  string greeting;
  function greeter(string _greeting) public {
    greeting = _greeting;
  }
  function greet() constant returns (string) {
    return greeting;
  }
}

这是脚本

var Greeter = artifacts.require("./Greeter.sol")
module.exports = function(deployer) {
  deployer.deploy(Greeter);
};

最后这是迁移文件:

pragma solidity >=0.4.22 <0.9.0;

contract Migrations {
  address public owner = msg.sender;
  uint public last_completed_migration;

  modifier restricted() {
    require(
      msg.sender == owner,
      "This function is restricted to the contract's owner"
    );
    _;
  }

  function setCompleted(uint completed) public restricted {
    last_completed_migration = completed;
  }
}

这是产生的错误:

Truffle v5.5.3 (core: 5.5.3)
Node v16.14.0
dennisanthony@Denniss-MacBook-Pro greeter % truffle test
bigint: Failed to load bindings, pure JS will be used (try npm run rebuild?)

Compiling your contracts...
===========================
> Compiling ./contracts/Greeter.sol
> Compiling ./contracts/Migrations.sol

ParserError: Expected '{' but got 'constant'
 --> project:/contracts/Greeter.sol:8:20:
  |
8 |   function greet() constant returns (string) {
  |                    ^^^^^^^^

Compilation failed. See above.
Truffle v5.5.3 (core: 5.5.3)
Node v16.14.0

我在 macbook pro 2020 M1 OS Monterey 版本 12.2.1 上使用 Node v16.14.0 和 truffle v5.5.3 运行 如果有人有解决方案,请告诉我。谢谢。

尝试在函数声明中使用 view 而不是 constant

pragma solidity >=0.4.22 <0.9.0;
contract Greeter {
  string greeting;
  function greeter(string memory _greeting) public {
    greeting = _greeting;
  }
  function greet()public view returns (string memory) {
    return greeting;
  }
}

试试这个方法:

有两个问题:

1- 而不是常数:

function greet()public view returns (string memory)

2- 第二期:

   var Greeter = artifacts.require("./Greeter.sol")

你正在传递路径,但你必须传递合约名称:

 var Greeter = artifacts.require("Greeter")