From c7d66154a82f164202b617fcf17f2311bc7c9821 Mon Sep 17 00:00:00 2001 From: Alexandra Roatis Date: Tue, 8 Oct 2019 16:33:44 -0400 Subject: [PATCH] Using EnumMap in chain config for increased performance and code maintenance. --- .../impl/blockchain/ChainConfiguration.java | 28 +++++++++---------- .../impl/blockchain/StandaloneBlockchain.java | 9 +++--- .../zero/impl/valid/BlockHeaderValidator.java | 7 +++-- .../GrandParentBlockHeaderValidator.java | 7 +++-- .../valid/ParentBlockHeaderValidator.java | 7 +++-- 5 files changed, 30 insertions(+), 28 deletions(-) diff --git a/modAionImpl/src/org/aion/zero/impl/blockchain/ChainConfiguration.java b/modAionImpl/src/org/aion/zero/impl/blockchain/ChainConfiguration.java index 1364f62fda..fd23537f5c 100644 --- a/modAionImpl/src/org/aion/zero/impl/blockchain/ChainConfiguration.java +++ b/modAionImpl/src/org/aion/zero/impl/blockchain/ChainConfiguration.java @@ -3,7 +3,7 @@ import java.math.BigInteger; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; +import java.util.EnumMap; import java.util.List; import java.util.Map; import org.aion.equihash.OptimizedEquiValidator; @@ -127,9 +127,9 @@ public BlockHeaderValidator createBlockHeaderValidator() { new EnergyConsumedRule(), new SignatureRule()); - Map> unityRules = new HashMap<>(); - unityRules.put(BlockSealType.SEAL_POW_BLOCK.getSealId(), powRules); - unityRules.put(BlockSealType.SEAL_POS_BLOCK.getSealId(), posRules); + Map> unityRules = new EnumMap<>(BlockSealType.class); + unityRules.put(BlockSealType.SEAL_POW_BLOCK, powRules); + unityRules.put(BlockSealType.SEAL_POS_BLOCK, posRules); return new BlockHeaderValidator(unityRules); } @@ -138,8 +138,8 @@ public ParentBlockHeaderValidator createSealParentBlockHeaderValidator() { List posRules = Arrays.asList(new StakingSeedRule(), new StakingBlockTimeStampRule()); - Map> unityRules = new HashMap<>(); - unityRules.put(BlockSealType.SEAL_POS_BLOCK.getSealId(), posRules); + Map> unityRules = new EnumMap<>(BlockSealType.class); + unityRules.put(BlockSealType.SEAL_POS_BLOCK, posRules); return new ParentBlockHeaderValidator(unityRules); } @@ -149,8 +149,8 @@ public GrandParentBlockHeaderValidator createPreUnityGrandParentHeaderValidator( List powRules = Collections.singletonList(new AionDifficultyRule(this)); - Map> unityRules = new HashMap<>(); - unityRules.put(BlockSealType.SEAL_POW_BLOCK.getSealId(), powRules); + Map> unityRules = new EnumMap<>(BlockSealType.class); + unityRules.put(BlockSealType.SEAL_POW_BLOCK, powRules); return new GrandParentBlockHeaderValidator(unityRules); } @@ -165,9 +165,9 @@ public GrandParentBlockHeaderValidator createUnityGrandParentHeaderValidator() { List posRules = Collections.singletonList(new UnityDifficultyRule(this)); - Map> unityRules = new HashMap<>(); - unityRules.put(BlockSealType.SEAL_POW_BLOCK.getSealId(), powRules); - unityRules.put(BlockSealType.SEAL_POS_BLOCK.getSealId(), posRules); + Map> unityRules = new EnumMap<>(BlockSealType.class); + unityRules.put(BlockSealType.SEAL_POW_BLOCK, powRules); + unityRules.put(BlockSealType.SEAL_POS_BLOCK, posRules); return new GrandParentBlockHeaderValidator(unityRules); } @@ -181,9 +181,9 @@ public ParentBlockHeaderValidator createChainParentBlockHeaderValidator() { getConstants().getEnergyDivisorLimitLong(), getConstants().getEnergyLowerBoundLong())); - Map> unityRules = new HashMap<>(); - unityRules.put(BlockSealType.SEAL_POW_BLOCK.getSealId(), rules); - unityRules.put(BlockSealType.SEAL_POS_BLOCK.getSealId(), rules); + Map> unityRules = new EnumMap<>(BlockSealType.class); + unityRules.put(BlockSealType.SEAL_POW_BLOCK, rules); + unityRules.put(BlockSealType.SEAL_POS_BLOCK, rules); return new ParentBlockHeaderValidator(unityRules); } diff --git a/modAionImpl/src/org/aion/zero/impl/blockchain/StandaloneBlockchain.java b/modAionImpl/src/org/aion/zero/impl/blockchain/StandaloneBlockchain.java index 04ca97af88..05a3dca862 100644 --- a/modAionImpl/src/org/aion/zero/impl/blockchain/StandaloneBlockchain.java +++ b/modAionImpl/src/org/aion/zero/impl/blockchain/StandaloneBlockchain.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.EnumMap; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -372,11 +373,9 @@ public BlockHeaderValidator createBlockHeaderValidator() { .getMaximumExtraDataSize()), new EnergyConsumedRule()); - Map> unityRules = new HashMap<>(); - unityRules.put( - BlockSealType.SEAL_POW_BLOCK.getSealId(), powRules); - unityRules.put( - BlockSealType.SEAL_POS_BLOCK.getSealId(), posRules); + Map> unityRules = new EnumMap<>(BlockSealType.class); + unityRules.put(BlockSealType.SEAL_POW_BLOCK, powRules); + unityRules.put(BlockSealType.SEAL_POS_BLOCK, posRules); return new BlockHeaderValidator(unityRules); } diff --git a/modAionImpl/src/org/aion/zero/impl/valid/BlockHeaderValidator.java b/modAionImpl/src/org/aion/zero/impl/valid/BlockHeaderValidator.java index 0535895109..2d2b98d06b 100644 --- a/modAionImpl/src/org/aion/zero/impl/valid/BlockHeaderValidator.java +++ b/modAionImpl/src/org/aion/zero/impl/valid/BlockHeaderValidator.java @@ -6,13 +6,14 @@ import java.util.Map; import org.aion.mcf.blockchain.BlockHeader; +import org.aion.mcf.blockchain.BlockHeader.BlockSealType; import org.slf4j.Logger; public class BlockHeaderValidator { - private Map> chainRules; + private Map> chainRules; - public BlockHeaderValidator(Map> rules) { + public BlockHeaderValidator(Map> rules) { if (rules == null) { throw new NullPointerException("The blockHeaderRule can not be null"); } @@ -27,7 +28,7 @@ public boolean validate(BlockHeader header, Logger logger) { return false; } - List rules = chainRules.get(header.getSealType().getSealId()); + List rules = chainRules.get(header.getSealType()); if (rules == null) { return false; } else { diff --git a/modAionImpl/src/org/aion/zero/impl/valid/GrandParentBlockHeaderValidator.java b/modAionImpl/src/org/aion/zero/impl/valid/GrandParentBlockHeaderValidator.java index c5700165c2..4bd7c526ee 100644 --- a/modAionImpl/src/org/aion/zero/impl/valid/GrandParentBlockHeaderValidator.java +++ b/modAionImpl/src/org/aion/zero/impl/valid/GrandParentBlockHeaderValidator.java @@ -5,14 +5,15 @@ import java.util.List; import java.util.Map; import org.aion.mcf.blockchain.BlockHeader; +import org.aion.mcf.blockchain.BlockHeader.BlockSealType; import org.slf4j.Logger; public class GrandParentBlockHeaderValidator { - private Map> chainRules; + private Map> chainRules; public GrandParentBlockHeaderValidator( - Map> rules) { + Map> rules) { if (rules == null) { throw new NullPointerException(); } @@ -35,7 +36,7 @@ public boolean validate( return false; } - List rules = chainRules.get(current.getSealType().getSealId()); + List rules = chainRules.get(current.getSealType()); if (rules == null) { return false; diff --git a/modAionImpl/src/org/aion/zero/impl/valid/ParentBlockHeaderValidator.java b/modAionImpl/src/org/aion/zero/impl/valid/ParentBlockHeaderValidator.java index 7c511112b7..1639d74d32 100644 --- a/modAionImpl/src/org/aion/zero/impl/valid/ParentBlockHeaderValidator.java +++ b/modAionImpl/src/org/aion/zero/impl/valid/ParentBlockHeaderValidator.java @@ -5,14 +5,15 @@ import java.util.List; import java.util.Map; import org.aion.mcf.blockchain.BlockHeader; +import org.aion.mcf.blockchain.BlockHeader.BlockSealType; import org.slf4j.Logger; /** validation rules depending on parent's block header */ public class ParentBlockHeaderValidator { - private Map> chainRules; + private Map> chainRules; - public ParentBlockHeaderValidator(Map> rules) { + public ParentBlockHeaderValidator(Map> rules) { if (rules == null) { throw new NullPointerException(); } @@ -39,7 +40,7 @@ public boolean validate( return false; } - List rules = chainRules.get(header.getSealType().getSealId()); + List rules = chainRules.get(header.getSealType()); if (rules == null) { return false;