Coverage Summary for Class: TxsPerAccount (co.rsk.net.handler)

Class Class, % Method, % Line, %
TxsPerAccount 0% (0/1) 0% (0/7) 0% (0/30)


1 /* 2  * This file is part of RskJ 3  * Copyright (C) 2017 RSK Labs Ltd. 4  * 5  * This program is free software: you can redistribute it and/or modify 6  * it under the terms of the GNU Lesser General Public License as published by 7  * the Free Software Foundation, either version 3 of the License, or 8  * (at your option) any later version. 9  * 10  * This program is distributed in the hope that it will be useful, 11  * but WITHOUT ANY WARRANTY; without even the implied warranty of 12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13  * GNU Lesser General Public License for more details. 14  * 15  * You should have received a copy of the GNU Lesser General Public License 16  * along with this program. If not, see <http://www.gnu.org/licenses/>. 17  */ 18  19 package co.rsk.net.handler; 20  21 import com.google.common.annotations.VisibleForTesting; 22 import org.ethereum.core.Transaction; 23  24 import java.math.BigInteger; 25 import java.util.LinkedList; 26 import java.util.List; 27  28 public class TxsPerAccount { 29  30  private List<Transaction> txs = new LinkedList<>(); 31  private BigInteger nextNonce = null; 32  33  boolean containsNonce(BigInteger nonce) { 34  for (Transaction tx : txs) { 35  if (new BigInteger(1, tx.getNonce()).equals(nonce)) { 36  return true; 37  } 38  } 39  return false; 40  } 41  42  public List<Transaction> getTransactions(){ 43  return txs; 44  } 45  46  public void setTransactions(List<Transaction> txs){ 47  this.txs = txs; 48  } 49  50  List<Transaction> readyToBeSent(BigInteger accountNonce) { 51  if (nextNonce == null || nextNonce.compareTo(accountNonce) < 0) { 52  nextNonce = accountNonce; 53  } 54  55  List<Transaction> ret = new LinkedList<>(); 56  for (Transaction tx : txs) { 57  BigInteger nonce = new BigInteger(1, tx.getNonce()); 58  if (nextNonce.compareTo(nonce) == 0) { 59  nextNonce = nonce.add(BigInteger.valueOf(1)); 60  ret.add(tx); 61  } 62  } 63  64  return ret; 65  } 66  67  void removeNonce(BigInteger nonce) { 68  List<Transaction> newlist = new LinkedList<>(); 69  70  for (Transaction tx : this.txs) { 71  if (new BigInteger(1, tx.getNonce()).compareTo(nonce) == 0) { 72  continue; 73  } 74  75  newlist.add(tx); 76  } 77  78  this.txs = newlist; 79  80  if (newlist.isEmpty()) { 81  this.nextNonce = null; 82  } 83  } 84  85  @VisibleForTesting 86  public BigInteger getNextNonce() { 87  return this.nextNonce; 88  } 89 }