Skip to content

Commit

Permalink
feat: Added failed transactions model
Browse files Browse the repository at this point in the history
  • Loading branch information
gsoares85 committed Jan 17, 2024
1 parent da51917 commit 11227b3
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 29 deletions.
54 changes: 25 additions & 29 deletions src/lib/FederatorERC.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ import {
import {AppDataSource} from "../services/AppDataSource";
import {FailedTransactions} from "../entities/FailedTransactions";
import {Votes} from "../entities/Votes";
import {
deleteFailedTransaction,
findFailedTransaction,
insertFailedTransaction, updateFailedTransaction
} from "../models/failedTransactions.model";


type ValidateAndVoteReturn = {
Expand Down Expand Up @@ -407,22 +412,19 @@ export default class FederatorERC extends Federator {
}

async verifyIfwasRevertedAndRetry(params, txAbi) {
const revertedTx = await AppDataSource.getRepository(FailedTransactions)
.findOne({
where: {
mainChain: params.mainChainId,
sideChain: params.sideChainId,
transactionId: params.transactionId
}
});
const revertedTx = await findFailedTransaction({
mainChain: params.mainChainId,
sideChain: params.sideChainId,
transactionId: params.transactionId
});

const result = await this.validateAndVote(params, txAbi);

if (revertedTx && (result.voteSuccess || result.wasVotedBefore || result.wasProcessed)) {
await AppDataSource.getRepository(FailedTransactions).delete({
mainChain: params.mainChainId,
sideChain: params.sideChainId,
transactionId: params.transactionId
await deleteFailedTransaction({
mainChain: params.mainChainId,
sideChain: params.sideChainId,
transactionId: params.transactionId
});
}
}
Expand All @@ -443,14 +445,10 @@ export default class FederatorERC extends Federator {
const hasVotedDb = await AppDataSource.getRepository(Votes).findOne({
where: {transactionId: params.transactionId}});

const failedRetry = await AppDataSource.getRepository(FailedTransactions).findOne(
{
where: {
transactionId: params.transactionId,
timesRetried: this.config.maxFailedTxRetry
}
}
);
const failedRetry = await findFailedTransaction({
transactionId: params.transactionId,
timesRetried: this.config.maxFailedTxRetry
});

const wasProcessed = await params.sideFedContract
.transactionWasProcessed(params.transactionId);
Expand Down Expand Up @@ -505,15 +503,12 @@ export default class FederatorERC extends Federator {
receipt,
);

const hasFailedBefore = await AppDataSource.getRepository(FailedTransactions)
.findOne({
where: {
transactionId: params.transactionId
}
});
const hasFailedBefore = await findFailedTransaction({
transactionId: params.transactionId
});

if(!hasFailedBefore) {
await AppDataSource.getRepository(FailedTransactions).insert({
const dataToInsert: Partial<FailedTransactions> = {
mainChain: params.mainChainId,
sideChain: params.sideChainId,
transactionId: params.transactionId,
Expand All @@ -530,9 +525,10 @@ export default class FederatorERC extends Federator {
status: receipt.status,
receipt: {...receipt},
})
});
};
await insertFailedTransaction(dataToInsert);
} else {
await AppDataSource.getRepository(FailedTransactions).update(hasFailedBefore.id, {
await updateFailedTransaction(hasFailedBefore.id, {
timesRetried: hasFailedBefore.timesRetried + 1 > this.config.maxFailedTxRetry ?
this.config.maxFailedTxRetry : hasFailedBefore.timesRetried + 1
});
Expand Down
23 changes: 23 additions & 0 deletions src/models/failedTransactions.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import {FailedTransactions} from "../entities/FailedTransactions";
import {AppDataSource} from "../services/AppDataSource";

const findFailedTransaction = async (data: Partial<FailedTransactions>) => {
return await AppDataSource.getRepository(FailedTransactions)
.findOne({
where: { ...data }
});
}

const deleteFailedTransaction = async (criteria: Partial<FailedTransactions>) => {
await AppDataSource.getRepository(FailedTransactions).delete({ ...criteria });
}

const insertFailedTransaction = async (data: Partial<FailedTransactions>) => {
await AppDataSource.getRepository(FailedTransactions).insert({...data});
}

const updateFailedTransaction = async (id: number, data: Partial<FailedTransactions>) => {
await AppDataSource.getRepository(FailedTransactions).update({ id }, { ...data });
}

export { findFailedTransaction, deleteFailedTransaction, insertFailedTransaction, updateFailedTransaction };

0 comments on commit 11227b3

Please sign in to comment.