使用 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")
我是 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")