Web3j
嘗試使用 web3j 轉移資金時,transactionHash 有時會返回 null(隨機行為)
我正在使用 web3j 轉移資金。但是,我將 transactionHash 設為 null。我查看了各種文章,發現當gas價格或gas不好時會出現這個問題。我增加了兩個值,它開始工作。但是,相同的程式碼在其他機器上不起作用。所以,我再次改變了汽油價格和價值,它奏效了。但是對於其他一些數據,它沒有用。所以,它是隨機的。
我的問題: 1. 我不能動態地改變值,因為我不知道執行時需要多少氣體。2. 最重要的是,我設置的 Gas 價格和限制已經太高了(請檢查我下面的程式碼)。即使是賬戶餘額也永遠不會那麼多。實際上,我無法設置那麼多值。
請在這裡幫助我。
static BigInteger GAS_PRICE = BigInteger.valueOf(new Long(18000000000L)); static BigInteger GAS_LIMIT_ETHER_TX = BigInteger.valueOf(300000); RawTransactionManager rawTransactionManager = new RawTransactionManager(web3j ,credentials,100,1000 * 15); EthSendTransaction send = rawTransactionManager.sendTransaction(GAS_PRICE, GAS_LIMIT_ETHER_TX, "toAddress", "<some data to save>", BigInteger.valueOf(1));
即使是轉移的金額也不大,我的數據也不是要保存的。我的 gasLimit 是否在 genesis 中設置得太高,這就是為什麼它需要這麼多 gas?
{ "config": { "chainId": 1994, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0 }, "difficulty": "400", "gasLimit": "2000000", "alloc": { "<root address>":{ "balance":"1000000000000000000000000" }}}
我找到了可能對其他人有幫助的解決方案:
BigInteger blockGasLimit = web3j.ethGetBlockByNumber(DefaultBlockParameterName.LATEST, false).send().getBlock().getGasLimit();
此連結包含大多數解決方案:
有一個功能可以為您提供交易的估計氣體
web3j.ethEstimateGas(Transaction transaction)
但是我認為,即使您設置了非常高的 gas 限制,您也只能針對已使用的 gas 量而不是限制。