Skip to content

Commit

Permalink
fix trace task (#74)
Browse files Browse the repository at this point in the history
  • Loading branch information
zemse committed Aug 5, 2024
1 parent 5b2ba43 commit b491504
Show file tree
Hide file tree
Showing 9 changed files with 203 additions and 258 deletions.
12 changes: 10 additions & 2 deletions src/extend/hre.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,18 @@ extendEnvironment((hre) => {
// @ts-ignore
global.hreArtifacts = hre.artifacts;

debug("getting hardhat base provider");
getHardhatBaseProvider(hre)
.then((provider) => (hre.tracer.switch = new Switch(provider)))
.then((provider) => {
hre.tracer.switch = new Switch(provider);
debug("tracer.switch created");
})
.then(() => {
addRecorder(hre).catch(console.error);
addRecorder(hre)
.then(() => {
debug("trace recorder added");
})
.catch(console.error);
});

debug("environment extended!");
Expand Down
27 changes: 20 additions & 7 deletions src/tasks/node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,16 @@ import {

import { addRecorder } from "../extend/hre";
import { ProviderLike } from "../types";
import { createTracerTask, runTask } from "../utils";
import { wrapProvider } from "../wrapper";
import { createTracerTask, getHardhatBaseProvider, runTask } from "../utils";
import { wrapTracer, wrapProvider } from "../wrapper";

createTracerTask("node").setAction(runTask);

subtask(TASK_NODE_GET_PROVIDER).setAction(async (args, hre, runSuper) => {
const provider = await runSuper(args);
wrapProvider(hre, new RpcWrapper(hre, provider));
const baseProvider = await runSuper(args);
const wrappedProvider = wrapProvider(hre, new RpcWrapper(hre, baseProvider));
wrapTracer(hre, wrappedProvider);

addRecorder(hre).catch(console.error);
return hre.network.provider;
});
Expand All @@ -32,9 +34,20 @@ class RpcWrapper extends ProviderWrapper {
public async request({ method, params }: RequestArguments): Promise<unknown> {
if (method === "tracer_lastTrace") {
const trace = this.hre.tracer.lastTrace();
return JSON.parse(
JSON.stringify(trace, (k, v) => (k === "parent" ? undefined : v))
);
if (trace === undefined) {
throw new Error("No trace available");
}
return trace;
} else if (method === "tracer_getTrace") {
if (params && Array.isArray(params) && params.length === 1) {
const trace = this.hre.tracer.recorder?.getTrace(params[0]);
if (trace === undefined) {
throw new Error("No trace available for provided txHash");
}
return trace;
} else {
throw new Error("Params should be [txHash]");
}
}
return this.provider.send(method, params as any[]);
}
Expand Down
Loading

0 comments on commit b491504

Please sign in to comment.