use of co.rsk.validators.BlockValidator in project rskj by rsksmart.
the class BlockChainBuilder method build.
public BlockChainImpl build(boolean withoutCleaner) {
if (repository == null)
repository = new RepositoryImpl(config, new TrieStoreImpl(new HashMapDB().setClearOnClose(false)));
if (blockStore == null) {
blockStore = new IndexedBlockStore(new HashMap<>(), new HashMapDB(), null);
}
if (receiptStore == null) {
KeyValueDataSource ds = new HashMapDB();
ds.init();
receiptStore = new ReceiptStoreImpl(ds);
}
if (txinfos != null && !txinfos.isEmpty())
for (TransactionInfo txinfo : txinfos) receiptStore.add(txinfo.getBlockHash(), txinfo.getIndex(), txinfo.getReceipt());
EthereumListener listener = new BlockExecutorTest.SimpleEthereumListener();
BlockValidatorBuilder validatorBuilder = new BlockValidatorBuilder();
validatorBuilder.addBlockRootValidationRule().addBlockUnclesValidationRule(blockStore).addBlockTxsValidationRule(repository).blockStore(blockStore);
BlockValidator blockValidator = validatorBuilder.build();
if (this.adminInfo == null)
this.adminInfo = new AdminInfo();
BlockChainImpl blockChain = new BlockChainImpl(config, this.repository, this.blockStore, receiptStore, null, listener, this.adminInfo, blockValidator);
if (this.testing) {
blockChain.setBlockValidator(new DummyBlockValidator());
blockChain.setNoValidation(true);
}
TransactionPoolImpl transactionPool;
if (withoutCleaner) {
transactionPool = new TransactionPoolImplNoCleaner(config, blockChain.getRepository(), blockChain.getBlockStore(), receiptStore, new ProgramInvokeFactoryImpl(), new BlockExecutorTest.SimpleEthereumListener(), 10, 100);
} else {
transactionPool = new TransactionPoolImpl(config, blockChain.getRepository(), blockChain.getBlockStore(), receiptStore, new ProgramInvokeFactoryImpl(), new BlockExecutorTest.SimpleEthereumListener(), 10, 100);
}
blockChain.setTransactionPool(transactionPool);
if (this.genesis != null) {
for (RskAddress addr : this.genesis.getPremine().keySet()) {
this.repository.createAccount(addr);
this.repository.addBalance(addr, this.genesis.getPremine().get(addr).getAccountState().getBalance());
}
Repository track = this.repository.startTracking();
new RepositoryBlockStore(config, track, PrecompiledContracts.BRIDGE_ADDR);
track.commit();
this.genesis.setStateRoot(this.repository.getRoot());
this.genesis.flushRLP();
blockChain.setBestBlock(this.genesis);
blockChain.setTotalDifficulty(this.genesis.getCumulativeDifficulty());
}
if (this.blocks != null) {
BlockExecutor blockExecutor = new BlockExecutor(config, repository, receiptStore, blockStore, listener);
for (Block b : this.blocks) {
blockExecutor.executeAndFillAll(b, blockChain.getBestBlock());
blockChain.tryToConnect(b);
}
}
return blockChain;
}
Aggregations