Web3j

嘗試使用 web3j 轉移資金時,transactionHash 有時會返回 null(隨機行為)

  • December 27, 2018

我正在使用 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();

此連結包含大多數解決方案:

https://www.programcreek.com/java-api-examples/?api=org.web3j.protocol.core.methods.request.Transaction

有一個功能可以為您提供交易的估計氣體

web3j.ethEstimateGas(Transaction transaction)

但是我認為,即使您設置了非常高的 gas 限制,您也只能針對已使用的 gas 量而不是限制。

引用自:https://ethereum.stackexchange.com/questions/64537