以太坊Solidity编程开发:使用Remix的基本流程
Hello World
先看一段代码:
pragma solidity ^0.6.4; //指定所需编译器版本
contract Hello{
function helloWorld() returns(string) {
return "Hello World";
}
}
异常1:security/enforce-explicit-visibility: No visibility specified explicitly for helloWorld function. No visibility specified. Did you intend to add “public”?
解决办法,在returns前添加public
原因是:未指定可见性,采用默认public可见范围,这里需要说明的是有4种函数可见性:
- public:智能合约外部和内部都可使用的方法
- internal:智能合约(包括派生合约)内部可用调用的方法
- external:可通过其他合约和交易进行调用的方法
- private:只有在定义的合约种才可以调用,即使派生的合约也无法调用
function helloWorld() public returns(string) {
异常2:Data location must be “memory” for return parameter in function, but none was given.
解决办法:在string后追加memory
function helloWorld() public returns(string memory) {
异常3:Function state mutability can be restricted to pure
解决办法:在public后添加pure
原因:功能状态可变性可以限制为pure。在之前的版本中使用constant来限制一个方法的制度性,当用constant修饰后,此方法在被调用时不会进行存储的变更,同样不会产生交易和gas花费。而pure正式constant的替代品。
function helloWorld() public pure returns(string memory) {
异常4:security/no-tx-origin: Consider using ‘msg.sender’ in place of ‘tx.origin’.
解决办法:使用msg.sender替代tx.origin
constructor() public {
balances[msg.sender] = 10000;
}
使用Remix
加载合约文件
编译合约文件
注意版本选择。
运行/部署合约
查看调用结果
如果函数带有参数,则测试参数输入位置如下: