use of io.nuls.kernel.processor.TransactionProcessor in project nuls by nuls-io.
the class TransactionServiceImpl method rollbackCommit.
@Override
public Result rollbackCommit(Transaction tx, Object secondaryData) {
if (null == tx) {
return Result.getSuccess();
}
List<TransactionProcessor> processorList = TransactionManager.getProcessorList(tx.getClass());
List<TransactionProcessor> rollbackedList = new ArrayList<>();
for (TransactionProcessor processor : processorList) {
Result result = processor.onRollback(tx, secondaryData);
if (result.isSuccess()) {
rollbackedList.add(processor);
} else {
for (int i = rollbackedList.size() - 1; i >= 0; i--) {
TransactionProcessor processor1 = rollbackedList.get(i);
processor1.onCommit(tx, secondaryData);
}
return result;
}
}
return Result.getSuccess();
}
use of io.nuls.kernel.processor.TransactionProcessor in project nuls by nuls-io.
the class TransactionManager method getProcessorList.
public static List<TransactionProcessor> getProcessorList(Class<? extends Transaction> txClass) {
List<TransactionProcessor> list = new ArrayList<>();
Class clazz = txClass;
while (!clazz.equals(Transaction.class)) {
TransactionProcessor txService = TransactionManager.getProcessor(clazz);
if (null != txService) {
list.add(0, txService);
}
clazz = clazz.getSuperclass();
}
return list;
}
use of io.nuls.kernel.processor.TransactionProcessor in project nuls by nuls-io.
the class TransactionServiceImpl method commitTx.
/**
* 确认交易时调用的方法,对交易相关的业务进行提交操作
* Identify the method that is invoked during the transaction and submit the transaction related business.
*
* @param tx 操作的交易/The transaction of the operation
* @param secondaryData 辅助数据(可以为空)/Secondary data (available for null)
* @return 操作结果/operating results
*/
@Override
public Result commitTx(Transaction tx, Object secondaryData) {
List<TransactionProcessor> processorList = TransactionManager.getProcessorList(tx.getClass());
List<TransactionProcessor> commitedProcessorList = new ArrayList<>();
for (TransactionProcessor processor : processorList) {
Result result = processor.onCommit(tx, secondaryData);
if (result.isSuccess()) {
commitedProcessorList.add(processor);
} else {
for (int i = commitedProcessorList.size() - 1; i >= 0; i--) {
TransactionProcessor processor1 = commitedProcessorList.get(i);
processor1.onRollback(tx, secondaryData);
}
return result;
}
}
return Result.getSuccess();
}
use of io.nuls.kernel.processor.TransactionProcessor in project nuls by nuls-io.
the class TransactionServiceImpl method rollbackTx.
/**
* 回滚交易时调用的方法,对交易相关的业务进行回退操作
* The method invoked when the transaction is rolled back and the transaction related business is returned.
*
* @param tx 操作的交易/The transaction of the operation
* @param secondaryData 辅助数据(可以为空)/Secondary data (available for null)
* @return 操作结果/operating results
*/
@Override
public Result rollbackTx(Transaction tx, Object secondaryData) {
if (null == tx) {
return Result.getSuccess();
}
List<TransactionProcessor> processorList = TransactionManager.getProcessorList(tx.getClass());
List<TransactionProcessor> rollbackedList = new ArrayList<>();
for (TransactionProcessor processor : processorList) {
Result result = processor.onRollback(tx, secondaryData);
if (result.isSuccess()) {
rollbackedList.add(processor);
} else {
for (int i = rollbackedList.size() - 1; i >= 0; i--) {
TransactionProcessor processor1 = rollbackedList.get(i);
processor1.onCommit(tx, secondaryData);
}
return result;
}
}
try {
ledgerService.rollbackTx(tx);
} catch (NulsException e) {
Log.error(e);
return Result.getFailed(e.getErrorCode());
}
return Result.getSuccess();
}
use of io.nuls.kernel.processor.TransactionProcessor in project nuls by nuls-io.
the class TransactionServiceImpl method conflictDetect.
/**
* 冲突检测,检测如果传入的交易列表中有相冲突的交易,则返回失败,写明失败原因及所有的应该舍弃的交易列表
* <p>
* Conflict detection, which detects conflicting transactions in the incoming transaction list, returns failure,
* indicating the cause of failure and all the list of trades that should be discarded.
*
* @param txList 需要检查的交易列表/A list of transactions to be checked.
* @return 操作结果:成功则返回successResult,失败时,data中返回丢弃列表,msg中返回冲突原因
* Operation result: success returns successResult. When failure, data returns the discard list, and MSG returns the cause of conflict.
*/
@Override
public ValidateResult conflictDetect(List<Transaction> txList) {
if (null == txList || txList.isEmpty()) {
return ValidateResult.getSuccessResult();
}
// ValidateResult result = ledgerService.verifyDoubleSpend(txList);
// if (result.isFailed()) {
// return result;
// }
List<Transaction> newTxList = new ArrayList<>();
for (Transaction tx : txList) {
if (tx.getType() == ProtocolConstant.TX_TYPE_COINBASE || tx.getType() == ProtocolConstant.TX_TYPE_TRANSFER) {
continue;
}
newTxList.add(tx);
}
List<TransactionProcessor> processorList = TransactionManager.getAllProcessorList();
ValidateResult result = ValidateResult.getSuccessResult();
for (TransactionProcessor processor : processorList) {
result = processor.conflictDetect(newTxList);
if (result.isFailed()) {
break;
}
}
return result;
}
Aggregations