nebulasio / wiki

This repository is out of date, please check the new wiki:
http://wiki.nebulas.io/en/latest/
GNU General Public License v3.0
421 stars 154 forks source link

发起交易后,轮询返回的 code 值 为0 时,查询处理结果,数据还是旧的 #141

Closed zhuku9126 closed 6 years ago

zhuku9126 commented 6 years ago

根据 nebPay.queryPayInfo(serialNumber) 查询到 code 为 0 时,再去查询交易数据,发现数据还是旧的。

yupnano commented 6 years ago

查询到code为0,就说明已经得到交易数据了呀,此时返回信息里的data就是交易数据。 你说的数据还是旧的是什么意思呢?

{
    "code": 0,
    "data": {
        "data": null,
        "contractAddress": "",
        "type": "binary",
        "nonce": 136,
        "gasLimit": "30000",
        "gasUsed": "20000",
        "chainId": 1001,
        "from": "n1JmhE82GNjdZPNZr6dgUuSfzy2WRwmD9zy",
        "to": "n1JmhE82GNjdZPNZr6dgUuSfzy2WRwmD9zy",
        "value": "1000000000000000000",
        "hash": "f9549a5c01f50f372607b9fd29bf15d483246578f6cc7008d6e2a537920802e6",
        "gasPrice": "1000000",
        "status": 1,
        "timestamp": 1525508076
    },
    "msg": "success"
}
xiongniangqing commented 6 years ago

比如一个用户发布内容的功能,原来已经有三条数据,然后新增加了一条,这个时候,查询到 code 为0后,我立刻去查询用户发布的内容,还是三条数据,新增加的数据没有返回。 今天后来我改成用 txhash 查询收据的方法,得到 status 为 1后,再读取内容,就是正常的了。 我猜 nebPay 的 queryPayInfo 方法有 bug。不能真的反应合约调用成功了。

yupnano commented 6 years ago

哦哦,是这个情况呀。其实queryPayInfo(serialNumber) 也是在查询txhash,注意返回的data里面有个status,你可以先判断code==0,再判断status==1,这样就可以了。

原理是这样的:当code=0的时候只是用txhash能查到这个记录了,但交易很可能还处于pending状态(status=2),过一会才会执行并上链(status=1),这时候才能查到新增的结果。

xiongniangqing commented 6 years ago

天坑啊,最好在例子里面更新或者说明下,我在这个问题上折腾了很久,和其他开发者沟通,他们也有这个困惑。

yupnano commented 6 years ago

抱歉哈,这个地方当时也没注意,明天更一下文档和例子。