@shapeshiftoss/swapper 17.6.6-alpha.1 → 17.6.7
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/cjs/.tsbuildinfo +1 -1
- package/dist/cjs/constants.js +27 -18
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.test.js +2 -0
- package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeRate.test.js +4 -0
- package/dist/cjs/swappers/CetusSwapper/CetusSwapper.d.ts +2 -0
- package/dist/cjs/swappers/CetusSwapper/CetusSwapper.js +7 -0
- package/dist/cjs/swappers/CetusSwapper/endpoints.d.ts +2 -0
- package/dist/cjs/swappers/CetusSwapper/endpoints.js +87 -0
- package/dist/cjs/swappers/CetusSwapper/index.d.ts +1 -0
- package/dist/cjs/swappers/CetusSwapper/index.js +17 -0
- package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeQuote.d.ts +3 -0
- package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeQuote.js +122 -0
- package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeRate.d.ts +3 -0
- package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeRate.js +110 -0
- package/dist/cjs/swappers/CetusSwapper/utils/constants.d.ts +3 -0
- package/dist/cjs/swappers/CetusSwapper/utils/constants.js +9 -0
- package/dist/cjs/swappers/CetusSwapper/utils/helpers.d.ts +13 -0
- package/dist/cjs/swappers/CetusSwapper/utils/helpers.js +118 -0
- package/dist/cjs/swappers/NearIntentsSwapper/NearIntentsSwapper.js +2 -0
- package/dist/cjs/swappers/NearIntentsSwapper/endpoints.js +43 -0
- package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +50 -10
- package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +65 -9
- package/dist/cjs/swappers/NearIntentsSwapper/types.d.ts +2 -2
- package/dist/cjs/swappers/NearIntentsSwapper/types.js +4 -0
- package/dist/cjs/swappers/NearIntentsSwapper/utils/helpers/helpers.js +12 -7
- package/dist/cjs/swappers/RelaySwapper/RelaySwapper.js +1 -0
- package/dist/cjs/swappers/RelaySwapper/constant.d.ts +2 -2
- package/dist/cjs/swappers/RelaySwapper/constant.js +27 -36
- package/dist/cjs/swappers/RelaySwapper/endpoints.js +4 -0
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayAssetAddress.js +2 -0
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayDefaultUserAddress.d.ts +1 -1
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayDefaultUserAddress.js +2 -0
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayPsbtRelayer.js +1 -1
- package/dist/cjs/swappers/RelaySwapper/utils/getTrade.js +7 -2
- package/dist/cjs/swappers/RelaySwapper/utils/relayTokenToAssetId.js +15 -0
- package/dist/cjs/thorchain-utils/getL1RateOrQuote.js +12 -0
- package/dist/cjs/tron-utils/getTronTransactionFees.d.ts +2 -0
- package/dist/cjs/tron-utils/getTronTransactionFees.js +14 -0
- package/dist/cjs/tron-utils/getUnsignedTronTransaction.d.ts +2 -0
- package/dist/cjs/tron-utils/getUnsignedTronTransaction.js +28 -0
- package/dist/cjs/types.d.ts +56 -11
- package/dist/cjs/types.js +1 -0
- package/dist/cjs/utils.d.ts +11 -3
- package/dist/cjs/utils.js +34 -1
- package/dist/esm/.tsbuildinfo +1 -1
- package/dist/esm/constants.js +9 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.test.js +2 -0
- package/dist/esm/swappers/ButterSwap/swapperApi/getTradeRate.test.js +4 -0
- package/dist/esm/swappers/CetusSwapper/CetusSwapper.d.ts +2 -0
- package/dist/esm/swappers/CetusSwapper/CetusSwapper.js +4 -0
- package/dist/esm/swappers/CetusSwapper/endpoints.d.ts +2 -0
- package/dist/esm/swappers/CetusSwapper/endpoints.js +84 -0
- package/dist/esm/swappers/CetusSwapper/index.d.ts +1 -0
- package/dist/esm/swappers/CetusSwapper/index.js +1 -0
- package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeQuote.d.ts +3 -0
- package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeQuote.js +118 -0
- package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeRate.d.ts +3 -0
- package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeRate.js +106 -0
- package/dist/esm/swappers/CetusSwapper/utils/constants.d.ts +3 -0
- package/dist/esm/swappers/CetusSwapper/utils/constants.js +5 -0
- package/dist/esm/swappers/CetusSwapper/utils/helpers.d.ts +13 -0
- package/dist/esm/swappers/CetusSwapper/utils/helpers.js +86 -0
- package/dist/esm/swappers/NearIntentsSwapper/NearIntentsSwapper.js +3 -1
- package/dist/esm/swappers/NearIntentsSwapper/endpoints.js +43 -0
- package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +51 -11
- package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +66 -10
- package/dist/esm/swappers/NearIntentsSwapper/types.d.ts +2 -2
- package/dist/esm/swappers/NearIntentsSwapper/types.js +4 -0
- package/dist/esm/swappers/NearIntentsSwapper/utils/helpers/helpers.js +13 -8
- package/dist/esm/swappers/RelaySwapper/RelaySwapper.js +2 -1
- package/dist/esm/swappers/RelaySwapper/constant.d.ts +2 -2
- package/dist/esm/swappers/RelaySwapper/constant.js +6 -15
- package/dist/esm/swappers/RelaySwapper/endpoints.js +4 -0
- package/dist/esm/swappers/RelaySwapper/utils/getRelayAssetAddress.js +4 -2
- package/dist/esm/swappers/RelaySwapper/utils/getRelayDefaultUserAddress.d.ts +1 -1
- package/dist/esm/swappers/RelaySwapper/utils/getRelayDefaultUserAddress.js +4 -2
- package/dist/esm/swappers/RelaySwapper/utils/getRelayPsbtRelayer.js +1 -1
- package/dist/esm/swappers/RelaySwapper/utils/getTrade.js +8 -3
- package/dist/esm/swappers/RelaySwapper/utils/relayTokenToAssetId.js +17 -2
- package/dist/esm/thorchain-utils/getL1RateOrQuote.js +12 -0
- package/dist/esm/tron-utils/getTronTransactionFees.d.ts +2 -0
- package/dist/esm/tron-utils/getTronTransactionFees.js +10 -0
- package/dist/esm/tron-utils/getUnsignedTronTransaction.d.ts +2 -0
- package/dist/esm/tron-utils/getUnsignedTronTransaction.js +24 -0
- package/dist/esm/types.d.ts +56 -11
- package/dist/esm/types.js +1 -0
- package/dist/esm/utils.d.ts +11 -3
- package/dist/esm/utils.js +31 -1
- package/package.json +17 -10
package/dist/cjs/constants.js
CHANGED
|
@@ -8,23 +8,25 @@ const BebopSwapper_1 = require("./swappers/BebopSwapper/BebopSwapper");
|
|
|
8
8
|
const endpoints_2 = require("./swappers/BebopSwapper/endpoints");
|
|
9
9
|
const ButterSwap_1 = require("./swappers/ButterSwap/ButterSwap");
|
|
10
10
|
const endpoints_3 = require("./swappers/ButterSwap/endpoints");
|
|
11
|
+
const CetusSwapper_1 = require("./swappers/CetusSwapper/CetusSwapper");
|
|
12
|
+
const endpoints_4 = require("./swappers/CetusSwapper/endpoints");
|
|
11
13
|
const ChainflipSwapper_1 = require("./swappers/ChainflipSwapper/ChainflipSwapper");
|
|
12
|
-
const
|
|
14
|
+
const endpoints_5 = require("./swappers/ChainflipSwapper/endpoints");
|
|
13
15
|
const CowSwapper_1 = require("./swappers/CowSwapper/CowSwapper");
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
+
const endpoints_6 = require("./swappers/CowSwapper/endpoints");
|
|
17
|
+
const endpoints_7 = require("./swappers/JupiterSwapper/endpoints");
|
|
16
18
|
const JupiterSwapper_1 = require("./swappers/JupiterSwapper/JupiterSwapper");
|
|
17
|
-
const
|
|
19
|
+
const endpoints_8 = require("./swappers/MayachainSwapper/endpoints");
|
|
18
20
|
const MayachainSwapper_1 = require("./swappers/MayachainSwapper/MayachainSwapper");
|
|
19
|
-
const
|
|
21
|
+
const endpoints_9 = require("./swappers/NearIntentsSwapper/endpoints");
|
|
20
22
|
const NearIntentsSwapper_1 = require("./swappers/NearIntentsSwapper/NearIntentsSwapper");
|
|
21
|
-
const
|
|
23
|
+
const endpoints_10 = require("./swappers/PortalsSwapper/endpoints");
|
|
22
24
|
const PortalsSwapper_1 = require("./swappers/PortalsSwapper/PortalsSwapper");
|
|
23
25
|
const RelaySwapper_1 = require("./swappers/RelaySwapper");
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
+
const endpoints_11 = require("./swappers/RelaySwapper/endpoints");
|
|
27
|
+
const endpoints_12 = require("./swappers/ThorchainSwapper/endpoints");
|
|
26
28
|
const ThorchainSwapper_1 = require("./swappers/ThorchainSwapper/ThorchainSwapper");
|
|
27
|
-
const
|
|
29
|
+
const endpoints_13 = require("./swappers/ZrxSwapper/endpoints");
|
|
28
30
|
const ZrxSwapper_1 = require("./swappers/ZrxSwapper/ZrxSwapper");
|
|
29
31
|
const types_1 = require("./types");
|
|
30
32
|
const utils_2 = require("./utils");
|
|
@@ -38,19 +40,19 @@ exports.QUOTE_TIMEOUT_ERROR = (0, utils_2.makeSwapErrorRight)({
|
|
|
38
40
|
exports.swappers = {
|
|
39
41
|
[types_1.SwapperName.Thorchain]: {
|
|
40
42
|
...ThorchainSwapper_1.thorchainSwapper,
|
|
41
|
-
...
|
|
43
|
+
...endpoints_12.thorchainApi,
|
|
42
44
|
},
|
|
43
45
|
[types_1.SwapperName.Mayachain]: {
|
|
44
46
|
...MayachainSwapper_1.mayachainSwapper,
|
|
45
|
-
...
|
|
47
|
+
...endpoints_8.mayachainApi,
|
|
46
48
|
},
|
|
47
49
|
[types_1.SwapperName.Zrx]: {
|
|
48
50
|
...ZrxSwapper_1.zrxSwapper,
|
|
49
|
-
...
|
|
51
|
+
...endpoints_13.zrxApi,
|
|
50
52
|
},
|
|
51
53
|
[types_1.SwapperName.CowSwap]: {
|
|
52
54
|
...CowSwapper_1.cowSwapper,
|
|
53
|
-
...
|
|
55
|
+
...endpoints_6.cowApi,
|
|
54
56
|
},
|
|
55
57
|
[types_1.SwapperName.ArbitrumBridge]: {
|
|
56
58
|
...ArbitrumBridgeSwapper_1.arbitrumBridgeSwapper,
|
|
@@ -58,19 +60,19 @@ exports.swappers = {
|
|
|
58
60
|
},
|
|
59
61
|
[types_1.SwapperName.Portals]: {
|
|
60
62
|
...PortalsSwapper_1.portalsSwapper,
|
|
61
|
-
...
|
|
63
|
+
...endpoints_10.portalsApi,
|
|
62
64
|
},
|
|
63
65
|
[types_1.SwapperName.Chainflip]: {
|
|
64
66
|
...ChainflipSwapper_1.chainflipSwapper,
|
|
65
|
-
...
|
|
67
|
+
...endpoints_5.chainflipApi,
|
|
66
68
|
},
|
|
67
69
|
[types_1.SwapperName.Jupiter]: {
|
|
68
70
|
...JupiterSwapper_1.jupiterSwapper,
|
|
69
|
-
...
|
|
71
|
+
...endpoints_7.jupiterApi,
|
|
70
72
|
},
|
|
71
73
|
[types_1.SwapperName.Relay]: {
|
|
72
74
|
...RelaySwapper_1.relaySwapper,
|
|
73
|
-
...
|
|
75
|
+
...endpoints_11.relayApi,
|
|
74
76
|
},
|
|
75
77
|
[types_1.SwapperName.ButterSwap]: {
|
|
76
78
|
...ButterSwap_1.butterSwap,
|
|
@@ -82,7 +84,11 @@ exports.swappers = {
|
|
|
82
84
|
},
|
|
83
85
|
[types_1.SwapperName.NearIntents]: {
|
|
84
86
|
...NearIntentsSwapper_1.nearIntentsSwapper,
|
|
85
|
-
...
|
|
87
|
+
...endpoints_9.nearIntentsApi,
|
|
88
|
+
},
|
|
89
|
+
[types_1.SwapperName.Cetus]: {
|
|
90
|
+
...CetusSwapper_1.cetusSwapper,
|
|
91
|
+
...endpoints_4.cetusApi,
|
|
86
92
|
},
|
|
87
93
|
[types_1.SwapperName.Test]: undefined,
|
|
88
94
|
};
|
|
@@ -96,6 +102,7 @@ const DEFAULT_MAYA_SLIPPAGE_DECIMAL_PERCENTAGE = '0.01'; // 1%
|
|
|
96
102
|
const DEFAULT_ARBITRUM_BRIDGE_SLIPPAGE_DECIMAL_PERCENTAGE = '0'; // no slippage for Arbitrum Bridge, so no slippage tolerance
|
|
97
103
|
const DEFAULT_CHAINFLIP_SLIPPAGE_DECIMAL_PERCENTAGE = '0.02'; // 2%
|
|
98
104
|
const DEFAULT_BUTTERSWAP_SLIPPAGE_DECIMAL_PERCENTAGE = '0.015'; // 1.5%
|
|
105
|
+
const DEFAULT_CETUS_SLIPPAGE_DECIMAL_PERCENTAGE = '0.005'; // .5%
|
|
99
106
|
const getDefaultSlippageDecimalPercentageForSwapper = (swapperName) => {
|
|
100
107
|
if (swapperName === undefined)
|
|
101
108
|
return DEFAULT_SLIPPAGE_DECIMAL_PERCENTAGE;
|
|
@@ -124,6 +131,8 @@ const getDefaultSlippageDecimalPercentageForSwapper = (swapperName) => {
|
|
|
124
131
|
return DEFAULT_BUTTERSWAP_SLIPPAGE_DECIMAL_PERCENTAGE;
|
|
125
132
|
case types_1.SwapperName.NearIntents:
|
|
126
133
|
return DEFAULT_NEAR_INTENTS_SLIPPAGE_DECIMAL_PERCENTAGE;
|
|
134
|
+
case types_1.SwapperName.Cetus:
|
|
135
|
+
return DEFAULT_CETUS_SLIPPAGE_DECIMAL_PERCENTAGE;
|
|
127
136
|
default:
|
|
128
137
|
return (0, utils_1.assertUnreachable)(swapperName);
|
|
129
138
|
}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export * from './safe-utils';
|
|
|
4
4
|
export * from './swapper';
|
|
5
5
|
export * from './swappers/ArbitrumBridgeSwapper';
|
|
6
6
|
export * from './swappers/BebopSwapper';
|
|
7
|
+
export * from './swappers/CetusSwapper';
|
|
7
8
|
export * from './swappers/ChainflipSwapper';
|
|
8
9
|
export * from './swappers/CowSwapper';
|
|
9
10
|
export * from './swappers/JupiterSwapper';
|
package/dist/cjs/index.js
CHANGED
|
@@ -33,6 +33,7 @@ __exportStar(require("./safe-utils"), exports);
|
|
|
33
33
|
__exportStar(require("./swapper"), exports);
|
|
34
34
|
__exportStar(require("./swappers/ArbitrumBridgeSwapper"), exports);
|
|
35
35
|
__exportStar(require("./swappers/BebopSwapper"), exports);
|
|
36
|
+
__exportStar(require("./swappers/CetusSwapper"), exports);
|
|
36
37
|
__exportStar(require("./swappers/ChainflipSwapper"), exports);
|
|
37
38
|
__exportStar(require("./swappers/CowSwapper"), exports);
|
|
38
39
|
__exportStar(require("./swappers/JupiterSwapper"), exports);
|
|
@@ -32,6 +32,8 @@ vitest_1.vi.mock('../xhr', () => ({
|
|
|
32
32
|
assertGetUtxoChainAdapter: () => vitest_1.vi.fn(),
|
|
33
33
|
assertGetCosmosSdkChainAdapter: () => vitest_1.vi.fn(),
|
|
34
34
|
assertGetSolanaChainAdapter: () => vitest_1.vi.fn(),
|
|
35
|
+
assertGetTronChainAdapter: () => vitest_1.vi.fn(),
|
|
36
|
+
assertGetSuiChainAdapter: () => vitest_1.vi.fn(),
|
|
35
37
|
config: {
|
|
36
38
|
VITE_BUTTERSWAP_CLIENT_ID: 'test',
|
|
37
39
|
},
|
|
@@ -26,6 +26,8 @@ vitest_1.vi.mock('../utils/butterSwapService', () => ({
|
|
|
26
26
|
assertGetUtxoChainAdapter: () => vitest_1.vi.fn(),
|
|
27
27
|
assertGetCosmosSdkChainAdapter: () => vitest_1.vi.fn(),
|
|
28
28
|
assertGetSolanaChainAdapter: () => vitest_1.vi.fn(),
|
|
29
|
+
assertGetTronChainAdapter: () => vitest_1.vi.fn(),
|
|
30
|
+
assertGetSuiChainAdapter: () => vitest_1.vi.fn(),
|
|
29
31
|
config: {
|
|
30
32
|
VITE_BUTTERSWAP_CLIENT_ID: 'test',
|
|
31
33
|
},
|
|
@@ -58,6 +60,8 @@ vitest_1.vi.mock('../utils/butterSwapService', () => ({
|
|
|
58
60
|
assertGetUtxoChainAdapter: () => vitest_1.vi.fn(),
|
|
59
61
|
assertGetCosmosSdkChainAdapter: () => vitest_1.vi.fn(),
|
|
60
62
|
assertGetSolanaChainAdapter: () => vitest_1.vi.fn(),
|
|
63
|
+
assertGetTronChainAdapter: () => vitest_1.vi.fn(),
|
|
64
|
+
assertGetSuiChainAdapter: () => vitest_1.vi.fn(),
|
|
61
65
|
config: {
|
|
62
66
|
VITE_BUTTERSWAP_CLIENT_ID: 'test',
|
|
63
67
|
},
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cetusApi = void 0;
|
|
4
|
+
const unchained_client_1 = require("@shapeshiftoss/unchained-client");
|
|
5
|
+
const utils_1 = require("../../utils");
|
|
6
|
+
const getTradeQuote_1 = require("./swapperApi/getTradeQuote");
|
|
7
|
+
const getTradeRate_1 = require("./swapperApi/getTradeRate");
|
|
8
|
+
const helpers_1 = require("./utils/helpers");
|
|
9
|
+
exports.cetusApi = {
|
|
10
|
+
getTradeQuote: (input, deps) => {
|
|
11
|
+
return (0, getTradeQuote_1.getTradeQuote)(input, deps);
|
|
12
|
+
},
|
|
13
|
+
getTradeRate: (input, deps) => {
|
|
14
|
+
return (0, getTradeRate_1.getTradeRate)(input, deps);
|
|
15
|
+
},
|
|
16
|
+
getUnsignedSuiTransaction: async ({ stepIndex, tradeQuote, from, assertGetSuiChainAdapter, }) => {
|
|
17
|
+
if (!(0, utils_1.isExecutableTradeQuote)(tradeQuote))
|
|
18
|
+
throw new Error('Unable to execute a trade rate quote');
|
|
19
|
+
const step = (0, utils_1.getExecutableTradeStep)(tradeQuote, stepIndex);
|
|
20
|
+
const { accountNumber, sellAsset, buyAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit } = step;
|
|
21
|
+
const adapter = assertGetSuiChainAdapter(sellAsset.chainId);
|
|
22
|
+
const sdk = await (0, helpers_1.getCetusSDK)();
|
|
23
|
+
sdk.senderAddress = from;
|
|
24
|
+
const sellCoinType = (0, helpers_1.getCoinType)(sellAsset);
|
|
25
|
+
const buyCoinType = (0, helpers_1.getCoinType)(buyAsset);
|
|
26
|
+
const pool = await (0, helpers_1.findBestPool)(sdk, sellCoinType, buyCoinType);
|
|
27
|
+
if (!pool) {
|
|
28
|
+
throw new Error(`No liquidity pool found for ${sellAsset.symbol}/${buyAsset.symbol}`);
|
|
29
|
+
}
|
|
30
|
+
const swapResult = await (0, helpers_1.calculateSwapAmounts)(sdk, pool, sellAsset, buyAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit);
|
|
31
|
+
if (!swapResult) {
|
|
32
|
+
throw new Error(`Failed to calculate swap for ${sellAsset.symbol}/${buyAsset.symbol}`);
|
|
33
|
+
}
|
|
34
|
+
const a2b = (0, helpers_1.determineSwapDirection)(pool, sellCoinType, buyCoinType);
|
|
35
|
+
const amountLimit = (0, helpers_1.calculateAmountLimit)(swapResult.estimatedAmountOut, tradeQuote.slippageTolerancePercentageDecimal, true);
|
|
36
|
+
const tx = await sdk.Swap.createSwapTransactionPayload({
|
|
37
|
+
pool_id: pool.poolAddress,
|
|
38
|
+
coinTypeA: pool.coinTypeA,
|
|
39
|
+
coinTypeB: pool.coinTypeB,
|
|
40
|
+
a2b,
|
|
41
|
+
by_amount_in: true,
|
|
42
|
+
amount: sellAmountIncludingProtocolFeesCryptoBaseUnit,
|
|
43
|
+
amount_limit: amountLimit,
|
|
44
|
+
});
|
|
45
|
+
const transactionBytes = await tx.build({ client: adapter.getSuiClient() });
|
|
46
|
+
const intentMessage = new Uint8Array(3 + transactionBytes.length);
|
|
47
|
+
intentMessage[0] = 0;
|
|
48
|
+
intentMessage[1] = 0;
|
|
49
|
+
intentMessage[2] = 0;
|
|
50
|
+
intentMessage.set(transactionBytes, 3);
|
|
51
|
+
const bip44Params = adapter.getBip44Params({ accountNumber });
|
|
52
|
+
const addressNList = [
|
|
53
|
+
bip44Params.purpose,
|
|
54
|
+
bip44Params.coinType,
|
|
55
|
+
bip44Params.accountNumber,
|
|
56
|
+
...(bip44Params.isChange !== undefined ? [bip44Params.isChange ? 1 : 0] : []),
|
|
57
|
+
...(bip44Params.addressIndex !== undefined ? [bip44Params.addressIndex] : []),
|
|
58
|
+
];
|
|
59
|
+
return {
|
|
60
|
+
addressNList,
|
|
61
|
+
intentMessageBytes: intentMessage,
|
|
62
|
+
};
|
|
63
|
+
},
|
|
64
|
+
getSuiTransactionFees: ({ tradeQuote, stepIndex }) => {
|
|
65
|
+
if (!(0, utils_1.isExecutableTradeQuote)(tradeQuote))
|
|
66
|
+
throw new Error('Unable to execute a trade rate quote');
|
|
67
|
+
const step = (0, utils_1.getExecutableTradeStep)(tradeQuote, stepIndex);
|
|
68
|
+
if (!step.feeData.networkFeeCryptoBaseUnit) {
|
|
69
|
+
throw new Error('Missing network fee in quote');
|
|
70
|
+
}
|
|
71
|
+
return Promise.resolve(step.feeData.networkFeeCryptoBaseUnit);
|
|
72
|
+
},
|
|
73
|
+
checkTradeStatus: ({ swap, assertGetSuiChainAdapter }) => {
|
|
74
|
+
if (!swap?.sellTxHash) {
|
|
75
|
+
return Promise.resolve({
|
|
76
|
+
status: unchained_client_1.TxStatus.Unknown,
|
|
77
|
+
buyTxHash: undefined,
|
|
78
|
+
message: undefined,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return (0, utils_1.checkSuiSwapStatus)({
|
|
82
|
+
txHash: swap.sellTxHash,
|
|
83
|
+
address: swap.receiveAddress,
|
|
84
|
+
assertGetSuiChainAdapter,
|
|
85
|
+
});
|
|
86
|
+
},
|
|
87
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './utils/constants';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./utils/constants"), exports);
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Result } from '@sniptt/monads';
|
|
2
|
+
import type { CommonTradeQuoteInput, SwapErrorRight, SwapperDeps, TradeQuote } from '../../../types';
|
|
3
|
+
export declare const getTradeQuote: (input: CommonTradeQuoteInput, deps: SwapperDeps) => Promise<Result<TradeQuote[], SwapErrorRight>>;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTradeQuote = void 0;
|
|
4
|
+
const caip_1 = require("@shapeshiftoss/caip");
|
|
5
|
+
const monads_1 = require("@sniptt/monads");
|
|
6
|
+
const uuid_1 = require("uuid");
|
|
7
|
+
const types_1 = require("../../../types");
|
|
8
|
+
const utils_1 = require("../../../utils");
|
|
9
|
+
const constants_1 = require("../utils/constants");
|
|
10
|
+
const helpers_1 = require("../utils/helpers");
|
|
11
|
+
const getTradeQuote = async (input, deps) => {
|
|
12
|
+
const { sellAsset, buyAsset, receiveAddress, accountNumber, sellAmountIncludingProtocolFeesCryptoBaseUnit: sellAmount, affiliateBps, slippageTolerancePercentageDecimal, } = input;
|
|
13
|
+
const { assetsById } = deps;
|
|
14
|
+
if (accountNumber === undefined) {
|
|
15
|
+
return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
|
|
16
|
+
message: `accountNumber is required`,
|
|
17
|
+
code: types_1.TradeQuoteError.InternalError,
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
if (!(0, constants_1.isSupportedChainId)(sellAsset.chainId)) {
|
|
21
|
+
return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
|
|
22
|
+
message: `unsupported chainId`,
|
|
23
|
+
code: types_1.TradeQuoteError.UnsupportedChain,
|
|
24
|
+
details: { chainId: sellAsset.chainId },
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
if (!(0, constants_1.isSupportedChainId)(buyAsset.chainId)) {
|
|
28
|
+
return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
|
|
29
|
+
message: `unsupported chainId`,
|
|
30
|
+
code: types_1.TradeQuoteError.UnsupportedChain,
|
|
31
|
+
details: { chainId: buyAsset.chainId },
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
const suiAsset = assetsById[caip_1.suiAssetId];
|
|
35
|
+
if (!suiAsset) {
|
|
36
|
+
return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
|
|
37
|
+
message: `suiAsset is required`,
|
|
38
|
+
code: types_1.TradeQuoteError.InternalError,
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
const sdk = await (0, helpers_1.getCetusSDK)();
|
|
43
|
+
const sellCoinType = (0, helpers_1.getCoinType)(sellAsset);
|
|
44
|
+
const buyCoinType = (0, helpers_1.getCoinType)(buyAsset);
|
|
45
|
+
const pool = await (0, helpers_1.findBestPool)(sdk, sellCoinType, buyCoinType);
|
|
46
|
+
if (!pool) {
|
|
47
|
+
return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
|
|
48
|
+
message: `No liquidity pool found for ${sellAsset.symbol}/${buyAsset.symbol}`,
|
|
49
|
+
code: types_1.TradeQuoteError.NoRouteFound,
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
const swapResult = await (0, helpers_1.calculateSwapAmounts)(sdk, pool, sellAsset, buyAsset, sellAmount);
|
|
53
|
+
if (!swapResult) {
|
|
54
|
+
return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
|
|
55
|
+
message: `Failed to calculate swap for ${sellAsset.symbol}/${buyAsset.symbol}`,
|
|
56
|
+
code: types_1.TradeQuoteError.QueryFailed,
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
const buyAmountAfterFeesCryptoBaseUnit = swapResult.estimatedAmountOut;
|
|
60
|
+
const rate = (0, utils_1.getInputOutputRate)({
|
|
61
|
+
sellAmountCryptoBaseUnit: sellAmount,
|
|
62
|
+
buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
|
|
63
|
+
sellAsset,
|
|
64
|
+
buyAsset,
|
|
65
|
+
});
|
|
66
|
+
const adapter = deps.assertGetSuiChainAdapter(sellAsset.chainId);
|
|
67
|
+
const dummyAddress = '0x0000000000000000000000000000000000000000000000000000000000000000';
|
|
68
|
+
const addressForFeeEstimate = receiveAddress ?? dummyAddress;
|
|
69
|
+
const getFeeDataInput = {
|
|
70
|
+
to: addressForFeeEstimate,
|
|
71
|
+
value: sellAmount,
|
|
72
|
+
chainSpecific: {
|
|
73
|
+
from: addressForFeeEstimate,
|
|
74
|
+
tokenId: (0, helpers_1.getCoinType)(sellAsset),
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
const feeData = await adapter.getFeeData(getFeeDataInput);
|
|
78
|
+
const protocolFees = {};
|
|
79
|
+
const quotes = [];
|
|
80
|
+
const tradeQuote = {
|
|
81
|
+
id: (0, uuid_1.v4)(),
|
|
82
|
+
quoteOrRate: 'quote',
|
|
83
|
+
rate,
|
|
84
|
+
affiliateBps,
|
|
85
|
+
receiveAddress,
|
|
86
|
+
slippageTolerancePercentageDecimal,
|
|
87
|
+
swapperName: types_1.SwapperName.Cetus,
|
|
88
|
+
steps: [
|
|
89
|
+
{
|
|
90
|
+
accountNumber,
|
|
91
|
+
buyAmountBeforeFeesCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
|
|
92
|
+
buyAmountAfterFeesCryptoBaseUnit,
|
|
93
|
+
sellAmountIncludingProtocolFeesCryptoBaseUnit: sellAmount,
|
|
94
|
+
feeData: {
|
|
95
|
+
protocolFees,
|
|
96
|
+
networkFeeCryptoBaseUnit: feeData.fast.txFee,
|
|
97
|
+
chainSpecific: {
|
|
98
|
+
gasBudget: feeData.fast.chainSpecific.gasBudget,
|
|
99
|
+
gasPrice: feeData.fast.chainSpecific.gasPrice,
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
rate,
|
|
103
|
+
source: types_1.SwapperName.Cetus,
|
|
104
|
+
buyAsset,
|
|
105
|
+
sellAsset,
|
|
106
|
+
allowanceContract: '0x0',
|
|
107
|
+
estimatedExecutionTimeMs: undefined,
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
};
|
|
111
|
+
quotes.push(tradeQuote);
|
|
112
|
+
return (0, monads_1.Ok)(quotes);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
console.error(error);
|
|
116
|
+
return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
|
|
117
|
+
message: error instanceof Error ? error.message : 'Unknown error getting Cetus quote',
|
|
118
|
+
code: types_1.TradeQuoteError.QueryFailed,
|
|
119
|
+
}));
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
exports.getTradeQuote = getTradeQuote;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Result } from '@sniptt/monads';
|
|
2
|
+
import type { GetTradeRateInput, SwapErrorRight, SwapperDeps, TradeRate } from '../../../types';
|
|
3
|
+
export declare const getTradeRate: (input: GetTradeRateInput, deps: SwapperDeps) => Promise<Result<TradeRate[], SwapErrorRight>>;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTradeRate = void 0;
|
|
4
|
+
const caip_1 = require("@shapeshiftoss/caip");
|
|
5
|
+
const monads_1 = require("@sniptt/monads");
|
|
6
|
+
const uuid_1 = require("uuid");
|
|
7
|
+
const types_1 = require("../../../types");
|
|
8
|
+
const utils_1 = require("../../../utils");
|
|
9
|
+
const constants_1 = require("../utils/constants");
|
|
10
|
+
const helpers_1 = require("../utils/helpers");
|
|
11
|
+
const getTradeRate = async (input, deps) => {
|
|
12
|
+
const { sellAsset, buyAsset, receiveAddress, sellAmountIncludingProtocolFeesCryptoBaseUnit: sellAmount, affiliateBps, slippageTolerancePercentageDecimal, } = input;
|
|
13
|
+
const { assetsById } = deps;
|
|
14
|
+
if (!(0, constants_1.isSupportedChainId)(sellAsset.chainId)) {
|
|
15
|
+
return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
|
|
16
|
+
message: `unsupported chainId`,
|
|
17
|
+
code: types_1.TradeQuoteError.UnsupportedChain,
|
|
18
|
+
details: { chainId: sellAsset.chainId },
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
if (!(0, constants_1.isSupportedChainId)(buyAsset.chainId)) {
|
|
22
|
+
return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
|
|
23
|
+
message: `unsupported chainId`,
|
|
24
|
+
code: types_1.TradeQuoteError.UnsupportedChain,
|
|
25
|
+
details: { chainId: buyAsset.chainId },
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
const suiAsset = assetsById[caip_1.suiAssetId];
|
|
29
|
+
if (!suiAsset) {
|
|
30
|
+
return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
|
|
31
|
+
message: `suiAsset is required`,
|
|
32
|
+
code: types_1.TradeQuoteError.UnknownError,
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const sdk = await (0, helpers_1.getCetusSDK)();
|
|
37
|
+
const sellCoinType = (0, helpers_1.getCoinType)(sellAsset);
|
|
38
|
+
const buyCoinType = (0, helpers_1.getCoinType)(buyAsset);
|
|
39
|
+
const pool = await (0, helpers_1.findBestPool)(sdk, sellCoinType, buyCoinType);
|
|
40
|
+
if (!pool) {
|
|
41
|
+
return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
|
|
42
|
+
message: `No liquidity pool found for ${sellAsset.symbol}/${buyAsset.symbol}`,
|
|
43
|
+
code: types_1.TradeQuoteError.NoRouteFound,
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
const swapResult = await (0, helpers_1.calculateSwapAmounts)(sdk, pool, sellAsset, buyAsset, sellAmount);
|
|
47
|
+
if (!swapResult) {
|
|
48
|
+
return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
|
|
49
|
+
message: `Failed to calculate swap for ${sellAsset.symbol}/${buyAsset.symbol}`,
|
|
50
|
+
code: types_1.TradeQuoteError.QueryFailed,
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
const buyAmountAfterFeesCryptoBaseUnit = swapResult.estimatedAmountOut;
|
|
54
|
+
const rate = (0, utils_1.getInputOutputRate)({
|
|
55
|
+
sellAmountCryptoBaseUnit: sellAmount,
|
|
56
|
+
buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
|
|
57
|
+
sellAsset,
|
|
58
|
+
buyAsset,
|
|
59
|
+
});
|
|
60
|
+
const adapter = deps.assertGetSuiChainAdapter(sellAsset.chainId);
|
|
61
|
+
const dummyAddress = '0x0000000000000000000000000000000000000000000000000000000000000000';
|
|
62
|
+
const addressForFeeEstimate = receiveAddress ?? dummyAddress;
|
|
63
|
+
const { fast: feeDataFast } = await adapter.getFeeData({
|
|
64
|
+
to: addressForFeeEstimate,
|
|
65
|
+
value: sellAmount,
|
|
66
|
+
chainSpecific: {
|
|
67
|
+
from: addressForFeeEstimate,
|
|
68
|
+
tokenId: (0, helpers_1.getCoinType)(sellAsset),
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
const protocolFees = {};
|
|
72
|
+
const rates = [];
|
|
73
|
+
const tradeRate = {
|
|
74
|
+
id: (0, uuid_1.v4)(),
|
|
75
|
+
quoteOrRate: 'rate',
|
|
76
|
+
rate,
|
|
77
|
+
affiliateBps,
|
|
78
|
+
receiveAddress,
|
|
79
|
+
slippageTolerancePercentageDecimal,
|
|
80
|
+
swapperName: types_1.SwapperName.Cetus,
|
|
81
|
+
steps: [
|
|
82
|
+
{
|
|
83
|
+
accountNumber: undefined,
|
|
84
|
+
buyAmountBeforeFeesCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
|
|
85
|
+
buyAmountAfterFeesCryptoBaseUnit,
|
|
86
|
+
sellAmountIncludingProtocolFeesCryptoBaseUnit: sellAmount,
|
|
87
|
+
feeData: {
|
|
88
|
+
protocolFees,
|
|
89
|
+
networkFeeCryptoBaseUnit: feeDataFast.txFee,
|
|
90
|
+
},
|
|
91
|
+
rate,
|
|
92
|
+
source: types_1.SwapperName.Cetus,
|
|
93
|
+
buyAsset,
|
|
94
|
+
sellAsset,
|
|
95
|
+
allowanceContract: '0x0',
|
|
96
|
+
estimatedExecutionTimeMs: undefined,
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
};
|
|
100
|
+
rates.push(tradeRate);
|
|
101
|
+
return (0, monads_1.Ok)(rates);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
|
|
105
|
+
message: error instanceof Error ? error.message : 'Unknown error getting Cetus rate',
|
|
106
|
+
code: types_1.TradeQuoteError.QueryFailed,
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
exports.getTradeRate = getTradeRate;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isSupportedChainId = exports.SUPPORTED_CETUS_CHAIN_IDS = void 0;
|
|
4
|
+
const caip_1 = require("@shapeshiftoss/caip");
|
|
5
|
+
exports.SUPPORTED_CETUS_CHAIN_IDS = [caip_1.suiChainId];
|
|
6
|
+
const isSupportedChainId = (chainId) => {
|
|
7
|
+
return exports.SUPPORTED_CETUS_CHAIN_IDS.includes(chainId);
|
|
8
|
+
};
|
|
9
|
+
exports.isSupportedChainId = isSupportedChainId;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CetusClmmSDK, Pool } from '@cetusprotocol/cetus-sui-clmm-sdk';
|
|
2
|
+
import type { Asset } from '@shapeshiftoss/types';
|
|
3
|
+
export declare const getCetusSDK: () => Promise<CetusClmmSDK>;
|
|
4
|
+
export declare const getCoinType: (asset: Asset) => string;
|
|
5
|
+
export declare const determineSwapDirection: (pool: Pool, sellCoinType: string, buyCoinType: string) => boolean;
|
|
6
|
+
export declare const calculateAmountLimit: (estimatedAmount: string, slippageTolerancePercentageDecimal: string | undefined, isBuyAmount: boolean) => string;
|
|
7
|
+
export declare const findBestPool: (sdk: CetusClmmSDK, sellCoinType: string, buyCoinType: string) => Promise<Pool | undefined>;
|
|
8
|
+
export type CalculateSwapResult = {
|
|
9
|
+
estimatedAmountOut: string;
|
|
10
|
+
estimatedAmountIn: string;
|
|
11
|
+
estimatedFeeAmount: string;
|
|
12
|
+
};
|
|
13
|
+
export declare const calculateSwapAmounts: (sdk: CetusClmmSDK, pool: Pool, sellAsset: Asset, buyAsset: Asset, sellAmount: string) => Promise<CalculateSwapResult | undefined>;
|