@shapeshiftoss/swapper 15.0.2 → 15.0.4

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 (30) hide show
  1. package/dist/api.d.ts +4 -4
  2. package/dist/swappercli.js +6 -5
  3. package/dist/swappers/cow/cowApprovalNeeded/cowApprovalNeeded.js +2 -1
  4. package/dist/swappers/cow/cowBuildTrade/cowBuildTrade.js +3 -3
  5. package/dist/swappers/cow/getCowSwapTradeQuote/getCowSwapTradeQuote.js +2 -2
  6. package/dist/swappers/cow/utils/cowService.js +5 -0
  7. package/dist/swappers/osmosis/OsmosisSwapper.js +8 -9
  8. package/dist/swappers/osmosis/utils/helpers.js +2 -2
  9. package/dist/swappers/thorchain/buildThorTrade/buildThorTrade.js +4 -7
  10. package/dist/swappers/thorchain/getThorTradeQuote/getTradeQuote.js +2 -5
  11. package/dist/swappers/thorchain/thorTradeApprovalNeeded/thorTradeApprovalNeeded.js +2 -2
  12. package/dist/swappers/thorchain/utils/cosmos/getCosmosTxData.d.ts +2 -2
  13. package/dist/swappers/thorchain/utils/cosmos/getCosmosTxData.js +3 -3
  14. package/dist/swappers/thorchain/utils/evm/makeTradeTx.d.ts +2 -3
  15. package/dist/swappers/thorchain/utils/evm/makeTradeTx.js +2 -2
  16. package/dist/swappers/thorchain/utils/test-data/setupThorswapDeps.js +0 -1
  17. package/dist/swappers/thorchain/utils/thorService.js +10 -0
  18. package/dist/swappers/utils/helpers/helpers.js +2 -2
  19. package/dist/swappers/utils/test-data/setupSwapQuote.d.ts +1 -1
  20. package/dist/swappers/utils/test-data/setupSwapQuote.js +3 -3
  21. package/dist/swappers/zrx/getZrxTradeQuote/getZrxTradeQuote.js +2 -2
  22. package/dist/swappers/zrx/utils/test-data/setupZrxSwapQuote.d.ts +1 -5
  23. package/dist/swappers/zrx/utils/test-data/setupZrxSwapQuote.js +1 -1
  24. package/dist/swappers/zrx/utils/zrxService.js +5 -0
  25. package/dist/swappers/zrx/zrxApprovalNeeded/zrxApprovalNeeded.js +2 -1
  26. package/dist/swappers/zrx/zrxBuildTrade/zrxBuildTrade.js +2 -2
  27. package/dist/swappers/zrx/zrxExecuteTrade/zrxExecuteTrade.js +2 -2
  28. package/dist/utils.d.ts +2 -0
  29. package/dist/utils.js +14 -1
  30. package/package.json +4 -3
package/dist/api.d.ts CHANGED
@@ -2,7 +2,7 @@ import { Asset } from '@shapeshiftoss/asset-service';
2
2
  import { AssetId, ChainId } from '@shapeshiftoss/caip';
3
3
  import { avalanche, cosmos, ethereum, osmosis } from '@shapeshiftoss/chain-adapters';
4
4
  import { HDWallet } from '@shapeshiftoss/hdwallet-core';
5
- import { BIP44Params, ChainSpecific, KnownChainIds, UtxoAccountType } from '@shapeshiftoss/types';
5
+ import { ChainSpecific, KnownChainIds, UtxoAccountType } from '@shapeshiftoss/types';
6
6
  export declare const SwapError: {
7
7
  new <V extends {
8
8
  cause?: unknown;
@@ -80,7 +80,7 @@ declare type CommonTradeInput = {
80
80
  sellAmountBeforeFeesCryptoBaseUnit: string;
81
81
  sendMax: boolean;
82
82
  receiveAddress: string;
83
- bip44Params: BIP44Params;
83
+ accountNumber: number;
84
84
  };
85
85
  export declare type EvmSupportedChainIds = KnownChainIds.EthereumMainnet | KnownChainIds.AvalancheMainnet;
86
86
  export declare type CosmosSdkSupportedChainIds = KnownChainIds.CosmosMainnet | KnownChainIds.OsmosisMainnet | KnownChainIds.ThorchainMainnet;
@@ -96,7 +96,7 @@ export declare type GetCosmosSdkTradeQuoteInput = CommonTradeInput & {
96
96
  export declare type GetUtxoTradeQuoteInput = CommonTradeInput & {
97
97
  chainId: UtxoSupportedChainIds;
98
98
  accountType: UtxoAccountType;
99
- bip44Params: BIP44Params;
99
+ accountNumber: number;
100
100
  xpub: string;
101
101
  };
102
102
  export declare type GetTradeQuoteInput = GetUtxoTradeQuoteInput | GetEvmTradeQuoteInput | GetCosmosSdkTradeQuoteInput;
@@ -112,7 +112,7 @@ interface TradeBase<C extends ChainId> {
112
112
  sources: SwapSource[];
113
113
  buyAsset: Asset;
114
114
  sellAsset: Asset;
115
- bip44Params: BIP44Params;
115
+ accountNumber: number;
116
116
  }
117
117
  export interface TradeQuote<C extends ChainId> extends TradeBase<C> {
118
118
  allowanceContract: string;
@@ -107,8 +107,9 @@ const main = async () => {
107
107
  if (sellAdapter.getSupportedAccountTypes) {
108
108
  utxoAccountType = chain_adapters_1.bitcoin.ChainAdapter.defaultUtxoAccountType;
109
109
  }
110
+ const accountNumber = 0;
110
111
  const bip44Params = sellAdapter.getBIP44Params({
111
- accountNumber: 0,
112
+ accountNumber,
112
113
  accountType: utxoAccountType,
113
114
  });
114
115
  if (!bip44Params) {
@@ -125,13 +126,13 @@ const main = async () => {
125
126
  if (!utxoAccountType) {
126
127
  throw new Error('utxoAccountType must be defined');
127
128
  }
128
- publicKey = await sellAdapter.getPublicKey(wallet, bip44Params, utxoAccountType);
129
+ publicKey = await sellAdapter.getPublicKey(wallet, accountNumber, utxoAccountType);
129
130
  }
130
131
  const sellAmountBeforeFeesCryptoBaseUnit = toBaseUnit(sellAmountBeforeFeesCryptoPrecision, sellAsset.precision);
131
132
  const buyAssetReceiveAddr = await buyAdapter.getAddress({
132
133
  wallet,
133
134
  accountType: utxoAccountType,
134
- bip44Params,
135
+ accountNumber,
135
136
  });
136
137
  console.info(`${buyAsset.name} using receive addr ${buyAssetReceiveAddr}`);
137
138
  let quote;
@@ -143,7 +144,7 @@ const main = async () => {
143
144
  sellAmountBeforeFeesCryptoBaseUnit,
144
145
  sendMax: false,
145
146
  accountType: utxoAccountType || chain_adapters_1.bitcoin.ChainAdapter.defaultUtxoAccountType,
146
- bip44Params,
147
+ accountNumber,
147
148
  xpub: (publicKey === null || publicKey === void 0 ? void 0 : publicKey.xpub) || '',
148
149
  receiveAddress: buyAssetReceiveAddr,
149
150
  });
@@ -168,7 +169,7 @@ const main = async () => {
168
169
  sellAsset,
169
170
  receiveAddress: buyAssetReceiveAddr,
170
171
  accountType: utxoAccountType || chain_adapters_1.bitcoin.ChainAdapter.defaultUtxoAccountType,
171
- bip44Params,
172
+ accountNumber,
172
173
  xpub: (publicKey === null || publicKey === void 0 ? void 0 : publicKey.xpub) || '',
173
174
  });
174
175
  const tradeResult = await swapper.executeTrade({ trade, wallet });
@@ -17,7 +17,8 @@ async function cowApprovalNeeded({ adapter, web3 }, { quote, wallet }) {
17
17
  details: { assetNamespace },
18
18
  });
19
19
  }
20
- const receiveAddress = await adapter.getAddress({ wallet, bip44Params: quote.bip44Params });
20
+ const { accountNumber } = quote;
21
+ const receiveAddress = await adapter.getAddress({ accountNumber, wallet });
21
22
  const allowanceResult = await (0, helpers_1.getERC20Allowance)({
22
23
  web3,
23
24
  erc20AllowanceAbi: erc20Allowance_abi_1.erc20AllowanceAbi,
@@ -12,7 +12,7 @@ const cowService_1 = require("../utils/cowService");
12
12
  const helpers_2 = require("../utils/helpers/helpers");
13
13
  async function cowBuildTrade(deps, input) {
14
14
  try {
15
- const { sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountExcludeFeeCryptoBaseUnit, bip44Params, wallet, } = input;
15
+ const { sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountExcludeFeeCryptoBaseUnit, accountNumber, wallet, } = input;
16
16
  const { adapter, web3 } = deps;
17
17
  const { assetReference: sellAssetErc20Address, assetNamespace: sellAssetNamespace } = (0, caip_1.fromAssetId)(sellAsset.assetId);
18
18
  const { assetReference: buyAssetErc20Address, chainId: buyAssetChainId } = (0, caip_1.fromAssetId)(buyAsset.assetId);
@@ -29,7 +29,7 @@ async function cowBuildTrade(deps, input) {
29
29
  });
30
30
  }
31
31
  const buyToken = buyAsset.assetId !== caip_1.ethAssetId ? buyAssetErc20Address : constants_1.COW_SWAP_ETH_MARKER_ADDRESS;
32
- const receiveAddress = await adapter.getAddress({ wallet, bip44Params });
32
+ const receiveAddress = await adapter.getAddress({ accountNumber, wallet });
33
33
  /**
34
34
  * /v1/quote
35
35
  * params: {
@@ -91,7 +91,7 @@ async function cowBuildTrade(deps, input) {
91
91
  sources: constants_1.DEFAULT_SOURCE,
92
92
  buyAsset,
93
93
  sellAsset,
94
- bip44Params,
94
+ accountNumber,
95
95
  receiveAddress,
96
96
  feeAmountInSellTokenCryptoBaseUnit,
97
97
  sellAmountDeductFeeCryptoBaseUnit: quoteSellAmountExcludeFeeCryptoBaseUnit,
@@ -17,7 +17,7 @@ const helpers_2 = require("../utils/helpers/helpers");
17
17
  async function getCowSwapTradeQuote(deps, input) {
18
18
  var _a, _b;
19
19
  try {
20
- const { sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit, bip44Params, receiveAddress } = input;
20
+ const { sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit, accountNumber, receiveAddress, } = input;
21
21
  const { adapter, web3 } = deps;
22
22
  const { assetReference: sellAssetErc20Address, assetNamespace: sellAssetNamespace } = (0, caip_1.fromAssetId)(sellAsset.assetId);
23
23
  const { assetReference: buyAssetErc20Address, chainId: buyAssetChainId } = (0, caip_1.fromAssetId)(buyAsset.assetId);
@@ -115,7 +115,7 @@ async function getCowSwapTradeQuote(deps, input) {
115
115
  allowanceContract: constants_1.COW_SWAP_VAULT_RELAYER_ADDRESS,
116
116
  buyAsset,
117
117
  sellAsset,
118
- bip44Params,
118
+ accountNumber,
119
119
  };
120
120
  }
121
121
  catch (e) {
@@ -5,11 +5,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.cowService = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
+ const utils_1 = require("../../../utils");
9
+ const maxAge = 5 * 1000; // 5 seconds
10
+ const cachedUrls = ['/mainnet/api/v1/quote'];
11
+ const cache = (0, utils_1.createCache)(maxAge, cachedUrls);
8
12
  const axiosConfig = {
9
13
  timeout: 10000,
10
14
  headers: {
11
15
  Accept: 'application/json',
12
16
  'Content-Type': 'application/json',
13
17
  },
18
+ adapter: cache.adapter,
14
19
  };
15
20
  exports.cowService = axios_1.default.create(axiosConfig);
@@ -87,7 +87,7 @@ class OsmosisSwapper {
87
87
  return this.supportedAssetIds;
88
88
  }
89
89
  async buildTrade(args) {
90
- const { sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, receiveAddress, bip44Params, } = args;
90
+ const { sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, receiveAddress, accountNumber, } = args;
91
91
  if (!sellAmountCryptoBaseUnit) {
92
92
  throw new api_1.SwapError('sellAmountCryptoPrecision is required', {
93
93
  code: api_1.SwapErrorTypes.BUILD_TRADE_FAILED,
@@ -115,12 +115,12 @@ class OsmosisSwapper {
115
115
  receiveAddress,
116
116
  sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBase,
117
117
  sellAsset,
118
- bip44Params,
118
+ accountNumber,
119
119
  sources: [{ name: api_1.SwapperName.Osmosis, proportion: '100' }],
120
120
  };
121
121
  }
122
122
  async getTradeQuote(input) {
123
- const { bip44Params, sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, } = input;
123
+ const { accountNumber, sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, } = input;
124
124
  if (!sellAmountCryptoBaseUnit) {
125
125
  throw new api_1.SwapError('sellAmount is required', {
126
126
  code: api_1.SwapErrorTypes.RESPONSE_ERROR,
@@ -144,7 +144,7 @@ class OsmosisSwapper {
144
144
  },
145
145
  maximum,
146
146
  minimumCryptoHuman: minimum,
147
- bip44Params,
147
+ accountNumber,
148
148
  rate,
149
149
  sellAsset,
150
150
  sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBaseUnit,
@@ -154,7 +154,7 @@ class OsmosisSwapper {
154
154
  };
155
155
  }
156
156
  async executeTrade({ trade, wallet }) {
157
- const { sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, bip44Params, receiveAddress, } = trade;
157
+ const { sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, accountNumber, receiveAddress, } = trade;
158
158
  const isFromOsmo = sellAsset.assetId === caip_1.osmosisAssetId;
159
159
  const sellAssetDenom = helpers_1.symbolDenomMapping[sellAsset.symbol];
160
160
  const buyAssetDenom = helpers_1.symbolDenomMapping[buyAsset.symbol];
@@ -171,7 +171,7 @@ class OsmosisSwapper {
171
171
  let sellAddress;
172
172
  let cosmosIbcTradeId = '';
173
173
  if (!isFromOsmo) {
174
- sellAddress = await cosmosAdapter.getAddress({ wallet, bip44Params });
174
+ sellAddress = await cosmosAdapter.getAddress({ wallet, accountNumber });
175
175
  if (!sellAddress)
176
176
  throw new api_1.SwapError('Failed to get address', {
177
177
  code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED,
@@ -182,9 +182,8 @@ class OsmosisSwapper {
182
182
  amount: sellAmountCryptoBaseUnit,
183
183
  };
184
184
  const responseAccount = await cosmosAdapter.getAccount(sellAddress);
185
- const accountNumber = responseAccount.chainSpecific.accountNumber || '0';
186
185
  const sequence = responseAccount.chainSpecific.sequence || '0';
187
- const { tradeId } = await (0, helpers_1.performIbcTransfer)(transfer, cosmosAdapter, wallet, this.deps.osmoUrl, 'uatom', constants_1.COSMO_OSMO_CHANNEL, feeData.fast.txFee, accountNumber, sequence, gas, 'uatom');
186
+ const { tradeId } = await (0, helpers_1.performIbcTransfer)(transfer, cosmosAdapter, wallet, this.deps.osmoUrl, 'uatom', constants_1.COSMO_OSMO_CHANNEL, feeData.fast.txFee, accountNumber.toString(), sequence, gas, 'uatom');
188
187
  cosmosIbcTradeId = tradeId;
189
188
  // wait till confirmed
190
189
  const pollResult = await (0, helpers_1.pollForComplete)(tradeId, this.deps.cosmosUrl);
@@ -198,7 +197,7 @@ class OsmosisSwapper {
198
197
  await new Promise((resolve) => setTimeout(resolve, 5000));
199
198
  }
200
199
  else {
201
- sellAddress = await osmosisAdapter.getAddress({ wallet, bip44Params });
200
+ sellAddress = await osmosisAdapter.getAddress({ wallet, accountNumber });
202
201
  if (!sellAddress)
203
202
  throw new api_1.SwapError('failed to get osmoAddress', {
204
203
  code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED,
@@ -209,7 +209,7 @@ const performIbcTransfer = async (input, adapter, wallet, blockBaseUrl, denom, s
209
209
  const signed = await adapter.signTransaction({
210
210
  txToSign: {
211
211
  tx,
212
- addressNList: (0, chain_adapters_1.toAddressNList)(adapter.buildBIP44Params({ accountNumber: 0 })),
212
+ addressNList: (0, chain_adapters_1.toAddressNList)(adapter.getBIP44Params({ accountNumber: 0 })),
213
213
  chain_id: (0, caip_1.fromChainId)(adapter.getChainId()).chainReference,
214
214
  account_number: accountNumber,
215
215
  sequence,
@@ -262,7 +262,7 @@ const buildTradeTx = async ({ osmoAddress, adapter, buyAssetDenom, sellAssetDeno
262
262
  return {
263
263
  txToSign: {
264
264
  tx,
265
- addressNList: (0, chain_adapters_1.toAddressNList)(adapter.buildBIP44Params({ accountNumber: 0 })),
265
+ addressNList: (0, chain_adapters_1.toAddressNList)(adapter.getBIP44Params({ accountNumber: 0 })),
266
266
  chain_id: caip_1.CHAIN_REFERENCE.OsmosisMainnet,
267
267
  account_number: accountNumber,
268
268
  sequence,
@@ -12,7 +12,7 @@ const makeTradeTx_1 = require("../utils/evm/makeTradeTx");
12
12
  const buildTrade = async ({ deps, input }) => {
13
13
  var _a, _b, _c, _d;
14
14
  try {
15
- const { buyAsset, receiveAddress: destinationAddress, sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, sellAsset, bip44Params, slippage: slippageTolerance = constants_1.DEFAULT_SLIPPAGE, wallet, sendMax, } = input;
15
+ const { buyAsset, receiveAddress: destinationAddress, sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, sellAsset, accountNumber, slippage: slippageTolerance = constants_1.DEFAULT_SLIPPAGE, wallet, sendMax, } = input;
16
16
  const quote = await (0, getTradeQuote_1.getThorTradeQuote)({ deps, input });
17
17
  const sellAdapter = deps.adapterManager.get(sellAsset.chainId);
18
18
  if (!sellAdapter)
@@ -26,7 +26,7 @@ const buildTrade = async ({ deps, input }) => {
26
26
  const ethTradeTx = await (0, makeTradeTx_1.makeTradeTx)({
27
27
  wallet,
28
28
  slippageTolerance,
29
- bip44Params,
29
+ accountNumber,
30
30
  sellAsset,
31
31
  buyAsset,
32
32
  adapter: sellAdapter,
@@ -59,7 +59,7 @@ const buildTrade = async ({ deps, input }) => {
59
59
  value: sellAmountCryptoBaseUnit,
60
60
  wallet,
61
61
  to: vault,
62
- bip44Params: input.bip44Params,
62
+ accountNumber,
63
63
  chainSpecific: {
64
64
  accountType: input.accountType,
65
65
  satoshiPerByte: quote.feeData.chainSpecific
@@ -76,11 +76,8 @@ const buildTrade = async ({ deps, input }) => {
76
76
  };
77
77
  }
78
78
  else if (chainNamespace === caip_1.CHAIN_NAMESPACE.CosmosSdk) {
79
- if (!bip44Params) {
80
- throw new Error('bip44Params required as input');
81
- }
82
79
  const txData = await (0, getCosmosTxData_1.getCosmosTxData)({
83
- bip44Params,
80
+ accountNumber,
84
81
  deps,
85
82
  sellAdapter: sellAdapter,
86
83
  sellAmountCryptoBaseUnit,
@@ -16,10 +16,7 @@ const getEvmTxFees_1 = require("../utils/txFeeHelpers/evmTxFees/getEvmTxFees");
16
16
  const getUtxoTxFees_1 = require("../utils/txFeeHelpers/utxoTxFees/getUtxoTxFees");
17
17
  const getSlippage_1 = require("./getSlippage");
18
18
  const getThorTradeQuote = async ({ deps, input }) => {
19
- const { sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, bip44Params, chainId, receiveAddress, sendMax, } = input;
20
- if (!bip44Params) {
21
- throw new Error('bip44Params required in getThorTradeQuote');
22
- }
19
+ const { sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, accountNumber, chainId, receiveAddress, sendMax, } = input;
23
20
  try {
24
21
  const { assetReference: sellAssetReference } = (0, caip_1.fromAssetId)(sellAsset.assetId);
25
22
  const { chainId: buyAssetChainId } = (0, caip_1.fromAssetId)(buyAsset.assetId);
@@ -65,7 +62,7 @@ const getThorTradeQuote = async ({ deps, input }) => {
65
62
  sources: [{ name: api_1.SwapperName.Thorchain, proportion: '1' }],
66
63
  buyAsset,
67
64
  sellAsset,
68
- bip44Params,
65
+ accountNumber,
69
66
  minimumCryptoHuman: minimumSellAssetAmountPaddedCryptoHuman,
70
67
  recommendedSlippage: recommendedSlippage.toPrecision(),
71
68
  };
@@ -10,7 +10,7 @@ const thorTradeApprovalNeeded = async ({ deps, input, }) => {
10
10
  var _a;
11
11
  try {
12
12
  const { quote, wallet } = input;
13
- const { sellAsset, bip44Params } = quote;
13
+ const { sellAsset, accountNumber } = quote;
14
14
  const { adapterManager, web3 } = deps;
15
15
  const { assetReference: sellAssetErc20Address } = (0, caip_1.fromAssetId)(sellAsset.assetId);
16
16
  const { chainNamespace } = (0, caip_1.fromChainId)(sellAsset.chainId);
@@ -26,7 +26,7 @@ const thorTradeApprovalNeeded = async ({ deps, input, }) => {
26
26
  if (sellAsset.assetId === adapter.getFeeAssetId()) {
27
27
  return { approvalNeeded: false };
28
28
  }
29
- const receiveAddress = await adapter.getAddress({ wallet, bip44Params });
29
+ const receiveAddress = await adapter.getAddress({ wallet, accountNumber });
30
30
  if (!quote.allowanceContract) {
31
31
  throw new api_1.SwapError('[thorTradeApprovalNeeded] - allowanceTarget is required', {
32
32
  code: api_1.SwapErrorTypes.VALIDATION_FAILED,
@@ -2,11 +2,11 @@ import { Asset } from '@shapeshiftoss/asset-service';
2
2
  import { ChainId } from '@shapeshiftoss/caip';
3
3
  import { ChainAdapter } from '@shapeshiftoss/chain-adapters';
4
4
  import { HDWallet } from '@shapeshiftoss/hdwallet-core';
5
- import { BIP44Params, KnownChainIds } from '@shapeshiftoss/types';
5
+ import { KnownChainIds } from '@shapeshiftoss/types';
6
6
  import { TradeQuote } from '../../../../api';
7
7
  import type { ThorchainSwapperDeps } from '../../types';
8
8
  declare type GetCosmosTxDataInput = {
9
- bip44Params: BIP44Params;
9
+ accountNumber: number;
10
10
  destinationAddress: string;
11
11
  deps: ThorchainSwapperDeps;
12
12
  sellAmountCryptoBaseUnit: string;
@@ -8,7 +8,7 @@ const getInboundAddressDataForChain_1 = require("../getInboundAddressDataForChai
8
8
  const getLimit_1 = require("../getLimit/getLimit");
9
9
  const makeSwapMemo_1 = require("../makeSwapMemo/makeSwapMemo");
10
10
  const getCosmosTxData = async (input) => {
11
- const { bip44Params, deps, destinationAddress, sellAmountCryptoBaseUnit, sellAsset, buyAsset, slippageTolerance, quote, wallet, sellAdapter, } = input;
11
+ const { accountNumber, deps, destinationAddress, sellAmountCryptoBaseUnit, sellAsset, buyAsset, slippageTolerance, quote, wallet, sellAdapter, } = input;
12
12
  const fromThorAsset = sellAsset.chainId == types_1.KnownChainIds.ThorchainMainnet;
13
13
  const gaiaAddressData = await (0, getInboundAddressDataForChain_1.getInboundAddressDataForChain)(deps.daemonUrl, caip_1.cosmosAssetId);
14
14
  const vault = gaiaAddressData === null || gaiaAddressData === void 0 ? void 0 : gaiaAddressData.address;
@@ -35,7 +35,7 @@ const getCosmosTxData = async (input) => {
35
35
  switch (true) {
36
36
  case fromThorAsset:
37
37
  return await sellAdapter.buildDepositTransaction({
38
- bip44Params,
38
+ accountNumber,
39
39
  value: sellAmountCryptoBaseUnit,
40
40
  wallet,
41
41
  memo,
@@ -52,7 +52,7 @@ const getCosmosTxData = async (input) => {
52
52
  details: { chainId: input.chainId },
53
53
  });
54
54
  return await sellAdapter.buildSendTransaction({
55
- bip44Params,
55
+ accountNumber,
56
56
  value: sellAmountCryptoBaseUnit,
57
57
  wallet,
58
58
  to: vault,
@@ -1,11 +1,10 @@
1
1
  import { Asset } from '@shapeshiftoss/asset-service';
2
2
  import { ETHSignTx, HDWallet } from '@shapeshiftoss/hdwallet-core';
3
- import { BIP44Params } from '@shapeshiftoss/types';
4
3
  import { EvmSupportedChainAdapter } from '../../../../api';
5
4
  import type { ThorchainSwapperDeps } from '../../types';
6
5
  declare type MakeTradeTxArgs = {
7
6
  wallet: HDWallet;
8
- bip44Params: BIP44Params;
7
+ accountNumber: number;
9
8
  sellAmountCryptoBaseUnit: string;
10
9
  buyAsset: Asset;
11
10
  sellAsset: Asset;
@@ -24,7 +23,7 @@ declare type MakeTradeTxArgs = {
24
23
  maxFeePerGas: string;
25
24
  maxPriorityFeePerGas: string;
26
25
  });
27
- export declare const makeTradeTx: ({ wallet, bip44Params, sellAmountCryptoBaseUnit, buyAsset, sellAsset, destinationAddress, adapter, maxFeePerGas, maxPriorityFeePerGas, gasPriceCryptoBaseUnit, slippageTolerance, deps, gasLimit, buyAssetTradeFeeUsd, }: MakeTradeTxArgs) => Promise<{
26
+ export declare const makeTradeTx: ({ wallet, accountNumber, sellAmountCryptoBaseUnit, buyAsset, sellAsset, destinationAddress, adapter, maxFeePerGas, maxPriorityFeePerGas, gasPriceCryptoBaseUnit, slippageTolerance, deps, gasLimit, buyAssetTradeFeeUsd, }: MakeTradeTxArgs) => Promise<{
28
27
  txToSign: ETHSignTx;
29
28
  }>;
30
29
  export {};
@@ -5,7 +5,7 @@ const caip_1 = require("@shapeshiftoss/caip");
5
5
  const web3_utils_1 = require("web3-utils");
6
6
  const api_1 = require("../../../../api");
7
7
  const getThorTxData_1 = require("./utils/getThorTxData");
8
- const makeTradeTx = async ({ wallet, bip44Params, sellAmountCryptoBaseUnit, buyAsset, sellAsset, destinationAddress, adapter, maxFeePerGas, maxPriorityFeePerGas, gasPriceCryptoBaseUnit, slippageTolerance, deps, gasLimit, buyAssetTradeFeeUsd, }) => {
8
+ const makeTradeTx = async ({ wallet, accountNumber, sellAmountCryptoBaseUnit, buyAsset, sellAsset, destinationAddress, adapter, maxFeePerGas, maxPriorityFeePerGas, gasPriceCryptoBaseUnit, slippageTolerance, deps, gasLimit, buyAssetTradeFeeUsd, }) => {
9
9
  try {
10
10
  const { assetNamespace } = (0, caip_1.fromAssetId)(sellAsset.assetId);
11
11
  const isErc20Trade = assetNamespace === 'erc20';
@@ -20,7 +20,7 @@ const makeTradeTx = async ({ wallet, bip44Params, sellAmountCryptoBaseUnit, buyA
20
20
  });
21
21
  return adapter.buildCustomTx({
22
22
  wallet,
23
- bip44Params,
23
+ accountNumber,
24
24
  to: router,
25
25
  gasLimit,
26
26
  ...(gasPriceCryptoBaseUnit !== undefined
@@ -21,7 +21,6 @@ const setupThorswapDeps = () => {
21
21
  [
22
22
  types_1.KnownChainIds.EthereumMainnet,
23
23
  {
24
- buildBIP44Params: jest.fn(() => ({ purpose: 44, coinType: 60, accountNumber: 0 })),
25
24
  getAddress: jest.fn(() => Promise.resolve('0xthisIsMyAddress')),
26
25
  getFeeData: jest.fn(() => feeData),
27
26
  getFeeAssetId: jest.fn(() => caip_1.ethAssetId),
@@ -5,11 +5,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.thorService = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
+ const utils_1 = require("../../../utils");
9
+ // Important: maxAge should be small because inbound address info must be recent
10
+ const maxAge = 5 * 1000; // 5 seconds
11
+ const cachedUrls = [
12
+ '/lcd/thorchain/pools',
13
+ '/lcd/thorchain/inbound_addresses',
14
+ '/lcd/thorchain/pool/',
15
+ ];
16
+ const cache = (0, utils_1.createCache)(maxAge, cachedUrls);
8
17
  const axiosConfig = {
9
18
  timeout: 10000,
10
19
  headers: {
11
20
  Accept: 'application/json',
12
21
  'Content-Type': 'application/json',
13
22
  },
23
+ adapter: cache.adapter,
14
24
  };
15
25
  exports.thorService = axios_1.default.create(axiosConfig);
@@ -56,11 +56,11 @@ const grantAllowance = async ({ quote, wallet, adapter, erc20Abi, web3, }) => {
56
56
  const approveTx = erc20Contract.methods
57
57
  .approve(quote.allowanceContract, quote.sellAmountBeforeFeesCryptoBaseUnit)
58
58
  .encodeABI();
59
- const { bip44Params } = quote;
59
+ const { accountNumber } = quote;
60
60
  const { txToSign } = await adapter.buildSendTransaction({
61
61
  wallet,
62
62
  to: sellAssetErc20Address,
63
- bip44Params,
63
+ accountNumber,
64
64
  value: '0',
65
65
  chainSpecific: {
66
66
  erc20ContractAddress: sellAssetErc20Address,
@@ -15,7 +15,7 @@ export declare const setupBuildTrade: () => {
15
15
  sellAmountBeforeFeesCryptoBaseUnit: string;
16
16
  sendMax: boolean;
17
17
  receiveAddress: string;
18
- bip44Params: import("@shapeshiftoss/types").BIP44Params;
18
+ accountNumber: number;
19
19
  } & {
20
20
  chainId: import("../../../api").EvmSupportedChainIds;
21
21
  } & {
@@ -12,7 +12,7 @@ const setupQuote = () => {
12
12
  sellAsset,
13
13
  buyAsset,
14
14
  allowanceContract: 'allowanceContractAddress',
15
- bip44Params: { purpose: 44, coinType: 60, accountNumber: 0 },
15
+ accountNumber: 0,
16
16
  minimumCryptoHuman: '0',
17
17
  maximum: '999999999999',
18
18
  feeData: {
@@ -29,7 +29,7 @@ const setupQuote = () => {
29
29
  sellAmountBeforeFeesCryptoBaseUnit: '1000000000000000000',
30
30
  sellAsset,
31
31
  buyAsset,
32
- bip44Params: { purpose: 44, coinType: 60, accountNumber: 0 },
32
+ accountNumber: 0,
33
33
  sendMax: false,
34
34
  receiveAddress: '0xc770eefad204b5180df6a14ee197d99d808ee52d',
35
35
  };
@@ -44,7 +44,7 @@ const setupBuildTrade = () => {
44
44
  sellAmountBeforeFeesCryptoBaseUnit: '1000000000000000000',
45
45
  buyAsset,
46
46
  sendMax: false,
47
- bip44Params: { purpose: 44, coinType: 60, accountNumber: 0 },
47
+ accountNumber: 0,
48
48
  sellAsset,
49
49
  wallet: {},
50
50
  receiveAddress: '',
@@ -12,7 +12,7 @@ const helpers_2 = require("../utils/helpers/helpers");
12
12
  const zrxService_1 = require("../utils/zrxService");
13
13
  async function getZrxTradeQuote(input) {
14
14
  try {
15
- const { sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, bip44Params, } = input;
15
+ const { sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, accountNumber, } = input;
16
16
  if (buyAsset.chainId !== input.chainId || sellAsset.chainId !== input.chainId) {
17
17
  throw new api_1.SwapError('[getZrxTradeQuote] - Both assets need to be on the same supported EVM chain to use Zrx', {
18
18
  code: api_1.SwapErrorTypes.UNSUPPORTED_PAIR,
@@ -75,7 +75,7 @@ async function getZrxTradeQuote(input) {
75
75
  allowanceContract: allowanceTarget,
76
76
  buyAsset,
77
77
  sellAsset,
78
- bip44Params,
78
+ accountNumber,
79
79
  };
80
80
  return tradeQuote;
81
81
  }
@@ -17,11 +17,7 @@ export declare const setupExecuteTrade: () => {
17
17
  buyAsset: Asset;
18
18
  sellAsset: Asset;
19
19
  sendMax: boolean;
20
- bip44Params: {
21
- purpose: number;
22
- coinType: number;
23
- accountNumber: number;
24
- };
20
+ accountNumber: number;
25
21
  txData: string;
26
22
  depositAddress: string;
27
23
  receiveAddress: string;
@@ -33,7 +33,7 @@ const setupExecuteTrade = () => {
33
33
  buyAsset,
34
34
  sellAsset,
35
35
  sendMax: false,
36
- bip44Params: { purpose: 44, coinType: 60, accountNumber: 0 },
36
+ accountNumber: 0,
37
37
  txData: '0x0',
38
38
  depositAddress: '0x0',
39
39
  receiveAddress: '0x0',
@@ -5,12 +5,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.zrxServiceFactory = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
+ const utils_1 = require("../../../utils");
9
+ const maxAge = 5 * 1000; // 5 seconds
10
+ const cachedUrls = ['/swap/v1/price'];
11
+ const cache = (0, utils_1.createCache)(maxAge, cachedUrls);
8
12
  const axiosConfig = {
9
13
  timeout: 10000,
10
14
  headers: {
11
15
  Accept: 'application/json',
12
16
  'Content-Type': 'application/json',
13
17
  },
18
+ adapter: cache.adapter,
14
19
  };
15
20
  const zrxServiceFactory = (baseUrl) => axios_1.default.create({ ...axiosConfig, baseURL: baseUrl });
16
21
  exports.zrxServiceFactory = zrxServiceFactory;
@@ -21,7 +21,8 @@ async function zrxApprovalNeeded({ adapter, web3 }, { quote, wallet }) {
21
21
  if (sellAsset.assetId === adapter.getFeeAssetId()) {
22
22
  return { approvalNeeded: false };
23
23
  }
24
- const receiveAddress = await adapter.getAddress({ wallet, bip44Params: quote.bip44Params });
24
+ const { accountNumber } = quote;
25
+ const receiveAddress = await adapter.getAddress({ accountNumber, wallet });
25
26
  if (!quote.allowanceContract) {
26
27
  throw new api_1.SwapError('[zrxApprovalNeeded] - allowanceTarget is required', {
27
28
  code: api_1.SwapErrorTypes.VALIDATION_FAILED,
@@ -36,7 +36,7 @@ const constants_2 = require("../utils/constants");
36
36
  const helpers_2 = require("../utils/helpers/helpers");
37
37
  const zrxService_1 = require("../utils/zrxService");
38
38
  async function zrxBuildTrade({ adapter, web3 }, input) {
39
- const { sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountExcludeFeeCryptoBaseUnit, slippage, bip44Params, receiveAddress, } = input;
39
+ const { sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountExcludeFeeCryptoBaseUnit, slippage, accountNumber, receiveAddress, } = input;
40
40
  try {
41
41
  const { assetReference: buyAssetErc20Address, assetNamespace: buyAssetNamespace } = (0, caip_1.fromAssetId)(buyAsset.assetId);
42
42
  const { assetReference: sellAssetErc20Address, assetNamespace: sellAssetNamespace } = (0, caip_1.fromAssetId)(sellAsset.assetId);
@@ -108,7 +108,7 @@ async function zrxBuildTrade({ adapter, web3 }, input) {
108
108
  const trade = {
109
109
  sellAsset,
110
110
  buyAsset,
111
- bip44Params,
111
+ accountNumber,
112
112
  receiveAddress,
113
113
  rate: price,
114
114
  depositAddress: to,
@@ -6,7 +6,7 @@ const api_1 = require("../../../api");
6
6
  const helpers_1 = require("../utils/helpers/helpers");
7
7
  async function zrxExecuteTrade({ adapter }, { trade, wallet }) {
8
8
  var _a, _b, _c, _d, _e, _f;
9
- const { bip44Params, sellAsset } = trade;
9
+ const { accountNumber, sellAsset } = trade;
10
10
  try {
11
11
  // value is 0 for erc20s
12
12
  const value = (0, helpers_1.isNativeEvmAsset)(sellAsset.assetId)
@@ -20,7 +20,7 @@ async function zrxExecuteTrade({ adapter }, { trade, wallet }) {
20
20
  gasPrice: (0, web3_utils_1.numberToHex)(((_b = (_a = trade.feeData) === null || _a === void 0 ? void 0 : _a.chainSpecific) === null || _b === void 0 ? void 0 : _b.gasPriceCryptoBaseUnit) || 0),
21
21
  gasLimit: (0, web3_utils_1.numberToHex)(((_d = (_c = trade.feeData) === null || _c === void 0 ? void 0 : _c.chainSpecific) === null || _d === void 0 ? void 0 : _d.estimatedGas) || 0),
22
22
  },
23
- bip44Params,
23
+ accountNumber,
24
24
  });
25
25
  const { txToSign } = buildTxResponse;
26
26
  const txWithQuoteData = { ...txToSign, data: (_e = trade.txData) !== null && _e !== void 0 ? _e : '' };
package/dist/utils.d.ts CHANGED
@@ -1 +1,3 @@
1
+ import { ISetupCache } from 'axios-cache-adapter';
1
2
  export declare function assertIsDefined<T>(val: T): asserts val is NonNullable<T>;
3
+ export declare const createCache: (maxAge: number, cachedUrls: string[]) => ISetupCache;
package/dist/utils.js CHANGED
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.assertIsDefined = void 0;
3
+ exports.createCache = exports.assertIsDefined = void 0;
4
4
  const assert_1 = require("assert");
5
+ const axios_cache_adapter_1 = require("axios-cache-adapter");
5
6
  // asserts x is type doesn't work when using arrow functions
6
7
  function assertIsDefined(val) {
7
8
  if (val === undefined || val === null) {
@@ -9,3 +10,15 @@ function assertIsDefined(val) {
9
10
  }
10
11
  }
11
12
  exports.assertIsDefined = assertIsDefined;
13
+ const getRequestFilter = (cachedUrls) => (request) => !cachedUrls.some((url) => request.url.includes(url));
14
+ const createCache = (maxAge, cachedUrls) => {
15
+ const filter = getRequestFilter(cachedUrls);
16
+ return (0, axios_cache_adapter_1.setupCache)({
17
+ maxAge,
18
+ exclude: { filter, query: false },
19
+ clearOnStale: true,
20
+ readOnError: false,
21
+ readHeaders: false,
22
+ });
23
+ };
24
+ exports.createCache = createCache;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapeshiftoss/swapper",
3
- "version": "15.0.2",
3
+ "version": "15.0.4",
4
4
  "description": "An interface and implementations to trade coins via various protocols",
5
5
  "repository": "https://github.com/shapeshift/lib",
6
6
  "license": "MIT",
@@ -24,6 +24,7 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "axios": "^0.26.1",
27
+ "axios-cache-adapter": "^2.7.3",
27
28
  "bignumber.js": "^9.0.2",
28
29
  "lodash": "^4.17.21",
29
30
  "retry-axios": "^2.6.0",
@@ -44,9 +45,9 @@
44
45
  "@shapeshiftoss/errors": "^1.1.2",
45
46
  "@shapeshiftoss/hdwallet-core": "^1.41.0",
46
47
  "@shapeshiftoss/types": "^8.1.0",
48
+ "@shapeshiftoss/unchained-client": "^10.0.1",
47
49
  "@types/readline-sync": "^1.4.4",
48
50
  "readline-sync": "^1.4.10",
49
- "web3-utils": "1.7.4",
50
- "@shapeshiftoss/unchained-client": "^10.0.1"
51
+ "web3-utils": "1.7.4"
51
52
  }
52
53
  }