use of io.nuls.kernel.model.BlockHeader 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.kernel.model.BlockHeader in project nuls by nuls-io.
the class VMHelper method invokeCustomGasViewMethod.
public ProgramResult invokeCustomGasViewMethod(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, true, currentStateRoot, blockHeight, contractAddressBytes, methodName, methodDesc, args);
}
use of io.nuls.kernel.model.BlockHeader in project nuls by nuls-io.
the class VMHelper method getMethodInfoByContractAddress.
public ProgramMethod getMethodInfoByContractAddress(String methodName, String methodDesc, byte[] contractAddressBytes) {
if (StringUtils.isBlank(methodName)) {
return null;
}
BlockHeader header = NulsContext.getInstance().getBestBlock().getHeader();
// 当前区块状态根
byte[] currentStateRoot = ContractUtil.getStateRoot(header);
ProgramExecutor track = programExecutor.begin(currentStateRoot);
List<ProgramMethod> methods = track.method(contractAddressBytes);
return this.getMethodInfo(methodName, methodDesc, methods);
}
use of io.nuls.kernel.model.BlockHeader 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);
}
use of io.nuls.kernel.model.BlockHeader in project nuls by nuls-io.
the class BlockServiceImplTest method init.
@Before
public void init() {
MicroKernelBootstrap mk = MicroKernelBootstrap.getInstance();
mk.init();
mk.start();
LevelDbModuleBootstrap bootstrap = new LevelDbModuleBootstrap();
bootstrap.init();
bootstrap.start();
UtxoLedgerModuleBootstrap ledgerModuleBootstrap = new UtxoLedgerModuleBootstrap();
ledgerModuleBootstrap.init();
ledgerModuleBootstrap.start();
service = NulsContext.getServiceBean(BlockService.class);
Block block = new Block();
BlockHeader blockHeader = new BlockHeader();
blockHeader.setHash(NulsDigestData.calcDigestData("hashhash".getBytes()));
blockHeader.setHeight(1286L);
blockHeader.setExtend("extends".getBytes());
blockHeader.setMerkleHash(NulsDigestData.calcDigestData("merkleHash".getBytes()));
blockHeader.setPreHash(NulsDigestData.calcDigestData("prehash".getBytes()));
try {
blockHeader.setPackingAddress("address".getBytes());
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
blockHeader.setBlockSignature(new BlockSignature());
blockHeader.setTime(12345678901L);
blockHeader.setTxCount(3);
List<NulsDigestData> txHashList = new ArrayList<>();
txHashList.add(NulsDigestData.calcDigestData("first-tx-hash".getBytes()));
txHashList.add(NulsDigestData.calcDigestData("second-tx-hash".getBytes()));
txHashList.add(NulsDigestData.calcDigestData("third-tx-hash".getBytes()));
// block.setTxHashList(txHashList);
// this.model = blockHeader;
}
Aggregations