Skip to content

Commit

Permalink
fix: transactionPaidFee event optimization (#1367)
Browse files Browse the repository at this point in the history
  • Loading branch information
TarikGul committed Dec 21, 2023
1 parent 203a257 commit 2883249
Showing 1 changed file with 29 additions and 4 deletions.
33 changes: 29 additions & 4 deletions src/services/blocks/BlocksService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,11 @@ interface FetchBlockOptions {
noFees: boolean;
}

interface ExtrinsicSuccessOrFailedOverride {
weight: Weight;
class: DispatchInfo;
}

/**
* Event methods that we check for.
*/
Expand Down Expand Up @@ -233,6 +238,30 @@ export class BlocksService extends AbstractService {
continue;
}

const transactionPaidFeeEvent = xtEvents.find(
({ method }) => isFrameMethod(method) && method.method === Event.transactionPaidFee,
);
const extrinsicSuccess = xtEvents.find(({ method }) => isFrameMethod(method) && method.method === Event.success);
const extrinsicFailed = xtEvents.find(({ method }) => isFrameMethod(method) && method.method === Event.failure);

const eventFailureOrSuccess = extrinsicSuccess || extrinsicFailed;
if (transactionPaidFeeEvent && eventFailureOrSuccess) {
let availableData: ExtrinsicSuccessOrFailedOverride;
if (extrinsicSuccess) {
availableData = eventFailureOrSuccess.data[0] as unknown as ExtrinsicSuccessOrFailedOverride;
} else {
availableData = eventFailureOrSuccess.data[1] as unknown as ExtrinsicSuccessOrFailedOverride;
}

extrinsics[idx].info = {
weight: availableData.weight,
class: availableData.class,
partialFee: transactionPaidFeeEvent.data[1].toString(),
kind: 'fromEvent',
};
continue;
}

/**
* Grab the initial partialFee, and information required for calculating a partialFee
* if queryFeeDetails is available in the runtime.
Expand All @@ -244,10 +273,6 @@ export class BlocksService extends AbstractService {
} = await this.fetchQueryInfo(block.extrinsics[idx], previousBlockHash);
const versionedWeight = (weight as Weight).refTime ? (weight as Weight).refTime.unwrap() : (weight as WeightV1);

const transactionPaidFeeEvent = xtEvents.find(
({ method }) => isFrameMethod(method) && method.method === Event.transactionPaidFee,
);

let finalPartialFee = partialFee.toString(),
dispatchFeeType = 'preDispatch';
if (transactionPaidFeeEvent) {
Expand Down

0 comments on commit 2883249

Please sign in to comment.