Web3j

如何通過 Web3j 生成的包裝器連續發送事務

  • March 8, 2018

我編寫了一個智能合約並部署在我的私人 Quorum 上。我使用 Web3j 生成 java 包裝器來呼叫 ABI。例如,

// here is a smart contract function
function getMoney() external payable 
{
   Event_GotMoney(msg.value, now);
}

在我的java中,如果我這樣呼叫

contract.getMoney(new BigInteger(100)).send();
// or
// contract.getMoney(new BigInteger(100));

我總能得到 Event_GotMoney 事件。但是,如果我想像這樣連續呼叫它,(非同步)

for(int i=0; i<100; i++)
   contract.getMoney(new BigInteger(100));

我無法獲得 100 個 Event_GotMoney 事件。事件中時間戳的間隔為 3 秒或 10 秒(取決於出塊頻率)。我猜nonce沒有更新,因為生成了一個塊。如果我的猜測是正確的,我怎麼能連續呼叫智能合約函式呢?如果沒有,是限制還是什麼?

另一個小問題,我使用了 Web3j 包裝器提供的事件可觀察函式。它可以很好地獲取事件,但它每 15 秒更新一次。我怎樣才能修改間隔?

任何回饋將不勝感激。

我找到了解決辦法,請參考,#296

使用 FastRawTransactionManager 加速您的交易。使用 RawTransactionManager 縮短輪詢間隔。如果兩者都需要,請使用以下程式碼,

pollingInterval = 3000; // 3 seconds
FastRawTransactionManager fastRawTxMgr = new FastRawTransactionManager(web3, credentials, new PollingTransactionReceiptProcessor(web3j, pollingInterval, 40));
Contract contract = MyPersonalContract.load(contractAddr, web3, fastRawTxMgr, gasPrice, gasLimit);

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