Solidity 问题汇总

Solidity 问题汇总,第1张

1、查询合约账户余额(address(this).balance)报错

在自己的Geth私链上查询合约账户余额时报错,但是使用Remix的 Javascript VM 执行时正常,使用测试网络Goerli也正常,能够查看合约余额。

(1)执行函数
    //查询合约账户余额,使用view修饰符
    function getContractAccountBalance() public view returns (uint256){
        return address(this).balance;  //this为本合约对象
    }
(2)错误信息
call to functionModifier.getContractAccountBalance
call to functionModifier.getContractAccountBalance errored: Internal JSON-RPC error.
{
  "code": -32000,
  "message": "invalid opcode: SELFBALANCE"
}

 如图所示:

(3)解决方案

在genesis.json中的config增加 ”istanbulBlock“设置,如下所示:

{
  "config": {
    "chainId": 1422,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock":0,
    "ethash": {}
  },
  "difficulty": "1",
  "gasLimit": "8000000",
  "alloc": {
    "7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
    "f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
  }
}

关闭所有节点,重新运行init命令启用新的链配置。已测试,可以正常执行查询合约账户余额了

可参考:blockchain - Geth private network return error "invalid opcode: SELFBALANCE" when executing a simple contract - Stack Overflow

或官网:Private Networks | Go Ethereum

2、接收多于1个的函数返回值时报错 (1) 合约部分代码
 /// @dev 查看信息
function _getInfo() internal view returns (string memory, address[] memory) {
    return (no, list);
}

/// 调用上面函数
function toDo() external view {
    address[] list;
    ,list = _getInfo();
    //......
}
(2)错误信息 

上面编译时报错:

ParseError: Expected primary expression.

(3)解决方案

接收多个返回值时,需要用小括号()括起来,与return多个返回值一样需要用小括号括起来

(,list ) = _getInfo();

 

3、 错误:ParserError: Expected primary expression. (1)合约部分代码
// 状态变量
mapping(string => address) no_addr; 

function toDo() external view {
    address addr = no_addr("timo");
    //......
}
(2)解决方案

在使用mapping类型时,获取某key的值时,使用中括号[],小括号()一般在函数定义或调用时使用

address addr = no_addr["timo"];  //使用中括号

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/942357.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-18
下一篇 2022-05-18

发表评论

登录后才能评论

评论列表(0条)

保存