Added StaticJsonRpcProvider for reducing calls to chainId in certain cases (#901).
This commit is contained in:
parent
8c1ff4c862
commit
c53864de0a
@ -26,9 +26,9 @@ import { IpcProvider } from "./ipc-provider";
|
||||
import { InfuraProvider } from "./infura-provider";
|
||||
import { JsonRpcProvider, JsonRpcSigner } from "./json-rpc-provider";
|
||||
import { NodesmithProvider } from "./nodesmith-provider";
|
||||
import { StaticJsonRpcProvider, UrlJsonRpcProvider } from "./url-json-rpc-provider";
|
||||
import { Web3Provider } from "./web3-provider";
|
||||
import { WebSocketProvider } from "./websocket-provider";
|
||||
|
||||
import { ExternalProvider, JsonRpcFetchFunc } from "./web3-provider";
|
||||
|
||||
import { Formatter } from "./formatter";
|
||||
@ -93,6 +93,7 @@ export {
|
||||
Provider,
|
||||
BaseProvider,
|
||||
|
||||
UrlJsonRpcProvider,
|
||||
|
||||
///////////////////////
|
||||
// Concreate Providers
|
||||
@ -105,6 +106,7 @@ export {
|
||||
InfuraProvider,
|
||||
JsonRpcProvider,
|
||||
NodesmithProvider,
|
||||
StaticJsonRpcProvider,
|
||||
Web3Provider,
|
||||
WebSocketProvider,
|
||||
|
||||
|
@ -13,7 +13,26 @@ import { JsonRpcProvider, JsonRpcSigner } from "./json-rpc-provider";
|
||||
|
||||
type getUrlFunc = (network: Network, apiKey: string) => string | ConnectionInfo;
|
||||
|
||||
export abstract class UrlJsonRpcProvider extends JsonRpcProvider {
|
||||
// A StaticJsonRpcProvider is useful when you *know* for certain that
|
||||
// the backend will never change, as it never calls eth_chainId to
|
||||
// verify its backend. However, if the backend does change, the effects
|
||||
// are undefined and may include:
|
||||
// - inconsistent results
|
||||
// - locking up the UI
|
||||
// - block skew warnings
|
||||
// - wrong results
|
||||
export class StaticJsonRpcProvider extends JsonRpcProvider {
|
||||
async detectNetwork(): Promise<Network> {
|
||||
let network = this.network;
|
||||
if (network == null) {
|
||||
// After this call completes, network is defined
|
||||
network = await super._ready();
|
||||
}
|
||||
return network;
|
||||
}
|
||||
}
|
||||
|
||||
export abstract class UrlJsonRpcProvider extends StaticJsonRpcProvider {
|
||||
readonly apiKey: any;
|
||||
|
||||
constructor(network?: Networkish, apiKey?: any) {
|
||||
@ -36,10 +55,6 @@ export abstract class UrlJsonRpcProvider extends JsonRpcProvider {
|
||||
}
|
||||
}
|
||||
|
||||
async detectNetwork(): Promise<Network> {
|
||||
return this.network;
|
||||
}
|
||||
|
||||
_startPending(): void {
|
||||
logger.warn("WARNING: API provider does not support pending filters");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user