11import { PluginClient } from '@remixproject/plugin'
22import { createClient } from '@remixproject/plugin-webview'
33import { w3mConnectors , w3mProvider } from '@web3modal/ethereum'
4- import { configureChains , createClient as wagmiCreateClient } from 'wagmi'
5- import { arbitrum , arbitrumGoerli , mainnet , polygon , polygonMumbai , optimism , optimismGoerli , Chain , goerli , sepolia } from 'wagmi /chains'
4+ import { createConfig , configureChains } from 'wagmi'
5+ import { arbitrum , arbitrumGoerli , mainnet , polygon , polygonMumbai , optimism , optimismGoerli , Chain , goerli , sepolia } from 'viem /chains'
66import { EthereumClient } from '@web3modal/ethereum'
77import EventManager from "events"
88import { PROJECT_ID } from './constant'
99
10- export class RemixClient extends PluginClient {
11- wagmiClient
10+ export class WalletConnectRemixClient extends PluginClient {
11+ wagmiConfig
1212 ethereumClient : EthereumClient
1313 chains : Chain [ ]
1414 currentChain : number
@@ -36,21 +36,22 @@ export class RemixClient extends PluginClient {
3636 async initClient ( ) {
3737 try {
3838 this . chains = [ arbitrum , arbitrumGoerli , mainnet , polygon , polygonMumbai , optimism , optimismGoerli , goerli , sepolia ]
39- const { provider } = configureChains ( this . chains , [ w3mProvider ( { projectId : PROJECT_ID } ) ] )
40-
41- this . wagmiClient = wagmiCreateClient ( {
42- autoConnect : false ,
43- connectors : w3mConnectors ( { projectId : PROJECT_ID , version : 2 , chains : this . chains } ) ,
44- provider
39+ const { publicClient } = configureChains ( this . chains , [ w3mProvider ( { projectId : PROJECT_ID } ) ] )
40+
41+ this . wagmiConfig = createConfig ( {
42+ autoConnect : false ,
43+ connectors : w3mConnectors ( { projectId : PROJECT_ID , chains : this . chains } ) ,
44+ publicClient
4545 } )
46- this . ethereumClient = new EthereumClient ( this . wagmiClient , this . chains )
46+ this . ethereumClient = new EthereumClient ( this . wagmiConfig , this . chains )
4747 } catch ( e ) {
4848 return console . error ( "Could not get a wallet connection" , e )
4949 }
5050 }
5151
5252 subscribeToEvents ( ) {
53- this . wagmiClient . subscribe ( ( event ) => {
53+ this . wagmiConfig . subscribe ( ( event ) => {
54+ console . log ( 'this.wagmiConfig event subscribed: ' , this . wagmiConfig )
5455 if ( event . status === 'connected' ) {
5556 this . emit ( 'accountsChanged' , [ event . data . account ] )
5657 if ( this . currentChain !== event . data . chain . id ) {
@@ -70,29 +71,12 @@ export class RemixClient extends PluginClient {
7071
7172 sendAsync ( data : { method : string , params : string , id : string } ) {
7273 return new Promise ( ( resolve , reject ) => {
73- if ( this . wagmiClient ) {
74- if ( this . wagmiClient . data && this . wagmiClient . data . provider && this . wagmiClient . data . provider . sendAsync ) {
75- this . wagmiClient . data . provider . sendAsync ( data , ( error , message ) => {
76- if ( error ) return reject ( error )
77- resolve ( message )
78- } )
79- } else if ( this . wagmiClient . data && this . wagmiClient . data . provider && this . wagmiClient . data . provider . jsonRpcFetchFunc ) {
80- if ( data . method === 'net_version' || data . method === 'eth_chainId' ) {
81- resolve ( { "jsonrpc" : "2.0" , "result" : this . currentChain , "id" : data . id } )
82- } else {
83- this . wagmiClient . data . provider . jsonRpcFetchFunc ( data . method , data . params ) . then ( ( message ) => {
84- resolve ( { "jsonrpc" : "2.0" , "result" : message , "id" : data . id } )
85- } ) . catch ( ( error ) => {
86- reject ( error )
87- } )
88- }
89- } else {
90- this . wagmiClient . provider . send ( data . method , data . params ) . then ( ( message ) => {
91- resolve ( { "jsonrpc" : "2.0" , "result" : message , "id" : data . id } )
92- } ) . catch ( ( error ) => {
93- reject ( error )
94- } )
95- }
74+ if ( this . wagmiConfig ) {
75+ this . wagmiConfig . publicClient . request ( data ) . then ( ( message ) => {
76+ resolve ( { "jsonrpc" : "2.0" , "result" : message , "id" : data . id } )
77+ } ) . catch ( ( error ) => {
78+ reject ( error )
79+ } )
9680 } else {
9781 console . error ( `Cannot make ${ data . method } request. Remix client is not connect to walletconnect client` )
9882 resolve ( { "jsonrpc" : "2.0" , "result" : [ ] , "id" : data . id } )
0 commit comments