記錄合約開發中遇到的坑
一、 交易沒有被廣播
問題:合約在線上編譯器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