@1delta/bridge-configs 0.1.0

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.
Files changed (210) hide show
  1. package/LICENSE +674 -0
  2. package/dist/configs/across/config.d.ts +4 -0
  3. package/dist/configs/across/config.d.ts.map +1 -0
  4. package/dist/configs/across/config.js +317 -0
  5. package/dist/configs/axelar/abis/AxelarGasService.d.ts +103 -0
  6. package/dist/configs/axelar/abis/AxelarGasService.d.ts.map +1 -0
  7. package/dist/configs/axelar/abis/AxelarGasService.js +1073 -0
  8. package/dist/configs/axelar/abis/AxelarGateway.d.ts +51 -0
  9. package/dist/configs/axelar/abis/AxelarGateway.d.ts.map +1 -0
  10. package/dist/configs/axelar/abis/AxelarGateway.js +753 -0
  11. package/dist/configs/axelar/abis/SquidMulticall.d.ts +47 -0
  12. package/dist/configs/axelar/abis/SquidMulticall.d.ts.map +1 -0
  13. package/dist/configs/axelar/abis/SquidMulticall.js +104 -0
  14. package/dist/configs/axelar/abis/SquidRouter.d.ts +82 -0
  15. package/dist/configs/axelar/abis/SquidRouter.d.ts.map +1 -0
  16. package/dist/configs/axelar/abis/SquidRouter.js +837 -0
  17. package/dist/configs/axelar/calldata/buildTx.d.ts +3 -0
  18. package/dist/configs/axelar/calldata/buildTx.d.ts.map +1 -0
  19. package/dist/configs/axelar/calldata/buildTx.js +29 -0
  20. package/dist/configs/axelar/calldata/index.d.ts +3 -0
  21. package/dist/configs/axelar/calldata/index.d.ts.map +1 -0
  22. package/dist/configs/axelar/calldata/index.js +2 -0
  23. package/dist/configs/axelar/calldata/squid/createSquidMulticallPayload.d.ts +16 -0
  24. package/dist/configs/axelar/calldata/squid/createSquidMulticallPayload.d.ts.map +1 -0
  25. package/dist/configs/axelar/calldata/squid/createSquidMulticallPayload.js +76 -0
  26. package/dist/configs/axelar/calldata/squid/types.d.ts +15 -0
  27. package/dist/configs/axelar/calldata/squid/types.d.ts.map +1 -0
  28. package/dist/configs/axelar/calldata/squid/types.js +7 -0
  29. package/dist/configs/axelar/calldata/types.d.ts +18 -0
  30. package/dist/configs/axelar/calldata/types.d.ts.map +1 -0
  31. package/dist/configs/axelar/calldata/types.js +1 -0
  32. package/dist/configs/axelar/config.d.ts +4 -0
  33. package/dist/configs/axelar/config.d.ts.map +1 -0
  34. package/dist/configs/axelar/config.js +99 -0
  35. package/dist/configs/axelar/data/axelarConfig/index.d.ts +3 -0
  36. package/dist/configs/axelar/data/axelarConfig/index.d.ts.map +1 -0
  37. package/dist/configs/axelar/data/axelarConfig/index.js +33 -0
  38. package/dist/configs/axelar/data/axelarConfig/types.d.ts +181 -0
  39. package/dist/configs/axelar/data/axelarConfig/types.d.ts.map +1 -0
  40. package/dist/configs/axelar/data/axelarConfig/types.js +1 -0
  41. package/dist/configs/axelar/data/squidChains/index.d.ts +6 -0
  42. package/dist/configs/axelar/data/squidChains/index.d.ts.map +1 -0
  43. package/dist/configs/axelar/data/squidChains/index.js +61 -0
  44. package/dist/configs/axelar/data/squidChains/types.d.ts +23 -0
  45. package/dist/configs/axelar/data/squidChains/types.d.ts.map +1 -0
  46. package/dist/configs/axelar/data/squidChains/types.js +1 -0
  47. package/dist/configs/axelar/errors.d.ts +15 -0
  48. package/dist/configs/axelar/errors.d.ts.map +1 -0
  49. package/dist/configs/axelar/errors.js +8 -0
  50. package/dist/configs/axelar/gasEstimation/index.d.ts +7 -0
  51. package/dist/configs/axelar/gasEstimation/index.d.ts.map +1 -0
  52. package/dist/configs/axelar/gasEstimation/index.js +38 -0
  53. package/dist/configs/axelar/gasEstimation/types.d.ts +23 -0
  54. package/dist/configs/axelar/gasEstimation/types.d.ts.map +1 -0
  55. package/dist/configs/axelar/gasEstimation/types.js +1 -0
  56. package/dist/configs/axelar/route/fetchAxelarRoute.d.ts +3 -0
  57. package/dist/configs/axelar/route/fetchAxelarRoute.d.ts.map +1 -0
  58. package/dist/configs/axelar/route/fetchAxelarRoute.js +50 -0
  59. package/dist/configs/axelar/route/index.d.ts +3 -0
  60. package/dist/configs/axelar/route/index.d.ts.map +1 -0
  61. package/dist/configs/axelar/route/index.js +2 -0
  62. package/dist/configs/axelar/route/tokenIdentifier.d.ts +5 -0
  63. package/dist/configs/axelar/route/tokenIdentifier.d.ts.map +1 -0
  64. package/dist/configs/axelar/route/tokenIdentifier.js +32 -0
  65. package/dist/configs/axelar/route/types.d.ts +5 -0
  66. package/dist/configs/axelar/route/types.d.ts.map +1 -0
  67. package/dist/configs/axelar/route/types.js +1 -0
  68. package/dist/configs/butter/config.d.ts +9 -0
  69. package/dist/configs/butter/config.d.ts.map +1 -0
  70. package/dist/configs/butter/config.js +207 -0
  71. package/dist/configs/cowswap/config.d.ts +4 -0
  72. package/dist/configs/cowswap/config.d.ts.map +1 -0
  73. package/dist/configs/cowswap/config.js +106 -0
  74. package/dist/configs/cowswap/errors.d.ts +19 -0
  75. package/dist/configs/cowswap/errors.d.ts.map +1 -0
  76. package/dist/configs/cowswap/errors.js +12 -0
  77. package/dist/configs/cowswap/swap/quote.d.ts +5 -0
  78. package/dist/configs/cowswap/swap/quote.d.ts.map +1 -0
  79. package/dist/configs/cowswap/swap/quote.js +28 -0
  80. package/dist/configs/cowswap/swap/route.d.ts +5 -0
  81. package/dist/configs/cowswap/swap/route.d.ts.map +1 -0
  82. package/dist/configs/cowswap/swap/route.js +61 -0
  83. package/dist/configs/cowswap/track/index.d.ts +6 -0
  84. package/dist/configs/cowswap/track/index.d.ts.map +1 -0
  85. package/dist/configs/cowswap/track/index.js +27 -0
  86. package/dist/configs/cowswap/utils/getCowSwapSlippage.d.ts +4 -0
  87. package/dist/configs/cowswap/utils/getCowSwapSlippage.d.ts.map +1 -0
  88. package/dist/configs/cowswap/utils/getCowSwapSlippage.js +16 -0
  89. package/dist/configs/cowswap/utils/toSupportedChainId.d.ts +3 -0
  90. package/dist/configs/cowswap/utils/toSupportedChainId.d.ts.map +1 -0
  91. package/dist/configs/cowswap/utils/toSupportedChainId.js +11 -0
  92. package/dist/configs/crosscurve/config.d.ts +4 -0
  93. package/dist/configs/crosscurve/config.d.ts.map +1 -0
  94. package/dist/configs/crosscurve/config.js +185 -0
  95. package/dist/configs/gas-zip/chains/fetch.d.ts +10 -0
  96. package/dist/configs/gas-zip/chains/fetch.d.ts.map +1 -0
  97. package/dist/configs/gas-zip/chains/fetch.js +29 -0
  98. package/dist/configs/gas-zip/chains/types.d.ts +25 -0
  99. package/dist/configs/gas-zip/chains/types.d.ts.map +1 -0
  100. package/dist/configs/gas-zip/chains/types.js +1 -0
  101. package/dist/configs/gas-zip/config.d.ts +4 -0
  102. package/dist/configs/gas-zip/config.d.ts.map +1 -0
  103. package/dist/configs/gas-zip/config.js +121 -0
  104. package/dist/configs/index.d.ts +2 -0
  105. package/dist/configs/index.d.ts.map +1 -0
  106. package/dist/configs/index.js +41 -0
  107. package/dist/configs/layerswap/LayerswapNetworks.json +3656 -0
  108. package/dist/configs/layerswap/config.d.ts +4 -0
  109. package/dist/configs/layerswap/config.d.ts.map +1 -0
  110. package/dist/configs/layerswap/config.js +285 -0
  111. package/dist/configs/lifi/config.d.ts +4 -0
  112. package/dist/configs/lifi/config.d.ts.map +1 -0
  113. package/dist/configs/lifi/config.js +104 -0
  114. package/dist/configs/mayan/calldata/index.d.ts +14 -0
  115. package/dist/configs/mayan/calldata/index.d.ts.map +1 -0
  116. package/dist/configs/mayan/calldata/index.js +41 -0
  117. package/dist/configs/mayan/config.d.ts +4 -0
  118. package/dist/configs/mayan/config.d.ts.map +1 -0
  119. package/dist/configs/mayan/config.js +222 -0
  120. package/dist/configs/odos/config.d.ts +8 -0
  121. package/dist/configs/odos/config.d.ts.map +1 -0
  122. package/dist/configs/odos/config.js +127 -0
  123. package/dist/configs/orbiter/abis/ERC20.d.ts +172 -0
  124. package/dist/configs/orbiter/abis/ERC20.d.ts.map +1 -0
  125. package/dist/configs/orbiter/abis/ERC20.js +224 -0
  126. package/dist/configs/orbiter/abis/OrbiterRouterEVMV3.d.ts +85 -0
  127. package/dist/configs/orbiter/abis/OrbiterRouterEVMV3.d.ts.map +1 -0
  128. package/dist/configs/orbiter/abis/OrbiterRouterEVMV3.js +83 -0
  129. package/dist/configs/orbiter/calldata/index.d.ts +32 -0
  130. package/dist/configs/orbiter/calldata/index.d.ts.map +1 -0
  131. package/dist/configs/orbiter/calldata/index.js +59 -0
  132. package/dist/configs/orbiter/config.d.ts +4 -0
  133. package/dist/configs/orbiter/config.d.ts.map +1 -0
  134. package/dist/configs/orbiter/config.js +178 -0
  135. package/dist/configs/router/config.d.ts +4 -0
  136. package/dist/configs/router/config.d.ts.map +1 -0
  137. package/dist/configs/router/config.js +125 -0
  138. package/dist/configs/squid-v1/config.d.ts +4 -0
  139. package/dist/configs/squid-v1/config.d.ts.map +1 -0
  140. package/dist/configs/squid-v1/config.js +133 -0
  141. package/dist/configs/squid-v2/config.d.ts +4 -0
  142. package/dist/configs/squid-v2/config.d.ts.map +1 -0
  143. package/dist/configs/squid-v2/config.js +146 -0
  144. package/dist/configs/squid-v2/constants.d.ts +2 -0
  145. package/dist/configs/squid-v2/constants.d.ts.map +1 -0
  146. package/dist/configs/squid-v2/constants.js +1 -0
  147. package/dist/configs/stargate/abis/StargatePool.d.ts +41 -0
  148. package/dist/configs/stargate/abis/StargatePool.d.ts.map +1 -0
  149. package/dist/configs/stargate/abis/StargatePool.js +318 -0
  150. package/dist/configs/stargate/abis/TokenMessaging.d.ts +16 -0
  151. package/dist/configs/stargate/abis/TokenMessaging.d.ts.map +1 -0
  152. package/dist/configs/stargate/abis/TokenMessaging.js +21 -0
  153. package/dist/configs/stargate/calldata/constants.d.ts +249 -0
  154. package/dist/configs/stargate/calldata/constants.d.ts.map +1 -0
  155. package/dist/configs/stargate/calldata/constants.js +273 -0
  156. package/dist/configs/stargate/calldata/index.d.ts +6 -0
  157. package/dist/configs/stargate/calldata/index.d.ts.map +1 -0
  158. package/dist/configs/stargate/calldata/index.js +127 -0
  159. package/dist/configs/stargate/calldata/types.d.ts +51 -0
  160. package/dist/configs/stargate/calldata/types.d.ts.map +1 -0
  161. package/dist/configs/stargate/calldata/types.js +10 -0
  162. package/dist/configs/stargate/common/config.d.ts +88 -0
  163. package/dist/configs/stargate/common/config.d.ts.map +1 -0
  164. package/dist/configs/stargate/common/config.js +93 -0
  165. package/dist/configs/stargate/common/constants.d.ts +5 -0
  166. package/dist/configs/stargate/common/constants.d.ts.map +1 -0
  167. package/dist/configs/stargate/common/constants.js +7 -0
  168. package/dist/configs/stargate/common/index.d.ts +3 -0
  169. package/dist/configs/stargate/common/index.d.ts.map +1 -0
  170. package/dist/configs/stargate/common/index.js +2 -0
  171. package/dist/configs/stargate/configs/bus/config.d.ts +4 -0
  172. package/dist/configs/stargate/configs/bus/config.d.ts.map +1 -0
  173. package/dist/configs/stargate/configs/bus/config.js +41 -0
  174. package/dist/configs/stargate/configs/taxi/config.d.ts +4 -0
  175. package/dist/configs/stargate/configs/taxi/config.d.ts.map +1 -0
  176. package/dist/configs/stargate/configs/taxi/config.js +58 -0
  177. package/dist/configs/stargate/types/index.d.ts +12 -0
  178. package/dist/configs/stargate/types/index.d.ts.map +1 -0
  179. package/dist/configs/stargate/types/index.js +15 -0
  180. package/dist/configs/symbiosis/config.d.ts +4 -0
  181. package/dist/configs/symbiosis/config.d.ts.map +1 -0
  182. package/dist/configs/symbiosis/config.js +119 -0
  183. package/dist/configs/utils/index.d.ts +2 -0
  184. package/dist/configs/utils/index.d.ts.map +1 -0
  185. package/dist/configs/utils/index.js +3 -0
  186. package/dist/configs/xy/config.d.ts +4 -0
  187. package/dist/configs/xy/config.d.ts.map +1 -0
  188. package/dist/configs/xy/config.js +176 -0
  189. package/dist/configs/zenlink/calldata/aggregationRouterV2ABI.d.ts +49 -0
  190. package/dist/configs/zenlink/calldata/aggregationRouterV2ABI.d.ts.map +1 -0
  191. package/dist/configs/zenlink/calldata/aggregationRouterV2ABI.js +63 -0
  192. package/dist/configs/zenlink/calldata/index.d.ts +18 -0
  193. package/dist/configs/zenlink/calldata/index.d.ts.map +1 -0
  194. package/dist/configs/zenlink/calldata/index.js +35 -0
  195. package/dist/configs/zenlink/config.d.ts +4 -0
  196. package/dist/configs/zenlink/config.d.ts.map +1 -0
  197. package/dist/configs/zenlink/config.js +109 -0
  198. package/dist/configs/zenlink/errors.d.ts +15 -0
  199. package/dist/configs/zenlink/errors.d.ts.map +1 -0
  200. package/dist/configs/zenlink/errors.js +8 -0
  201. package/dist/index.d.ts +8 -0
  202. package/dist/index.d.ts.map +1 -0
  203. package/dist/index.js +7 -0
  204. package/dist/types/index.d.ts +31 -0
  205. package/dist/types/index.d.ts.map +1 -0
  206. package/dist/types/index.js +52 -0
  207. package/dist/walletClient.d.ts +4433 -0
  208. package/dist/walletClient.d.ts.map +1 -0
  209. package/dist/walletClient.js +7 -0
  210. package/package.json +27 -0
@@ -0,0 +1,15 @@
1
+ export declare const ERROR_CODES: {
2
+ ERROR: {
3
+ code: string;
4
+ message: string;
5
+ };
6
+ NOT_SUPPORT: {
7
+ code: string;
8
+ message: string;
9
+ };
10
+ DEPOSIT_NOT_FOUND: {
11
+ code: string;
12
+ message: string;
13
+ };
14
+ };
15
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/configs/axelar/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;;;;;;;;;;;CAOvB,CAAA"}
@@ -0,0 +1,8 @@
1
+ export const ERROR_CODES = {
2
+ ERROR: { code: 'ERROR', message: 'unknown error' },
3
+ NOT_SUPPORT: { code: 'NOT_SUPPORT', message: 'NOT SUPPORT' },
4
+ DEPOSIT_NOT_FOUND: {
5
+ code: 'DEPOSIT_NOT_FOUND',
6
+ message: 'deposit not found',
7
+ },
8
+ };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Fetches Axelar gas estimation.
3
+ * Docs: https://docs.axelarscan.io/gmp#estimateGasFee
4
+ * @returns {Promise<object|undefined>} A promise that resolves to the configuration object, or undefined on error.
5
+ */
6
+ export declare function fetchAxelarGasEstimation(params: AxelarGasEstimationParams): Promise<AxelarGasEstimation | undefined>;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/configs/axelar/gasEstimation/index.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAoC1C"}
@@ -0,0 +1,38 @@
1
+ const AXELAR_GAS_API = 'https://api.axelarscan.io/gmp/estimateGasFee';
2
+ /**
3
+ * Fetches Axelar gas estimation.
4
+ * Docs: https://docs.axelarscan.io/gmp#estimateGasFee
5
+ * @returns {Promise<object|undefined>} A promise that resolves to the configuration object, or undefined on error.
6
+ */
7
+ export async function fetchAxelarGasEstimation(params) {
8
+ try {
9
+ const requestData = {
10
+ sourceChain: params.sourceChain,
11
+ destinationChain: params.destinationChain,
12
+ gasMultiplier: params.gasMultiplier,
13
+ gasLimit: params.gasLimit.toString(),
14
+ sourceAddress: params.sourceAddress,
15
+ destinationContractAddress: params.destinationContractAddress,
16
+ amountInUnits: params.amountInUnits.toString(),
17
+ symbol: params.symbol,
18
+ sourceTokenAddress: '0x0000000000000000000000000000000000000000',
19
+ showDetailedFees: 'true',
20
+ };
21
+ const response = await fetch(AXELAR_GAS_API, {
22
+ method: 'POST',
23
+ headers: {
24
+ 'Content-Type': 'application/json',
25
+ },
26
+ body: JSON.stringify(requestData),
27
+ });
28
+ if (!response.ok) {
29
+ throw new Error(`fetchAxelarGasEstimation: Network response was not ok. Status: ${response.status}`);
30
+ }
31
+ const data = (await response.json());
32
+ return data;
33
+ }
34
+ catch (error) {
35
+ console.error('Failed to fetch Axelar gas estimation:', error);
36
+ return undefined;
37
+ }
38
+ }
@@ -0,0 +1,23 @@
1
+ interface AxelarGasEstimation {
2
+ totalFee: bigint;
3
+ isExpressSupported: boolean;
4
+ baseFee: bigint;
5
+ expressFee: bigint;
6
+ executionFee: bigint;
7
+ executionFeeWithMultiplier: bigint;
8
+ gasLimit: bigint;
9
+ gasLimitWithL1Fee: bigint;
10
+ gasMultiplier: number;
11
+ minGasPrice: bigint;
12
+ }
13
+ interface AxelarGasEstimationParams {
14
+ sourceChain: string;
15
+ destinationChain: string;
16
+ gasMultiplier: number | 'auto';
17
+ gasLimit: bigint;
18
+ symbol: string;
19
+ amountInUnits: bigint;
20
+ sourceAddress: string;
21
+ destinationContractAddress: string;
22
+ }
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/configs/axelar/gasEstimation/types.ts"],"names":[],"mappings":"AAAA,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,0BAA0B,EAAE,MAAM,CAAA;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,iBAAiB,EAAE,MAAM,CAAA;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,UAAU,yBAAyB;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,0BAA0B,EAAE,MAAM,CAAA;CACnC"}
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,3 @@
1
+ import { AxelarRouteData } from '../calldata/types';
2
+ export declare function fetchAxelarRoute(fromChainId: string, fromTokenAddress: string, toChainId: string, toTokenAddress: string, amountIn: bigint, gasLimit?: bigint): Promise<AxelarRouteData>;
3
+ //# sourceMappingURL=fetchAxelarRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchAxelarRoute.d.ts","sourceRoot":"","sources":["../../../../src/configs/axelar/route/fetchAxelarRoute.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAiBnD,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAoD1B"}
@@ -0,0 +1,50 @@
1
+ import { CrossChainBusinessException } from '@1delta/bridge-core';
2
+ import { getCachedAxelarConfig } from '../data/axelarConfig';
3
+ import { getSquidRouter } from '../data/squidChains';
4
+ import { ERROR_CODES } from '../errors';
5
+ import { fetchAxelarGasEstimation } from '../gasEstimation';
6
+ import { getAxelarTokenIdentifier } from './tokenIdentifier';
7
+ function isValidPath(fromAxlToken, toAxlToken) {
8
+ if (fromAxlToken.axlChainName === toAxlToken.axlChainName)
9
+ return false;
10
+ if (fromAxlToken.axlTokenSymbol !== toAxlToken.axlTokenSymbol)
11
+ return false;
12
+ return true;
13
+ }
14
+ export async function fetchAxelarRoute(fromChainId, fromTokenAddress, toChainId, toTokenAddress, amountIn, gasLimit) {
15
+ const promiseArray = [
16
+ getSquidRouter(fromChainId),
17
+ getSquidRouter(toChainId),
18
+ getCachedAxelarConfig(),
19
+ ];
20
+ const [sourceAddress, destinationContractAddress, axelarConfig] = await Promise.all(promiseArray);
21
+ if (!sourceAddress || !destinationContractAddress) {
22
+ throw new CrossChainBusinessException(ERROR_CODES.NOT_SUPPORT);
23
+ }
24
+ const fromAxlToken = getAxelarTokenIdentifier(axelarConfig, fromChainId, fromTokenAddress);
25
+ const toAxlToken = getAxelarTokenIdentifier(axelarConfig, toChainId, toTokenAddress);
26
+ const isValidPair = isValidPath(fromAxlToken, toAxlToken);
27
+ if (!isValidPair)
28
+ throw new CrossChainBusinessException(ERROR_CODES.NOT_SUPPORT);
29
+ const fees = await fetchAxelarGasEstimation({
30
+ sourceChain: fromAxlToken.axlChainName,
31
+ destinationChain: toAxlToken.axlChainName,
32
+ symbol: fromAxlToken.axlTokenSymbol,
33
+ amountInUnits: amountIn,
34
+ sourceAddress,
35
+ destinationContractAddress,
36
+ gasLimit: gasLimit ?? 200000n,
37
+ gasMultiplier: 'auto',
38
+ });
39
+ if (!fees)
40
+ throw new CrossChainBusinessException(ERROR_CODES.NOT_SUPPORT);
41
+ return {
42
+ contractAddress: sourceAddress,
43
+ isExpressSupported: fees.isExpressSupported,
44
+ amount: amountIn,
45
+ totalFeeInNative: fees.totalFee,
46
+ bridgeTokenSymbol: fromAxlToken.axlTokenSymbol,
47
+ destinationChain: toAxlToken.axlChainName,
48
+ destinationAddress: destinationContractAddress,
49
+ };
50
+ }
@@ -0,0 +1,3 @@
1
+ export * from './fetchAxelarRoute';
2
+ export * from './tokenIdentifier';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/configs/axelar/route/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './fetchAxelarRoute';
2
+ export * from './tokenIdentifier';
@@ -0,0 +1,5 @@
1
+ import { AxelarConfig } from '../data/axelarConfig/types';
2
+ import { AxelarTokenIdentifier } from './types';
3
+ export declare function getAxelarTokenIdentifier(axelarConfig: AxelarConfig, chainId: string, tokenAddress: string): AxelarTokenIdentifier;
4
+ export declare function getAxelarTokenAddress(axelarConfig: AxelarConfig, chainId: string, axelarSymbol: string): string;
5
+ //# sourceMappingURL=tokenIdentifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenIdentifier.d.ts","sourceRoot":"","sources":["../../../../src/configs/axelar/route/tokenIdentifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAE/C,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,qBAAqB,CA6BvB;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,MAAM,CAoBR"}
@@ -0,0 +1,32 @@
1
+ export function getAxelarTokenIdentifier(axelarConfig, chainId, tokenAddress) {
2
+ const { chains, assets } = axelarConfig;
3
+ const chain = Object.values(chains).find((chain) => chain.externalChainId === chainId);
4
+ if (!chain)
5
+ throw new Error('Unsupported chain');
6
+ const axlChainName = chain.id.toLowerCase();
7
+ const assetId = Object.entries(chain.assets).find(([_, _tokenAddress]) => _tokenAddress.toLowerCase() === tokenAddress.toLowerCase())?.[0];
8
+ if (!assetId)
9
+ throw new Error('Unsupported asset');
10
+ const assetObj = assets[assetId];
11
+ if (assetObj.type !== 'gateway')
12
+ throw new Error('Only gateway assets supported');
13
+ const axlTokenSymbol = assetObj.chains[axlChainName].symbol;
14
+ return {
15
+ axlChainName,
16
+ axlTokenSymbol,
17
+ };
18
+ }
19
+ export function getAxelarTokenAddress(axelarConfig, chainId, axelarSymbol) {
20
+ const { chains, assets } = axelarConfig;
21
+ const chain = Object.values(chains).find((chain) => chain.externalChainId === chainId);
22
+ if (!chain)
23
+ throw new Error('Unsupported chain');
24
+ const axlChainName = chain.id.toLowerCase();
25
+ const assetObj = assets[axelarSymbol];
26
+ if (!assetObj)
27
+ throw new Error('Unsupported asset');
28
+ if (assetObj.type !== 'gateway')
29
+ throw new Error('Only gateway assets supported');
30
+ const axlTokenSymbol = assetObj.chains[axlChainName].tokenAddress;
31
+ return axlTokenSymbol;
32
+ }
@@ -0,0 +1,5 @@
1
+ export interface AxelarTokenIdentifier {
2
+ axlChainName: string;
3
+ axlTokenSymbol: string;
4
+ }
5
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/configs/axelar/route/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;CACvB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ import { CrossChainConfig } from '@1delta/bridge-core';
2
+ /**
3
+ * curl -X 'GET' \
4
+ 'https://bs-router-v3.chainservice.io/routeAndSwap?fromChainId=56&toChainId=22776&amount=1&tokenInAddress=0x55d398326f99059fF775485246999027B3197955&tokenOutAddress=0x0000000000000000000000000000000000000000&type=exactIn&slippage=100&entrance=Butter%2B&from=0x2D4C407BBe49438ED859fe965b140dcF1aaB71a9&receiver=0x2D4C407BBe49438ED859fe965b140dcF1aaB71a9' \
5
+ -H 'accept: application/json'
6
+ */
7
+ export declare const butterConfig: CrossChainConfig;
8
+ export default butterConfig;
9
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/configs/butter/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAGjB,MAAM,qBAAqB,CAAA;AAoE5B;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,gBAyJ1B,CAAA;AAED,eAAe,YAAY,CAAA"}
@@ -0,0 +1,207 @@
1
+ import { CrossChainBusinessException, } from '@1delta/bridge-core';
2
+ import axios from 'axios';
3
+ import { ceil, flatten } from 'lodash';
4
+ import { parseUnits } from 'viem';
5
+ import { Bridge } from '../../types';
6
+ import { bridgeIcon } from '../utils';
7
+ const serverHost = 'https://bs-router-v3.chainservice.io';
8
+ const tokenServerHost = 'https://bs-tokens-api.chainservice.io';
9
+ const bridgeServerHost = 'https://bs-app-api.chainservice.io';
10
+ const NAME = Bridge.BUTTER;
11
+ const dodoNativeAddress = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE';
12
+ const butterNativeAddress = '0x0000000000000000000000000000000000000000';
13
+ const MIN_SLIPPAGE = 1.5;
14
+ const errorCodes = {
15
+ ERROR: { code: 'ERROR', message: 'unknown error' },
16
+ NOT_SUPPORT: { code: 'NOT_SUPPORT', message: 'NOT SUPPORT' },
17
+ NOT_ROUTE: { code: 'NOT_ROUTE', message: 'NOT ROUTE' },
18
+ };
19
+ async function getTokenList(network, page, size) {
20
+ const res = await axios.get(`${tokenServerHost}/api/queryTokenList`, {
21
+ params: { network, page, size },
22
+ headers: { 'Content-Type': 'application/json' },
23
+ });
24
+ if (res.status !== 200 || res.data.code !== 200) {
25
+ throw new CrossChainBusinessException(errorCodes.ERROR);
26
+ }
27
+ return res.data.data;
28
+ }
29
+ async function getTokenListAll(network) {
30
+ const size = 1000;
31
+ const tokens = [];
32
+ const tokenlistResult = await getTokenList(network, 1, size);
33
+ const tasks = [];
34
+ const count = ceil(tokenlistResult.count / size);
35
+ for (let i = 2; i <= count; i++) {
36
+ tasks.push(getTokenList(network, i, size));
37
+ }
38
+ const tokenlistResults = await Promise.all(tasks);
39
+ for (const tokenlists of [tokenlistResult, ...tokenlistResults]) {
40
+ for (const item of tokenlists.results) {
41
+ tokens.push({
42
+ chainId: item.chainId,
43
+ address: item.address.toLowerCase() ===
44
+ '0x0000000000000000000000000000000000000000'
45
+ ? dodoNativeAddress
46
+ : item.address,
47
+ name: item.name,
48
+ symbol: item.symbol,
49
+ decimals: item.decimals,
50
+ logoImg: item.image,
51
+ });
52
+ }
53
+ }
54
+ return tokens;
55
+ }
56
+ /**
57
+ * curl -X 'GET' \
58
+ 'https://bs-router-v3.chainservice.io/routeAndSwap?fromChainId=56&toChainId=22776&amount=1&tokenInAddress=0x55d398326f99059fF775485246999027B3197955&tokenOutAddress=0x0000000000000000000000000000000000000000&type=exactIn&slippage=100&entrance=Butter%2B&from=0x2D4C407BBe49438ED859fe965b140dcF1aaB71a9&receiver=0x2D4C407BBe49438ED859fe965b140dcF1aaB71a9' \
59
+ -H 'accept: application/json'
60
+ */
61
+ export const butterConfig = {
62
+ name: NAME,
63
+ icon: {
64
+ light: bridgeIcon(NAME),
65
+ dark: bridgeIcon(NAME),
66
+ },
67
+ apiInterface: {
68
+ route: {
69
+ url: `${serverHost}/route`,
70
+ method: 'get',
71
+ requestAfter: (res) => {
72
+ if (res.errno !== 0)
73
+ throw new CrossChainBusinessException(errorCodes.ERROR);
74
+ if (res.data.length < 1)
75
+ throw new CrossChainBusinessException(errorCodes.NOT_ROUTE);
76
+ return res.data[0];
77
+ },
78
+ requestMapping: {
79
+ fromChainId: 'fromChainId',
80
+ tokenInAddress: {
81
+ format: (route) => {
82
+ return route.fromTokenAddress === dodoNativeAddress
83
+ ? butterNativeAddress
84
+ : route.fromTokenAddress;
85
+ },
86
+ },
87
+ amount: {
88
+ format: (params) => (BigInt(params.fromAmount) /
89
+ 10n ** BigInt(params.fromTokenDecimals)).toString(),
90
+ },
91
+ toChainId: 'toChainId',
92
+ tokenOutAddress: {
93
+ format: (route) => {
94
+ return route.toTokenAddress === dodoNativeAddress
95
+ ? butterNativeAddress
96
+ : route.toTokenAddress;
97
+ },
98
+ },
99
+ type: 'exactIn', //exactIn, exactOut
100
+ slippage: {
101
+ format: (params) => params.slippage < MIN_SLIPPAGE
102
+ ? MIN_SLIPPAGE * 1000
103
+ : params.slippage * 1000,
104
+ },
105
+ entrance: 'Butter+', //eg: Butter+
106
+ },
107
+ responseMapping: {
108
+ name: NAME,
109
+ // Call the swap API to exchange and cross assets and retrieve the deposit contract information
110
+ depositContract: 'contract',
111
+ toAmount: {
112
+ format: (route, { crossChainParamsData }) => parseUnits(route.dstChain.totalAmountOut, crossChainParamsData.toTokenDecimals),
113
+ },
114
+ // fees are already included in the quote
115
+ fee: {},
116
+ estimatedDuration: 'timeEstimated',
117
+ interfaceParamData: {
118
+ hash: 'hash',
119
+ },
120
+ },
121
+ },
122
+ buildTransactionData: {
123
+ requestMapping: {
124
+ hash: {
125
+ format: (_, { interfaceParamData }) => interfaceParamData.hash,
126
+ }, // interfaceParamData.hash
127
+ slippage: { format: (params) => params.slippage * 10000 },
128
+ from: 'fromAddress', // 源链上的发送者地址
129
+ receiver: 'toAddress', // 目标链上的接收者地址
130
+ },
131
+ url: `${serverHost}/swap`,
132
+ method: 'get',
133
+ requestAfter: (res) => {
134
+ if (res.errno !== 0 || res.data.length < 1)
135
+ throw new CrossChainBusinessException(errorCodes.ERROR);
136
+ return res.data[0];
137
+ },
138
+ responseMapping: {
139
+ data: 'data',
140
+ value: 'value',
141
+ to: 'to',
142
+ },
143
+ },
144
+ status: {
145
+ url: `${bridgeServerHost}/api/queryBridgeInfoBySourceHash`,
146
+ method: 'get',
147
+ requestMapping: {
148
+ hash: 'fromHash',
149
+ },
150
+ responseMapping: {
151
+ toHash: 'info.toHash',
152
+ statusInfo: {
153
+ format: (resResult) => {
154
+ const data = {
155
+ status: 'PENDING',
156
+ bridgeResponseResult: resResult,
157
+ };
158
+ if (resResult.info.state === 1) {
159
+ data.status = 'DONE';
160
+ }
161
+ else if (resResult.info.state === 0) {
162
+ data.status = 'PENDING';
163
+ }
164
+ return data;
165
+ },
166
+ },
167
+ }, // 0: crossing, 1: completed
168
+ requestAfter: (res) => {
169
+ // sometimes butter returns empty info and just a message, if it is success, return pending
170
+ if (!res?.data?.info && res?.message === 'success')
171
+ return { info: { state: 0 } };
172
+ return res.data;
173
+ },
174
+ },
175
+ tokenList: {
176
+ url: `${tokenServerHost}/api/queryChainList`,
177
+ method: 'get',
178
+ requestMapping: {},
179
+ requestAfter: async (res) => {
180
+ if (res.code !== 200)
181
+ throw new CrossChainBusinessException(errorCodes.ERROR);
182
+ const tasks = [];
183
+ for (const item of res.data.chains) {
184
+ tasks.push(getTokenListAll(item.key));
185
+ }
186
+ const tokenAlls = await Promise.all(tasks);
187
+ return flatten(tokenAlls);
188
+ },
189
+ responseMapping: {
190
+ tokens: {
191
+ format: (res) => {
192
+ return res.map((item) => ({
193
+ chainId: item.chainId,
194
+ address: item.address,
195
+ decimals: item.decimals,
196
+ logoImg: item.logoImg,
197
+ name: item.name,
198
+ symbol: item.symbol,
199
+ }));
200
+ },
201
+ },
202
+ },
203
+ },
204
+ },
205
+ errorCodes,
206
+ };
207
+ export default butterConfig;
@@ -0,0 +1,4 @@
1
+ import { CrossChainConfig } from '@1delta/bridge-core';
2
+ export declare const cowswapConfig: CrossChainConfig;
3
+ export default cowswapConfig;
4
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/configs/cowswap/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAGjB,MAAM,qBAAqB,CAAA;AAc5B,eAAO,MAAM,aAAa,EAAE,gBA0I3B,CAAA;AAED,eAAe,aAAa,CAAA"}
@@ -0,0 +1,106 @@
1
+ import { CrossChainBusinessException, } from '@1delta/bridge-core';
2
+ import { NATIVE_PLACEHOLDER } from '@1delta/lib-utils';
3
+ import { OrderStatus } from '@cowprotocol/cow-sdk';
4
+ import { Bridge } from '../../types';
5
+ import { bridgeIcon } from '../utils';
6
+ import { ERROR_CODES } from './errors';
7
+ import { getCowSwapReadonlyQuote } from './swap/quote';
8
+ import { getCowSwapQuote } from './swap/route';
9
+ import { getOrderStatus } from './track';
10
+ import { getCowSwapSlippageForNative } from './utils/getCowSwapSlippage';
11
+ const NAME = Bridge.Cowswap;
12
+ export const cowswapConfig = {
13
+ name: NAME,
14
+ icon: {
15
+ light: bridgeIcon(NAME),
16
+ dark: bridgeIcon(NAME),
17
+ },
18
+ apiInterface: {
19
+ quote: {
20
+ execute: async (crossChainParamsData) => {
21
+ const { fromTokenAddress, fromChainId, toTokenAddress, toChainId, fromAmount, } = crossChainParamsData;
22
+ if (fromChainId === toChainId) {
23
+ const quoteAndContractAddress = await getCowSwapReadonlyQuote(fromChainId, fromTokenAddress, toTokenAddress, fromAmount);
24
+ if (!quoteAndContractAddress)
25
+ throw new CrossChainBusinessException(ERROR_CODES.NOT_SUPPORT);
26
+ const { quote, contractAddress } = quoteAndContractAddress;
27
+ return { ...quote, contractAddress, estimatedDuration: 0 };
28
+ }
29
+ else {
30
+ throw new CrossChainBusinessException(ERROR_CODES.NOT_SUPPORT);
31
+ }
32
+ },
33
+ responseMapping: {
34
+ name: 'aggregator',
35
+ toAmount: 'quote.buyAmount',
36
+ fee: {},
37
+ estimatedDuration: 'estimatedDuration',
38
+ },
39
+ },
40
+ route: {
41
+ execute: async (crossChainParamsData) => {
42
+ const { fromTokenAddress, fromChainId, fromTokenDecimals, toTokenAddress, toChainId, toTokenDecimals, fromAmount, fromAddress, toAddress, slippage, } = crossChainParamsData;
43
+ if (fromChainId === toChainId) {
44
+ const quoteAndContractAddress = await getCowSwapQuote(fromChainId, fromTokenAddress, fromTokenDecimals, toTokenAddress, toTokenDecimals, fromAmount, fromAddress, toAddress, slippage);
45
+ if (!quoteAndContractAddress)
46
+ throw new CrossChainBusinessException(ERROR_CODES.NOT_SUPPORT);
47
+ // Check for min slippage if native input
48
+ if (fromTokenAddress === NATIVE_PLACEHOLDER) {
49
+ const minSlippageForNative = getCowSwapSlippageForNative(fromChainId);
50
+ if (minSlippageForNative > slippage)
51
+ throw new CrossChainBusinessException(ERROR_CODES.SLIPPAGE_TOO_LOW);
52
+ }
53
+ const { quote, contractAddress } = quoteAndContractAddress;
54
+ return { ...quote, contractAddress, estimatedDuration: 0 };
55
+ }
56
+ else {
57
+ throw new CrossChainBusinessException(ERROR_CODES.NOT_SUPPORT);
58
+ }
59
+ },
60
+ responseMapping: {
61
+ name: 'aggregator',
62
+ depositContract: 'contractAddress',
63
+ toAmount: 'quoteResults.amountsAndCosts.beforeNetworkCosts.buyAmount',
64
+ fee: {},
65
+ estimatedDuration: 'estimatedDuration',
66
+ orderData: {
67
+ broadcastIntent: {
68
+ format: (result) => result?.postSwapOrderFromQuote,
69
+ },
70
+ },
71
+ },
72
+ },
73
+ status: {
74
+ execute: async (crossChainParamsData) => {
75
+ const { fromChainId, orderId } = crossChainParamsData;
76
+ const status = await getOrderStatus(fromChainId, orderId);
77
+ return { ...status };
78
+ },
79
+ responseMapping: {
80
+ fromHash: 'hash',
81
+ statusInfo: {
82
+ format: (resResult) => {
83
+ const status = resResult.status;
84
+ const data = {
85
+ status: 'PENDING',
86
+ message: 'Pending',
87
+ bridgeResponseResult: resResult,
88
+ };
89
+ if (status === OrderStatus.FULFILLED) {
90
+ data.status = 'DONE';
91
+ data.message = 'Executed successfully';
92
+ }
93
+ else if (status === OrderStatus.EXPIRED ||
94
+ status === OrderStatus.CANCELLED) {
95
+ data.status = 'FAILED';
96
+ data.message = 'Transaction failed';
97
+ }
98
+ return data;
99
+ },
100
+ },
101
+ },
102
+ },
103
+ },
104
+ errorCodes: ERROR_CODES,
105
+ };
106
+ export default cowswapConfig;
@@ -0,0 +1,19 @@
1
+ export declare const ERROR_CODES: {
2
+ ERROR: {
3
+ code: string;
4
+ message: string;
5
+ };
6
+ NOT_SUPPORT: {
7
+ code: string;
8
+ message: string;
9
+ };
10
+ DEPOSIT_NOT_FOUND: {
11
+ code: string;
12
+ message: string;
13
+ };
14
+ SLIPPAGE_TOO_LOW: {
15
+ code: string;
16
+ message: string;
17
+ };
18
+ };
19
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/configs/cowswap/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;CAWvB,CAAA"}
@@ -0,0 +1,12 @@
1
+ export const ERROR_CODES = {
2
+ ERROR: { code: 'ERROR', message: 'unknown error' },
3
+ NOT_SUPPORT: { code: 'NOT_SUPPORT', message: 'NOT SUPPORT' },
4
+ DEPOSIT_NOT_FOUND: {
5
+ code: 'DEPOSIT_NOT_FOUND',
6
+ message: 'deposit not found',
7
+ },
8
+ SLIPPAGE_TOO_LOW: {
9
+ code: 'SLIPPAGE_TOO_LOW',
10
+ message: 'slippage too low',
11
+ },
12
+ };
@@ -0,0 +1,5 @@
1
+ export declare function getCowSwapReadonlyQuote(fromChainId: string, fromTokenAddress: string, toTokenAddress: string, amountIn: string): Promise<{
2
+ quote: import("@cowprotocol/cow-sdk").OrderQuoteResponse;
3
+ contractAddress: undefined;
4
+ } | undefined>;
5
+ //# sourceMappingURL=quote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote.d.ts","sourceRoot":"","sources":["../../../../src/configs/cowswap/swap/quote.ts"],"names":[],"mappings":"AAMA,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM;;;eAkCjB"}