Search in sources :

Example 1 with NulsDigestData

use of io.nuls.kernel.model.NulsDigestData in project nuls by nuls-io.

the class VMContext method getBlockHeader.

/**
 * @param hash
 * @return
 * @throws NulsException
 * @throws IOException
 */
public BlockHeaderDto getBlockHeader(String hash) throws NulsException, IOException {
    if (StringUtils.isBlank(hash)) {
        return null;
    }
    NulsDigestData nulsDigestData = NulsDigestData.fromDigestHex(hash);
    Result<BlockHeader> blockHeaderResult = blockService.getBlockHeader(nulsDigestData);
    if (blockHeaderResult == null || blockHeaderResult.getData() == null) {
        return null;
    }
    BlockHeaderDto header = new BlockHeaderDto(blockHeaderResult.getData());
    return header;
}
Also used : NulsDigestData(io.nuls.kernel.model.NulsDigestData) BlockHeader(io.nuls.kernel.model.BlockHeader) BlockHeaderDto(io.nuls.contract.entity.BlockHeaderDto)

Example 2 with NulsDigestData

use of io.nuls.kernel.model.NulsDigestData in project nuls by nuls-io.

the class DownloadThreadManager method checkRollback.

private boolean checkRollback(Block localBestBlock, int rollbackCount) throws NulsException {
    if (rollbackCount >= 20) {
        // resetNetwork("number of rollbackTx blocks greater than 10 during download");
        return false;
    }
    List<Node> nodes = newestInfos.getNodes();
    long localHeight = localBestBlock.getHeader().getHeight();
    NulsDigestData localBestHash = localBestBlock.getHeader().getHash();
    for (Node node : nodes) {
        Block block = DownloadUtils.getBlockByHash(localBestHash, node);
        if (block != null && localHeight == block.getHeader().getHeight()) {
            return true;
        }
    }
    if (newestInfos.getNodes().size() > 0) {
        consensusService.rollbackBlock(localBestBlock);
    } else {
        // resetNetwork("the number of available nodes is insufficient for rollbackTx blocks");
        return false;
    }
    localBestBlock = blockService.getBestBlock().getData();
    return checkRollback(localBestBlock, rollbackCount + 1);
}
Also used : Node(io.nuls.network.model.Node) NulsDigestData(io.nuls.kernel.model.NulsDigestData) Block(io.nuls.kernel.model.Block)

Example 3 with NulsDigestData

use of io.nuls.kernel.model.NulsDigestData in project nuls by nuls-io.

the class DownloadUtils method getBlockByHash.

public static Block getBlockByHash(NulsDigestData hash, Node node) {
    if (hash == null || node == null) {
        return null;
    }
    GetBlockMessage message = new GetBlockMessage(hash);
    Future<Block> future = ProtocolCacheHandler.addGetBlockByHashRequest(hash);
    Future<NulsDigestData> reactFuture = ProtocolCacheHandler.addRequest(hash);
    Result result = messageBusService.sendToNode(message, node, false);
    // Log.error("start request:"+new Date().toLocaleString()+" ::: "+hash);
    if (!result.isSuccess()) {
        ProtocolCacheHandler.removeBlockByHashFuture(hash);
        ProtocolCacheHandler.removeRequest(hash);
        return null;
    }
    try {
        reactFuture.get(1L, TimeUnit.SECONDS);
        Block block = future.get(30L, TimeUnit.SECONDS);
        return block;
    } catch (Exception e) {
        Log.error(node.getId(), e);
        return null;
    } finally {
        ProtocolCacheHandler.removeBlockByHashFuture(hash);
        ProtocolCacheHandler.removeRequest(hash);
    }
}
Also used : Block(io.nuls.kernel.model.Block) NulsDigestData(io.nuls.kernel.model.NulsDigestData) IOException(java.io.IOException) Result(io.nuls.kernel.model.Result)

Example 4 with NulsDigestData

use of io.nuls.kernel.model.NulsDigestData in project nuls by nuls-io.

the class ForwardTxMessageHandler method onMessage.

@Override
public void onMessage(ForwardTxMessage message, Node fromNode) {
    if (message == null || fromNode == null || !fromNode.isHandShake() || null == message.getMsgBody()) {
        return;
    }
    NulsDigestData hash = message.getMsgBody();
    boolean consains = TransactionDuplicateRemoval.mightContain(hash);
    if (consains) {
        return;
    }
    TransactionDuplicateRemoval.insert(hash);
    GetTxMessage getTxMessage = new GetTxMessage();
    getTxMessage.setMsgBody(hash);
    Result result = messageBusService.sendToNode(getTxMessage, fromNode, true);
    if (result.isFailed()) {
        return;
    }
}
Also used : GetTxMessage(io.nuls.protocol.message.GetTxMessage) NulsDigestData(io.nuls.kernel.model.NulsDigestData) Result(io.nuls.kernel.model.Result)

Example 5 with NulsDigestData

use of io.nuls.kernel.model.NulsDigestData in project nuls by nuls-io.

the class GetBlocksByHashHandler method onMessage.

@Override
public void onMessage(GetBlocksByHashMessage message, Node fromNode) {
    if (message == null || message.getMsgBody() == null || fromNode == null) {
        return;
    }
    GetBlocksByHashParam param = message.getMsgBody();
    if (param.getStartHash() == null || param.getEndHash() == null) {
        return;
    }
    NulsDigestData requestHash = null;
    try {
        requestHash = NulsDigestData.calcDigestData(param.serialize());
    } catch (IOException e) {
        e.printStackTrace();
    }
    // react request
    messageBusService.sendToNode(new ReactMessage(requestHash), fromNode, true);
    BlockHeader startBlockHeader = blockService.getBlockHeader(param.getStartHash()).getData();
    if (startBlockHeader == null) {
        sendNotFound(requestHash, fromNode);
        return;
    }
    Block endBlock = blockService.getBlock(param.getEndHash()).getData();
    if (endBlock == null) {
        sendNotFound(requestHash, fromNode);
        return;
    }
    if (endBlock.getHeader().getHeight() - startBlockHeader.getHeight() >= MAX_SIZE) {
        return;
    }
    Block block = endBlock;
    while (true) {
        sendBlock(block, fromNode);
        if (block.getHeader().getHash().equals(startBlockHeader.getHash())) {
            break;
        }
        Result<Block> result = blockService.getBlock(block.getHeader().getPreHash());
        if (result.isFailed() || (block = result.getData()) == null) {
            sendNotFound(requestHash, fromNode);
            return;
        }
    }
    CompleteMessage completeMessage = new CompleteMessage();
    completeMessage.setMsgBody(new CompleteParam(requestHash, true));
    messageBusService.sendToNode(completeMessage, fromNode, true);
}
Also used : GetBlocksByHashParam(io.nuls.protocol.model.GetBlocksByHashParam) NulsDigestData(io.nuls.kernel.model.NulsDigestData) Block(io.nuls.kernel.model.Block) IOException(java.io.IOException) BlockHeader(io.nuls.kernel.model.BlockHeader) CompleteParam(io.nuls.protocol.model.CompleteParam)

Aggregations

NulsDigestData (io.nuls.kernel.model.NulsDigestData)54 ArrayList (java.util.ArrayList)16 Transaction (io.nuls.kernel.model.Transaction)12 Test (org.junit.Test)12 Block (io.nuls.kernel.model.Block)9 AgentPo (io.nuls.consensus.poc.storage.po.AgentPo)8 NulsException (io.nuls.kernel.exception.NulsException)8 BlockHeader (io.nuls.kernel.model.BlockHeader)7 IOException (java.io.IOException)7 NulsRuntimeException (io.nuls.kernel.exception.NulsRuntimeException)5 Result (io.nuls.kernel.model.Result)5 BaseTest (io.nuls.consensus.poc.storage.BaseTest)4 HashSet (java.util.HashSet)4 DepositPo (io.nuls.consensus.poc.storage.po.DepositPo)3 MicroKernelBootstrap (io.nuls.kernel.MicroKernelBootstrap)3 BlockSignature (io.nuls.kernel.script.BlockSignature)3 ValidateResult (io.nuls.kernel.validate.ValidateResult)3 Node (io.nuls.network.model.Node)3 TransferTransaction (io.nuls.protocol.model.tx.TransferTransaction)3 Deposit (io.nuls.consensus.poc.protocol.entity.Deposit)2