@@ -96,17 +96,16 @@ export function TokensProvider({
96
96
97
97
const initialTokens = tokens . reduce < Record < string , ERC20 > > (
98
98
( acc , token ) => {
99
- const normalizedAddress = getChecksumAddress ( address ) ;
100
99
const contract = new ERC20Contract ( {
101
- address : normalizedAddress ,
100
+ address : token . address ,
102
101
provider,
103
102
} ) ;
104
103
105
104
return {
106
105
...acc ,
107
- [ normalizedAddress ] : {
106
+ [ contract . address ] : {
108
107
...token ,
109
- address : normalizedAddress ,
108
+ address : contract . address ,
110
109
contract,
111
110
}
112
111
} ;
@@ -166,7 +165,6 @@ export function TokensProvider({
166
165
const addresses = useMemo ( ( ) => Object . keys ( tokens ) , [ tokens ] ) ;
167
166
168
167
const {
169
- data : priceData ,
170
168
isLoading : isPriceLoading ,
171
169
error : priceError ,
172
170
} = usePriceByAddressesQuery (
@@ -176,28 +174,27 @@ export function TokensProvider({
176
174
{
177
175
refetchInterval,
178
176
enabled : addresses . length > 0 ,
177
+ onSuccess : ( data ) => {
178
+ if ( ! data ?. priceByAddresses ) return ;
179
+
180
+ setTokens ( ( tokens ) => {
181
+ data . priceByAddresses . forEach ( ( price , index ) => {
182
+ const address = addresses [ index ] ;
183
+ if ( tokens [ address ] ) {
184
+ tokens [ address ] . price = price ;
185
+ }
186
+ } ) ;
187
+ return tokens ;
188
+ } ) ;
189
+ }
179
190
} ,
180
191
) ;
181
192
182
- useEffect ( ( ) => {
183
- if ( priceData ?. priceByAddresses ) {
184
- setTokens ( ( prevTokens ) => {
185
- const newTokens = { ...prevTokens } ;
186
- priceData . priceByAddresses . forEach ( ( price , index ) => {
187
- const address = addresses [ index ] ;
188
- if ( newTokens [ address ] ) {
189
- newTokens [ address ] . price = price ;
190
- }
191
- } ) ;
192
- return newTokens ;
193
- } ) ;
194
- }
195
- } , [ priceData ?. priceByAddresses , addresses ] ) ;
196
-
197
193
const register = useCallback (
198
194
async ( address : string ) => {
199
195
if ( ! provider || tokens [ getChecksumAddress ( address ) ] ) return ;
200
196
197
+ const newTokens = { ...tokens } ;
201
198
const contract = new ERC20Contract ( {
202
199
address,
203
200
provider,
@@ -207,15 +204,13 @@ export function TokensProvider({
207
204
const balance = await contract . balanceOf ( address ) ;
208
205
await contract . init ( ) ;
209
206
const metadata = contract . metadata ( ) ;
207
+ newTokens [ metadata . address ] = {
208
+ ...metadata ,
209
+ contract,
210
+ balance,
211
+ } ;
210
212
211
- setTokens ( tokens => ( {
212
- ...tokens ,
213
- [ metadata . address ] : {
214
- ...metadata ,
215
- contract,
216
- balance,
217
- }
218
- } ) ) ;
213
+ setTokens ( newTokens ) ;
219
214
} catch ( error ) {
220
215
console . error ( `Failed to load token ${ address } :` , error ) ;
221
216
}
0 commit comments