Skip to content

Commit

Permalink
feat: panic receipts have doc links
Browse files Browse the repository at this point in the history
  • Loading branch information
QuinnLee committed Aug 15, 2022
1 parent d710e52 commit 8d1349a
Show file tree
Hide file tree
Showing 3 changed files with 247 additions and 1 deletion.
219 changes: 219 additions & 0 deletions packages/script/src/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
// From https://github.com/FuelLabs/fuel-asm/blob/eb78378c3b7c22a53b834381c387d89b3c0ef122/src/panic_reason.rs#L13
export const PANIC_REASONS = [
'Success',
'Revert',
'OutOfGas',
'TransactionValidity',
'MemoryOverflow',
'ArithmeticOverflow',
'ContractNotFound',
'MemoryOwnership',
'NotEnoughBalance',
'ExpectedInternalContext',
'AssetIdNotFound',
'InputNotFound',
'OutputNotFound',
'WitnessNotFound',
'TransactionMaturity',
'InvalidMetadataIdentifier',
'MalformedCallStructure',
'ReservedRegisterNotWritable',
'ErrorFlag',
'InvalidImmediateValue',
'ExpectedCoinInput',
'MaxMemoryAccess',
'MemoryWriteOverlap',
'ContractNotInInputs',
'InternalBalanceOverflow',
'ContractMaxSize',
'ExpectedUnallocatedStack',
'MaxStaticContractsReached',
'TransferAmountCannotBeZero',
'ExpectedOutputVariable',
'ExpectedParentInternalContext',
'IllegalJump',
'NonZeroMessageOutputRecipient',
'ZeroedMessageOutputRecipient',
'RESERV22',
'RESERV23',
'RESERV24',
'RESERV25',
'RESERV26',
'RESERV27',
'RESERV28',
'RESERV29',
'RESERV2A',
'RESERV2B',
'RESERV2C',
'RESERV2D',
'RESERV2E',
'RESERV2F',
'RESERV30',
'RESERV31',
'RESERV32',
'RESERV33',
'RESERV34',
'RESERV35',
'RESERV36',
'RESERV37',
'RESERV38',
'RESERV39',
'RESERV3A',
'RESERV3B',
'RESERV3C',
'RESERV3D',
'RESERV3E',
'RESERV3F',
'RESERV40',
'RESERV41',
'RESERV42',
'RESERV43',
'RESERV44',
'RESERV45',
'RESERV46',
'RESERV47',
'RESERV48',
'RESERV49',
'RESERV4A',
'RESERV4B',
'RESERV4C',
'RESERV4D',
'RESERV4E',
'RESERV4F',
'RESERV50',
'RESERV51',
'RESERV52',
'RESERV53',
'RESERV54',
'RESERV55',
'RESERV56',
'RESERV57',
'RESERV58',
'RESERV59',
'RESERV5A',
'RESERV5B',
'RESERV5C',
'RESERV5D',
'RESERV5E',
'RESERV5F',
'RESERV60',
'RESERV61',
'RESERV62',
'RESERV63',
'RESERV64',
'RESERV65',
'RESERV66',
'RESERV67',
'RESERV68',
'RESERV69',
'RESERV6A',
'RESERV6B',
'RESERV6C',
'RESERV6D',
'RESERV6E',
'RESERV6F',
'RESERV70',
'RESERV71',
'RESERV72',
'RESERV73',
'RESERV74',
'RESERV75',
'RESERV76',
'RESERV77',
'RESERV78',
'RESERV79',
'RESERV7A',
'RESERV7B',
'RESERV7C',
'RESERV7D',
'RESERV7E',
'RESERV7F',
'RESERV80',
'RESERV81',
'RESERV82',
'RESERV83',
'RESERV84',
'RESERV85',
'RESERV86',
'RESERV87',
'RESERV88',
'RESERV89',
'RESERV8A',
'RESERV8B',
'RESERV8C',
'RESERV8D',
'RESERV8E',
'RESERV8F',
'RESERV90',
'RESERV91',
'RESERV92',
'RESERV93',
'RESERV94',
'RESERV95',
'RESERV96',
'RESERV97',
'RESERV98',
'RESERV99',
'RESERV9A',
'RESERV9B',
'RESERV9C',
'RESERV9D',
'RESERV9E',
'RESERV9F',
'RESERVA0',
'RESERVA1',
'RESERVA2',
'RESERVA3',
'RESERVA4',
'RESERVA5',
'RESERVA6',
'RESERVA7',
'RESERVA8',
'RESERVA9',
'RESERVAA',
'RESERVAB',
'RESERVAC',
'RESERVAD',
'RESERVAE',
'RESERVAF',
'RESERVB0',
'RESERVB1',
'RESERVB2',
'RESERVB3',
'RESERVB4',
'RESERVB5',
'RESERVB6',
'RESERVB7',
'RESERVB8',
'RESERVB9',
'RESERVBA',
'RESERVBB',
'RESERVBC',
'RESERVBD',
'RESERVBE',
'RESERVBF',
'RESERVC0',
'RESERVC1',
'RESERVC2',
'RESERVC3',
'RESERVC4',
'RESERVC5',
'RESERVC6',
'RESERVC7',
'RESERVC8',
'RESERVC9',
'RESERVCA',
'RESERVCB',
'RESERVCC',
'RESERVCD',
'RESERVCE',
'RESERVCF',
'RESERVD0',
'RESERVD1',
'RESERVD2',
'RESERVD3',
'RESERVD4',
'RESERVD',
];

export const PANIC_DOC_URL = 'https://docs.rs/fuel-asm/latest/fuel_asm/enum.PanicReason.html';
7 changes: 6 additions & 1 deletion packages/script/src/errors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import type {
TransactionResultRevertReceipt,
} from '@fuel-ts/providers';
import { ReceiptType } from '@fuel-ts/transactions';
import { getDocs } from './utils';

const bigintReplacer = (key: unknown, value: unknown) =>
typeof value === 'bigint' ? value.toString() : value;
Expand Down Expand Up @@ -41,7 +42,11 @@ export class ScriptResultDecoderError extends Error {
.join('\n')}`
: null;
const receiptsText = `Receipts:\n${JSON.stringify(
result.receipts.map(({ type, ...r }) => ({ type: ReceiptType[type], ...r })),
result.receipts.map((receipt) => ({
...receipt,
...getDocs(receipt),
type: ReceiptType[receipt.type],
})),
bigintReplacer,
2
)}`;
Expand Down
22 changes: 22 additions & 0 deletions packages/script/src/utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import type { TransactionResultReceipt } from '@fuel-ts/providers';
import { ReceiptType } from '@fuel-ts/transactions';

import { PANIC_DOC_URL, PANIC_REASONS } from './constants';

const getPanicReason = (reason: bigint): string | null => {
if (reason > PANIC_REASONS.length - 1 || reason < 0) {
return null;
}
return PANIC_REASONS[Number(reason)];
};

export const getDocs = (receipt: TransactionResultReceipt): any => {
switch (receipt.type) {
case ReceiptType.Panic: {
const panicReason = getPanicReason(receipt.reason);
return { doc: panicReason ? `${PANIC_DOC_URL}#variant.${panicReason}` : PANIC_DOC_URL };
}
default:
return {};
}
};

0 comments on commit 8d1349a

Please sign in to comment.