UNPKG

1.15 kBPlain TextView Raw
1import {
2 HARDHAT_NETWORK_RESET_EVENT,
3 HARDHAT_NETWORK_REVERT_SNAPSHOT_EVENT,
4} from "hardhat/internal/constants";
5import { EthereumProvider } from "hardhat/types";
6
7import { EthersProviderWrapper } from "./ethers-provider-wrapper";
8import { createUpdatableTargetProxy } from "./updatable-target-proxy";
9
10/**
11 * This method returns a proxy that uses an underlying provider for everything.
12 *
13 * This underlying provider is replaced by a new one after a successful hardhat_reset,
14 * because ethers providers can have internal state that returns wrong results after
15 * the network is reset.
16 */
17export function createProviderProxy(
18 hardhatProvider: EthereumProvider
19): EthersProviderWrapper {
20 const initialProvider = new EthersProviderWrapper(hardhatProvider);
21
22 const { proxy: providerProxy, setTarget } =
23 createUpdatableTargetProxy(initialProvider);
24
25 hardhatProvider.on(HARDHAT_NETWORK_RESET_EVENT, () => {
26 setTarget(new EthersProviderWrapper(hardhatProvider));
27 });
28 hardhatProvider.on(HARDHAT_NETWORK_REVERT_SNAPSHOT_EVENT, () => {
29 setTarget(new EthersProviderWrapper(hardhatProvider));
30 });
31
32 return providerProxy;
33}