Skip to content

Commit 2fc5e5d

Browse files
committed
Removing memoize from the signature algorithm (#8619)
Signed-off-by: mamoralesiob <[email protected]>
1 parent eb4248c commit 2fc5e5d

52 files changed

Lines changed: 287 additions & 464 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/account/Account.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@
3232
import java.math.BigInteger;
3333
import java.util.Optional;
3434

35-
import com.google.common.base.Supplier;
36-
import com.google.common.base.Suppliers;
3735
import org.apache.tuweni.bytes.Bytes32;
3836
import org.web3j.crypto.Credentials;
3937
import org.web3j.utils.Convert.Unit;
@@ -47,8 +45,8 @@ public class Account {
4745
private final Address address;
4846
private long nonce = 0;
4947

50-
private static final Supplier<SignatureAlgorithm> SIGNATURE_ALGORITHM =
51-
Suppliers.memoize(SignatureAlgorithmFactory::getInstance);
48+
private static final SignatureAlgorithm SIGNATURE_ALGORITHM =
49+
SignatureAlgorithmFactory.getInstance();
5250

5351
private Account(
5452
final EthTransactions eth,
@@ -76,18 +74,16 @@ public static Account create(final EthTransactions eth, final Address address) {
7674
}
7775

7876
public static Account create(final EthTransactions eth, final String name) {
79-
return new Account(eth, name, SIGNATURE_ALGORITHM.get().generateKeyPair());
77+
return new Account(eth, name, SIGNATURE_ALGORITHM.generateKeyPair());
8078
}
8179

8280
public static Account fromPrivateKey(
8381
final EthTransactions eth, final String name, final String privateKey) {
8482
return new Account(
8583
eth,
8684
name,
87-
SIGNATURE_ALGORITHM
88-
.get()
89-
.createKeyPair(
90-
SIGNATURE_ALGORITHM.get().createPrivateKey(Bytes32.fromHexString(privateKey))));
85+
SIGNATURE_ALGORITHM.createKeyPair(
86+
SIGNATURE_ALGORITHM.createPrivateKey(Bytes32.fromHexString(privateKey))));
9187
}
9288

9389
public Optional<Credentials> web3jCredentials() {

app/src/main/java/org/hyperledger/besu/chainimport/internal/TransactionData.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@
2727
import com.fasterxml.jackson.annotation.JsonCreator;
2828
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
2929
import com.fasterxml.jackson.annotation.JsonProperty;
30-
import com.google.common.base.Supplier;
31-
import com.google.common.base.Suppliers;
3230
import org.apache.tuweni.bytes.Bytes;
3331
import org.apache.tuweni.bytes.Bytes32;
3432
import org.apache.tuweni.units.bigints.UInt256;
@@ -44,8 +42,8 @@ public class TransactionData {
4442
private final Optional<Address> to;
4543
private final SECPPrivateKey privateKey;
4644

47-
private static final Supplier<SignatureAlgorithm> SIGNATURE_ALGORITHM =
48-
Suppliers.memoize(SignatureAlgorithmFactory::getInstance);
45+
private static final SignatureAlgorithm SIGNATURE_ALGORITHM =
46+
SignatureAlgorithmFactory.getInstance();
4947

5048
/**
5149
* Instantiates a new Transaction data.
@@ -70,7 +68,7 @@ public TransactionData(
7068
this.data = data.map(Bytes::fromHexString).orElse(Bytes.EMPTY);
7169
this.value = value.map(Wei::fromHexString).orElse(Wei.ZERO);
7270
this.to = to.map(Address::fromHexString);
73-
this.privateKey = SIGNATURE_ALGORITHM.get().createPrivateKey(Bytes32.fromHexString(secretKey));
71+
this.privateKey = SIGNATURE_ALGORITHM.createPrivateKey(Bytes32.fromHexString(secretKey));
7472
}
7573

7674
/**
@@ -80,7 +78,7 @@ public TransactionData(
8078
* @return the signed transaction
8179
*/
8280
public Transaction getSignedTransaction(final NonceProvider nonceProvider) {
83-
final KeyPair keyPair = SIGNATURE_ALGORITHM.get().createKeyPair(privateKey);
81+
final KeyPair keyPair = SIGNATURE_ALGORITHM.createKeyPair(privateKey);
8482

8583
final Address fromAddress = Address.extract(keyPair.getPublicKey());
8684
final long nonce = nonceProvider.get(fromAddress);

app/src/main/java/org/hyperledger/besu/cli/subcommands/operator/GenerateBlockchainConfig.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@
4949
import com.fasterxml.jackson.databind.JsonNode;
5050
import com.fasterxml.jackson.databind.node.JsonNodeType;
5151
import com.fasterxml.jackson.databind.node.ObjectNode;
52-
import com.google.common.base.Supplier;
53-
import com.google.common.base.Suppliers;
5452
import com.google.common.io.Resources;
5553
import jakarta.validation.constraints.NotBlank;
5654
import org.apache.tuweni.bytes.Bytes;
@@ -68,8 +66,7 @@
6866
class GenerateBlockchainConfig implements Runnable {
6967
private static final Logger LOG = LoggerFactory.getLogger(GenerateBlockchainConfig.class);
7068

71-
private final Supplier<SignatureAlgorithm> SIGNATURE_ALGORITHM =
72-
Suppliers.memoize(SignatureAlgorithmFactory::getInstance);
69+
private SignatureAlgorithm SIGNATURE_ALGORITHM = SignatureAlgorithmFactory.getInstance();
7370

7471
@NotBlank
7572
@Option(
@@ -177,13 +174,13 @@ private void importPublicKey(final JsonNode publicKeyJson) {
177174

178175
try {
179176
final SECPPublicKey publicKey =
180-
SIGNATURE_ALGORITHM.get().createPublicKey(Bytes.fromHexString(publicKeyText));
177+
SIGNATURE_ALGORITHM.createPublicKey(Bytes.fromHexString(publicKeyText));
181178

182-
if (!SIGNATURE_ALGORITHM.get().isValidPublicKey(publicKey)) {
179+
if (!SIGNATURE_ALGORITHM.isValidPublicKey(publicKey)) {
183180
throw new IllegalArgumentException(
184181
publicKeyText
185182
+ " is not a valid public key for elliptic curve "
186-
+ SIGNATURE_ALGORITHM.get().getCurveName());
183+
+ SIGNATURE_ALGORITHM.getCurveName());
187184
}
188185

189186
writeKeypair(publicKey, null);
@@ -208,7 +205,7 @@ private void generateNodesKeys() {
208205
private void generateNodeKeypair(final int node) {
209206
try {
210207
LOG.info("Generating keypair for node {}.", node);
211-
final KeyPair keyPair = SIGNATURE_ALGORITHM.get().generateKeyPair();
208+
final KeyPair keyPair = SIGNATURE_ALGORITHM.generateKeyPair();
212209
writeKeypair(keyPair.getPublicKey(), keyPair.getPrivateKey());
213210

214211
} catch (final IOException e) {
@@ -296,6 +293,7 @@ private void processEcCurve() {
296293

297294
try {
298295
SignatureAlgorithmFactory.setInstance(SignatureAlgorithmType.create(ecCurve.get()));
296+
SIGNATURE_ALGORITHM = SignatureAlgorithmFactory.getInstance();
299297
} catch (IllegalArgumentException e) {
300298
throw new IllegalArgumentException(
301299
"Invalid parameter for ecCurve in genesis config: " + e.getMessage());

app/src/main/java/org/hyperledger/besu/services/BlockSimulatorServiceImpl.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,26 +40,21 @@
4040
import org.hyperledger.besu.plugin.services.BlockSimulationService;
4141

4242
import java.util.List;
43-
import java.util.function.Supplier;
44-
45-
import com.google.common.base.Suppliers;
4643

4744
/** This class is a service that simulates the processing of a block */
4845
public class BlockSimulatorServiceImpl implements BlockSimulationService {
4946
private final BlockSimulator blockSimulator;
5047
private final WorldStateArchive worldStateArchive;
5148
private final Blockchain blockchain;
5249

53-
private static final Supplier<SignatureAlgorithm> SIGNATURE_ALGORITHM =
54-
Suppliers.memoize(SignatureAlgorithmFactory::getInstance);
50+
private static final SignatureAlgorithm SIGNATURE_ALGORITHM =
51+
SignatureAlgorithmFactory.getInstance();
5552
// Dummy signature for transactions to not fail being processed.
5653
private static final SECPSignature FAKE_SIGNATURE =
57-
SIGNATURE_ALGORITHM
58-
.get()
59-
.createSignature(
60-
SIGNATURE_ALGORITHM.get().getHalfCurveOrder(),
61-
SIGNATURE_ALGORITHM.get().getHalfCurveOrder(),
62-
(byte) 0);
54+
SIGNATURE_ALGORITHM.createSignature(
55+
SIGNATURE_ALGORITHM.getHalfCurveOrder(),
56+
SIGNATURE_ALGORITHM.getHalfCurveOrder(),
57+
(byte) 0);
6358

6459
/**
6560
* This constructor creates a BlockSimulatorServiceImpl object

app/src/test/java/org/hyperledger/besu/services/BesuEventsImplTest.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,6 @@
8080
import java.util.concurrent.atomic.AtomicReference;
8181
import java.util.stream.Stream;
8282

83-
import com.google.common.base.Supplier;
84-
import com.google.common.base.Suppliers;
8583
import org.junit.jupiter.api.BeforeEach;
8684
import org.junit.jupiter.api.Test;
8785
import org.junit.jupiter.api.extension.ExtendWith;
@@ -93,9 +91,9 @@
9391
@ExtendWith(MockitoExtension.class)
9492
public class BesuEventsImplTest {
9593

96-
private static final Supplier<SignatureAlgorithm> SIGNATURE_ALGORITHM =
97-
Suppliers.memoize(SignatureAlgorithmFactory::getInstance);
98-
private static final KeyPair KEY_PAIR1 = SIGNATURE_ALGORITHM.get().generateKeyPair();
94+
private static final SignatureAlgorithm SIGNATURE_ALGORITHM =
95+
SignatureAlgorithmFactory.getInstance();
96+
private static final KeyPair KEY_PAIR1 = SIGNATURE_ALGORITHM.generateKeyPair();
9997
private static final org.hyperledger.besu.ethereum.core.Transaction TX1 = createTransaction(0);
10098
private static final org.hyperledger.besu.ethereum.core.Transaction TX2 = createTransaction(1);
10199

consensus/clique/src/test/java/org/hyperledger/besu/consensus/clique/CliqueExtraDataTest.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,19 @@
3232
import java.util.List;
3333
import java.util.stream.Collectors;
3434

35-
import com.google.common.base.Supplier;
36-
import com.google.common.base.Suppliers;
3735
import com.google.common.collect.Lists;
3836
import org.apache.tuweni.bytes.Bytes;
3937
import org.junit.jupiter.api.Test;
4038

4139
public class CliqueExtraDataTest {
4240

43-
private static final Supplier<SignatureAlgorithm> SIGNATURE_ALGORITHM =
44-
Suppliers.memoize(SignatureAlgorithmFactory::getInstance);
41+
private static final SignatureAlgorithm SIGNATURE_ALGORITHM =
42+
SignatureAlgorithmFactory.getInstance();
4543

4644
@Test
4745
public void encodeAndDecodingDoNotAlterData() {
4846
final SECPSignature proposerSeal =
49-
SIGNATURE_ALGORITHM.get().createSignature(BigInteger.ONE, BigInteger.ONE, (byte) 0);
47+
SIGNATURE_ALGORITHM.createSignature(BigInteger.ONE, BigInteger.ONE, (byte) 0);
5048
final List<Address> validators =
5149
Arrays.asList(
5250
AddressHelpers.ofValue(1), AddressHelpers.ofValue(2), AddressHelpers.ofValue(3));
@@ -97,7 +95,7 @@ public void sufficientlyLargeButIllegallySizedInputThrowsException() {
9795
public void addressToExtraDataString() {
9896
final List<KeyPair> nodeKeys = Lists.newArrayList();
9997
for (int i = 0; i < 4; i++) {
100-
nodeKeys.add(SIGNATURE_ALGORITHM.get().generateKeyPair());
98+
nodeKeys.add(SIGNATURE_ALGORITHM.generateKeyPair());
10199
}
102100

103101
final List<Address> addresses =

consensus/clique/src/test/java/org/hyperledger/besu/consensus/clique/blockcreation/CliqueMiningCoordinatorTest.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,6 @@
4747
import java.util.List;
4848
import java.util.Optional;
4949

50-
import com.google.common.base.Supplier;
51-
import com.google.common.base.Suppliers;
5250
import org.assertj.core.util.Lists;
5351
import org.junit.jupiter.api.BeforeEach;
5452
import org.junit.jupiter.api.Test;
@@ -61,11 +59,11 @@
6159
@SuppressWarnings("DirectInvocationOnMock")
6260
public class CliqueMiningCoordinatorTest {
6361

64-
private static final Supplier<SignatureAlgorithm> SIGNATURE_ALGORITHM =
65-
Suppliers.memoize(SignatureAlgorithmFactory::getInstance);
62+
private static final SignatureAlgorithm SIGNATURE_ALGORITHM =
63+
SignatureAlgorithmFactory.getInstance();
6664

67-
private final KeyPair proposerKeys = SIGNATURE_ALGORITHM.get().generateKeyPair();
68-
private final KeyPair validatorKeys = SIGNATURE_ALGORITHM.get().generateKeyPair();
65+
private final KeyPair proposerKeys = SIGNATURE_ALGORITHM.generateKeyPair();
66+
private final KeyPair validatorKeys = SIGNATURE_ALGORITHM.generateKeyPair();
6967
private final Address proposerAddress = Util.publicKeyToAddress(proposerKeys.getPublicKey());
7068
private final Address validatorAddress = Util.publicKeyToAddress(validatorKeys.getPublicKey());
7169

consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/IbftExtraDataRLPEncoderTest.java

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,15 @@
3434
import java.util.List;
3535
import java.util.Optional;
3636
import java.util.Random;
37-
import java.util.function.Supplier;
3837

39-
import com.google.common.base.Suppliers;
4038
import com.google.common.collect.Lists;
4139
import org.apache.tuweni.bytes.Bytes;
4240
import org.junit.jupiter.api.Test;
4341

4442
public class IbftExtraDataRLPEncoderTest {
4543

46-
private static final Supplier<SignatureAlgorithm> SIGNATURE_ALGORITHM =
47-
Suppliers.memoize(SignatureAlgorithmFactory::getInstance);
44+
private static final SignatureAlgorithm SIGNATURE_ALGORITHM =
45+
SignatureAlgorithmFactory.getInstance();
4846

4947
private final String RAW_HEX_ENCODING_STRING =
5048
"f8f1a00102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20ea9400000000000000000000000000000000000"
@@ -64,8 +62,8 @@ private static BftExtraData getDecodedExtraDataForRawHexEncodingString() {
6462
final int round = 0x00FEDCBA;
6563
final List<SECPSignature> committerSeals =
6664
Arrays.asList(
67-
SIGNATURE_ALGORITHM.get().createSignature(BigInteger.ONE, BigInteger.TEN, (byte) 0),
68-
SIGNATURE_ALGORITHM.get().createSignature(BigInteger.TEN, BigInteger.ONE, (byte) 0));
65+
SIGNATURE_ALGORITHM.createSignature(BigInteger.ONE, BigInteger.TEN, (byte) 0),
66+
SIGNATURE_ALGORITHM.createSignature(BigInteger.TEN, BigInteger.ONE, (byte) 0));
6967

7068
// Create a byte buffer with no data.
7169
final byte[] vanity_bytes = createNonEmptyVanityData();
@@ -265,8 +263,8 @@ public void fullyPopulatedDataProducesCorrectlyFormedExtraDataObject() {
265263
final int round = 0x00FEDCBA;
266264
final List<SECPSignature> committerSeals =
267265
Arrays.asList(
268-
SIGNATURE_ALGORITHM.get().createSignature(BigInteger.ONE, BigInteger.TEN, (byte) 0),
269-
SIGNATURE_ALGORITHM.get().createSignature(BigInteger.TEN, BigInteger.ONE, (byte) 0));
266+
SIGNATURE_ALGORITHM.createSignature(BigInteger.ONE, BigInteger.TEN, (byte) 0),
267+
SIGNATURE_ALGORITHM.createSignature(BigInteger.TEN, BigInteger.ONE, (byte) 0));
270268

271269
// Create randomised vanity data.
272270
final byte[] vanity_bytes = createNonEmptyVanityData();
@@ -308,8 +306,8 @@ public void fullyPopulatedDataIsEncodedAndDecodedCorrectly() {
308306
final int round = 0x00FEDCBA;
309307
final List<SECPSignature> committerSeals =
310308
Arrays.asList(
311-
SIGNATURE_ALGORITHM.get().createSignature(BigInteger.ONE, BigInteger.TEN, (byte) 0),
312-
SIGNATURE_ALGORITHM.get().createSignature(BigInteger.TEN, BigInteger.ONE, (byte) 0));
309+
SIGNATURE_ALGORITHM.createSignature(BigInteger.ONE, BigInteger.TEN, (byte) 0),
310+
SIGNATURE_ALGORITHM.createSignature(BigInteger.TEN, BigInteger.ONE, (byte) 0));
313311

314312
// Create a byte buffer with no data.
315313
final byte[] vanity_bytes = createNonEmptyVanityData();
@@ -351,8 +349,8 @@ public void extraDataCanBeEncodedWithoutCommitSeals() {
351349
final int round = 0x00FEDCBA;
352350
final List<SECPSignature> committerSeals =
353351
Arrays.asList(
354-
SIGNATURE_ALGORITHM.get().createSignature(BigInteger.ONE, BigInteger.TEN, (byte) 0),
355-
SIGNATURE_ALGORITHM.get().createSignature(BigInteger.TEN, BigInteger.ONE, (byte) 0));
352+
SIGNATURE_ALGORITHM.createSignature(BigInteger.ONE, BigInteger.TEN, (byte) 0),
353+
SIGNATURE_ALGORITHM.createSignature(BigInteger.TEN, BigInteger.ONE, (byte) 0));
356354

357355
// Create a byte buffer with no data.
358356
final byte[] vanity_bytes = createNonEmptyVanityData();
@@ -389,8 +387,8 @@ public void extraDataCanBeEncodedwithoutCommitSealsOrRoundNumber() {
389387
final int round = 0x00FEDCBA;
390388
final List<SECPSignature> committerSeals =
391389
Arrays.asList(
392-
SIGNATURE_ALGORITHM.get().createSignature(BigInteger.ONE, BigInteger.TEN, (byte) 0),
393-
SIGNATURE_ALGORITHM.get().createSignature(BigInteger.TEN, BigInteger.ONE, (byte) 0));
390+
SIGNATURE_ALGORITHM.createSignature(BigInteger.ONE, BigInteger.TEN, (byte) 0),
391+
SIGNATURE_ALGORITHM.createSignature(BigInteger.TEN, BigInteger.ONE, (byte) 0));
394392

395393
// Create a byte buffer with no data.
396394
final byte[] vanity_bytes = createNonEmptyVanityData();
@@ -459,8 +457,8 @@ public void incorrectVoteTypeThrowsException() {
459457
final int round = 0x00FEDCBA;
460458
final List<SECPSignature> committerSeals =
461459
Arrays.asList(
462-
SIGNATURE_ALGORITHM.get().createSignature(BigInteger.ONE, BigInteger.TEN, (byte) 0),
463-
SIGNATURE_ALGORITHM.get().createSignature(BigInteger.TEN, BigInteger.ONE, (byte) 0));
460+
SIGNATURE_ALGORITHM.createSignature(BigInteger.ONE, BigInteger.TEN, (byte) 0),
461+
SIGNATURE_ALGORITHM.createSignature(BigInteger.TEN, BigInteger.ONE, (byte) 0));
464462

465463
// Create a byte buffer with no data.
466464
final byte[] vanity_bytes = new byte[32];

consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/payload/PreparedCertificateTest.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@
3434
import java.util.Collections;
3535
import java.util.List;
3636

37-
import com.google.common.base.Supplier;
38-
import com.google.common.base.Suppliers;
3937
import org.assertj.core.util.Lists;
4038
import org.junit.jupiter.api.Test;
4139

@@ -44,8 +42,8 @@ public class PreparedCertificateTest {
4442
private static final ConsensusRoundIdentifier ROUND_IDENTIFIER =
4543
new ConsensusRoundIdentifier(0x1234567890ABCDEFL, 0xFEDCBA98);
4644

47-
private static final Supplier<SignatureAlgorithm> SIGNATURE_ALGORITHM =
48-
Suppliers.memoize(SignatureAlgorithmFactory::getInstance);
45+
private static final SignatureAlgorithm SIGNATURE_ALGORITHM =
46+
SignatureAlgorithmFactory.getInstance();
4947

5048
@Test
5149
public void roundTripRlpWithNoPreparePayloads() {
@@ -71,7 +69,7 @@ public void roundTripRlpWithPreparePayload() {
7169
final PreparePayload preparePayload =
7270
new PreparePayload(ROUND_IDENTIFIER, Hash.fromHexStringLenient("0x8523ba6e7c5f59ae87"));
7371
final SECPSignature signature =
74-
SIGNATURE_ALGORITHM.get().createSignature(BigInteger.ONE, BigInteger.TEN, (byte) 0);
72+
SIGNATURE_ALGORITHM.createSignature(BigInteger.ONE, BigInteger.TEN, (byte) 0);
7573
final SignedData<PreparePayload> signedPrepare =
7674
PayloadDeserializers.from(preparePayload, signature);
7775

@@ -94,7 +92,7 @@ private SignedData<ProposalPayload> signedProposal() {
9492
singletonList(AddressHelpers.ofValue(1)), ROUND_IDENTIFIER);
9593
final ProposalPayload proposalPayload = new ProposalPayload(ROUND_IDENTIFIER, block.getHash());
9694
final SECPSignature signature =
97-
SIGNATURE_ALGORITHM.get().createSignature(BigInteger.ONE, BigInteger.TEN, (byte) 0);
95+
SIGNATURE_ALGORITHM.createSignature(BigInteger.ONE, BigInteger.TEN, (byte) 0);
9896
return PayloadDeserializers.from(proposalPayload, signature);
9997
}
10098
}

0 commit comments

Comments
 (0)