Search in sources :

Example 6 with CoinData

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

the class TxFeeValidator method validate.

@Override
public ValidateResult validate(Transaction tx) {
    int txType = tx.getType();
    if (tx.isSystemTx()) {
        return ValidateResult.getSuccessResult();
    }
    CoinData coinData = tx.getCoinData();
    if (null == coinData) {
        return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.COINDATA_NOT_FOUND);
    }
    Na realFee = tx.getFee();
    Na fee = null;
    if (txType == ProtocolConstant.TX_TYPE_TRANSFER || txType == ProtocolConstant.TX_TYPE_DATA || txType == ContractConstant.TX_TYPE_CREATE_CONTRACT || txType == ContractConstant.TX_TYPE_CALL_CONTRACT || txType == ContractConstant.TX_TYPE_DELETE_CONTRACT) {
        fee = TransactionFeeCalculator.getTransferFee(tx.size());
    } else {
        fee = TransactionFeeCalculator.getMaxFee(tx.size());
    }
    if (realFee.isGreaterOrEquals(fee)) {
        return ValidateResult.getSuccessResult();
    }
    return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.FEE_NOT_RIGHT);
}
Also used : Na(io.nuls.kernel.model.Na) CoinData(io.nuls.kernel.model.CoinData)

Example 7 with CoinData

use of io.nuls.kernel.model.CoinData 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 8 with CoinData

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

the class LedgerRpcUtil method makeReturnInfo.

public static TransactionCreatedReturnInfo makeReturnInfo(Transaction tx) throws IOException {
    String hash = NulsDigestData.calcDigestData(tx.serializeForHash()).getDigestHex();
    String txHex = Hex.encode(tx.serialize());
    CoinData coinData = tx.getCoinData();
    List<InputDto> inputs = ConvertCoinTool.convertInputList(coinData.getFrom());
    List<OutputDto> outputs = ConvertCoinTool.convertOutputList(coinData.getTo(), hash);
    TransactionCreatedReturnInfo returnInfo = new TransactionCreatedReturnInfo(hash, txHex, inputs, outputs);
    return returnInfo;
}
Also used : OutputDto(io.nuls.accout.ledger.rpc.dto.OutputDto) CoinData(io.nuls.kernel.model.CoinData) TransactionCreatedReturnInfo(io.nuls.accout.ledger.rpc.dto.TransactionCreatedReturnInfo) InputDto(io.nuls.accout.ledger.rpc.dto.InputDto)

Aggregations

CoinData (io.nuls.kernel.model.CoinData)8 Coin (io.nuls.kernel.model.Coin)5 ValidateResult (io.nuls.kernel.validate.ValidateResult)4 NulsException (io.nuls.kernel.exception.NulsException)3 TransactionSignature (io.nuls.kernel.script.TransactionSignature)3 Agent (io.nuls.consensus.poc.protocol.entity.Agent)2 ECKey (io.nuls.core.tools.crypto.ECKey)2 Na (io.nuls.kernel.model.Na)2 Script (io.nuls.kernel.script.Script)2 TransferTransaction (io.nuls.protocol.model.tx.TransferTransaction)2 BigInteger (java.math.BigInteger)2 ArrayList (java.util.ArrayList)2 Alias (io.nuls.account.model.Alias)1 AliasPo (io.nuls.account.storage.po.AliasPo)1 InputDto (io.nuls.accout.ledger.rpc.dto.InputDto)1 OutputDto (io.nuls.accout.ledger.rpc.dto.OutputDto)1 TransactionCreatedReturnInfo (io.nuls.accout.ledger.rpc.dto.TransactionCreatedReturnInfo)1 Evidence (io.nuls.consensus.poc.model.Evidence)1 Deposit (io.nuls.consensus.poc.protocol.entity.Deposit)1 RedPunishData (io.nuls.consensus.poc.protocol.entity.RedPunishData)1