use of io.nuls.kernel.model.BlockHeader in project nuls by nuls-io.
the class YellowPunishTxProcessor method onCommit.
@Override
public Result onCommit(YellowPunishTransaction tx, Object secondaryData) {
YellowPunishData punishData = tx.getTxData();
BlockHeader header = (BlockHeader) secondaryData;
BlockExtendsData roundData = new BlockExtendsData(header.getExtend());
List<PunishLogPo> savedList = new ArrayList<>();
int index = 1;
for (byte[] address : punishData.getAddressList()) {
PunishLogPo po = new PunishLogPo();
po.setAddress(address);
po.setHeight(tx.getBlockHeight());
po.setRoundIndex(roundData.getRoundIndex());
po.setTime(tx.getTime());
po.setIndex(index++);
po.setType(PunishType.YELLOW.getCode());
boolean result = punishLogStorageService.save(po);
if (!result) {
for (PunishLogPo punishLogPo : savedList) {
punishLogStorageService.delete(getPoKey(punishLogPo.getAddress(), PunishType.YELLOW.getCode(), punishLogPo.getHeight(), punishLogPo.getIndex()));
}
throw new NulsRuntimeException(TransactionErrorCode.ROLLBACK_TRANSACTION_FAILED);
} else {
savedList.add(po);
}
}
return Result.getSuccess();
}
use of io.nuls.kernel.model.BlockHeader in project nuls by nuls-io.
the class YellowPunishTxProcessor method onRollback.
@Override
public Result onRollback(YellowPunishTransaction tx, Object secondaryData) {
YellowPunishData punishData = tx.getTxData();
List<byte[]> deletedList = new ArrayList<>();
int deleteIndex = 1;
for (byte[] address : punishData.getAddressList()) {
boolean result = punishLogStorageService.delete(this.getPoKey(address, PunishType.YELLOW.getCode(), tx.getBlockHeight(), deleteIndex++));
if (!result) {
BlockHeader header = (BlockHeader) secondaryData;
BlockExtendsData roundData = new BlockExtendsData(header.getExtend());
int index = 1;
for (byte[] bytes : deletedList) {
PunishLogPo po = new PunishLogPo();
po.setAddress(bytes);
po.setHeight(tx.getBlockHeight());
po.setRoundIndex(roundData.getRoundIndex());
po.setTime(tx.getTime());
po.setIndex(index++);
po.setType(PunishType.YELLOW.getCode());
punishLogStorageService.save(po);
}
throw new NulsRuntimeException(TransactionErrorCode.ROLLBACK_TRANSACTION_FAILED);
} else {
deletedList.add(address);
}
}
return Result.getSuccess();
}
use of io.nuls.kernel.model.BlockHeader in project nuls by nuls-io.
the class ConsensusDownloadServiceImpl method downloadBlock.
@Override
public Result<Block> downloadBlock(NulsDigestData hash, Node node) {
Result<Block> result = new Result<>();
Block block = new Block();
block.setTxs(new ArrayList<>());
BlockHeader blockHeader = new BlockHeader();
blockHeader.setHash(hash);
block.setHeader(blockHeader);
result.setData(block);
return result;
}
use of io.nuls.kernel.model.BlockHeader in project nuls by nuls-io.
the class ChainTest method test.
@Test
public void test() {
Chain chain = new Chain();
assertNotNull(chain.getId());
assertNull(chain.getBestBlock());
Block block = new Block();
BlockHeader blockHeader = new BlockHeader();
blockHeader.setHeight(100l);
block.setHeader(blockHeader);
chain.getAllBlockList().add(block);
Block bestBlock = chain.getBestBlock();
assertNotNull(bestBlock);
assertEquals(bestBlock.getHeader().getHeight(), 100l);
}
use of io.nuls.kernel.model.BlockHeader in project nuls by nuls-io.
the class ClientResource method getProtocolInfo.
@GET
@Path("/protocol/info")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "协议版本升级统计信息")
@ApiResponses(value = { @ApiResponse(code = 200, message = "success", response = ProtocolContainerDTO.class) })
public RpcClientResult getProtocolInfo() {
BlockHeader blockHeader = NulsContext.getInstance().getBestBlock().getHeader();
List<ProtocolContainerDTO> list = new ArrayList<>();
ProtocolContainer protocolContainer = NulsVersionManager.getProtocolContainer(NulsContext.CURRENT_PROTOCOL_VERSION);
ProtocolContainerDTO pcDTO = new ProtocolContainerDTO(protocolContainer);
if (pcDTO.getStatus() == ProtocolContainer.DELAY_LOCK) {
pcDTO.setEffectiveHeight(blockHeader.getHeight() + pcDTO.getCountdownDelay() + 1);
}
list.add(pcDTO);
Map<String, ProtocolTempInfoPo> protocolTempMap = versionManagerStorageService.getProtocolTempMap();
for (ProtocolTempInfoPo protocolTempInfoPo : protocolTempMap.values()) {
ProtocolContainerDTO protocolContainerDTO = new ProtocolContainerDTO(protocolTempInfoPo);
if (protocolContainerDTO.getStatus() == ProtocolContainer.DELAY_LOCK) {
protocolContainerDTO.setEffectiveHeight(blockHeader.getHeight() + protocolContainerDTO.getCountdownDelay() + 1);
}
list.add(protocolContainerDTO);
}
Map<String, List<ProtocolContainerDTO>> map = new HashMap<>();
map.put("list", list);
return Result.getSuccess().setData(map).toRpcClientResult();
}
Aggregations