做网站时怎样把文字放在中间,哪里可以做足球网站,企业网站建设方案书前言,北京网站制作设计与开发服务做web3开发的时候#xff0c;明明自己小狐狸里还有2.15的代币#xff0c;但页面我要转出2.1的时候#xff0c;明明是够的#xff0c;而且使用小狐狸提示gas费用是21000#xff0c;这已经是最小的了#xff0c;但网页转出到其他账户总是提示失败。而且这个错误非常不好捕获…做web3开发的时候明明自己小狐狸里还有2.15的代币但页面我要转出2.1的时候明明是够的而且使用小狐狸提示gas费用是21000这已经是最小的了但网页转出到其他账户总是提示失败。而且这个错误非常不好捕获。
发现问题 Internal JSON-RPC error err: insufficient funds for gas * price value: address 0xf9B6ACf0B4c0cf893624ab69a8E6D26fehave 3100004000000000 want 52000000000000000 (supplied gas 50000000) 排查问题
于是就四处寻找这个50000000是哪里来的呢结果大家找了半天愣是没找到这个50000000的数值是哪里设定的。
经过不断寻找发现如果在调用 web3.eth.sendTransaction 方法时没有传入 gas 参数以太坊客户端会自动估算所需的 gas 量。然而这种自动估算可能不够准确有时候可能会导致交易失败。
如果没有指定 gas 限额以太坊客户端会根据交易内容和当前网络状况估算一个 gas 限额。这个估算可能会尝试执行交易直到确定所需的 gas 量。但是在某些情况下这种估算可能不足以完成交易导致交易失败。
因此为了确保交易成功最好是手动设置一个合适的 gas 限额。一般来说你可以使用 web3.eth.estimateGas 方法来估算一个合适的 gas 限额然后将其传递给 sendTransaction 方法。
意思就是如果代码里不设置gas的话每次估算会不准确。
解决
最终在代码中加入gas入参每次都给他设定一下gas解决了
web3.eth.sendTransaction({from: 0xYourAddress, // 发送者的以太坊地址to: 0xRecipientAddress, // 接收者的以太坊地址value: web3.utils.toWei(1, ether), // 发送的以太币数量以 wei 为单位gas: 21000, // 交易所需的 gas 数量gasPrice: web3.utils.toWei(10, gwei), // gas 价格以 wei 为单位// 可选参数data、nonce等
}, function(error, hash){if (!error)console.log(hash); // 交易哈希
});