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;
}
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;
}
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;
}
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");
}
}
Aggregations