@shapeshiftoss/swapper 20.4.0 → 20.6.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 (185) hide show
  1. package/dist/cjs/.tsbuildinfo +1 -1
  2. package/dist/cjs/constants.js +6 -0
  3. package/dist/cjs/index.d.ts +1 -0
  4. package/dist/cjs/index.js +1 -0
  5. package/dist/cjs/swappers/AcrossSwapper/utils/getAcrossStepData.js +7 -15
  6. package/dist/cjs/swappers/AvnuSwapper/endpoints.js +17 -12
  7. package/dist/cjs/swappers/BebopSwapper/utils/getBebopStepData.js +17 -22
  8. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.test.js +1 -0
  9. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeRate.test.js +1 -0
  10. package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.js +3 -4
  11. package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.test.js +2 -2
  12. package/dist/cjs/swappers/CetusSwapper/endpoints.js +2 -3
  13. package/dist/cjs/swappers/CetusSwapper/swapperApi/getCetusStepData.js +13 -8
  14. package/dist/cjs/swappers/CetusSwapper/swapperApi/getCetusTradeContext.js +1 -2
  15. package/dist/cjs/swappers/CetusSwapper/utils/constants.d.ts +0 -1
  16. package/dist/cjs/swappers/CetusSwapper/utils/constants.js +1 -2
  17. package/dist/cjs/swappers/CetusSwapper/utils/helpers.d.ts +3 -3
  18. package/dist/cjs/swappers/CetusSwapper/utils/helpers.js +6 -17
  19. package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeStepData.d.ts +0 -1
  20. package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeStepData.js +9 -16
  21. package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeTradeContext.js +0 -3
  22. package/dist/cjs/swappers/FyndSwapper/utils/getFyndStepData.js +5 -7
  23. package/dist/cjs/swappers/KyberSwapper/KyberSwapper.d.ts +2 -0
  24. package/dist/cjs/swappers/KyberSwapper/KyberSwapper.js +5 -0
  25. package/dist/cjs/swappers/KyberSwapper/endpoints.d.ts +2 -0
  26. package/dist/cjs/swappers/KyberSwapper/endpoints.js +14 -0
  27. package/dist/cjs/swappers/KyberSwapper/index.d.ts +2 -0
  28. package/dist/cjs/swappers/KyberSwapper/index.js +7 -0
  29. package/dist/cjs/swappers/KyberSwapper/swapperApi/getKyberTradeQuote.d.ts +4 -0
  30. package/dist/cjs/swappers/KyberSwapper/swapperApi/getKyberTradeQuote.js +64 -0
  31. package/dist/cjs/swappers/KyberSwapper/swapperApi/getKyberTradeRate.d.ts +4 -0
  32. package/dist/cjs/swappers/KyberSwapper/swapperApi/getKyberTradeRate.js +31 -0
  33. package/dist/cjs/swappers/KyberSwapper/types.d.ts +62 -0
  34. package/dist/cjs/swappers/KyberSwapper/types.js +2 -0
  35. package/dist/cjs/swappers/KyberSwapper/utils/constants.d.ts +22 -0
  36. package/dist/cjs/swappers/KyberSwapper/utils/constants.js +25 -0
  37. package/dist/cjs/swappers/KyberSwapper/utils/fetchFromKyber.d.ts +23 -0
  38. package/dist/cjs/swappers/KyberSwapper/utils/fetchFromKyber.js +38 -0
  39. package/dist/cjs/swappers/KyberSwapper/utils/getKyberStepData.d.ts +27 -0
  40. package/dist/cjs/swappers/KyberSwapper/utils/getKyberStepData.js +47 -0
  41. package/dist/cjs/swappers/KyberSwapper/utils/getKyberStepData.test.d.ts +1 -0
  42. package/dist/cjs/swappers/KyberSwapper/utils/getKyberStepData.test.js +92 -0
  43. package/dist/cjs/swappers/KyberSwapper/utils/getKyberTradeContext.d.ts +20 -0
  44. package/dist/cjs/swappers/KyberSwapper/utils/getKyberTradeContext.js +63 -0
  45. package/dist/cjs/swappers/KyberSwapper/utils/helpers.d.ts +27 -0
  46. package/dist/cjs/swappers/KyberSwapper/utils/helpers.js +172 -0
  47. package/dist/cjs/swappers/KyberSwapper/utils/helpers.test.d.ts +1 -0
  48. package/dist/cjs/swappers/KyberSwapper/utils/helpers.test.js +110 -0
  49. package/dist/cjs/swappers/KyberSwapper/utils/kyberService.d.ts +5 -0
  50. package/dist/cjs/swappers/KyberSwapper/utils/kyberService.js +9 -0
  51. package/dist/cjs/swappers/NearIntentsSwapper/NearIntentsSwapper.js +1 -0
  52. package/dist/cjs/swappers/NearIntentsSwapper/endpoints.js +13 -14
  53. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +1 -1
  54. package/dist/cjs/swappers/NearIntentsSwapper/types.d.ts +4 -4
  55. package/dist/cjs/swappers/NearIntentsSwapper/types.js +2 -0
  56. package/dist/cjs/swappers/NearIntentsSwapper/utils/getNearIntentsStepData.js +28 -0
  57. package/dist/cjs/swappers/NearIntentsSwapper/utils/helpers.js +2 -2
  58. package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsStepData.js +36 -55
  59. package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsStepData.test.js +2 -2
  60. package/dist/cjs/swappers/RelaySwapper/constant.js +1 -0
  61. package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.js +7 -15
  62. package/dist/cjs/swappers/RelaySwapper/utils/relayTokenToAssetId.js +5 -0
  63. package/dist/cjs/swappers/ThorchainSwapper/generated/generatedThorLongtailTokens.json +1 -0
  64. package/dist/cjs/swappers/ThorchainSwapper/getTradeQuote/getTradeQuote.test.js +2 -2
  65. package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +3 -1
  66. package/dist/cjs/swappers/ZrxSwapper/types.d.ts +1 -1
  67. package/dist/cjs/swappers/ZrxSwapper/types.js +1 -0
  68. package/dist/cjs/swappers/ZrxSwapper/utils/constants.js +1 -0
  69. package/dist/cjs/swappers/ZrxSwapper/utils/getZrxStepData.d.ts +3 -1
  70. package/dist/cjs/swappers/ZrxSwapper/utils/getZrxStepData.js +29 -10
  71. package/dist/cjs/swappers/ZrxSwapper/utils/helpers.d.ts +1 -1
  72. package/dist/cjs/swappers/ZrxSwapper/utils/helpers.js +5 -0
  73. package/dist/cjs/types.d.ts +36 -8
  74. package/dist/cjs/types.js +1 -0
  75. package/dist/cjs/utils/aptos/constants.d.ts +2 -0
  76. package/dist/cjs/utils/aptos/constants.js +7 -0
  77. package/dist/cjs/utils/aptos/getAptosTransactionFees.d.ts +2 -0
  78. package/dist/cjs/utils/aptos/getAptosTransactionFees.js +13 -0
  79. package/dist/cjs/utils/aptos/getUnsignedAptosTransaction.d.ts +2 -0
  80. package/dist/cjs/utils/aptos/getUnsignedAptosTransaction.js +16 -0
  81. package/dist/cjs/utils/aptos/index.d.ts +3 -0
  82. package/dist/cjs/utils/aptos/index.js +19 -0
  83. package/dist/cjs/utils/evm/getEvmNetworkFeeCryptoBaseUnit.d.ts +19 -6
  84. package/dist/cjs/utils/evm/getEvmNetworkFeeCryptoBaseUnit.js +45 -35
  85. package/dist/cjs/utils/evm/getEvmNetworkFeeCryptoBaseUnit.test.d.ts +1 -0
  86. package/dist/cjs/utils/evm/getEvmNetworkFeeCryptoBaseUnit.test.js +103 -0
  87. package/dist/cjs/utils/evm/stateOverride.d.ts +3 -0
  88. package/dist/cjs/utils/evm/stateOverride.js +10 -4
  89. package/dist/cjs/utils/helpers.js +2 -0
  90. package/dist/cjs/utils/helpers.test.js +2 -0
  91. package/dist/cjs/utils/index.d.ts +3 -2
  92. package/dist/cjs/utils/index.js +11 -27
  93. package/dist/esm/.tsbuildinfo +1 -1
  94. package/dist/esm/constants.js +6 -0
  95. package/dist/esm/index.d.ts +1 -0
  96. package/dist/esm/index.js +1 -0
  97. package/dist/esm/swappers/AcrossSwapper/utils/getAcrossStepData.js +8 -16
  98. package/dist/esm/swappers/AvnuSwapper/endpoints.js +18 -13
  99. package/dist/esm/swappers/BebopSwapper/utils/getBebopStepData.js +18 -23
  100. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.test.js +1 -0
  101. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeRate.test.js +1 -0
  102. package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.js +4 -5
  103. package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.test.js +2 -2
  104. package/dist/esm/swappers/CetusSwapper/endpoints.js +3 -4
  105. package/dist/esm/swappers/CetusSwapper/swapperApi/getCetusStepData.js +13 -8
  106. package/dist/esm/swappers/CetusSwapper/swapperApi/getCetusTradeContext.js +2 -3
  107. package/dist/esm/swappers/CetusSwapper/utils/constants.d.ts +0 -1
  108. package/dist/esm/swappers/CetusSwapper/utils/constants.js +0 -1
  109. package/dist/esm/swappers/CetusSwapper/utils/helpers.d.ts +3 -3
  110. package/dist/esm/swappers/CetusSwapper/utils/helpers.js +4 -15
  111. package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeStepData.d.ts +0 -1
  112. package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeStepData.js +9 -16
  113. package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeTradeContext.js +0 -3
  114. package/dist/esm/swappers/FyndSwapper/utils/getFyndStepData.js +6 -8
  115. package/dist/esm/swappers/KyberSwapper/KyberSwapper.d.ts +2 -0
  116. package/dist/esm/swappers/KyberSwapper/KyberSwapper.js +2 -0
  117. package/dist/esm/swappers/KyberSwapper/endpoints.d.ts +2 -0
  118. package/dist/esm/swappers/KyberSwapper/endpoints.js +11 -0
  119. package/dist/esm/swappers/KyberSwapper/index.d.ts +2 -0
  120. package/dist/esm/swappers/KyberSwapper/index.js +2 -0
  121. package/dist/esm/swappers/KyberSwapper/swapperApi/getKyberTradeQuote.d.ts +4 -0
  122. package/dist/esm/swappers/KyberSwapper/swapperApi/getKyberTradeQuote.js +60 -0
  123. package/dist/esm/swappers/KyberSwapper/swapperApi/getKyberTradeRate.d.ts +4 -0
  124. package/dist/esm/swappers/KyberSwapper/swapperApi/getKyberTradeRate.js +27 -0
  125. package/dist/esm/swappers/KyberSwapper/types.d.ts +62 -0
  126. package/dist/esm/swappers/KyberSwapper/types.js +1 -0
  127. package/dist/esm/swappers/KyberSwapper/utils/constants.d.ts +22 -0
  128. package/dist/esm/swappers/KyberSwapper/utils/constants.js +22 -0
  129. package/dist/esm/swappers/KyberSwapper/utils/fetchFromKyber.d.ts +23 -0
  130. package/dist/esm/swappers/KyberSwapper/utils/fetchFromKyber.js +33 -0
  131. package/dist/esm/swappers/KyberSwapper/utils/getKyberStepData.d.ts +27 -0
  132. package/dist/esm/swappers/KyberSwapper/utils/getKyberStepData.js +43 -0
  133. package/dist/esm/swappers/KyberSwapper/utils/getKyberStepData.test.d.ts +1 -0
  134. package/dist/esm/swappers/KyberSwapper/utils/getKyberStepData.test.js +90 -0
  135. package/dist/esm/swappers/KyberSwapper/utils/getKyberTradeContext.d.ts +20 -0
  136. package/dist/esm/swappers/KyberSwapper/utils/getKyberTradeContext.js +59 -0
  137. package/dist/esm/swappers/KyberSwapper/utils/helpers.d.ts +27 -0
  138. package/dist/esm/swappers/KyberSwapper/utils/helpers.js +158 -0
  139. package/dist/esm/swappers/KyberSwapper/utils/helpers.test.d.ts +1 -0
  140. package/dist/esm/swappers/KyberSwapper/utils/helpers.test.js +108 -0
  141. package/dist/esm/swappers/KyberSwapper/utils/kyberService.d.ts +5 -0
  142. package/dist/esm/swappers/KyberSwapper/utils/kyberService.js +3 -0
  143. package/dist/esm/swappers/NearIntentsSwapper/NearIntentsSwapper.js +2 -1
  144. package/dist/esm/swappers/NearIntentsSwapper/endpoints.js +13 -14
  145. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +1 -1
  146. package/dist/esm/swappers/NearIntentsSwapper/types.d.ts +4 -4
  147. package/dist/esm/swappers/NearIntentsSwapper/types.js +2 -0
  148. package/dist/esm/swappers/NearIntentsSwapper/utils/getNearIntentsStepData.js +29 -1
  149. package/dist/esm/swappers/NearIntentsSwapper/utils/helpers.js +2 -2
  150. package/dist/esm/swappers/PortalsSwapper/utils/getPortalsStepData.js +34 -53
  151. package/dist/esm/swappers/PortalsSwapper/utils/getPortalsStepData.test.js +2 -2
  152. package/dist/esm/swappers/RelaySwapper/constant.js +2 -1
  153. package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.js +9 -17
  154. package/dist/esm/swappers/RelaySwapper/utils/relayTokenToAssetId.js +5 -0
  155. package/dist/esm/swappers/ThorchainSwapper/generated/generatedThorLongtailTokens.json +1 -0
  156. package/dist/esm/swappers/ThorchainSwapper/getTradeQuote/getTradeQuote.test.js +2 -2
  157. package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +3 -1
  158. package/dist/esm/swappers/ZrxSwapper/types.d.ts +1 -1
  159. package/dist/esm/swappers/ZrxSwapper/types.js +1 -0
  160. package/dist/esm/swappers/ZrxSwapper/utils/constants.js +1 -0
  161. package/dist/esm/swappers/ZrxSwapper/utils/getZrxStepData.d.ts +3 -1
  162. package/dist/esm/swappers/ZrxSwapper/utils/getZrxStepData.js +31 -12
  163. package/dist/esm/swappers/ZrxSwapper/utils/helpers.d.ts +1 -1
  164. package/dist/esm/swappers/ZrxSwapper/utils/helpers.js +5 -0
  165. package/dist/esm/types.d.ts +36 -8
  166. package/dist/esm/types.js +1 -0
  167. package/dist/esm/utils/aptos/constants.d.ts +2 -0
  168. package/dist/esm/utils/aptos/constants.js +4 -0
  169. package/dist/esm/utils/aptos/getAptosTransactionFees.d.ts +2 -0
  170. package/dist/esm/utils/aptos/getAptosTransactionFees.js +9 -0
  171. package/dist/esm/utils/aptos/getUnsignedAptosTransaction.d.ts +2 -0
  172. package/dist/esm/utils/aptos/getUnsignedAptosTransaction.js +12 -0
  173. package/dist/esm/utils/aptos/index.d.ts +3 -0
  174. package/dist/esm/utils/aptos/index.js +3 -0
  175. package/dist/esm/utils/evm/getEvmNetworkFeeCryptoBaseUnit.d.ts +19 -6
  176. package/dist/esm/utils/evm/getEvmNetworkFeeCryptoBaseUnit.js +42 -35
  177. package/dist/esm/utils/evm/getEvmNetworkFeeCryptoBaseUnit.test.d.ts +1 -0
  178. package/dist/esm/utils/evm/getEvmNetworkFeeCryptoBaseUnit.test.js +101 -0
  179. package/dist/esm/utils/evm/stateOverride.d.ts +3 -0
  180. package/dist/esm/utils/evm/stateOverride.js +8 -3
  181. package/dist/esm/utils/helpers.js +3 -1
  182. package/dist/esm/utils/helpers.test.js +2 -0
  183. package/dist/esm/utils/index.d.ts +3 -2
  184. package/dist/esm/utils/index.js +9 -26
  185. package/package.json +10 -11
@@ -0,0 +1,101 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { getEvmNetworkFeeCryptoBaseUnit, getEvmRateNetworkFeeCryptoBaseUnit, } from './getEvmNetworkFeeCryptoBaseUnit.js';
3
+ import { estimateGasWithStateOverride, EstimationTimeoutError, getMinimalStateOverride, } from './stateOverride.js';
4
+ vi.mock('./stateOverride', async (importActual) => ({
5
+ ...(await importActual()),
6
+ getMinimalStateOverride: vi.fn(),
7
+ estimateGasWithStateOverride: vi.fn(),
8
+ }));
9
+ const gasFees = { gasPrice: '10' };
10
+ const makeTransactionData = () => ({ type: 'evm', to: '0x1', data: '0x', value: '0' });
11
+ const makeArgs = (adapter) => ({
12
+ adapter: adapter,
13
+ supportsEIP1559: false,
14
+ transactionData: makeTransactionData(),
15
+ from: '0x0000000000000000000000000000000000000001',
16
+ stateOverride: { sellAsset: {}, sellAmountCryptoBaseUnit: '1' },
17
+ });
18
+ describe('getEvmNetworkFeeCryptoBaseUnit state override', () => {
19
+ beforeEach(() => {
20
+ vi.mocked(getMinimalStateOverride).mockReset();
21
+ vi.mocked(estimateGasWithStateOverride).mockReset();
22
+ });
23
+ it('buffers the override gas limit onto the tx and prices the buffered limit', async () => {
24
+ vi.mocked(getMinimalStateOverride).mockResolvedValue([]);
25
+ vi.mocked(estimateGasWithStateOverride).mockResolvedValue('200');
26
+ const args = makeArgs({ getGasFeeData: vi.fn().mockResolvedValue({ average: gasFees }) });
27
+ await expect(getEvmNetworkFeeCryptoBaseUnit(args)).resolves.toBe('2400');
28
+ expect(args.transactionData.gasLimit).toBe('240');
29
+ });
30
+ it('falls back to plain estimation when the override simulation times out', async () => {
31
+ vi.mocked(getMinimalStateOverride).mockResolvedValue([]);
32
+ vi.mocked(estimateGasWithStateOverride).mockRejectedValue(new EstimationTimeoutError());
33
+ const getFeeData = vi.fn().mockResolvedValue({
34
+ average: { chainSpecific: { gasLimit: '100', ...gasFees } },
35
+ });
36
+ const args = makeArgs({
37
+ getGasFeeData: vi.fn().mockResolvedValue({ average: gasFees }),
38
+ getFeeData,
39
+ });
40
+ await expect(getEvmNetworkFeeCryptoBaseUnit(args)).resolves.toBe('1200');
41
+ expect(args.transactionData.gasLimit).toBe('120');
42
+ });
43
+ it('estimates over a provider gas limit already set on the tx', async () => {
44
+ vi.mocked(getMinimalStateOverride).mockResolvedValue([]);
45
+ vi.mocked(estimateGasWithStateOverride).mockResolvedValue('200');
46
+ const args = makeArgs({ getGasFeeData: vi.fn().mockResolvedValue({ average: gasFees }) });
47
+ args.transactionData.gasLimit = '150';
48
+ await expect(getEvmNetworkFeeCryptoBaseUnit(args)).resolves.toBe('2400');
49
+ expect(args.transactionData.gasLimit).toBe('240');
50
+ });
51
+ it('signs the buffered provider limit when the needed override cannot be built', async () => {
52
+ vi.mocked(getMinimalStateOverride).mockRejectedValue(new Error('Unable to locate allowance slot'));
53
+ const args = {
54
+ ...makeArgs({ getGasFeeData: vi.fn().mockResolvedValue({ average: gasFees }) }),
55
+ providerGasLimit: '300',
56
+ };
57
+ await expect(getEvmNetworkFeeCryptoBaseUnit(args)).resolves.toBe('3600');
58
+ expect(args.transactionData.gasLimit).toBe('360');
59
+ expect(estimateGasWithStateOverride).not.toHaveBeenCalled();
60
+ });
61
+ it('fails rather than trusting the provider limit when the overridden simulation reverts', async () => {
62
+ vi.mocked(getMinimalStateOverride).mockResolvedValue([]);
63
+ vi.mocked(estimateGasWithStateOverride).mockRejectedValue(new Error('execution reverted'));
64
+ const getFeeData = vi.fn();
65
+ const args = {
66
+ ...makeArgs({ getGasFeeData: vi.fn().mockResolvedValue({ average: gasFees }), getFeeData }),
67
+ providerGasLimit: '300',
68
+ };
69
+ await expect(getEvmNetworkFeeCryptoBaseUnit(args)).rejects.toThrow('execution reverted');
70
+ expect(getFeeData).not.toHaveBeenCalled();
71
+ });
72
+ });
73
+ describe('getEvmRateNetworkFeeCryptoBaseUnit', () => {
74
+ beforeEach(() => {
75
+ vi.mocked(getMinimalStateOverride).mockReset();
76
+ vi.mocked(estimateGasWithStateOverride).mockReset();
77
+ });
78
+ it('prices the provider limit as given without simulating', async () => {
79
+ const { transactionData, from, stateOverride, ...feeArgs } = makeArgs({
80
+ getGasFeeData: vi.fn().mockResolvedValue({ average: gasFees }),
81
+ });
82
+ await expect(getEvmRateNetworkFeeCryptoBaseUnit({
83
+ ...feeArgs,
84
+ providerGasLimit: '300',
85
+ simulation: { transactionData, from, stateOverride },
86
+ })).resolves.toBe('3000');
87
+ expect(getMinimalStateOverride).not.toHaveBeenCalled();
88
+ });
89
+ it('simulates when the provider has no gas limit', async () => {
90
+ vi.mocked(getMinimalStateOverride).mockResolvedValue([]);
91
+ vi.mocked(estimateGasWithStateOverride).mockResolvedValue('200');
92
+ const { transactionData, from, stateOverride, ...feeArgs } = makeArgs({
93
+ getGasFeeData: vi.fn().mockResolvedValue({ average: gasFees }),
94
+ });
95
+ await expect(getEvmRateNetworkFeeCryptoBaseUnit({
96
+ ...feeArgs,
97
+ providerGasLimit: undefined,
98
+ simulation: { transactionData, from, stateOverride },
99
+ })).resolves.toBe('2400');
100
+ });
101
+ });
@@ -1,5 +1,8 @@
1
1
  import type { Asset } from '@shapeshiftoss/types';
2
2
  import type { StateOverride } from 'viem';
3
+ export declare class EstimationTimeoutError extends Error {
4
+ constructor();
5
+ }
3
6
  export declare const withTimeout: <T>(promise: Promise<T>) => Promise<T>;
4
7
  export type GetMinimalStateOverrideArgs = {
5
8
  sellAsset: Asset;
@@ -26,13 +26,18 @@ const discoveredSlots = new Map();
26
26
  const rawDiscoveredSlots = new Map();
27
27
  const failedSlotDiscoveries = new Map();
28
28
  const FAILED_DISCOVERY_TTL_MS = 60_000;
29
+ export class EstimationTimeoutError extends Error {
30
+ constructor() {
31
+ super('State override estimation timed out');
32
+ }
33
+ }
29
34
  export const withTimeout = async (promise) => {
30
35
  let timer;
31
36
  try {
32
37
  return await Promise.race([
33
38
  promise,
34
39
  new Promise((_, reject) => {
35
- timer = setTimeout(() => reject(new Error('State override estimation timed out')), ESTIMATION_TIMEOUT_MS);
40
+ timer = setTimeout(() => reject(new EstimationTimeoutError()), ESTIMATION_TIMEOUT_MS);
36
41
  }),
37
42
  ]);
38
43
  }
@@ -288,7 +293,7 @@ export const getMinimalStateOverride = async ({ sellAsset, sellAmountCryptoBaseU
288
293
  // only the missing state. Estimation runs on our own RPCs - the node applies the same engine over
289
294
  // the patched pre-state, so the only systematic delta is the unrealized allowance-decrement refund
290
295
  // (a few k gas high, conservative).
291
- export const estimateGasWithStateOverride = ({ to, data, stateOverride: prebuiltStateOverride, ...overrideArgs }) => withTimeout((async () => {
296
+ export const estimateGasWithStateOverride = async ({ to, data, stateOverride: prebuiltStateOverride, ...overrideArgs }) => {
292
297
  const client = assertGetViemClient(overrideArgs.sellAsset.chainId);
293
298
  const stateOverride = prebuiltStateOverride ?? (await getMinimalStateOverride(overrideArgs));
294
299
  const gasLimit = await client.estimateGas({
@@ -299,4 +304,4 @@ export const estimateGasWithStateOverride = ({ to, data, stateOverride: prebuilt
299
304
  ...(stateOverride ? { stateOverride } : {}),
300
305
  });
301
306
  return gasLimit.toString();
302
- })());
307
+ };
@@ -1,6 +1,6 @@
1
1
  import { CHAIN_NAMESPACE, fromAssetId } from '@shapeshiftoss/caip';
2
2
  import { KnownChainIds } from '@shapeshiftoss/types';
3
- import { chainIdToFeeAssetId, DAO_TREASURY_ARBITRUM, DAO_TREASURY_AVALANCHE, DAO_TREASURY_BASE, DAO_TREASURY_BITCOIN, DAO_TREASURY_BOB, DAO_TREASURY_BSC, DAO_TREASURY_ETHEREUM_MAINNET, DAO_TREASURY_GNOSIS, DAO_TREASURY_HYPEREVM, DAO_TREASURY_MEGAETH, DAO_TREASURY_MONAD, DAO_TREASURY_OPTIMISM, DAO_TREASURY_PLASMA, DAO_TREASURY_POLYGON, DAO_TREASURY_ROBINHOOD, DAO_TREASURY_SOLANA, DAO_TREASURY_STARKNET, DAO_TREASURY_TON, isTreasuryChainId, } from '@shapeshiftoss/utils';
3
+ import { chainIdToFeeAssetId, DAO_TREASURY_ARBITRUM, DAO_TREASURY_AVALANCHE, DAO_TREASURY_BASE, DAO_TREASURY_BITCOIN, DAO_TREASURY_BOB, DAO_TREASURY_BSC, DAO_TREASURY_ELYSIUM, DAO_TREASURY_ETHEREUM_MAINNET, DAO_TREASURY_GNOSIS, DAO_TREASURY_HYPEREVM, DAO_TREASURY_MEGAETH, DAO_TREASURY_MONAD, DAO_TREASURY_OPTIMISM, DAO_TREASURY_PLASMA, DAO_TREASURY_POLYGON, DAO_TREASURY_ROBINHOOD, DAO_TREASURY_SOLANA, DAO_TREASURY_STARKNET, DAO_TREASURY_TON, DAO_TREASURY_UNICHAIN, isTreasuryChainId, } from '@shapeshiftoss/utils';
4
4
  import { SwapperName } from '../types.js';
5
5
  export const getTradeAmount = (input) => 'buyAmountCryptoBaseUnit' in input
6
6
  ? { direction: 'exactOut', cryptoBaseUnit: input.buyAmountCryptoBaseUnit }
@@ -38,6 +38,8 @@ const DAO_TREASURY_BY_CHAIN_ID = {
38
38
  [KnownChainIds.RobinhoodMainnet]: DAO_TREASURY_ROBINHOOD,
39
39
  [KnownChainIds.PlasmaMainnet]: DAO_TREASURY_PLASMA,
40
40
  [KnownChainIds.MegaEthMainnet]: DAO_TREASURY_MEGAETH,
41
+ [KnownChainIds.UnichainMainnet]: DAO_TREASURY_UNICHAIN,
42
+ [KnownChainIds.ElysiumMainnet]: DAO_TREASURY_ELYSIUM,
41
43
  };
42
44
  export const getTreasuryAddressFromChainId = (chainId) => {
43
45
  const maybeTreasuryChainId = isTreasuryChainId(chainId) ? chainId : undefined;
@@ -23,6 +23,8 @@ describe('getTreasuryAddressFromChainId', () => {
23
23
  [KnownChainIds.RobinhoodMainnet]: '0xF5AA59151bE6515C4Ca68A0282CF68B3eA4846fC',
24
24
  [KnownChainIds.PlasmaMainnet]: '0xF5AA59151bE6515C4Ca68A0282CF68B3eA4846fC',
25
25
  [KnownChainIds.MegaEthMainnet]: '0xF5AA59151bE6515C4Ca68A0282CF68B3eA4846fC',
26
+ [KnownChainIds.UnichainMainnet]: '0xF5AA59151bE6515C4Ca68A0282CF68B3eA4846fC',
27
+ [KnownChainIds.ElysiumMainnet]: '0xF5AA59151bE6515C4Ca68A0282CF68B3eA4846fC',
26
28
  [KnownChainIds.BitcoinMainnet]: 'bc1q9xrjfet2a05r3jvsxx66rru7pysevk5dvqasdw9eeea3rfqlk33qr4hghh',
27
29
  [KnownChainIds.SolanaMainnet]: 'FxXyPB5RH4uHLPPJR5H89zGwZp19juBetmRwrxfsLj2j',
28
30
  [KnownChainIds.StarknetMainnet]: '0x07ac2252f2da7cbf085e7a5ddc1318243aa818607cdd430dd2e17dd5d487606a',
@@ -1,13 +1,13 @@
1
1
  import type { AssetId, ChainId } from '@shapeshiftoss/caip';
2
2
  import type { EvmChainAdapter, near, SignTx, solana, starknet, sui, ton } from '@shapeshiftoss/chain-adapters';
3
3
  import type { TronSignTx } from '@shapeshiftoss/chain-adapters/src/tron/types';
4
- import type { SolanaSignTx, StarknetSignTx, SuiSignTx } from '@shapeshiftoss/hdwallet-core';
4
+ import type { AptosSignTx, SolanaSignTx, StarknetSignTx, SuiSignTx } from '@shapeshiftoss/hdwallet-core';
5
5
  import type { Asset, EvmChainId } from '@shapeshiftoss/types';
6
6
  import { TxStatus } from '@shapeshiftoss/unchained-client';
7
7
  import type { Result } from '@sniptt/monads';
8
8
  import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';
9
9
  import type { TypedData } from 'eip-712';
10
- import type { CommonSwapMetadata, EvmTransactionExecutionProps, NearTransactionExecutionProps, SolanaTransactionExecutionProps, StarknetTransactionExecutionProps, SuiTransactionExecutionProps, SupportedTradeQuoteStepIndex, SwapErrorRight, SwapMetadata, SwapperMetadata, TonTransactionExecutionProps, TradeQuote, TradeQuoteStep, TradeRate, TradeRateStep, TradeStatus, TronTransactionExecutionProps } from '../types.js';
10
+ import type { AptosTransactionExecutionProps, CommonSwapMetadata, EvmTransactionExecutionProps, NearTransactionExecutionProps, SolanaTransactionExecutionProps, StarknetTransactionExecutionProps, SuiTransactionExecutionProps, SupportedTradeQuoteStepIndex, SwapErrorRight, SwapMetadata, SwapperMetadata, TonTransactionExecutionProps, TradeQuote, TradeQuoteStep, TradeRate, TradeRateStep, TradeStatus, TronTransactionExecutionProps } from '../types.js';
11
11
  import { TradeQuoteError } from '../types.js';
12
12
  export declare const getPermit2Eip712: (step: TradeQuoteStep | TradeRateStep | undefined) => TypedData | undefined;
13
13
  export declare const makeSwapErrorRight: ({ details, cause, code, message, }: {
@@ -43,6 +43,7 @@ export declare const executeSuiTransaction: (txToSign: SuiSignTx, callbacks: Sui
43
43
  export declare const executeNearTransaction: (txToSign: near.NearSignTx, callbacks: NearTransactionExecutionProps) => Promise<string>;
44
44
  export declare const executeStarknetTransaction: (txToSign: StarknetSignTx, callbacks: StarknetTransactionExecutionProps) => Promise<string>;
45
45
  export declare const executeTonTransaction: (txToSign: ton.TonSignTx, callbacks: TonTransactionExecutionProps) => Promise<string>;
46
+ export declare const executeAptosTransaction: (txToSign: AptosSignTx, callbacks: AptosTransactionExecutionProps) => Promise<string>;
46
47
  export declare const createDefaultStatusResponse: (buyTxHash?: string) => {
47
48
  status: TxStatus;
48
49
  buyTxHash: string | undefined;
@@ -129,6 +129,9 @@ export const executeStarknetTransaction = (txToSign, callbacks) => {
129
129
  export const executeTonTransaction = (txToSign, callbacks) => {
130
130
  return callbacks.signAndBroadcastTransaction(txToSign);
131
131
  };
132
+ export const executeAptosTransaction = (txToSign, callbacks) => {
133
+ return callbacks.signAndBroadcastTransaction(txToSign);
134
+ };
132
135
  export const createDefaultStatusResponse = (buyTxHash) => ({
133
136
  status: TxStatus.Unknown,
134
137
  buyTxHash,
@@ -246,34 +249,14 @@ export const checkSuiSwapStatus = async ({ txHash, address, assertGetSuiChainAda
246
249
  throw new Error('Missing address');
247
250
  const adapter = assertGetSuiChainAdapter(suiChainId);
248
251
  const client = adapter.getSuiClient();
249
- const txResponse = await client.getTransactionBlock({
252
+ const txResponse = await client.getTransaction({
250
253
  digest: txHash,
251
- options: {
252
- showEffects: true,
253
- showBalanceChanges: true,
254
- },
254
+ include: { balanceChanges: true },
255
255
  });
256
- const status = txResponse.effects?.status?.status === 'success' ? TxStatus.Confirmed : TxStatus.Failed;
257
- // Extract actual buy amount from balance changes
258
- let actualBuyAmountCryptoBaseUnit;
259
- if (txResponse.balanceChanges) {
260
- // Balance changes show the net effect on the user's balances
261
- // Positive amounts are received, negative are sent
262
- const receivedChanges = txResponse.balanceChanges.filter(change => {
263
- // The owner field is a discriminated union - check for AddressOwner variant
264
- // Handle both object and string cases
265
- const ownerAddress = change.owner && typeof change.owner === 'object' && 'AddressOwner' in change.owner
266
- ? change.owner.AddressOwner
267
- : change.owner && typeof change.owner === 'object' && 'ObjectOwner' in change.owner
268
- ? change.owner.ObjectOwner
269
- : null;
270
- return ownerAddress === address && Number(change.amount) > 0;
271
- });
272
- if (receivedChanges.length > 0) {
273
- // For swaps, we expect exactly one positive balance change (the buy asset)
274
- actualBuyAmountCryptoBaseUnit = receivedChanges[0].amount;
275
- }
276
- }
256
+ const status = txResponse.Transaction ? TxStatus.Confirmed : TxStatus.Failed;
257
+ // For swaps, we expect exactly one positive balance change for the receiver (the buy asset)
258
+ const actualBuyAmountCryptoBaseUnit = (txResponse.Transaction ?? txResponse.FailedTransaction).balanceChanges.find(change => change.address === address && BigInt(change.amount) > 0n)
259
+ ?.amount;
277
260
  return {
278
261
  status,
279
262
  buyTxHash: txHash,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapeshiftoss/swapper",
3
- "version": "20.4.0",
3
+ "version": "20.6.0",
4
4
  "repository": "https://github.com/shapeshift/web",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -23,14 +23,13 @@
23
23
  "dependencies": {
24
24
  "@arbitrum/sdk": "^4.0.1",
25
25
  "@avnu/avnu-sdk": "^4.0.1",
26
- "@cetusprotocol/aggregator-sdk": "^1.4.2",
27
- "@cetusprotocol/cetus-sui-clmm-sdk": "5.4.0",
26
+ "@cetusprotocol/aggregator-sdk": "1.7.5",
28
27
  "@coral-xyz/anchor": "0.29.0",
29
28
  "@cowprotocol/app-data": "^2.3.0",
30
29
  "@defuse-protocol/one-click-sdk-typescript": "^0.1.1-0.2",
31
30
  "@gobob/bob-sdk": "6.0.1",
32
- "@mysten/sui": "^1.45.2",
33
- "@shapeshiftoss/bitcoinjs-lib": "7.0.0-shapeshift.0",
31
+ "@mysten/sui": "2.31.2",
32
+ "@shapeshiftoss/bitcoinjs-lib": "7.0.0-shapeshift.3",
34
33
  "@sniptt/monads": "^0.5.10",
35
34
  "@solana/web3.js": "1.98.0",
36
35
  "@ston-fi/omniston-sdk": "^0.7.8",
@@ -50,13 +49,13 @@
50
49
  "retry-axios": "^2.6.0",
51
50
  "uuid": "^9.0.0",
52
51
  "viem": "2.55.11",
53
- "@shapeshiftoss/chain-adapters": "^11.7.0",
54
- "@shapeshiftoss/caip": "^8.17.2",
55
- "@shapeshiftoss/types": "^9.1.0",
56
- "@shapeshiftoss/contracts": "^1.1.0",
57
- "@shapeshiftoss/utils": "^1.4.0",
52
+ "@shapeshiftoss/caip": "^8.19.0",
58
53
  "@shapeshiftoss/hdwallet-core": "^1.62.41",
59
- "@shapeshiftoss/unchained-client": "^10.16.0"
54
+ "@shapeshiftoss/chain-adapters": "^11.9.0",
55
+ "@shapeshiftoss/types": "^9.3.0",
56
+ "@shapeshiftoss/unchained-client": "^10.17.0",
57
+ "@shapeshiftoss/utils": "^2.1.0",
58
+ "@shapeshiftoss/contracts": "^2.1.0"
60
59
  },
61
60
  "devDependencies": {
62
61
  "@types/lodash": "^4.14.178",