18
18
19
19
package org .ethereum .util ;
20
20
21
- import java .math .BigInteger ;
22
- import java .util .Optional ;
23
- import java .util .function .Supplier ;
24
-
21
+ import co .rsk .util .HexUtils ;
25
22
import org .ethereum .core .Account ;
26
23
import org .ethereum .core .TransactionArguments ;
27
24
import org .ethereum .core .TransactionPool ;
28
25
import org .ethereum .rpc .CallArguments ;
29
26
import org .ethereum .rpc .exception .RskJsonRpcRequestException ;
30
27
import org .ethereum .vm .GasCost ;
31
28
32
- import co .rsk .util .HexUtils ;
29
+ import java .math .BigInteger ;
30
+ import java .util .Optional ;
31
+ import java .util .function .Supplier ;
33
32
34
33
public class TransactionArgumentsUtil {
35
34
@@ -38,10 +37,13 @@ public class TransactionArgumentsUtil {
38
37
public static final String ERR_INVALID_CHAIN_ID = "Invalid chainId: " ;
39
38
public static final String ERR_COULD_NOT_FIND_ACCOUNT = "Could not find account for address: " ;
40
39
41
- /**
42
- * transform the Web3.CallArguments in TransactionArguments that can be used in
43
- * the TransactionBuilder
44
- */
40
+ public static TransactionArguments processArguments (CallArguments argsParam , byte defaultChainId ) {
41
+ return processArguments (argsParam , null , null , defaultChainId );
42
+ }
43
+ /**
44
+ * transform the Web3.CallArguments in TransactionArguments that can be used in
45
+ * the TransactionBuilder
46
+ */
45
47
public static TransactionArguments processArguments (CallArguments argsParam , TransactionPool transactionPool , Account senderAccount , byte defaultChainId ) {
46
48
47
49
TransactionArguments argsRet = new TransactionArguments ();
@@ -50,7 +52,13 @@ public static TransactionArguments processArguments(CallArguments argsParam, Tra
50
52
51
53
argsRet .setTo (stringHexToByteArray (argsParam .getTo ()));
52
54
53
- argsRet .setNonce (strHexOrStrNumberToBigInteger (argsParam .getNonce (), () -> transactionPool .getPendingState ().getNonce (senderAccount .getAddress ())));
55
+ if (transactionPool == null || senderAccount == null ) {
56
+ argsRet .setNonce (Optional .ofNullable (argsParam .getNonce ())
57
+ .map (HexUtils ::strHexOrStrNumberToBigInteger )
58
+ .orElse (null ));
59
+ } else {
60
+ argsRet .setNonce (strHexOrStrNumberToBigInteger (argsParam .getNonce (), () -> transactionPool .getPendingState ().getNonce (senderAccount .getAddress ())));
61
+ }
54
62
55
63
argsRet .setValue (strHexOrStrNumberToBigInteger (argsParam .getValue (), () -> BigInteger .ZERO ));
56
64
@@ -75,18 +83,12 @@ public static TransactionArguments processArguments(CallArguments argsParam, Tra
75
83
return argsRet ;
76
84
}
77
85
78
- private static byte [] stringHexToByteArray (String value ) {
79
-
80
- byte [] ret = Optional .ofNullable (value ).map (HexUtils ::stringHexToByteArray ).orElse (null );
81
-
82
- return ret ;
83
- }
86
+ private static byte [] stringHexToByteArray (String value ) {
87
+ return Optional .ofNullable (value ).map (HexUtils ::stringHexToByteArray ).orElse (null );
88
+ }
84
89
85
90
private static BigInteger strHexOrStrNumberToBigInteger (String value , Supplier <BigInteger > getDefaultValue ) {
86
-
87
- BigInteger ret = Optional .ofNullable (value ).map (HexUtils ::strHexOrStrNumberToBigInteger ).orElseGet (getDefaultValue );
88
-
89
- return ret ;
91
+ return Optional .ofNullable (value ).map (HexUtils ::strHexOrStrNumberToBigInteger ).orElseGet (getDefaultValue );
90
92
}
91
93
92
94
private static byte hexToChainId (String hex ) {
0 commit comments