Search in sources :

Example 1 with BlockHeaderDto

use of io.nuls.contract.entity.BlockHeaderDto 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 BlockHeaderDto

use of io.nuls.contract.entity.BlockHeaderDto in project nuls by nuls-io.

the class NativeBlock method getBlockHeader.

private static ObjectRef getBlockHeader(long blockNumber, Frame frame) {
    String fieldName = "BlockHeader$" + blockNumber;
    Object object = frame.heap.getStatic(VariableType.BLOCK_HEADER_TYPE.getType(), fieldName);
    if (object != null) {
        return (ObjectRef) object;
    }
    BlockHeaderDto blockHeaderDto = frame.vm.getBlockHeader(blockNumber);
    if (blockHeaderDto != null) {
        ObjectRef objectRef = frame.heap.newObject(VariableType.BLOCK_HEADER_TYPE);
        frame.heap.putField(objectRef, "hash", frame.heap.newString(blockHeaderDto.getHash()));
        frame.heap.putField(objectRef, "time", blockHeaderDto.getTime());
        frame.heap.putField(objectRef, "height", blockHeaderDto.getHeight());
        frame.heap.putField(objectRef, "txCount", blockHeaderDto.getTxCount());
        ObjectRef packingAddress = null;
        if (blockHeaderDto.getPackingAddress() != null) {
            packingAddress = frame.heap.newAddress(NativeAddress.toString(blockHeaderDto.getPackingAddress()));
        }
        frame.heap.putField(objectRef, "packingAddress", packingAddress);
        String stateRoot = null;
        if (blockHeaderDto.getStateRoot() != null) {
            stateRoot = Hex.toHexString(blockHeaderDto.getStateRoot());
        }
        frame.heap.putField(objectRef, "stateRoot", frame.heap.newString(stateRoot));
        frame.heap.putStatic(VariableType.BLOCK_HEADER_TYPE.getType(), fieldName, objectRef);
        return objectRef;
    }
    return null;
}
Also used : ObjectRef(io.nuls.contract.vm.ObjectRef) BlockHeaderDto(io.nuls.contract.entity.BlockHeaderDto)

Example 3 with BlockHeaderDto

use of io.nuls.contract.entity.BlockHeaderDto in project nuls by nuls-io.

the class VMContext method getBlockHeader.

/**
 * @param height
 * @return
 * @throws NulsException
 * @throws IOException
 */
public BlockHeaderDto getBlockHeader(long height) throws NulsException, IOException {
    if (height < 0L) {
        return null;
    }
    Result<BlockHeader> blockHeaderResult = blockService.getBlockHeader(height);
    if (blockHeaderResult == null || blockHeaderResult.getData() == null) {
        return null;
    }
    BlockHeaderDto header = new BlockHeaderDto(blockHeaderResult.getData());
    return header;
}
Also used : BlockHeader(io.nuls.kernel.model.BlockHeader) BlockHeaderDto(io.nuls.contract.entity.BlockHeaderDto)

Example 4 with BlockHeaderDto

use of io.nuls.contract.entity.BlockHeaderDto in project nuls by nuls-io.

the class ProgramExecutorImpl method commit.

@Override
public void commit() {
    checkThread();
    if (!revert) {
        repository.commit();
        if (prevStateRoot == null) {
            if (parent.blockNumber == 0) {
                parent.blockNumber = blockNumber;
            }
            if (parent.blockNumber != blockNumber) {
                throw new RuntimeException("must use the same block number");
            }
        } else {
            if (vmContext != null) {
                BlockHeaderDto blockHeaderDto;
                try {
                    blockHeaderDto = vmContext.getBlockHeader(blockNumber);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
                byte[] parentHash = Hex.decode(blockHeaderDto.getPreHash());
                byte[] hash = Hex.decode(blockHeaderDto.getHash());
                Block block = new Block(parentHash, hash, blockNumber);
                DefaultConfig.getDefault().blockStore().saveBlock(block, BigInteger.ONE, true);
                DefaultConfig.getDefault().pruneManager().blockCommitted(block.getHeader());
            }
            CommonConfig.getDefault().dbFlushManager().flush();
        }
        logTime("commit");
    }
}
Also used : Block(org.ethereum.core.Block) BlockHeaderDto(io.nuls.contract.entity.BlockHeaderDto) ErrorException(io.nuls.contract.vm.exception.ErrorException)

Aggregations

BlockHeaderDto (io.nuls.contract.entity.BlockHeaderDto)4 BlockHeader (io.nuls.kernel.model.BlockHeader)2 ObjectRef (io.nuls.contract.vm.ObjectRef)1 ErrorException (io.nuls.contract.vm.exception.ErrorException)1 NulsDigestData (io.nuls.kernel.model.NulsDigestData)1 Block (org.ethereum.core.Block)1