org.web3j.tx.FastRawTransactionManager Maven / Gradle / Ivy
/*
* Copyright 2019 Web3 Labs Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package org.web3j.tx;
import java.io.IOException;
import java.math.BigInteger;
import org.web3j.crypto.Credentials;
import org.web3j.protocol.Web3j;
import org.web3j.tx.response.TransactionReceiptProcessor;
/**
* Simple RawTransactionManager derivative that manages nonces to facilitate multiple transactions
* per block.
*/
public class FastRawTransactionManager extends RawTransactionManager {
private volatile BigInteger nonce = BigInteger.valueOf(-1);
public FastRawTransactionManager(Web3j web3j, Credentials credentials, long chainId) {
super(web3j, credentials, chainId);
}
public FastRawTransactionManager(Web3j web3j, Credentials credentials) {
super(web3j, credentials);
}
public FastRawTransactionManager(
Web3j web3j,
Credentials credentials,
TransactionReceiptProcessor transactionReceiptProcessor) {
super(web3j, credentials, ChainId.NONE, transactionReceiptProcessor);
}
public FastRawTransactionManager(
Web3j web3j,
Credentials credentials,
long chainId,
TransactionReceiptProcessor transactionReceiptProcessor) {
super(web3j, credentials, chainId, transactionReceiptProcessor);
}
@Override
protected synchronized BigInteger getNonce() throws IOException {
if (nonce.signum() == -1) {
// obtain lock
nonce = super.getNonce();
} else {
nonce = nonce.add(BigInteger.ONE);
}
return nonce;
}
public BigInteger getCurrentNonce() {
return nonce;
}
public synchronized void resetNonce() throws IOException {
nonce = super.getNonce();
}
public synchronized void setNonce(BigInteger value) {
nonce = value;
}
}