Search in sources :

Example 1 with TransactionInfoPo

use of io.nuls.account.ledger.storage.po.TransactionInfoPo in project nuls by nuls-io.

the class AccountLedgerServiceImpl method deleteTransaction.

@Override
public Result<Integer> deleteTransaction(Transaction tx) {
    if (!AccountLegerUtils.isLocalTransaction(tx)) {
        return Result.getSuccess().setData(0);
    }
    List<byte[]> addresses = AccountLegerUtils.getRelatedAddresses(tx);
    if (addresses == null || addresses.size() == 0) {
        return Result.getSuccess().setData(0);
    }
    TransactionInfoPo txInfoPo = new TransactionInfoPo(tx);
    Result result = transactionInfoService.deleteTransactionInfo(txInfoPo);
    if (result.isFailed()) {
        return result;
    }
    result = localUtxoService.deleteUtxoOfTransaction(tx);
    if (result.isFailed()) {
        return result;
    }
    result = unconfirmedTransactionStorageService.deleteUnconfirmedTx(tx.getHash());
    for (int i = 0; i < addresses.size(); i++) {
        balanceManager.refreshBalance(addresses.get(i));
    }
    if (usedTxSets != null) {
        CoinData coinData = tx.getCoinData();
        if (coinData != null) {
            List<Coin> froms = tx.getCoinData().getFrom();
            for (Coin from : froms) {
                usedTxSets.remove(LedgerUtil.asString(from.getOwner()));
            }
        }
    }
    return result;
}
Also used : TransactionInfoPo(io.nuls.account.ledger.storage.po.TransactionInfoPo) TransactionDataResult(io.nuls.account.ledger.model.TransactionDataResult) ValidateResult(io.nuls.kernel.validate.ValidateResult) CoinDataResult(io.nuls.account.ledger.model.CoinDataResult)

Example 2 with TransactionInfoPo

use of io.nuls.account.ledger.storage.po.TransactionInfoPo in project nuls by nuls-io.

the class AccountLedgerServiceImpl method saveConfirmedTransaction.

private Result<Integer> saveConfirmedTransaction(Transaction tx, List<byte[]> addresses) {
    if (tx == null) {
        return Result.getFailed(KernelErrorCode.NULL_PARAMETER);
    }
    TransactionInfoPo txInfoPo = new TransactionInfoPo(tx);
    txInfoPo.setStatus(TransactionInfo.CONFIRMED);
    Result result = transactionInfoService.saveTransactionInfo(txInfoPo, addresses);
    if (result.isFailed()) {
        return result;
    }
    // 判断交易是否已经存在,如果存在则不处理coin
    Transaction unconfirmedTx = unconfirmedTransactionStorageService.getUnconfirmedTx(tx.getHash()).getData();
    if (unconfirmedTx == null) {
        result = localUtxoService.saveUtxoForLocalAccount(tx);
        if (result.isFailed()) {
            transactionInfoService.deleteTransactionInfo(txInfoPo);
            return result;
        }
    } else {
        unconfirmedTransactionStorageService.deleteUnconfirmedTx(tx.getHash());
    }
    for (int i = 0; i < addresses.size(); i++) {
        balanceManager.refreshBalance(addresses.get(i));
    }
    result.setData(1);
    return result;
}
Also used : TransferTransaction(io.nuls.protocol.model.tx.TransferTransaction) DataTransaction(io.nuls.protocol.model.tx.DataTransaction) TransactionInfoPo(io.nuls.account.ledger.storage.po.TransactionInfoPo) TransactionDataResult(io.nuls.account.ledger.model.TransactionDataResult) ValidateResult(io.nuls.kernel.validate.ValidateResult) CoinDataResult(io.nuls.account.ledger.model.CoinDataResult)

Example 3 with TransactionInfoPo

use of io.nuls.account.ledger.storage.po.TransactionInfoPo in project nuls by nuls-io.

the class AccountLedgerServiceImpl method importConfirmedTransaction.

protected Result<Integer> importConfirmedTransaction(Transaction tx, byte[] address) {
    if (!AccountLegerUtils.isTxRelatedToAddress(tx, address)) {
        return Result.getSuccess().setData(0);
    }
    TransactionInfoPo txInfoPo = new TransactionInfoPo(tx);
    txInfoPo.setStatus(TransactionInfo.CONFIRMED);
    List<byte[]> addresses = new ArrayList<>();
    addresses.add(address);
    Result result = transactionInfoService.saveTransactionInfo(txInfoPo, addresses);
    if (result.isFailed()) {
        return result;
    }
    result = localUtxoService.saveUtxoForAccount(tx, address);
    if (result.isFailed()) {
        transactionInfoService.deleteTransactionInfo(txInfoPo);
    }
    return result;
}
Also used : TransactionInfoPo(io.nuls.account.ledger.storage.po.TransactionInfoPo) TransactionDataResult(io.nuls.account.ledger.model.TransactionDataResult) ValidateResult(io.nuls.kernel.validate.ValidateResult) CoinDataResult(io.nuls.account.ledger.model.CoinDataResult)

Example 4 with TransactionInfoPo

use of io.nuls.account.ledger.storage.po.TransactionInfoPo in project nuls by nuls-io.

the class AccountLedgerServiceImpl method saveUnconfirmedTransaction.

protected Result saveUnconfirmedTransaction(Transaction tx) {
    if (tx == null) {
        return Result.getFailed(KernelErrorCode.NULL_PARAMETER);
    }
    // 查询本地账户地址
    List<byte[]> localAccountList = AccountLegerUtils.getLocalAddresses();
    List<byte[]> addresses = AccountLegerUtils.getRelatedAddresses(tx, localAccountList);
    if (addresses == null || addresses.size() == 0) {
        return Result.getSuccess().setData(0);
    }
    TransactionInfoPo txInfoPo = new TransactionInfoPo(tx);
    txInfoPo.setStatus(TransactionInfo.UNCONFIRMED);
    Result result = transactionInfoService.saveTransactionInfo(txInfoPo, addresses);
    if (result.isFailed()) {
        return result;
    }
    result = unconfirmedTransactionStorageService.saveUnconfirmedTx(tx.getHash(), tx);
    if (result.isFailed()) {
        return result;
    }
    result = localUtxoService.saveUtxoForAccount(tx, addresses);
    if (result.isFailed()) {
        transactionInfoService.deleteTransactionInfo(txInfoPo);
        unconfirmedTransactionStorageService.deleteUnconfirmedTx(tx.getHash());
        return result;
    }
    for (int i = 0; i < addresses.size(); i++) {
        balanceManager.refreshBalance(addresses.get(i));
    }
    return result;
}
Also used : TransactionInfoPo(io.nuls.account.ledger.storage.po.TransactionInfoPo) TransactionDataResult(io.nuls.account.ledger.model.TransactionDataResult) ValidateResult(io.nuls.kernel.validate.ValidateResult) CoinDataResult(io.nuls.account.ledger.model.CoinDataResult)

Example 5 with TransactionInfoPo

use of io.nuls.account.ledger.storage.po.TransactionInfoPo in project nuls by nuls-io.

the class TransactionInfoServiceImpl method getTxInfoList.

@Override
public Result<List<TransactionInfo>> getTxInfoList(byte[] address) {
    try {
        List<TransactionInfoPo> infoPoList = transactionInfoStorageService.getTransactionInfoListByAddress(address);
        List<TransactionInfo> infoList = new ArrayList<>();
        for (TransactionInfoPo po : infoPoList) {
            if (po.getTxType() == ConsensusConstant.TX_TYPE_RED_PUNISH || po.getTxType() == ConsensusConstant.TX_TYPE_YELLOW_PUNISH) {
                continue;
            }
            infoList.add(po.toTransactionInfo());
        }
        Collections.sort(infoList, TxInfoComparator.getInstance());
        return Result.getSuccess().setData(infoList);
    } catch (NulsException e) {
        Log.error(e);
        return Result.getFailed(e.getErrorCode());
    }
}
Also used : NulsException(io.nuls.kernel.exception.NulsException) ArrayList(java.util.ArrayList) TransactionInfo(io.nuls.account.ledger.model.TransactionInfo) TransactionInfoPo(io.nuls.account.ledger.storage.po.TransactionInfoPo)

Aggregations

TransactionInfoPo (io.nuls.account.ledger.storage.po.TransactionInfoPo)10 CoinDataResult (io.nuls.account.ledger.model.CoinDataResult)5 TransactionDataResult (io.nuls.account.ledger.model.TransactionDataResult)5 ValidateResult (io.nuls.kernel.validate.ValidateResult)5 ArrayList (java.util.ArrayList)2 TransactionInfo (io.nuls.account.ledger.model.TransactionInfo)1 NulsException (io.nuls.kernel.exception.NulsException)1 DataTransaction (io.nuls.protocol.model.tx.DataTransaction)1 TransferTransaction (io.nuls.protocol.model.tx.TransferTransaction)1