Search in sources :

Example 1 with DepositPo

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

the class CacheLoader method loadDepositList.

public List<Deposit> loadDepositList() {
    List<Deposit> depositList = new ArrayList<>();
    List<DepositPo> poList = depositStorageService.getList();
    for (DepositPo po : poList) {
        depositList.add(PoConvertUtil.poToDeposit(po));
    }
    Collections.sort(depositList, new DepositComparator());
    return depositList;
}
Also used : Deposit(io.nuls.consensus.poc.protocol.entity.Deposit) DepositPo(io.nuls.consensus.poc.storage.po.DepositPo) DepositComparator(io.nuls.consensus.poc.protocol.util.DepositComparator) ArrayList(java.util.ArrayList)

Example 2 with DepositPo

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

the class StopAgentTxValidator method validate.

@Override
public ValidateResult validate(StopAgentTransaction data) throws NulsException {
    AgentPo agentPo = agentStorageService.get(data.getTxData().getCreateTxHash());
    if (null == agentPo || agentPo.getDelHeight() > 0) {
        return ValidateResult.getFailedResult(this.getClass().getName(), PocConsensusErrorCode.AGENT_NOT_EXIST);
    }
    TransactionSignature sig = new TransactionSignature();
    try {
        sig.parse(data.getTransactionSignature(), 0);
    } catch (NulsException e) {
        Log.error(e);
        return ValidateResult.getFailedResult(this.getClass().getName(), e.getErrorCode());
    }
    if (!SignatureUtil.containsAddress(data, agentPo.getAgentAddress())) {
        ValidateResult result = ValidateResult.getFailedResult(this.getClass().getName(), KernelErrorCode.SIGNATURE_ERROR);
        result.setLevel(SeverityLevelEnum.FLAGRANT_FOUL);
        return result;
    }
    if (data.getCoinData().getTo() == null || data.getCoinData().getTo().isEmpty()) {
        return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.TX_DATA_VALIDATION_ERROR);
    }
    List<DepositPo> allDepositList = depositStorageService.getList();
    Map<NulsDigestData, DepositPo> depositMap = new HashMap<>();
    Na totalNa = agentPo.getDeposit();
    DepositPo ownDeposit = new DepositPo();
    ownDeposit.setDeposit(agentPo.getDeposit());
    ownDeposit.setAddress(agentPo.getAgentAddress());
    depositMap.put(data.getTxData().getCreateTxHash(), ownDeposit);
    for (DepositPo deposit : allDepositList) {
        if (deposit.getDelHeight() > -1L && (data.getBlockHeight() == -1L || deposit.getDelHeight() < data.getBlockHeight())) {
            continue;
        }
        if (!deposit.getAgentHash().equals(agentPo.getHash())) {
            continue;
        }
        depositMap.put(deposit.getTxHash(), deposit);
        totalNa = totalNa.add(deposit.getDeposit());
    }
    Na fromTotal = Na.ZERO;
    Map<String, Na> verifyToMap = new HashMap<>();
    for (Coin coin : data.getCoinData().getFrom()) {
        if (coin.getLockTime() != -1L) {
            return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.TX_DATA_VALIDATION_ERROR);
        }
        NulsDigestData txHash = new NulsDigestData();
        txHash.parse(coin.getOwner(), 0);
        DepositPo deposit = depositMap.remove(txHash);
        if (deposit == null) {
            return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.TX_DATA_VALIDATION_ERROR);
        }
        if (deposit.getAgentHash() == null && !coin.getNa().equals(agentPo.getDeposit())) {
            return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.TX_DATA_VALIDATION_ERROR);
        } else if (!deposit.getDeposit().equals(coin.getNa())) {
            return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.TX_DATA_VALIDATION_ERROR);
        }
        fromTotal = fromTotal.add(coin.getNa());
        if (deposit.getAgentHash() == null) {
            continue;
        }
        String address = AddressTool.getStringAddressByBytes(deposit.getAddress());
        Na na = verifyToMap.get(address);
        if (null == na) {
            na = deposit.getDeposit();
        } else {
            na = na.add(deposit.getDeposit());
        }
        verifyToMap.put(address, na);
    }
    if (!depositMap.isEmpty()) {
        return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.TX_DATA_VALIDATION_ERROR);
    }
    if (!totalNa.equals(fromTotal)) {
        return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.TX_DATA_VALIDATION_ERROR);
    }
    Na ownToCoin = ownDeposit.getDeposit().subtract(data.getFee());
    long ownLockTime = 0L;
    for (Coin coin : data.getCoinData().getTo()) {
        // String address = AddressTool.getStringAddressByBytes(coin.());
        String address = AddressTool.getStringAddressByBytes(coin.getAddress());
        Na na = verifyToMap.get(address);
        if (null != na && na.equals(coin.getNa())) {
            verifyToMap.remove(address);
            continue;
        }
        if (ownToCoin != null && Arrays.equals(coin.getAddress(), ownDeposit.getAddress()) && coin.getNa().equals(ownToCoin)) {
            ownToCoin = null;
            ownLockTime = coin.getLockTime();
            continue;
        } else {
            return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.TX_DATA_VALIDATION_ERROR);
        }
    }
    if (ownLockTime < (data.getTime() + PocConsensusConstant.STOP_AGENT_LOCK_TIME)) {
        return ValidateResult.getFailedResult(this.getClass().getName(), PocConsensusErrorCode.LOCK_TIME_NOT_REACHED);
    } else if (data.getBlockHeight() <= 0 && ownLockTime < (TimeService.currentTimeMillis() + PocConsensusConstant.STOP_AGENT_LOCK_TIME - 300000L)) {
        return ValidateResult.getFailedResult(this.getClass().getName(), PocConsensusErrorCode.LOCK_TIME_NOT_REACHED);
    }
    if (!verifyToMap.isEmpty()) {
        return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.TX_DATA_VALIDATION_ERROR);
    }
    return ValidateResult.getSuccessResult();
}
Also used : ValidateResult(io.nuls.kernel.validate.ValidateResult) TransactionSignature(io.nuls.kernel.script.TransactionSignature) Coin(io.nuls.kernel.model.Coin) DepositPo(io.nuls.consensus.poc.storage.po.DepositPo) Na(io.nuls.kernel.model.Na) NulsException(io.nuls.kernel.exception.NulsException) NulsDigestData(io.nuls.kernel.model.NulsDigestData) AgentPo(io.nuls.consensus.poc.storage.po.AgentPo)

Example 3 with DepositPo

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

the class DepositTxProcessor method getAgentTotalDeposit.

private Na getAgentTotalDeposit(NulsDigestData hash) {
    List<DepositPo> depositList = depositStorageService.getList();
    long startBlockHeight = NulsContext.getInstance().getBestHeight();
    Na na = Na.ZERO;
    for (DepositPo deposit : depositList) {
        if (deposit.getDelHeight() != -1L && deposit.getDelHeight() <= startBlockHeight) {
            continue;
        }
        if (deposit.getBlockHeight() > startBlockHeight || deposit.getBlockHeight() < 0L) {
            continue;
        }
        if (!deposit.getAgentHash().equals(hash)) {
            continue;
        }
        na = na.add(deposit.getDeposit());
    }
    return na;
}
Also used : DepositPo(io.nuls.consensus.poc.storage.po.DepositPo)

Example 4 with DepositPo

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

the class StopAgentTxProcessor method onRollback.

@Override
public Result onRollback(StopAgentTransaction tx, Object secondaryData) {
    AgentPo agentPo = agentStorageService.get(tx.getTxData().getCreateTxHash());
    if (null == agentPo || agentPo.getDelHeight() < 0) {
        throw new NulsRuntimeException(PocConsensusErrorCode.AGENT_NOT_EXIST);
    }
    agentPo.setDelHeight(-1L);
    List<DepositPo> depositPoList = depositStorageService.getList();
    for (DepositPo depositPo : depositPoList) {
        if (depositPo.getDelHeight() != tx.getBlockHeight()) {
            continue;
        }
        if (!depositPo.getAgentHash().equals(agentPo.getHash())) {
            continue;
        }
        depositPo.setDelHeight(-1L);
        depositStorageService.save(depositPo);
    }
    boolean b = agentStorageService.save(agentPo);
    if (!b) {
        return Result.getFailed(PocConsensusErrorCode.UPDATE_AGENT_FAILED);
    }
    return Result.getSuccess();
}
Also used : DepositPo(io.nuls.consensus.poc.storage.po.DepositPo) NulsRuntimeException(io.nuls.kernel.exception.NulsRuntimeException) AgentPo(io.nuls.consensus.poc.storage.po.AgentPo)

Example 5 with DepositPo

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

the class StopAgentTxProcessor method onCommit.

@Override
public Result onCommit(StopAgentTransaction tx, Object secondaryData) {
    BlockHeader header = (BlockHeader) secondaryData;
    if (tx.getTime() < (header.getTime() - 300000L)) {
        return Result.getFailed(PocConsensusErrorCode.LOCK_TIME_NOT_REACHED);
    }
    AgentPo agentPo = agentStorageService.get(tx.getTxData().getCreateTxHash());
    if (null == agentPo || agentPo.getDelHeight() > 0) {
        throw new NulsRuntimeException(PocConsensusErrorCode.AGENT_NOT_EXIST);
    }
    List<DepositPo> depositPoList = depositStorageService.getList();
    for (DepositPo depositPo : depositPoList) {
        if (depositPo.getDelHeight() > -1L) {
            continue;
        }
        if (!depositPo.getAgentHash().equals(agentPo.getHash())) {
            continue;
        }
        depositPo.setDelHeight(tx.getBlockHeight());
        depositStorageService.save(depositPo);
    }
    agentPo.setDelHeight(tx.getBlockHeight());
    tx.getTxData().setAddress(agentPo.getAgentAddress());
    boolean b = agentStorageService.save(agentPo);
    if (!b) {
        return Result.getFailed(PocConsensusErrorCode.UPDATE_AGENT_FAILED);
    }
    return Result.getSuccess();
}
Also used : DepositPo(io.nuls.consensus.poc.storage.po.DepositPo) NulsRuntimeException(io.nuls.kernel.exception.NulsRuntimeException) BlockHeader(io.nuls.kernel.model.BlockHeader) AgentPo(io.nuls.consensus.poc.storage.po.AgentPo)

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