Search in sources :

Example 1 with Block

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);
    }
}
Also used : Transaction(snowblossom.proto.Transaction) ImportedBlock(snowblossom.proto.ImportedBlock) Block(snowblossom.proto.Block) BlockSummary(snowblossom.proto.BlockSummary) LinkedList(java.util.LinkedList)

Example 2 with Block

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);
}
Also used : Block(snowblossom.proto.Block) ByteBuffer(java.nio.ByteBuffer)

Aggregations

Block (snowblossom.proto.Block)2 ByteBuffer (java.nio.ByteBuffer)1 LinkedList (java.util.LinkedList)1 BlockSummary (snowblossom.proto.BlockSummary)1 ImportedBlock (snowblossom.proto.ImportedBlock)1 Transaction (snowblossom.proto.Transaction)1