Skip to content

Commit

Permalink
feat: handle UnknownOutputReferences ogmios tx submit error
Browse files Browse the repository at this point in the history
  • Loading branch information
mirceahasegan committed May 9, 2024
1 parent a884603 commit fa86c4a
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 2 deletions.
4 changes: 4 additions & 0 deletions packages/core/src/CardanoNode/util/cardanoNodeErrors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
StateQueryErrorCode,
TxSubmissionError,
TxSubmissionErrorCode,
UnknownOutputReferencesData,
ValueNotConservedData
} from '../types';
import { isProductionEnvironment, stripStackTrace } from '@cardano-sdk/util';
Expand Down Expand Up @@ -113,3 +114,6 @@ export const isValueNotConservedError = (error: unknown): error is TxSubmissionE

export const isIncompleteWithdrawalsError = (error: unknown): error is TxSubmissionError<IncompleteWithdrawalsData> =>
error instanceof TxSubmissionError && error.code === TxSubmissionErrorCode.IncompleteWithdrawals;

export const isUnknownOutputReferences = (error: unknown): error is TxSubmissionError<UnknownOutputReferencesData> =>
error instanceof TxSubmissionError && error.code === TxSubmissionErrorCode.UnknownOutputReferences;
9 changes: 8 additions & 1 deletion packages/ogmios/src/CardanoNode/queries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,12 @@ import { Logger } from 'ts-log';
import {
SubmitTransactionFailureIncompleteWithdrawals,
SubmitTransactionFailureOutsideOfValidityInterval,
SubmitTransactionFailureUnknownOutputReferences,
SubmitTransactionFailureValueNotConserved
} from '@cardano-ogmios/schema';
import { eraSummary, genesis } from '../ogmiosToCore';
import { isConnectionError } from '@cardano-sdk/util';
import { mapValue, mapWithdrawals } from '../ogmiosToCore/tx';
import { mapTxIn, mapValue, mapWithdrawals } from '../ogmiosToCore/tx';

const errorDataToCore = (data: unknown, code: number) => {
switch (code) {
Expand All @@ -47,6 +48,12 @@ const errorDataToCore = (data: unknown, code: number) => {
}
} as OutsideOfValidityIntervalData;
}
case TxSubmissionErrorCode.UnknownOutputReferences: {
const typedData = data as SubmitTransactionFailureUnknownOutputReferences['data'];
return {
unknownOutputReferences: typedData.unknownOutputReferences.map(mapTxIn)
};
}
default:
// Mapper not implemented
return data;
Expand Down
3 changes: 2 additions & 1 deletion packages/wallet/src/Wallets/BaseWallet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -656,7 +656,8 @@ export class BaseWallet implements ObservableWallet {
((CardanoNodeUtil.isValueNotConservedError(error.innerError) && error.innerError.data.produced.coins === 0n) ||
// TODO: check if IncompleteWithdrawals available withdrawal amount === wallet's reward acc balance?
// Not sure what the 'Withdrawals' in error data is exactly: value being withdrawed, or reward acc balance
CardanoNodeUtil.isIncompleteWithdrawalsError(error.innerError))
CardanoNodeUtil.isIncompleteWithdrawalsError(error.innerError) ||
CardanoNodeUtil.isUnknownOutputReferences(error.innerError))
) {
this.#logger.debug(
`Transaction ${outgoingTx.id} failed with ${error.innerError}, but it appears to be already submitted...`
Expand Down

0 comments on commit fa86c4a

Please sign in to comment.