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 }