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);
}
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();
}
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;
}
Aggregations