查询合约报错

你好,我通过remix在开发网2上部署了一个简单的SOL合约,提供一个set和一个get,set成功了,但是get失败了,请求和相应报文如下,望指点,多谢。

LOG_VERBOSE: curlport.c:302, CurlPortRequestSync(): Post: {“jsonrpc”:“2.0”,“method”:“platon_call”,“params”:[{“to”:"",“gas”:“0x1fffff”,“gasPrice”:“0x8250de00”,“data”:“0x17d7de7c”},“latest”],“id”:2950670899}

LOG_VERBOSE: curlport.c:303, CurlPortRequestSync(): Result Code: 200
LOG_VERBOSE: curlport.c:304, CurlPortRequestSync(): Response: {“jsonrpc”:“2.0”,“id”:2950670899,“error”:{“code”:-32602,“message”:“invalid argument 0: json: cannot unmarshal decoding bech32 failed: invalid bech32 string length 0 into Go struct field CallArgs.to of type common.Address”}}

合约源码发出来看看

合约就是platon的sol示例合约:
pragma solidity ^0.5.17;

contract HelloWorld {

string name;



function setName(string memory _name) public returns(string memory){

    name = _name;

    return name;

}



function getName() public view returns(string memory){

    return name;

}

}

这个问题解决了,是因为报文中的to字段应该赋予合约地址,我这边客户端代码漏做了这个步骤。
但是迎来一个新的问题,查询合约报余额不足错误,我有点不明白了,怎么查询合约还需要付gas吗?
报文如下:
LOG_VERBOSE: curlport.c:302, CurlPortRequestSync(): Post: {“jsonrpc”:“2.0”,“method”:“platon_gasPrice”,“params”:[],“id”:559325345}
LOG_VERBOSE: curlport.c:303, CurlPortRequestSync(): Result Code: 200
LOG_VERBOSE: curlport.c:304, CurlPortRequestSync(): Response: {“jsonrpc”:“2.0”,“id”:559325345,“result”:“0x12a05f200”}

LOG_VERBOSE: web3intf.c:292, web3_gasPrice(): RESPONSE: {“jsonrpc”:“2.0”,“id”:559325345,“result”:“0x12a05f200”}

LOG_VERBOSE: boatplaton.c:598, platon_parse_json_result(): result = 0x12a05f200
LOG_VERBOSE: api_platon.c:357, BoatPlatONTxSetGasPrice(): Use gasPrice from network: {“jsonrpc”:“2.0”,“id”:559325345,“result”:“0x12a05f200”}
wei.
LOG_VERBOSE: web3intf.c:746, web3_call(): REQUEST: {“jsonrpc”:“2.0”,“method”:“platon_call”,“params”:[{“to”:“lat1d5d09nnegcv72sj7a33uwn6vlzup9l25nj73k5”,“gas”:“0x9fffff”,“gasPrice”:“0x12a05ff00”,“data”:“0x17d7de7c”},“latest”],“id”:559325346}
LOG_VERBOSE: curlport.c:302, CurlPortRequestSync(): Post: {“jsonrpc”:“2.0”,“method”:“platon_call”,“params”:[{“to”:“lat1d5d09nnegcv72sj7a33uwn6vlzup9l25nj73k5”,“gas”:“0x9fffff”,“gasPrice”:“0x12a05ff00”,“data”:“0x17d7de7c”},“latest”],“id”:559325346}
LOG_VERBOSE: curlport.c:303, CurlPortRequestSync(): Result Code: 200
LOG_VERBOSE: curlport.c:304, CurlPortRequestSync(): Response: {“jsonrpc”:“2.0”,“id”:559325346,“error”:{“code”:-32000,“message”:“err: insufficient balance to pay for gas (supplied gas 10485759)”}}

@是乐浅浅啊 请教一下您,知道是什么原因么?
而且我这个钱包的余额应该是足够的吧。
image

很遗憾,我不清楚你说的 to 这个字段在哪里。

然后我按照你说的,使用了PlatON文档中给定的Solidity代码示例:

pragma solidity ^0.5.17;

contract HelloWorld {
    
    string name;
    
    function setName(string memory _name) public returns(string memory){
        name = _name;
        return name;
    }
    
    function getName() public view returns(string memory){
        return name;
    }
}

我在Remix部署成功后,调用set和get也都是成功的,其中set需要gas,而get不需要

1 Like

这是我执行后的截图

问题解决了,无状态变更的查询 rpc请求 需要增加一个from字段。

你好,问题已解决,我说的to字段是rpc的报文里的,谢谢!

噢噢,好的,没问题,不客气。

1 Like