版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/loy_184548/article/details/79746034
记录合约开发中遇到的坑
一、 交易没有被广播
问题:合约在在线编译器remix上能够正常读写数据,在本地私有链上却失败数据写不进去,也没有任何错误提示。
例如:
> bikeshared.userRentStart.sendTransaction("0x34ecdbb13d4e58d5c7aa749feaf5c0f660a3d896",1, {from:user1})
===>
"0x05ba935316952c5d2f727bf665faad6535b7296761d5b06f6e57165885f57bbb"
查看:
> txpool.inspect
{
pending: {
0x1B0e770c80eAE3bF5a9d85F970C20Fcf02B2b63C: {
61: "0x3F232c4d9b685754be7ECAF2eA0da154431Aeb9A: 0 wei + 90000 gas × 18000000000 wei"
}
},
queued: {}
}
再查看:
{
pending: {},
queued: {}
}
===> 但是数据并没有被修改
原因:gas 和 gasPrice 太小了,开到下面这么大就成功了
> bikeshared.userRentStart.sendTransaction("0x34ecdbb13d4e58d5c7aa749feaf5c0f660a3d896",1, {from:user1, gas:500000, gasPrice:3800000000000})
"0x81edba1d917aaa8ea8c9cbfe885dfeec49f81a6a6041b3a4cec40589be8746a9"
二、BigNumber
问题: 当尝试在app.js中读取合约中数据时报错
Uncaught BigNumber Error: new BigNumber() not a base 16 number
参考:here
可能存在原因:
- 节点没有同步完成
- 当指向一个实际没有实现该API的地址时,也会发生同样的事情。如果回退函数不返回字符串,则解析字符串时会遇到麻烦。
三、Invalid JSON RPC response: undefined
参考:here
原因:代码中可能用到了personal.unlock..等操作,但是私有链启动时没有加上personal参数
解决办法:启动命令 - "personal,db,eth,net,web3,miner" //添加personal