Skip to content
This repository has been archived by the owner on Mar 12, 2024. It is now read-only.

Commit

Permalink
Improve voucher execution error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
miltonjonat committed Oct 30, 2023
1 parent 65079ad commit eab32fd
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 5 deletions.
31 changes: 30 additions & 1 deletion frontend-console/src/commands/voucher_commands/execute.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ import {
Args as RollupsArgs,
builder as rollupsBuilder,
} from "../../rollups";
import {
LibOutputValidation__factory,
History__factory,
} from "@cartesi/rollups";

interface Args extends ConnectArgs, RollupsArgs {
url: string;
Expand Down Expand Up @@ -107,6 +111,31 @@ export const handler = async (args: Args) => {
console.log(`resulting events: ${JSON.stringify(receipt.events)}`);
}
} catch (e) {
console.log(`COULD NOT EXECUTE VOUCHER: ${JSON.stringify(e)}`);
let error: any = e;
// if error is a custom revert object, we need to parse it given its "data" field
// note: custom revert error declaration may be in one of several contracts
const errorData = error?.error?.error?.error?.data;
try {
error = outputContract.interface.parseError(errorData).name;
} catch (e) {
try {
const libOutputValidation =
LibOutputValidation__factory.connect(
outputContract.address,
outputContract.signer
);
error =
libOutputValidation.interface.parseError(errorData).name;
} catch (e) {
try {
const history = History__factory.connect(
outputContract.address,
outputContract.signer
);
error = history.interface.parseError(errorData).name;
} catch (e) {}
}
}
console.log(`COULD NOT EXECUTE VOUCHER: ${JSON.stringify(error)}`);
}
};
8 changes: 4 additions & 4 deletions frontend-console/src/rollups.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import { Signer } from "ethers";
import {
IInputBox,
IInputBox__factory,
ICartesiDApp,
ICartesiDApp__factory,
CartesiDApp,
CartesiDApp__factory,
IERC20Portal,
IERC20Portal__factory,
IERC721Portal,
Expand All @@ -40,7 +40,7 @@ export interface Args {
interface Contracts {
dapp: string;
inputContract: IInputBox;
outputContract: ICartesiDApp;
outputContract: CartesiDApp;
erc20Portal: IERC20Portal;
erc721Portal: IERC721Portal;
deployment: Deployment
Expand Down Expand Up @@ -155,7 +155,7 @@ export const rollups = async (
InputBox.address,
provider
);
const outputContract = ICartesiDApp__factory.connect(address, provider);
const outputContract = CartesiDApp__factory.connect(address, provider);
const erc20Portal = IERC20Portal__factory.connect(
ERC20Portal.address,
provider
Expand Down

0 comments on commit eab32fd

Please sign in to comment.