parent
86ae504746
commit
2d90f013a3
@ -0,0 +1,21 @@ |
|||||||
|
import * as packageJson from '../../../../../package.json' |
||||||
|
import { InjectedProvider } from './injected-provider' |
||||||
|
|
||||||
|
const profile = { |
||||||
|
name: 'injected-arbitrum-one-provider', |
||||||
|
displayName: 'Injected Arbitrum One Provider', |
||||||
|
kind: 'provider', |
||||||
|
description: 'injected Arbitrum One Provider', |
||||||
|
methods: ['sendAsync'], |
||||||
|
version: packageJson.version |
||||||
|
} |
||||||
|
|
||||||
|
export class InjectedArbitrumOneProvider extends InjectedProvider { |
||||||
|
|
||||||
|
constructor () { |
||||||
|
super(profile) |
||||||
|
this.chainName = 'Arbitrum One' |
||||||
|
this.chainId = '0xa4b1' |
||||||
|
this.rpcUrls = ['https://arb1.arbitrum.io/rpc'] |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
import * as packageJson from '../../../../../package.json' |
||||||
|
import { InjectedProvider } from './injected-provider' |
||||||
|
|
||||||
|
const profile = { |
||||||
|
name: 'injected-optimism-provider', |
||||||
|
displayName: 'Injected Optimism Provider', |
||||||
|
kind: 'provider', |
||||||
|
description: 'injected Optimism Provider', |
||||||
|
methods: ['sendAsync'], |
||||||
|
version: packageJson.version |
||||||
|
} |
||||||
|
|
||||||
|
export class Injected0ptimismProvider extends InjectedProvider { |
||||||
|
|
||||||
|
constructor () { |
||||||
|
super(profile) |
||||||
|
this.chainName = 'Optimism' |
||||||
|
this.chainId = '0xa' |
||||||
|
this.rpcUrls = ['https://mainnet.optimism.io'] |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,69 @@ |
|||||||
|
import { Plugin } from '@remixproject/engine' |
||||||
|
import { JsonDataRequest, RejectRequest, SuccessRequest } from './abstract-provider' |
||||||
|
import { ethers } from 'ethers' |
||||||
|
import Web3 from 'web3' |
||||||
|
|
||||||
|
export class InjectedProvider extends Plugin { |
||||||
|
provider: any |
||||||
|
chainName: string |
||||||
|
chainId: string |
||||||
|
rpcUrls: Array<string> |
||||||
|
|
||||||
|
constructor (profile) { |
||||||
|
super(profile) |
||||||
|
this.provider = new Web3((window as any).ethereum) |
||||||
|
} |
||||||
|
|
||||||
|
sendAsync (data: JsonDataRequest): Promise<any> { |
||||||
|
return new Promise((resolve, reject) => { |
||||||
|
this.sendAsyncInternal(data, resolve, reject)
|
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
private async sendAsyncInternal (data: JsonDataRequest, resolve: SuccessRequest, reject: RejectRequest): Promise<void> { |
||||||
|
// Check the case where current environment is VM on UI and it still sends RPC requests
|
||||||
|
// This will be displayed on UI tooltip as 'cannot get account list: Environment Updated !!'
|
||||||
|
|
||||||
|
try { |
||||||
|
if ((window as any) && typeof (window as any).ethereum.enable === 'function') (window as any).ethereum.enable() |
||||||
|
await addL2Network(this.chainName, this.chainId, this.rpcUrls) |
||||||
|
const resultData = await this.provider.currentProvider.send(data.method, data.params) |
||||||
|
resolve({ jsonrpc: '2.0', result: resultData.result, id: data.id }) |
||||||
|
} catch (error) { |
||||||
|
reject(error) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
export const addL2Network = async (chainName: string, chainId: string, rpcUrls: Array<string>) => { |
||||||
|
try { |
||||||
|
await (window as any).ethereum.request({ |
||||||
|
method: 'wallet_switchEthereumChain', |
||||||
|
params: [{ chainId: chainId }], |
||||||
|
}); |
||||||
|
} catch (switchError) { |
||||||
|
// This error code indicates that the chain has not been added to MetaMask.
|
||||||
|
if (switchError.code === 4902) { |
||||||
|
try { |
||||||
|
await (window as any).ethereum.request({ |
||||||
|
method: 'wallet_addEthereumChain', |
||||||
|
params: [ |
||||||
|
{ |
||||||
|
chainId: chainId, |
||||||
|
chainName: chainName, |
||||||
|
rpcUrls: rpcUrls, |
||||||
|
}, |
||||||
|
], |
||||||
|
}); |
||||||
|
|
||||||
|
await (window as any).ethereum.request({ |
||||||
|
method: 'wallet_switchEthereumChain', |
||||||
|
params: [{ chainId: chainId }], |
||||||
|
}); |
||||||
|
} catch (addError) { |
||||||
|
// handle "add" error
|
||||||
|
} |
||||||
|
} |
||||||
|
// handle other "switch" errors
|
||||||
|
}
|
||||||
|
} |
Loading…
Reference in new issue