@shapeshiftoss/swapper 17.6.7 → 17.6.9
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 +42 -24
- package/dist/cjs/cowswap-utils/constants.js +1 -0
- package/dist/cjs/cowswap-utils/index.js +2 -0
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/swappers/AvnuSwapper/AvnuSwapper.d.ts +2 -0
- package/dist/cjs/swappers/AvnuSwapper/AvnuSwapper.js +7 -0
- package/dist/cjs/swappers/AvnuSwapper/endpoints.d.ts +2 -0
- package/dist/cjs/swappers/AvnuSwapper/endpoints.js +181 -0
- package/dist/cjs/swappers/AvnuSwapper/index.d.ts +1 -0
- package/dist/cjs/swappers/AvnuSwapper/index.js +5 -0
- package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeQuote.d.ts +3 -0
- package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +142 -0
- package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeRate.d.ts +3 -0
- package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeRate.js +120 -0
- package/dist/cjs/swappers/AvnuSwapper/types.d.ts +2 -0
- package/dist/cjs/swappers/AvnuSwapper/types.js +2 -0
- package/dist/cjs/swappers/AvnuSwapper/utils/constants.d.ts +5 -0
- package/dist/cjs/swappers/AvnuSwapper/utils/constants.js +11 -0
- package/dist/cjs/swappers/AvnuSwapper/utils/helpers.d.ts +7 -0
- package/dist/cjs/swappers/AvnuSwapper/utils/helpers.js +21 -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/ButterSwap/utils/helpers.js +1 -0
- package/dist/cjs/swappers/CetusSwapper/endpoints.js +33 -27
- package/dist/cjs/swappers/CetusSwapper/swapperApi/getCetusTradeData.d.ts +24 -0
- package/dist/cjs/swappers/CetusSwapper/swapperApi/getCetusTradeData.js +79 -0
- package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeQuote.js +44 -69
- package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeRate.js +49 -65
- package/dist/cjs/swappers/CetusSwapper/utils/constants.d.ts +1 -0
- package/dist/cjs/swappers/CetusSwapper/utils/constants.js +2 -1
- package/dist/cjs/swappers/CetusSwapper/utils/helpers.d.ts +6 -11
- package/dist/cjs/swappers/CetusSwapper/utils/helpers.js +41 -96
- package/dist/cjs/swappers/JupiterSwapper/utils/helpers.d.ts +0 -2
- package/dist/cjs/swappers/MayachainSwapper/generated/generatedTradableAssetMap.json +1 -0
- package/dist/cjs/swappers/NearIntentsSwapper/NearIntentsSwapper.js +2 -0
- package/dist/cjs/swappers/NearIntentsSwapper/endpoints.js +68 -0
- package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +30 -0
- package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +53 -5
- package/dist/cjs/swappers/NearIntentsSwapper/types.d.ts +1 -1
- package/dist/cjs/swappers/NearIntentsSwapper/types.js +8 -0
- package/dist/cjs/swappers/NearIntentsSwapper/utils/helpers/helpers.js +28 -8
- package/dist/cjs/swappers/PortalsSwapper/constants.js +1 -1
- package/dist/cjs/swappers/PortalsSwapper/endpoints.js +92 -1
- package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +29 -17
- package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeRate/getPortalsTradeRate.js +21 -17
- package/dist/cjs/swappers/PortalsSwapper/types.js +1 -0
- package/dist/cjs/swappers/PortalsSwapper/utils/fetchAxelarscanStatus.d.ts +9 -0
- package/dist/cjs/swappers/PortalsSwapper/utils/fetchAxelarscanStatus.js +52 -0
- package/dist/cjs/swappers/PortalsSwapper/utils/fetchPortalsTradeOrder.d.ts +1 -0
- package/dist/cjs/swappers/PortalsSwapper/utils/fetchSquidStatus.d.ts +9 -0
- package/dist/cjs/swappers/PortalsSwapper/utils/fetchSquidStatus.js +57 -0
- package/dist/cjs/swappers/RelaySwapper/constant.js +3 -0
- package/dist/cjs/swappers/RelaySwapper/utils/fetchRelayTrade.js +1 -1
- package/dist/cjs/swappers/RelaySwapper/utils/getTrade.js +16 -1
- package/dist/cjs/swappers/RelaySwapper/utils/relayTokenToAssetId.js +20 -0
- package/dist/cjs/swappers/RelaySwapper/utils/types.d.ts +13 -4
- package/dist/cjs/swappers/RelaySwapper/utils/types.js +5 -1
- package/dist/cjs/swappers/SunioSwapper/SunioSwapper.d.ts +2 -0
- package/dist/cjs/swappers/SunioSwapper/SunioSwapper.js +7 -0
- package/dist/cjs/swappers/SunioSwapper/endpoints.d.ts +2 -0
- package/dist/cjs/swappers/SunioSwapper/endpoints.js +131 -0
- package/dist/cjs/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.d.ts +3 -0
- package/dist/cjs/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.js +8 -0
- package/dist/cjs/swappers/SunioSwapper/getSunioTradeRate/getSunioTradeRate.d.ts +3 -0
- package/dist/cjs/swappers/SunioSwapper/getSunioTradeRate/getSunioTradeRate.js +8 -0
- package/dist/cjs/swappers/SunioSwapper/index.d.ts +4 -0
- package/dist/cjs/swappers/SunioSwapper/index.js +23 -0
- package/dist/cjs/swappers/SunioSwapper/types.d.ts +22 -0
- package/dist/cjs/swappers/SunioSwapper/types.js +12 -0
- package/dist/cjs/swappers/SunioSwapper/utils/abi.d.ts +48 -0
- package/dist/cjs/swappers/SunioSwapper/utils/abi.js +28 -0
- package/dist/cjs/swappers/SunioSwapper/utils/buildSwapRouteParameters.d.ts +14 -0
- package/dist/cjs/swappers/SunioSwapper/utils/buildSwapRouteParameters.js +32 -0
- package/dist/cjs/swappers/SunioSwapper/utils/buildSwapTransaction.d.ts +11 -0
- package/dist/cjs/swappers/SunioSwapper/utils/buildSwapTransaction.js +57 -0
- package/dist/cjs/swappers/SunioSwapper/utils/constants.d.ts +6 -0
- package/dist/cjs/swappers/SunioSwapper/utils/constants.js +16 -0
- package/dist/cjs/swappers/SunioSwapper/utils/fetchFromSunio.d.ts +11 -0
- package/dist/cjs/swappers/SunioSwapper/utils/fetchFromSunio.js +45 -0
- package/dist/cjs/swappers/SunioSwapper/utils/getQuoteOrRate.d.ts +4 -0
- package/dist/cjs/swappers/SunioSwapper/utils/getQuoteOrRate.js +203 -0
- package/dist/cjs/swappers/SunioSwapper/utils/helpers/helpers.d.ts +4 -0
- package/dist/cjs/swappers/SunioSwapper/utils/helpers/helpers.js +22 -0
- package/dist/cjs/swappers/SunioSwapper/utils/sunioService.d.ts +6 -0
- package/dist/cjs/swappers/SunioSwapper/utils/sunioService.js +18 -0
- package/dist/cjs/swappers/ThorchainSwapper/ThorchainSwapper.js +3 -0
- package/dist/cjs/swappers/ThorchainSwapper/endpoints.js +2 -0
- package/dist/cjs/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +2 -2
- package/dist/cjs/swappers/utils/helpers/helpers.js +7 -0
- package/dist/cjs/thorchain-utils/getL1RateOrQuote.js +80 -3
- package/dist/cjs/thorchain-utils/index.d.ts +1 -0
- package/dist/cjs/thorchain-utils/index.js +2 -1
- package/dist/cjs/thorchain-utils/tron/getThorTxData.d.ts +12 -0
- package/dist/cjs/thorchain-utils/tron/getThorTxData.js +14 -0
- package/dist/cjs/thorchain-utils/tron/getTronTransactionFees.d.ts +2 -0
- package/dist/cjs/thorchain-utils/tron/getTronTransactionFees.js +65 -0
- package/dist/cjs/thorchain-utils/tron/getUnsignedTronTransaction.d.ts +3 -0
- package/dist/cjs/thorchain-utils/tron/getUnsignedTronTransaction.js +35 -0
- package/dist/cjs/thorchain-utils/tron/index.d.ts +3 -0
- package/dist/cjs/thorchain-utils/tron/index.js +19 -0
- package/dist/cjs/types.d.ts +74 -9
- package/dist/cjs/types.js +2 -0
- package/dist/cjs/utils/tenderly/simulate.d.ts +6 -1
- package/dist/cjs/utils/tenderly/simulate.js +22 -2
- package/dist/cjs/utils/tenderly/types.d.ts +21 -0
- package/dist/cjs/utils.d.ts +10 -4
- package/dist/cjs/utils.js +53 -1
- package/dist/esm/.tsbuildinfo +1 -1
- package/dist/esm/constants.js +18 -0
- package/dist/esm/cowswap-utils/constants.js +1 -0
- package/dist/esm/cowswap-utils/index.js +2 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/swappers/AvnuSwapper/AvnuSwapper.d.ts +2 -0
- package/dist/esm/swappers/AvnuSwapper/AvnuSwapper.js +4 -0
- package/dist/esm/swappers/AvnuSwapper/endpoints.d.ts +2 -0
- package/dist/esm/swappers/AvnuSwapper/endpoints.js +178 -0
- package/dist/esm/swappers/AvnuSwapper/index.d.ts +1 -0
- package/dist/esm/swappers/AvnuSwapper/index.js +1 -0
- package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeQuote.d.ts +3 -0
- package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +138 -0
- package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeRate.d.ts +3 -0
- package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeRate.js +116 -0
- package/dist/esm/swappers/AvnuSwapper/types.d.ts +2 -0
- package/dist/esm/swappers/AvnuSwapper/types.js +1 -0
- package/dist/esm/swappers/AvnuSwapper/utils/constants.d.ts +5 -0
- package/dist/esm/swappers/AvnuSwapper/utils/constants.js +7 -0
- package/dist/esm/swappers/AvnuSwapper/utils/helpers.d.ts +7 -0
- package/dist/esm/swappers/AvnuSwapper/utils/helpers.js +17 -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/ButterSwap/utils/helpers.js +1 -0
- package/dist/esm/swappers/CetusSwapper/endpoints.js +28 -22
- package/dist/esm/swappers/CetusSwapper/swapperApi/getCetusTradeData.d.ts +24 -0
- package/dist/esm/swappers/CetusSwapper/swapperApi/getCetusTradeData.js +75 -0
- package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeQuote.js +44 -69
- package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeRate.js +50 -66
- package/dist/esm/swappers/CetusSwapper/utils/constants.d.ts +1 -0
- package/dist/esm/swappers/CetusSwapper/utils/constants.js +1 -0
- package/dist/esm/swappers/CetusSwapper/utils/helpers.d.ts +6 -11
- package/dist/esm/swappers/CetusSwapper/utils/helpers.js +37 -67
- package/dist/esm/swappers/JupiterSwapper/utils/helpers.d.ts +0 -2
- package/dist/esm/swappers/MayachainSwapper/generated/generatedTradableAssetMap.json +1 -0
- package/dist/esm/swappers/NearIntentsSwapper/NearIntentsSwapper.js +3 -1
- package/dist/esm/swappers/NearIntentsSwapper/endpoints.js +68 -0
- package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +30 -0
- package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +54 -6
- package/dist/esm/swappers/NearIntentsSwapper/types.d.ts +1 -1
- package/dist/esm/swappers/NearIntentsSwapper/types.js +8 -0
- package/dist/esm/swappers/NearIntentsSwapper/utils/helpers/helpers.js +29 -9
- package/dist/esm/swappers/PortalsSwapper/constants.js +1 -1
- package/dist/esm/swappers/PortalsSwapper/endpoints.js +92 -1
- package/dist/esm/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +30 -18
- package/dist/esm/swappers/PortalsSwapper/getPortalsTradeRate/getPortalsTradeRate.js +21 -17
- package/dist/esm/swappers/PortalsSwapper/types.js +1 -0
- package/dist/esm/swappers/PortalsSwapper/utils/fetchAxelarscanStatus.d.ts +9 -0
- package/dist/esm/swappers/PortalsSwapper/utils/fetchAxelarscanStatus.js +47 -0
- package/dist/esm/swappers/PortalsSwapper/utils/fetchPortalsTradeOrder.d.ts +1 -0
- package/dist/esm/swappers/PortalsSwapper/utils/fetchSquidStatus.d.ts +9 -0
- package/dist/esm/swappers/PortalsSwapper/utils/fetchSquidStatus.js +52 -0
- package/dist/esm/swappers/RelaySwapper/constant.js +5 -2
- package/dist/esm/swappers/RelaySwapper/utils/fetchRelayTrade.js +1 -1
- package/dist/esm/swappers/RelaySwapper/utils/getTrade.js +18 -3
- package/dist/esm/swappers/RelaySwapper/utils/relayTokenToAssetId.js +20 -0
- package/dist/esm/swappers/RelaySwapper/utils/types.d.ts +13 -4
- package/dist/esm/swappers/RelaySwapper/utils/types.js +3 -0
- package/dist/esm/swappers/SunioSwapper/SunioSwapper.d.ts +2 -0
- package/dist/esm/swappers/SunioSwapper/SunioSwapper.js +4 -0
- package/dist/esm/swappers/SunioSwapper/endpoints.d.ts +2 -0
- package/dist/esm/swappers/SunioSwapper/endpoints.js +128 -0
- package/dist/esm/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.d.ts +3 -0
- package/dist/esm/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.js +4 -0
- package/dist/esm/swappers/SunioSwapper/getSunioTradeRate/getSunioTradeRate.d.ts +3 -0
- package/dist/esm/swappers/SunioSwapper/getSunioTradeRate/getSunioTradeRate.js +4 -0
- package/dist/esm/swappers/SunioSwapper/index.d.ts +4 -0
- package/dist/esm/swappers/SunioSwapper/index.js +4 -0
- package/dist/esm/swappers/SunioSwapper/types.d.ts +22 -0
- package/dist/esm/swappers/SunioSwapper/types.js +9 -0
- package/dist/esm/swappers/SunioSwapper/utils/abi.d.ts +48 -0
- package/dist/esm/swappers/SunioSwapper/utils/abi.js +25 -0
- package/dist/esm/swappers/SunioSwapper/utils/buildSwapRouteParameters.d.ts +14 -0
- package/dist/esm/swappers/SunioSwapper/utils/buildSwapRouteParameters.js +28 -0
- package/dist/esm/swappers/SunioSwapper/utils/buildSwapTransaction.d.ts +11 -0
- package/dist/esm/swappers/SunioSwapper/utils/buildSwapTransaction.js +53 -0
- package/dist/esm/swappers/SunioSwapper/utils/constants.d.ts +6 -0
- package/dist/esm/swappers/SunioSwapper/utils/constants.js +13 -0
- package/dist/esm/swappers/SunioSwapper/utils/fetchFromSunio.d.ts +11 -0
- package/dist/esm/swappers/SunioSwapper/utils/fetchFromSunio.js +41 -0
- package/dist/esm/swappers/SunioSwapper/utils/getQuoteOrRate.d.ts +4 -0
- package/dist/esm/swappers/SunioSwapper/utils/getQuoteOrRate.js +199 -0
- package/dist/esm/swappers/SunioSwapper/utils/helpers/helpers.d.ts +4 -0
- package/dist/esm/swappers/SunioSwapper/utils/helpers/helpers.js +16 -0
- package/dist/esm/swappers/SunioSwapper/utils/sunioService.d.ts +6 -0
- package/dist/esm/swappers/SunioSwapper/utils/sunioService.js +14 -0
- package/dist/esm/swappers/ThorchainSwapper/ThorchainSwapper.js +3 -0
- package/dist/esm/swappers/ThorchainSwapper/endpoints.js +3 -1
- package/dist/esm/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +2 -2
- package/dist/esm/swappers/utils/helpers/helpers.js +9 -2
- package/dist/esm/thorchain-utils/getL1RateOrQuote.js +81 -4
- package/dist/esm/thorchain-utils/index.d.ts +1 -0
- package/dist/esm/thorchain-utils/index.js +1 -0
- package/dist/esm/thorchain-utils/tron/getThorTxData.d.ts +12 -0
- package/dist/esm/thorchain-utils/tron/getThorTxData.js +10 -0
- package/dist/esm/thorchain-utils/tron/getTronTransactionFees.d.ts +2 -0
- package/dist/esm/thorchain-utils/tron/getTronTransactionFees.js +61 -0
- package/dist/esm/thorchain-utils/tron/getUnsignedTronTransaction.d.ts +3 -0
- package/dist/esm/thorchain-utils/tron/getUnsignedTronTransaction.js +31 -0
- package/dist/esm/thorchain-utils/tron/index.d.ts +3 -0
- package/dist/esm/thorchain-utils/tron/index.js +3 -0
- package/dist/esm/types.d.ts +74 -9
- package/dist/esm/types.js +2 -0
- package/dist/esm/utils/tenderly/simulate.d.ts +6 -1
- package/dist/esm/utils/tenderly/simulate.js +20 -1
- package/dist/esm/utils/tenderly/types.d.ts +21 -0
- package/dist/esm/utils.d.ts +10 -4
- package/dist/esm/utils.js +50 -1
- package/package.json +5 -4
|
@@ -1,40 +1,33 @@
|
|
|
1
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.
|
|
3
|
+
exports.findBestRoute = exports.getCoinType = exports.getSuiClient = exports.getAggregatorClient = void 0;
|
|
4
|
+
const aggregator_sdk_1 = require("@cetusprotocol/aggregator-sdk");
|
|
5
|
+
const client_1 = require("@cetusprotocol/aggregator-sdk/node_modules/@mysten/sui/client");
|
|
27
6
|
const caip_1 = require("@shapeshiftoss/caip");
|
|
28
|
-
|
|
29
|
-
let
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
7
|
+
let suiClientInstance;
|
|
8
|
+
let aggregatorClientInstance;
|
|
9
|
+
let currentRpcUrl;
|
|
10
|
+
const getAggregatorClient = (rpcUrl) => {
|
|
11
|
+
if (!aggregatorClientInstance || !suiClientInstance || currentRpcUrl !== rpcUrl) {
|
|
12
|
+
suiClientInstance = new client_1.SuiClient({ url: rpcUrl });
|
|
13
|
+
aggregatorClientInstance = new aggregator_sdk_1.AggregatorClient({
|
|
14
|
+
client: suiClientInstance,
|
|
15
|
+
env: aggregator_sdk_1.Env.Mainnet,
|
|
16
|
+
signer: '0x0',
|
|
17
|
+
});
|
|
18
|
+
currentRpcUrl = rpcUrl;
|
|
19
|
+
}
|
|
20
|
+
return aggregatorClientInstance;
|
|
21
|
+
};
|
|
22
|
+
exports.getAggregatorClient = getAggregatorClient;
|
|
23
|
+
const getSuiClient = (rpcUrl) => {
|
|
24
|
+
if (!suiClientInstance || currentRpcUrl !== rpcUrl) {
|
|
25
|
+
suiClientInstance = new client_1.SuiClient({ url: rpcUrl });
|
|
26
|
+
currentRpcUrl = rpcUrl;
|
|
34
27
|
}
|
|
35
|
-
return
|
|
28
|
+
return suiClientInstance;
|
|
36
29
|
};
|
|
37
|
-
exports.
|
|
30
|
+
exports.getSuiClient = getSuiClient;
|
|
38
31
|
const getCoinType = (asset) => {
|
|
39
32
|
const { assetReference, assetNamespace } = (0, caip_1.fromAssetId)(asset.assetId);
|
|
40
33
|
// For native SUI token, the assetReference is 'slip44:784' but Cetus expects '0x2::sui::SUI'
|
|
@@ -45,74 +38,26 @@ const getCoinType = (asset) => {
|
|
|
45
38
|
return assetReference;
|
|
46
39
|
};
|
|
47
40
|
exports.getCoinType = getCoinType;
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
throw new Error('Pool does not match the swap pair');
|
|
56
|
-
};
|
|
57
|
-
exports.determineSwapDirection = determineSwapDirection;
|
|
58
|
-
const calculateAmountLimit = (estimatedAmount, slippageTolerancePercentageDecimal, isBuyAmount) => {
|
|
59
|
-
if (!slippageTolerancePercentageDecimal) {
|
|
60
|
-
return estimatedAmount;
|
|
61
|
-
}
|
|
62
|
-
const slippageFactor = (0, utils_1.bn)(1).minus(slippageTolerancePercentageDecimal);
|
|
63
|
-
if (isBuyAmount) {
|
|
64
|
-
return (0, utils_1.bnOrZero)(estimatedAmount).times(slippageFactor).toFixed(0);
|
|
65
|
-
}
|
|
66
|
-
const maxSlippageFactor = (0, utils_1.bn)(1).plus(slippageTolerancePercentageDecimal);
|
|
67
|
-
return (0, utils_1.bnOrZero)(estimatedAmount).times(maxSlippageFactor).toFixed(0);
|
|
68
|
-
};
|
|
69
|
-
exports.calculateAmountLimit = calculateAmountLimit;
|
|
70
|
-
const findBestPool = async (sdk, sellCoinType, buyCoinType) => {
|
|
71
|
-
const pools = await sdk.Pool.getPoolByCoins([sellCoinType, buyCoinType]);
|
|
72
|
-
if (!pools || pools.length === 0) {
|
|
73
|
-
return undefined;
|
|
74
|
-
}
|
|
75
|
-
const poolWithLiquidity = pools.find(pool => {
|
|
76
|
-
const hasLiquidity = pool.liquidity && (0, utils_1.bnOrZero)(pool.liquidity).gt(0);
|
|
77
|
-
return hasLiquidity;
|
|
41
|
+
const findBestRoute = async (client, sellCoinType, buyCoinType, sellAmountCryptoBaseUnit, providers) => {
|
|
42
|
+
const routerData = await client.findRouters({
|
|
43
|
+
from: sellCoinType,
|
|
44
|
+
target: buyCoinType,
|
|
45
|
+
amount: sellAmountCryptoBaseUnit,
|
|
46
|
+
byAmountIn: true,
|
|
47
|
+
...(providers && { providers }),
|
|
78
48
|
});
|
|
79
|
-
if (!
|
|
80
|
-
console.warn('[Cetus] No
|
|
81
|
-
|
|
82
|
-
pools: pools.map(p => ({ id: p.poolAddress, liquidity: p.liquidity })),
|
|
83
|
-
});
|
|
49
|
+
if (!routerData) {
|
|
50
|
+
console.warn('[Cetus Aggregator] No route found for', sellCoinType, buyCoinType);
|
|
51
|
+
return undefined;
|
|
84
52
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
exports.findBestPool = findBestPool;
|
|
88
|
-
const calculateSwapAmounts = async (sdk, pool, sellAsset, buyAsset, sellAmount) => {
|
|
89
|
-
const sellCoinType = (0, exports.getCoinType)(sellAsset);
|
|
90
|
-
const buyCoinType = (0, exports.getCoinType)(buyAsset);
|
|
91
|
-
const a2b = (0, exports.determineSwapDirection)(pool, sellCoinType, buyCoinType);
|
|
92
|
-
const decimalsA = pool.coinTypeA === sellCoinType ? sellAsset.precision : buyAsset.precision;
|
|
93
|
-
const decimalsB = pool.coinTypeA === sellCoinType ? buyAsset.precision : sellAsset.precision;
|
|
94
|
-
const preSwapParams = {
|
|
95
|
-
pool,
|
|
96
|
-
currentSqrtPrice: pool.current_sqrt_price,
|
|
97
|
-
coinTypeA: pool.coinTypeA,
|
|
98
|
-
coinTypeB: pool.coinTypeB,
|
|
99
|
-
decimalsA,
|
|
100
|
-
decimalsB,
|
|
101
|
-
a2b,
|
|
102
|
-
byAmountIn: true,
|
|
103
|
-
amount: sellAmount,
|
|
104
|
-
};
|
|
105
|
-
const preSwapResult = await sdk.Swap.preswap(preSwapParams);
|
|
106
|
-
if (!preSwapResult) {
|
|
53
|
+
if (routerData.insufficientLiquidity) {
|
|
54
|
+
console.warn('[Cetus Aggregator] Insufficient liquidity for', sellCoinType, buyCoinType);
|
|
107
55
|
return undefined;
|
|
108
56
|
}
|
|
109
|
-
if (
|
|
57
|
+
if (routerData.error) {
|
|
58
|
+
console.warn('[Cetus Aggregator] Error finding route:', routerData.error);
|
|
110
59
|
return undefined;
|
|
111
60
|
}
|
|
112
|
-
return
|
|
113
|
-
estimatedAmountOut: preSwapResult.estimatedAmountOut,
|
|
114
|
-
estimatedAmountIn: preSwapResult.estimatedAmountIn,
|
|
115
|
-
estimatedFeeAmount: preSwapResult.estimatedFeeAmount,
|
|
116
|
-
};
|
|
61
|
+
return routerData;
|
|
117
62
|
};
|
|
118
|
-
exports.
|
|
63
|
+
exports.findBestRoute = findBestRoute;
|
|
@@ -21,5 +21,6 @@
|
|
|
21
21
|
"ETH.USDT-0XDAC17F958D2EE523A2206206994597C13D831EC7": "eip155:1/erc20:0xdac17f958d2ee523a2206206994597c13d831ec7",
|
|
22
22
|
"ETH.WSTETH-0X7F39C581F595B53C5CB19BD0B3F8DA6C935E2CA0": "eip155:1/erc20:0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0",
|
|
23
23
|
"THOR.RUNE": "cosmos:thorchain-1/slip44:931",
|
|
24
|
+
"ZEC.ZEC": "bip122:00040fe8ec8471911baa1db1266ea15d/slip44:133",
|
|
24
25
|
"MAYA.CACAO": "cosmos:mayachain-mainnet-v1/slip44:931"
|
|
25
26
|
}
|
|
@@ -5,8 +5,10 @@ const utils_1 = require("../../utils");
|
|
|
5
5
|
exports.nearIntentsSwapper = {
|
|
6
6
|
executeEvmTransaction: utils_1.executeEvmTransaction,
|
|
7
7
|
executeSolanaTransaction: utils_1.executeSolanaTransaction,
|
|
8
|
+
executeStarknetTransaction: utils_1.executeStarknetTransaction,
|
|
8
9
|
executeTronTransaction: utils_1.executeTronTransaction,
|
|
9
10
|
executeSuiTransaction: utils_1.executeSuiTransaction,
|
|
11
|
+
executeNearTransaction: utils_1.executeNearTransaction,
|
|
10
12
|
executeUtxoTransaction: (txToSign, { signAndBroadcastTransaction }) => {
|
|
11
13
|
return signAndBroadcastTransaction(txToSign);
|
|
12
14
|
},
|
|
@@ -180,6 +180,74 @@ exports.nearIntentsApi = {
|
|
|
180
180
|
}
|
|
181
181
|
return Promise.resolve(step.feeData.networkFeeCryptoBaseUnit);
|
|
182
182
|
},
|
|
183
|
+
getUnsignedNearTransaction: async ({ stepIndex, tradeQuote, from, assertGetNearChainAdapter, }) => {
|
|
184
|
+
if (!(0, utils_2.isExecutableTradeQuote)(tradeQuote))
|
|
185
|
+
throw new Error('Unable to execute a trade rate quote');
|
|
186
|
+
const step = (0, utils_2.getExecutableTradeStep)(tradeQuote, stepIndex);
|
|
187
|
+
const { accountNumber, sellAsset, nearIntentsSpecific } = step;
|
|
188
|
+
if (!nearIntentsSpecific)
|
|
189
|
+
throw new Error('nearIntentsSpecific is required');
|
|
190
|
+
const adapter = assertGetNearChainAdapter(sellAsset.chainId);
|
|
191
|
+
const to = nearIntentsSpecific.depositAddress;
|
|
192
|
+
const value = step.sellAmountIncludingProtocolFeesCryptoBaseUnit;
|
|
193
|
+
const contractAddress = (0, utils_1.contractAddressOrUndefined)(sellAsset.assetId);
|
|
194
|
+
return await adapter.buildSendApiTransaction({
|
|
195
|
+
to,
|
|
196
|
+
from,
|
|
197
|
+
value,
|
|
198
|
+
accountNumber,
|
|
199
|
+
chainSpecific: { contractAddress },
|
|
200
|
+
});
|
|
201
|
+
},
|
|
202
|
+
getNearTransactionFees: ({ tradeQuote, stepIndex }) => {
|
|
203
|
+
if (!(0, utils_2.isExecutableTradeQuote)(tradeQuote))
|
|
204
|
+
throw new Error('Unable to execute a trade rate quote');
|
|
205
|
+
const step = (0, utils_2.getExecutableTradeStep)(tradeQuote, stepIndex);
|
|
206
|
+
if (!step.feeData.networkFeeCryptoBaseUnit) {
|
|
207
|
+
throw new Error('Missing network fee in quote');
|
|
208
|
+
}
|
|
209
|
+
return Promise.resolve(step.feeData.networkFeeCryptoBaseUnit);
|
|
210
|
+
},
|
|
211
|
+
getUnsignedStarknetTransaction: async ({ stepIndex, tradeQuote, from, assertGetStarknetChainAdapter, }) => {
|
|
212
|
+
if (!(0, utils_2.isExecutableTradeQuote)(tradeQuote))
|
|
213
|
+
throw new Error('Unable to execute a trade rate quote');
|
|
214
|
+
const step = (0, utils_2.getExecutableTradeStep)(tradeQuote, stepIndex);
|
|
215
|
+
const { accountNumber, sellAsset, nearIntentsSpecific } = step;
|
|
216
|
+
if (!nearIntentsSpecific)
|
|
217
|
+
throw new Error('nearIntentsSpecific is required');
|
|
218
|
+
const adapter = assertGetStarknetChainAdapter(sellAsset.chainId);
|
|
219
|
+
const to = nearIntentsSpecific.depositAddress;
|
|
220
|
+
const value = step.sellAmountIncludingProtocolFeesCryptoBaseUnit;
|
|
221
|
+
const tokenContractAddress = (0, utils_1.contractAddressOrUndefined)(sellAsset.assetId);
|
|
222
|
+
const { fast } = await adapter.getFeeData({
|
|
223
|
+
to,
|
|
224
|
+
value,
|
|
225
|
+
chainSpecific: {
|
|
226
|
+
from,
|
|
227
|
+
tokenContractAddress,
|
|
228
|
+
},
|
|
229
|
+
sendMax: false,
|
|
230
|
+
});
|
|
231
|
+
return adapter.buildSendApiTransaction({
|
|
232
|
+
from,
|
|
233
|
+
to,
|
|
234
|
+
value,
|
|
235
|
+
accountNumber,
|
|
236
|
+
chainSpecific: {
|
|
237
|
+
tokenContractAddress,
|
|
238
|
+
maxFee: fast.chainSpecific.maxFee,
|
|
239
|
+
},
|
|
240
|
+
});
|
|
241
|
+
},
|
|
242
|
+
getStarknetTransactionFees: ({ tradeQuote, stepIndex }) => {
|
|
243
|
+
if (!(0, utils_2.isExecutableTradeQuote)(tradeQuote))
|
|
244
|
+
throw new Error('Unable to execute a trade rate quote');
|
|
245
|
+
const step = (0, utils_2.getExecutableTradeStep)(tradeQuote, stepIndex);
|
|
246
|
+
if (!step.feeData.networkFeeCryptoBaseUnit) {
|
|
247
|
+
throw new Error('Missing network fee in quote');
|
|
248
|
+
}
|
|
249
|
+
return Promise.resolve(step.feeData.networkFeeCryptoBaseUnit);
|
|
250
|
+
},
|
|
183
251
|
checkTradeStatus: async ({ config, swap }) => {
|
|
184
252
|
const { nearIntentsSpecific } = swap?.metadata ?? {};
|
|
185
253
|
if (!nearIntentsSpecific?.depositAddress) {
|
|
@@ -148,9 +148,14 @@ const getTradeQuote = async (input, deps) => {
|
|
|
148
148
|
}
|
|
149
149
|
case caip_1.CHAIN_NAMESPACE.Tron: {
|
|
150
150
|
const sellAdapter = deps.assertGetTronChainAdapter(sellAsset.chainId);
|
|
151
|
+
const contractAddress = (0, utils_1.contractAddressOrUndefined)(sellAsset.assetId);
|
|
151
152
|
const feeData = await sellAdapter.getFeeData({
|
|
152
153
|
to: depositAddress,
|
|
153
154
|
value: sellAmount,
|
|
155
|
+
chainSpecific: {
|
|
156
|
+
from: sendAddress,
|
|
157
|
+
contractAddress,
|
|
158
|
+
},
|
|
154
159
|
});
|
|
155
160
|
return { networkFeeCryptoBaseUnit: feeData.fast.txFee };
|
|
156
161
|
}
|
|
@@ -170,6 +175,31 @@ const getTradeQuote = async (input, deps) => {
|
|
|
170
175
|
});
|
|
171
176
|
return { networkFeeCryptoBaseUnit: feeData.fast.txFee };
|
|
172
177
|
}
|
|
178
|
+
case caip_1.CHAIN_NAMESPACE.Near: {
|
|
179
|
+
const sellAdapter = deps.assertGetNearChainAdapter(sellAsset.chainId);
|
|
180
|
+
const feeData = await sellAdapter.getFeeData({
|
|
181
|
+
to: depositAddress,
|
|
182
|
+
value: sellAmount,
|
|
183
|
+
chainSpecific: { from },
|
|
184
|
+
});
|
|
185
|
+
return { networkFeeCryptoBaseUnit: feeData.fast.txFee };
|
|
186
|
+
}
|
|
187
|
+
case caip_1.CHAIN_NAMESPACE.Starknet: {
|
|
188
|
+
const sellAdapter = deps.assertGetStarknetChainAdapter(sellAsset.chainId);
|
|
189
|
+
const tokenContractAddress = (0, utils_1.isToken)(sellAsset.assetId)
|
|
190
|
+
? (0, caip_1.fromAssetId)(sellAsset.assetId).assetReference
|
|
191
|
+
: undefined;
|
|
192
|
+
const feeData = await sellAdapter.getFeeData({
|
|
193
|
+
to: depositAddress,
|
|
194
|
+
value: sellAmount,
|
|
195
|
+
chainSpecific: {
|
|
196
|
+
from,
|
|
197
|
+
tokenContractAddress,
|
|
198
|
+
},
|
|
199
|
+
sendMax: false,
|
|
200
|
+
});
|
|
201
|
+
return { networkFeeCryptoBaseUnit: feeData.fast.txFee };
|
|
202
|
+
}
|
|
173
203
|
default:
|
|
174
204
|
throw new Error(`Unsupported chain namespace: ${chainNamespace}`);
|
|
175
205
|
}
|
|
@@ -23,14 +23,12 @@ const getTradeRate = async (input, deps) => {
|
|
|
23
23
|
const originAsset = await (0, helpers_2.assetToNearIntentsAsset)(sellAsset);
|
|
24
24
|
const destinationAsset = await (0, helpers_2.assetToNearIntentsAsset)(buyAsset);
|
|
25
25
|
if (!originAsset) {
|
|
26
|
-
console.log('[NEAR] Returning error - originAsset not supported');
|
|
27
26
|
return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
|
|
28
27
|
code: types_1.TradeQuoteError.UnsupportedTradePair,
|
|
29
28
|
message: `Asset ${sellAsset.symbol} on ${sellAsset.networkName || sellAsset.chainId} is not supported by NEAR Intents`,
|
|
30
29
|
}));
|
|
31
30
|
}
|
|
32
31
|
if (!destinationAsset) {
|
|
33
|
-
console.log('[NEAR] Returning error - destinationAsset not supported');
|
|
34
32
|
return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
|
|
35
33
|
code: types_1.TradeQuoteError.UnsupportedTradePair,
|
|
36
34
|
message: `Asset ${buyAsset.symbol} on ${buyAsset.networkName || buyAsset.chainId} is not supported by NEAR Intents`,
|
|
@@ -76,9 +74,31 @@ const getTradeRate = async (input, deps) => {
|
|
|
76
74
|
const getFeeData = async () => {
|
|
77
75
|
switch (chainNamespace) {
|
|
78
76
|
case caip_1.CHAIN_NAMESPACE.Evm: {
|
|
77
|
+
const sellAdapter = deps.assertGetEvmChainAdapter(sellAsset.chainId);
|
|
78
|
+
const contractAddress = (0, utils_1.contractAddressOrUndefined)(sellAsset.assetId);
|
|
79
|
+
const data = chain_adapters_1.evm.getErc20Data(depositAddress, sellAmount, contractAddress);
|
|
80
|
+
// For Monad, skip Tenderly and use adapter's getFeeData directly
|
|
81
|
+
if (sellAsset.chainId === caip_1.monadChainId) {
|
|
82
|
+
try {
|
|
83
|
+
const feeData = await sellAdapter.getFeeData({
|
|
84
|
+
to: contractAddress ?? depositAddress,
|
|
85
|
+
value: (0, helpers_1.isNativeEvmAsset)(sellAsset.assetId) ? sellAmount : '0',
|
|
86
|
+
chainSpecific: {
|
|
87
|
+
from: sendAddress || depositAddress,
|
|
88
|
+
contractAddress,
|
|
89
|
+
data: data || '0x',
|
|
90
|
+
},
|
|
91
|
+
sendMax: false,
|
|
92
|
+
});
|
|
93
|
+
return feeData.fast.txFee;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
console.error('Failed to estimate fees for Monad Near Intents:', error);
|
|
97
|
+
return '0';
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// For other EVM chains, use Tenderly simulation
|
|
79
101
|
try {
|
|
80
|
-
const contractAddress = (0, utils_1.contractAddressOrUndefined)(sellAsset.assetId);
|
|
81
|
-
const data = chain_adapters_1.evm.getErc20Data(depositAddress, sellAmount, contractAddress);
|
|
82
102
|
const simulationResult = await (0, tenderly_1.simulateWithStateOverrides)({
|
|
83
103
|
chainId: sellAsset.chainId,
|
|
84
104
|
from: (0, viem_1.getAddress)(sendAddress || depositAddress),
|
|
@@ -95,7 +115,6 @@ const getTradeRate = async (input, deps) => {
|
|
|
95
115
|
return '0';
|
|
96
116
|
}
|
|
97
117
|
// Calculate network fee using the simulated gas limit
|
|
98
|
-
const sellAdapter = deps.assertGetEvmChainAdapter(sellAsset.chainId);
|
|
99
118
|
const { average } = await sellAdapter.getGasFeeData();
|
|
100
119
|
const supportsEIP1559 = 'maxFeePerGas' in average;
|
|
101
120
|
const networkFeeCryptoBaseUnit = chain_adapters_1.evm.calcNetworkFeeCryptoBaseUnit({
|
|
@@ -159,9 +178,14 @@ const getTradeRate = async (input, deps) => {
|
|
|
159
178
|
case caip_1.CHAIN_NAMESPACE.Tron: {
|
|
160
179
|
try {
|
|
161
180
|
const sellAdapter = deps.assertGetTronChainAdapter(sellAsset.chainId);
|
|
181
|
+
const contractAddress = (0, utils_1.contractAddressOrUndefined)(sellAsset.assetId);
|
|
162
182
|
const feeData = await sellAdapter.getFeeData({
|
|
163
183
|
to: depositAddress,
|
|
164
184
|
value: sellAmount,
|
|
185
|
+
chainSpecific: {
|
|
186
|
+
from: sendAddress,
|
|
187
|
+
contractAddress,
|
|
188
|
+
},
|
|
165
189
|
});
|
|
166
190
|
return feeData.fast.txFee;
|
|
167
191
|
}
|
|
@@ -193,6 +217,30 @@ const getTradeRate = async (input, deps) => {
|
|
|
193
217
|
return '0';
|
|
194
218
|
}
|
|
195
219
|
}
|
|
220
|
+
case caip_1.CHAIN_NAMESPACE.Starknet: {
|
|
221
|
+
try {
|
|
222
|
+
const sellAdapter = deps.assertGetStarknetChainAdapter(sellAsset.chainId);
|
|
223
|
+
const tokenContractAddress = (0, utils_1.isToken)(sellAsset.assetId)
|
|
224
|
+
? (0, caip_1.fromAssetId)(sellAsset.assetId).assetReference
|
|
225
|
+
: undefined;
|
|
226
|
+
if (!sendAddress) {
|
|
227
|
+
return '0';
|
|
228
|
+
}
|
|
229
|
+
const feeData = await sellAdapter.getFeeData({
|
|
230
|
+
to: depositAddress,
|
|
231
|
+
value: sellAmount,
|
|
232
|
+
chainSpecific: {
|
|
233
|
+
from: sendAddress,
|
|
234
|
+
tokenContractAddress,
|
|
235
|
+
},
|
|
236
|
+
sendMax: false,
|
|
237
|
+
});
|
|
238
|
+
return feeData.fast.txFee;
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
return '0';
|
|
242
|
+
}
|
|
243
|
+
}
|
|
196
244
|
default:
|
|
197
245
|
return undefined;
|
|
198
246
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { KnownChainIds } from '@shapeshiftoss/types';
|
|
2
2
|
export { QuoteRequest } from '@defuse-protocol/one-click-sdk-typescript';
|
|
3
3
|
export type { GetExecutionStatusResponse, QuoteResponse, TokenResponse, } from '@defuse-protocol/one-click-sdk-typescript';
|
|
4
|
-
export declare const nearIntentsSupportedChainIds: readonly [KnownChainIds.EthereumMainnet, KnownChainIds.ArbitrumMainnet, KnownChainIds.BaseMainnet, KnownChainIds.GnosisMainnet, KnownChainIds.BnbSmartChainMainnet, KnownChainIds.PolygonMainnet, KnownChainIds.AvalancheMainnet, KnownChainIds.OptimismMainnet, KnownChainIds.BitcoinMainnet, KnownChainIds.DogecoinMainnet, KnownChainIds.SolanaMainnet, KnownChainIds.TronMainnet, KnownChainIds.SuiMainnet];
|
|
4
|
+
export declare const nearIntentsSupportedChainIds: readonly [KnownChainIds.EthereumMainnet, KnownChainIds.ArbitrumMainnet, KnownChainIds.BaseMainnet, KnownChainIds.GnosisMainnet, KnownChainIds.BnbSmartChainMainnet, KnownChainIds.PolygonMainnet, KnownChainIds.AvalancheMainnet, KnownChainIds.OptimismMainnet, KnownChainIds.BitcoinMainnet, KnownChainIds.DogecoinMainnet, KnownChainIds.ZcashMainnet, KnownChainIds.SolanaMainnet, KnownChainIds.TronMainnet, KnownChainIds.SuiMainnet, KnownChainIds.StarknetMainnet, KnownChainIds.MonadMainnet, KnownChainIds.NearMainnet];
|
|
5
5
|
export type NearIntentsSupportedChainId = (typeof nearIntentsSupportedChainIds)[number];
|
|
6
6
|
export declare const chainIdToNearIntentsChain: Record<NearIntentsSupportedChainId, string>;
|
|
@@ -15,9 +15,13 @@ exports.nearIntentsSupportedChainIds = [
|
|
|
15
15
|
types_1.KnownChainIds.OptimismMainnet,
|
|
16
16
|
types_1.KnownChainIds.BitcoinMainnet,
|
|
17
17
|
types_1.KnownChainIds.DogecoinMainnet,
|
|
18
|
+
types_1.KnownChainIds.ZcashMainnet,
|
|
18
19
|
types_1.KnownChainIds.SolanaMainnet,
|
|
19
20
|
types_1.KnownChainIds.TronMainnet,
|
|
20
21
|
types_1.KnownChainIds.SuiMainnet,
|
|
22
|
+
types_1.KnownChainIds.StarknetMainnet,
|
|
23
|
+
types_1.KnownChainIds.MonadMainnet,
|
|
24
|
+
types_1.KnownChainIds.NearMainnet,
|
|
21
25
|
];
|
|
22
26
|
exports.chainIdToNearIntentsChain = {
|
|
23
27
|
[types_1.KnownChainIds.EthereumMainnet]: 'eth',
|
|
@@ -30,7 +34,11 @@ exports.chainIdToNearIntentsChain = {
|
|
|
30
34
|
[types_1.KnownChainIds.OptimismMainnet]: 'op',
|
|
31
35
|
[types_1.KnownChainIds.BitcoinMainnet]: 'btc',
|
|
32
36
|
[types_1.KnownChainIds.DogecoinMainnet]: 'doge',
|
|
37
|
+
[types_1.KnownChainIds.ZcashMainnet]: 'zec',
|
|
33
38
|
[types_1.KnownChainIds.SolanaMainnet]: 'sol',
|
|
34
39
|
[types_1.KnownChainIds.TronMainnet]: 'tron',
|
|
35
40
|
[types_1.KnownChainIds.SuiMainnet]: 'sui',
|
|
41
|
+
[types_1.KnownChainIds.StarknetMainnet]: 'starknet',
|
|
42
|
+
[types_1.KnownChainIds.MonadMainnet]: 'monad',
|
|
43
|
+
[types_1.KnownChainIds.NearMainnet]: 'near',
|
|
36
44
|
};
|
|
@@ -28,25 +28,45 @@ const getNearIntentsAsset = ({ nearNetwork, contractAddress, }) => {
|
|
|
28
28
|
return `nep141:${nearNetwork}-${contractAddress.toLowerCase()}.omft.near`;
|
|
29
29
|
};
|
|
30
30
|
exports.getNearIntentsAsset = getNearIntentsAsset;
|
|
31
|
-
const NEP245_CHAINS = ['bsc', 'pol', 'avax', 'op', 'tron'];
|
|
32
|
-
const TOKEN_LOOKUP_CHAINS = ['sui'];
|
|
31
|
+
const NEP245_CHAINS = ['bsc', 'pol', 'avax', 'op', 'tron', 'monad'];
|
|
32
|
+
const TOKEN_LOOKUP_CHAINS = ['sui', 'starknet'];
|
|
33
|
+
const NEAR_CHAIN = 'near';
|
|
34
|
+
const WNEAR_CONTRACT_ADDRESS = 'wrap.near';
|
|
35
|
+
const isNep245Chain = (chain) => {
|
|
36
|
+
return NEP245_CHAINS.includes(chain);
|
|
37
|
+
};
|
|
38
|
+
const isTokenLookupChain = (chain) => {
|
|
39
|
+
return TOKEN_LOOKUP_CHAINS.includes(chain);
|
|
40
|
+
};
|
|
33
41
|
const assetToNearIntentsAsset = async (asset) => {
|
|
34
42
|
const nearNetwork = types_1.chainIdToNearIntentsChain[asset.chainId];
|
|
35
43
|
if (!nearNetwork)
|
|
36
44
|
return null;
|
|
37
|
-
//
|
|
45
|
+
// NEAR chain requires special handling
|
|
46
|
+
// Native NEAR maps to wNEAR (wrap.near)
|
|
47
|
+
if (nearNetwork === NEAR_CHAIN) {
|
|
48
|
+
const tokens = await oneClickService_1.OneClickService.getTokens();
|
|
49
|
+
const { assetNamespace, assetReference } = (0, caip_1.fromAssetId)(asset.assetId);
|
|
50
|
+
const isNativeAsset = assetNamespace === 'slip44';
|
|
51
|
+
// Native NEAR maps to wNEAR, tokens use their contract address directly
|
|
52
|
+
const contractAddress = isNativeAsset ? WNEAR_CONTRACT_ADDRESS : assetReference;
|
|
53
|
+
const match = tokens.find((t) => {
|
|
54
|
+
if (t.blockchain !== NEAR_CHAIN)
|
|
55
|
+
return false;
|
|
56
|
+
return t.contractAddress === contractAddress;
|
|
57
|
+
});
|
|
58
|
+
return match?.assetId ?? null;
|
|
59
|
+
}
|
|
60
|
+
// NEP-245 chains (BSC, Polygon, Avalanche, Optimism, TRON, Monad), Token lookup chains (Sui, Starknet), and Solana require token lookup
|
|
38
61
|
// Asset IDs use hashed format that can't be generated from contract addresses
|
|
39
|
-
const requiresLookup =
|
|
40
|
-
TOKEN_LOOKUP_CHAINS.includes(nearNetwork) ||
|
|
41
|
-
asset.chainId === caip_1.solanaChainId ||
|
|
42
|
-
asset.chainId === caip_1.suiChainId;
|
|
62
|
+
const requiresLookup = isNep245Chain(nearNetwork) || isTokenLookupChain(nearNetwork) || asset.chainId === caip_1.solanaChainId;
|
|
43
63
|
if (requiresLookup) {
|
|
44
64
|
const tokens = await oneClickService_1.OneClickService.getTokens();
|
|
45
65
|
const { assetNamespace, assetReference } = (0, caip_1.fromAssetId)(asset.assetId);
|
|
46
66
|
const isNativeAsset = assetNamespace === 'slip44';
|
|
47
67
|
const contractAddress = !isNativeAsset ? assetReference.toLowerCase() : null;
|
|
48
68
|
const match = tokens.find((t) => {
|
|
49
|
-
if (t.blockchain !== nearNetwork)
|
|
69
|
+
if (typeof t.blockchain !== 'string' || t.blockchain !== nearNetwork)
|
|
50
70
|
return false;
|
|
51
71
|
return contractAddress
|
|
52
72
|
? t.contractAddress?.toLowerCase() === contractAddress
|
|
@@ -8,7 +8,7 @@ exports.chainIdToPortalsNetwork = {
|
|
|
8
8
|
[types_1.KnownChainIds.OptimismMainnet]: 'optimism',
|
|
9
9
|
[types_1.KnownChainIds.BnbSmartChainMainnet]: 'bsc',
|
|
10
10
|
[types_1.KnownChainIds.PolygonMainnet]: 'polygon',
|
|
11
|
-
[types_1.KnownChainIds.GnosisMainnet]: 'gnosis',
|
|
12
11
|
[types_1.KnownChainIds.ArbitrumMainnet]: 'arbitrum',
|
|
13
12
|
[types_1.KnownChainIds.BaseMainnet]: 'base',
|
|
13
|
+
[types_1.KnownChainIds.HyperEvmMainnet]: 'hyperevm',
|
|
14
14
|
};
|
|
@@ -5,10 +5,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.portalsApi = void 0;
|
|
7
7
|
const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
|
|
8
|
+
const unchained_client_1 = require("@shapeshiftoss/unchained-client");
|
|
8
9
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
9
10
|
const utils_1 = require("../../utils");
|
|
10
11
|
const getPortalsTradeQuote_1 = require("./getPortalsTradeQuote/getPortalsTradeQuote");
|
|
11
12
|
const getPortalsTradeRate_1 = require("./getPortalsTradeRate/getPortalsTradeRate");
|
|
13
|
+
const fetchAxelarscanStatus_1 = require("./utils/fetchAxelarscanStatus");
|
|
14
|
+
const fetchSquidStatus_1 = require("./utils/fetchSquidStatus");
|
|
12
15
|
exports.portalsApi = {
|
|
13
16
|
getTradeQuote: async (input, { config, assertGetEvmChainAdapter }) => {
|
|
14
17
|
const tradeQuoteResult = await (0, getPortalsTradeQuote_1.getPortalsTradeQuote)(input, assertGetEvmChainAdapter, config);
|
|
@@ -52,5 +55,93 @@ exports.portalsApi = {
|
|
|
52
55
|
gasLimit: bignumber_js_1.default.max(feeData.gasLimit, estimatedGas).toFixed(),
|
|
53
56
|
});
|
|
54
57
|
},
|
|
55
|
-
checkTradeStatus:
|
|
58
|
+
checkTradeStatus: async (input) => {
|
|
59
|
+
const { txHash, chainId, swap, assertGetEvmChainAdapter, address, fetchIsSmartContractAddressQuery, } = input;
|
|
60
|
+
const isCrossChain = Boolean(swap && swap.sellAsset.chainId !== swap.buyAsset?.chainId);
|
|
61
|
+
if (!isCrossChain) {
|
|
62
|
+
return (0, utils_1.checkEvmSwapStatus)({
|
|
63
|
+
txHash,
|
|
64
|
+
chainId,
|
|
65
|
+
address,
|
|
66
|
+
assertGetEvmChainAdapter,
|
|
67
|
+
fetchIsSmartContractAddressQuery,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
const sourceTxStatus = await (0, utils_1.checkEvmSwapStatus)({
|
|
71
|
+
txHash,
|
|
72
|
+
chainId,
|
|
73
|
+
address,
|
|
74
|
+
assertGetEvmChainAdapter,
|
|
75
|
+
fetchIsSmartContractAddressQuery,
|
|
76
|
+
});
|
|
77
|
+
if (sourceTxStatus.status === unchained_client_1.TxStatus.Pending || sourceTxStatus.status === unchained_client_1.TxStatus.Unknown) {
|
|
78
|
+
return {
|
|
79
|
+
status: unchained_client_1.TxStatus.Pending,
|
|
80
|
+
buyTxHash: undefined,
|
|
81
|
+
message: 'Source transaction pending',
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
if (sourceTxStatus.status === unchained_client_1.TxStatus.Failed) {
|
|
85
|
+
return sourceTxStatus;
|
|
86
|
+
}
|
|
87
|
+
const axelarscanResult = await (0, fetchAxelarscanStatus_1.fetchAxelarscanBridgeStatus)(txHash);
|
|
88
|
+
if ((axelarscanResult.isErr() || !axelarscanResult.unwrap()) && swap) {
|
|
89
|
+
const squidResult = await (0, fetchSquidStatus_1.fetchSquidBridgeStatus)(txHash, swap.sellAsset.chainId, swap.buyAsset.chainId);
|
|
90
|
+
if (squidResult.isOk()) {
|
|
91
|
+
const squidStatus = squidResult.unwrap();
|
|
92
|
+
const squidTxStatus = (() => {
|
|
93
|
+
switch (squidStatus.status) {
|
|
94
|
+
case 'confirmed':
|
|
95
|
+
return unchained_client_1.TxStatus.Confirmed;
|
|
96
|
+
case 'failed':
|
|
97
|
+
return unchained_client_1.TxStatus.Failed;
|
|
98
|
+
case 'pending':
|
|
99
|
+
default:
|
|
100
|
+
return unchained_client_1.TxStatus.Pending;
|
|
101
|
+
}
|
|
102
|
+
})();
|
|
103
|
+
return {
|
|
104
|
+
status: squidTxStatus,
|
|
105
|
+
buyTxHash: squidStatus.destinationTxHash,
|
|
106
|
+
relayerExplorerTxLink: (0, fetchSquidStatus_1.getSquidTrackingLink)(txHash, squidStatus, swap.sellAsset.explorerTxLink, swap.buyAsset.explorerTxLink),
|
|
107
|
+
message: squidTxStatus === unchained_client_1.TxStatus.Pending ? 'Cross-chain swap in progress' : undefined,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
status: unchained_client_1.TxStatus.Pending,
|
|
112
|
+
buyTxHash: undefined,
|
|
113
|
+
relayerExplorerTxLink: (0, fetchAxelarscanStatus_1.getAxelarscanTrackingLink)(txHash),
|
|
114
|
+
message: 'Bridge status check failed - track manually',
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
const bridgeStatus = axelarscanResult.unwrap();
|
|
118
|
+
if (!bridgeStatus) {
|
|
119
|
+
return {
|
|
120
|
+
status: unchained_client_1.TxStatus.Pending,
|
|
121
|
+
buyTxHash: undefined,
|
|
122
|
+
message: 'Cross-chain swap in progress',
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
const txStatus = (() => {
|
|
126
|
+
switch (bridgeStatus.status) {
|
|
127
|
+
case 'confirmed':
|
|
128
|
+
return unchained_client_1.TxStatus.Confirmed;
|
|
129
|
+
case 'failed':
|
|
130
|
+
return unchained_client_1.TxStatus.Failed;
|
|
131
|
+
case 'pending':
|
|
132
|
+
default:
|
|
133
|
+
return unchained_client_1.TxStatus.Pending;
|
|
134
|
+
}
|
|
135
|
+
})();
|
|
136
|
+
return {
|
|
137
|
+
status: txStatus,
|
|
138
|
+
buyTxHash: bridgeStatus.destinationTxHash,
|
|
139
|
+
relayerExplorerTxLink: (0, fetchAxelarscanStatus_1.getAxelarscanTrackingLink)(txHash),
|
|
140
|
+
message: txStatus === unchained_client_1.TxStatus.Pending
|
|
141
|
+
? 'Bridge in progress'
|
|
142
|
+
: txStatus === unchained_client_1.TxStatus.Failed
|
|
143
|
+
? bridgeStatus.errorMessage
|
|
144
|
+
: undefined,
|
|
145
|
+
};
|
|
146
|
+
},
|
|
56
147
|
};
|