mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-23 02:10:12 +01:00
Make initializeProvider
and lookupNetwork
async (#16881)
* Make `initializeProvider` and `lookupNetwork` async These two methods were "synchronous" previously, but initiated an asynchronous operation. They have both been made `async` to bring them more in-line with the mobile controller API, and to make them easier to test. This should include zero functional changes. These methods are still being invoked without an `await`, to preserve the same behaviour they had previously. This relates to https://github.com/MetaMask/controllers/issues/971 * Move 'net_version' query to private function * Fix error made when resolving conflicts * Refactor to improve readability
This commit is contained in:
parent
d2f8083d64
commit
dbe77289d3
@ -122,11 +122,11 @@ export default class NetworkController extends EventEmitter {
|
|||||||
this.on(NETWORK_EVENTS.NETWORK_DID_CHANGE, this.lookupNetwork);
|
this.on(NETWORK_EVENTS.NETWORK_DID_CHANGE, this.lookupNetwork);
|
||||||
}
|
}
|
||||||
|
|
||||||
initializeProvider(providerParams) {
|
async initializeProvider(providerParams) {
|
||||||
this._baseProviderParams = providerParams;
|
this._baseProviderParams = providerParams;
|
||||||
const { type, rpcUrl, chainId } = this.getProviderConfig();
|
const { type, rpcUrl, chainId } = this.getProviderConfig();
|
||||||
this._configureProvider({ type, rpcUrl, chainId });
|
this._configureProvider({ type, rpcUrl, chainId });
|
||||||
this.lookupNetwork();
|
await this.lookupNetwork();
|
||||||
}
|
}
|
||||||
|
|
||||||
// return the proxies so the references will always be good
|
// return the proxies so the references will always be good
|
||||||
@ -162,7 +162,7 @@ export default class NetworkController extends EventEmitter {
|
|||||||
return this.getNetworkState() === 'loading';
|
return this.getNetworkState() === 'loading';
|
||||||
}
|
}
|
||||||
|
|
||||||
lookupNetwork() {
|
async lookupNetwork() {
|
||||||
// Prevent firing when provider is not defined.
|
// Prevent firing when provider is not defined.
|
||||||
if (!this._provider) {
|
if (!this._provider) {
|
||||||
log.warn(
|
log.warn(
|
||||||
@ -183,7 +183,6 @@ export default class NetworkController extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Ping the RPC endpoint so we can confirm that it works
|
// Ping the RPC endpoint so we can confirm that it works
|
||||||
const ethQuery = new EthQuery(this._provider);
|
|
||||||
const initialNetwork = this.getNetworkState();
|
const initialNetwork = this.getNetworkState();
|
||||||
const { type } = this.getProviderConfig();
|
const { type } = this.getProviderConfig();
|
||||||
const isInfura = INFURA_PROVIDER_TYPES.includes(type);
|
const isInfura = INFURA_PROVIDER_TYPES.includes(type);
|
||||||
@ -194,21 +193,26 @@ export default class NetworkController extends EventEmitter {
|
|||||||
this.emit(NETWORK_EVENTS.INFURA_IS_UNBLOCKED);
|
this.emit(NETWORK_EVENTS.INFURA_IS_UNBLOCKED);
|
||||||
}
|
}
|
||||||
|
|
||||||
ethQuery.sendAsync({ method: 'net_version' }, (err, networkVersion) => {
|
let networkVersion;
|
||||||
const currentNetwork = this.getNetworkState();
|
let networkVersionError;
|
||||||
if (initialNetwork === currentNetwork) {
|
try {
|
||||||
if (err) {
|
networkVersion = await this._getNetworkId();
|
||||||
this._setNetworkState('loading');
|
} catch (error) {
|
||||||
// keep network details in sync with network state
|
networkVersionError = error;
|
||||||
this._clearNetworkDetails();
|
}
|
||||||
|
if (initialNetwork !== this.getNetworkState()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (networkVersionError) {
|
||||||
|
this._setNetworkState('loading');
|
||||||
|
// keep network details in sync with network state
|
||||||
|
this._clearNetworkDetails();
|
||||||
|
} else {
|
||||||
this._setNetworkState(networkVersion);
|
this._setNetworkState(networkVersion);
|
||||||
// look up EIP-1559 support
|
// look up EIP-1559 support
|
||||||
this.getEIP1559Compatibility();
|
await this.getEIP1559Compatibility();
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getCurrentChainId() {
|
getCurrentChainId() {
|
||||||
@ -285,6 +289,24 @@ export default class NetworkController extends EventEmitter {
|
|||||||
// Private
|
// Private
|
||||||
//
|
//
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the network ID for the current selected network
|
||||||
|
*
|
||||||
|
* @returns {string} The network ID for the current network.
|
||||||
|
*/
|
||||||
|
async _getNetworkId() {
|
||||||
|
const ethQuery = new EthQuery(this._provider);
|
||||||
|
return await new Promise((resolve, reject) => {
|
||||||
|
ethQuery.sendAsync({ method: 'net_version' }, (error, result) => {
|
||||||
|
if (error) {
|
||||||
|
reject(error);
|
||||||
|
} else {
|
||||||
|
resolve(result);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method to return the latest block for the current network
|
* Method to return the latest block for the current network
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user