@reown/appkit-core-react-native 0.0.0-feat-coinbase-20250722202925 → 0.0.0-feat-onramp-20250722205908
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/controllers/AccountController.js +17 -20
- package/lib/commonjs/controllers/AccountController.js.map +1 -1
- package/lib/commonjs/controllers/ApiController.js +16 -28
- package/lib/commonjs/controllers/ApiController.js.map +1 -1
- package/lib/commonjs/controllers/BlockchainApiController.js +74 -204
- package/lib/commonjs/controllers/BlockchainApiController.js.map +1 -1
- package/lib/commonjs/controllers/ConnectionController.js +11 -8
- package/lib/commonjs/controllers/ConnectionController.js.map +1 -1
- package/lib/commonjs/controllers/ConnectorController.js +49 -0
- package/lib/commonjs/controllers/ConnectorController.js.map +1 -0
- package/lib/commonjs/controllers/EnsController.js +4 -4
- package/lib/commonjs/controllers/EnsController.js.map +1 -1
- package/lib/commonjs/controllers/EventsController.js +4 -4
- package/lib/commonjs/controllers/EventsController.js.map +1 -1
- package/lib/commonjs/controllers/ModalController.js +7 -6
- package/lib/commonjs/controllers/ModalController.js.map +1 -1
- package/lib/commonjs/controllers/OnRampController.js +69 -22
- package/lib/commonjs/controllers/OnRampController.js.map +1 -1
- package/lib/commonjs/controllers/OptionsController.js +3 -11
- package/lib/commonjs/controllers/OptionsController.js.map +1 -1
- package/lib/commonjs/controllers/RouterController.js +22 -1
- package/lib/commonjs/controllers/RouterController.js.map +1 -1
- package/lib/commonjs/controllers/SendController.js +101 -101
- package/lib/commonjs/controllers/SendController.js.map +1 -1
- package/lib/commonjs/controllers/SnackController.js +5 -29
- package/lib/commonjs/controllers/SnackController.js.map +1 -1
- package/lib/commonjs/controllers/SwapController.js +150 -151
- package/lib/commonjs/controllers/SwapController.js.map +1 -1
- package/lib/commonjs/controllers/ThemeController.js +1 -9
- package/lib/commonjs/controllers/ThemeController.js.map +1 -1
- package/lib/commonjs/controllers/TransactionsController.js +21 -25
- package/lib/commonjs/controllers/TransactionsController.js.map +1 -1
- package/lib/commonjs/controllers/WebviewController.js +52 -0
- package/lib/commonjs/controllers/WebviewController.js.map +1 -0
- package/lib/commonjs/index.js +24 -3
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/AssetUtil.js +15 -3
- package/lib/commonjs/utils/AssetUtil.js.map +1 -1
- package/lib/commonjs/utils/ConnectionUtil.js +33 -0
- package/lib/commonjs/utils/ConnectionUtil.js.map +1 -0
- package/lib/commonjs/utils/ConstantsUtil.js +9 -538
- package/lib/commonjs/utils/ConstantsUtil.js.map +1 -1
- package/lib/commonjs/utils/CoreHelperUtil.js +6 -12
- package/lib/commonjs/utils/CoreHelperUtil.js.map +1 -1
- package/lib/commonjs/utils/FetchUtil.js +28 -9
- package/lib/commonjs/utils/FetchUtil.js.map +1 -1
- package/lib/commonjs/utils/NetworkUtil.js +46 -0
- package/lib/commonjs/utils/NetworkUtil.js.map +1 -0
- package/lib/commonjs/utils/StorageUtil.js +42 -51
- package/lib/commonjs/utils/StorageUtil.js.map +1 -1
- package/lib/commonjs/utils/SwapApiUtil.js +21 -15
- package/lib/commonjs/utils/SwapApiUtil.js.map +1 -1
- package/lib/module/controllers/AccountController.js +17 -20
- package/lib/module/controllers/AccountController.js.map +1 -1
- package/lib/module/controllers/ApiController.js +16 -27
- package/lib/module/controllers/ApiController.js.map +1 -1
- package/lib/module/controllers/BlockchainApiController.js +73 -203
- package/lib/module/controllers/BlockchainApiController.js.map +1 -1
- package/lib/module/controllers/ConnectionController.js +11 -8
- package/lib/module/controllers/ConnectionController.js.map +1 -1
- package/lib/module/controllers/ConnectorController.js +44 -0
- package/lib/module/controllers/ConnectorController.js.map +1 -0
- package/lib/module/controllers/EnsController.js +2 -2
- package/lib/module/controllers/EnsController.js.map +1 -1
- package/lib/module/controllers/EventsController.js +1 -1
- package/lib/module/controllers/EventsController.js.map +1 -1
- package/lib/module/controllers/ModalController.js +7 -6
- package/lib/module/controllers/ModalController.js.map +1 -1
- package/lib/module/controllers/OnRampController.js +70 -23
- package/lib/module/controllers/OnRampController.js.map +1 -1
- package/lib/module/controllers/OptionsController.js +3 -11
- package/lib/module/controllers/OptionsController.js.map +1 -1
- package/lib/module/controllers/RouterController.js +22 -1
- package/lib/module/controllers/RouterController.js.map +1 -1
- package/lib/module/controllers/SendController.js +98 -98
- package/lib/module/controllers/SendController.js.map +1 -1
- package/lib/module/controllers/SnackController.js +5 -29
- package/lib/module/controllers/SnackController.js.map +1 -1
- package/lib/module/controllers/SwapController.js +150 -151
- package/lib/module/controllers/SwapController.js.map +1 -1
- package/lib/module/controllers/ThemeController.js +1 -9
- package/lib/module/controllers/ThemeController.js.map +1 -1
- package/lib/module/controllers/TransactionsController.js +19 -23
- package/lib/module/controllers/TransactionsController.js.map +1 -1
- package/lib/module/controllers/WebviewController.js +47 -0
- package/lib/module/controllers/WebviewController.js.map +1 -0
- package/lib/module/index.js +4 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/AssetUtil.js +15 -3
- package/lib/module/utils/AssetUtil.js.map +1 -1
- package/lib/module/utils/ConnectionUtil.js +27 -0
- package/lib/module/utils/ConnectionUtil.js.map +1 -0
- package/lib/module/utils/ConstantsUtil.js +9 -538
- package/lib/module/utils/ConstantsUtil.js.map +1 -1
- package/lib/module/utils/CoreHelperUtil.js +6 -12
- package/lib/module/utils/CoreHelperUtil.js.map +1 -1
- package/lib/module/utils/FetchUtil.js +28 -9
- package/lib/module/utils/FetchUtil.js.map +1 -1
- package/lib/module/utils/NetworkUtil.js +40 -0
- package/lib/module/utils/NetworkUtil.js.map +1 -0
- package/lib/module/utils/StorageUtil.js +42 -51
- package/lib/module/utils/StorageUtil.js.map +1 -1
- package/lib/module/utils/SwapApiUtil.js +21 -15
- package/lib/module/utils/SwapApiUtil.js.map +1 -1
- package/lib/typescript/controllers/AccountController.d.ts +4 -4
- package/lib/typescript/controllers/AccountController.d.ts.map +1 -1
- package/lib/typescript/controllers/ApiController.d.ts +2 -3
- package/lib/typescript/controllers/ApiController.d.ts.map +1 -1
- package/lib/typescript/controllers/BlockchainApiController.d.ts +15 -29
- package/lib/typescript/controllers/BlockchainApiController.d.ts.map +1 -1
- package/lib/typescript/controllers/ConnectionController.d.ts +11 -3
- package/lib/typescript/controllers/ConnectionController.d.ts.map +1 -1
- package/lib/typescript/controllers/ConnectorController.d.ts +18 -0
- package/lib/typescript/controllers/ConnectorController.d.ts.map +1 -0
- package/lib/typescript/controllers/ModalController.d.ts +1 -1
- package/lib/typescript/controllers/ModalController.d.ts.map +1 -1
- package/lib/typescript/controllers/NetworkController.d.ts +1 -1
- package/lib/typescript/controllers/NetworkController.d.ts.map +1 -1
- package/lib/typescript/controllers/OnRampController.d.ts +3 -1
- package/lib/typescript/controllers/OnRampController.d.ts.map +1 -1
- package/lib/typescript/controllers/OptionsController.d.ts +2 -7
- package/lib/typescript/controllers/OptionsController.d.ts.map +1 -1
- package/lib/typescript/controllers/PublicStateController.d.ts +1 -1
- package/lib/typescript/controllers/PublicStateController.d.ts.map +1 -1
- package/lib/typescript/controllers/RouterController.d.ts +16 -4
- package/lib/typescript/controllers/RouterController.d.ts.map +1 -1
- package/lib/typescript/controllers/SendController.d.ts +7 -5
- package/lib/typescript/controllers/SendController.d.ts.map +1 -1
- package/lib/typescript/controllers/SnackController.d.ts +3 -3
- package/lib/typescript/controllers/SnackController.d.ts.map +1 -1
- package/lib/typescript/controllers/SwapController.d.ts +11 -12
- package/lib/typescript/controllers/SwapController.d.ts.map +1 -1
- package/lib/typescript/controllers/ThemeController.d.ts +1 -1
- package/lib/typescript/controllers/ThemeController.d.ts.map +1 -1
- package/lib/typescript/controllers/TransactionsController.d.ts +3 -3
- package/lib/typescript/controllers/TransactionsController.d.ts.map +1 -1
- package/lib/typescript/controllers/WebviewController.d.ts +21 -0
- package/lib/typescript/controllers/WebviewController.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +4 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/utils/AssetUtil.d.ts +3 -2
- package/lib/typescript/utils/AssetUtil.d.ts.map +1 -1
- package/lib/typescript/utils/ConnectionUtil.d.ts +4 -0
- package/lib/typescript/utils/ConnectionUtil.d.ts.map +1 -0
- package/lib/typescript/utils/ConstantsUtil.d.ts +3 -422
- package/lib/typescript/utils/ConstantsUtil.d.ts.map +1 -1
- package/lib/typescript/utils/CoreHelperUtil.d.ts +4 -5
- package/lib/typescript/utils/CoreHelperUtil.d.ts.map +1 -1
- package/lib/typescript/utils/FetchUtil.d.ts +1 -1
- package/lib/typescript/utils/FetchUtil.d.ts.map +1 -1
- package/lib/typescript/utils/NetworkUtil.d.ts +8 -0
- package/lib/typescript/utils/NetworkUtil.d.ts.map +1 -0
- package/lib/typescript/utils/StorageUtil.d.ts +7 -14
- package/lib/typescript/utils/StorageUtil.d.ts.map +1 -1
- package/lib/typescript/utils/SwapApiUtil.d.ts +3 -3
- package/lib/typescript/utils/SwapApiUtil.d.ts.map +1 -1
- package/lib/typescript/utils/TypeUtil.d.ts +191 -42
- package/lib/typescript/utils/TypeUtil.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/controllers/AccountController.ts +27 -23
- package/src/controllers/ApiController.ts +10 -29
- package/src/controllers/BlockchainApiController.ts +65 -179
- package/src/controllers/ConnectionController.ts +24 -12
- package/src/controllers/ConnectorController.ts +63 -0
- package/src/controllers/EnsController.ts +2 -2
- package/src/controllers/EventsController.ts +1 -1
- package/src/controllers/ModalController.ts +8 -8
- package/src/controllers/NetworkController.ts +1 -1
- package/src/controllers/OnRampController.ts +99 -35
- package/src/controllers/OptionsController.ts +13 -19
- package/src/controllers/PublicStateController.ts +1 -1
- package/src/controllers/RouterController.ts +54 -5
- package/src/controllers/SendController.ts +113 -124
- package/src/controllers/SnackController.ts +5 -31
- package/src/controllers/SwapController.ts +181 -174
- package/src/controllers/ThemeController.ts +2 -11
- package/src/controllers/TransactionsController.ts +20 -26
- package/src/controllers/WebviewController.ts +63 -0
- package/src/index.ts +6 -3
- package/src/utils/AssetUtil.ts +20 -4
- package/src/utils/ConnectionUtil.ts +27 -0
- package/src/utils/ConstantsUtil.ts +9 -544
- package/src/utils/CoreHelperUtil.ts +9 -34
- package/src/utils/FetchUtil.ts +31 -10
- package/src/utils/NetworkUtil.ts +33 -0
- package/src/utils/StorageUtil.ts +48 -60
- package/src/utils/SwapApiUtil.ts +38 -27
- package/src/utils/TypeUtil.ts +193 -43
- package/lib/commonjs/controllers/ConnectionsController.js +0 -387
- package/lib/commonjs/controllers/ConnectionsController.js.map +0 -1
- package/lib/module/controllers/ConnectionsController.js +0 -382
- package/lib/module/controllers/ConnectionsController.js.map +0 -1
- package/lib/typescript/controllers/ConnectionsController.d.ts +0 -53
- package/lib/typescript/controllers/ConnectionsController.d.ts.map +0 -1
- package/src/controllers/ConnectionsController.ts +0 -509
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
import { subscribeKey as subKey } from 'valtio/utils';
|
|
2
2
|
import { proxy, subscribe as sub } from 'valtio';
|
|
3
|
-
import {
|
|
4
|
-
NumberUtil,
|
|
5
|
-
type CaipAddress,
|
|
6
|
-
type CaipNetworkId
|
|
7
|
-
} from '@reown/appkit-common-react-native';
|
|
3
|
+
import { NumberUtil } from '@reown/appkit-common-react-native';
|
|
8
4
|
|
|
9
5
|
import { ConstantsUtil } from '../utils/ConstantsUtil';
|
|
10
6
|
import { SwapApiUtil } from '../utils/SwapApiUtil';
|
|
7
|
+
import { NetworkController } from './NetworkController';
|
|
11
8
|
import { BlockchainApiController } from './BlockchainApiController';
|
|
12
9
|
import { OptionsController } from './OptionsController';
|
|
13
10
|
import { SwapCalculationUtil } from '../utils/SwapCalculationUtil';
|
|
14
11
|
import { SnackController } from './SnackController';
|
|
15
12
|
import { RouterController } from './RouterController';
|
|
16
13
|
import type { SwapInputTarget, SwapTokenWithBalance } from '../utils/TypeUtil';
|
|
14
|
+
import { ConnectorController } from './ConnectorController';
|
|
15
|
+
import { AccountController } from './AccountController';
|
|
17
16
|
import { CoreHelperUtil } from '../utils/CoreHelperUtil';
|
|
17
|
+
import { ConnectionController } from './ConnectionController';
|
|
18
18
|
import { TransactionsController } from './TransactionsController';
|
|
19
19
|
import { EventsController } from './EventsController';
|
|
20
|
-
import { ConnectionsController } from './ConnectionsController';
|
|
21
20
|
|
|
22
21
|
// -- Constants ---------------------------------------- //
|
|
23
22
|
export const INITIAL_GAS_LIMIT = 150000;
|
|
@@ -45,7 +44,8 @@ class TransactionError extends Error {
|
|
|
45
44
|
|
|
46
45
|
export interface SwapControllerState {
|
|
47
46
|
// Loading states
|
|
48
|
-
|
|
47
|
+
initializing: boolean;
|
|
48
|
+
initialized: boolean;
|
|
49
49
|
loadingPrices: boolean;
|
|
50
50
|
loadingQuote?: boolean;
|
|
51
51
|
loadingApprovalTransaction?: boolean;
|
|
@@ -68,6 +68,7 @@ export interface SwapControllerState {
|
|
|
68
68
|
toTokenAmount: string;
|
|
69
69
|
toTokenPriceInUSD: number;
|
|
70
70
|
networkPrice: string;
|
|
71
|
+
networkBalanceInUSD: string;
|
|
71
72
|
networkTokenSymbol: string;
|
|
72
73
|
inputError: string | undefined;
|
|
73
74
|
|
|
@@ -95,7 +96,8 @@ type StateKey = keyof SwapControllerState;
|
|
|
95
96
|
// -- State --------------------------------------------- //
|
|
96
97
|
const initialState: SwapControllerState = {
|
|
97
98
|
// Loading states
|
|
98
|
-
|
|
99
|
+
initializing: false,
|
|
100
|
+
initialized: false,
|
|
99
101
|
loadingPrices: false,
|
|
100
102
|
loadingQuote: false,
|
|
101
103
|
loadingApprovalTransaction: false,
|
|
@@ -118,6 +120,7 @@ const initialState: SwapControllerState = {
|
|
|
118
120
|
toTokenAmount: '',
|
|
119
121
|
toTokenPriceInUSD: 0,
|
|
120
122
|
networkPrice: '0',
|
|
123
|
+
networkBalanceInUSD: '0',
|
|
121
124
|
networkTokenSymbol: '',
|
|
122
125
|
inputError: undefined,
|
|
123
126
|
|
|
@@ -155,15 +158,10 @@ export const SwapController = {
|
|
|
155
158
|
},
|
|
156
159
|
|
|
157
160
|
getParams() {
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
if (!activeNamespace || !activeNetwork) {
|
|
163
|
-
throw new Error('No active namespace or network found to swap the tokens from.');
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
const networkAddress: CaipAddress = `${activeNetwork.caipNetworkId}:${ConstantsUtil.NATIVE_TOKEN_ADDRESS[activeNamespace]}`;
|
|
161
|
+
const caipAddress = AccountController.state.caipAddress;
|
|
162
|
+
const address = CoreHelperUtil.getPlainAddress(caipAddress);
|
|
163
|
+
const networkAddress = NetworkController.getActiveNetworkTokenAddress();
|
|
164
|
+
const type = ConnectorController.state.connectedConnector;
|
|
167
165
|
|
|
168
166
|
if (!address) {
|
|
169
167
|
throw new Error('No address found to swap the tokens from.');
|
|
@@ -179,9 +177,8 @@ export const SwapController = {
|
|
|
179
177
|
|
|
180
178
|
return {
|
|
181
179
|
networkAddress,
|
|
182
|
-
network: activeNetwork,
|
|
183
180
|
fromAddress: address,
|
|
184
|
-
fromCaipAddress:
|
|
181
|
+
fromCaipAddress: caipAddress,
|
|
185
182
|
sourceTokenAddress: state.sourceToken?.address,
|
|
186
183
|
toTokenAddress: state.toToken?.address,
|
|
187
184
|
toTokenAmount: state.toTokenAmount,
|
|
@@ -192,13 +189,13 @@ export const SwapController = {
|
|
|
192
189
|
invalidSourceToken,
|
|
193
190
|
invalidSourceTokenAmount,
|
|
194
191
|
availableToSwap:
|
|
195
|
-
|
|
196
|
-
isAuthConnector:
|
|
192
|
+
caipAddress && !invalidToToken && !invalidSourceToken && !invalidSourceTokenAmount,
|
|
193
|
+
isAuthConnector: type === 'AUTH'
|
|
197
194
|
};
|
|
198
195
|
},
|
|
199
196
|
|
|
200
197
|
switchTokens() {
|
|
201
|
-
if (state.
|
|
198
|
+
if (state.initializing || !state.initialized) {
|
|
202
199
|
return;
|
|
203
200
|
}
|
|
204
201
|
|
|
@@ -223,36 +220,41 @@ export const SwapController = {
|
|
|
223
220
|
this.swapTokens();
|
|
224
221
|
},
|
|
225
222
|
|
|
223
|
+
resetState() {
|
|
224
|
+
state.myTokensWithBalance = initialState.myTokensWithBalance;
|
|
225
|
+
state.tokensPriceMap = initialState.tokensPriceMap;
|
|
226
|
+
state.initialized = initialState.initialized;
|
|
227
|
+
state.sourceToken = initialState.sourceToken;
|
|
228
|
+
state.sourceTokenAmount = initialState.sourceTokenAmount;
|
|
229
|
+
state.sourceTokenPriceInUSD = initialState.sourceTokenPriceInUSD;
|
|
230
|
+
state.toToken = initialState.toToken;
|
|
231
|
+
state.toTokenAmount = initialState.toTokenAmount;
|
|
232
|
+
state.toTokenPriceInUSD = initialState.toTokenPriceInUSD;
|
|
233
|
+
state.networkPrice = initialState.networkPrice;
|
|
234
|
+
state.networkTokenSymbol = initialState.networkTokenSymbol;
|
|
235
|
+
state.networkBalanceInUSD = initialState.networkBalanceInUSD;
|
|
236
|
+
state.inputError = initialState.inputError;
|
|
237
|
+
},
|
|
238
|
+
|
|
226
239
|
async fetchTokens() {
|
|
227
|
-
|
|
228
|
-
const { networkAddress } = this.getParams();
|
|
240
|
+
const { networkAddress } = this.getParams();
|
|
229
241
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
await this.getMyTokensWithBalance();
|
|
242
|
+
await this.getTokenList();
|
|
243
|
+
await this.getNetworkTokenPrice();
|
|
244
|
+
await this.getMyTokensWithBalance();
|
|
234
245
|
|
|
235
|
-
|
|
246
|
+
const networkToken = state.tokens?.find(token => token.address === networkAddress);
|
|
236
247
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
248
|
+
if (networkToken) {
|
|
249
|
+
state.networkTokenSymbol = networkToken.symbol;
|
|
250
|
+
}
|
|
240
251
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
state.myTokensWithBalance?.find(token => token.address.startsWith(networkAddress)) ||
|
|
245
|
-
state.myTokensWithBalance?.[0];
|
|
252
|
+
const sourceToken =
|
|
253
|
+
state.myTokensWithBalance?.find(token => token.address.startsWith(networkAddress)) ||
|
|
254
|
+
state.myTokensWithBalance?.[0];
|
|
246
255
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
}
|
|
250
|
-
} catch (error) {
|
|
251
|
-
SnackController.showError('Failed to initialize swap');
|
|
252
|
-
RouterController.goBack();
|
|
253
|
-
} finally {
|
|
254
|
-
state.loadingTokens = false;
|
|
255
|
-
}
|
|
256
|
+
this.setSourceToken(sourceToken);
|
|
257
|
+
this.setSourceTokenAmount('1');
|
|
256
258
|
},
|
|
257
259
|
|
|
258
260
|
async getTokenList() {
|
|
@@ -278,23 +280,21 @@ export const SwapController = {
|
|
|
278
280
|
}, {});
|
|
279
281
|
},
|
|
280
282
|
|
|
281
|
-
async getMyTokensWithBalance(forceUpdate?:
|
|
282
|
-
await
|
|
283
|
-
|
|
284
|
-
if (!
|
|
283
|
+
async getMyTokensWithBalance(forceUpdate?: string) {
|
|
284
|
+
const balances = await SwapApiUtil.getMyTokensWithBalance(forceUpdate);
|
|
285
|
+
|
|
286
|
+
if (!balances) {
|
|
285
287
|
return;
|
|
286
288
|
}
|
|
287
289
|
|
|
288
290
|
await this.getInitialGasPrice();
|
|
289
|
-
this.setBalances(
|
|
291
|
+
this.setBalances(balances);
|
|
290
292
|
},
|
|
291
293
|
|
|
292
|
-
getFilteredPopularTokens(
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
return state.popularTokens?.filter(token => !balances.some(t => t.address === token.address));
|
|
294
|
+
getFilteredPopularTokens() {
|
|
295
|
+
return state.popularTokens?.filter(
|
|
296
|
+
token => !state.myTokensWithBalance?.some(t => t.address === token.address)
|
|
297
|
+
);
|
|
298
298
|
},
|
|
299
299
|
|
|
300
300
|
setSourceToken(sourceToken: SwapTokenWithBalance | undefined) {
|
|
@@ -318,10 +318,26 @@ export const SwapController = {
|
|
|
318
318
|
}
|
|
319
319
|
},
|
|
320
320
|
|
|
321
|
-
async
|
|
322
|
-
|
|
323
|
-
|
|
321
|
+
async initializeState() {
|
|
322
|
+
if (state.initializing) {
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
324
325
|
|
|
326
|
+
state.initializing = true;
|
|
327
|
+
if (!state.initialized) {
|
|
328
|
+
try {
|
|
329
|
+
await this.fetchTokens();
|
|
330
|
+
state.initialized = true;
|
|
331
|
+
} catch (error) {
|
|
332
|
+
state.initialized = false;
|
|
333
|
+
SnackController.showError('Failed to initialize swap');
|
|
334
|
+
RouterController.goBack();
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
state.initializing = false;
|
|
338
|
+
},
|
|
339
|
+
|
|
340
|
+
async getAddressPrice(address: string) {
|
|
325
341
|
const existPrice = state.tokensPriceMap[address];
|
|
326
342
|
|
|
327
343
|
if (existPrice) {
|
|
@@ -330,8 +346,7 @@ export const SwapController = {
|
|
|
330
346
|
|
|
331
347
|
const response = await BlockchainApiController.fetchTokenPrice({
|
|
332
348
|
projectId: OptionsController.state.projectId,
|
|
333
|
-
addresses: [address]
|
|
334
|
-
caipNetworkId: networkId
|
|
349
|
+
addresses: [address]
|
|
335
350
|
});
|
|
336
351
|
const fungibles = response?.fungibles || [];
|
|
337
352
|
const allTokens = [...(state.tokens || []), ...(state.myTokensWithBalance || [])];
|
|
@@ -346,13 +361,10 @@ export const SwapController = {
|
|
|
346
361
|
|
|
347
362
|
async getNetworkTokenPrice() {
|
|
348
363
|
const { networkAddress } = this.getParams();
|
|
349
|
-
const [namespace, chain] = networkAddress.split(':');
|
|
350
|
-
const networkId: CaipNetworkId = `${namespace}:${chain}`;
|
|
351
364
|
|
|
352
365
|
const response = await BlockchainApiController.fetchTokenPrice({
|
|
353
366
|
projectId: OptionsController.state.projectId,
|
|
354
|
-
addresses: [networkAddress]
|
|
355
|
-
caipNetworkId: networkId
|
|
367
|
+
addresses: [networkAddress]
|
|
356
368
|
});
|
|
357
369
|
|
|
358
370
|
const token = response?.fungibles?.[0];
|
|
@@ -388,11 +400,24 @@ export const SwapController = {
|
|
|
388
400
|
},
|
|
389
401
|
|
|
390
402
|
setBalances(balances: SwapTokenWithBalance[]) {
|
|
391
|
-
|
|
403
|
+
const { networkAddress } = this.getParams();
|
|
404
|
+
const caipNetwork = NetworkController.state.caipNetwork;
|
|
405
|
+
|
|
406
|
+
if (!caipNetwork) {
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
const networkToken = balances.find(token => token.address === networkAddress);
|
|
392
411
|
|
|
393
412
|
balances.forEach(token => {
|
|
394
413
|
state.tokensPriceMap[token.address] = token.price || 0;
|
|
395
414
|
});
|
|
415
|
+
|
|
416
|
+
state.myTokensWithBalance = balances.filter(token => token.address?.startsWith(caipNetwork.id));
|
|
417
|
+
|
|
418
|
+
state.networkBalanceInUSD = networkToken
|
|
419
|
+
? NumberUtil.multiply(networkToken.quantity.numeric, networkToken.price).toString()
|
|
420
|
+
: '0';
|
|
396
421
|
},
|
|
397
422
|
|
|
398
423
|
setToToken(toToken: SwapTokenWithBalance | undefined) {
|
|
@@ -414,7 +439,7 @@ export const SwapController = {
|
|
|
414
439
|
: '';
|
|
415
440
|
},
|
|
416
441
|
|
|
417
|
-
async setTokenPrice(address:
|
|
442
|
+
async setTokenPrice(address: string, target: SwapInputTarget) {
|
|
418
443
|
let price = state.tokensPriceMap[address] || 0;
|
|
419
444
|
|
|
420
445
|
if (!price) {
|
|
@@ -439,12 +464,12 @@ export const SwapController = {
|
|
|
439
464
|
|
|
440
465
|
// -- Swap ---------------------------------------------- //
|
|
441
466
|
async swapTokens() {
|
|
442
|
-
const address =
|
|
467
|
+
const address = AccountController.state.address as `${string}:${string}:${string}`;
|
|
443
468
|
const sourceToken = state.sourceToken;
|
|
444
469
|
const toToken = state.toToken;
|
|
445
470
|
const haveSourceTokenAmount = NumberUtil.bigNumber(state.sourceTokenAmount).isGreaterThan(0);
|
|
446
471
|
|
|
447
|
-
if (!toToken || !sourceToken || state.loadingPrices || !haveSourceTokenAmount
|
|
472
|
+
if (!toToken || !sourceToken || state.loadingPrices || !haveSourceTokenAmount) {
|
|
448
473
|
return;
|
|
449
474
|
}
|
|
450
475
|
|
|
@@ -454,45 +479,39 @@ export const SwapController = {
|
|
|
454
479
|
.multipliedBy(10 ** sourceToken.decimals)
|
|
455
480
|
.integerValue();
|
|
456
481
|
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
});
|
|
482
|
+
const quoteResponse = await BlockchainApiController.fetchSwapQuote({
|
|
483
|
+
userAddress: address,
|
|
484
|
+
projectId: OptionsController.state.projectId,
|
|
485
|
+
from: sourceToken.address,
|
|
486
|
+
to: toToken.address,
|
|
487
|
+
gasPrice: state.gasFee,
|
|
488
|
+
amount: amountDecimal.toString()
|
|
489
|
+
});
|
|
466
490
|
|
|
467
|
-
|
|
491
|
+
state.loadingQuote = false;
|
|
468
492
|
|
|
469
|
-
|
|
470
|
-
state.loadingQuote = false;
|
|
493
|
+
const quoteToAmount = quoteResponse?.quotes?.[0]?.toAmount;
|
|
471
494
|
|
|
472
|
-
|
|
473
|
-
|
|
495
|
+
if (!quoteToAmount) {
|
|
496
|
+
return;
|
|
497
|
+
}
|
|
474
498
|
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
499
|
+
const toTokenAmount = NumberUtil.bigNumber(quoteToAmount)
|
|
500
|
+
.dividedBy(10 ** toToken.decimals)
|
|
501
|
+
.toString();
|
|
478
502
|
|
|
479
|
-
|
|
503
|
+
this.setToTokenAmount(toTokenAmount);
|
|
480
504
|
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
505
|
+
const isInsufficientToken = this.hasInsufficientToken(
|
|
506
|
+
state.sourceTokenAmount,
|
|
507
|
+
sourceToken.address
|
|
508
|
+
);
|
|
485
509
|
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
}
|
|
492
|
-
} catch (error) {
|
|
493
|
-
SnackController.showError('Failed to get swap quote');
|
|
494
|
-
} finally {
|
|
495
|
-
state.loadingQuote = false;
|
|
510
|
+
if (isInsufficientToken) {
|
|
511
|
+
state.inputError = 'Insufficient balance';
|
|
512
|
+
} else {
|
|
513
|
+
state.inputError = undefined;
|
|
514
|
+
this.setTransactionDetails();
|
|
496
515
|
}
|
|
497
516
|
},
|
|
498
517
|
|
|
@@ -561,7 +580,7 @@ export const SwapController = {
|
|
|
561
580
|
if (!response) {
|
|
562
581
|
throw new Error('createAllowanceTransaction - No response from generateApproveCalldata');
|
|
563
582
|
}
|
|
564
|
-
const gasLimit = await
|
|
583
|
+
const gasLimit = await ConnectionController.estimateGas({
|
|
565
584
|
address: fromAddress as `0x${string}`,
|
|
566
585
|
to: CoreHelperUtil.getPlainAddress(response.tx.to) as `0x${string}`,
|
|
567
586
|
data: response.tx.data
|
|
@@ -614,7 +633,7 @@ export const SwapController = {
|
|
|
614
633
|
return undefined;
|
|
615
634
|
}
|
|
616
635
|
|
|
617
|
-
const amount =
|
|
636
|
+
const amount = ConnectionController.parseUnits(
|
|
618
637
|
sourceTokenAmount,
|
|
619
638
|
sourceToken.decimals
|
|
620
639
|
)?.toString();
|
|
@@ -664,32 +683,42 @@ export const SwapController = {
|
|
|
664
683
|
},
|
|
665
684
|
|
|
666
685
|
async sendTransactionForApproval(data: TransactionParams) {
|
|
667
|
-
const { fromAddress,
|
|
668
|
-
state.loadingApprovalTransaction = true;
|
|
686
|
+
const { fromAddress, isAuthConnector } = this.getParams();
|
|
669
687
|
|
|
670
|
-
|
|
688
|
+
state.loadingApprovalTransaction = true;
|
|
689
|
+
const approveLimitMessage = `Approve limit increase in your wallet`;
|
|
690
|
+
|
|
691
|
+
if (isAuthConnector) {
|
|
692
|
+
RouterController.pushTransactionStack({
|
|
693
|
+
view: null,
|
|
694
|
+
goBack: true,
|
|
695
|
+
onSuccess() {
|
|
696
|
+
SnackController.showLoading(approveLimitMessage);
|
|
697
|
+
}
|
|
698
|
+
});
|
|
699
|
+
} else {
|
|
700
|
+
SnackController.showLoading(approveLimitMessage);
|
|
701
|
+
}
|
|
671
702
|
|
|
672
703
|
try {
|
|
673
|
-
await
|
|
704
|
+
await ConnectionController.sendTransaction({
|
|
674
705
|
address: fromAddress as `0x${string}`,
|
|
675
706
|
to: data.to as `0x${string}`,
|
|
676
707
|
data: data.data as `0x${string}`,
|
|
677
708
|
value: BigInt(data.value),
|
|
678
709
|
gasPrice: BigInt(data.gasPrice),
|
|
679
|
-
chainNamespace:
|
|
680
|
-
network
|
|
710
|
+
chainNamespace: 'eip155'
|
|
681
711
|
});
|
|
682
712
|
|
|
683
713
|
await this.swapTokens();
|
|
684
714
|
await this.getTransaction();
|
|
685
715
|
state.approvalTransaction = undefined;
|
|
716
|
+
state.loadingApprovalTransaction = false;
|
|
686
717
|
} catch (err) {
|
|
687
718
|
const error = err as TransactionError;
|
|
688
719
|
state.transactionError = error?.shortMessage as unknown as string;
|
|
689
|
-
|
|
690
|
-
SnackController.showError(error?.shortMessage ?? 'Transaction error');
|
|
691
|
-
} finally {
|
|
692
720
|
state.loadingApprovalTransaction = false;
|
|
721
|
+
SnackController.showError(error?.shortMessage ?? 'Transaction error');
|
|
693
722
|
}
|
|
694
723
|
},
|
|
695
724
|
|
|
@@ -697,53 +726,68 @@ export const SwapController = {
|
|
|
697
726
|
if (!data) {
|
|
698
727
|
return undefined;
|
|
699
728
|
}
|
|
700
|
-
const { fromAddress, isAuthConnector, network } = this.getParams();
|
|
701
729
|
|
|
702
|
-
|
|
730
|
+
const { fromAddress, toTokenAmount, isAuthConnector } = this.getParams();
|
|
703
731
|
|
|
704
|
-
|
|
732
|
+
state.loadingTransaction = true;
|
|
705
733
|
|
|
706
|
-
|
|
734
|
+
const snackbarPendingMessage = `Swapping ${state.sourceToken
|
|
735
|
+
?.symbol} to ${NumberUtil.formatNumberToLocalString(toTokenAmount, 3)} ${state.toToken
|
|
736
|
+
?.symbol}`;
|
|
737
|
+
const snackbarSuccessMessage = `Swapped ${state.sourceToken
|
|
738
|
+
?.symbol} to ${NumberUtil.formatNumberToLocalString(toTokenAmount, 3)} ${state.toToken
|
|
739
|
+
?.symbol}`;
|
|
740
|
+
|
|
741
|
+
if (isAuthConnector) {
|
|
742
|
+
RouterController.pushTransactionStack({
|
|
743
|
+
view: 'Account',
|
|
744
|
+
goBack: false,
|
|
745
|
+
onSuccess() {
|
|
746
|
+
SnackController.showLoading(snackbarPendingMessage);
|
|
747
|
+
SwapController.resetState();
|
|
748
|
+
}
|
|
749
|
+
});
|
|
750
|
+
} else {
|
|
751
|
+
SnackController.showLoading('Confirm transaction in your wallet');
|
|
752
|
+
}
|
|
707
753
|
|
|
708
754
|
try {
|
|
709
|
-
const forceUpdateAddresses = [state.sourceToken?.address, state.toToken?.address].
|
|
710
|
-
|
|
711
|
-
) as CaipAddress[];
|
|
712
|
-
|
|
713
|
-
const transactionHash = await ConnectionsController.sendTransaction({
|
|
755
|
+
const forceUpdateAddresses = [state.sourceToken?.address, state.toToken?.address].join(',');
|
|
756
|
+
const transactionHash = await ConnectionController.sendTransaction({
|
|
714
757
|
address: fromAddress as `0x${string}`,
|
|
715
758
|
to: data.to as `0x${string}`,
|
|
716
759
|
data: data.data as `0x${string}`,
|
|
717
760
|
gas: data.gas,
|
|
718
761
|
gasPrice: BigInt(data.gasPrice),
|
|
719
762
|
value: data.value,
|
|
720
|
-
chainNamespace:
|
|
721
|
-
network
|
|
763
|
+
chainNamespace: 'eip155'
|
|
722
764
|
});
|
|
723
765
|
|
|
724
766
|
state.loadingTransaction = false;
|
|
725
|
-
|
|
726
|
-
SnackController.showSuccess(snackbarSuccessMessage, true);
|
|
767
|
+
SnackController.showSuccess(snackbarSuccessMessage);
|
|
727
768
|
EventsController.sendEvent({
|
|
728
769
|
type: 'track',
|
|
729
770
|
event: 'SWAP_SUCCESS',
|
|
730
771
|
properties: {
|
|
731
|
-
network:
|
|
772
|
+
network: NetworkController.state.caipNetwork?.id || '',
|
|
732
773
|
swapFromToken: this.state.sourceToken?.symbol || '',
|
|
733
774
|
swapToToken: this.state.toToken?.symbol || '',
|
|
734
775
|
swapFromAmount: this.state.sourceTokenAmount || '',
|
|
735
776
|
swapToAmount: this.state.toTokenAmount || '',
|
|
736
|
-
isSmartAccount:
|
|
777
|
+
isSmartAccount: AccountController.state.preferredAccountType === 'smartAccount'
|
|
737
778
|
}
|
|
738
779
|
});
|
|
739
|
-
|
|
740
|
-
|
|
780
|
+
SwapController.resetState();
|
|
781
|
+
|
|
782
|
+
if (!isAuthConnector) {
|
|
783
|
+
RouterController.replace('AccountDefault');
|
|
784
|
+
}
|
|
785
|
+
|
|
741
786
|
SwapController.getMyTokensWithBalance(forceUpdateAddresses);
|
|
787
|
+
AccountController.fetchTokenBalance();
|
|
742
788
|
|
|
743
789
|
setTimeout(() => {
|
|
744
|
-
|
|
745
|
-
TransactionsController.fetchTransactions(ConnectionsController.state.activeAddress, true);
|
|
746
|
-
}
|
|
790
|
+
TransactionsController.fetchTransactions(AccountController.state.address, true);
|
|
747
791
|
}, 5000);
|
|
748
792
|
|
|
749
793
|
return transactionHash;
|
|
@@ -757,12 +801,12 @@ export const SwapController = {
|
|
|
757
801
|
event: 'SWAP_ERROR',
|
|
758
802
|
properties: {
|
|
759
803
|
message: error?.shortMessage ?? error?.message ?? 'Unknown',
|
|
760
|
-
network:
|
|
804
|
+
network: NetworkController.state.caipNetwork?.id || '',
|
|
761
805
|
swapFromToken: this.state.sourceToken?.symbol || '',
|
|
762
806
|
swapToToken: this.state.toToken?.symbol || '',
|
|
763
807
|
swapFromAmount: this.state.sourceTokenAmount || '',
|
|
764
808
|
swapToAmount: this.state.toTokenAmount || '',
|
|
765
|
-
isSmartAccount:
|
|
809
|
+
isSmartAccount: AccountController.state.preferredAccountType === 'smartAccount'
|
|
766
810
|
}
|
|
767
811
|
});
|
|
768
812
|
|
|
@@ -770,45 +814,8 @@ export const SwapController = {
|
|
|
770
814
|
}
|
|
771
815
|
},
|
|
772
816
|
|
|
773
|
-
clearTransactionLoaders() {
|
|
774
|
-
state.loadingApprovalTransaction = false;
|
|
775
|
-
state.loadingBuildTransaction = false;
|
|
776
|
-
state.loadingTransaction = false;
|
|
777
|
-
},
|
|
778
|
-
|
|
779
|
-
clearTokens() {
|
|
780
|
-
state.sourceToken = initialState.sourceToken;
|
|
781
|
-
state.sourceTokenAmount = initialState.sourceTokenAmount;
|
|
782
|
-
state.sourceTokenPriceInUSD = initialState.sourceTokenPriceInUSD;
|
|
783
|
-
state.toToken = initialState.toToken;
|
|
784
|
-
state.toTokenAmount = initialState.toTokenAmount;
|
|
785
|
-
state.toTokenPriceInUSD = initialState.toTokenPriceInUSD;
|
|
786
|
-
state.inputError = initialState.inputError;
|
|
787
|
-
state.loadingApprovalTransaction = initialState.loadingApprovalTransaction;
|
|
788
|
-
state.loadingBuildTransaction = initialState.loadingBuildTransaction;
|
|
789
|
-
state.loadingTransaction = initialState.loadingTransaction;
|
|
790
|
-
state.fetchError = initialState.fetchError;
|
|
791
|
-
state.transactionError = initialState.transactionError;
|
|
792
|
-
state.swapTransaction = initialState.swapTransaction;
|
|
793
|
-
state.approvalTransaction = initialState.approvalTransaction;
|
|
794
|
-
},
|
|
795
|
-
|
|
796
|
-
resetState() {
|
|
797
|
-
this.clearTokens();
|
|
798
|
-
state.myTokensWithBalance = initialState.myTokensWithBalance;
|
|
799
|
-
state.tokensPriceMap = initialState.tokensPriceMap;
|
|
800
|
-
state.networkPrice = initialState.networkPrice;
|
|
801
|
-
state.networkTokenSymbol = initialState.networkTokenSymbol;
|
|
802
|
-
},
|
|
803
|
-
|
|
804
817
|
// -- Checks -------------------------------------------- //
|
|
805
818
|
hasInsufficientToken(sourceTokenAmount: string, sourceTokenAddress: string) {
|
|
806
|
-
const { balances } = ConnectionsController.state;
|
|
807
|
-
const networkToken = balances?.find(t => t.address === undefined);
|
|
808
|
-
const networkBalanceInUSD = networkToken
|
|
809
|
-
? NumberUtil.multiply(networkToken.quantity?.numeric ?? '0', networkToken.price).toString()
|
|
810
|
-
: '0';
|
|
811
|
-
|
|
812
819
|
const isInsufficientSourceTokenForSwap = SwapCalculationUtil.isInsufficientSourceTokenForSwap(
|
|
813
820
|
sourceTokenAmount,
|
|
814
821
|
sourceTokenAddress,
|
|
@@ -816,12 +823,12 @@ export const SwapController = {
|
|
|
816
823
|
);
|
|
817
824
|
|
|
818
825
|
let insufficientNetworkTokenForGas = true;
|
|
819
|
-
if (
|
|
826
|
+
if (AccountController.state.preferredAccountType === 'smartAccount') {
|
|
820
827
|
// Smart Accounts may pay gas in any ERC20 token
|
|
821
828
|
insufficientNetworkTokenForGas = false;
|
|
822
829
|
} else {
|
|
823
830
|
insufficientNetworkTokenForGas = SwapCalculationUtil.isInsufficientNetworkTokenForGas(
|
|
824
|
-
networkBalanceInUSD,
|
|
831
|
+
state.networkBalanceInUSD,
|
|
825
832
|
state.gasPriceInUSD
|
|
826
833
|
);
|
|
827
834
|
}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { Appearance } from 'react-native';
|
|
2
1
|
import { proxy, subscribe as sub } from 'valtio';
|
|
3
2
|
import type { ThemeMode, ThemeVariables } from '@reown/appkit-common-react-native';
|
|
4
3
|
|
|
5
4
|
// -- Types --------------------------------------------- //
|
|
6
5
|
export interface ThemeControllerState {
|
|
7
6
|
themeMode?: ThemeMode;
|
|
8
|
-
themeVariables
|
|
7
|
+
themeVariables: ThemeVariables;
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
// -- State --------------------------------------------- //
|
|
@@ -23,18 +22,10 @@ export const ThemeController = {
|
|
|
23
22
|
},
|
|
24
23
|
|
|
25
24
|
setThemeMode(themeMode: ThemeControllerState['themeMode']) {
|
|
26
|
-
|
|
27
|
-
state.themeMode = Appearance.getColorScheme() as ThemeMode;
|
|
28
|
-
} else {
|
|
29
|
-
state.themeMode = themeMode;
|
|
30
|
-
}
|
|
25
|
+
state.themeMode = themeMode;
|
|
31
26
|
},
|
|
32
27
|
|
|
33
28
|
setThemeVariables(themeVariables: ThemeControllerState['themeVariables']) {
|
|
34
|
-
if (!themeVariables) {
|
|
35
|
-
state.themeVariables = {};
|
|
36
|
-
}
|
|
37
|
-
|
|
38
29
|
state.themeVariables = { ...state.themeVariables, ...themeVariables };
|
|
39
30
|
}
|
|
40
31
|
};
|