@@ -6,15 +6,14 @@ import {
6
6
useEffect ,
7
7
useCallback ,
8
8
} from "react" ;
9
- import { useConnection } from "@/hooks/connection" ;
10
- import { ERC20 as ERC20Contract } from "@cartridge/utils" ;
9
+ import { ERC20Contract } from "@cartridge/utils" ;
11
10
import {
12
11
Price ,
13
12
TokenPair ,
14
13
usePriceByAddressesQuery ,
15
14
} from "@cartridge/utils/api/cartridge" ;
16
15
import { useQuery } from "react-query" ;
17
- import { getChecksumAddress } from "starknet" ;
16
+ import { getChecksumAddress , Provider } from "starknet" ;
18
17
19
18
const DEFAULT_TOKENS = [
20
19
{
@@ -68,27 +67,30 @@ export interface TokensContextValue {
68
67
export const TokensContext = createContext < TokensContextValue > ( {
69
68
tokens : { } ,
70
69
isLoading : false ,
71
- registerPair : ( ) => { } ,
70
+ registerPair : ( ) => { } ,
72
71
} ) ;
73
72
74
73
interface TokensProviderProps extends PropsWithChildren {
75
74
tokens ?: ERC20Metadata [ ] ;
76
75
refetchInterval ?: number ;
77
76
feeToken ?: string ;
77
+ provider ?: Provider ;
78
+ address ?: string ;
78
79
}
79
80
80
81
export function TokensProvider ( {
81
82
children,
82
83
tokens : tokensArg = DEFAULT_TOKENS ,
83
84
feeToken = DEFAULT_FEE_TOKEN ,
84
85
refetchInterval = 30000 ,
86
+ provider,
87
+ address,
85
88
} : TokensProviderProps ) {
86
- const { controller } = useConnection ( ) ;
87
89
const [ tokens , setTokens ] = useState < Record < string , ERC20 > > ( { } ) ;
88
90
const [ initialLoadComplete , setInitialLoadComplete ] = useState ( false ) ;
89
91
90
92
useEffect ( ( ) => {
91
- if ( ! controller ) {
93
+ if ( ! provider || ! address ) {
92
94
return ;
93
95
}
94
96
@@ -104,7 +106,7 @@ export function TokensProvider({
104
106
const normalizedAddress = getChecksumAddress ( address ) ;
105
107
const contract = new ERC20Contract ( {
106
108
address : normalizedAddress ,
107
- provider : controller . provider ,
109
+ provider,
108
110
} ) ;
109
111
110
112
acc [ normalizedAddress ] = {
@@ -126,7 +128,7 @@ export function TokensProvider({
126
128
Object . keys ( initialTokens ) . forEach ( async ( address ) => {
127
129
try {
128
130
const balance = await initialTokens [ address ] . contract . balanceOf (
129
- controller . address ( ) ,
131
+ address ,
130
132
) ;
131
133
132
134
setTokens ( ( prev ) => ( {
@@ -140,17 +142,17 @@ export function TokensProvider({
140
142
console . error ( "Error getting balance for:" , address , error ) ;
141
143
}
142
144
} ) ;
143
- } , [ controller , tokensArg ] ) ;
145
+ } , [ address , tokensArg , provider ] ) ;
144
146
145
147
const { error : balanceError , isLoading : isLoadingBalances } = useQuery (
146
- [ "token-balances" , controller ?. address ( ) , Object . keys ( tokens ) ] ,
148
+ [ "token-balances" , address , Object . keys ( tokens ) ] ,
147
149
async ( ) => {
148
- if ( ! controller ) return ;
150
+ if ( ! address ) return ;
149
151
150
152
const updatedTokens = { ...tokens } ;
151
153
await Promise . all (
152
154
Object . values ( updatedTokens ) . map ( async ( token ) => {
153
- const balance = await token . contract . balanceOf ( controller . address ( ) ) ;
155
+ const balance = await token . contract . balanceOf ( address ) ;
154
156
updatedTokens [ token . address ] = {
155
157
...token ,
156
158
balance,
@@ -164,7 +166,7 @@ export function TokensProvider({
164
166
}
165
167
} ,
166
168
{
167
- enabled : ! ! controller && Object . keys ( tokens ) . length > 0 ,
169
+ enabled : ! ! address && Object . keys ( tokens ) . length > 0 ,
168
170
refetchInterval,
169
171
retry : false ,
170
172
} ,
@@ -202,19 +204,19 @@ export function TokensProvider({
202
204
203
205
const registerPair = useCallback (
204
206
async ( address : string ) => {
205
- if ( ! controller ) return ;
207
+ if ( ! provider ) return ;
206
208
207
209
const normalizedAddress = getChecksumAddress ( address ) ;
208
210
if ( tokens [ normalizedAddress ] ) return ;
209
211
210
212
const newTokens = { ...tokens } ;
211
213
const contract = new ERC20Contract ( {
212
214
address : normalizedAddress ,
213
- provider : controller . provider ,
215
+ provider,
214
216
} ) ;
215
217
216
218
try {
217
- const balance = await contract . balanceOf ( controller . address ( ) ) ;
219
+ const balance = await contract . balanceOf ( address ) ;
218
220
await contract . init ( ) ;
219
221
const metadata = contract . metadata ( ) ;
220
222
@@ -233,7 +235,7 @@ export function TokensProvider({
233
235
console . error ( `Failed to load token ${ normalizedAddress } :` , error ) ;
234
236
}
235
237
} ,
236
- [ controller , tokens ] ,
238
+ [ address , tokens , provider ] ,
237
239
) ;
238
240
239
241
const value = useMemo (
0 commit comments