use of io.nuls.consensus.poc.protocol.tx.CancelDepositTransaction in project nuls by nuls-io.
the class CancelDepositTxProcessor method conflictDetect.
@Override
public ValidateResult conflictDetect(List<Transaction> txList) {
if (txList == null || txList.size() <= 1) {
return ValidateResult.getSuccessResult();
}
Set<NulsDigestData> hashSet = new HashSet<>();
Set<NulsDigestData> agentHashSet = new HashSet<>();
Set<String> addressSet = new HashSet<>();
for (Transaction tx : txList) {
if (tx.getType() == ConsensusConstant.TX_TYPE_RED_PUNISH) {
RedPunishTransaction transaction = (RedPunishTransaction) tx;
addressSet.add(AddressTool.getStringAddressByBytes(transaction.getTxData().getAddress()));
} else if (tx.getType() == ConsensusConstant.TX_TYPE_STOP_AGENT) {
StopAgentTransaction transaction = (StopAgentTransaction) tx;
agentHashSet.add(transaction.getTxData().getCreateTxHash());
}
}
for (Transaction tx : txList) {
if (tx.getType() == ConsensusConstant.TX_TYPE_CANCEL_DEPOSIT) {
CancelDepositTransaction transaction = (CancelDepositTransaction) tx;
if (!hashSet.add(transaction.getTxData().getJoinTxHash())) {
return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.TRANSACTION_REPEATED);
}
if (agentHashSet.contains(transaction.getTxData().getJoinTxHash())) {
return ValidateResult.getFailedResult(this.getClass().getName(), PocConsensusErrorCode.AGENT_STOPPED);
}
DepositPo depositPo = depositStorageService.get(transaction.getTxData().getJoinTxHash());
if (depositPo.getDelHeight() > 0) {
return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.TRANSACTION_REPEATED);
}
AgentPo agentPo = agentStorageService.get(depositPo.getAgentHash());
if (null == agentPo || agentPo.getDelHeight() > 0) {
return ValidateResult.getFailedResult(this.getClass().getName(), PocConsensusErrorCode.AGENT_NOT_EXIST);
}
if (addressSet.contains(AddressTool.getStringAddressByBytes(agentPo.getAgentAddress()))) {
return ValidateResult.getFailedResult(this.getClass().getName(), PocConsensusErrorCode.AGENT_PUNISHED);
}
}
}
return ValidateResult.getSuccessResult();
}
Aggregations