Web3j
如何通過 Web3j 生成的包裝器連續發送事務
我編寫了一個智能合約並部署在我的私人 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);