Search in sources :

Example 16 with DepositPo

use of io.nuls.consensus.poc.storage.po.DepositPo 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();
}
Also used : DepositPo(io.nuls.consensus.poc.storage.po.DepositPo) StopAgentTransaction(io.nuls.consensus.poc.protocol.tx.StopAgentTransaction) DepositTransaction(io.nuls.consensus.poc.protocol.tx.DepositTransaction) RedPunishTransaction(io.nuls.consensus.poc.protocol.tx.RedPunishTransaction) Transaction(io.nuls.kernel.model.Transaction) CancelDepositTransaction(io.nuls.consensus.poc.protocol.tx.CancelDepositTransaction) RedPunishTransaction(io.nuls.consensus.poc.protocol.tx.RedPunishTransaction) CancelDepositTransaction(io.nuls.consensus.poc.protocol.tx.CancelDepositTransaction) NulsDigestData(io.nuls.kernel.model.NulsDigestData) StopAgentTransaction(io.nuls.consensus.poc.protocol.tx.StopAgentTransaction) HashSet(java.util.HashSet) AgentPo(io.nuls.consensus.poc.storage.po.AgentPo)

Example 17 with DepositPo

use of io.nuls.consensus.poc.storage.po.DepositPo in project nuls by nuls-io.

the class DepositTxProcessor method onCommit.

/**
 * 交易存储时调用该方法
 * This method is called when the transaction save.
 *
 * @param tx            要保存的交易,The transaction to save;
 * @param secondaryData 辅助数据,视业务需要传递,Secondary data, depending on the business needs to be passed.
 */
@Override
public Result onCommit(DepositTransaction tx, Object secondaryData) {
    Deposit deposit = tx.getTxData();
    BlockHeader header = (BlockHeader) secondaryData;
    deposit.setTxHash(tx.getHash());
    deposit.setTime(tx.getTime());
    deposit.setBlockHeight(header.getHeight());
    DepositPo depositPo = PoConvertUtil.depositToPo(deposit);
    boolean success = depositStorageService.save(depositPo);
    return new Result(success, null);
}
Also used : Deposit(io.nuls.consensus.poc.protocol.entity.Deposit) DepositPo(io.nuls.consensus.poc.storage.po.DepositPo) ValidateResult(io.nuls.kernel.validate.ValidateResult)

Aggregations

DepositPo (io.nuls.consensus.poc.storage.po.DepositPo)17 AgentPo (io.nuls.consensus.poc.storage.po.AgentPo)7 NulsRuntimeException (io.nuls.kernel.exception.NulsRuntimeException)6 NulsException (io.nuls.kernel.exception.NulsException)5 ValidateResult (io.nuls.kernel.validate.ValidateResult)4 ArrayList (java.util.ArrayList)4 Deposit (io.nuls.consensus.poc.protocol.entity.Deposit)3 CancelDepositTransaction (io.nuls.consensus.poc.protocol.tx.CancelDepositTransaction)3 DepositTransaction (io.nuls.consensus.poc.protocol.tx.DepositTransaction)3 NulsDigestData (io.nuls.kernel.model.NulsDigestData)3 TransactionSignature (io.nuls.kernel.script.TransactionSignature)3 RedPunishData (io.nuls.consensus.poc.protocol.entity.RedPunishData)2 BlockHeader (io.nuls.kernel.model.BlockHeader)2 Coin (io.nuls.kernel.model.Coin)2 Na (io.nuls.kernel.model.Na)2 BlockExtendsData (io.nuls.consensus.poc.model.BlockExtendsData)1 RedPunishTransaction (io.nuls.consensus.poc.protocol.tx.RedPunishTransaction)1 StopAgentTransaction (io.nuls.consensus.poc.protocol.tx.StopAgentTransaction)1 DepositComparator (io.nuls.consensus.poc.protocol.util.DepositComparator)1 PunishLogPo (io.nuls.consensus.poc.storage.po.PunishLogPo)1