diff --git a/modAionImpl/src/org/aion/zero/impl/AionBlockchainImpl.java b/modAionImpl/src/org/aion/zero/impl/AionBlockchainImpl.java index 9f507ed8f9..10a8fa4613 100644 --- a/modAionImpl/src/org/aion/zero/impl/AionBlockchainImpl.java +++ b/modAionImpl/src/org/aion/zero/impl/AionBlockchainImpl.java @@ -220,6 +220,7 @@ protected AionBlockchainImpl( */ this.chainConfiguration = chainConfig; TransactionTypeValidator.enableAvmCheck(config.isAvmEnabled()); + BulkExecutor.enabledAvmCheck(config.isAvmEnabled()); this.grandParentBlockHeaderValidator = this.chainConfiguration.createGrandParentHeaderValidator(); diff --git a/modVM/src/org/aion/vm/BulkExecutor.java b/modVM/src/org/aion/vm/BulkExecutor.java index 8cf057afa5..87b93416d7 100644 --- a/modVM/src/org/aion/vm/BulkExecutor.java +++ b/modVM/src/org/aion/vm/BulkExecutor.java @@ -55,6 +55,12 @@ public class BulkExecutor { private static final Object LOCK = new Object(); + private static boolean avmEnabled = false; + + public static void enabledAvmCheck(boolean isEnabled) { + avmEnabled = isEnabled; + } + private IRepository repository; private IRepositoryCache> repositoryChild; private PostExecutionWork postExecutionWork; @@ -394,11 +400,16 @@ private ExecutionBatch fetchNextBatchOfTransactionsForAionVirtualMachine(int sta * future. */ private boolean transactionIsForFastVirtualMachine(AionTransaction transaction) { - if (transaction.isContractCreationTransaction()) { - return transaction.getTargetVM() != VirtualMachineSpecs.AVM_CREATE_CODE; + // first verify that the AVM is enabled + if (avmEnabled) { + if (transaction.isContractCreationTransaction()) { + return transaction.getTargetVM() != VirtualMachineSpecs.AVM_CREATE_CODE; + } else { + return transaction.getDestinationAddress().toBytes()[0] + != NodeEnvironment.CONTRACT_PREFIX; + } } else { - return transaction.getDestinationAddress().toBytes()[0] - != NodeEnvironment.CONTRACT_PREFIX; + return true; } } @@ -409,11 +420,16 @@ private boolean transactionIsForFastVirtualMachine(AionTransaction transaction) * the destination is an AVM contract address */ private boolean transactionIsForAionVirtualMachine(AionTransaction transaction) { - if (transaction.isContractCreationTransaction()) { - return transaction.getTargetVM() == VirtualMachineSpecs.AVM_CREATE_CODE; + // first verify that the AVM is enabled + if (avmEnabled) { + if (transaction.isContractCreationTransaction()) { + return transaction.getTargetVM() == VirtualMachineSpecs.AVM_CREATE_CODE; + } else { + return transaction.getDestinationAddress().toBytes()[0] + == NodeEnvironment.CONTRACT_PREFIX; + } } else { - return transaction.getDestinationAddress().toBytes()[0] - == NodeEnvironment.CONTRACT_PREFIX; + return false; } } }