@openocean.finance/widget 1.0.43 → 1.0.45
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/dist/esm/App.js.map +1 -1
- package/dist/esm/AppDrawer.style.d.ts +1 -1
- package/dist/esm/components/ActiveTransactions/ActiveTransactions.style.d.ts +2 -2
- package/dist/esm/components/AmountInput/AmountInput.style.d.ts +1 -1
- package/dist/esm/components/AmountInput/AmountInputAdornment.style.d.ts +1 -1
- package/dist/esm/components/AmountInput/AmountInputEndAdornment.js +37 -33
- package/dist/esm/components/AmountInput/AmountInputEndAdornment.js.map +1 -1
- package/dist/esm/components/Avatar/Avatar.style.d.ts +1 -1
- package/dist/esm/components/Avatar/SmallAvatar.d.ts +1 -1
- package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.js +1 -1
- package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.js.map +1 -1
- package/dist/esm/components/ButtonTertiary.d.ts +1 -1
- package/dist/esm/components/Card/CardHeader.d.ts +1 -1
- package/dist/esm/components/Card/CardIconButton.d.ts +1 -1
- package/dist/esm/components/Card/InputCard.d.ts +1 -1
- package/dist/esm/components/ContractComponent/NFT/NFT.style.d.ts +1 -1
- package/dist/esm/components/Header/Header.style.d.ts +2 -2
- package/dist/esm/components/Header/SettingsButton.style.d.ts +2 -2
- package/dist/esm/components/Header/WalletHeader.js +4 -4
- package/dist/esm/components/Header/WalletHeader.js.map +1 -1
- package/dist/esm/components/ListItem/ListItem.d.ts +1 -1
- package/dist/esm/components/Messages/WarningMessages.js +1 -0
- package/dist/esm/components/Messages/WarningMessages.js.map +1 -1
- package/dist/esm/components/Messages/useMessageQueue.js +1 -1
- package/dist/esm/components/Messages/useMessageQueue.js.map +1 -1
- package/dist/esm/components/Search/SearchInput.style.d.ts +1 -1
- package/dist/esm/components/SelectTokenButton/SelectTokenButton.style.d.ts +1 -1
- package/dist/esm/components/SendToWallet/SendToWallet.style.d.ts +1 -1
- package/dist/esm/components/Skeleton/WidgetSkeleton.style.d.ts +3 -3
- package/dist/esm/components/StepActions/StepActions.style.d.ts +1 -1
- package/dist/esm/components/Tabs/Tabs.style.d.ts +2 -2
- package/dist/esm/components/TokenList/TokenList.style.d.ts +2 -2
- package/dist/esm/components/TransactionDetails.js +4 -1
- package/dist/esm/components/TransactionDetails.js.map +1 -1
- package/dist/esm/config/defaultChainIds.js +3 -0
- package/dist/esm/config/defaultChainIds.js.map +1 -1
- package/dist/esm/config/version.d.ts +1 -1
- package/dist/esm/config/version.js +1 -1
- package/dist/esm/cross/adapters/AcrossAdapter.js +21 -22
- package/dist/esm/cross/adapters/AcrossAdapter.js.map +1 -1
- package/dist/esm/cross/adapters/BaseSwapAdapter.d.ts +17 -9
- package/dist/esm/cross/adapters/BaseSwapAdapter.js +15 -4
- package/dist/esm/cross/adapters/BaseSwapAdapter.js.map +1 -1
- package/dist/esm/cross/adapters/DebridgeAdapter.js +8 -7
- package/dist/esm/cross/adapters/DebridgeAdapter.js.map +1 -1
- package/dist/esm/cross/adapters/LifiAdapter.js +7 -6
- package/dist/esm/cross/adapters/LifiAdapter.js.map +1 -1
- package/dist/esm/cross/adapters/MayanAdapter.js +1 -2
- package/dist/esm/cross/adapters/MayanAdapter.js.map +1 -1
- package/dist/esm/cross/adapters/NearIntentsAdapter.d.ts +13 -6
- package/dist/esm/cross/adapters/NearIntentsAdapter.js +252 -75
- package/dist/esm/cross/adapters/NearIntentsAdapter.js.map +1 -1
- package/dist/esm/cross/adapters/OptimexAdapter.js +2 -1
- package/dist/esm/cross/adapters/OptimexAdapter.js.map +1 -1
- package/dist/esm/cross/adapters/OrbiterAdapter.js +9 -8
- package/dist/esm/cross/adapters/OrbiterAdapter.js.map +1 -1
- package/dist/esm/cross/adapters/RelayAdapter.js +40 -15
- package/dist/esm/cross/adapters/RelayAdapter.js.map +1 -1
- package/dist/esm/cross/adapters/SymbiosisAdapter.js +13 -14
- package/dist/esm/cross/adapters/SymbiosisAdapter.js.map +1 -1
- package/dist/esm/cross/adapters/XYFinanceAdapter.js +13 -17
- package/dist/esm/cross/adapters/XYFinanceAdapter.js.map +1 -1
- package/dist/esm/cross/adapters/index.d.ts +2 -0
- package/dist/esm/cross/adapters/index.js +2 -1
- package/dist/esm/cross/adapters/index.js.map +1 -1
- package/dist/esm/cross/constants/index.d.ts +3 -1
- package/dist/esm/cross/constants/index.js +2 -0
- package/dist/esm/cross/constants/index.js.map +1 -1
- package/dist/esm/cross/crossChainQuote.d.ts +1 -1
- package/dist/esm/cross/crossChainQuote.js +75 -12
- package/dist/esm/cross/crossChainQuote.js.map +1 -1
- package/dist/esm/cross/factory.d.ts +3 -1
- package/dist/esm/cross/factory.js +10 -12
- package/dist/esm/cross/factory.js.map +1 -1
- package/dist/esm/cross/registry.d.ts +1 -1
- package/dist/esm/hooks/useAvailableChains.js +47 -40
- package/dist/esm/hooks/useAvailableChains.js.map +1 -1
- package/dist/esm/hooks/useChains.js.map +1 -1
- package/dist/esm/hooks/useRoutes.js +11 -3
- package/dist/esm/hooks/useRoutes.js.map +1 -1
- package/dist/esm/hooks/useSwapOnly.js +8 -2
- package/dist/esm/hooks/useSwapOnly.js.map +1 -1
- package/dist/esm/hooks/useTokenAddressBalance.js.map +1 -1
- package/dist/esm/hooks/useTokens.d.ts +1 -0
- package/dist/esm/hooks/useTokens.js +14 -0
- package/dist/esm/hooks/useTokens.js.map +1 -1
- package/dist/esm/i18n/en.json +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/pages/MainPage/MainWarningMessages.js.map +1 -1
- package/dist/esm/pages/SendToWallet/BookmarksPage.js +1 -1
- package/dist/esm/pages/SendToWallet/BookmarksPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/RecentWalletsPage.js +2 -2
- package/dist/esm/pages/SendToWallet/RecentWalletsPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/SendToConfiguredWalletPage.js +2 -2
- package/dist/esm/pages/SendToWallet/SendToConfiguredWalletPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/SendToWalletPage.style.d.ts +5 -5
- package/dist/esm/pages/SettingsPage/SettingsCard/SettingCard.style.d.ts +1 -1
- package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
- package/dist/esm/services/ExecuteRoute.d.ts +1 -0
- package/dist/esm/services/ExecuteRoute.js +292 -9
- package/dist/esm/services/ExecuteRoute.js.map +1 -1
- package/dist/esm/services/OpenOceanService.js +30 -4
- package/dist/esm/services/OpenOceanService.js.map +1 -1
- package/dist/esm/stores/bookmarks/createBookmarkStore.js.map +1 -1
- package/dist/esm/types/widget.d.ts +1 -1
- package/dist/esm/types/widget.js.map +1 -1
- package/dist/esm/utils/chainType.d.ts +1 -0
- package/dist/esm/utils/chainType.js +15 -0
- package/dist/esm/utils/chainType.js.map +1 -1
- package/dist/esm/utils/getPriceImpact.js +3 -3
- package/dist/esm/utils/getPriceImpact.js.map +1 -1
- package/package.json +19 -7
- package/src/App.tsx +0 -1
- package/src/components/AmountInput/AmountInputEndAdornment.tsx +39 -34
- package/src/components/BaseTransactionButton/BaseTransactionButton.tsx +3 -2
- package/src/components/Header/WalletHeader.tsx +4 -4
- package/src/components/Messages/WarningMessages.tsx +1 -0
- package/src/components/Messages/useMessageQueue.ts +1 -1
- package/src/components/TransactionDetails.tsx +8 -4
- package/src/config/defaultChainIds.ts +3 -0
- package/src/config/version.ts +1 -1
- package/src/cross/adapters/AcrossAdapter.ts +21 -22
- package/src/cross/adapters/BaseSwapAdapter.ts +24 -8
- package/src/cross/adapters/DebridgeAdapter.ts +11 -11
- package/src/cross/adapters/LifiAdapter.ts +11 -10
- package/src/cross/adapters/MayanAdapter.ts +1 -2
- package/src/cross/adapters/NearIntentsAdapter.ts +303 -129
- package/src/cross/adapters/OptimexAdapter.ts +12 -11
- package/src/cross/adapters/OrbiterAdapter.ts +17 -16
- package/src/cross/adapters/RelayAdapter.ts +42 -17
- package/src/cross/adapters/SymbiosisAdapter.ts +13 -14
- package/src/cross/adapters/XYFinanceAdapter.ts +15 -19
- package/src/cross/adapters/index.ts +2 -1
- package/src/cross/constants/index.ts +4 -0
- package/src/cross/crossChainQuote.ts +79 -21
- package/src/cross/factory.ts +12 -12
- package/src/cross/registry.ts +1 -1
- package/src/hooks/useAvailableChains.ts +50 -43
- package/src/hooks/useChains.ts +0 -1
- package/src/hooks/useExplorer.ts +6 -6
- package/src/hooks/useRoutes.ts +12 -4
- package/src/hooks/useSwapOnly.ts +9 -2
- package/src/hooks/useTokenAddressBalance.ts +1 -1
- package/src/hooks/useTokens.ts +20 -5
- package/src/i18n/en.json +2 -2
- package/src/index.ts +0 -1
- package/src/pages/MainPage/MainWarningMessages.tsx +0 -1
- package/src/pages/SendToWallet/BookmarksPage.tsx +1 -1
- package/src/pages/SendToWallet/RecentWalletsPage.tsx +2 -2
- package/src/pages/SendToWallet/SendToConfiguredWalletPage.tsx +2 -2
- package/src/providers/WidgetProvider/WidgetProvider.tsx +0 -1
- package/src/services/ExecuteRoute.ts +426 -64
- package/src/services/OpenOceanService.ts +31 -7
- package/src/stores/bookmarks/createBookmarkStore.ts +15 -15
- package/src/types/widget.ts +2 -1
- package/src/utils/chainType.ts +25 -1
- package/src/utils/getPriceImpact.ts +3 -3
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -3,7 +3,7 @@ import { Currency } from '../constants/index.js'
|
|
|
3
3
|
import { useWalletSelector } from '@near-wallet-selector/react-hook'
|
|
4
4
|
import { WalletAdapterProps } from '@solana/wallet-adapter-base'
|
|
5
5
|
import { Connection, Transaction, VersionedTransaction } from '@solana/web3.js'
|
|
6
|
-
import { getPublicClient } from '
|
|
6
|
+
import { getPublicClient } from 'wagmi/actions'
|
|
7
7
|
import { WalletClient, formatUnits } from 'viem'
|
|
8
8
|
import { useConfig } from 'wagmi'
|
|
9
9
|
import { CROSS_CHAIN_FEE_RECEIVER, CROSS_CHAIN_FEE_RECEIVER_SOLANA, ZERO_ADDRESS } from '../constants/index.js'
|
|
@@ -53,27 +53,27 @@ export class OrbiterAdapter extends BaseSwapAdapter {
|
|
|
53
53
|
const fromToken = params.fromToken as any
|
|
54
54
|
const toToken = params.toToken as any
|
|
55
55
|
const body = {
|
|
56
|
-
sourceChainId: params.fromChain ===
|
|
57
|
-
destChainId: params.toChain ===
|
|
56
|
+
sourceChainId: params.fromChain === 1151111081099710 ? 'SOLANA_MAIN' : params.fromChain.toString(),
|
|
57
|
+
destChainId: params.toChain === 1151111081099710 ? 'SOLANA_MAIN' : params.toChain.toString(),
|
|
58
58
|
sourceToken:
|
|
59
|
-
params.fromChain ===
|
|
59
|
+
params.fromChain === 1151111081099710
|
|
60
60
|
? (params.fromToken as SolanaToken).id
|
|
61
61
|
: fromToken.isNative
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
? ZERO_ADDRESS
|
|
63
|
+
: fromToken.address,
|
|
64
64
|
|
|
65
65
|
destToken:
|
|
66
|
-
params.toChain ===
|
|
66
|
+
params.toChain === 1151111081099710
|
|
67
67
|
? (params.toToken as SolanaToken).id
|
|
68
68
|
: toToken.isNative
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
? ZERO_ADDRESS
|
|
70
|
+
: toToken.address,
|
|
71
71
|
amount: params.amount.toString(),
|
|
72
72
|
userAddress: params.sender,
|
|
73
73
|
targetRecipient: params.recipient,
|
|
74
74
|
slippage: params.slippage / 10_000,
|
|
75
75
|
feeConfig: {
|
|
76
|
-
feeRecipient: params.fromChain ===
|
|
76
|
+
feeRecipient: params.fromChain === 1151111081099710 ? CROSS_CHAIN_FEE_RECEIVER_SOLANA : CROSS_CHAIN_FEE_RECEIVER,
|
|
77
77
|
feePercent: (params.feeBps / 10000).toString(),
|
|
78
78
|
},
|
|
79
79
|
channel: 'kyberswap',
|
|
@@ -127,7 +127,7 @@ export class OrbiterAdapter extends BaseSwapAdapter {
|
|
|
127
127
|
sendSolanaFn?: WalletAdapterProps['sendTransaction'],
|
|
128
128
|
solanaConnection?: Connection,
|
|
129
129
|
): Promise<NormalizedTxResponse> {
|
|
130
|
-
if (quote.quoteParams.fromChain ===
|
|
130
|
+
if (quote.quoteParams.fromChain === 1151111081099710) {
|
|
131
131
|
if (!solanaConnection || !sendSolanaFn) throw new Error('Connection is not defined for Solana swap')
|
|
132
132
|
const encodedData = quote.rawQuote.steps?.[0]?.tx?.data
|
|
133
133
|
const txBuffer = Buffer.from(encodedData, 'base64')
|
|
@@ -214,6 +214,7 @@ export class OrbiterAdapter extends BaseSwapAdapter {
|
|
|
214
214
|
to: step.tx.to as `0x${string}`,
|
|
215
215
|
value: BigInt(step.tx.value),
|
|
216
216
|
data: step.tx.data as `0x${string}`,
|
|
217
|
+
kzg: undefined,
|
|
217
218
|
})
|
|
218
219
|
return tx
|
|
219
220
|
}),
|
|
@@ -237,7 +238,7 @@ export class OrbiterAdapter extends BaseSwapAdapter {
|
|
|
237
238
|
}
|
|
238
239
|
|
|
239
240
|
async getTransactionStatus(p: NormalizedTxResponse): Promise<SwapStatus> {
|
|
240
|
-
if (p.sourceChain !==
|
|
241
|
+
if (p.sourceChain !== 1151111081099710) {
|
|
241
242
|
const publicClient = getPublicClient(useConfig(), {
|
|
242
243
|
chainId: p.sourceChain as any,
|
|
243
244
|
})
|
|
@@ -261,10 +262,10 @@ export class OrbiterAdapter extends BaseSwapAdapter {
|
|
|
261
262
|
res.result.opStatus === -1
|
|
262
263
|
? 'Failed'
|
|
263
264
|
: res.result.opStatus === 80
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
265
|
+
? 'Refunded'
|
|
266
|
+
: res.result.opStatus !== 98 && res.result.opStatus !== 99
|
|
267
|
+
? 'Processing'
|
|
268
|
+
: 'Success',
|
|
268
269
|
}
|
|
269
270
|
}
|
|
270
271
|
}
|
|
@@ -4,7 +4,8 @@ import {
|
|
|
4
4
|
convertViemChainToRelayChain,
|
|
5
5
|
createClient,
|
|
6
6
|
getClient,
|
|
7
|
-
|
|
7
|
+
type QuoteBodyOptions,
|
|
8
|
+
} from '@relayprotocol/relay-sdk'
|
|
8
9
|
import { type WalletClient, formatUnits } from 'viem'
|
|
9
10
|
import {
|
|
10
11
|
arbitrum,
|
|
@@ -24,6 +25,8 @@ import {
|
|
|
24
25
|
sonic,
|
|
25
26
|
unichain,
|
|
26
27
|
zksync,
|
|
28
|
+
celo,
|
|
29
|
+
monad
|
|
27
30
|
} from 'viem/chains'
|
|
28
31
|
import type { Currency } from '../constants/index.js'
|
|
29
32
|
|
|
@@ -39,6 +42,7 @@ import {
|
|
|
39
42
|
type Chain,
|
|
40
43
|
NOT_SUPPORTED_CHAINS_PRICE_SERVICE,
|
|
41
44
|
NonEvmChain,
|
|
45
|
+
NewEvmChain,
|
|
42
46
|
type NormalizedQuote,
|
|
43
47
|
type NormalizedTxResponse,
|
|
44
48
|
type QuoteParams,
|
|
@@ -99,6 +103,8 @@ const plasma = defineChain({
|
|
|
99
103
|
|
|
100
104
|
|
|
101
105
|
const SolanaChainId = 792703809
|
|
106
|
+
const BitcoinChainId = 8253038
|
|
107
|
+
const BitcoinAddress = 'bc1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqmql8k8'
|
|
102
108
|
|
|
103
109
|
const solanaChain = {
|
|
104
110
|
id: SolanaChainId,
|
|
@@ -107,6 +113,12 @@ const solanaChain = {
|
|
|
107
113
|
vmType: 'svm' as const,
|
|
108
114
|
} as RelayChain
|
|
109
115
|
|
|
116
|
+
const bitcoinChain = {
|
|
117
|
+
id: BitcoinChainId,
|
|
118
|
+
name: 'Bitcoin',
|
|
119
|
+
displayName: 'Bitcoin',
|
|
120
|
+
vmType: 'bvm' as const,
|
|
121
|
+
} as RelayChain
|
|
110
122
|
export class RelayAdapter extends BaseSwapAdapter {
|
|
111
123
|
constructor() {
|
|
112
124
|
super()
|
|
@@ -132,10 +144,12 @@ export class RelayAdapter extends BaseSwapAdapter {
|
|
|
132
144
|
ronin,
|
|
133
145
|
unichain,
|
|
134
146
|
hyperEvm,
|
|
135
|
-
plasma
|
|
147
|
+
plasma,
|
|
148
|
+
celo,
|
|
149
|
+
monad,
|
|
136
150
|
]
|
|
137
151
|
.map(convertViemChainToRelayChain)
|
|
138
|
-
.concat(solanaChain as any),
|
|
152
|
+
.concat(solanaChain as any, bitcoinChain as any),
|
|
139
153
|
})
|
|
140
154
|
}
|
|
141
155
|
|
|
@@ -146,7 +160,7 @@ export class RelayAdapter extends BaseSwapAdapter {
|
|
|
146
160
|
return 'https://storage.googleapis.com/ks-setting-1d682dca/84e906bb-eaeb-45d3-a64c-2aa9c84eb3ea1747759080942.png'
|
|
147
161
|
}
|
|
148
162
|
getSupportedChains(): Chain[] {
|
|
149
|
-
return [NonEvmChain.Solana, NonEvmChain.Plasma, ...MAINNET_NETWORKS]
|
|
163
|
+
return [NonEvmChain.Solana, NonEvmChain.Bitcoin, NewEvmChain.Plasma, NewEvmChain.Monad, ...MAINNET_NETWORKS]
|
|
150
164
|
// return [...MAINNET_NETWORKS]
|
|
151
165
|
}
|
|
152
166
|
|
|
@@ -157,19 +171,30 @@ export class RelayAdapter extends BaseSwapAdapter {
|
|
|
157
171
|
async getQuote(params: QuoteParams): Promise<NormalizedQuote> {
|
|
158
172
|
const evmFromToken = params.fromToken as Currency
|
|
159
173
|
const evmToToken = params.toToken as Currency
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
174
|
+
let currency = evmFromToken.isNative ? ZERO_ADDRESS : evmFromToken.address
|
|
175
|
+
let toCurrency = evmToToken.isNative ? ZERO_ADDRESS : evmToToken.address
|
|
176
|
+
|
|
177
|
+
let chainId = +params.fromChain
|
|
178
|
+
if (params.fromChain === NonEvmChain.Solana) {
|
|
179
|
+
chainId = SolanaChainId
|
|
180
|
+
} else if (params.fromChain === NonEvmChain.Bitcoin) {
|
|
181
|
+
chainId = BitcoinChainId
|
|
182
|
+
currency = BitcoinAddress
|
|
183
|
+
}
|
|
184
|
+
let toChainId = +params.toChain
|
|
185
|
+
if (params.toChain === NonEvmChain.Solana) {
|
|
186
|
+
toChainId = SolanaChainId
|
|
187
|
+
} else if (params.toChain === NonEvmChain.Bitcoin) {
|
|
188
|
+
toChainId = BitcoinChainId
|
|
189
|
+
toCurrency = BitcoinAddress
|
|
190
|
+
}
|
|
191
|
+
const quoteParams = {
|
|
192
|
+
chainId: chainId,
|
|
193
|
+
toChainId: toChainId,
|
|
169
194
|
currency,
|
|
170
195
|
toCurrency,
|
|
171
196
|
amount: params.amount,
|
|
172
|
-
tradeType: 'EXACT_INPUT',
|
|
197
|
+
tradeType: 'EXACT_INPUT' as QuoteBodyOptions['tradeType'],
|
|
173
198
|
wallet: params.walletClient,
|
|
174
199
|
recipient: params.recipient,
|
|
175
200
|
user: params.sender,
|
|
@@ -184,11 +209,11 @@ export class RelayAdapter extends BaseSwapAdapter {
|
|
|
184
209
|
fee: params.feeBps.toString(),
|
|
185
210
|
},
|
|
186
211
|
],
|
|
187
|
-
protocolVersion:'preferV2'
|
|
212
|
+
protocolVersion: 'preferV2' as 'preferV2' | 'v1' | 'v2',
|
|
188
213
|
// includedSwapSources: ['open-ocean'],
|
|
189
214
|
},
|
|
190
|
-
}
|
|
191
|
-
|
|
215
|
+
}
|
|
216
|
+
const resp = await getClient().actions.getQuote(quoteParams)
|
|
192
217
|
const formattedOutputAmount = formatUnits(
|
|
193
218
|
BigInt(resp.details?.currencyOut?.amount || '0'),
|
|
194
219
|
params.toToken.decimals
|
|
@@ -30,20 +30,18 @@ export class SymbiosisAdapter extends BaseSwapAdapter {
|
|
|
30
30
|
}
|
|
31
31
|
getSupportedChains(): Chain[] {
|
|
32
32
|
return [
|
|
33
|
-
ChainId.
|
|
34
|
-
ChainId.
|
|
35
|
-
ChainId.
|
|
36
|
-
ChainId.
|
|
37
|
-
ChainId.ZKSYNC,
|
|
38
|
-
ChainId.
|
|
39
|
-
ChainId.
|
|
40
|
-
ChainId.
|
|
41
|
-
ChainId.
|
|
42
|
-
ChainId.
|
|
43
|
-
ChainId.
|
|
44
|
-
ChainId.
|
|
45
|
-
ChainId.SONIC,
|
|
46
|
-
ChainId.BERA,
|
|
33
|
+
ChainId.ETH,
|
|
34
|
+
ChainId.BAS,
|
|
35
|
+
ChainId.POL,
|
|
36
|
+
ChainId.AVA,
|
|
37
|
+
// ChainId.ZKSYNC,
|
|
38
|
+
ChainId.ARB,
|
|
39
|
+
ChainId.OPT,
|
|
40
|
+
ChainId.LNA,
|
|
41
|
+
ChainId.BAS,
|
|
42
|
+
ChainId.SCL,
|
|
43
|
+
ChainId.BLS,
|
|
44
|
+
ChainId.UNI,
|
|
47
45
|
]
|
|
48
46
|
}
|
|
49
47
|
|
|
@@ -118,6 +116,7 @@ export class SymbiosisAdapter extends BaseSwapAdapter {
|
|
|
118
116
|
to: quote.rawQuote.tx.to,
|
|
119
117
|
value: BigInt(quote.rawQuote.tx.value),
|
|
120
118
|
data: quote.rawQuote.tx.data,
|
|
119
|
+
kzg: undefined,
|
|
121
120
|
})
|
|
122
121
|
return {
|
|
123
122
|
sender: quote.quoteParams.sender,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ChainId } from '@openocean.finance/widget-sdk'
|
|
2
2
|
import { Currency } from '../constants/index.js'
|
|
3
|
-
import { getPublicClient } from '
|
|
3
|
+
import { getPublicClient } from 'wagmi/actions'
|
|
4
4
|
import { WalletClient, formatUnits } from 'viem'
|
|
5
5
|
import { useConfig } from 'wagmi'
|
|
6
6
|
|
|
@@ -32,22 +32,17 @@ export class XYFinanceAdapter extends BaseSwapAdapter {
|
|
|
32
32
|
}
|
|
33
33
|
getSupportedChains(): Chain[] {
|
|
34
34
|
return [
|
|
35
|
-
ChainId.
|
|
36
|
-
ChainId.
|
|
37
|
-
ChainId.
|
|
38
|
-
ChainId.
|
|
39
|
-
ChainId.
|
|
40
|
-
ChainId.
|
|
41
|
-
ChainId.
|
|
42
|
-
ChainId.
|
|
43
|
-
ChainId.
|
|
44
|
-
ChainId.
|
|
45
|
-
ChainId.
|
|
46
|
-
ChainId.SCROLL,
|
|
47
|
-
ChainId.BLAST,
|
|
48
|
-
ChainId.BERA,
|
|
49
|
-
ChainId.SONIC,
|
|
50
|
-
ChainId.UNICHAIN,
|
|
35
|
+
ChainId.ETH,
|
|
36
|
+
ChainId.BSC,
|
|
37
|
+
ChainId.POL,
|
|
38
|
+
ChainId.AVA,
|
|
39
|
+
ChainId.ARB,
|
|
40
|
+
ChainId.OPT,
|
|
41
|
+
ChainId.LNA,
|
|
42
|
+
ChainId.BAS,
|
|
43
|
+
ChainId.SCL,
|
|
44
|
+
ChainId.BLS,
|
|
45
|
+
ChainId.UNI,
|
|
51
46
|
]
|
|
52
47
|
}
|
|
53
48
|
|
|
@@ -145,8 +140,8 @@ export class XYFinanceAdapter extends BaseSwapAdapter {
|
|
|
145
140
|
...(quote.rawQuote.srcSwapDescription ? { srcSwapProvider: quote.rawQuote.srcSwapDescription.provider } : {}),
|
|
146
141
|
...(quote.rawQuote.dstSwapDescription
|
|
147
142
|
? {
|
|
148
|
-
|
|
149
|
-
|
|
143
|
+
dstSwapProvider: quote.rawQuote.dstSwapDescription?.provider,
|
|
144
|
+
}
|
|
150
145
|
: {}),
|
|
151
146
|
}
|
|
152
147
|
|
|
@@ -168,6 +163,7 @@ export class XYFinanceAdapter extends BaseSwapAdapter {
|
|
|
168
163
|
to: resp.tx.to,
|
|
169
164
|
value: resp.tx.value,
|
|
170
165
|
data: resp.tx.data,
|
|
166
|
+
kzg: undefined,
|
|
171
167
|
})
|
|
172
168
|
return {
|
|
173
169
|
sender: quote.quoteParams.sender,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
export * from './BaseSwapAdapter.js'
|
|
2
2
|
// export * from './AcrossAdapter.js'
|
|
3
3
|
export * from './RelayAdapter.js'
|
|
4
4
|
// export * from './XYFinanceAdapter.js'
|
|
@@ -7,3 +7,4 @@ export * from './MayanAdapter.js'
|
|
|
7
7
|
// export * from './DebridgeAdapter.js'
|
|
8
8
|
// export * from './LifiAdapter.js'
|
|
9
9
|
// export * from './KyberSwapAdapter.js'
|
|
10
|
+
export * from './NearIntentsAdapter.js'
|
|
@@ -183,6 +183,8 @@ export const MAINNET_NETWORKS = [
|
|
|
183
183
|
ChainId.UNI,
|
|
184
184
|
ChainId.BLS,
|
|
185
185
|
ChainId.SCL,
|
|
186
|
+
ChainId.CEL,
|
|
187
|
+
ChainId.MONAD,
|
|
186
188
|
] as const
|
|
187
189
|
|
|
188
190
|
export interface Currency {
|
|
@@ -203,6 +205,7 @@ export interface Currency {
|
|
|
203
205
|
}
|
|
204
206
|
|
|
205
207
|
export interface NearToken {
|
|
208
|
+
address: string
|
|
206
209
|
assetId: string
|
|
207
210
|
decimals: number
|
|
208
211
|
blockchain: string
|
|
@@ -214,6 +217,7 @@ export interface NearToken {
|
|
|
214
217
|
}
|
|
215
218
|
|
|
216
219
|
export interface SolanaToken {
|
|
220
|
+
address: string
|
|
217
221
|
id: string
|
|
218
222
|
name: string
|
|
219
223
|
symbol: string
|
|
@@ -41,6 +41,11 @@ export async function getCrossChainQuote({
|
|
|
41
41
|
CrossChainSwapFactory.getAllAdapters().forEach((adapter) => {
|
|
42
42
|
registry.registerAdapter(adapter)
|
|
43
43
|
})
|
|
44
|
+
|
|
45
|
+
let slippage = typeof slippage_tolerance === 'string'
|
|
46
|
+
? Number.parseFloat(slippage_tolerance)
|
|
47
|
+
: slippage_tolerance
|
|
48
|
+
slippage = Math.floor(slippage * 10000) / 100
|
|
44
49
|
// 2. Construct QuoteParams
|
|
45
50
|
const params: QuoteParams = {
|
|
46
51
|
feeBps,
|
|
@@ -49,20 +54,18 @@ export async function getCrossChainQuote({
|
|
|
49
54
|
fromToken: fromMsg,
|
|
50
55
|
toToken: toMsg,
|
|
51
56
|
amount: inAmount,
|
|
52
|
-
slippage:
|
|
53
|
-
typeof slippage_tolerance === 'string'
|
|
54
|
-
? Number.parseFloat(slippage_tolerance)
|
|
55
|
-
: slippage_tolerance,
|
|
57
|
+
slippage: slippage,
|
|
56
58
|
walletClient,
|
|
57
59
|
tokenInUsd,
|
|
58
60
|
tokenOutUsd,
|
|
59
61
|
sender: account,
|
|
60
62
|
recipient: recipient || '',
|
|
61
63
|
publicKey,
|
|
64
|
+
isNative: fromMsg.isNative || toMsg.isNative,
|
|
62
65
|
}
|
|
63
66
|
|
|
64
67
|
if (fromMsg.chainId === 'near' || toMsg.chainId === 'near') {
|
|
65
|
-
;(params as any).nearTokens = nearTokens
|
|
68
|
+
; (params as any).nearTokens = nearTokens
|
|
66
69
|
}
|
|
67
70
|
|
|
68
71
|
// 3. Get all quotes
|
|
@@ -72,14 +75,13 @@ export async function getCrossChainQuote({
|
|
|
72
75
|
adapter.getSupportedChains().includes(params.toChain)
|
|
73
76
|
)
|
|
74
77
|
})
|
|
75
|
-
|
|
76
78
|
if (adapters.length === 0) {
|
|
77
79
|
console.warn('No supported adapters found for the specified chains')
|
|
78
80
|
return null
|
|
79
81
|
}
|
|
80
82
|
|
|
81
83
|
const quoteResults: Quote[] = []
|
|
82
|
-
|
|
84
|
+
let errorMsg = ''
|
|
83
85
|
// Get quotes from all adapters in parallel
|
|
84
86
|
const quotePromises = adapters.map(async (adapter) => {
|
|
85
87
|
try {
|
|
@@ -88,6 +90,7 @@ export async function getCrossChainQuote({
|
|
|
88
90
|
quoteResults.push({ adapter, quote })
|
|
89
91
|
}
|
|
90
92
|
} catch (error) {
|
|
93
|
+
errorMsg = error instanceof Error || error?.message ? error.message : 'Unknown error'
|
|
91
94
|
// Ignore individual adapter errors, continue getting quotes from other adapters
|
|
92
95
|
console.warn(`Failed to get quote from ${adapter.getName()}:`, error)
|
|
93
96
|
}
|
|
@@ -97,7 +100,8 @@ export async function getCrossChainQuote({
|
|
|
97
100
|
|
|
98
101
|
if (quoteResults.length === 0) {
|
|
99
102
|
console.warn('No valid quotes found from any adapter')
|
|
100
|
-
|
|
103
|
+
throw new Error(errorMsg)
|
|
104
|
+
// return { error: errorMsg }
|
|
101
105
|
}
|
|
102
106
|
|
|
103
107
|
// 4. Select best quote (highest outputAmount)
|
|
@@ -106,7 +110,6 @@ export async function getCrossChainQuote({
|
|
|
106
110
|
)
|
|
107
111
|
|
|
108
112
|
const best = quoteResults[0]
|
|
109
|
-
|
|
110
113
|
// 5. Construct return structure compatible with useRoutes.ts
|
|
111
114
|
return {
|
|
112
115
|
data: {
|
|
@@ -114,8 +117,8 @@ export async function getCrossChainQuote({
|
|
|
114
117
|
outAmount: best.quote.outputAmount || '0',
|
|
115
118
|
fromTokenUSD: best.quote.inputUsd?.toString() || '0',
|
|
116
119
|
toTokenUSD: best.quote.outputUsd?.toString() || '0',
|
|
117
|
-
quoteAdapterName: best.adapter
|
|
118
|
-
quoteAdapterKey: best.adapter
|
|
120
|
+
quoteAdapterName: best.adapter?.getName() || '',
|
|
121
|
+
quoteAdapterKey: best.adapter?.getName()?.toLowerCase() || '',
|
|
119
122
|
chainId: fromMsg.chainId,
|
|
120
123
|
from: account,
|
|
121
124
|
|
|
@@ -130,7 +133,7 @@ export async function getCrossChainQuote({
|
|
|
130
133
|
// Fee information
|
|
131
134
|
feeCosts: [
|
|
132
135
|
{
|
|
133
|
-
name: `${best.adapter
|
|
136
|
+
name: `${best.adapter?.getName() || ''} Fee`,
|
|
134
137
|
description: 'Protocol fee',
|
|
135
138
|
token: fromMsg,
|
|
136
139
|
amount: '0',
|
|
@@ -145,7 +148,59 @@ export async function getCrossChainQuote({
|
|
|
145
148
|
}
|
|
146
149
|
} catch (error) {
|
|
147
150
|
console.error('Error getting cross-chain quote:', error)
|
|
148
|
-
|
|
151
|
+
let errors = [
|
|
152
|
+
{
|
|
153
|
+
message: 'Please connect your wallet first.',
|
|
154
|
+
conditions: [
|
|
155
|
+
'refundTo should not be empty',
|
|
156
|
+
'User is required'
|
|
157
|
+
],
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
message: 'The input amount is too low.',
|
|
161
|
+
conditions: [
|
|
162
|
+
'Swap output amount is too small to cover fees required to execute swap',
|
|
163
|
+
'Amount is too low for bridge',
|
|
164
|
+
'Amount too small',
|
|
165
|
+
'Amount too low',
|
|
166
|
+
],
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
message: 'Insufficient balance in your wallet.',
|
|
170
|
+
conditions: [
|
|
171
|
+
'Insufficient funds',
|
|
172
|
+
'Failed to get quote',
|
|
173
|
+
'Insufficient balance',
|
|
174
|
+
],
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
message: 'Please enter valid recipient address.',
|
|
178
|
+
conditions: [
|
|
179
|
+
'recipient should not be empty',
|
|
180
|
+
'Recipient is required'
|
|
181
|
+
],
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
message: 'Not supported token',
|
|
185
|
+
conditions: [
|
|
186
|
+
'not supported to token',
|
|
187
|
+
'not supported from token',
|
|
188
|
+
'no routes found',
|
|
189
|
+
'SDK version too old for monad and solana fast mctp route'
|
|
190
|
+
],
|
|
191
|
+
}
|
|
192
|
+
]
|
|
193
|
+
if (error instanceof Error && error.message) {
|
|
194
|
+
const newError = errors.find(e => e.conditions.some(condition => error.message.indexOf(condition) !== -1))
|
|
195
|
+
if (newError) {
|
|
196
|
+
throw new Error(newError.message)
|
|
197
|
+
} else {
|
|
198
|
+
debugger
|
|
199
|
+
throw new Error(error.message)
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
debugger
|
|
203
|
+
throw new Error('Unknown error')
|
|
149
204
|
}
|
|
150
205
|
}
|
|
151
206
|
|
|
@@ -158,14 +213,17 @@ export const bridgeExecuteSwap = async ({
|
|
|
158
213
|
}) => {
|
|
159
214
|
const adapterName = quoteData.quoteAdapterKey
|
|
160
215
|
const adapter = CrossChainSwapFactory.getAdapterByName(adapterName)
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
216
|
+
if (adapter) {
|
|
217
|
+
const result = await adapter?.executeSwap(
|
|
218
|
+
{
|
|
219
|
+
adapter,
|
|
220
|
+
quote: quoteData.quoteRawData as any,
|
|
221
|
+
},
|
|
222
|
+
walletClient
|
|
223
|
+
)
|
|
224
|
+
return result
|
|
225
|
+
}
|
|
226
|
+
return null
|
|
169
227
|
}
|
|
170
228
|
|
|
171
229
|
// Login URL mapping for each adapter
|
package/src/cross/factory.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// import { NearIntentsAdapter } from './adapters/NearIntentsAdapter.js'
|
|
2
1
|
// import { OptimexAdapter } from './adapters/OptimexAdapter.js'
|
|
3
2
|
// import { OrbiterAdapter } from './adapters/OrbiterAdapter.js'
|
|
4
3
|
import {
|
|
@@ -7,7 +6,8 @@ import {
|
|
|
7
6
|
// LifiAdapter,
|
|
8
7
|
MayanAdapter,
|
|
9
8
|
RelayAdapter,
|
|
10
|
-
|
|
9
|
+
NearIntentsAdapter,
|
|
10
|
+
SwapProvider,
|
|
11
11
|
// SymbiosisAdapter,
|
|
12
12
|
// XYFinanceAdapter,
|
|
13
13
|
} from './adapters/index.js'
|
|
@@ -18,7 +18,7 @@ export class CrossChainSwapFactory {
|
|
|
18
18
|
// private static acrossInstance: AcrossAdapter
|
|
19
19
|
private static relayInstance: RelayAdapter
|
|
20
20
|
// private static xyFinanceInstance: XYFinanceAdapter
|
|
21
|
-
|
|
21
|
+
private static nearIntentsInstance: NearIntentsAdapter
|
|
22
22
|
private static mayanInstance: MayanAdapter
|
|
23
23
|
// private static symbiosisInstance: SymbiosisAdapter
|
|
24
24
|
// private static debridgeInstance: DeBridgeAdapter
|
|
@@ -49,12 +49,12 @@ export class CrossChainSwapFactory {
|
|
|
49
49
|
// return CrossChainSwapFactory.xyFinanceInstance
|
|
50
50
|
// }
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
52
|
+
static getNearIntentsAdapter(): NearIntentsAdapter {
|
|
53
|
+
if (!CrossChainSwapFactory.nearIntentsInstance) {
|
|
54
|
+
CrossChainSwapFactory.nearIntentsInstance = new NearIntentsAdapter()
|
|
55
|
+
}
|
|
56
|
+
return CrossChainSwapFactory.nearIntentsInstance
|
|
57
|
+
}
|
|
58
58
|
|
|
59
59
|
static getMayanAdapter(): MayanAdapter {
|
|
60
60
|
if (!CrossChainSwapFactory.mayanInstance) {
|
|
@@ -103,10 +103,10 @@ export class CrossChainSwapFactory {
|
|
|
103
103
|
return [
|
|
104
104
|
CrossChainSwapFactory.getMayanAdapter(),
|
|
105
105
|
CrossChainSwapFactory.getRelayAdapter(),
|
|
106
|
+
CrossChainSwapFactory.getNearIntentsAdapter(),
|
|
106
107
|
|
|
107
108
|
// CrossChainSwapFactory.getAcrossAdapter(),
|
|
108
109
|
// CrossChainSwapFactory.getXyFinanceAdapter(),
|
|
109
|
-
// CrossChainSwapFactory.getNearIntentsAdapter(),
|
|
110
110
|
// CrossChainSwapFactory.getSymbiosisAdapter(),
|
|
111
111
|
// CrossChainSwapFactory.getDebridgeInstance(),
|
|
112
112
|
// CrossChainSwapFactory.getLifiInstance(),
|
|
@@ -124,8 +124,8 @@ export class CrossChainSwapFactory {
|
|
|
124
124
|
return CrossChainSwapFactory.getRelayAdapter()
|
|
125
125
|
// case 'xyfinance':
|
|
126
126
|
// return CrossChainSwapFactory.getXyFinanceAdapter()
|
|
127
|
-
|
|
128
|
-
|
|
127
|
+
case 'near intents':
|
|
128
|
+
return CrossChainSwapFactory.getNearIntentsAdapter()
|
|
129
129
|
case 'mayan':
|
|
130
130
|
return CrossChainSwapFactory.getMayanAdapter()
|
|
131
131
|
// case 'symbiosis':
|