UNPKG

hardhat-tracer

Version:

Hardhat Tracer plugin

55 lines (48 loc) 1.49 kB
import { CallItem, Item } from "./types"; export class TransactionTrace { public hash?: string; public top?: CallItem; public parent?: CallItem; public insertItem( item: Item<any>, options?: { increaseDepth: boolean } ): void { if (item.params === undefined) { item.params = {} as any; } if (!this.top || !this.parent) { // if top and parent not set, then this is the first item, should be a call this.top = (item as unknown) as CallItem; this.parent = this.top; if (!this.parent.children) { this.parent.children = []; } } else { // insert this item in the parent item's children array this.parent.children.push(item); // set the parent of the item item.parent = this.parent; // // if the item is a call, then further items should be it's children if (options?.increaseDepth) { item.children = []; this.parent = (item as unknown) as CallItem; } } } public returnCurrentCall( returnData: string, executionGas: number, exception?: any // EvmError ) { if (!this.parent) { throw new Error( "[hardhat-tracer]: this.parent is undefined in returnCurrentCall" ); } this.parent.params.returnData = returnData; this.parent.params.gasUsed = executionGas; this.parent.params.success = !exception; this.parent.params.exception = exception; this.parent = this.parent.parent as CallItem; } }