@pioneer-platform/uniswap-client 0.0.22 → 0.0.24

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 (74) hide show
  1. package/lib/constants/chainInfo.d.ts +19 -22
  2. package/lib/constants/chainInfo.js +134 -117
  3. package/lib/constants/chains.d.ts +36 -47
  4. package/lib/constants/chains.js +118 -83
  5. package/lib/constants/chains.test.js +22 -25
  6. package/lib/constants/governance.d.ts +8 -0
  7. package/lib/constants/governance.js +24 -0
  8. package/lib/constants/lists.d.ts +12 -0
  9. package/lib/constants/lists.js +64 -0
  10. package/lib/constants/localCurrencies.d.ts +6 -0
  11. package/lib/constants/localCurrencies.js +94 -0
  12. package/lib/constants/localCurrencyIcons.d.ts +18 -0
  13. package/lib/constants/localCurrencyIcons.js +298 -0
  14. package/lib/constants/locales.d.ts +1 -1
  15. package/lib/constants/locales.js +0 -3
  16. package/lib/constants/misc.d.ts +2 -7
  17. package/lib/constants/misc.js +17 -23
  18. package/lib/constants/networks.d.ts +21 -0
  19. package/lib/constants/networks.js +170 -0
  20. package/lib/constants/proposals/index.d.ts +5 -0
  21. package/lib/constants/proposals/index.js +8 -0
  22. package/lib/constants/proposals/polygon_proposal_title.d.ts +1 -0
  23. package/lib/constants/proposals/polygon_proposal_title.js +4 -0
  24. package/lib/constants/proposals/uniswap_grants_proposal_description.d.ts +1 -0
  25. package/lib/constants/proposals/uniswap_grants_proposal_description.js +4 -0
  26. package/lib/constants/providers.d.ts +19 -0
  27. package/lib/constants/providers.js +33 -0
  28. package/lib/constants/routing.d.ts +9 -13
  29. package/lib/constants/routing.js +91 -55
  30. package/lib/constants/routing.test.d.ts +1 -0
  31. package/lib/constants/routing.test.js +32 -0
  32. package/lib/constants/supportArticles.d.ts +13 -0
  33. package/lib/constants/supportArticles.js +17 -0
  34. package/lib/constants/tokenLists/broken.tokenlist.json +22 -0
  35. package/lib/constants/tokenLogoLookup.d.ts +8 -0
  36. package/lib/constants/tokenLogoLookup.js +48 -0
  37. package/lib/constants/tokenSafety.js +129 -0
  38. package/lib/constants/tokenSafetyLookup.d.ts +18 -0
  39. package/lib/constants/tokenSafetyLookup.js +66 -0
  40. package/lib/constants/tokenSaftey.test.d.ts +1 -0
  41. package/lib/constants/tokenSaftey.test.js +31 -0
  42. package/lib/constants/tokens.d.ts +34 -42
  43. package/lib/constants/tokens.js +190 -147
  44. package/lib/index.d.ts +1 -40
  45. package/lib/index.js +150 -641
  46. package/lib/routing/clientSideSmartOrderRouter.d.ts +5 -0
  47. package/lib/routing/clientSideSmartOrderRouter.js +136 -0
  48. package/lib/routing/gas.d.ts +5 -0
  49. package/lib/routing/gas.js +158 -0
  50. package/lib/routing/types.d.ts +393 -0
  51. package/lib/routing/types.js +424 -0
  52. package/lib/routing/utils.d.ts +28 -0
  53. package/lib/routing/utils.js +319 -0
  54. package/lib/rpc/AppJsonRpcProvider.d.ts +44 -0
  55. package/lib/rpc/AppJsonRpcProvider.js +183 -0
  56. package/lib/rpc/ConfiguredJsonRpcProvider.d.ts +8 -0
  57. package/lib/rpc/ConfiguredJsonRpcProvider.js +35 -0
  58. package/lib/utils/contracts/getContract.d.ts +3 -0
  59. package/lib/utils/contracts/getContract.js +29 -0
  60. package/lib/utils/transformSwapRouteToGetQuoteResult.d.ts +4 -0
  61. package/lib/utils/transformSwapRouteToGetQuoteResult.js +116 -0
  62. package/lib/utils/uniswapData.d.ts +21 -0
  63. package/lib/utils/uniswapData.js +217 -0
  64. package/package.json +11 -8
  65. package/lib/constants/addresses.d.ts +0 -9
  66. package/lib/constants/addresses.js +0 -41
  67. package/lib/constants/eip1193.d.ts +0 -8
  68. package/lib/constants/eip1193.js +0 -14
  69. package/lib/constants/index.d.ts +0 -9
  70. package/lib/constants/index.js +0 -26
  71. package/lib/constants/jsonRpcEndpoints.d.ts +0 -12
  72. package/lib/constants/jsonRpcEndpoints.js +0 -101
  73. package/lib/constants/utils/constructSameAddressMap.d.ts +0 -4
  74. package/lib/constants/utils/constructSameAddressMap.js +0 -19
package/lib/index.js CHANGED
@@ -56,125 +56,23 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
56
56
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
57
57
  }
58
58
  };
59
+ var __importDefault = (this && this.__importDefault) || function (mod) {
60
+ return (mod && mod.__esModule) ? mod : { "default": mod };
61
+ };
59
62
  Object.defineProperty(exports, "__esModule", { value: true });
60
- exports.getDefaultTransactionTtl = exports.LOOKSRARE_TOKEN = exports.LOOKSRARE_REWARDS_DISTRIBUTOR = exports.ROUTER_REWARDS_DISTRIBUTOR = exports.V2_INIT_CODE_HASH_MAINNET = exports.V3_INIT_CODE_HASH_MAINNET = exports.V3_FACTORY_MAINNET = exports.V2_FACTORY_MAINNET = exports.NFTX_ERC_1155_VAULT_ID = exports.NFTX_ERC_1155_VAULT = exports.NFTX_MILADY_VAULT_ID = exports.NFTX_MILADY_VAULT = exports.NFTX_COVEN_VAULT_ID = exports.NFTX_COVEN_VAULT = exports.CRYPTOPUNKS_MARKET_ADDRESS = exports.ENS_NFT_ADDRESS = exports.CAMEO_ADDRESS = exports.MENTAL_WORLDS_ADDRESS = exports.ALPHABETTIES_ADDRESS = exports.MILADY_ADDRESS = exports.TWERKY_ADDRESS = exports.TOWNSTAR_ADDRESS = exports.DECENTRA_DRAGON_ADDRESS = exports.COVEN_ADDRESS = exports.OPENSEA_CONDUIT_KEY = exports.OPENSEA_CONDUIT = exports.SOURCE_ROUTER = exports.SOURCE_MSG_SENDER = exports.ADDRESS_THIS = exports.MSG_SENDER = exports.ONE_PERCENT_BIPS = exports.ZERO_ADDRESS = exports.ETH_ADDRESS = exports.ALICE_ADDRESS = exports.ALREADY_PAID = exports.CONTRACT_BALANCE = exports.DEADLINE = exports.MAX_UINT160 = exports.MAX_UINT = void 0;
61
63
  var TAG = " | Uniswap | ";
64
+ var axios_1 = __importDefault(require("axios"));
65
+ var _a = require("@pioneer-platform/pioneer-caip"), caipToNetworkId = _a.caipToNetworkId, shortListSymbolToCaip = _a.shortListSymbolToCaip, ChainToNetworkId = _a.ChainToNetworkId;
62
66
  var uuid = require('uuidv4').uuid;
63
67
  var log = require('@pioneer-platform/loggerdog')();
64
- var _a = require("@pioneer-platform/pioneer-caip"), caipToNetworkId = _a.caipToNetworkId, shortListSymbolToCaip = _a.shortListSymbolToCaip, ChainToNetworkId = _a.ChainToNetworkId;
65
- var permit2_sdk_1 = require("@uniswap/permit2-sdk");
66
- var _b = require('@pioneer-platform/pioneer-coins'), createMemo = _b.createMemo, parseMemo = _b.parseMemo;
67
- var _c = require('@uniswap/v2-sdk'), Pair = _c.Pair, Route = _c.Route, Trade = _c.Trade, TokenAmount = _c.TokenAmount, WETH = _c.WETH; // Import necessary components from v2-sdk
68
- var constants_1 = require("./constants");
69
- // import JSBI from 'jsbi'
70
- // import { ethers } from 'ethers'
68
+ var _b = require('ethers'), ethers = _b.ethers, BigNumber = _b.BigNumber;
69
+ var ethers_1 = require("ethers");
71
70
  var sdk_core_1 = require("@uniswap/sdk-core");
72
71
  var v3_sdk_1 = require("@uniswap/v3-sdk");
73
- var universal_router_sdk_1 = require("@uniswap/universal-router-sdk");
74
- var _d = require('ethers'), ethers = _d.ethers, BigNumber = _d.BigNumber;
75
- var PERMIT2_BASE = '0x000000000022D473030F116dDEE9F6B43aC78BA3';
76
- // This file is lazy-loaded, so the import of smart-order-router is intentional.
77
- // eslint-disable-next-line @typescript-eslint/no-restricted-imports
78
- var smart_order_router_1 = require("@uniswap/smart-order-router");
79
- //TODO - add all networks
80
72
  var networkSupport = [
81
73
  ChainToNetworkId["ETH"],
82
74
  ChainToNetworkId["BASE"],
83
75
  ];
84
- var router_sdk_1 = require("@uniswap/router-sdk");
85
- var protocols = [router_sdk_1.Protocol.V2, router_sdk_1.Protocol.V3, router_sdk_1.Protocol.MIXED];
86
- module.exports = {
87
- init: function (settings) {
88
- return true;
89
- },
90
- networkSupport: function () {
91
- return networkSupport;
92
- },
93
- getQuote: function (quote) {
94
- return get_quote(quote);
95
- },
96
- getRateUsd: function (token, chainId) {
97
- return getRateUsd(token, chainId);
98
- },
99
- // //buildSwapTx
100
- buildSwapTx: function (quote, permitSig) {
101
- return buildSwapTx(quote);
102
- },
103
- buildPermitTx: function (input) {
104
- return build_permit_tx(input);
105
- }
106
- // buildApprovalTx: function (approval:any) {
107
- // return build_approval_tx(approval);
108
- // }
109
- };
110
- // Router Helpers
111
- exports.MAX_UINT = '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff';
112
- exports.MAX_UINT160 = '0xffffffffffffffffffffffffffffffffffffffff';
113
- exports.DEADLINE = 2000000000;
114
- exports.CONTRACT_BALANCE = '0x8000000000000000000000000000000000000000000000000000000000000000';
115
- exports.ALREADY_PAID = 0;
116
- exports.ALICE_ADDRESS = '0x28c6c06298d514db089934071355e5743bf21d60';
117
- exports.ETH_ADDRESS = ethers.constants.AddressZero;
118
- exports.ZERO_ADDRESS = ethers.constants.AddressZero;
119
- exports.ONE_PERCENT_BIPS = 100;
120
- exports.MSG_SENDER = '0x0000000000000000000000000000000000000001';
121
- exports.ADDRESS_THIS = '0x0000000000000000000000000000000000000002';
122
- exports.SOURCE_MSG_SENDER = true;
123
- exports.SOURCE_ROUTER = false;
124
- // Protocol Data
125
- exports.OPENSEA_CONDUIT = '0x1E0049783F008A0085193E00003D00cd54003c71';
126
- exports.OPENSEA_CONDUIT_KEY = '0x0000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f0000';
127
- // NFT Addresses
128
- exports.COVEN_ADDRESS = '0x5180db8f5c931aae63c74266b211f580155ecac8';
129
- exports.DECENTRA_DRAGON_ADDRESS = '0xAA107cCFe230a29C345Fd97bc6eb9Bd2fccD0750';
130
- exports.TOWNSTAR_ADDRESS = '0xc36cF0cFcb5d905B8B513860dB0CFE63F6Cf9F5c';
131
- exports.TWERKY_ADDRESS = '0xf4680c917a873e2dd6ead72f9f433e74eb9c623c';
132
- exports.MILADY_ADDRESS = '0x5af0d9827e0c53e4799bb226655a1de152a425a5';
133
- exports.ALPHABETTIES_ADDRESS = '0x6d05064fe99e40f1c3464e7310a23ffaded56e20';
134
- exports.MENTAL_WORLDS_ADDRESS = '0xEf96021Af16BD04918b0d87cE045d7984ad6c38c';
135
- exports.CAMEO_ADDRESS = '0x93317E87a3a47821803CAADC54Ae418Af80603DA';
136
- exports.ENS_NFT_ADDRESS = '0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85';
137
- exports.CRYPTOPUNKS_MARKET_ADDRESS = '0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB';
138
- exports.NFTX_COVEN_VAULT = '0xd89b16331f39ab3878daf395052851d3ac8cf3cd';
139
- exports.NFTX_COVEN_VAULT_ID = '333';
140
- exports.NFTX_MILADY_VAULT = '0x227c7df69d3ed1ae7574a1a7685fded90292eb48';
141
- exports.NFTX_MILADY_VAULT_ID = '392';
142
- exports.NFTX_ERC_1155_VAULT = '0x78e09c5ec42d505742a52fd10078a57ea186002a';
143
- exports.NFTX_ERC_1155_VAULT_ID = '61';
144
- // Constructor Params
145
- exports.V2_FACTORY_MAINNET = '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f';
146
- exports.V3_FACTORY_MAINNET = '0x1F98431c8aD98523631AE4a59f267346ea31F984';
147
- exports.V3_INIT_CODE_HASH_MAINNET = '0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54';
148
- exports.V2_INIT_CODE_HASH_MAINNET = '0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f';
149
- exports.ROUTER_REWARDS_DISTRIBUTOR = '0x0000000000000000000000000000000000000000';
150
- exports.LOOKSRARE_REWARDS_DISTRIBUTOR = '0x0554f068365eD43dcC98dcd7Fd7A8208a5638C72';
151
- exports.LOOKSRARE_TOKEN = '0xf4d2888d29D722226FafA5d9B24F9164c092421E';
152
- var BASE_UNIVERSIAL_ROUTER = {
153
- "UniversalRouterV1_2": "0xeC8B0F7Ffe3ae75d7FfAb09429e3675bb63503e4",
154
- "UniversalRouterV1_2_V2Support": "0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD",
155
- "UnsupportedProtocol": "0x9E18Efb3BE848940b0C92D300504Fb08C287FE85"
156
- };
157
- var ETH_UNIVERSIAL_ROUTER = {
158
- "UniversalRouter": "0xEf1c6E67703c7BD7107eed8303Fbe6EC2554BF6B",
159
- "UniversalRouterV1_2": "0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD",
160
- "UnsupportedProtocol": "0x76D631990d505E4e5b432EEDB852A60897824D68"
161
- };
162
- var BASE_CONTRACTS = {
163
- Permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
164
- UniversalRouter: "0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD",
165
- V3CoreFactory: "0x33128a8fC17869897dcE68Ed026d694621f6FDfD",
166
- Multicall: "0x091e99cb1C49331a94dD62755D168E941AbD0693",
167
- ProxyAdmin: "0x3334d83e224aF5ef9C2E7DDA7c7C98Efd9621fA9",
168
- TickLens: "0x0CdeE061c75D43c82520eD998C23ac2991c9ac6d",
169
- NftDescriptor: "0xF9d1077fd35670d4ACbD27af82652a8d84577d9F",
170
- NonfungibleTokenPositionDescriptor: "0x4f225937EDc33EFD6109c4ceF7b560B2D6401009",
171
- DescriptorProxy: "0x4615C383F85D0a2BbED973d83ccecf5CB7121463",
172
- NonfungibleTokenPositionManager: "0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1",
173
- V3Migrator: "0x23cF10b1ee3AdfCA73B0eF17C07F7577e7ACd2d7",
174
- V3Staker: "0x42bE4D6527829FeFA1493e1fb9F3676d2425C3C1",
175
- QuoterV2: "0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a",
176
- SwapRouter: "0x2626664c2603336E57B271c5C0b26F421741e481"
177
- };
178
76
  var EIP155_MAINNET_CHAINS = {
179
77
  'eip155:1': {
180
78
  chainId: 1,
@@ -182,52 +80,18 @@ var EIP155_MAINNET_CHAINS = {
182
80
  name: 'Ethereum',
183
81
  logo: '/chain-logos/eip155-1.png',
184
82
  rgb: '99, 125, 234',
185
- permit2: permit2_sdk_1.PERMIT2_ADDRESS,
186
- universalRouter: universal_router_sdk_1.UNIVERSAL_ROUTER_ADDRESS,
83
+ universalRouter: '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D',
187
84
  rpc: 'https://eth.llamarpc.com',
188
85
  defaultGasLimit: 250000,
189
86
  namespace: 'eip155'
190
87
  },
191
- // 'eip155:43114': {
192
- // chainId: 43114,
193
- // name: 'Avalanche C-Chain',
194
- // logo: '/chain-logos/eip155-43113.png',
195
- // rgb: '232, 65, 66',
196
- // rpc: 'https://api.avax.network/ext/bc/C/rpc',
197
- // namespace: 'eip155'
198
- // },
199
- // 'eip155:137': {
200
- // chainId: 137,
201
- // name: 'Polygon',
202
- // logo: '/chain-logos/eip155-137.png',
203
- // rgb: '130, 71, 229',
204
- // rpc: 'https://polygon-rpc.com/',
205
- // namespace: 'eip155'
206
- // },
207
- // 'eip155:10': {
208
- // chainId: 10,
209
- // name: 'Optimism',
210
- // logo: '/chain-logos/eip155-10.png',
211
- // rgb: '235, 0, 25',
212
- // rpc: 'https://mainnet.optimism.io',
213
- // namespace: 'eip155'
214
- // },
215
- // 'eip155:324': {
216
- // chainId: 324,
217
- // name: 'zkSync Era',
218
- // logo: '/chain-logos/eip155-324.svg',
219
- // rgb: '242, 242, 242',
220
- // rpc: 'https://mainnet.era.zksync.io/',
221
- // namespace: 'eip155'
222
- // },
223
88
  'eip155:8453': {
224
89
  chainId: 8453,
225
90
  WETH: '0x4200000000000000000000000000000000000006',
226
91
  name: 'Base',
227
92
  logo: '/chain-logos/base.png',
228
93
  rgb: '242, 242, 242',
229
- permit2: BASE_CONTRACTS.Permit2,
230
- universalRouter: BASE_CONTRACTS.UniversalRouter,
94
+ universalRouter: '0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD',
231
95
  rpc: 'https://mainnet.base.org',
232
96
  defaultGasLimit: 135120,
233
97
  namespace: 'eip155'
@@ -235,389 +99,33 @@ var EIP155_MAINNET_CHAINS = {
235
99
  };
236
100
  var ERC20_ABI = [
237
101
  "function allowance(address owner, address spender) view returns (uint256)",
238
- "function decimals() view returns (uint8)",
239
102
  "function balanceOf(address owner) view returns (uint256)",
240
103
  "function approve(address spender, uint256 amount) returns (bool)",
241
- "function transfer(address to, uint256 amount) returns (bool)"
104
+ "function transfer(address to, uint256 amount) returns (bool)",
105
+ "function symbol() view returns (string)",
106
+ "function decimals() view returns (uint8)"
242
107
  ];
243
- var routersCache = new WeakMap();
244
- function getRouter(chainId, provider) {
245
- var routers = routersCache.get(provider) || {};
246
- var cached = routers[chainId];
247
- if (cached)
248
- return cached;
249
- // V2 is unsupported for chains other than mainnet.
250
- // TODO(zzmp): Upstream to @uniswap/smart-order-router, exporting an enum of supported v2 chains for clarity.
251
- var v2SubgraphProvider;
252
- if (chainId !== sdk_core_1.ChainId.MAINNET) {
253
- v2SubgraphProvider = new smart_order_router_1.StaticV2SubgraphProvider(chainId);
254
- }
255
- // V3 computes on-chain, so the quoter must have gas limits appropriate to the provider.
256
- // Most defaults are fine, but polygon needs a lower gas limit.
257
- // TODO(zzmp): Upstream to @uniswap/smart-order-router, possibly making this easier to modify
258
- // (eg allowing configuration without an instance to avoid duplicating multicall2Provider).
259
- var onChainQuoteProvider;
260
- var multicall2Provider;
261
- if ([sdk_core_1.ChainId.POLYGON, sdk_core_1.ChainId.POLYGON_MUMBAI].includes(chainId)) {
262
- multicall2Provider = new smart_order_router_1.UniswapMulticallProvider(chainId, provider, 375000);
263
- // See https://github.com/Uniswap/smart-order-router/blob/98c58bdee9981fd9ffac9e7d7a97b18302d5f77a/src/routers/alpha-router/alpha-router.ts#L464-L487
264
- onChainQuoteProvider = new smart_order_router_1.OnChainQuoteProvider(chainId, provider, multicall2Provider, {
265
- retries: 2,
266
- minTimeout: 100,
267
- maxTimeout: 1000,
268
- }, {
269
- multicallChunk: 10,
270
- gasLimitPerCall: 5000000,
271
- quoteMinSuccessRate: 0.1,
272
- }, {
273
- gasLimitOverride: 5000000,
274
- multicallChunk: 5,
275
- }, {
276
- gasLimitOverride: 6250000,
277
- multicallChunk: 4,
278
- });
108
+ module.exports = {
109
+ init: function (settings) {
110
+ return true;
111
+ },
112
+ networkSupport: function () {
113
+ return networkSupport;
114
+ },
115
+ getQuote: function (quote) {
116
+ return get_quote(quote);
279
117
  }
280
- var router = new smart_order_router_1.AlphaRouter({ chainId: chainId, provider: provider, v2SubgraphProvider: v2SubgraphProvider, multicall2Provider: multicall2Provider, onChainQuoteProvider: onChainQuoteProvider });
281
- routers[chainId] = router;
282
- routersCache.set(provider, routers);
283
- return router;
284
- }
285
- var SwapRouterNativeAssets;
286
- (function (SwapRouterNativeAssets) {
287
- SwapRouterNativeAssets["MATIC"] = "MATIC";
288
- SwapRouterNativeAssets["ETH"] = "ETH";
289
- })(SwapRouterNativeAssets || (SwapRouterNativeAssets = {}));
290
- // interface SwapOptions {
291
- // slippageTolerance: Percent
292
- // deadline?: BigNumber
293
- // permit?: PermitSignature
294
- // feeOptions?: FeeOptions
295
- // }
296
- var getRoute = function (_a) {
297
- var sellToken = _a.sellToken, buyToken = _a.buyToken, chainId = _a.chainId, amountIn = _a.amountIn, provider = _a.provider;
298
- return __awaiter(this, void 0, void 0, function () {
299
- var tag, router, amount, route, e_1;
300
- return __generator(this, function (_b) {
301
- switch (_b.label) {
302
- case 0:
303
- tag = " | getRoute | ";
304
- _b.label = 1;
305
- case 1:
306
- _b.trys.push([1, 3, , 4]);
307
- log.info(tag, "sellToken: ", sellToken);
308
- log.info(tag, "buyToken: ", buyToken);
309
- router = getRouter(chainId, provider);
310
- amount = sdk_core_1.CurrencyAmount.fromRawAmount(buyToken, BigNumber.from(amountIn !== null && amountIn !== void 0 ? amountIn : '1'));
311
- // const amount = CurrencyAmount.fromRawAmount(buyToken, JSBI.BigInt(amountIn ?? '1')) // a null amountRaw should initialize the route
312
- log.info(tag, "amount: ", amount);
313
- return [4 /*yield*/, router.route(amount, sellToken, sdk_core_1.TradeType.EXACT_INPUT, /*swapConfig=*/ undefined, { protocols: protocols })];
314
- case 2:
315
- route = _b.sent();
316
- log.info(tag, "route: ", route);
317
- return [2 /*return*/, route];
318
- case 3:
319
- e_1 = _b.sent();
320
- console.error(tag, "Error in getRoute: ", e_1);
321
- throw e_1;
322
- case 4: return [2 /*return*/];
323
- }
324
- });
325
- });
326
- };
327
- var isZero = function isZero(hexNumberString) {
328
- return hexNumberString === '0' || /^0x0*$/.test(hexNumberString);
329
- };
330
- /** Returns the default transaction TTL for the chain, in minutes. */
331
- function getDefaultTransactionTtl(chainId) {
332
- if (chainId && constants_1.L2_CHAIN_IDS.includes(chainId))
333
- return constants_1.L2_DEADLINE_FROM_NOW / 60;
334
- return constants_1.DEFAULT_DEADLINE_FROM_NOW / 60;
335
- }
336
- exports.getDefaultTransactionTtl = getDefaultTransactionTtl;
337
- var getDeadline = function (provider) { return __awaiter(void 0, void 0, void 0, function () {
338
- var block, deadline, error_1;
339
- return __generator(this, function (_a) {
340
- switch (_a.label) {
341
- case 0:
342
- _a.trys.push([0, 2, , 3]);
343
- return [4 /*yield*/, provider.getBlock('latest')];
344
- case 1:
345
- block = _a.sent();
346
- deadline = block.timestamp + 60 * 60;
347
- console.log("Current Block Timestamp: ".concat(block.timestamp));
348
- console.log("Deadline (60 minutes later): ".concat(deadline));
349
- return [2 /*return*/, deadline];
350
- case 2:
351
- error_1 = _a.sent();
352
- console.error('Error fetching block or calculating deadline:', error_1);
353
- return [2 /*return*/, null];
354
- case 3: return [2 /*return*/];
355
- }
356
- });
357
- }); };
358
- var buildSwapTx = function (_a) {
359
- var trade = _a.trade, permit = _a.permit, from = _a.from, chainId = _a.chainId, provider = _a.provider;
360
- return __awaiter(this, void 0, void 0, function () {
361
- var tag, BIPS_BASE, slippageTolerance, deadline, responseRouter, data, value, nonce, gas, estimatedGas, e_2, gasPrice, adjustedGasPrice, tx, e_3;
362
- return __generator(this, function (_b) {
363
- switch (_b.label) {
364
- case 0:
365
- tag = TAG + " | buildTx | ";
366
- _b.label = 1;
367
- case 1:
368
- _b.trys.push([1, 9, , 10]);
369
- BIPS_BASE = BigNumber.from(10000);
370
- slippageTolerance = new sdk_core_1.Percent(BigNumber.from(200), BIPS_BASE);
371
- log.info(tag, "slippageTolerance: ", slippageTolerance);
372
- //buildTx
373
- log.info(tag, "trade: ", trade.tradeType);
374
- log.info(tag, "swaps: ", trade.swaps[0]);
375
- log.info(tag, "routes: ", trade.routes[0]);
376
- return [4 /*yield*/, getDeadline(provider)];
377
- case 2:
378
- deadline = _b.sent();
379
- log.info(tag, "deadline: ", deadline);
380
- log.info(tag, "permit FINAL: ", permit);
381
- log.info(tag, "INPUT FINAL: ", trade, {
382
- recipient: from,
383
- slippageTolerance: slippageTolerance,
384
- deadlineOrPreviousBlockhash: deadline,
385
- inputTokenPermit: permit,
386
- // fee: options.feeOptions,
387
- });
388
- responseRouter = universal_router_sdk_1.SwapRouter.swapERC20CallParameters(trade, {
389
- recipient: from,
390
- slippageTolerance: slippageTolerance,
391
- deadlineOrPreviousBlockhash: deadline,
392
- inputTokenPermit: permit,
393
- // fee: options.feeOptions,
394
- });
395
- log.info(tag, "responseRouter: ", responseRouter);
396
- data = responseRouter.calldata;
397
- value = responseRouter.value;
398
- return [4 /*yield*/, provider.getTransactionCount(from, "latest")];
399
- case 3:
400
- nonce = _b.sent();
401
- gas = "0x".concat(BigInt("135120").toString(16));
402
- _b.label = 4;
403
- case 4:
404
- _b.trys.push([4, 6, , 7]);
405
- return [4 /*yield*/, provider.estimateGas({
406
- from: from,
407
- to: EIP155_MAINNET_CHAINS['eip155:' + chainId].universalRouter, // Uniswap Router address
408
- data: data,
409
- value: ethers.utils.parseEther("0"), // Value for token swaps
410
- })];
411
- case 5:
412
- estimatedGas = _b.sent();
413
- console.log("estimatedGas: ", estimatedGas);
414
- gas = "0x".concat(estimatedGas.toString(16));
415
- return [3 /*break*/, 7];
416
- case 6:
417
- e_2 = _b.sent();
418
- console.error("Error in estimateGas: ", e_2);
419
- //@TODO get custom gas limit defaults per chain
420
- gas = "0x".concat(BigInt("335120").toString(16));
421
- return [3 /*break*/, 7];
422
- case 7: return [4 /*yield*/, provider.getGasPrice()];
423
- case 8:
424
- gasPrice = _b.sent();
425
- adjustedGasPrice = gasPrice.mul(ethers.BigNumber.from(110)).div(ethers.BigNumber.from(100));
426
- tx = __assign(__assign({ from: from, to: EIP155_MAINNET_CHAINS['eip155:' + chainId].universalRouter, chainId: chainId, data: data }, (value && !isZero(value) ? { value: (0, v3_sdk_1.toHex)(value) } : {})), { gas: gas, gasPrice: (0, v3_sdk_1.toHex)(adjustedGasPrice), nonce: (0, v3_sdk_1.toHex)(nonce) });
427
- return [2 /*return*/, tx];
428
- case 9:
429
- e_3 = _b.sent();
430
- console.error(e_3);
431
- return [3 /*break*/, 10];
432
- case 10: return [2 /*return*/];
433
- }
434
- });
435
- });
436
- };
437
- var getRateUsd = function (token, chainId) {
438
- return __awaiter(this, void 0, void 0, function () {
439
- var tag, providerUrl, provider, sellTokenContract, path, sellTokenDecimals, _a, sellToken, buyToken, route, trade, amountOut, e_4;
440
- return __generator(this, function (_b) {
441
- switch (_b.label) {
442
- case 0:
443
- tag = TAG + " | getRateUsd | ";
444
- _b.label = 1;
445
- case 1:
446
- _b.trys.push([1, 6, , 7]);
447
- providerUrl = EIP155_MAINNET_CHAINS['eip155:' + chainId].rpc;
448
- provider = new ethers.providers.JsonRpcProvider(providerUrl);
449
- sellTokenContract = new ethers.Contract(token, ERC20_ABI, provider);
450
- path = [sellTokenContract.address, EIP155_MAINNET_CHAINS['eip155:' + chainId].WETH];
451
- if (!(token !== ethers.constants.AddressZero)) return [3 /*break*/, 3];
452
- return [4 /*yield*/, new ethers.Contract(token, ERC20_ABI, provider).decimals()];
453
- case 2:
454
- _a = _b.sent();
455
- return [3 /*break*/, 4];
456
- case 3:
457
- _a = 18;
458
- _b.label = 4;
459
- case 4:
460
- sellTokenDecimals = _a;
461
- log.info("".concat(tag, " sellTokenDecimals: ").concat(sellTokenDecimals));
462
- sellToken = new sdk_core_1.Token(parseInt(chainId), token, sellTokenDecimals);
463
- console.log('WETH[ChainId.MAINNET]: ', EIP155_MAINNET_CHAINS['eip155:' + chainId].WETH);
464
- buyToken = new sdk_core_1.Token(parseInt(chainId), EIP155_MAINNET_CHAINS['eip155:' + chainId].WETH, sellTokenDecimals);
465
- return [4 /*yield*/, getRoute({
466
- sellToken: sellToken,
467
- buyToken: buyToken,
468
- chainId: parseInt(chainId),
469
- amountIn: ethers.utils.parseUnits('1', sellTokenDecimals),
470
- provider: provider
471
- })];
472
- case 5:
473
- route = _b.sent();
474
- console.log("route: ", route);
475
- if (!route)
476
- throw new Error("missing route, failed to find route");
477
- trade = route.trade;
478
- log.info(tag, "trade: ", trade);
479
- amountOut = trade.swaps[0].outputAmount;
480
- log.info(tag, "amountOut: ", amountOut);
481
- return [2 /*return*/, amountOut.toFixed(18)];
482
- case 6:
483
- e_4 = _b.sent();
484
- console.error(e_4);
485
- return [3 /*break*/, 7];
486
- case 7: return [2 /*return*/];
487
- }
488
- });
489
- });
490
- };
491
- var buildApprovalTx = function (_a) {
492
- var from = _a.from, contract = _a.contract, address = _a.address, chainId = _a.chainId, provider = _a.provider;
493
- return __awaiter(this, void 0, void 0, function () {
494
- var tag, data, value, nonce, gas, estimatedGas, e_5, gasPrice, adjustedGasPrice, tx, e_6;
495
- return __generator(this, function (_b) {
496
- switch (_b.label) {
497
- case 0:
498
- tag = TAG + " | buildTx | ";
499
- _b.label = 1;
500
- case 1:
501
- _b.trys.push([1, 8, , 9]);
502
- //
503
- // let result = await contract.approve(contract.address, address, ethers.constants.MaxUint256)
504
- console.log(tag, "from: ", from);
505
- data = contract.interface.encodeFunctionData("approve", [address, ethers.constants.MaxUint256]);
506
- console.log(tag, "data: ", data);
507
- value = '0x';
508
- return [4 /*yield*/, provider.getTransactionCount(from, "latest")];
509
- case 2:
510
- nonce = _b.sent();
511
- gas = "0x".concat(BigInt("135120").toString(16));
512
- _b.label = 3;
513
- case 3:
514
- _b.trys.push([3, 5, , 6]);
515
- return [4 /*yield*/, provider.estimateGas({
516
- from: from,
517
- to: EIP155_MAINNET_CHAINS['eip155:' + chainId].universalRouter, // Uniswap Router address
518
- data: data,
519
- value: ethers.utils.parseEther("0"), // Value for token swaps
520
- })];
521
- case 4:
522
- estimatedGas = _b.sent();
523
- console.log("estimatedGas: ", estimatedGas);
524
- gas = "0x".concat(estimatedGas.toString(16));
525
- return [3 /*break*/, 6];
526
- case 5:
527
- e_5 = _b.sent();
528
- console.error("Error in estimateGas: ", e_5);
529
- //@TODO get custom gas limit defaults per chain
530
- gas = "0x".concat(BigInt("335120").toString(16));
531
- return [3 /*break*/, 6];
532
- case 6: return [4 /*yield*/, provider.getGasPrice()];
533
- case 7:
534
- gasPrice = _b.sent();
535
- adjustedGasPrice = gasPrice.mul(ethers.BigNumber.from(110)).div(ethers.BigNumber.from(100));
536
- tx = __assign(__assign({ from: from, to: contract.address, chainId: chainId, data: data }, (value && !isZero(value) ? { value: (0, v3_sdk_1.toHex)(value) } : {})), { gas: gas, gasPrice: (0, v3_sdk_1.toHex)(adjustedGasPrice), nonce: (0, v3_sdk_1.toHex)(nonce) });
537
- return [2 /*return*/, tx];
538
- case 8:
539
- e_6 = _b.sent();
540
- console.error(e_6);
541
- return [3 /*break*/, 9];
542
- case 9: return [2 /*return*/];
543
- }
544
- });
545
- });
546
- };
547
- function toDeadline(expiration) {
548
- return Math.floor((Date.now() + expiration) / 1000);
549
- }
550
- var build_permit_tx = function (_a) {
551
- var from = _a.from, token = _a.token, amount = _a.amount, chainId = _a.chainId;
552
- return __awaiter(this, void 0, void 0, function () {
553
- var PERMIT_EXPIRATION, PERMIT_SIG_EXPIRATION, providerUrl, provider, nonce, permit, fullResponse, domain, types, values, typedData, tx, e_7;
554
- return __generator(this, function (_b) {
555
- switch (_b.label) {
556
- case 0:
557
- _b.trys.push([0, 2, , 3]);
558
- PERMIT_EXPIRATION = 2592000000;
559
- PERMIT_SIG_EXPIRATION = 1800000;
560
- providerUrl = EIP155_MAINNET_CHAINS['eip155:' + chainId].rpc;
561
- if (!providerUrl)
562
- throw new Error("missing providerUrl");
563
- log.info("providerUrl: ", providerUrl);
564
- provider = new ethers.providers.JsonRpcProvider(providerUrl);
565
- return [4 /*yield*/, provider.getTransactionCount(from, "latest")];
566
- case 1:
567
- nonce = _b.sent();
568
- permit = {
569
- details: {
570
- token: token,
571
- amount: amount,
572
- expiration: toDeadline(PERMIT_EXPIRATION),
573
- nonce: 0,
574
- },
575
- spender: EIP155_MAINNET_CHAINS['eip155:' + chainId].universalRouter,
576
- sigDeadline: toDeadline(PERMIT_SIG_EXPIRATION),
577
- };
578
- console.log("permit: ", permit);
579
- fullResponse = permit2_sdk_1.AllowanceTransfer.getPermitData(permit, permit2_sdk_1.PERMIT2_ADDRESS, chainId);
580
- log.info("fullResponse: ", fullResponse);
581
- domain = fullResponse.domain, types = fullResponse.types, values = fullResponse.values;
582
- // Ensure 'EIP712Domain' is included in the types definitions
583
- // If it's not already present or not recognized for some reason, define it explicitly
584
- if (!types['EIP712Domain']) {
585
- types['EIP712Domain'] = [
586
- { name: "name", type: "string" },
587
- { name: "chainId", type: "uint256" },
588
- { name: "verifyingContract", type: "address" },
589
- ];
590
- }
591
- typedData = {
592
- domain: domain,
593
- types: types,
594
- message: values, // Use 'values' as the 'message' for EIP712 signing
595
- primaryType: "PermitSingle" // Assuming 'PermitSingle' as the primaryType based on your types definition
596
- };
597
- tx = {
598
- type: 'signTypedData',
599
- txParams: typedData // Ensuring txParams contains the correctly formatted EIP-712 data
600
- };
601
- return [2 /*return*/, tx];
602
- case 2:
603
- e_7 = _b.sent();
604
- console.error(e_7);
605
- return [3 /*break*/, 3];
606
- case 3: return [2 /*return*/];
607
- }
608
- });
609
- });
610
118
  };
611
119
  var get_quote = function (quote) {
612
120
  return __awaiter(this, void 0, void 0, function () {
613
- var tag, output, slippageTolerance, recipient, inputChain, outputChain, providerUrl, chainIdInt, provider, sellTokenContract, buyTokenContract, buyTokenAddress_1, balance, sellTokenAddress_1, permit2, router, planner, sellAmountBigNumber, path, permit2Address, currentAllowance, allowanceTx, formattedAllowanceTx, _a, sellTokenAddress, buyTokenAddress, sellTokenDecimals, _b, buyTokenDecimals, _c, amountInBigNumber, sellToken, buyToken, route, trade, amountOut, PERMIT_EXPIRATION, PERMIT_SIG_EXPIRATION, nonce, permit, tx, e_8;
614
- return __generator(this, function (_d) {
615
- switch (_d.label) {
121
+ var tag, output, from, recipient, inputChain, outputChain, providerUrl, chainIdInt, chainId, provider, sellTokenContract, buyTokenContract, BUY_TOKEN, SELL_TOKEN, BUY_TOKEN_ADDRESS, SELL_TOKEN_ADDRESS, buyTokenAddress, symbolBuy, decimalsBuy, balance, sellTokenAddress, symbolSell, decimalsSell, FEE_AMOUNT, inputPRO, args, Protocol, QuoteIntent, CLIENT_PARAMS, tokenIn, tokenInChainId, tokenOut, tokenOutChainId, amount, tradeType, sendPortionEnabled, requestBody, response, uraQuoteResponse, calldata, value, nonce, gas, gasPrice, adjustedGasPrice, isZero, tx, e_1;
122
+ return __generator(this, function (_a) {
123
+ switch (_a.label) {
616
124
  case 0:
617
125
  tag = TAG + " | get_quote | ";
618
- _d.label = 1;
126
+ _a.label = 1;
619
127
  case 1:
620
- _d.trys.push([1, 16, , 17]);
128
+ _a.trys.push([1, 14, , 15]);
621
129
  output = {};
622
130
  if (!quote.sellAsset)
623
131
  throw new Error("missing sellAsset");
@@ -631,10 +139,9 @@ var get_quote = function (quote) {
631
139
  throw new Error("missing recipientAddress");
632
140
  if (!quote.slippage)
633
141
  throw new Error("missing slippage");
634
- if (!quote.permit2)
635
- throw new Error("missing permit2, required for uniswap");
142
+ // if(!quote.permit2) throw new Error("missing permit2, required for uniswap")
636
143
  output.txs = [];
637
- slippageTolerance = quote.slippage;
144
+ from = quote.senderAddress;
638
145
  recipient = quote.recipientAddress;
639
146
  inputChain = caipToNetworkId(quote.sellAsset);
640
147
  outputChain = caipToNetworkId(quote.buyAsset);
@@ -647,136 +154,138 @@ var get_quote = function (quote) {
647
154
  log.info("providerUrl: ", providerUrl);
648
155
  chainIdInt = parseInt(inputChain.replace('eip155:', ''));
649
156
  log.info(tag, "chainIdInt: ", chainIdInt);
157
+ chainId = chainIdInt;
650
158
  provider = new ethers.providers.JsonRpcProvider(providerUrl);
651
159
  sellTokenContract = void 0, buyTokenContract = void 0;
652
- if (!(quote.buyAsset.indexOf('erc20') > -1)) return [3 /*break*/, 3];
653
- buyTokenAddress_1 = quote.buyAsset.split(":")[2].toLowerCase();
654
- log.info("buyTokenAddress: ", buyTokenAddress_1);
655
- buyTokenContract = new ethers.Contract(buyTokenAddress_1.toLowerCase(), ERC20_ABI, provider);
656
- return [4 /*yield*/, buyTokenContract.balanceOf(quote.senderAddress)];
160
+ BUY_TOKEN = void 0, SELL_TOKEN = void 0;
161
+ BUY_TOKEN_ADDRESS = void 0, SELL_TOKEN_ADDRESS = void 0;
162
+ if (!(quote.buyAsset.indexOf('erc20') > -1)) return [3 /*break*/, 5];
163
+ buyTokenAddress = quote.buyAsset.split(":")[2].toLowerCase();
164
+ BUY_TOKEN_ADDRESS = buyTokenAddress;
165
+ log.info("buyTokenAddress: ", buyTokenAddress);
166
+ buyTokenContract = new ethers.Contract(buyTokenAddress.toLowerCase(), ERC20_ABI, provider);
167
+ return [4 /*yield*/, buyTokenContract.symbol()];
657
168
  case 2:
658
- balance = _d.sent();
659
- log.info("balance: ", balance.toString());
660
- _d.label = 3;
169
+ symbolBuy = _a.sent();
170
+ return [4 /*yield*/, buyTokenContract.decimals()];
661
171
  case 3:
662
- if (quote.sellAsset.indexOf('erc20') > -1) {
663
- sellTokenAddress_1 = quote.sellAsset.split(":")[2].toLowerCase();
664
- log.info("sellTokenAddress: ", sellTokenAddress_1);
665
- sellTokenContract = new ethers.Contract(sellTokenAddress_1, ERC20_ABI, provider);
666
- }
667
- permit2 = permit2_sdk_1.PERMIT2_ADDRESS;
668
- router = universal_router_sdk_1.UNIVERSAL_ROUTER_ADDRESS;
669
- planner = new universal_router_sdk_1.RoutePlanner();
670
- sellAmountBigNumber = ethers.utils.parseUnits(quote.sellAmount.toString(), 'ether');
671
- path = void 0;
672
- //build path
673
- if (sellTokenContract && !buyTokenContract) {
674
- path = [sellTokenContract.address, EIP155_MAINNET_CHAINS[inputChain].WETH];
675
- }
676
- else if (!sellTokenContract && buyTokenContract) {
677
- path = [EIP155_MAINNET_CHAINS[inputChain].WETH, buyTokenContract.address];
678
- }
679
- else if (sellTokenContract && buyTokenContract) {
680
- path = [sellTokenContract.address, buyTokenContract.address];
681
- }
682
- log.info("path: ", path);
683
- // @ts-ignore
684
- if ((path[0] !== undefined && path[1] !== undefined) && path[0] === path[1]) {
685
- throw new Error("Both tokens are the same");
686
- }
687
- if (!path)
688
- throw new Error("missing path");
689
- if (!sellTokenContract) return [3 /*break*/, 6];
690
- permit2Address = EIP155_MAINNET_CHAINS[inputChain].permit2;
691
- if (!permit2Address)
692
- throw new Error("missing permit2Address for chain: " + inputChain);
693
- console.log("sellTokenContract: ", sellTokenContract);
694
- log.info(tag, "permit2Address: ", permit2Address);
695
- log.info(tag, "quote.senderAddress: ", quote.senderAddress.toLowerCase());
696
- return [4 /*yield*/, sellTokenContract.allowance(quote.senderAddress.toLowerCase(), permit2)];
172
+ decimalsBuy = _a.sent();
173
+ return [4 /*yield*/, buyTokenContract.balanceOf(quote.senderAddress)];
697
174
  case 4:
698
- currentAllowance = _d.sent();
699
- console.log("currentAllowance: ", currentAllowance.toString());
700
- console.log("sellAmountBigNumber: ", sellAmountBigNumber.toString());
701
- if (!currentAllowance.lt(sellAmountBigNumber)) return [3 /*break*/, 6];
702
- return [4 /*yield*/, buildApprovalTx({ provider: provider, contract: sellTokenContract, address: EIP155_MAINNET_CHAINS['eip155:' + chainIdInt].universalRouter, from: quote.senderAddress, chainId: chainIdInt })];
175
+ balance = _a.sent();
176
+ log.info("balance: ", balance.toString());
177
+ BUY_TOKEN = new sdk_core_1.Token(8453, buyTokenAddress, decimalsBuy, symbolBuy, symbolBuy.toLowerCase());
178
+ return [3 /*break*/, 6];
703
179
  case 5:
704
- allowanceTx = _d.sent();
705
- console.log("allowanceTx: ", allowanceTx);
706
- formattedAllowanceTx = {
707
- type: "evm",
708
- description: 'approve router to spend tokens',
709
- chain: inputChain,
710
- txParams: allowanceTx
711
- };
712
- output.txs.push(formattedAllowanceTx);
713
- _d.label = 6;
180
+ BUY_TOKEN = new sdk_core_1.Token(8453, '0x4200000000000000000000000000000000000006', 18, 'WETH');
181
+ BUY_TOKEN_ADDRESS = '0x4200000000000000000000000000000000000006';
182
+ _a.label = 6;
714
183
  case 6:
715
- _a = path.map(function (address) { return ethers.utils.getAddress(address); }), sellTokenAddress = _a[0], buyTokenAddress = _a[1];
716
- console.info("".concat(tag, " sellTokenAddress: ").concat(sellTokenAddress, ", buyTokenAddress: ").concat(buyTokenAddress));
717
- if (!(sellTokenAddress !== ethers.constants.AddressZero)) return [3 /*break*/, 8];
718
- return [4 /*yield*/, new ethers.Contract(sellTokenAddress, ERC20_ABI, provider).decimals()];
184
+ if (!(quote.sellAsset.indexOf('erc20') > -1)) return [3 /*break*/, 9];
185
+ sellTokenAddress = quote.sellAsset.split(":")[2].toLowerCase();
186
+ SELL_TOKEN_ADDRESS = sellTokenAddress;
187
+ log.info("sellTokenAddress: ", sellTokenAddress);
188
+ sellTokenContract = new ethers.Contract(sellTokenAddress, ERC20_ABI, provider);
189
+ return [4 /*yield*/, sellTokenContract.symbol()];
719
190
  case 7:
720
- _b = _d.sent();
721
- return [3 /*break*/, 9];
191
+ symbolSell = _a.sent();
192
+ return [4 /*yield*/, sellTokenContract.decimals()];
722
193
  case 8:
723
- _b = 18;
724
- _d.label = 9;
194
+ decimalsSell = _a.sent();
195
+ SELL_TOKEN = new sdk_core_1.Token(8453, sellTokenAddress, decimalsSell, symbolSell, symbolSell.toLowerCase());
196
+ return [3 /*break*/, 10];
725
197
  case 9:
726
- sellTokenDecimals = _b;
727
- if (!(buyTokenAddress !== ethers.constants.AddressZero)) return [3 /*break*/, 11];
728
- return [4 /*yield*/, new ethers.Contract(buyTokenAddress, ERC20_ABI, provider).decimals()];
198
+ //WETH
199
+ SELL_TOKEN = new sdk_core_1.Token(8453, '0x4200000000000000000000000000000000000006', 18, 'WETH');
200
+ SELL_TOKEN_ADDRESS = '0x4200000000000000000000000000000000000006';
201
+ _a.label = 10;
729
202
  case 10:
730
- _c = _d.sent();
731
- return [3 /*break*/, 12];
203
+ FEE_AMOUNT = v3_sdk_1.FeeAmount.MEDIUM;
204
+ inputPRO = ethers_1.utils.parseUnits('1000', 18).toString();
205
+ args = {
206
+ tokenInAddress: SELL_TOKEN_ADDRESS,
207
+ tokenInChainId: chainIdInt,
208
+ tokenOutAddress: BUY_TOKEN_ADDRESS,
209
+ tokenOutChainId: chainIdInt,
210
+ amount: "10000000000000000000",
211
+ tradeType: 'EXACT_INPUT',
212
+ sendPortionEnabled: false,
213
+ };
214
+ Protocol = void 0;
215
+ (function (Protocol) {
216
+ Protocol["V2"] = "V2";
217
+ Protocol["V3"] = "V3";
218
+ Protocol["MIXED"] = "MIXED";
219
+ })(Protocol || (Protocol = {}));
220
+ QuoteIntent = void 0;
221
+ (function (QuoteIntent) {
222
+ QuoteIntent["Pricing"] = "pricing";
223
+ QuoteIntent["Quote"] = "quote";
224
+ })(QuoteIntent || (QuoteIntent = {}));
225
+ CLIENT_PARAMS = {
226
+ protocols: [Protocol.V2, Protocol.V3, Protocol.MIXED],
227
+ };
228
+ tokenIn = args.tokenInAddress, tokenInChainId = args.tokenInChainId, tokenOut = args.tokenOutAddress, tokenOutChainId = args.tokenOutChainId, amount = args.amount, tradeType = args.tradeType, sendPortionEnabled = args.sendPortionEnabled;
229
+ requestBody = {
230
+ tokenInChainId: tokenInChainId,
231
+ tokenIn: tokenIn,
232
+ tokenOutChainId: tokenOutChainId,
233
+ tokenOut: tokenOut,
234
+ amount: amount,
235
+ sendPortionEnabled: sendPortionEnabled,
236
+ type: 'EXACT_INPUT',
237
+ intent: QuoteIntent.Quote,
238
+ configs: [
239
+ {
240
+ "protocols": [
241
+ "V2",
242
+ "V3",
243
+ "MIXED"
244
+ ],
245
+ "enableUniversalRouter": true,
246
+ "routingType": "CLASSIC",
247
+ "recipient": from,
248
+ "enableFeeOnTransferFeeFetching": true
249
+ }
250
+ ],
251
+ };
252
+ return [4 /*yield*/, (0, axios_1.default)({
253
+ method: 'POST',
254
+ url: 'https://interface.gateway.uniswap.org/v2/quote',
255
+ data: requestBody,
256
+ headers: {
257
+ 'x-request-source': 'uniswap-web',
258
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
259
+ 'Origin': 'http://localhost:3000',
260
+ 'Referer': 'http://localhost:3000',
261
+ 'Accept': 'application/json, text/plain, */*',
262
+ 'Content-Type': 'application/json'
263
+ }
264
+ })];
732
265
  case 11:
733
- _c = 18;
734
- _d.label = 12;
266
+ response = _a.sent();
267
+ log.info(tag, 'response', response.data);
268
+ uraQuoteResponse = response.data;
269
+ log.info(tag, 'uraQuoteResponse', uraQuoteResponse);
270
+ calldata = uraQuoteResponse.quote.methodParameters.calldata;
271
+ value = uraQuoteResponse.quote.methodParameters.value;
272
+ log.info("calldata: ", calldata);
273
+ log.info("value: ", value);
274
+ return [4 /*yield*/, provider.getTransactionCount(from, "latest")];
735
275
  case 12:
736
- buyTokenDecimals = _c;
737
- log.info("".concat(tag, " sellTokenDecimals: ").concat(sellTokenDecimals, ", buyTokenDecimals: ").concat(buyTokenDecimals));
738
- amountInBigNumber = ethers.utils.parseUnits(quote.sellAmount.toString(), sellTokenDecimals);
739
- sellToken = sellTokenAddress === ethers.constants.AddressZero ?
740
- WETH[sdk_core_1.ChainId.MAINNET] : new sdk_core_1.Token(chainIdInt, sellTokenAddress, sellTokenDecimals);
741
- buyToken = buyTokenAddress === ethers.constants.AddressZero ?
742
- WETH[sdk_core_1.ChainId.MAINNET] : new sdk_core_1.Token(chainIdInt, buyTokenAddress, buyTokenDecimals);
743
- return [4 /*yield*/, getRoute({
744
- sellToken: sellToken,
745
- buyToken: buyToken,
746
- chainId: chainIdInt,
747
- amountIn: amountInBigNumber,
748
- provider: provider
749
- })];
276
+ nonce = _a.sent();
277
+ log.info("nonce: ", nonce);
278
+ gas = "0x".concat(BigInt("935120").toString(16)) // 935120
279
+ ;
280
+ return [4 /*yield*/, provider.getGasPrice()];
750
281
  case 13:
751
- route = _d.sent();
752
- console.log("route: ", route);
753
- if (!route)
754
- throw new Error("missing route, failed to find route");
755
- trade = route.trade;
756
- log.info(tag, "trade: ", trade);
757
- amountOut = trade.swaps[0].outputAmount;
758
- log.info(tag, "amountOut: ", amountOut);
759
- output.amountOut = amountOut.toFixed(18);
760
- PERMIT_EXPIRATION = 2592000000;
761
- PERMIT_SIG_EXPIRATION = 1800000;
762
- return [4 /*yield*/, provider.getTransactionCount(quote.senderAddress, "latest")];
763
- case 14:
764
- nonce = _d.sent();
765
- permit = {
766
- details: {
767
- token: sellToken.address,
768
- amount: "1000000000000000000000000",
769
- expiration: toDeadline(PERMIT_EXPIRATION),
770
- nonce: 0,
771
- },
772
- spender: EIP155_MAINNET_CHAINS['eip155:' + chainIdInt].universalRouter,
773
- sigDeadline: toDeadline(PERMIT_SIG_EXPIRATION),
282
+ gasPrice = _a.sent();
283
+ log.info("gasPrice: ", gasPrice.toString());
284
+ adjustedGasPrice = gasPrice.mul(ethers.BigNumber.from(110)).div(ethers.BigNumber.from(100));
285
+ isZero = function isZero(hexNumberString) {
286
+ return hexNumberString === '0' || /^0x0*$/.test(hexNumberString);
774
287
  };
775
- permit.signature = quote.permit2;
776
- return [4 /*yield*/, buildSwapTx({ trade: trade, permit: permit, from: quote.senderAddress, chainId: chainIdInt, provider: provider })];
777
- case 15:
778
- tx = _d.sent();
779
- log.info(tag, "tx: ", tx);
288
+ tx = __assign(__assign({ from: from, to: EIP155_MAINNET_CHAINS['eip155:' + chainId].universalRouter, chainId: chainId, data: calldata }, (value && !isZero(value) ? { value: (0, v3_sdk_1.toHex)(value) } : {})), { gas: gas, gasPrice: (0, v3_sdk_1.toHex)(adjustedGasPrice), nonce: (0, v3_sdk_1.toHex)(nonce) });
780
289
  output.txs.push({
781
290
  type: "evm",
782
291
  description: 'swap tokens',
@@ -791,11 +300,11 @@ var get_quote = function (quote) {
791
300
  output.type = 'EVM';
792
301
  output.id = uuid();
793
302
  return [2 /*return*/, output];
794
- case 16:
795
- e_8 = _d.sent();
796
- console.error(tag, "e: ", e_8);
797
- throw e_8;
798
- case 17: return [2 /*return*/];
303
+ case 14:
304
+ e_1 = _a.sent();
305
+ console.error(tag, "e: ", e_1);
306
+ throw e_1;
307
+ case 15: return [2 /*return*/];
799
308
  }
800
309
  });
801
310
  });