@@ -7,52 +7,91 @@ import {
7
7
CancelablePromise
8
8
} from "./interfaces"
9
9
10
+ export function getNetwork ( provider : any ) : Promise < number | any > {
11
+ return new Promise ( ( resolve , reject ) => {
12
+ provider . sendAsync (
13
+ {
14
+ method : "net_version" ,
15
+ params : [ ] ,
16
+ id : 42
17
+ } ,
18
+ ( e : any , res : any ) => {
19
+ e && reject ( e )
20
+ resolve ( Number ( res && res . result ) )
21
+ }
22
+ )
23
+ } )
24
+ }
25
+
26
+ export function getAddress ( provider : any ) : Promise < string | any > {
27
+ return new Promise ( ( resolve , reject ) => {
28
+ provider . sendAsync (
29
+ {
30
+ method : "eth_accounts" ,
31
+ params : [ ] ,
32
+ id : 42
33
+ } ,
34
+ ( e : any , res : any ) => {
35
+ e && reject ( e )
36
+ resolve ( res && res . result && res . result [ 0 ] )
37
+ }
38
+ )
39
+ } )
40
+ }
41
+
42
+ export function getBalance ( provider : any ) : Promise < string | any > {
43
+ return new Promise ( async ( resolve , reject ) => {
44
+ const currentAddress = await getAddress ( provider )
45
+
46
+ if ( ! currentAddress ) {
47
+ resolve ( null )
48
+ return
49
+ }
50
+
51
+ provider . sendAsync (
52
+ {
53
+ method : "eth_getBalance" ,
54
+ params : [ currentAddress , "latest" ] ,
55
+ id : 42
56
+ } ,
57
+ ( e : any , res : any ) => {
58
+ e && reject ( e )
59
+ resolve ( res && res . result && new BigNumber ( res . result ) . toString ( 10 ) )
60
+ }
61
+ )
62
+ } )
63
+ }
64
+
10
65
export function createModernProviderInterface ( provider : any ) : WalletInterface {
11
66
provider . autoRefreshOnNetworkChange = false
12
67
13
- return {
14
- address : {
15
- get : ( ) => {
16
- return Promise . resolve ( provider . selectedAddress || null )
17
- }
68
+ const onFuncExists = typeof provider . on === "function"
18
69
19
- // METAMASK BUG NEEDS TO BE FIXED FOR CHROME: https://github.com/MetaMask/metamask-extension/issues/7101
20
- // onChange: func => {
21
- // // give the initial value if it exists
22
- // if (provider.selectedAddress) {
23
- // func(provider.selectedAddress)
24
- // }
25
- // provider.on("accountsChanged", accounts => func(accounts[0]))
26
- // }
27
- } ,
28
- network : {
29
- onChange : ( func : ( val : string | number ) => void ) => {
30
- // give the initial value if it exists
31
- if ( provider . networkVersion ) {
32
- func ( provider . networkVersion )
70
+ return {
71
+ address : onFuncExists
72
+ ? {
73
+ onChange : func => {
74
+ // get the initial value
75
+ getAddress ( provider ) . then ( func )
76
+ provider . on ( "accountsChanged" , ( accounts : string [ ] ) =>
77
+ func ( accounts [ 0 ] )
78
+ )
79
+ }
33
80
}
34
- provider . on ( "networkChanged" , func )
35
- }
36
- } ,
37
- balance : {
38
- get : ( ) =>
39
- new Promise ( ( resolve : ( val : any ) => void ) => {
40
- if ( ! provider . selectedAddress ) {
41
- resolve ( null )
42
- return
81
+ : {
82
+ get : ( ) => getAddress ( provider )
83
+ } ,
84
+ network : onFuncExists
85
+ ? {
86
+ onChange : ( func : ( val : string | number ) => void ) => {
87
+ // get initial value
88
+ getNetwork ( provider ) . then ( func )
89
+ provider . on ( "networkChanged" , func )
43
90
}
44
-
45
- provider . sendAsync (
46
- {
47
- method : "eth_getBalance" ,
48
- params : [ provider . selectedAddress , "latest" ] ,
49
- id : 1
50
- } ,
51
- ( e : any , res : any ) => {
52
- resolve ( new BigNumber ( res . result ) . toString ( 10 ) )
53
- }
54
- )
55
- } )
91
+ }
92
+ : { get : ( ) => getNetwork ( provider ) } ,
93
+ balance : {
94
+ get : ( ) => getBalance ( provider )
56
95
} ,
57
96
connect : ( ) =>
58
97
new Promise (
@@ -74,24 +113,13 @@ export function createModernProviderInterface(provider: any): WalletInterface {
74
113
export function createLegacyProviderInterface ( provider : any ) : WalletInterface {
75
114
return {
76
115
address : {
77
- get : ( ) => Promise . resolve ( provider . _address || provider . address )
116
+ get : ( ) => getAddress ( provider )
78
117
} ,
79
118
network : {
80
- get : ( ) => Promise . resolve ( provider . _chainId || provider . chainId )
119
+ get : ( ) => getNetwork ( provider )
81
120
} ,
82
121
balance : {
83
- get : ( ) =>
84
- new Promise ( ( resolve : ( val : string | number | null ) => void ) => {
85
- provider . sendAsync (
86
- {
87
- method : "eth_getBalance" ,
88
- params : [ provider . _address , "latest" ]
89
- } ,
90
- ( e : any , res : any ) => {
91
- resolve ( new BigNumber ( res . result ) . toString ( 10 ) )
92
- }
93
- )
94
- } )
122
+ get : ( ) => getBalance ( provider )
95
123
} ,
96
124
name : getProviderName ( provider ) || "unknown"
97
125
}
0 commit comments