use of io.nuls.kernel.validate.ValidateResult in project nuls by nuls-io.
the class AgentCountValidator method validate.
@Override
public ValidateResult validate(CreateAgentTransaction tx) {
ValidateResult result = ValidateResult.getSuccessResult();
Agent agent = tx.getTxData();
List<AgentPo> caList = agentStorageService.getList();
if (caList != null) {
Set<String> set = new HashSet<>();
for (AgentPo ca : caList) {
if (ca.getHash().equals(tx.getHash())) {
return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.TRANSACTION_REPEATED);
}
if (ca.getDelHeight() > 0L) {
continue;
}
set.add(Hex.encode(ca.getAgentAddress()));
set.add(Hex.encode(ca.getPackingAddress()));
}
boolean b = set.add(Hex.encode(agent.getAgentAddress()));
if (!b) {
return ValidateResult.getFailedResult(this.getClass().getName(), PocConsensusErrorCode.AGENT_EXIST);
}
b = set.add(Hex.encode(agent.getPackingAddress()));
if (!b) {
return ValidateResult.getFailedResult(this.getClass().getName(), PocConsensusErrorCode.AGENT_PACKING_EXIST);
}
}
return result;
}
use of io.nuls.kernel.validate.ValidateResult in project nuls by nuls-io.
the class CancelDepositTxValidator method validate.
@Override
public ValidateResult validate(CancelDepositTransaction data) throws NulsException {
DepositPo depositPo = depositStorageService.get(data.getTxData().getJoinTxHash());
if (null == depositPo || depositPo.getDelHeight() > 0) {
return ValidateResult.getFailedResult(this.getClass().getName(), KernelErrorCode.DATA_NOT_FOUND);
}
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, depositPo.getAddress())) {
ValidateResult result = ValidateResult.getFailedResult(this.getClass().getName(), KernelErrorCode.SIGNATURE_ERROR);
result.setLevel(SeverityLevelEnum.FLAGRANT_FOUL);
return result;
}
return ValidateResult.getSuccessResult();
}
use of io.nuls.kernel.validate.ValidateResult in project nuls by nuls-io.
the class DepositTxValidator method validate.
@Override
public ValidateResult validate(DepositTransaction tx) throws NulsException {
if (null == tx || null == tx.getTxData() || null == tx.getTxData().getAgentHash() || null == tx.getTxData().getDeposit() || null == tx.getTxData().getAddress()) {
return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.TX_DATA_VALIDATION_ERROR);
}
Deposit deposit = tx.getTxData();
AgentPo agentPo = agentStorageService.get(deposit.getAgentHash());
if (null == agentPo || agentPo.getDelHeight() > 0) {
return ValidateResult.getFailedResult(this.getClass().getName(), PocConsensusErrorCode.AGENT_NOT_EXIST);
}
List<DepositPo> poList = this.getDepositListByAgent(deposit.getAgentHash());
if (null != poList && poList.size() >= PocConsensusProtocolConstant.MAX_ACCEPT_NUM_OF_DEPOSIT) {
return ValidateResult.getFailedResult(this.getClass().getName(), PocConsensusErrorCode.DEPOSIT_OVER_COUNT);
}
Na limit = PocConsensusProtocolConstant.ENTRUSTER_DEPOSIT_LOWER_LIMIT;
Na max = PocConsensusProtocolConstant.SUM_OF_DEPOSIT_OF_AGENT_UPPER_LIMIT;
Na total = Na.ZERO;
for (DepositPo cd : poList) {
total = total.add(cd.getDeposit());
}
if (limit.isGreaterThan(deposit.getDeposit())) {
return ValidateResult.getFailedResult(this.getClass().getName(), PocConsensusErrorCode.DEPOSIT_NOT_ENOUGH);
}
if (max.isLessThan(total.add(deposit.getDeposit()))) {
return ValidateResult.getFailedResult(this.getClass().getName(), PocConsensusErrorCode.DEPOSIT_TOO_MUCH);
}
if (!isDepositOk(deposit.getDeposit(), tx.getCoinData())) {
return ValidateResult.getFailedResult(this.getClass().getName(), SeverityLevelEnum.FLAGRANT_FOUL, PocConsensusErrorCode.DEPOSIT_ERROR);
}
TransactionSignature sig = new TransactionSignature();
try {
sig.parse(tx.getTransactionSignature(), 0);
} catch (NulsException e) {
Log.error(e);
return ValidateResult.getFailedResult(this.getClass().getName(), e.getErrorCode());
}
if (!SignatureUtil.containsAddress(tx, deposit.getAddress())) {
ValidateResult result = ValidateResult.getFailedResult(this.getClass().getName(), KernelErrorCode.SIGNATURE_ERROR);
result.setLevel(SeverityLevelEnum.FLAGRANT_FOUL);
return result;
}
CoinData coinData = tx.getCoinData();
Set<String> addressSet = new HashSet<>();
int lockCount = 0;
for (Coin coin : coinData.getTo()) {
if (coin.getLockTime() == PocConsensusConstant.CONSENSUS_LOCK_TIME) {
lockCount++;
}
// addressSet.add(AddressTool.getStringAddressByBytes(coin.()));
addressSet.add(AddressTool.getStringAddressByBytes(coin.getAddress()));
}
if (lockCount > 1) {
return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.TX_DATA_VALIDATION_ERROR);
}
if (addressSet.size() > 1) {
return ValidateResult.getFailedResult(this.getClass().getName(), TransactionErrorCode.TX_DATA_VALIDATION_ERROR);
}
return ValidateResult.getSuccessResult();
}
use of io.nuls.kernel.validate.ValidateResult in project nuls by nuls-io.
the class CreateAgentTxValidatorTest method test.
@Test
public void test() {
CreateAgentTransaction tx = new CreateAgentTransaction();
CreateAgentTxValidator validator = new CreateAgentTxValidator();
ValidateResult result = validator.validate(tx);
assertFalse(result.isSuccess());
Agent agent = new Agent();
tx.setTxData(agent);
result = validator.validate(tx);
assertFalse(result.isSuccess());
byte[] address = AddressTool.getAddress(ecKey.getPubKey());
byte[] address1 = AddressTool.getAddress(new ECKey().getPubKey());
byte[] address2 = AddressTool.getAddress(new ECKey().getPubKey());
agent.setRewardAddress(address);
agent.setPackingAddress(address1);
agent.setAgentAddress(address2);
result = validator.validate(tx);
assertFalse(result.isSuccess());
agent.setDeposit(PocConsensusProtocolConstant.AGENT_DEPOSIT_LOWER_LIMIT);
tx.setTime(System.currentTimeMillis());
result = validator.validate(tx);
assertTrue(result.isSuccess());
}
use of io.nuls.kernel.validate.ValidateResult in project nuls by nuls-io.
the class HeaderFieldValidator method validate.
@Override
public ValidateResult validate(BlockHeader data) {
ValidateResult result = ValidateResult.getSuccessResult();
boolean failed = false;
do {
if (data.getHash() == null) {
failed = true;
break;
}
if (data.getHeight() < 0) {
failed = true;
break;
}
if (data.getMerkleHash() == null) {
failed = true;
break;
}
if (null == data.getPackingAddress()) {
failed = true;
break;
}
if (null != data.getExtend()) {
if (data.getExtend().length > HEADER_EXTENDS_MAS_SIZE) {
failed = true;
break;
}
}
} while (false);
if (failed) {
result = ValidateResult.getFailedResult(this.getClass().getName(), ProtocolErroeCode.BLOCK_HEADER_FIELD_CHECK_FAILED);
}
return result;
}
Aggregations