@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
@@ -37,7 +37,6 @@ async function getRelayStepData({ data, sellAsset, sellAmountCryptoBaseUnit, spe
37
37
  to,
38
38
  value,
39
39
  data: callData,
40
- gasLimit: (0, utils_1.bnOrZero)(relayGasLimit).gt(0) ? relayGasLimit : undefined,
41
40
  };
42
41
  const adapter = deps.assertGetEvmChainAdapter(sellAsset.chainId);
43
42
  const stateOverride = {
@@ -46,20 +45,12 @@ async function getRelayStepData({ data, sellAsset, sellAmountCryptoBaseUnit, spe
46
45
  spenderAddress,
47
46
  };
48
47
  if (type === 'rate') {
49
- const networkFeeCryptoBaseUnit = await (async () => {
50
- try {
51
- return await (0, evm_1.getEvmNetworkFeeCryptoBaseUnit)({
52
- adapter,
53
- transactionData,
54
- from,
55
- supportsEIP1559,
56
- stateOverride,
57
- });
58
- }
59
- catch {
60
- return fallbackNetworkFeeCryptoBaseUnit;
61
- }
62
- })();
48
+ const networkFeeCryptoBaseUnit = await (0, evm_1.getEvmRateNetworkFeeCryptoBaseUnit)({
49
+ adapter,
50
+ supportsEIP1559,
51
+ providerGasLimit: relayGasLimit,
52
+ simulation: { transactionData, from, stateOverride },
53
+ }).catch(() => fallbackNetworkFeeCryptoBaseUnit);
63
54
  const stepData = { networkFeeCryptoBaseUnit };
64
55
  return (0, monads_1.Ok)(stepData);
65
56
  }
@@ -71,6 +62,7 @@ async function getRelayStepData({ data, sellAsset, sellAmountCryptoBaseUnit, spe
71
62
  from,
72
63
  supportsEIP1559,
73
64
  stateOverride,
65
+ providerGasLimit: relayGasLimit,
74
66
  });
75
67
  const stepData = { transactionData, networkFeeCryptoBaseUnit };
76
68
  return (0, monads_1.Ok)(stepData);
@@ -237,6 +237,11 @@ const relayTokenToAssetId = (relayToken) => {
237
237
  assetReference: caip_1.ASSET_REFERENCE.Robinhood,
238
238
  assetNamespace: caip_1.ASSET_NAMESPACE.slip44,
239
239
  };
240
+ case caip_1.CHAIN_REFERENCE.ElysiumMainnet:
241
+ return {
242
+ assetReference: caip_1.ASSET_REFERENCE.Elysium,
243
+ assetNamespace: caip_1.ASSET_NAMESPACE.slip44,
244
+ };
240
245
  default:
241
246
  throw Error(`chainId '${relayToken.chainId}' not supported`);
242
247
  }
@@ -1018,6 +1018,7 @@
1018
1018
  "eip155:1/erc20:0xcbb8f1bda10b9696c57e13bc128fe674769dcec0",
1019
1019
  "eip155:1/erc20:0x72dfb2e44f59c5ad2bafe84314e5b99a7cd5075e",
1020
1020
  "eip155:1/erc20:0xce682c89c63d2850cb2ca898e44d6c7c30d897a6",
1021
+ "eip155:1/erc20:0x68749665ff8d2d112fa859aa293f07a622782f38",
1021
1022
  "eip155:43114/erc20:0xc891eb4cbdeff6e073e859e987815ed1505c2acd",
1022
1023
  "eip155:43114/erc20:0xd24c2ad096400b6fbcd2ad8b24e7acbc21a1da64",
1023
1024
  "eip155:43114/erc20:0x47c3118ad183712acd42648e9e522e13690f29a0",
@@ -81,7 +81,7 @@ const expectedQuoteResponse = [
81
81
  asset: assets_1.ETH,
82
82
  },
83
83
  },
84
- networkFeeCryptoBaseUnit: '400000',
84
+ networkFeeCryptoBaseUnit: '480000',
85
85
  },
86
86
  rate: '143505.61489594191334131621',
87
87
  source: types_1.SwapperName.Thorchain,
@@ -132,7 +132,7 @@ const expectedQuoteResponse = [
132
132
  asset: assets_1.ETH,
133
133
  },
134
134
  },
135
- networkFeeCryptoBaseUnit: '400000',
135
+ networkFeeCryptoBaseUnit: '480000',
136
136
  },
137
137
  rate: '157530.57158846677816130059',
138
138
  source: `${types_1.SwapperName.Thorchain} • Streaming`,
@@ -42,7 +42,7 @@ const getZrxTradeQuote = async (input, deps) => {
42
42
  });
43
43
  if (maybeZrxQuoteResponse.isErr())
44
44
  return (0, monads_1.Err)(maybeZrxQuoteResponse.unwrapErr());
45
- const { sellAmount, buyAmount, fees, permit2, transaction, route } = maybeZrxQuoteResponse.unwrap();
45
+ const { sellAmount, buyAmount, fees, permit2, transaction, totalNetworkFee, route } = maybeZrxQuoteResponse.unwrap();
46
46
  const permit2Eip712 = permit2?.eip712;
47
47
  const permit2Deadline = permit2Eip712 ? Number(permit2Eip712.message.deadline) : undefined;
48
48
  if (permit2Deadline !== undefined &&
@@ -93,6 +93,8 @@ const getZrxTradeQuote = async (input, deps) => {
93
93
  type: 'quote',
94
94
  input,
95
95
  transaction,
96
+ totalNetworkFee,
97
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
96
98
  permit2Eip712,
97
99
  from: receiveAddress,
98
100
  });
@@ -4,7 +4,7 @@ import type { Address } from 'viem';
4
4
  import type { GetEvmTradeQuoteInput, GetEvmTradeRateInput } from '../../types';
5
5
  export type ZrxTradeQuoteInput = GetEvmTradeQuoteInput;
6
6
  export type ZrxTradeRateInput = GetEvmTradeRateInput;
7
- export declare const zrxSupportedChainIds: readonly [KnownChainIds.EthereumMainnet, KnownChainIds.AvalancheMainnet, KnownChainIds.OptimismMainnet, KnownChainIds.BnbSmartChainMainnet, KnownChainIds.PolygonMainnet, KnownChainIds.ArbitrumMainnet, KnownChainIds.BaseMainnet, KnownChainIds.RobinhoodMainnet];
7
+ export declare const zrxSupportedChainIds: readonly [KnownChainIds.EthereumMainnet, KnownChainIds.AvalancheMainnet, KnownChainIds.OptimismMainnet, KnownChainIds.BnbSmartChainMainnet, KnownChainIds.PolygonMainnet, KnownChainIds.ArbitrumMainnet, KnownChainIds.BaseMainnet, KnownChainIds.RobinhoodMainnet, KnownChainIds.ElysiumMainnet];
8
8
  export type ZrxSupportedChainId = (typeof zrxSupportedChainIds)[number];
9
9
  type ZrxFee = {
10
10
  amount: string;
@@ -11,4 +11,5 @@ exports.zrxSupportedChainIds = [
11
11
  types_1.KnownChainIds.ArbitrumMainnet,
12
12
  types_1.KnownChainIds.BaseMainnet,
13
13
  types_1.KnownChainIds.RobinhoodMainnet,
14
+ types_1.KnownChainIds.ElysiumMainnet,
14
15
  ];
@@ -22,6 +22,7 @@ exports.ZRX_SUPPORTED_CHAINIDS = Object.freeze([
22
22
  types_1.KnownChainIds.ArbitrumMainnet,
23
23
  types_1.KnownChainIds.BaseMainnet,
24
24
  types_1.KnownChainIds.RobinhoodMainnet,
25
+ types_1.KnownChainIds.ElysiumMainnet,
25
26
  ]);
26
27
  // https://0x.org/docs/developer-resources/faqs-and-troubleshooting
27
28
  exports.ZRX_NATIVE_ASSET_ADDRESS = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE';
@@ -5,10 +5,12 @@ export type GetZrxStepDataArgs = StepDataArgs<unknown, {
5
5
  totalNetworkFee: string | null;
6
6
  }, {
7
7
  transaction: ZrxQuoteResponse['transaction'];
8
+ totalNetworkFee: string | null;
9
+ sellAmountCryptoBaseUnit: string;
8
10
  permit2Eip712: NonNullable<ZrxQuoteResponse['permit2']>['eip712'] | undefined;
9
11
  }>;
10
12
  type ZrxRateStepData = {
11
- networkFeeCryptoBaseUnit: string;
13
+ networkFeeCryptoBaseUnit: string | undefined;
12
14
  };
13
15
  type ZrxQuoteStepData = {
14
16
  transactionData: TxBuildData;
@@ -7,21 +7,22 @@ const monads_1 = require("@sniptt/monads");
7
7
  const utils_2 = require("../../../utils");
8
8
  const evm_1 = require("../../../utils/evm");
9
9
  async function getZrxStepData(args) {
10
+ // 0x's total includes the L1 data fee on OP-stack chains, which pricing their gas limit would drop
10
11
  if (args.type === 'rate') {
11
12
  const stepData = {
12
- networkFeeCryptoBaseUnit: (0, utils_1.bnOrZero)(args.totalNetworkFee).toFixed(),
13
+ networkFeeCryptoBaseUnit: args.totalNetworkFee ?? undefined,
13
14
  };
14
15
  return (0, monads_1.Ok)(stepData);
15
16
  }
16
- const { sellAsset, transaction, permit2Eip712, from, input, deps } = args;
17
+ const { sellAsset, sellAmountCryptoBaseUnit, transaction, totalNetworkFee, permit2Eip712, from, input, deps, } = args;
18
+ const adapter = deps.assertGetEvmChainAdapter(sellAsset.chainId);
19
+ const supportsEIP1559 = 'supportsEIP1559' in input ? input.supportsEIP1559 : false;
17
20
  const transactionData = {
18
21
  type: 'evm',
19
22
  chainId: Number((0, caip_1.fromChainId)(sellAsset.chainId).chainReference),
20
23
  to: transaction.to,
21
24
  data: transaction.data,
22
25
  value: transaction.value,
23
- // 0x simulate with a valid permit2 signature, which can't be reproduced before signing, so trust their gas limit
24
- gasLimit: transaction.gas || undefined,
25
26
  ...(permit2Eip712 && {
26
27
  signatureRequired: {
27
28
  type: 'permit2',
@@ -30,12 +31,30 @@ async function getZrxStepData(args) {
30
31
  }),
31
32
  };
32
33
  try {
33
- const networkFeeCryptoBaseUnit = await (0, evm_1.getEvmNetworkFeeCryptoBaseUnit)({
34
- adapter: deps.assertGetEvmChainAdapter(sellAsset.chainId),
35
- transactionData,
36
- from,
37
- supportsEIP1559: 'supportsEIP1559' in input ? input.supportsEIP1559 : false,
38
- });
34
+ const networkFeeCryptoBaseUnit = await (async () => {
35
+ // Permit2 calldata needs the signature, so it can't be simulated before signing
36
+ if (permit2Eip712) {
37
+ if (!(0, evm_1.isPositiveGasLimit)(transaction.gas))
38
+ throw new Error('missing 0x gas limit');
39
+ transactionData.gasLimit = (0, evm_1.bufferGasLimit)(transaction.gas);
40
+ // 0x's total is their gas cost plus the L1 data fee on OP-stack chains
41
+ const l1FeeCryptoBaseUnit = utils_1.BigNumber.max((0, utils_1.bnOrZero)(totalNetworkFee).minus((0, utils_1.bnOrZero)(transaction.gas).times(transaction.gasPrice)), 0);
42
+ const networkFeeCryptoBaseUnit = await (0, evm_1.getEvmNetworkFeeCryptoBaseUnit)({
43
+ adapter,
44
+ supportsEIP1559,
45
+ gasLimit: transactionData.gasLimit,
46
+ });
47
+ return (0, utils_1.bnOrZero)(networkFeeCryptoBaseUnit).plus(l1FeeCryptoBaseUnit).toFixed(0);
48
+ }
49
+ return (0, evm_1.getEvmNetworkFeeCryptoBaseUnit)({
50
+ adapter,
51
+ transactionData,
52
+ from,
53
+ supportsEIP1559,
54
+ stateOverride: { sellAsset, sellAmountCryptoBaseUnit },
55
+ providerGasLimit: transaction.gas,
56
+ });
57
+ })();
39
58
  const stepData = { transactionData, networkFeeCryptoBaseUnit };
40
59
  return (0, monads_1.Ok)(stepData);
41
60
  }
@@ -6,7 +6,7 @@ import type { SwapErrorRight } from '../../../types';
6
6
  import type { ZrxFees, ZrxPriceResponse } from '../types';
7
7
  export declare const assetIdToZrxToken: (assetId: AssetId) => string;
8
8
  export declare const zrxTokenToAssetId: (token: string, chainId: ChainId) => AssetId;
9
- export declare const isSupportedChainId: (chainId: ChainId) => chainId is KnownChainIds.EthereumMainnet | KnownChainIds.AvalancheMainnet | KnownChainIds.OptimismMainnet | KnownChainIds.BnbSmartChainMainnet | KnownChainIds.PolygonMainnet | KnownChainIds.ArbitrumMainnet | KnownChainIds.BaseMainnet | KnownChainIds.RobinhoodMainnet;
9
+ export declare const isSupportedChainId: (chainId: ChainId) => chainId is KnownChainIds.EthereumMainnet | KnownChainIds.AvalancheMainnet | KnownChainIds.OptimismMainnet | KnownChainIds.BnbSmartChainMainnet | KnownChainIds.PolygonMainnet | KnownChainIds.ArbitrumMainnet | KnownChainIds.BaseMainnet | KnownChainIds.RobinhoodMainnet | KnownChainIds.ElysiumMainnet;
10
10
  export declare const isWrappedNativeSell: (route: ZrxPriceResponse['route']) => boolean;
11
11
  export declare const assertValidTrade: ({ buyAsset, sellAsset, }: {
12
12
  buyAsset: Asset;
@@ -65,6 +65,11 @@ const zrxTokenToAssetId = (token, chainId) => {
65
65
  assetReference: caip_1.ASSET_REFERENCE.Robinhood,
66
66
  assetNamespace: caip_1.ASSET_NAMESPACE.slip44,
67
67
  };
68
+ case types_1.KnownChainIds.ElysiumMainnet:
69
+ return {
70
+ assetReference: caip_1.ASSET_REFERENCE.Elysium,
71
+ assetNamespace: caip_1.ASSET_NAMESPACE.slip44,
72
+ };
68
73
  default:
69
74
  throw Error(`chainId '${chainId}' not supported`);
70
75
  }
@@ -1,7 +1,7 @@
1
1
  import type { AccountId, AssetId, ChainId } from '@shapeshiftoss/caip';
2
- import type { ChainAdapter, CosmosSdkChainAdapter, EvmChainAdapter, near, SignTx, solana, starknet, sui, ton, tron, UtxoChainAdapter } from '@shapeshiftoss/chain-adapters';
3
- import type { HDWallet, SolanaSignTx, StarknetSignTx, SuiSignTx } from '@shapeshiftoss/hdwallet-core';
4
- import type { Asset, AssetsByIdPartial, CosmosSdkChainId, EvmChainId, KnownChainIds, NearChainId, OrderCreation, PartialRecord, SolanaChainId, StarknetChainId, SuiChainId, TonChainId, TronChainId, UtxoAccountType, UtxoChainId } from '@shapeshiftoss/types';
2
+ import type { aptos, ChainAdapter, CosmosSdkChainAdapter, EvmChainAdapter, near, SignTx, solana, starknet, sui, ton, tron, UtxoChainAdapter } from '@shapeshiftoss/chain-adapters';
3
+ import type { AptosSignTx, HDWallet, SolanaSignTx, StarknetSignTx, SuiSignTx } from '@shapeshiftoss/hdwallet-core';
4
+ import type { AptosChainId, Asset, AssetsByIdPartial, CosmosSdkChainId, EvmChainId, KnownChainIds, NearChainId, OrderCreation, PartialRecord, SolanaChainId, StarknetChainId, SuiChainId, TonChainId, TronChainId, UtxoAccountType, UtxoChainId } from '@shapeshiftoss/types';
5
5
  import type { TxStatus } from '@shapeshiftoss/unchained-client';
6
6
  import type { Result } from '@sniptt/monads';
7
7
  import type { TransactionInstruction } from '@solana/web3.js';
@@ -44,6 +44,7 @@ export type SwapperConfig = {
44
44
  VITE_PORTALS_BASE_URL: string;
45
45
  VITE_ZRX_BASE_URL: string;
46
46
  VITE_FYND_BASE_URL: string;
47
+ VITE_KYBER_BASE_URL: string;
47
48
  VITE_CHAINFLIP_API_KEY: string;
48
49
  VITE_CHAINFLIP_API_URL: string;
49
50
  VITE_FEATURE_CHAINFLIP_SWAP_DCA: boolean;
@@ -80,7 +81,8 @@ export declare enum SwapperName {
80
81
  Debridge = "deBridge",
81
82
  BobGateway = "BOB Gateway",
82
83
  Symbiosis = "Symbiosis",
83
- Fynd = "Fynd"
84
+ Fynd = "Fynd",
85
+ KyberSwap = "KyberSwap"
84
86
  }
85
87
  export type SwapSource = SwapperName | `${SwapperName} • ${string}`;
86
88
  export type SwapErrorRight = {
@@ -182,6 +184,12 @@ export type GetTonTradeQuoteInput = CommonTradeQuoteInput & {
182
184
  export type GetTonTradeRateInput = CommonTradeRateInput & {
183
185
  chainId: TonChainId;
184
186
  };
187
+ export type GetAptosTradeQuoteInput = CommonTradeQuoteInput & {
188
+ chainId: AptosChainId;
189
+ };
190
+ export type GetAptosTradeRateInput = CommonTradeRateInput & {
191
+ chainId: AptosChainId;
192
+ };
185
193
  export type GetSolanaTradeQuoteInput = CommonTradeQuoteInput & {
186
194
  chainId: SolanaChainId;
187
195
  };
@@ -213,8 +221,8 @@ export type GetUtxoTradeRateInput = CommonTradeRateInput & {
213
221
  xpub: string | undefined;
214
222
  };
215
223
  export type GetUtxoTradeQuoteInput = GetUtxoTradeQuoteWithWallet;
216
- export type GetTradeQuoteInput = GetUtxoTradeQuoteInput | GetEvmTradeQuoteInput | GetCosmosSdkTradeQuoteInput | GetTronTradeQuoteInput | GetNearTradeQuoteInput | GetTonTradeQuoteInput | GetSolanaTradeQuoteInput | GetStarknetTradeQuoteInput | GetSuiTradeQuoteInput;
217
- export type GetTradeRateInput = GetEvmTradeRateInput | GetCosmosSdkTradeRateInput | GetUtxoTradeRateInput | GetTronTradeRateInput | GetNearTradeRateInput | GetTonTradeRateInput | GetSolanaTradeRateInput | GetStarknetTradeRateInput | GetSuiTradeRateInput;
224
+ export type GetTradeQuoteInput = GetUtxoTradeQuoteInput | GetEvmTradeQuoteInput | GetCosmosSdkTradeQuoteInput | GetTronTradeQuoteInput | GetNearTradeQuoteInput | GetTonTradeQuoteInput | GetSolanaTradeQuoteInput | GetStarknetTradeQuoteInput | GetSuiTradeQuoteInput | GetAptosTradeQuoteInput;
225
+ export type GetTradeRateInput = GetEvmTradeRateInput | GetCosmosSdkTradeRateInput | GetUtxoTradeRateInput | GetTronTradeRateInput | GetNearTradeRateInput | GetTonTradeRateInput | GetSolanaTradeRateInput | GetStarknetTradeRateInput | GetSuiTradeRateInput | GetAptosTradeRateInput;
218
226
  export type WithExactBuyAmount<T extends {
219
227
  sellAmountIncludingProtocolFeesCryptoBaseUnit: string;
220
228
  }> = T extends unknown ? Omit<T, 'sellAmountIncludingProtocolFeesCryptoBaseUnit'> & {
@@ -269,12 +277,15 @@ export type StarknetSwapperDeps = {
269
277
  export type TonSwapperDeps = {
270
278
  assertGetTonChainAdapter: (chainId: ChainId) => ton.ChainAdapter;
271
279
  };
280
+ export type AptosSwapperDeps = {
281
+ assertGetAptosChainAdapter: (chainId: ChainId) => aptos.ChainAdapter;
282
+ };
272
283
  export type SwapperDeps = {
273
284
  assetsById: AssetsByIdPartial;
274
285
  config: SwapperConfig;
275
286
  mixPanel: Mixpanel | undefined;
276
287
  assertGetChainAdapter: (chainId: ChainId) => ChainAdapter<KnownChainIds>;
277
- } & EvmSwapperDeps & UtxoSwapperDeps & CosmosSdkSwapperDeps & SolanaSwapperDeps & TronSwapperDeps & SuiSwapperDeps & NearSwapperDeps & StarknetSwapperDeps & TonSwapperDeps;
288
+ } & EvmSwapperDeps & UtxoSwapperDeps & CosmosSdkSwapperDeps & SolanaSwapperDeps & TronSwapperDeps & SuiSwapperDeps & NearSwapperDeps & StarknetSwapperDeps & TonSwapperDeps & AptosSwapperDeps;
278
289
  export type AffiliateFee = {
279
290
  assetId: AssetId;
280
291
  amountCryptoBaseUnit: string;
@@ -328,6 +339,11 @@ export type TxBuildData = {
328
339
  value: string;
329
340
  data?: string;
330
341
  memo?: string;
342
+ } | {
343
+ type: 'aptos';
344
+ payload: string;
345
+ gasUnitPrice: string;
346
+ maxGasAmount: string;
331
347
  } | {
332
348
  type: 'cowswap';
333
349
  chainId: ChainId;
@@ -515,6 +531,9 @@ export type StarknetTransactionExecutionProps = {
515
531
  export type TonTransactionExecutionProps = {
516
532
  signAndBroadcastTransaction: (txToSign: ton.TonSignTx) => Promise<string>;
517
533
  };
534
+ export type AptosTransactionExecutionProps = {
535
+ signAndBroadcastTransaction: (txToSign: AptosSignTx) => Promise<string>;
536
+ };
518
537
  type EvmAccountMetadata = {
519
538
  from: string;
520
539
  };
@@ -532,6 +551,7 @@ type NearAccountMetadata = {
532
551
  };
533
552
  type StarknetAccountMetadata = {
534
553
  from: string;
554
+ callsOnly?: boolean;
535
555
  };
536
556
  type UtxoAccountMetadata = {
537
557
  senderAddress: string;
@@ -561,6 +581,10 @@ type TonAccountMetadata = {
561
581
  from: string;
562
582
  };
563
583
  export type GetUnsignedTonTransactionArgs = CommonGetUnsignedTransactionArgs & TonAccountMetadata & TonSwapperDeps;
584
+ type AptosAccountMetadata = {
585
+ from: string;
586
+ };
587
+ export type GetUnsignedAptosTransactionArgs = CommonGetUnsignedTransactionArgs & AptosAccountMetadata & AptosSwapperDeps;
564
588
  export type GetUnsignedEvmMessageArgs = CommonGetUnsignedTransactionArgs & EvmAccountMetadata & Omit<EvmSwapperDeps, 'fetchIsSmartContractAddressQuery'>;
565
589
  export type GetUnsignedSolanaMessageArgs = CommonGetUnsignedTransactionArgs;
566
590
  export type GetUnsignedUtxoTransactionArgs = CommonGetUnsignedTransactionArgs & UtxoAccountMetadata & UtxoSwapperDeps;
@@ -572,7 +596,7 @@ export type CheckTradeStatusInput = {
572
596
  stepIndex: SupportedTradeQuoteStepIndex;
573
597
  config: SwapperConfig;
574
598
  swap: Swap | undefined;
575
- } & EvmSwapperDeps & UtxoSwapperDeps & CosmosSdkSwapperDeps & SolanaSwapperDeps & TronSwapperDeps & SuiSwapperDeps & NearSwapperDeps & StarknetSwapperDeps & TonSwapperDeps;
599
+ } & EvmSwapperDeps & UtxoSwapperDeps & CosmosSdkSwapperDeps & SolanaSwapperDeps & TronSwapperDeps & SuiSwapperDeps & NearSwapperDeps & StarknetSwapperDeps & TonSwapperDeps & AptosSwapperDeps;
576
600
  export type TradeStatus = {
577
601
  status: TxStatus;
578
602
  buyTxHash: string | undefined;
@@ -598,6 +622,7 @@ export type Swapper = {
598
622
  executeNearTransaction?: (txToSign: near.NearSignTx, callbacks: NearTransactionExecutionProps) => Promise<string>;
599
623
  executeStarknetTransaction?: (txToSign: StarknetSignTx, callbacks: StarknetTransactionExecutionProps) => Promise<string>;
600
624
  executeTonTransaction?: (txToSign: ton.TonSignTx, callbacks: TonTransactionExecutionProps) => Promise<string>;
625
+ executeAptosTransaction?: (txToSign: AptosSignTx, callbacks: AptosTransactionExecutionProps) => Promise<string>;
601
626
  };
602
627
  export type SwapperApi = {
603
628
  checkTradeStatus: (input: CheckTradeStatusInput) => Promise<TradeStatus>;
@@ -616,6 +641,7 @@ export type SwapperApi = {
616
641
  getUnsignedNearTransaction?: (input: GetUnsignedNearTransactionArgs) => Promise<near.NearSignTx>;
617
642
  getUnsignedStarknetTransaction?: (input: GetUnsignedStarknetTransactionArgs) => Promise<StarknetSignTx>;
618
643
  getUnsignedTonTransaction?: (input: GetUnsignedTonTransactionArgs) => Promise<ton.TonSignTx>;
644
+ getUnsignedAptosTransaction?: (input: GetUnsignedAptosTransactionArgs) => Promise<AptosSignTx>;
619
645
  getEvmTransactionFees?: (input: GetUnsignedEvmTransactionArgs) => Promise<string>;
620
646
  getSolanaTransactionFees?: (input: GetUnsignedSolanaTransactionArgs) => Promise<string>;
621
647
  getSuiTransactionFees?: (input: GetUnsignedSuiTransactionArgs) => Promise<string>;
@@ -625,6 +651,7 @@ export type SwapperApi = {
625
651
  getNearTransactionFees?: (input: GetUnsignedNearTransactionArgs) => Promise<string>;
626
652
  getStarknetTransactionFees?: (input: GetUnsignedStarknetTransactionArgs) => Promise<string>;
627
653
  getTonTransactionFees?: (input: GetUnsignedTonTransactionArgs) => Promise<string>;
654
+ getAptosTransactionFees?: (input: GetUnsignedAptosTransactionArgs) => Promise<string>;
628
655
  };
629
656
  export type QuoteResult = Result<TradeQuote[], SwapErrorRight> & {
630
657
  swapperName: SwapperName;
@@ -653,6 +680,7 @@ export type SuiTransactionExecutionInput = CommonTradeExecutionInput & SuiTransa
653
680
  export type NearTransactionExecutionInput = CommonTradeExecutionInput & NearTransactionExecutionProps & NearAccountMetadata;
654
681
  export type StarknetTransactionExecutionInput = CommonTradeExecutionInput & StarknetTransactionExecutionProps & StarknetAccountMetadata;
655
682
  export type TonTransactionExecutionInput = CommonTradeExecutionInput & TonTransactionExecutionProps & TonAccountMetadata;
683
+ export type AptosTransactionExecutionInput = CommonTradeExecutionInput & AptosTransactionExecutionProps & AptosAccountMetadata;
656
684
  export declare enum TradeExecutionEvent {
657
685
  SellTxHash = "sellTxHash",
658
686
  Status = "status",
package/dist/cjs/types.js CHANGED
@@ -24,6 +24,7 @@ var SwapperName;
24
24
  SwapperName["BobGateway"] = "BOB Gateway";
25
25
  SwapperName["Symbiosis"] = "Symbiosis";
26
26
  SwapperName["Fynd"] = "Fynd";
27
+ SwapperName["KyberSwap"] = "KyberSwap";
27
28
  })(SwapperName || (exports.SwapperName = SwapperName = {}));
28
29
  var TradeQuoteError;
29
30
  (function (TradeQuoteError) {
@@ -0,0 +1,2 @@
1
+ export declare const APTOS_PLACEHOLDER_ADDRESS = "0x1";
2
+ export declare const APTOS_RATE_SIMULATION_VALUE = "1";
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.APTOS_RATE_SIMULATION_VALUE = exports.APTOS_PLACEHOLDER_ADDRESS = void 0;
4
+ // The aptos framework account usable as a sender stand-in for walletless rates
5
+ exports.APTOS_PLACEHOLDER_ADDRESS = '0x1';
6
+ // Rates only price the transfer, so the sender doesn't need to hold the sell amount
7
+ exports.APTOS_RATE_SIMULATION_VALUE = '1';
@@ -0,0 +1,2 @@
1
+ import type { GetUnsignedAptosTransactionArgs } from '../../types';
2
+ export declare const getAptosTransactionFees: ({ tradeQuote, stepIndex, }: Pick<GetUnsignedAptosTransactionArgs, 'tradeQuote' | 'stepIndex'>) => Promise<string>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAptosTransactionFees = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const getAptosTransactionFees = ({ tradeQuote, stepIndex, }) => {
6
+ if (!(0, utils_1.isExecutableTradeQuote)(tradeQuote))
7
+ throw new Error('Unable to execute a trade rate quote');
8
+ const step = (0, utils_1.getExecutableTradeStep)(tradeQuote, stepIndex);
9
+ if (!step.feeData.networkFeeCryptoBaseUnit)
10
+ throw new Error('Missing network fee in quote');
11
+ return Promise.resolve(step.feeData.networkFeeCryptoBaseUnit);
12
+ };
13
+ exports.getAptosTransactionFees = getAptosTransactionFees;
@@ -0,0 +1,2 @@
1
+ import type { GetUnsignedAptosTransactionArgs } from '../../types';
2
+ export declare const getUnsignedAptosTransaction: ({ stepIndex, tradeQuote, from, assertGetAptosChainAdapter, }: GetUnsignedAptosTransactionArgs) => Promise<import("@shapeshiftoss/hdwallet-core").AptosSignTx>;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getUnsignedAptosTransaction = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const getUnsignedAptosTransaction = ({ stepIndex, tradeQuote, from, assertGetAptosChainAdapter, }) => {
6
+ if (!(0, utils_1.isExecutableTradeQuote)(tradeQuote))
7
+ throw new Error('Unable to execute a trade rate');
8
+ const step = (0, utils_1.getExecutableTradeStep)(tradeQuote, stepIndex);
9
+ const { accountNumber, sellAsset, transactionData } = step;
10
+ if (transactionData?.type !== 'aptos')
11
+ throw new Error('Missing aptos transactionData');
12
+ const adapter = assertGetAptosChainAdapter(sellAsset.chainId);
13
+ const { payload, gasUnitPrice, maxGasAmount } = transactionData;
14
+ return adapter.buildCustomApiTx({ from, accountNumber, payload, gasUnitPrice, maxGasAmount });
15
+ };
16
+ exports.getUnsignedAptosTransaction = getUnsignedAptosTransaction;
@@ -0,0 +1,3 @@
1
+ export * from './constants';
2
+ export * from './getAptosTransactionFees';
3
+ export * from './getUnsignedAptosTransaction';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./constants"), exports);
18
+ __exportStar(require("./getAptosTransactionFees"), exports);
19
+ __exportStar(require("./getUnsignedAptosTransaction"), exports);
@@ -1,22 +1,35 @@
1
1
  import type { EvmChainAdapter } from '@shapeshiftoss/chain-adapters';
2
2
  import type { Asset } from '@shapeshiftoss/types';
3
3
  import type { TxBuildData } from '../../types';
4
- type GetEvmNetworkFeeCryptoBaseUnitArgs = {
4
+ export declare const EVM_GAS_LIMIT_BUFFER = 1.2;
5
+ export declare const bufferGasLimit: (gasLimit: string) => string;
6
+ export declare const isPositiveGasLimit: (gasLimit: string | null | undefined) => gasLimit is string;
7
+ type EvmFeeArgs = {
5
8
  adapter: EvmChainAdapter;
6
9
  supportsEIP1559: boolean;
7
- } & ({
8
- gasLimit: string;
9
- } | {
10
+ };
11
+ type EvmSimulationArgs = {
10
12
  transactionData: Extract<TxBuildData, {
11
13
  type: 'evm';
12
14
  }>;
13
15
  from: string;
14
- gasLimitBuffer?: number;
15
16
  stateOverride?: {
16
17
  sellAsset: Asset;
17
18
  sellAmountCryptoBaseUnit: string;
18
19
  spenderAddress?: string;
19
20
  };
20
- });
21
+ };
22
+ type FixedGasLimitArgs = {
23
+ gasLimit: string;
24
+ };
25
+ type SimulatedGasLimitArgs = EvmSimulationArgs & {
26
+ providerGasLimit?: string | null;
27
+ };
28
+ type GetEvmNetworkFeeCryptoBaseUnitArgs = EvmFeeArgs & (FixedGasLimitArgs | SimulatedGasLimitArgs);
21
29
  export declare const getEvmNetworkFeeCryptoBaseUnit: (args: GetEvmNetworkFeeCryptoBaseUnitArgs) => Promise<string>;
30
+ type GetEvmRateNetworkFeeCryptoBaseUnitArgs = EvmFeeArgs & {
31
+ providerGasLimit: string | null | undefined;
32
+ simulation?: EvmSimulationArgs;
33
+ };
34
+ export declare const getEvmRateNetworkFeeCryptoBaseUnit: ({ providerGasLimit, simulation, ...feeArgs }: GetEvmRateNetworkFeeCryptoBaseUnitArgs) => Promise<string>;
22
35
  export {};
@@ -1,52 +1,62 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getEvmNetworkFeeCryptoBaseUnit = void 0;
3
+ exports.getEvmRateNetworkFeeCryptoBaseUnit = exports.getEvmNetworkFeeCryptoBaseUnit = exports.isPositiveGasLimit = exports.bufferGasLimit = exports.EVM_GAS_LIMIT_BUFFER = void 0;
4
4
  const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
5
5
  const utils_1 = require("@shapeshiftoss/utils");
6
6
  const stateOverride_1 = require("./stateOverride");
7
+ exports.EVM_GAS_LIMIT_BUFFER = 1.2;
8
+ const bufferGasLimit = (gasLimit) => (0, utils_1.bnOrZero)(gasLimit).times(exports.EVM_GAS_LIMIT_BUFFER).toFixed(0);
9
+ exports.bufferGasLimit = bufferGasLimit;
10
+ const isPositiveGasLimit = (gasLimit) => (0, utils_1.bnOrZero)(gasLimit).gt(0);
11
+ exports.isPositiveGasLimit = isPositiveGasLimit;
12
+ const priceGasLimit = async ({ adapter, supportsEIP1559 }, gasLimit) => {
13
+ const { average: gasPrices } = await adapter.getGasFeeData();
14
+ return chain_adapters_1.evm.calcNetworkFeeCryptoBaseUnit({ ...gasPrices, supportsEIP1559, gasLimit });
15
+ };
16
+ // Prices the buffered limit, since the signer must hold enough to cover the full limit
7
17
  const getEvmNetworkFeeCryptoBaseUnit = async (args) => {
8
18
  const { adapter, supportsEIP1559 } = args;
9
- // Price a provider gas limit with fresh gas prices - no on chain estimation
10
- const priceProviderGasLimit = async (gasLimit) => {
11
- const { average: gasPrices } = await adapter.getGasFeeData();
12
- return chain_adapters_1.evm.calcNetworkFeeCryptoBaseUnit({ ...gasPrices, supportsEIP1559, gasLimit });
13
- };
14
- // Rate network fee: the caller passed a provider gas limit directly
15
19
  if (!('transactionData' in args))
16
- return priceProviderGasLimit(args.gasLimit);
17
- const { transactionData, from, gasLimitBuffer = 1.2 } = args;
18
- // Executable quote: the provider supplied a gas limit on the tx data, price it as-is
19
- const providerGasLimit = transactionData.gasLimit;
20
- if (providerGasLimit && (0, utils_1.bnOrZero)(providerGasLimit).gt(0)) {
21
- return priceProviderGasLimit(providerGasLimit);
22
- }
20
+ return priceGasLimit(args, args.gasLimit);
21
+ const { transactionData, from, providerGasLimit } = args;
23
22
  const { to, data, value } = transactionData;
24
23
  if (args.stateOverride) {
25
24
  const { sellAsset, sellAmountCryptoBaseUnit, spenderAddress } = args.stateOverride;
26
- // Best effort - a timeout, undiscoverable slot, or an rpc without stateOverride support falls
27
- // through to plain estimation, which succeeds whenever the seller's state was sufficient anyway
28
- const overriddenGasLimit = await (0, stateOverride_1.withTimeout)((async () => {
29
- const overrideArgs = {
30
- sellAsset,
31
- sellAmountCryptoBaseUnit,
32
- from,
33
- spenderAddress,
34
- value,
35
- };
36
- const stateOverride = await (0, stateOverride_1.getMinimalStateOverride)(overrideArgs);
37
- if (!stateOverride)
25
+ const overrideArgs = { sellAsset, sellAmountCryptoBaseUnit, from, spenderAddress, value };
26
+ // null when the override can't be built (an undiscoverable storage slot or a failed read),
27
+ // undefined when nothing needs overriding or the simulation timed out
28
+ const overriddenGasLimit = await (0, stateOverride_1.withTimeout)((0, stateOverride_1.getMinimalStateOverride)(overrideArgs).then(stateOverride => stateOverride &&
29
+ (0, stateOverride_1.estimateGasWithStateOverride)({ ...overrideArgs, to, data, stateOverride }), () => null)).catch(error => {
30
+ // The missing state makes a plain estimate revert too, so only a timeout falls through to it
31
+ if (error instanceof stateOverride_1.EstimationTimeoutError)
38
32
  return undefined;
39
- return (0, stateOverride_1.estimateGasWithStateOverride)({ ...overrideArgs, to, data, stateOverride });
40
- })()).catch(() => undefined);
33
+ throw error;
34
+ });
35
+ if (overriddenGasLimit === null && (0, exports.isPositiveGasLimit)(providerGasLimit)) {
36
+ transactionData.gasLimit = (0, exports.bufferGasLimit)(providerGasLimit);
37
+ return priceGasLimit(args, transactionData.gasLimit);
38
+ }
41
39
  if (overriddenGasLimit) {
42
- transactionData.gasLimit = (0, utils_1.bnOrZero)(overriddenGasLimit).times(gasLimitBuffer).toFixed(0);
43
- return priceProviderGasLimit(overriddenGasLimit);
40
+ transactionData.gasLimit = (0, exports.bufferGasLimit)(overriddenGasLimit);
41
+ return priceGasLimit(args, transactionData.gasLimit);
44
42
  }
45
43
  }
46
- // Estimate on chain, then set the buffered limit on the tx data in place so the executable tx
47
- // always carries a gas limit
48
- const estimatedFees = await chain_adapters_1.evm.getFees({ adapter, data, to, value, from, supportsEIP1559 });
49
- transactionData.gasLimit = (0, utils_1.bnOrZero)(estimatedFees.gasLimit).times(gasLimitBuffer).toFixed(0);
50
- return estimatedFees.networkFeeCryptoBaseUnit;
44
+ const { average: { chainSpecific: feeData }, } = await adapter.getFeeData({ to, value, chainSpecific: { from, data } });
45
+ transactionData.gasLimit = (0, exports.bufferGasLimit)(feeData.gasLimit);
46
+ return chain_adapters_1.evm.calcNetworkFeeCryptoBaseUnit({
47
+ ...feeData,
48
+ supportsEIP1559,
49
+ gasLimit: transactionData.gasLimit,
50
+ });
51
51
  };
52
52
  exports.getEvmNetworkFeeCryptoBaseUnit = getEvmNetworkFeeCryptoBaseUnit;
53
+ // Rates price a provider's limit as given (it carries its own margin) and simulate without one
54
+ const getEvmRateNetworkFeeCryptoBaseUnit = ({ providerGasLimit, simulation, ...feeArgs }) => {
55
+ if ((0, exports.isPositiveGasLimit)(providerGasLimit)) {
56
+ return priceGasLimit(feeArgs, providerGasLimit);
57
+ }
58
+ if (simulation)
59
+ return (0, exports.getEvmNetworkFeeCryptoBaseUnit)({ ...feeArgs, ...simulation });
60
+ return Promise.reject(new Error('no gas limit to price'));
61
+ };
62
+ exports.getEvmRateNetworkFeeCryptoBaseUnit = getEvmRateNetworkFeeCryptoBaseUnit;