use of io.nuls.kernel.model.NulsDigestData in project nuls by nuls-io.
the class GetTxGroupHandler method onMessage.
@Override
public void onMessage(GetTxGroupRequest message, Node fromNode) {
if (message == null || fromNode == null) {
return;
}
GetTxGroupParam getTxGroupParam = message.getMsgBody();
if (getTxGroupParam == null || getTxGroupParam.getTxHashList() == null || getTxGroupParam.getTxHashList().size() > 10000) {
return;
}
NulsDigestData requestHash = null;
try {
requestHash = NulsDigestData.calcDigestData(getTxGroupParam.serialize());
} catch (IOException e) {
Log.error(e);
return;
}
TxGroupMessage txGroupMessage = new TxGroupMessage();
TxGroup txGroup = new TxGroup();
List<Transaction> txList = new ArrayList<>();
for (NulsDigestData hash : getTxGroupParam.getTxHashList()) {
Transaction tx = transactionService.getTx(hash);
if (tx != null) {
txList.add(tx);
} else {
Log.error("GetTxGroupHandler NULL TX=========================================hash: " + hash.getDigestHex());
return;
}
}
if (txList.isEmpty()) {
Log.error("ASK:{}, {}", fromNode, getTxGroupParam.getTxHashList().get(0));
return;
}
txGroup.setTxList(txList);
txGroup.setRequestHash(requestHash);
txGroupMessage.setMsgBody(txGroup);
messageBusService.sendToNode(txGroupMessage, fromNode, true);
}
use of io.nuls.kernel.model.NulsDigestData in project nuls by nuls-io.
the class TransactionMessageHandler method onMessage.
@Override
public void onMessage(TransactionMessage message, Node fromNode) {
Transaction tx = message.getMsgBody();
if (null == tx) {
return;
}
if (tx.isSystemTx()) {
return;
}
NulsDigestData hash = tx.getHash();
TransactionDuplicateRemoval.insert(hash);
transactionService.newTx(tx);
}
use of io.nuls.kernel.model.NulsDigestData in project nuls by nuls-io.
the class ForwardSmallBlockHandler method onMessage.
@Override
public void onMessage(ForwardSmallBlockMessage message, Node fromNode) {
if (message == null || fromNode == null || !fromNode.isHandShake() || null == message.getMsgBody()) {
return;
}
NulsDigestData hash = message.getMsgBody();
if (!SmallBlockDuplicateRemoval.needDownloadSmallBlock(hash)) {
return;
}
GetSmallBlockMessage getSmallBlockMessage = new GetSmallBlockMessage();
getSmallBlockMessage.setMsgBody(hash);
Result result = messageBusService.sendToNode(getSmallBlockMessage, fromNode, true);
// if (result.isFailed()) {
// SmallBlockDuplicateRemoval.removeForward(hash);
// return;
// }
}
use of io.nuls.kernel.model.NulsDigestData in project nuls by nuls-io.
the class GetBlockHandler method onMessage.
@Override
public void onMessage(GetBlockMessage message, Node fromNode) {
if (message == null || message.getMsgBody() == null || fromNode == null) {
return;
}
NulsDigestData blockHash = message.getBlockHash();
// react request
messageBusService.sendToNode(new ReactMessage(blockHash), fromNode, true);
Block block = null;
Result<Block> result = blockService.getBlock(blockHash);
if (result.isFailed() || (block = result.getData()) == null) {
sendNotFound(blockHash, fromNode);
return;
}
sendBlock(block, fromNode);
}
use of io.nuls.kernel.model.NulsDigestData in project nuls by nuls-io.
the class GetBlocksByHeightHandler method onMessage.
@Override
public void onMessage(GetBlocksByHeightMessage message, Node fromNode) {
if (message == null || message.getMsgBody() == null || fromNode == null) {
return;
}
GetBlocksByHeightParam param = message.getMsgBody();
if (param.getStartHeight() < 0L || param.getStartHeight() > param.getEndHeight()) {
return;
}
if (param.getEndHeight() - param.getStartHeight() >= MAX_SIZE) {
return;
}
NulsDigestData requestHash = null;
try {
requestHash = NulsDigestData.calcDigestData(param.serialize());
} catch (IOException e) {
e.printStackTrace();
}
// react request
messageBusService.sendToNode(new ReactMessage(requestHash), fromNode, true);
Block startBlock = blockService.getBlock(param.getStartHeight()).getData();
if (startBlock == null) {
sendNotFound(requestHash, fromNode);
return;
}
// Block endBlock = blockService.getBlock(param.getEndHeight()).getData();
// if(endBlock == null) {
// sendNotFound(requestHash, fromNode);
// 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;
// }
// }
Block block = startBlock;
sendBlock(block, fromNode);
for (long i = param.getStartHeight() + 1; i <= param.getEndHeight(); i++) {
block = blockService.getBlock(i).getData();
sendBlock(block, fromNode);
}
CompleteMessage completeMessage = new CompleteMessage();
completeMessage.setMsgBody(new CompleteParam(requestHash, true));
messageBusService.sendToNode(completeMessage, fromNode, true);
}
Aggregations