Search in sources :

Example 26 with Coin

use of io.nuls.kernel.model.Coin in project nuls by nuls-io.

the class TxProcessTask method processTx.

private boolean processTx(Transaction tx, boolean isOrphanTx) {
    try {
        Result result = tx.verify();
        if (result.isFailed()) {
            return false;
        }
        Transaction tempTx = ledgerService.getTx(tx.getHash());
        if (tempTx != null) {
            return isOrphanTx;
        }
        ValidateResult validateResult = ledgerService.verifyCoinData(tx, temporaryToMap, temporaryFromSet);
        if (validateResult.isSuccess()) {
            pool.add(tx, false);
            List<Coin> fromCoins = tx.getCoinData().getFrom();
            for (Coin coin : fromCoins) {
                String key = LedgerUtil.asString(coin.getOwner());
                temporaryFromSet.remove(key);
                temporaryToMap.remove(key);
            }
            // count++;
            transactionCacheStorageService.putTx(tx);
            transactionService.forwardTx(tx, null);
            return true;
        } else if (validateResult.getErrorCode().equals(TransactionErrorCode.ORPHAN_TX) && !isOrphanTx) {
            processOrphanTx(tx);
        } else if (isOrphanTx) {
            return tx.getTime() < (TimeService.currentTimeMillis() - 3600000L);
        }
    } catch (Exception e) {
        Log.error(e);
    }
    return false;
}
Also used : Coin(io.nuls.kernel.model.Coin) Transaction(io.nuls.kernel.model.Transaction) ValidateResult(io.nuls.kernel.validate.ValidateResult) NulsException(io.nuls.kernel.exception.NulsException) ValidateResult(io.nuls.kernel.validate.ValidateResult) Result(io.nuls.kernel.model.Result)

Example 27 with Coin

use of io.nuls.kernel.model.Coin in project nuls by nuls-io.

the class PocRewardCacheService method calcRewardHistory.

private void calcRewardHistory(String address, List<TransactionInfo> list, long startHeight) {
    byte[] addressByte = AddressTool.getAddress(address);
    for (TransactionInfo info : list) {
        if (info.getTxType() != ProtocolConstant.TX_TYPE_COINBASE) {
            continue;
        }
        CoinBaseTransaction tx = (CoinBaseTransaction) ledgerService.getTx(info.getTxHash());
        if (null == tx) {
            continue;
        }
        if (info.getBlockHeight() >= startHeight) {
            continue;
        }
        if (null == tx.getCoinData().getTo() || tx.getCoinData().getTo().isEmpty()) {
            continue;
        }
        for (Coin coin : tx.getCoinData().getTo()) {
            // if (!Arrays.equals(addressByte, coin.()))
            if (!Arrays.equals(addressByte, coin.getAddress())) {
                continue;
            }
            Na na = totalMap.get(address);
            if (na == null) {
                na = Na.ZERO;
            }
            na = na.add(coin.getNa());
            totalMap.put(address, na);
        }
    }
}
Also used : Coin(io.nuls.kernel.model.Coin) Na(io.nuls.kernel.model.Na) CoinBaseTransaction(io.nuls.protocol.model.tx.CoinBaseTransaction) TransactionInfo(io.nuls.account.ledger.model.TransactionInfo)

Example 28 with Coin

use of io.nuls.kernel.model.Coin in project nuls by nuls-io.

the class AliasTransactionValidator method validate.

@Override
public ValidateResult validate(AliasTransaction tx) {
    Alias alias = tx.getTxData();
    if (tx.isSystemTx()) {
        return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.TX_TYPE_ERROR);
    }
    if (NulsContext.CONTRACT_ADDRESS_TYPE == alias.getAddress()[2]) {
        return ValidateResult.getFailedResult(this.getClass().getName(), AccountErrorCode.ADDRESS_ERROR);
    }
    if (!StringUtils.validAlias(alias.getAlias())) {
        return ValidateResult.getFailedResult(this.getClass().getName(), AccountErrorCode.ALIAS_FORMAT_WRONG);
    }
    if (!aliasService.isAliasUsable(alias.getAlias())) {
        return ValidateResult.getFailedResult(this.getClass().getName(), AccountErrorCode.ALIAS_EXIST);
    }
    List<AliasPo> list = aliasStorageService.getAliasList().getData();
    for (AliasPo aliasPo : list) {
        if (Arrays.equals(aliasPo.getAddress(), alias.getAddress())) {
            return ValidateResult.getFailedResult(this.getClass().getName(), AccountErrorCode.ACCOUNT_ALREADY_SET_ALIAS);
        }
    }
    CoinData coinData = tx.getCoinData();
    if (null == coinData || null == coinData.getTo() || coinData.getTo().isEmpty()) {
        return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.COINDATA_NOT_FOUND);
    }
    boolean burned = false;
    for (Coin coin : coinData.getTo()) {
        if (ArraysTool.arrayEquals(coin.getOwner(), NulsConstant.BLACK_HOLE_ADDRESS) && coin.getNa().equals(Na.NA)) {
            burned = true;
            break;
        }
        if (!burned && !ArraysTool.arrayEquals(coin.getOwner(), NulsConstant.BLACK_HOLE_ADDRESS_TEST_NET) && coin.getNa().equals(Na.NA)) {
            burned = true;
            break;
        }
    }
    if (!burned) {
        return ValidateResult.getFailedResult(this.getClass().getName(), AccountErrorCode.MUST_BURN_A_NULS);
    }
    TransactionSignature sig = new TransactionSignature();
    try {
        sig.parse(tx.getTransactionSignature(), 0);
    } catch (NulsException e) {
        Log.error(e);
        return ValidateResult.getFailedResult(this.getClass().getName(), e.getErrorCode());
    }
    boolean sign;
    try {
        sign = SignatureUtil.containsAddress(tx, tx.getTxData().getAddress());
    } catch (NulsException e) {
        sign = false;
    }
    if (!sign) {
        ValidateResult result = ValidateResult.getFailedResult(this.getClass().getName(), AccountErrorCode.ADDRESS_ERROR);
        result.setLevel(SeverityLevelEnum.FLAGRANT_FOUL);
        return result;
    }
    return ValidateResult.getSuccessResult();
}
Also used : Coin(io.nuls.kernel.model.Coin) Alias(io.nuls.account.model.Alias) CoinData(io.nuls.kernel.model.CoinData) NulsException(io.nuls.kernel.exception.NulsException) ValidateResult(io.nuls.kernel.validate.ValidateResult) AliasPo(io.nuls.account.storage.po.AliasPo) TransactionSignature(io.nuls.kernel.script.TransactionSignature)

Example 29 with Coin

use of io.nuls.kernel.model.Coin in project nuls by nuls-io.

the class ContractBalanceManager method refreshBalance.

/**
 * 刷新余额
 */
public void refreshBalance(List<Coin> addUtxoList, List<Coin> deleteUtxoList) {
    lock.lock();
    try {
        ContractBalance balance;
        String strAddress;
        if (addUtxoList != null) {
            for (Coin coin : addUtxoList) {
                strAddress = asString(coin.getTempOwner());
                balance = balanceMap.get(strAddress);
                if (balance == null) {
                    balance = new ContractBalance();
                    balanceMap.put(strAddress, balance);
                }
                // 共识奖励的utxo
                if (coin.getLockTime() != 0) {
                    balance.getConsensusRewardCoins().put(coin.getKey(), coin);
                } else {
                    balance.addUsable(coin.getNa());
                }
            }
        }
        if (deleteUtxoList != null) {
            for (Coin coin : deleteUtxoList) {
                strAddress = asString(coin.getTempOwner());
                balance = balanceMap.get(strAddress);
                if (balance == null) {
                    balance = new ContractBalance();
                    balanceMap.put(strAddress, balance);
                }
                // 共识奖励的utxo
                if (coin.getLockTime() != 0) {
                    balance.getConsensusRewardCoins().remove(coin.getKey());
                } else {
                    balance.minusUsable(coin.getNa());
                }
            }
        }
    } finally {
        lock.unlock();
    }
}
Also used : Coin(io.nuls.kernel.model.Coin) ContractBalance(io.nuls.contract.ledger.module.ContractBalance) LedgerUtil.asString(io.nuls.ledger.util.LedgerUtil.asString)

Example 30 with Coin

use of io.nuls.kernel.model.Coin in project nuls by nuls-io.

the class ContractBalanceManager method depthClone.

private ContractBalance depthClone(ContractBalance contractBalance) {
    if (contractBalance == null) {
        return null;
    }
    LinkedHashMap<String, Coin> lockedCoins = contractBalance.getConsensusRewardCoins();
    LinkedHashMap<String, Coin> lockedCoinsClone = MapUtil.createLinkedHashMap(lockedCoins.size());
    Collection<Coin> values = lockedCoins.values();
    for (Coin coin : values) {
        lockedCoinsClone.put(coin.getKey(), coin);
    }
    ContractBalance result = new ContractBalance(Na.valueOf(contractBalance.getUsable().getValue()), Na.valueOf(contractBalance.getLocked().getValue()), Na.valueOf(contractBalance.getUsableConsensusReward().getValue()), lockedCoinsClone);
    return result;
}
Also used : Coin(io.nuls.kernel.model.Coin) ContractBalance(io.nuls.contract.ledger.module.ContractBalance) LedgerUtil.asString(io.nuls.ledger.util.LedgerUtil.asString)

Aggregations

Coin (io.nuls.kernel.model.Coin)31 NulsException (io.nuls.kernel.exception.NulsException)16 Na (io.nuls.kernel.model.Na)8 Entry (io.nuls.db.model.Entry)6 ValidateResult (io.nuls.kernel.validate.ValidateResult)6 CoinData (io.nuls.kernel.model.CoinData)5 TransactionSignature (io.nuls.kernel.script.TransactionSignature)4 ContractBalance (io.nuls.contract.ledger.module.ContractBalance)3 Result (io.nuls.kernel.model.Result)3 LedgerUtil.asString (io.nuls.ledger.util.LedgerUtil.asString)3 ArrayList (java.util.ArrayList)3 GET (javax.ws.rs.GET)3 Path (javax.ws.rs.Path)3 Produces (javax.ws.rs.Produces)3 AgentPo (io.nuls.consensus.poc.storage.po.AgentPo)2 DepositPo (io.nuls.consensus.poc.storage.po.DepositPo)2 ECKey (io.nuls.core.tools.crypto.ECKey)2 RpcClientResult (io.nuls.kernel.model.RpcClientResult)2 Transaction (io.nuls.kernel.model.Transaction)2 Script (io.nuls.kernel.script.Script)2