Search in sources :

Example 31 with BlockHeader

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

the class VMHelper method invokeViewMethod.

public ProgramResult invokeViewMethod(byte[] contractAddressBytes, String methodName, String methodDesc, String[][] args) {
    // 当前区块高度
    BlockHeader blockHeader = NulsContext.getInstance().getBestBlock().getHeader();
    long blockHeight = blockHeader.getHeight();
    // 当前区块状态根
    byte[] currentStateRoot = ContractUtil.getStateRoot(blockHeader);
    return this.invokeViewMethod(null, false, currentStateRoot, blockHeight, contractAddressBytes, methodName, methodDesc, args);
}
Also used : BlockHeader(io.nuls.kernel.model.BlockHeader)

Example 32 with BlockHeader

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

the class CreateAgentTxProcessor method onCommit.

@Override
public Result onCommit(CreateAgentTransaction tx, Object secondaryData) {
    Agent agent = tx.getTxData();
    BlockHeader header = (BlockHeader) secondaryData;
    agent.setTxHash(tx.getHash());
    agent.setBlockHeight(header.getHeight());
    agent.setTime(tx.getTime());
    AgentPo agentPo = PoConvertUtil.agentToPo(agent);
    boolean success = agentStorageService.save(agentPo);
    return new Result(success, null);
}
Also used : Agent(io.nuls.consensus.poc.protocol.entity.Agent) BlockHeader(io.nuls.kernel.model.BlockHeader) AgentPo(io.nuls.consensus.poc.storage.po.AgentPo) ValidateResult(io.nuls.kernel.validate.ValidateResult) Result(io.nuls.kernel.model.Result)

Example 33 with BlockHeader

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

the class RedPunishTxProcessor method onCommit.

@Override
public Result onCommit(RedPunishTransaction tx, Object secondaryData) {
    RedPunishData punishData = tx.getTxData();
    BlockHeader header = (BlockHeader) secondaryData;
    BlockExtendsData roundData = new BlockExtendsData(header.getExtend());
    PunishLogPo punishLogPo = new PunishLogPo();
    punishLogPo.setAddress(punishData.getAddress());
    punishLogPo.setHeight(tx.getBlockHeight());
    punishLogPo.setRoundIndex(roundData.getRoundIndex());
    punishLogPo.setTime(tx.getTime());
    punishLogPo.setType(PunishType.RED.getCode());
    punishLogPo.setEvidence(punishData.getEvidence());
    punishLogPo.setReasonCode(punishData.getReasonCode());
    List<AgentPo> agentList = agentStorageService.getList();
    AgentPo agent = null;
    for (AgentPo agentPo : agentList) {
        if (agentPo.getDelHeight() > 0) {
            continue;
        }
        if (Arrays.equals(agentPo.getAgentAddress(), punishLogPo.getAddress())) {
            agent = agentPo;
            break;
        }
    }
    if (null == agent) {
        Log.error("There is no agent can be punished.");
        return Result.getSuccess();
    }
    List<DepositPo> depositPoList = depositStorageService.getList();
    List<DepositPo> updatedList = new ArrayList<>();
    for (DepositPo po : depositPoList) {
        if (po.getDelHeight() >= 0) {
            continue;
        }
        if (!po.getAgentHash().equals(agent.getHash())) {
            continue;
        }
        po.setDelHeight(tx.getBlockHeight());
        boolean b = depositStorageService.save(po);
        if (!b) {
            for (DepositPo po2 : updatedList) {
                po2.setDelHeight(-1);
                this.depositStorageService.save(po2);
            }
            return ValidateResult.getFailedResult(this.getClass().getName(), PocConsensusErrorCode.UPDATE_DEPOSIT_FAILED);
        }
        updatedList.add(po);
    }
    boolean success = storageService.save(punishLogPo);
    if (!success) {
        for (DepositPo po2 : updatedList) {
            po2.setDelHeight(-1);
            this.depositStorageService.save(po2);
        }
        throw new NulsRuntimeException(TransactionErrorCode.ROLLBACK_TRANSACTION_FAILED);
    }
    AgentPo agentPo = agent;
    agentPo.setDelHeight(tx.getBlockHeight());
    success = agentStorageService.save(agentPo);
    if (!success) {
        for (DepositPo po2 : updatedList) {
            po2.setDelHeight(-1);
            this.depositStorageService.save(po2);
        }
        this.storageService.delete(punishLogPo.getKey());
        return Result.getFailed(PocConsensusErrorCode.UPDATE_AGENT_FAILED);
    }
    return Result.getSuccess();
}
Also used : DepositPo(io.nuls.consensus.poc.storage.po.DepositPo) RedPunishData(io.nuls.consensus.poc.protocol.entity.RedPunishData) BlockExtendsData(io.nuls.consensus.poc.model.BlockExtendsData) ArrayList(java.util.ArrayList) NulsRuntimeException(io.nuls.kernel.exception.NulsRuntimeException) BlockHeader(io.nuls.kernel.model.BlockHeader) PunishLogPo(io.nuls.consensus.poc.storage.po.PunishLogPo) AgentPo(io.nuls.consensus.poc.storage.po.AgentPo)

Example 34 with BlockHeader

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

the class OrphanBlockProcess method foundAndProcessPreviousBlock.

private void foundAndProcessPreviousBlock(BlockContainer blockContainer) {
    BlockHeader blockHeader = blockContainer.getBlock().getHeader();
    // Determine whether the previous block already exists. If it already exists, it will not be downloaded.
    // 判断上一区块是否已经存在,如果已经存在则不下载
    boolean hasExist = checkHasExist(blockHeader.getPreHash());
    if (hasExist) {
        return;
    }
    Block preBlock = downloadService.downloadBlock(blockHeader.getPreHash(), blockContainer.getNode()).getData();
    if (preBlock != null) {
        ChainLog.debug("get pre block success {} - {}", preBlock.getHeader().getHeight(), preBlock.getHeader().getHash());
        orphanBlockProvider.addBlock(new BlockContainer(preBlock, blockContainer.getNode(), BlockContainerStatus.DOWNLOADING));
    } else {
        ChainLog.debug("get pre block fail {} - {}", blockHeader.getHeight() - 1, blockHeader.getPreHash());
        // 失败情况的处理,从其它所有可用的节点去获取,如果都不成功,那么就失败,包括本次失败的节点,再次获取一次
        for (Node node : networkService.getAvailableNodes()) {
            preBlock = downloadService.downloadBlock(blockHeader.getPreHash(), node).getData();
            if (preBlock != null) {
                orphanBlockProvider.addBlock(new BlockContainer(preBlock, node, BlockContainerStatus.DOWNLOADING));
                ChainLog.debug("get pre block retry success {} - {}", preBlock.getHeader().getHeight() - 1, preBlock.getHeader().getPreHash());
                return;
            }
        }
        ChainLog.debug("get pre block complete failure {} - {}", blockHeader.getHeight() - 1, blockHeader.getPreHash());
    }
}
Also used : BlockContainer(io.nuls.consensus.poc.container.BlockContainer) Node(io.nuls.network.model.Node) Block(io.nuls.kernel.model.Block) BlockHeader(io.nuls.kernel.model.BlockHeader)

Example 35 with BlockHeader

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

the class ConsensusBlockServiceImpl method getBlock.

@Override
public Result<Block> getBlock(NulsDigestData hash) {
    Result result = new Result(true, null);
    Block block = new Block();
    BlockHeader blockHeader = new BlockHeader();
    blockHeader.setHash(hash);
    block.setHeader(blockHeader);
    block.setTxs(new ArrayList<>());
    result.setData(block);
    return result;
}
Also used : Block(io.nuls.kernel.model.Block) SmallBlock(io.nuls.protocol.model.SmallBlock) BlockHeader(io.nuls.kernel.model.BlockHeader) Result(io.nuls.kernel.model.Result)

Aggregations

BlockHeader (io.nuls.kernel.model.BlockHeader)40 Block (io.nuls.kernel.model.Block)8 BlockExtendsData (io.nuls.consensus.poc.model.BlockExtendsData)7 NulsRuntimeException (io.nuls.kernel.exception.NulsRuntimeException)7 NulsDigestData (io.nuls.kernel.model.NulsDigestData)7 ArrayList (java.util.ArrayList)7 PunishLogPo (io.nuls.consensus.poc.storage.po.PunishLogPo)5 Result (io.nuls.kernel.model.Result)5 ValidateResult (io.nuls.kernel.validate.ValidateResult)4 IOException (java.io.IOException)4 ChainContainer (io.nuls.consensus.poc.container.ChainContainer)3 Agent (io.nuls.consensus.poc.protocol.entity.Agent)3 AgentPo (io.nuls.consensus.poc.storage.po.AgentPo)3 ProtocolContainer (io.nuls.protocol.base.version.ProtocolContainer)3 Chain (io.nuls.consensus.poc.model.Chain)2 RedPunishData (io.nuls.consensus.poc.protocol.entity.RedPunishData)2 YellowPunishData (io.nuls.consensus.poc.protocol.entity.YellowPunishData)2 DepositPo (io.nuls.consensus.poc.storage.po.DepositPo)2 ContractResult (io.nuls.contract.dto.ContractResult)2 BlockHeaderDto (io.nuls.contract.entity.BlockHeaderDto)2