@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.
- package/lib/constants/chainInfo.d.ts +19 -22
- package/lib/constants/chainInfo.js +134 -117
- package/lib/constants/chains.d.ts +36 -47
- package/lib/constants/chains.js +118 -83
- package/lib/constants/chains.test.js +22 -25
- package/lib/constants/governance.d.ts +8 -0
- package/lib/constants/governance.js +24 -0
- package/lib/constants/lists.d.ts +12 -0
- package/lib/constants/lists.js +64 -0
- package/lib/constants/localCurrencies.d.ts +6 -0
- package/lib/constants/localCurrencies.js +94 -0
- package/lib/constants/localCurrencyIcons.d.ts +18 -0
- package/lib/constants/localCurrencyIcons.js +298 -0
- package/lib/constants/locales.d.ts +1 -1
- package/lib/constants/locales.js +0 -3
- package/lib/constants/misc.d.ts +2 -7
- package/lib/constants/misc.js +17 -23
- package/lib/constants/networks.d.ts +21 -0
- package/lib/constants/networks.js +170 -0
- package/lib/constants/proposals/index.d.ts +5 -0
- package/lib/constants/proposals/index.js +8 -0
- package/lib/constants/proposals/polygon_proposal_title.d.ts +1 -0
- package/lib/constants/proposals/polygon_proposal_title.js +4 -0
- package/lib/constants/proposals/uniswap_grants_proposal_description.d.ts +1 -0
- package/lib/constants/proposals/uniswap_grants_proposal_description.js +4 -0
- package/lib/constants/providers.d.ts +19 -0
- package/lib/constants/providers.js +33 -0
- package/lib/constants/routing.d.ts +9 -13
- package/lib/constants/routing.js +91 -55
- package/lib/constants/routing.test.d.ts +1 -0
- package/lib/constants/routing.test.js +32 -0
- package/lib/constants/supportArticles.d.ts +13 -0
- package/lib/constants/supportArticles.js +17 -0
- package/lib/constants/tokenLists/broken.tokenlist.json +22 -0
- package/lib/constants/tokenLogoLookup.d.ts +8 -0
- package/lib/constants/tokenLogoLookup.js +48 -0
- package/lib/constants/tokenSafety.js +129 -0
- package/lib/constants/tokenSafetyLookup.d.ts +18 -0
- package/lib/constants/tokenSafetyLookup.js +66 -0
- package/lib/constants/tokenSaftey.test.d.ts +1 -0
- package/lib/constants/tokenSaftey.test.js +31 -0
- package/lib/constants/tokens.d.ts +34 -42
- package/lib/constants/tokens.js +190 -147
- package/lib/index.d.ts +1 -40
- package/lib/index.js +150 -641
- package/lib/routing/clientSideSmartOrderRouter.d.ts +5 -0
- package/lib/routing/clientSideSmartOrderRouter.js +136 -0
- package/lib/routing/gas.d.ts +5 -0
- package/lib/routing/gas.js +158 -0
- package/lib/routing/types.d.ts +393 -0
- package/lib/routing/types.js +424 -0
- package/lib/routing/utils.d.ts +28 -0
- package/lib/routing/utils.js +319 -0
- package/lib/rpc/AppJsonRpcProvider.d.ts +44 -0
- package/lib/rpc/AppJsonRpcProvider.js +183 -0
- package/lib/rpc/ConfiguredJsonRpcProvider.d.ts +8 -0
- package/lib/rpc/ConfiguredJsonRpcProvider.js +35 -0
- package/lib/utils/contracts/getContract.d.ts +3 -0
- package/lib/utils/contracts/getContract.js +29 -0
- package/lib/utils/transformSwapRouteToGetQuoteResult.d.ts +4 -0
- package/lib/utils/transformSwapRouteToGetQuoteResult.js +116 -0
- package/lib/utils/uniswapData.d.ts +21 -0
- package/lib/utils/uniswapData.js +217 -0
- package/package.json +11 -8
- package/lib/constants/addresses.d.ts +0 -9
- package/lib/constants/addresses.js +0 -41
- package/lib/constants/eip1193.d.ts +0 -8
- package/lib/constants/eip1193.js +0 -14
- package/lib/constants/index.d.ts +0 -9
- package/lib/constants/index.js +0 -26
- package/lib/constants/jsonRpcEndpoints.d.ts +0 -12
- package/lib/constants/jsonRpcEndpoints.js +0 -101
- package/lib/constants/utils/constructSameAddressMap.d.ts +0 -4
- 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
|
|
65
|
-
var
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
244
|
-
function
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
return
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
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,
|
|
614
|
-
return __generator(this, function (
|
|
615
|
-
switch (
|
|
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
|
-
|
|
126
|
+
_a.label = 1;
|
|
619
127
|
case 1:
|
|
620
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
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
|
-
|
|
659
|
-
|
|
660
|
-
_d.label = 3;
|
|
169
|
+
symbolBuy = _a.sent();
|
|
170
|
+
return [4 /*yield*/, buyTokenContract.decimals()];
|
|
661
171
|
case 3:
|
|
662
|
-
|
|
663
|
-
|
|
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
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
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
|
-
|
|
705
|
-
|
|
706
|
-
|
|
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
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
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
|
-
|
|
721
|
-
return [
|
|
191
|
+
symbolSell = _a.sent();
|
|
192
|
+
return [4 /*yield*/, sellTokenContract.decimals()];
|
|
722
193
|
case 8:
|
|
723
|
-
|
|
724
|
-
|
|
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
|
-
|
|
727
|
-
|
|
728
|
-
|
|
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
|
-
|
|
731
|
-
|
|
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
|
-
|
|
734
|
-
|
|
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
|
-
|
|
737
|
-
log.info("
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
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
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
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
|
-
|
|
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
|
|
795
|
-
|
|
796
|
-
console.error(tag, "e: ",
|
|
797
|
-
throw
|
|
798
|
-
case
|
|
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
|
});
|