use of co.rsk.validators.BlockValidator in project rskj by rsksmart.
the class BlockValidatorTest method validateEmptyBlock.
@Test
public void validateEmptyBlock() {
IndexedBlockStore blockStore = new IndexedBlockStore(new HashMap<>(), new HashMapDB(), null);
Block genesis = new BlockGenerator().getGenesisBlock();
blockStore.saveBlock(genesis, genesis.getCumulativeDifficulty(), true);
Block block = new BlockBuilder().parent(genesis).build();
BlockValidator validator = createValidator(blockStore);
Assert.assertTrue(validator.isValid(block));
}
use of co.rsk.validators.BlockValidator in project rskj by rsksmart.
the class BlockChainBuilder method build.
public BlockChainImpl build() {
BlocksIndex blocksIndex = new HashMapBlocksIndex();
if (config == null) {
config = new TestSystemProperties();
}
if (trieStore == null) {
trieStore = new TrieStoreImpl(new HashMapDB().setClearOnClose(false));
}
if (repository == null) {
repository = new MutableRepository(trieStore, new Trie(trieStore));
}
if (stateRootHandler == null) {
stateRootHandler = new StateRootHandler(config.getActivationConfig(), new StateRootsStoreImpl(new HashMapDB()));
}
if (genesis == null) {
genesis = new BlockGenerator().getGenesisBlock();
}
GenesisLoaderImpl.loadGenesisInitalState(repository, genesis);
repository.commit();
genesis.setStateRoot(repository.getRoot());
genesis.flushRLP();
BlockFactory blockFactory = new BlockFactory(config.getActivationConfig());
if (blockStore == null) {
blockStore = new IndexedBlockStore(blockFactory, new HashMapDB(), blocksIndex);
}
if (receiptStore == null) {
KeyValueDataSource ds = new HashMapDB();
ds.init();
receiptStore = new ReceiptStoreImpl(ds);
}
if (listener == null) {
listener = new BlockExecutorTest.SimpleEthereumListener();
}
if (bridgeSupportFactory == null) {
bridgeSupportFactory = new BridgeSupportFactory(new RepositoryBtcBlockStoreWithCache.Factory(config.getNetworkConstants().getBridgeConstants().getBtcParams()), config.getNetworkConstants().getBridgeConstants(), config.getActivationConfig());
}
BlockValidatorBuilder validatorBuilder = new BlockValidatorBuilder();
validatorBuilder.addBlockRootValidationRule().addBlockUnclesValidationRule(blockStore).addBlockTxsValidationRule(trieStore).blockStore(blockStore);
BlockValidator blockValidator = validatorBuilder.build();
ReceivedTxSignatureCache receivedTxSignatureCache = new ReceivedTxSignatureCache();
BlockTxSignatureCache blockTxSignatureCache = new BlockTxSignatureCache(receivedTxSignatureCache);
TransactionExecutorFactory transactionExecutorFactory = new TransactionExecutorFactory(config, blockStore, receiptStore, blockFactory, new ProgramInvokeFactoryImpl(), new PrecompiledContracts(config, bridgeSupportFactory), blockTxSignatureCache);
repositoryLocator = new RepositoryLocator(trieStore, stateRootHandler);
transactionPool = new TransactionPoolImpl(config, repositoryLocator, this.blockStore, blockFactory, new TestCompositeEthereumListener(), transactionExecutorFactory, new ReceivedTxSignatureCache(), 10, 100);
BlockExecutor blockExecutor = new BlockExecutor(config.getActivationConfig(), repositoryLocator, transactionExecutorFactory);
BlockChainImpl blockChain = new BlockChainLoader(blockStore, receiptStore, transactionPool, listener, blockValidator, blockExecutor, genesis, stateRootHandler, repositoryLocator).loadBlockchain();
if (this.testing) {
blockChain.setBlockValidator(new DummyBlockValidator());
blockChain.setNoValidation(true);
}
blockStore.saveBlock(genesis, genesis.getCumulativeDifficulty(), true);
if (this.blocks != null) {
for (Block b : this.blocks) {
blockExecutor.executeAndFillAll(b, blockChain.getBestBlock().getHeader());
blockChain.tryToConnect(b);
}
}
return blockChain;
}
use of co.rsk.validators.BlockValidator in project rskj by rsksmart.
the class BlockChainImplInvalidTest method setup.
@Before
public void setup() {
objects = new RskTestContext(new String[0]) {
@Override
protected synchronized RskSystemProperties buildRskSystemProperties() {
RskSystemProperties rskSystemProperties = super.buildRskSystemProperties();
ActivationConfig activationConfigSpy = spy(rskSystemProperties.getActivationConfig());
RskSystemProperties rskSystemPropertiesSpy = spy(rskSystemProperties);
doReturn(true).when(activationConfigSpy).isActive(eq(ConsensusRule.RSKIP126), anyLong());
doReturn(activationConfigSpy).when(rskSystemPropertiesSpy).getActivationConfig();
return rskSystemPropertiesSpy;
}
@Override
protected GenesisLoader buildGenesisLoader() {
return new TestGenesisLoader(getTrieStore(), "rsk-unittests.json", BigInteger.ZERO, true, true, true);
}
@Override
public BlockValidator buildBlockValidator() {
return new BlockValidatorImpl(getBlockStore(), getBlockParentDependantValidationRule(), getBlockValidationRule());
}
};
blockChain = objects.getBlockchain();
}
use of co.rsk.validators.BlockValidator in project rskj by rsksmart.
the class BlockValidatorTest method validateBlockWithTransaction.
@Test
public void validateBlockWithTransaction() {
BlockChainImpl blockChain = BlockChainImplTest.createBlockChain();
Block genesis = BlockChainImplTest.getGenesisBlock(blockChain);
genesis.seal();
Block parent = new BlockBuilder().parent(genesis).build();
parent.seal();
List<Transaction> txs = new ArrayList<>();
txs.add(BlockExecutorTest.generateBlockWithOneTransaction().getTransaction());
Block block = new BlockBuilder().parent(parent).transactions(txs).build();
;
block.seal();
Assert.assertEquals(ImportResult.IMPORTED_BEST, blockChain.tryToConnect(genesis));
Assert.assertEquals(ImportResult.IMPORTED_BEST, blockChain.tryToConnect(parent));
BlockValidator validator = createValidator(blockChain.getBlockStore());
Assert.assertTrue(validator.isValid(block));
}
use of co.rsk.validators.BlockValidator in project rskj by rsksmart.
the class BlockValidatorTest method validateChildBlock.
@Test
public void validateChildBlock() {
IndexedBlockStore blockStore = new IndexedBlockStore(new HashMap<>(), new HashMapDB(), null);
Block genesis = new BlockGenerator().getGenesisBlock();
blockStore.saveBlock(genesis, genesis.getCumulativeDifficulty(), true);
Block block = new BlockGenerator().createChildBlock(genesis);
BlockValidator validator = createValidator(blockStore);
Assert.assertTrue(validator.isValid(block));
}
Aggregations