use of snowblossom.proto.Block in project snowblossom by snowblossomcoin.
the class BlockIngestor method checkResummary.
private void checkResummary() {
BlockSummary curr = chainhead;
LinkedList<ChainHash> recalc_list = new LinkedList<>();
while (curr.getSummaryVersion() < SUMMARY_VERSION) {
recalc_list.addFirst(new ChainHash(curr.getHeader().getSnowHash()));
ChainHash prevblock = new ChainHash(curr.getHeader().getPrevBlockHash());
if (prevblock.equals(ChainHash.ZERO_HASH)) {
curr = getStartSummary();
} else {
curr = db.getBlockSummaryMap().get(prevblock.getBytes());
}
}
if (recalc_list.size() > 0) {
node.setStatus(String.format("Need to recalcuate chain index of %d blocks now", recalc_list.size()));
for (ChainHash hash : recalc_list) {
BlockSummary summary = db.getBlockSummaryMap().get(hash.getBytes());
Block blk = db.getBlockMap().get(hash.getBytes());
node.setStatus("Reindexing: " + summary.getHeader().getBlockHeight() + " - " + hash + " - " + blk.getTransactionsCount());
ChainHash prevblock = new ChainHash(summary.getHeader().getPrevBlockHash());
BlockSummary prevsummary = null;
if (prevblock.equals(ChainHash.ZERO_HASH)) {
prevsummary = getStartSummary();
} else {
prevsummary = db.getBlockSummaryMap().get(prevblock.getBytes());
}
long tx_body_size = 0;
for (Transaction tx : blk.getTransactionsList()) {
tx_body_size += tx.getInnerData().size();
tx_body_size += tx.getTxHash().size();
}
summary = BlockchainUtil.getNewSummary(blk.getHeader(), prevsummary, node.getParams(), blk.getTransactionsCount(), tx_body_size, blk.getImportedBlocksList());
summary = saveOtherChainIndexBits(summary, prevsummary, blk);
db.getBlockSummaryMap().put(hash.getBytes(), summary);
}
// Resave head
chainhead = db.getBlockSummaryMap().get(chainhead.getHeader().getSnowHash());
db.getBlockSummaryMap().put(HEAD, chainhead);
}
}
use of snowblossom.proto.Block in project snowblossom by snowblossomcoin.
the class Sweeper method runPass.
private void runPass() throws Exception {
Block b = miner.getBlockTemplate();
if (b == null) {
Thread.sleep(1000);
return;
}
if ((merkle_proof == null) || (proof_field != b.getHeader().getSnowField())) {
merkle_proof = miner.getFieldScan().getSingleUserFieldProof(b.getHeader().getSnowField());
proof_field = b.getHeader().getSnowField();
}
if (merkle_proof == null) {
Thread.sleep(30000);
return;
}
long blocks = merkle_proof.getLength() / SnowMerkleProof.MEM_BLOCK;
for (long b_no = 0; b_no < blocks; b_no++) {
ByteBuffer bb = ByteBuffer.allocate(SnowMerkleProof.MEM_BLOCK);
long offset = b_no * SnowMerkleProof.MEM_BLOCK;
merkle_proof.readChunk(offset, bb);
}
logger.info("Sweeper completed pass");
Thread.sleep(30000);
}
Aggregations