@openocean.finance/widget 1.0.28 → 1.0.30
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/components/AmountInput/AmountInputEndAdornment.js +46 -39
- package/dist/esm/components/AmountInput/AmountInputEndAdornment.js.map +1 -1
- package/dist/esm/components/Messages/WarningMessages.js +2 -2
- package/dist/esm/components/Messages/WarningMessages.js.map +1 -1
- package/dist/esm/components/Step/Step.js +37 -29
- package/dist/esm/components/Step/Step.js.map +1 -1
- package/dist/esm/components/TransactionDetails.js +3 -6
- package/dist/esm/components/TransactionDetails.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.d.ts +15 -0
- package/dist/esm/cross/adapters/AcrossAdapter.js +166 -0
- package/dist/esm/cross/adapters/AcrossAdapter.js.map +1 -0
- package/dist/esm/cross/adapters/BaseSwapAdapter.d.ts +107 -0
- package/dist/esm/cross/adapters/BaseSwapAdapter.js +44 -0
- package/dist/esm/cross/adapters/BaseSwapAdapter.js.map +1 -0
- package/dist/esm/cross/adapters/DebridgeAdapter.d.ts +20 -0
- package/dist/esm/cross/adapters/DebridgeAdapter.js +264 -0
- package/dist/esm/cross/adapters/DebridgeAdapter.js.map +1 -0
- package/dist/esm/cross/adapters/LifiAdapter.d.ts +19 -0
- package/dist/esm/cross/adapters/LifiAdapter.js +169 -0
- package/dist/esm/cross/adapters/LifiAdapter.js.map +1 -0
- package/dist/esm/cross/adapters/MayanAdapter.d.ts +14 -0
- package/dist/esm/cross/adapters/MayanAdapter.js +119 -0
- package/dist/esm/cross/adapters/MayanAdapter.js.map +1 -0
- package/dist/esm/cross/adapters/NearIntentsAdapter.d.ts +21 -0
- package/dist/esm/cross/adapters/NearIntentsAdapter.js +425 -0
- package/dist/esm/cross/adapters/NearIntentsAdapter.js.map +1 -0
- package/dist/esm/cross/adapters/OptimexAdapter.d.ts +19 -0
- package/dist/esm/cross/adapters/OptimexAdapter.js +216 -0
- package/dist/esm/cross/adapters/OptimexAdapter.js.map +1 -0
- package/dist/esm/cross/adapters/OrbiterAdapter.d.ts +20 -0
- package/dist/esm/cross/adapters/OrbiterAdapter.js +213 -0
- package/dist/esm/cross/adapters/OrbiterAdapter.js.map +1 -0
- package/dist/esm/cross/adapters/RelayAdapter.d.ts +14 -0
- package/dist/esm/cross/adapters/RelayAdapter.js +171 -0
- package/dist/esm/cross/adapters/RelayAdapter.js.map +1 -0
- package/dist/esm/cross/adapters/SymbiosisAdapter.d.ts +14 -0
- package/dist/esm/cross/adapters/SymbiosisAdapter.js +120 -0
- package/dist/esm/cross/adapters/SymbiosisAdapter.js.map +1 -0
- package/dist/esm/cross/adapters/XYFinanceAdapter.d.ts +14 -0
- package/dist/esm/cross/adapters/XYFinanceAdapter.js +177 -0
- package/dist/esm/cross/adapters/XYFinanceAdapter.js.map +1 -0
- package/dist/esm/cross/adapters/index.d.ts +2 -0
- package/dist/esm/cross/adapters/index.js +10 -0
- package/dist/esm/cross/adapters/index.js.map +1 -0
- package/dist/esm/cross/constants/index.d.ts +202 -0
- package/dist/esm/cross/constants/index.js +183 -0
- package/dist/esm/cross/constants/index.js.map +1 -0
- package/dist/esm/cross/crossChainQuote.d.ts +25 -0
- package/dist/esm/cross/crossChainQuote.js +127 -0
- package/dist/esm/cross/crossChainQuote.js.map +1 -0
- package/dist/esm/cross/factory.d.ts +9 -0
- package/dist/esm/cross/factory.js +125 -0
- package/dist/esm/cross/factory.js.map +1 -0
- package/dist/esm/cross/registry.d.ts +12 -0
- package/dist/esm/cross/registry.js +52 -0
- package/dist/esm/cross/registry.js.map +1 -0
- package/dist/esm/hooks/useChain.d.ts +1 -1
- package/dist/esm/hooks/useGasRefuel.d.ts +1 -1
- package/dist/esm/hooks/useGasSufficiencyBridge.js +1 -2
- package/dist/esm/hooks/useGasSufficiencyBridge.js.map +1 -1
- package/dist/esm/hooks/useRouteExecution.js +2 -1
- package/dist/esm/hooks/useRouteExecution.js.map +1 -1
- package/dist/esm/hooks/useRoutes.js +49 -33
- package/dist/esm/hooks/useRoutes.js.map +1 -1
- package/dist/esm/hooks/useSettingMonitor.js.map +1 -1
- package/dist/esm/hooks/useTokenAddressBalance.d.ts +1 -1
- package/dist/esm/hooks/useTokenPrice.js +4 -2
- package/dist/esm/hooks/useTokenPrice.js.map +1 -1
- package/dist/esm/hooks/useTokens.d.ts +1 -1
- package/dist/esm/services/ExecuteRoute.js +142 -124
- package/dist/esm/services/ExecuteRoute.js.map +1 -1
- package/dist/esm/stores/form/useFieldController.d.ts +1 -1
- package/dist/esm/stores/routes/createRouteExecutionStore.js +6 -3
- package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
- package/dist/esm/stores/routes/useSetExecutableRoute.d.ts +1 -1
- package/dist/esm/types/widget.d.ts +3 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +14 -4
- package/src/components/AmountInput/AmountInputEndAdornment.tsx +46 -46
- package/src/components/Messages/WarningMessages.tsx +7 -2
- package/src/components/Step/Step.tsx +37 -31
- package/src/components/TransactionDetails.tsx +11 -12
- package/src/config/version.ts +1 -1
- package/src/cross/adapters/AcrossAdapter.ts +193 -0
- package/src/cross/adapters/BaseSwapAdapter.ts +173 -0
- package/src/cross/adapters/DebridgeAdapter.ts +375 -0
- package/src/cross/adapters/LifiAdapter.ts +213 -0
- package/src/cross/adapters/MayanAdapter.ts +179 -0
- package/src/cross/adapters/NearIntentsAdapter.ts +539 -0
- package/src/cross/adapters/OptimexAdapter.ts +273 -0
- package/src/cross/adapters/OrbiterAdapter.ts +270 -0
- package/src/cross/adapters/RelayAdapter.ts +248 -0
- package/src/cross/adapters/SymbiosisAdapter.ts +144 -0
- package/src/cross/adapters/XYFinanceAdapter.ts +213 -0
- package/src/cross/adapters/index.ts +9 -0
- package/src/cross/constants/index.ts +223 -0
- package/src/cross/crossChainQuote.ts +181 -0
- package/src/cross/factory.ts +145 -0
- package/src/cross/registry.ts +65 -0
- package/src/hooks/useGasSufficiencyBridge.ts +1 -3
- package/src/hooks/useRouteExecution.ts +2 -1
- package/src/hooks/useRoutes.ts +63 -44
- package/src/hooks/useSettingMonitor.ts +0 -1
- package/src/hooks/useTokenPrice.ts +5 -3
- package/src/services/ExecuteRoute.ts +184 -171
- package/src/stores/routes/createRouteExecutionStore.ts +13 -4
- package/src/types/widget.ts +3 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type Currency } from '../constants/index.js';
|
|
2
|
+
import type { WalletClient } from 'viem';
|
|
3
|
+
import type { Quote } from '../registry.js';
|
|
4
|
+
import { BaseSwapAdapter, type Chain, type EvmQuoteParams, type NormalizedQuote, type NormalizedTxResponse, type SwapStatus } from './BaseSwapAdapter.js';
|
|
5
|
+
export declare class MayanAdapter extends BaseSwapAdapter {
|
|
6
|
+
constructor();
|
|
7
|
+
getName(): string;
|
|
8
|
+
getIcon(): string;
|
|
9
|
+
getSupportedChains(): Chain[];
|
|
10
|
+
getSupportedTokens(_sourceChain: Chain, _destChain: Chain): Currency[];
|
|
11
|
+
getQuote(params: EvmQuoteParams): Promise<NormalizedQuote>;
|
|
12
|
+
executeSwap({ quote }: Quote, walletClient: WalletClient): Promise<NormalizedTxResponse>;
|
|
13
|
+
getTransactionStatus(p: NormalizedTxResponse): Promise<SwapStatus>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { addresses, fetchQuote, getSwapFromEvmTxPayload, } from '@mayanfinance/swap-sdk';
|
|
2
|
+
import { ChainId } from '@openocean.finance/widget-sdk';
|
|
3
|
+
import { formatUnits, parseUnits } from 'viem';
|
|
4
|
+
import { CROSS_CHAIN_FEE_RECEIVER, ZERO_ADDRESS, } from '../constants/index.js';
|
|
5
|
+
import { BaseSwapAdapter, } from './BaseSwapAdapter.js';
|
|
6
|
+
const mappingChain = {
|
|
7
|
+
[ChainId.ETH]: 'ethereum',
|
|
8
|
+
[ChainId.BSC]: 'bsc',
|
|
9
|
+
[ChainId.POL]: 'polygon',
|
|
10
|
+
[ChainId.AVA]: 'avalanche',
|
|
11
|
+
[ChainId.ARB]: 'arbitrum',
|
|
12
|
+
[ChainId.OPT]: 'optimism',
|
|
13
|
+
[ChainId.BAS]: 'base',
|
|
14
|
+
[ChainId.UNI]: 'unichain',
|
|
15
|
+
// [ChainId.LIN]: 'linea',
|
|
16
|
+
// [ChainId.HYE]: 'hypercore',
|
|
17
|
+
[ChainId.SOL]: 'solana',
|
|
18
|
+
[ChainId.SUI]: 'sui',
|
|
19
|
+
};
|
|
20
|
+
export class MayanAdapter extends BaseSwapAdapter {
|
|
21
|
+
constructor() {
|
|
22
|
+
super();
|
|
23
|
+
}
|
|
24
|
+
getName() {
|
|
25
|
+
return 'Mayan';
|
|
26
|
+
}
|
|
27
|
+
getIcon() {
|
|
28
|
+
return 'https://swap.mayan.finance/favicon.ico';
|
|
29
|
+
}
|
|
30
|
+
getSupportedChains() {
|
|
31
|
+
return [...Object.keys(mappingChain).map(Number)];
|
|
32
|
+
}
|
|
33
|
+
getSupportedTokens(_sourceChain, _destChain) {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
async getQuote(params) {
|
|
37
|
+
const quoteParams = {
|
|
38
|
+
amount: +formatUnits(BigInt(params.amount), params.fromToken.decimals),
|
|
39
|
+
fromToken: params.fromToken.isNative
|
|
40
|
+
? ZERO_ADDRESS
|
|
41
|
+
: params.fromToken.address,
|
|
42
|
+
toToken: params.toToken.isNative ? ZERO_ADDRESS : params.toToken.address,
|
|
43
|
+
fromChain: mappingChain[params.fromChain],
|
|
44
|
+
toChain: mappingChain[params.toChain],
|
|
45
|
+
slippageBps: params.slippage,
|
|
46
|
+
referrer: CROSS_CHAIN_FEE_RECEIVER,
|
|
47
|
+
referrerBps: params.feeBps,
|
|
48
|
+
};
|
|
49
|
+
const quotes = await fetchQuote(quoteParams);
|
|
50
|
+
if (!quotes?.[0]) {
|
|
51
|
+
throw new Error('No quotes found');
|
|
52
|
+
}
|
|
53
|
+
const formattedInputAmount = formatUnits(BigInt(params.amount), params.fromToken.decimals);
|
|
54
|
+
const tokenInUsd = params.tokenInUsd;
|
|
55
|
+
const tokenOutUsd = params.tokenOutUsd;
|
|
56
|
+
const inputUsd = tokenInUsd * +formattedInputAmount;
|
|
57
|
+
const outputUsd = tokenOutUsd * quotes[0].expectedAmountOut;
|
|
58
|
+
return {
|
|
59
|
+
quoteParams: params,
|
|
60
|
+
outputAmount: parseUnits(quotes[0].expectedAmountOut.toString(), params.toToken.decimals),
|
|
61
|
+
formattedOutputAmount: quotes[0].expectedAmountOut.toString(),
|
|
62
|
+
inputUsd,
|
|
63
|
+
outputUsd,
|
|
64
|
+
priceImpact: !inputUsd || !outputUsd
|
|
65
|
+
? Number.NaN
|
|
66
|
+
: ((inputUsd - outputUsd) * 100) / inputUsd,
|
|
67
|
+
rate: quotes[0].expectedAmountOut / +formattedInputAmount,
|
|
68
|
+
gasFeeUsd: 0,
|
|
69
|
+
timeEstimate: quotes[0].etaSeconds,
|
|
70
|
+
contractAddress: addresses.MAYAN_FORWARDER_CONTRACT,
|
|
71
|
+
rawQuote: quotes[0],
|
|
72
|
+
protocolFee: quotes[0].clientRelayerFeeSuccess,
|
|
73
|
+
platformFeePercent: (params.feeBps * 100) / 10000,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
async executeSwap({ quote }, walletClient) {
|
|
77
|
+
const account = walletClient.account?.address;
|
|
78
|
+
if (!account)
|
|
79
|
+
throw new Error('WalletClient account is not defined');
|
|
80
|
+
const res = getSwapFromEvmTxPayload(quote.rawQuote, account, quote.quoteParams.recipient, { evm: CROSS_CHAIN_FEE_RECEIVER }, account, quote.quoteParams.fromChain, null, null);
|
|
81
|
+
if (res.to && res.value && res.data) {
|
|
82
|
+
const tx = await walletClient.sendTransaction({
|
|
83
|
+
chain: undefined,
|
|
84
|
+
account,
|
|
85
|
+
to: res.to,
|
|
86
|
+
value: BigInt(res.value),
|
|
87
|
+
data: res.data,
|
|
88
|
+
});
|
|
89
|
+
return {
|
|
90
|
+
sender: quote.quoteParams.sender,
|
|
91
|
+
id: tx, // specific id for each provider
|
|
92
|
+
sourceTxHash: tx,
|
|
93
|
+
adapter: this.getName(),
|
|
94
|
+
sourceChain: quote.quoteParams.fromChain,
|
|
95
|
+
targetChain: quote.quoteParams.toChain,
|
|
96
|
+
inputAmount: quote.quoteParams.amount,
|
|
97
|
+
outputAmount: quote.outputAmount.toString(),
|
|
98
|
+
sourceToken: quote.quoteParams.fromToken,
|
|
99
|
+
targetToken: quote.quoteParams.toToken,
|
|
100
|
+
timestamp: new Date().getTime(),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
throw new Error('Can not get Mayan data to swap');
|
|
104
|
+
}
|
|
105
|
+
async getTransactionStatus(p) {
|
|
106
|
+
const res = await fetch(`https://explorer-api.mayan.finance/v3/swap/trx/${p.id}`).then((r) => r.json());
|
|
107
|
+
return {
|
|
108
|
+
txHash: res.fulfillTxHash || '',
|
|
109
|
+
status: res.status === 'ORDER_SETTLED'
|
|
110
|
+
? 'Success'
|
|
111
|
+
: res.status === 'ORDER_REFUNDED'
|
|
112
|
+
? 'Refunded'
|
|
113
|
+
: res.status === 'ORDER_CANCELED'
|
|
114
|
+
? 'Failed'
|
|
115
|
+
: 'Processing',
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=MayanAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MayanAdapter.js","sourceRoot":"","sources":["../../../../src/cross/adapters/MayanAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Currency } from '../constants/index.js';
|
|
2
|
+
import { useWalletSelector } from '@near-wallet-selector/react-hook';
|
|
3
|
+
import { WalletAdapterProps } from '@solana/wallet-adapter-base';
|
|
4
|
+
import { Connection } from '@solana/web3.js';
|
|
5
|
+
import { WalletClient } from 'viem';
|
|
6
|
+
import { Quote } from '../registry.js';
|
|
7
|
+
import { BaseSwapAdapter, Chain, NearQuoteParams, NormalizedQuote, NormalizedTxResponse, SwapStatus } from './BaseSwapAdapter.js';
|
|
8
|
+
export declare const MappingChainIdToBlockChain: Record<string, string>;
|
|
9
|
+
export declare class NearIntentsAdapter extends BaseSwapAdapter {
|
|
10
|
+
constructor();
|
|
11
|
+
getName(): string;
|
|
12
|
+
getIcon(): string;
|
|
13
|
+
getSupportedChains(): Chain[];
|
|
14
|
+
getSupportedTokens(_sourceChain: Chain, _destChain: Chain): Currency[];
|
|
15
|
+
getQuote(params: NearQuoteParams): Promise<NormalizedQuote>;
|
|
16
|
+
executeSwap({ quote }: Quote, walletClient: WalletClient, nearWallet?: ReturnType<typeof useWalletSelector>, sendBtcFn?: (params: {
|
|
17
|
+
recipient: string;
|
|
18
|
+
amount: string | number;
|
|
19
|
+
}) => Promise<string>, sendSolanaFn?: WalletAdapterProps['sendTransaction'], solanaConnection?: Connection): Promise<NormalizedTxResponse>;
|
|
20
|
+
getTransactionStatus(p: NormalizedTxResponse): Promise<SwapStatus>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
import { OneClickService, OpenAPI, QuoteRequest } from '@defuse-protocol/one-click-sdk-typescript';
|
|
2
|
+
import { ChainId } from '@openocean.finance/widget-sdk';
|
|
3
|
+
import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, createAssociatedTokenAccountInstruction, createTransferInstruction, getAccount, getAssociatedTokenAddress, } from '@solana/spl-token';
|
|
4
|
+
import { PublicKey, SystemProgram, Transaction } from '@solana/web3.js';
|
|
5
|
+
import { formatUnits } from 'viem';
|
|
6
|
+
import { BTC_DEFAULT_RECEIVER, CROSS_CHAIN_FEE_RECEIVER, SOLANA_NATIVE, ZERO_ADDRESS } from '../constants/index.js';
|
|
7
|
+
import { BaseSwapAdapter, NonEvmChain, } from './BaseSwapAdapter.js';
|
|
8
|
+
export const MappingChainIdToBlockChain = {
|
|
9
|
+
[NonEvmChain.Bitcoin]: 'btc',
|
|
10
|
+
[NonEvmChain.Solana]: 'sol',
|
|
11
|
+
[ChainId.MAINNET]: 'eth',
|
|
12
|
+
[ChainId.ARBITRUM]: 'arb',
|
|
13
|
+
[ChainId.BSCMAINNET]: 'bsc',
|
|
14
|
+
[ChainId.BERA]: 'bera',
|
|
15
|
+
[ChainId.MATIC]: 'pol',
|
|
16
|
+
[ChainId.BASE]: 'base',
|
|
17
|
+
};
|
|
18
|
+
const erc20Abi = [
|
|
19
|
+
{
|
|
20
|
+
inputs: [
|
|
21
|
+
{ type: 'address', name: 'recipient' },
|
|
22
|
+
{ type: 'uint256', name: 'amount' },
|
|
23
|
+
],
|
|
24
|
+
name: 'transfer',
|
|
25
|
+
outputs: [{ type: 'bool', name: '' }],
|
|
26
|
+
stateMutability: 'nonpayable',
|
|
27
|
+
type: 'function',
|
|
28
|
+
},
|
|
29
|
+
];
|
|
30
|
+
export class NearIntentsAdapter extends BaseSwapAdapter {
|
|
31
|
+
constructor() {
|
|
32
|
+
super();
|
|
33
|
+
// Initialize the API client
|
|
34
|
+
OpenAPI.BASE = 'https://1click.chaindefuser.com';
|
|
35
|
+
OpenAPI.TOKEN =
|
|
36
|
+
'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjIwMjUtMDQtMjMtdjEifQ.eyJ2IjoxLCJrZXlfdHlwZSI6ImRpc3RyaWJ1dGlvbl9jaGFubmVsIiwicGFydG5lcl9pZCI6Imt5YmVyIiwiaWF0IjoxNzQ5MDQyNDk1LCJleHAiOjE3ODA1Nzg0OTV9.sC5g1Jn4BRIGXkIRmN4dnK2BzbIglLOVuOmnrTItGaAP-QU69lbyYs2QGPE-5c7dRC9Cc3s0ktO50W9VXiqQEefu-VCQTKtjsfIwfAm7wDC1XKUT7lbQL2uODqXxR6yg5d8ENu6p8F2t86_T8IEpid6b1yBidKladbs9tI2QebSp3Sn6bjtsnpD-9W2dsW0Gd6PUkpZizb--YqkmdPQ8Eu85fIxtDO64qbp0Xp6NY8caFEA1yakbwaMEUWXnNX6PB_elfH28sF0cMbqlyAGiHe98J8tZ47kga6e6yZP4UHoak3Y_eRNuX_CpwoXfULx1t8YLoSJEQuP9JsPIoyw5dA';
|
|
37
|
+
}
|
|
38
|
+
getName() {
|
|
39
|
+
return 'Near Intents';
|
|
40
|
+
}
|
|
41
|
+
getIcon() {
|
|
42
|
+
return 'https://storage.googleapis.com/ks-setting-1d682dca/000c677f-2ebc-44cc-8d76-e4c6d07627631744962669170.png';
|
|
43
|
+
}
|
|
44
|
+
getSupportedChains() {
|
|
45
|
+
return [
|
|
46
|
+
NonEvmChain.Solana,
|
|
47
|
+
NonEvmChain.Bitcoin,
|
|
48
|
+
NonEvmChain.Near,
|
|
49
|
+
...Object.keys(MappingChainIdToBlockChain).map(Number),
|
|
50
|
+
];
|
|
51
|
+
}
|
|
52
|
+
getSupportedTokens(_sourceChain, _destChain) {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
async getQuote(params) {
|
|
56
|
+
const deadline = new Date();
|
|
57
|
+
// 1 hour for Bitcoin, 20 minutes for other chains
|
|
58
|
+
deadline.setSeconds(deadline.getSeconds() + (params.fromChain === NonEvmChain.Bitcoin ? 60 * 60 : 60 * 20));
|
|
59
|
+
const fromAssetId = 'assetId' in params.fromToken
|
|
60
|
+
? params.fromToken.assetId === 'near'
|
|
61
|
+
? 'nep141:wrap.near'
|
|
62
|
+
: params.fromToken.assetId
|
|
63
|
+
: params.nearTokens.find(token => {
|
|
64
|
+
const blockchain = MappingChainIdToBlockChain[params.fromChain];
|
|
65
|
+
if (params.fromChain === 'solana')
|
|
66
|
+
return params.fromToken.id === SOLANA_NATIVE
|
|
67
|
+
? token.symbol === 'SOL' && token.blockchain === 'sol'
|
|
68
|
+
: token.blockchain === blockchain && token.contractAddress === params.fromToken.id;
|
|
69
|
+
return (token.blockchain === blockchain &&
|
|
70
|
+
(params.fromToken.isNative
|
|
71
|
+
? token.symbol.toLowerCase() === params.fromToken.symbol?.toLowerCase() &&
|
|
72
|
+
token.assetId.includes('omft')
|
|
73
|
+
: token.contractAddress?.toLowerCase() === params.fromToken.wrapped?.address.toLowerCase()));
|
|
74
|
+
})?.assetId;
|
|
75
|
+
const toAssetId = 'assetId' in params.toToken
|
|
76
|
+
? params.toToken.assetId === 'near'
|
|
77
|
+
? 'nep141:wrap.near'
|
|
78
|
+
: params.toToken.assetId
|
|
79
|
+
: params.nearTokens.find(token => {
|
|
80
|
+
const blockchain = MappingChainIdToBlockChain[params.toChain];
|
|
81
|
+
if (params.toChain === 'solana')
|
|
82
|
+
return params.toToken.id === SOLANA_NATIVE
|
|
83
|
+
? token.symbol === 'SOL' && token.blockchain === 'sol'
|
|
84
|
+
: token.blockchain === blockchain && token.contractAddress === params.toToken.id;
|
|
85
|
+
return (token.blockchain === blockchain &&
|
|
86
|
+
(params.toToken.isNative
|
|
87
|
+
? token.symbol.toLowerCase() === params.toToken.symbol?.toLowerCase() && token.assetId.includes('omft')
|
|
88
|
+
: token.contractAddress?.toLowerCase() === params.toToken.wrapped?.address.toLowerCase()));
|
|
89
|
+
})?.assetId;
|
|
90
|
+
if (!fromAssetId || !toAssetId) {
|
|
91
|
+
throw new Error('not supported tokens');
|
|
92
|
+
}
|
|
93
|
+
// Create a quote request
|
|
94
|
+
const quoteRequest = {
|
|
95
|
+
dry: true,
|
|
96
|
+
deadline: deadline.toISOString(),
|
|
97
|
+
slippageTolerance: params.slippage,
|
|
98
|
+
swapType: QuoteRequest.swapType.EXACT_INPUT,
|
|
99
|
+
originAsset: fromAssetId,
|
|
100
|
+
depositType: QuoteRequest.depositType.ORIGIN_CHAIN,
|
|
101
|
+
destinationAsset: toAssetId,
|
|
102
|
+
amount: params.amount,
|
|
103
|
+
refundTo: params.sender,
|
|
104
|
+
refundType: QuoteRequest.refundType.ORIGIN_CHAIN,
|
|
105
|
+
referral: 'kyberswap',
|
|
106
|
+
recipient: params.recipient,
|
|
107
|
+
recipientType: QuoteRequest.recipientType.DESTINATION_CHAIN,
|
|
108
|
+
appFees: [
|
|
109
|
+
{
|
|
110
|
+
recipient: CROSS_CHAIN_FEE_RECEIVER.toLowerCase(),
|
|
111
|
+
fee: params.feeBps,
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
};
|
|
115
|
+
const quote = await OneClickService.getQuote(quoteRequest);
|
|
116
|
+
const formattedInputAmount = formatUnits(BigInt(params.amount), params.fromToken.decimals);
|
|
117
|
+
const formattedOutputAmount = formatUnits(BigInt(quote.quote.amountOut), params.toToken.decimals);
|
|
118
|
+
const inputUsd = +quote.quote.amountInUsd;
|
|
119
|
+
const outputUsd = +quote.quote.amountOutUsd;
|
|
120
|
+
return {
|
|
121
|
+
quoteParams: params,
|
|
122
|
+
outputAmount: BigInt(quote.quote.amountOut),
|
|
123
|
+
formattedOutputAmount,
|
|
124
|
+
inputUsd: +quote.quote.amountInUsd,
|
|
125
|
+
outputUsd: +quote.quote.amountOutUsd,
|
|
126
|
+
priceImpact: !inputUsd || !outputUsd ? NaN : ((inputUsd - outputUsd) * 100) / inputUsd,
|
|
127
|
+
rate: +formattedOutputAmount / +formattedInputAmount,
|
|
128
|
+
gasFeeUsd: 0,
|
|
129
|
+
timeEstimate: quote.quote.timeEstimate || 0,
|
|
130
|
+
// Near intent dont need to approve, we send token to contract directly
|
|
131
|
+
contractAddress: ZERO_ADDRESS,
|
|
132
|
+
rawQuote: quote,
|
|
133
|
+
protocolFee: 0,
|
|
134
|
+
platformFeePercent: (params.feeBps * 100) / 10000,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
async executeSwap({ quote }, walletClient, nearWallet, sendBtcFn, sendSolanaFn, solanaConnection) {
|
|
138
|
+
const quoteParams = {
|
|
139
|
+
...quote.rawQuote.quoteRequest,
|
|
140
|
+
dry: false,
|
|
141
|
+
// adjust slippage to 0,01% to accept the rate change
|
|
142
|
+
slippageTolerance: Math.floor(quote.quoteParams.slippage * 0.9) > 1
|
|
143
|
+
? Math.floor(quote.quoteParams.slippage * 0.9)
|
|
144
|
+
: quote.quoteParams.slippage,
|
|
145
|
+
};
|
|
146
|
+
delete quoteParams.correlationId;
|
|
147
|
+
const refreshedQuote = await OneClickService.getQuote(quoteParams);
|
|
148
|
+
const depositAddress = refreshedQuote?.quote?.depositAddress;
|
|
149
|
+
if (!depositAddress) {
|
|
150
|
+
throw new Error('Deposit address not found');
|
|
151
|
+
}
|
|
152
|
+
if (refreshedQuote.quoteRequest.recipient === ZERO_ADDRESS ||
|
|
153
|
+
refreshedQuote.quoteRequest.refundTo === ZERO_ADDRESS ||
|
|
154
|
+
refreshedQuote.quoteRequest.recipient.toLowerCase() === BTC_DEFAULT_RECEIVER ||
|
|
155
|
+
refreshedQuote.quoteRequest.refundTo.toLowerCase() === BTC_DEFAULT_RECEIVER) {
|
|
156
|
+
throw new Error('Near Intent recipient or refundTo is ZERO ADDRESS');
|
|
157
|
+
}
|
|
158
|
+
if (BigInt(refreshedQuote.quote.minAmountOut) < BigInt(quote.rawQuote.quote.minAmountOut)) {
|
|
159
|
+
throw new Error('Quote amount out is less than expected');
|
|
160
|
+
}
|
|
161
|
+
const params = {
|
|
162
|
+
sender: quote.quoteParams.sender,
|
|
163
|
+
id: depositAddress, // specific id for each provider
|
|
164
|
+
adapter: this.getName(),
|
|
165
|
+
sourceChain: quote.quoteParams.fromChain,
|
|
166
|
+
targetChain: quote.quoteParams.toChain,
|
|
167
|
+
inputAmount: quote.quoteParams.amount,
|
|
168
|
+
outputAmount: quote.outputAmount.toString(),
|
|
169
|
+
sourceToken: quote.quoteParams.fromToken,
|
|
170
|
+
targetToken: quote.quoteParams.toToken,
|
|
171
|
+
timestamp: new Date().getTime(),
|
|
172
|
+
};
|
|
173
|
+
if (quote.quoteParams.fromChain === NonEvmChain.Solana) {
|
|
174
|
+
return new Promise(async (resolve, reject) => {
|
|
175
|
+
if (!sendSolanaFn || !solanaConnection) {
|
|
176
|
+
reject('Not connected');
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const waitForConfirmation = async (txId) => {
|
|
180
|
+
try {
|
|
181
|
+
const latestBlockhash = await solanaConnection.getLatestBlockhash();
|
|
182
|
+
// Wait for confirmation with timeout
|
|
183
|
+
const confirmation = await Promise.race([
|
|
184
|
+
solanaConnection.confirmTransaction({
|
|
185
|
+
signature: txId,
|
|
186
|
+
blockhash: latestBlockhash.blockhash,
|
|
187
|
+
lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,
|
|
188
|
+
}, 'confirmed'),
|
|
189
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Transaction confirmation timeout')), 60000)),
|
|
190
|
+
]);
|
|
191
|
+
const confirmationResult = confirmation;
|
|
192
|
+
if (confirmationResult.value.err) {
|
|
193
|
+
throw new Error(`Transaction failed: ${JSON.stringify(confirmationResult.value.err)}`);
|
|
194
|
+
}
|
|
195
|
+
console.log('Transaction confirmed successfully!');
|
|
196
|
+
}
|
|
197
|
+
catch (confirmError) {
|
|
198
|
+
console.error('Transaction confirmation failed:', confirmError);
|
|
199
|
+
// Check if transaction actually succeeded despite timeout
|
|
200
|
+
const txStatus = await solanaConnection.getSignatureStatus(txId);
|
|
201
|
+
if (txStatus?.value?.confirmationStatus !== 'confirmed') {
|
|
202
|
+
throw new Error(`Transaction was not confirmed: ${confirmError.message}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
const fromPubkey = new PublicKey(quote.quoteParams.sender);
|
|
207
|
+
const recipientPubkey = new PublicKey(depositAddress);
|
|
208
|
+
const fromToken = quote.quoteParams.fromToken;
|
|
209
|
+
// const latestBlockhash = await solanaConnection.getLatestBlockhash('confirmed')
|
|
210
|
+
if (fromToken.id === SOLANA_NATIVE) {
|
|
211
|
+
const transaction = new Transaction().add(SystemProgram.transfer({
|
|
212
|
+
fromPubkey: fromPubkey,
|
|
213
|
+
toPubkey: recipientPubkey,
|
|
214
|
+
lamports: BigInt(quote.quoteParams.amount),
|
|
215
|
+
}));
|
|
216
|
+
try {
|
|
217
|
+
const signature = await sendSolanaFn(transaction, solanaConnection);
|
|
218
|
+
await waitForConfirmation(signature);
|
|
219
|
+
resolve({
|
|
220
|
+
...params,
|
|
221
|
+
sourceTxHash: signature,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
reject(error);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
const mintPubkey = new PublicKey(fromToken.id);
|
|
230
|
+
// Get associated token addresses
|
|
231
|
+
const senderTokenAddress = await getAssociatedTokenAddress(mintPubkey, fromPubkey, false, TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID);
|
|
232
|
+
const recipientTokenAddress = await getAssociatedTokenAddress(mintPubkey, recipientPubkey, false, TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID);
|
|
233
|
+
const transaction = new Transaction();
|
|
234
|
+
try {
|
|
235
|
+
// Check if recipient's token account exists
|
|
236
|
+
await getAccount(solanaConnection, recipientTokenAddress);
|
|
237
|
+
}
|
|
238
|
+
catch (err) {
|
|
239
|
+
// Account doesn't exist, create it
|
|
240
|
+
console.log('Creating recipient token account...');
|
|
241
|
+
transaction.add(createAssociatedTokenAccountInstruction(fromPubkey, // payer
|
|
242
|
+
recipientTokenAddress, // associated token account
|
|
243
|
+
recipientPubkey, // owner
|
|
244
|
+
mintPubkey, // mint
|
|
245
|
+
TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID));
|
|
246
|
+
}
|
|
247
|
+
// Add transfer instruction
|
|
248
|
+
transaction.add(createTransferInstruction(senderTokenAddress, // source
|
|
249
|
+
recipientTokenAddress, // destination
|
|
250
|
+
fromPubkey, // owner
|
|
251
|
+
BigInt(quote.quoteParams.amount), [], TOKEN_PROGRAM_ID));
|
|
252
|
+
try {
|
|
253
|
+
const signature = await sendSolanaFn(transaction, solanaConnection);
|
|
254
|
+
await waitForConfirmation(signature);
|
|
255
|
+
resolve({
|
|
256
|
+
...params,
|
|
257
|
+
sourceTxHash: signature,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
reject(error);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return;
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
if (quote.quoteParams.fromChain === NonEvmChain.Bitcoin) {
|
|
268
|
+
return new Promise(async (resolve, reject) => {
|
|
269
|
+
if (!sendBtcFn) {
|
|
270
|
+
reject('Not connected');
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
try {
|
|
274
|
+
const tx = await sendBtcFn({
|
|
275
|
+
recipient: depositAddress,
|
|
276
|
+
amount: quote.quoteParams.amount,
|
|
277
|
+
});
|
|
278
|
+
await OneClickService.submitDepositTx({
|
|
279
|
+
txHash: tx,
|
|
280
|
+
depositAddress,
|
|
281
|
+
}).catch(e => {
|
|
282
|
+
console.log('NearIntents submitDepositTx failed', e);
|
|
283
|
+
});
|
|
284
|
+
resolve({
|
|
285
|
+
...params,
|
|
286
|
+
sourceTxHash: tx,
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
catch (e) {
|
|
290
|
+
console.log(e);
|
|
291
|
+
reject(e);
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
if (quote.quoteParams.fromChain === NonEvmChain.Near) {
|
|
297
|
+
return new Promise(async (resolve, reject) => {
|
|
298
|
+
if (!nearWallet || !nearWallet.signedAccountId) {
|
|
299
|
+
reject('Not connected');
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
const isNative = quote.quoteParams.fromToken.assetId === 'near';
|
|
303
|
+
const transactions = [];
|
|
304
|
+
if (!isNative)
|
|
305
|
+
transactions.push({
|
|
306
|
+
signerId: nearWallet.signedAccountId,
|
|
307
|
+
receiverId: quote.quoteParams.fromToken.contractAddress,
|
|
308
|
+
actions: [
|
|
309
|
+
{
|
|
310
|
+
type: 'FunctionCall',
|
|
311
|
+
params: {
|
|
312
|
+
methodName: 'storage_deposit',
|
|
313
|
+
args: { account_id: depositAddress, registration_only: true },
|
|
314
|
+
gas: '30000000000000',
|
|
315
|
+
deposit: '1250000000000000000000', // 0.00125 NEAR
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
],
|
|
319
|
+
});
|
|
320
|
+
transactions.push({
|
|
321
|
+
signerId: nearWallet.signedAccountId,
|
|
322
|
+
receiverId: isNative ? depositAddress : quote.quoteParams.fromToken.contractAddress,
|
|
323
|
+
actions: [
|
|
324
|
+
isNative
|
|
325
|
+
? {
|
|
326
|
+
type: 'Transfer',
|
|
327
|
+
params: {
|
|
328
|
+
deposit: quote.quoteParams.amount,
|
|
329
|
+
},
|
|
330
|
+
}
|
|
331
|
+
: {
|
|
332
|
+
type: 'FunctionCall',
|
|
333
|
+
params: {
|
|
334
|
+
methodName: 'ft_transfer',
|
|
335
|
+
args: {
|
|
336
|
+
receiver_id: depositAddress,
|
|
337
|
+
amount: quote.quoteParams.amount,
|
|
338
|
+
},
|
|
339
|
+
gas: '30000000000000',
|
|
340
|
+
deposit: '1',
|
|
341
|
+
},
|
|
342
|
+
},
|
|
343
|
+
],
|
|
344
|
+
});
|
|
345
|
+
// My near wallet is redirect to wallet website -> need store to process later
|
|
346
|
+
if (nearWallet?.wallet?.id === 'my-near-wallet')
|
|
347
|
+
localStorage.setItem('cross-chain-swap-my-near-wallet-tx', JSON.stringify({
|
|
348
|
+
...params,
|
|
349
|
+
sourceTxHash: depositAddress,
|
|
350
|
+
}));
|
|
351
|
+
await nearWallet
|
|
352
|
+
.signAndSendTransactions({
|
|
353
|
+
transactions,
|
|
354
|
+
})
|
|
355
|
+
.catch(e => {
|
|
356
|
+
console.log('NearIntents signAndSendTransactions failed', e);
|
|
357
|
+
if (nearWallet?.wallet?.id === 'my-near-wallet')
|
|
358
|
+
reject();
|
|
359
|
+
else
|
|
360
|
+
reject(e);
|
|
361
|
+
});
|
|
362
|
+
resolve({
|
|
363
|
+
...params,
|
|
364
|
+
sourceTxHash: depositAddress,
|
|
365
|
+
});
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
return new Promise(async (resolve, reject) => {
|
|
369
|
+
try {
|
|
370
|
+
if (!walletClient || !walletClient.account)
|
|
371
|
+
reject('Not connected');
|
|
372
|
+
if (quote.quoteParams.sender === ZERO_ADDRESS || quote.quoteParams.recipient === ZERO_ADDRESS) {
|
|
373
|
+
reject('Near Intent refundTo or recipient is ZERO ADDRESS');
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
const account = walletClient.account?.address;
|
|
377
|
+
const fromToken = quote.quoteParams.fromToken;
|
|
378
|
+
const hash = await (fromToken.isNative
|
|
379
|
+
? walletClient.sendTransaction({
|
|
380
|
+
to: depositAddress,
|
|
381
|
+
value: BigInt(quote.quoteParams.amount),
|
|
382
|
+
chain: undefined,
|
|
383
|
+
account,
|
|
384
|
+
})
|
|
385
|
+
: walletClient.writeContract({
|
|
386
|
+
address: ('contractAddress' in fromToken
|
|
387
|
+
? fromToken.contractAddress
|
|
388
|
+
: fromToken.wrapped.address),
|
|
389
|
+
abi: erc20Abi,
|
|
390
|
+
functionName: 'transfer',
|
|
391
|
+
args: [depositAddress, quote.quoteParams.amount],
|
|
392
|
+
chain: undefined,
|
|
393
|
+
account,
|
|
394
|
+
}));
|
|
395
|
+
await OneClickService.submitDepositTx({
|
|
396
|
+
txHash: hash,
|
|
397
|
+
depositAddress,
|
|
398
|
+
}).catch(e => {
|
|
399
|
+
console.log('NearIntents submitDepositTx failed', e);
|
|
400
|
+
});
|
|
401
|
+
resolve({
|
|
402
|
+
...params,
|
|
403
|
+
sourceTxHash: hash,
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
catch (e) {
|
|
407
|
+
reject(e);
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
async getTransactionStatus(p) {
|
|
412
|
+
const res = await OneClickService.getExecutionStatus(p.id);
|
|
413
|
+
return {
|
|
414
|
+
txHash: res.swapDetails?.destinationChainTxHashes[0]?.hash || '',
|
|
415
|
+
status: res.status === 'SUCCESS'
|
|
416
|
+
? 'Success'
|
|
417
|
+
: res.status === 'FAILED'
|
|
418
|
+
? 'Failed'
|
|
419
|
+
: res.status === 'REFUNDED'
|
|
420
|
+
? 'Refunded'
|
|
421
|
+
: 'Processing',
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
//# sourceMappingURL=NearIntentsAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NearIntentsAdapter.js","sourceRoot":"","sources":["../../../../src/cross/adapters/NearIntentsAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Currency } from '../constants/index.js';
|
|
2
|
+
import { WalletClient } from 'viem';
|
|
3
|
+
import { Quote } from '../registry.js';
|
|
4
|
+
import { BaseSwapAdapter, Chain, NormalizedQuote, NormalizedTxResponse, QuoteParams, SwapStatus } from './BaseSwapAdapter.js';
|
|
5
|
+
export declare class OptimexAdapter extends BaseSwapAdapter {
|
|
6
|
+
private tokens;
|
|
7
|
+
constructor();
|
|
8
|
+
private getTokens;
|
|
9
|
+
getName(): string;
|
|
10
|
+
getIcon(): string;
|
|
11
|
+
getSupportedChains(): Chain[];
|
|
12
|
+
getSupportedTokens(_sourceChain: Chain, _destChain: Chain): Currency[];
|
|
13
|
+
getQuote(params: QuoteParams): Promise<NormalizedQuote>;
|
|
14
|
+
executeSwap({ quote }: Quote, walletClient: WalletClient, _nearWallet: any, sendBtcFn?: (params: {
|
|
15
|
+
recipient: string;
|
|
16
|
+
amount: string | number;
|
|
17
|
+
}) => Promise<string>): Promise<NormalizedTxResponse>;
|
|
18
|
+
getTransactionStatus(p: NormalizedTxResponse): Promise<SwapStatus>;
|
|
19
|
+
}
|