@synthra-swap/sdk 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/chains.d.ts +1 -0
- package/chains.js +1 -0
- package/core.d.ts +1 -0
- package/core.js +1 -0
- package/dist/chain-registry.d.ts +22 -0
- package/dist/chain-registry.js +315 -0
- package/dist/chain-registry.js.map +1 -0
- package/dist/chains.d.ts +5 -0
- package/dist/chains.js +29 -0
- package/dist/chains.js.map +1 -0
- package/dist/core/addresses.d.ts +21 -0
- package/dist/core/addresses.js +76 -0
- package/dist/core/addresses.js.map +1 -0
- package/dist/core/chains.d.ts +51 -0
- package/dist/core/chains.js +82 -0
- package/dist/core/chains.js.map +1 -0
- package/dist/core/constants.d.ts +12 -0
- package/dist/core/constants.js +20 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/entities/baseCurrency.d.ts +48 -0
- package/dist/core/entities/baseCurrency.js +29 -0
- package/dist/core/entities/baseCurrency.js.map +1 -0
- package/dist/core/entities/currency.d.ts +3 -0
- package/dist/core/entities/currency.js +3 -0
- package/dist/core/entities/currency.js.map +1 -0
- package/dist/core/entities/ether.d.ts +13 -0
- package/dist/core/entities/ether.js +32 -0
- package/dist/core/entities/ether.js.map +1 -0
- package/dist/core/entities/fractions/currencyAmount.d.ts +31 -0
- package/dist/core/entities/fractions/currencyAmount.js +74 -0
- package/dist/core/entities/fractions/currencyAmount.js.map +1 -0
- package/dist/core/entities/fractions/fraction.d.ts +24 -0
- package/dist/core/entities/fractions/fraction.js +106 -0
- package/dist/core/entities/fractions/fraction.js.map +1 -0
- package/dist/core/entities/fractions/index.d.ts +4 -0
- package/dist/core/entities/fractions/index.js +12 -0
- package/dist/core/entities/fractions/index.js.map +1 -0
- package/dist/core/entities/fractions/percent.d.ts +14 -0
- package/dist/core/entities/fractions/percent.js +45 -0
- package/dist/core/entities/fractions/percent.js.map +1 -0
- package/dist/core/entities/fractions/price.d.ts +38 -0
- package/dist/core/entities/fractions/price.js +75 -0
- package/dist/core/entities/fractions/price.js.map +1 -0
- package/dist/core/entities/index.d.ts +7 -0
- package/dist/core/entities/index.js +24 -0
- package/dist/core/entities/index.js.map +1 -0
- package/dist/core/entities/nativeCurrency.d.ts +8 -0
- package/dist/core/entities/nativeCurrency.js +16 -0
- package/dist/core/entities/nativeCurrency.js.map +1 -0
- package/dist/core/entities/nativeOnChain.d.ts +19 -0
- package/dist/core/entities/nativeOnChain.js +141 -0
- package/dist/core/entities/nativeOnChain.js.map +1 -0
- package/dist/core/entities/token.d.ts +48 -0
- package/dist/core/entities/token.js +71 -0
- package/dist/core/entities/token.js.map +1 -0
- package/dist/core/entities/weth9.d.ts +7 -0
- package/dist/core/entities/weth9.js +28 -0
- package/dist/core/entities/weth9.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.js +22 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/utils/computePriceImpact.d.ts +8 -0
- package/dist/core/utils/computePriceImpact.js +18 -0
- package/dist/core/utils/computePriceImpact.js.map +1 -0
- package/dist/core/utils/index.d.ts +4 -0
- package/dist/core/utils/index.js +12 -0
- package/dist/core/utils/index.js.map +1 -0
- package/dist/core/utils/sortedInsert.d.ts +1 -0
- package/dist/core/utils/sortedInsert.js +40 -0
- package/dist/core/utils/sortedInsert.js.map +1 -0
- package/dist/core/utils/sqrt.d.ts +7 -0
- package/dist/core/utils/sqrt.js +34 -0
- package/dist/core/utils/sqrt.js.map +1 -0
- package/dist/core/utils/validateAndParseAddress.d.ts +10 -0
- package/dist/core/utils/validateAndParseAddress.js +31 -0
- package/dist/core/utils/validateAndParseAddress.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/universal-router/entities/Command.d.ts +12 -0
- package/dist/universal-router/entities/Command.js +9 -0
- package/dist/universal-router/entities/Command.js.map +1 -0
- package/dist/universal-router/entities/index.d.ts +3 -0
- package/dist/universal-router/entities/index.js +20 -0
- package/dist/universal-router/entities/index.js.map +1 -0
- package/dist/universal-router/entities/protocols/index.d.ts +2 -0
- package/dist/universal-router/entities/protocols/index.js +19 -0
- package/dist/universal-router/entities/protocols/index.js.map +1 -0
- package/dist/universal-router/entities/protocols/uniswap.d.ts +32 -0
- package/dist/universal-router/entities/protocols/uniswap.js +143 -0
- package/dist/universal-router/entities/protocols/uniswap.js.map +1 -0
- package/dist/universal-router/entities/protocols/unwrapWETH.d.ts +12 -0
- package/dist/universal-router/entities/protocols/unwrapWETH.js +35 -0
- package/dist/universal-router/entities/protocols/unwrapWETH.js.map +1 -0
- package/dist/universal-router/entities/trade.d.ts +41 -0
- package/dist/universal-router/entities/trade.js +114 -0
- package/dist/universal-router/entities/trade.js.map +1 -0
- package/dist/universal-router/index.d.ts +5 -0
- package/dist/universal-router/index.js +31 -0
- package/dist/universal-router/index.js.map +1 -0
- package/dist/universal-router/swapRouter.d.ts +29 -0
- package/dist/universal-router/swapRouter.js +102 -0
- package/dist/universal-router/swapRouter.js.map +1 -0
- package/dist/universal-router/utils/constants.d.ts +8 -0
- package/dist/universal-router/utils/constants.js +21 -0
- package/dist/universal-router/utils/constants.js.map +1 -0
- package/dist/universal-router/utils/getNativeCurrencyValue.d.ts +2 -0
- package/dist/universal-router/utils/getNativeCurrencyValue.js +19 -0
- package/dist/universal-router/utils/getNativeCurrencyValue.js.map +1 -0
- package/dist/universal-router/utils/inputTokens.d.ts +16 -0
- package/dist/universal-router/utils/inputTokens.js +44 -0
- package/dist/universal-router/utils/inputTokens.js.map +1 -0
- package/dist/universal-router/utils/numbers.d.ts +6 -0
- package/dist/universal-router/utils/numbers.js +24 -0
- package/dist/universal-router/utils/numbers.js.map +1 -0
- package/dist/universal-router/utils/routerCommands.d.ts +29 -0
- package/dist/universal-router/utils/routerCommands.js +64 -0
- package/dist/universal-router/utils/routerCommands.js.map +1 -0
- package/dist/universal-router/utils/routerTradeAdapter.d.ts +40 -0
- package/dist/universal-router/utils/routerTradeAdapter.js +82 -0
- package/dist/universal-router/utils/routerTradeAdapter.js.map +1 -0
- package/dist/v3/abis.d.ts +6 -0
- package/dist/v3/abis.js +39 -0
- package/dist/v3/abis.js.map +1 -0
- package/dist/v3/constants.d.ts +18 -0
- package/dist/v3/constants.js +26 -0
- package/dist/v3/constants.js.map +1 -0
- package/dist/v3/entities/index.d.ts +7 -0
- package/dist/v3/entities/index.js +24 -0
- package/dist/v3/entities/index.js.map +1 -0
- package/dist/v3/entities/pool.d.ts +81 -0
- package/dist/v3/entities/pool.js +215 -0
- package/dist/v3/entities/pool.js.map +1 -0
- package/dist/v3/entities/position.d.ts +131 -0
- package/dist/v3/entities/position.js +250 -0
- package/dist/v3/entities/position.js.map +1 -0
- package/dist/v3/entities/route.d.ts +26 -0
- package/dist/v3/entities/route.js +77 -0
- package/dist/v3/entities/route.js.map +1 -0
- package/dist/v3/entities/tick.d.ts +13 -0
- package/dist/v3/entities/tick.js +19 -0
- package/dist/v3/entities/tick.js.map +1 -0
- package/dist/v3/entities/tickDataProvider.d.ts +31 -0
- package/dist/v3/entities/tickDataProvider.js +18 -0
- package/dist/v3/entities/tickDataProvider.js.map +1 -0
- package/dist/v3/entities/tickListDataProvider.d.ts +15 -0
- package/dist/v3/entities/tickListDataProvider.js +23 -0
- package/dist/v3/entities/tickListDataProvider.js.map +1 -0
- package/dist/v3/entities/trade.d.ts +220 -0
- package/dist/v3/entities/trade.js +442 -0
- package/dist/v3/entities/trade.js.map +1 -0
- package/dist/v3/index.d.ts +9 -0
- package/dist/v3/index.js +26 -0
- package/dist/v3/index.js.map +1 -0
- package/dist/v3/internalConstants.d.ts +6 -0
- package/dist/v3/internalConstants.js +15 -0
- package/dist/v3/internalConstants.js.map +1 -0
- package/dist/v3/multicall.d.ts +9 -0
- package/dist/v3/multicall.js +20 -0
- package/dist/v3/multicall.js.map +1 -0
- package/dist/v3/nonfungiblePositionManager.d.ts +146 -0
- package/dist/v3/nonfungiblePositionManager.js +231 -0
- package/dist/v3/nonfungiblePositionManager.js.map +1 -0
- package/dist/v3/payments.d.ts +24 -0
- package/dist/v3/payments.js +55 -0
- package/dist/v3/payments.js.map +1 -0
- package/dist/v3/quoter.d.ts +37 -0
- package/dist/v3/quoter.js +76 -0
- package/dist/v3/quoter.js.map +1 -0
- package/dist/v3/selfPermit.d.ts +25 -0
- package/dist/v3/selfPermit.js +37 -0
- package/dist/v3/selfPermit.js.map +1 -0
- package/dist/v3/swapRouter.d.ts +51 -0
- package/dist/v3/swapRouter.js +147 -0
- package/dist/v3/swapRouter.js.map +1 -0
- package/dist/v3/utils/calldata.d.ts +20 -0
- package/dist/v3/utils/calldata.js +22 -0
- package/dist/v3/utils/calldata.js.map +1 -0
- package/dist/v3/utils/computePoolAddress.d.ts +18 -0
- package/dist/v3/utils/computePoolAddress.js +22 -0
- package/dist/v3/utils/computePoolAddress.js.map +1 -0
- package/dist/v3/utils/encodeRouteToPath.d.ts +8 -0
- package/dist/v3/utils/encodeRouteToPath.js +32 -0
- package/dist/v3/utils/encodeRouteToPath.js.map +1 -0
- package/dist/v3/utils/encodeSqrtRatioX96.d.ts +9 -0
- package/dist/v3/utils/encodeSqrtRatioX96.js +22 -0
- package/dist/v3/utils/encodeSqrtRatioX96.js.map +1 -0
- package/dist/v3/utils/fullMath.d.ts +8 -0
- package/dist/v3/utils/fullMath.js +23 -0
- package/dist/v3/utils/fullMath.js.map +1 -0
- package/dist/v3/utils/index.d.ts +17 -0
- package/dist/v3/utils/index.js +34 -0
- package/dist/v3/utils/index.js.map +1 -0
- package/dist/v3/utils/isSorted.d.ts +7 -0
- package/dist/v3/utils/isSorted.js +19 -0
- package/dist/v3/utils/isSorted.js.map +1 -0
- package/dist/v3/utils/liquidityMath.d.ts +8 -0
- package/dist/v3/utils/liquidityMath.js +24 -0
- package/dist/v3/utils/liquidityMath.js.map +1 -0
- package/dist/v3/utils/maxLiquidityForAmounts.d.ts +14 -0
- package/dist/v3/utils/maxLiquidityForAmounts.js +89 -0
- package/dist/v3/utils/maxLiquidityForAmounts.js.map +1 -0
- package/dist/v3/utils/mostSignificantBit.d.ts +2 -0
- package/dist/v3/utils/mostSignificantBit.js +29 -0
- package/dist/v3/utils/mostSignificantBit.js.map +1 -0
- package/dist/v3/utils/nearestUsableTick.d.ts +6 -0
- package/dist/v3/utils/nearestUsableTick.js +27 -0
- package/dist/v3/utils/nearestUsableTick.js.map +1 -0
- package/dist/v3/utils/position.d.ts +8 -0
- package/dist/v3/utils/position.js +23 -0
- package/dist/v3/utils/position.js.map +1 -0
- package/dist/v3/utils/priceTickConversions.d.ts +15 -0
- package/dist/v3/utils/priceTickConversions.js +52 -0
- package/dist/v3/utils/priceTickConversions.js.map +1 -0
- package/dist/v3/utils/sqrtPriceMath.d.ts +13 -0
- package/dist/v3/utils/sqrtPriceMath.js +97 -0
- package/dist/v3/utils/sqrtPriceMath.js.map +1 -0
- package/dist/v3/utils/swapMath.d.ts +9 -0
- package/dist/v3/utils/swapMath.js +79 -0
- package/dist/v3/utils/swapMath.js.map +1 -0
- package/dist/v3/utils/tickLibrary.d.ts +14 -0
- package/dist/v3/utils/tickLibrary.js +53 -0
- package/dist/v3/utils/tickLibrary.js.map +1 -0
- package/dist/v3/utils/tickList.d.ts +23 -0
- package/dist/v3/utils/tickList.js +110 -0
- package/dist/v3/utils/tickList.js.map +1 -0
- package/dist/v3/utils/tickMath.d.ts +34 -0
- package/dist/v3/utils/tickMath.js +127 -0
- package/dist/v3/utils/tickMath.js.map +1 -0
- package/package.json +80 -0
- package/universal-router.d.ts +1 -0
- package/universal-router.js +1 -0
- package/v3.d.ts +1 -0
- package/v3.js +1 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Trade = exports.SynthraTrade = exports.Protocol = exports.ONE_HUNDRED_PERCENT = exports.ZERO_PERCENT = exports.ONE = void 0;
|
|
7
|
+
const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
|
|
8
|
+
const core_1 = require("../../core");
|
|
9
|
+
const v3_1 = require("../../v3");
|
|
10
|
+
exports.ONE = 1;
|
|
11
|
+
exports.ZERO_PERCENT = new core_1.Percent(0);
|
|
12
|
+
exports.ONE_HUNDRED_PERCENT = new core_1.Percent(100, 100);
|
|
13
|
+
var Protocol;
|
|
14
|
+
(function (Protocol) {
|
|
15
|
+
Protocol["V3"] = "V3";
|
|
16
|
+
})(Protocol = exports.Protocol || (exports.Protocol = {}));
|
|
17
|
+
class SynthraTrade {
|
|
18
|
+
constructor({ v3Routes, tradeType }) {
|
|
19
|
+
(0, tiny_invariant_1.default)(v3Routes.length > 0, 'ROUTES');
|
|
20
|
+
this.swaps = v3Routes.map(({ routev3, inputAmount, outputAmount }) => ({
|
|
21
|
+
route: routev3,
|
|
22
|
+
inputAmount,
|
|
23
|
+
outputAmount,
|
|
24
|
+
}));
|
|
25
|
+
this.routes = this.swaps.map(({ route }) => route);
|
|
26
|
+
this.tradeType = tradeType;
|
|
27
|
+
const inputCurrency = this.swaps[0].inputAmount.currency;
|
|
28
|
+
const outputCurrency = this.swaps[0].outputAmount.currency;
|
|
29
|
+
(0, tiny_invariant_1.default)(this.swaps.every(({ route }) => inputCurrency.wrapped.equals(route.input.wrapped)), 'INPUT_CURRENCY_MATCH');
|
|
30
|
+
(0, tiny_invariant_1.default)(this.swaps.every(({ route }) => outputCurrency.wrapped.equals(route.output.wrapped)), 'OUTPUT_CURRENCY_MATCH');
|
|
31
|
+
const numPools = this.swaps.map(({ route }) => route.pools.length).reduce((total, cur) => total + cur, 0);
|
|
32
|
+
const poolAddressSet = new Set();
|
|
33
|
+
for (const { route } of this.swaps) {
|
|
34
|
+
for (const pool of route.pools) {
|
|
35
|
+
poolAddressSet.add(v3_1.Pool.getAddress(pool.token0, pool.token1, pool.fee));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
(0, tiny_invariant_1.default)(numPools === poolAddressSet.size, 'POOLS_DUPLICATED');
|
|
39
|
+
}
|
|
40
|
+
get inputAmount() {
|
|
41
|
+
if (this._inputAmount)
|
|
42
|
+
return this._inputAmount;
|
|
43
|
+
const inputCurrency = this.swaps[0].inputAmount.currency;
|
|
44
|
+
this._inputAmount = this.swaps
|
|
45
|
+
.map(({ inputAmount }) => inputAmount)
|
|
46
|
+
.reduce((total, cur) => total.add(cur), core_1.CurrencyAmount.fromRawAmount(inputCurrency, 0));
|
|
47
|
+
return this._inputAmount;
|
|
48
|
+
}
|
|
49
|
+
get outputAmount() {
|
|
50
|
+
if (this._outputAmount)
|
|
51
|
+
return this._outputAmount;
|
|
52
|
+
const outputCurrency = this.swaps[0].outputAmount.currency;
|
|
53
|
+
this._outputAmount = this.swaps
|
|
54
|
+
.map(({ outputAmount }) => outputAmount)
|
|
55
|
+
.reduce((total, cur) => total.add(cur), core_1.CurrencyAmount.fromRawAmount(outputCurrency, 0));
|
|
56
|
+
return this._outputAmount;
|
|
57
|
+
}
|
|
58
|
+
get executionPrice() {
|
|
59
|
+
var _a;
|
|
60
|
+
return ((_a = this._executionPrice) !== null && _a !== void 0 ? _a : (this._executionPrice = new core_1.Price(this.inputAmount.currency, this.outputAmount.currency, this.inputAmount.quotient, this.outputAmount.quotient)));
|
|
61
|
+
}
|
|
62
|
+
get inputTax() {
|
|
63
|
+
const currency = this.inputAmount.currency;
|
|
64
|
+
if (currency.isNative || !currency.wrapped.sellFeeBps)
|
|
65
|
+
return exports.ZERO_PERCENT;
|
|
66
|
+
return new core_1.Percent(currency.wrapped.sellFeeBps.toNumber(), 10000);
|
|
67
|
+
}
|
|
68
|
+
get outputTax() {
|
|
69
|
+
const currency = this.outputAmount.currency;
|
|
70
|
+
if (currency.isNative || !currency.wrapped.buyFeeBps)
|
|
71
|
+
return exports.ZERO_PERCENT;
|
|
72
|
+
return new core_1.Percent(currency.wrapped.buyFeeBps.toNumber(), 10000);
|
|
73
|
+
}
|
|
74
|
+
get priceImpact() {
|
|
75
|
+
if (this._priceImpact)
|
|
76
|
+
return this._priceImpact;
|
|
77
|
+
if (this.outputTax.equalTo(exports.ONE_HUNDRED_PERCENT))
|
|
78
|
+
return exports.ZERO_PERCENT;
|
|
79
|
+
let spotOutputAmount = core_1.CurrencyAmount.fromRawAmount(this.outputAmount.currency, 0);
|
|
80
|
+
for (const { route, inputAmount } of this.swaps) {
|
|
81
|
+
const postTaxInputAmount = inputAmount.multiply(new core_1.Fraction(exports.ONE).subtract(this.inputTax));
|
|
82
|
+
spotOutputAmount = spotOutputAmount.add(route.midPrice.quote(postTaxInputAmount));
|
|
83
|
+
}
|
|
84
|
+
if (spotOutputAmount.equalTo(0))
|
|
85
|
+
return exports.ZERO_PERCENT;
|
|
86
|
+
const preTaxOutputAmount = this.outputAmount.divide(new core_1.Fraction(exports.ONE).subtract(this.outputTax));
|
|
87
|
+
const priceImpact = spotOutputAmount.subtract(preTaxOutputAmount).divide(spotOutputAmount);
|
|
88
|
+
this._priceImpact = new core_1.Percent(priceImpact.numerator, priceImpact.denominator);
|
|
89
|
+
return this._priceImpact;
|
|
90
|
+
}
|
|
91
|
+
minimumAmountOut(slippageTolerance, amountOut = this.outputAmount) {
|
|
92
|
+
(0, tiny_invariant_1.default)(!slippageTolerance.lessThan(0), 'SLIPPAGE_TOLERANCE');
|
|
93
|
+
if (this.tradeType === core_1.TradeType.EXACT_OUTPUT)
|
|
94
|
+
return amountOut;
|
|
95
|
+
const slippageAdjustedAmountOut = new core_1.Fraction(exports.ONE)
|
|
96
|
+
.add(slippageTolerance)
|
|
97
|
+
.invert()
|
|
98
|
+
.multiply(amountOut.quotient).quotient;
|
|
99
|
+
return core_1.CurrencyAmount.fromRawAmount(amountOut.currency, slippageAdjustedAmountOut);
|
|
100
|
+
}
|
|
101
|
+
maximumAmountIn(slippageTolerance, amountIn = this.inputAmount) {
|
|
102
|
+
(0, tiny_invariant_1.default)(!slippageTolerance.lessThan(0), 'SLIPPAGE_TOLERANCE');
|
|
103
|
+
if (this.tradeType === core_1.TradeType.EXACT_INPUT)
|
|
104
|
+
return amountIn;
|
|
105
|
+
const slippageAdjustedAmountIn = new core_1.Fraction(exports.ONE).add(slippageTolerance).multiply(amountIn.quotient).quotient;
|
|
106
|
+
return core_1.CurrencyAmount.fromRawAmount(amountIn.currency, slippageAdjustedAmountIn);
|
|
107
|
+
}
|
|
108
|
+
worstExecutionPrice(slippageTolerance) {
|
|
109
|
+
return new core_1.Price(this.inputAmount.currency, this.outputAmount.currency, this.maximumAmountIn(slippageTolerance).quotient, this.minimumAmountOut(slippageTolerance).quotient);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.SynthraTrade = SynthraTrade;
|
|
113
|
+
exports.Trade = SynthraTrade;
|
|
114
|
+
//# sourceMappingURL=trade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trade.js","sourceRoot":"","sources":["../../../src/universal-router/entities/trade.ts"],"names":[],"mappings":";;;;;;AAAA,oEAAsC;AACtC,qCAA0F;AAC1F,iCAAiD;AAEpC,QAAA,GAAG,GAAG,CAAC,CAAA;AACP,QAAA,YAAY,GAAG,IAAI,cAAO,CAAC,CAAC,CAAC,CAAA;AAC7B,QAAA,mBAAmB,GAAG,IAAI,cAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AAExD,IAAY,QAEX;AAFD,WAAY,QAAQ;IAClB,qBAAS,CAAA;AACX,CAAC,EAFW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAEnB;AAaD,MAAa,YAAY;IAcvB,YAAY,EAAE,QAAQ,EAAE,SAAS,EAA4D;QAC3F,IAAA,wBAAS,EAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAA;QAExC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;YACrE,KAAK,EAAE,OAAO;YACd,WAAW;YACX,YAAY;SACb,CAAC,CAAC,CAAA;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;QAClD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAE1B,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAA;QACxD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAA;QAE1D,IAAA,wBAAS,EACP,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAClF,sBAAsB,CACvB,CAAA;QACD,IAAA,wBAAS,EACP,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EACpF,uBAAuB,CACxB,CAAA;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,CAAA;QACzG,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAA;QACxC,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;YAClC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;gBAC9B,cAAc,CAAC,GAAG,CAAC,SAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;aACxE;SACF;QACD,IAAA,wBAAS,EAAC,QAAQ,KAAK,cAAc,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;IACjE,CAAC;IAED,IAAI,WAAW;QACb,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC,YAAY,CAAA;QAE/C,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAA;QACxD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK;aAC3B,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC;aACrC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,qBAAc,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAA;QACzF,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED,IAAI,YAAY;QACd,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC,aAAa,CAAA;QAEjD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAA;QAC1D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK;aAC5B,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC;aACvC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,qBAAc,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1F,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;IAED,IAAI,cAAc;;QAChB,OAAO,CACL,MAAA,IAAI,CAAC,eAAe,mCACpB,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,YAAK,CAC/B,IAAI,CAAC,WAAW,CAAC,QAAQ,EACzB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAC1B,IAAI,CAAC,WAAW,CAAC,QAAQ,EACzB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAC3B,CAAC,CACH,CAAA;IACH,CAAC;IAED,IAAI,QAAQ;QACV,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAA;QAC1C,IAAI,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU;YAAE,OAAO,oBAAY,CAAA;QAC1E,OAAO,IAAI,cAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAA;IACnE,CAAC;IAED,IAAI,SAAS;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAA;QAC3C,IAAI,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS;YAAE,OAAO,oBAAY,CAAA;QACzE,OAAO,IAAI,cAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAA;IAClE,CAAC;IAED,IAAI,WAAW;QACb,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC,YAAY,CAAA;QAC/C,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,2BAAmB,CAAC;YAAE,OAAO,oBAAY,CAAA;QAEpE,IAAI,gBAAgB,GAAG,qBAAc,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QAClF,KAAK,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;YAC/C,MAAM,kBAAkB,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,eAAQ,CAAC,WAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC1F,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAA;SAClF;QAED,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,OAAO,oBAAY,CAAA;QAEpD,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,eAAQ,CAAC,WAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;QAC/F,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;QAC1F,IAAI,CAAC,YAAY,GAAG,IAAI,cAAO,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,CAAA;QAC/E,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED,gBAAgB,CAAC,iBAA0B,EAAE,SAAS,GAAG,IAAI,CAAC,YAAY;QACxE,IAAA,wBAAS,EAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAA;QAE/D,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAS,CAAC,YAAY;YAAE,OAAO,SAAS,CAAA;QAE/D,MAAM,yBAAyB,GAAG,IAAI,eAAQ,CAAC,WAAG,CAAC;aAChD,GAAG,CAAC,iBAAiB,CAAC;aACtB,MAAM,EAAE;aACR,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAA;QACxC,OAAO,qBAAc,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAAA;IACpF,CAAC;IAED,eAAe,CAAC,iBAA0B,EAAE,QAAQ,GAAG,IAAI,CAAC,WAAW;QACrE,IAAA,wBAAS,EAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAA;QAE/D,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAS,CAAC,WAAW;YAAE,OAAO,QAAQ,CAAA;QAE7D,MAAM,wBAAwB,GAAG,IAAI,eAAQ,CAAC,WAAG,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAA;QAC9G,OAAO,qBAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAA;IAClF,CAAC;IAED,mBAAmB,CAAC,iBAA0B;QAC5C,OAAO,IAAI,YAAK,CACd,IAAI,CAAC,WAAW,CAAC,QAAQ,EACzB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAC1B,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAChD,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAClD,CAAA;IACH,CAAC;CACF;AA1ID,oCA0IC;AAEwB,6BAAK"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { SwapRouter } from './swapRouter';
|
|
2
|
+
export * from './entities';
|
|
3
|
+
export * from './utils/routerTradeAdapter';
|
|
4
|
+
export { RoutePlanner, CommandType } from './utils/routerCommands';
|
|
5
|
+
export { UNIVERSAL_ROUTER_ADDRESS, UNIVERSAL_ROUTER_CREATION_BLOCK, PERMIT2_ADDRESS, ROUTER_AS_RECIPIENT, WETH_ADDRESS, } from './utils/constants';
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.WETH_ADDRESS = exports.ROUTER_AS_RECIPIENT = exports.PERMIT2_ADDRESS = exports.UNIVERSAL_ROUTER_CREATION_BLOCK = exports.UNIVERSAL_ROUTER_ADDRESS = exports.CommandType = exports.RoutePlanner = exports.SwapRouter = void 0;
|
|
18
|
+
var swapRouter_1 = require("./swapRouter");
|
|
19
|
+
Object.defineProperty(exports, "SwapRouter", { enumerable: true, get: function () { return swapRouter_1.SwapRouter; } });
|
|
20
|
+
__exportStar(require("./entities"), exports);
|
|
21
|
+
__exportStar(require("./utils/routerTradeAdapter"), exports);
|
|
22
|
+
var routerCommands_1 = require("./utils/routerCommands");
|
|
23
|
+
Object.defineProperty(exports, "RoutePlanner", { enumerable: true, get: function () { return routerCommands_1.RoutePlanner; } });
|
|
24
|
+
Object.defineProperty(exports, "CommandType", { enumerable: true, get: function () { return routerCommands_1.CommandType; } });
|
|
25
|
+
var constants_1 = require("./utils/constants");
|
|
26
|
+
Object.defineProperty(exports, "UNIVERSAL_ROUTER_ADDRESS", { enumerable: true, get: function () { return constants_1.UNIVERSAL_ROUTER_ADDRESS; } });
|
|
27
|
+
Object.defineProperty(exports, "UNIVERSAL_ROUTER_CREATION_BLOCK", { enumerable: true, get: function () { return constants_1.UNIVERSAL_ROUTER_CREATION_BLOCK; } });
|
|
28
|
+
Object.defineProperty(exports, "PERMIT2_ADDRESS", { enumerable: true, get: function () { return constants_1.PERMIT2_ADDRESS; } });
|
|
29
|
+
Object.defineProperty(exports, "ROUTER_AS_RECIPIENT", { enumerable: true, get: function () { return constants_1.ROUTER_AS_RECIPIENT; } });
|
|
30
|
+
Object.defineProperty(exports, "WETH_ADDRESS", { enumerable: true, get: function () { return constants_1.WETH_ADDRESS; } });
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/universal-router/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAAyC;AAAhC,wGAAA,UAAU,OAAA;AACnB,6CAA0B;AAC1B,6DAA0C;AAC1C,yDAAkE;AAAzD,8GAAA,YAAY,OAAA;AAAE,6GAAA,WAAW,OAAA;AAClC,+CAM0B;AALxB,qHAAA,wBAAwB,OAAA;AACxB,4HAAA,+BAA+B,OAAA;AAC/B,4GAAA,eAAe,OAAA;AACf,gHAAA,mBAAmB,OAAA;AACnB,yGAAA,YAAY,OAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Interface } from '@ethersproject/abi';
|
|
2
|
+
import { BigNumberish } from 'ethers';
|
|
3
|
+
import { MethodParameters } from '../v3';
|
|
4
|
+
import { Currency, TradeType } from '../core';
|
|
5
|
+
import { Command } from './entities/Command';
|
|
6
|
+
import { SynthraTrade } from './entities/trade';
|
|
7
|
+
import { SwapOptions } from './entities/protocols/uniswap';
|
|
8
|
+
export type SwapRouterConfig = {
|
|
9
|
+
sender?: string;
|
|
10
|
+
deadline?: BigNumberish;
|
|
11
|
+
};
|
|
12
|
+
export declare abstract class SwapRouter {
|
|
13
|
+
static INTERFACE: Interface;
|
|
14
|
+
static swapCallParameters(trades: Command[] | Command, config?: SwapRouterConfig): MethodParameters;
|
|
15
|
+
/**
|
|
16
|
+
* @deprecated in favor of swapCallParameters. Update before next major version 2.0.0
|
|
17
|
+
* Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.
|
|
18
|
+
* @param trades to produce call parameters for
|
|
19
|
+
* @param options options for the call parameters
|
|
20
|
+
*/
|
|
21
|
+
static swapERC20CallParameters(trades: SynthraTrade<Currency, Currency, TradeType>, options: SwapOptions): MethodParameters;
|
|
22
|
+
/**
|
|
23
|
+
* Encodes a planned route into a method name and parameters for the Router contract.
|
|
24
|
+
* @param planner the planned route
|
|
25
|
+
* @param nativeCurrencyValue the native currency value of the planned route
|
|
26
|
+
* @param config the router config
|
|
27
|
+
*/
|
|
28
|
+
private static encodePlan;
|
|
29
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SwapRouter = void 0;
|
|
7
|
+
const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
|
|
8
|
+
const abi_1 = require("@ethersproject/abi");
|
|
9
|
+
const ethers_1 = require("ethers");
|
|
10
|
+
const Command_1 = require("./entities/Command");
|
|
11
|
+
const uniswap_1 = require("./entities/protocols/uniswap");
|
|
12
|
+
const routerCommands_1 = require("./utils/routerCommands");
|
|
13
|
+
const inputTokens_1 = require("./utils/inputTokens");
|
|
14
|
+
const constants_1 = require("./utils/constants");
|
|
15
|
+
const UNIVERSAL_ROUTER_ABI = [
|
|
16
|
+
'function execute(bytes commands, bytes[] inputs) payable',
|
|
17
|
+
'function execute(bytes commands, bytes[] inputs, uint256 deadline) payable',
|
|
18
|
+
];
|
|
19
|
+
class SwapRouter {
|
|
20
|
+
static swapCallParameters(trades, config = {}) {
|
|
21
|
+
if (!Array.isArray(trades))
|
|
22
|
+
trades = [trades];
|
|
23
|
+
const planner = new routerCommands_1.RoutePlanner();
|
|
24
|
+
// track value flow to require the right amount of native value
|
|
25
|
+
let currentNativeValueInRouter = ethers_1.BigNumber.from(0);
|
|
26
|
+
let transactionValue = ethers_1.BigNumber.from(0);
|
|
27
|
+
for (const trade of trades) {
|
|
28
|
+
if (trade.tradeType == Command_1.RouterTradeType.UniswapTrade) {
|
|
29
|
+
const uniswapTrade = trade;
|
|
30
|
+
const inputIsNative = uniswapTrade.trade.inputAmount.currency.isNative;
|
|
31
|
+
const outputIsNative = uniswapTrade.trade.outputAmount.currency.isNative;
|
|
32
|
+
const swapOptions = uniswapTrade.options;
|
|
33
|
+
(0, tiny_invariant_1.default)(!(inputIsNative && !!swapOptions.inputTokenPermit), 'NATIVE_INPUT_PERMIT');
|
|
34
|
+
if (!!swapOptions.inputTokenPermit) {
|
|
35
|
+
(0, inputTokens_1.encodePermit)(planner, swapOptions.inputTokenPermit);
|
|
36
|
+
}
|
|
37
|
+
if (inputIsNative) {
|
|
38
|
+
transactionValue = transactionValue.add(ethers_1.BigNumber.from(uniswapTrade.trade.maximumAmountIn(swapOptions.slippageTolerance).quotient.toString()));
|
|
39
|
+
}
|
|
40
|
+
// track amount of native currency in the router
|
|
41
|
+
if (outputIsNative && swapOptions.recipient == constants_1.ROUTER_AS_RECIPIENT) {
|
|
42
|
+
currentNativeValueInRouter = currentNativeValueInRouter.add(ethers_1.BigNumber.from(uniswapTrade.trade.minimumAmountOut(swapOptions.slippageTolerance).quotient.toString()));
|
|
43
|
+
}
|
|
44
|
+
uniswapTrade.encode(planner, { allowRevert: false });
|
|
45
|
+
/**
|
|
46
|
+
* is UnwrapWETH
|
|
47
|
+
*/
|
|
48
|
+
}
|
|
49
|
+
else if (trade.tradeType == Command_1.RouterTradeType.UnwrapWETH) {
|
|
50
|
+
const UnwrapWETH = trade;
|
|
51
|
+
trade.encode(planner, { allowRevert: false });
|
|
52
|
+
currentNativeValueInRouter = currentNativeValueInRouter.add(UnwrapWETH.amount);
|
|
53
|
+
/**
|
|
54
|
+
* else
|
|
55
|
+
*/
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
throw 'trade must be of instance: UniswapTrade or UnwrapWETH';
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return SwapRouter.encodePlan(planner, transactionValue, config);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* @deprecated in favor of swapCallParameters. Update before next major version 2.0.0
|
|
65
|
+
* Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.
|
|
66
|
+
* @param trades to produce call parameters for
|
|
67
|
+
* @param options options for the call parameters
|
|
68
|
+
*/
|
|
69
|
+
static swapERC20CallParameters(trades, options) {
|
|
70
|
+
// TODO: use permit if signature included in swapOptions
|
|
71
|
+
const planner = new routerCommands_1.RoutePlanner();
|
|
72
|
+
const trade = new uniswap_1.UniswapTrade(trades, options);
|
|
73
|
+
const inputCurrency = trade.trade.inputAmount.currency;
|
|
74
|
+
(0, tiny_invariant_1.default)(!(inputCurrency.isNative && !!options.inputTokenPermit), 'NATIVE_INPUT_PERMIT');
|
|
75
|
+
if (options.inputTokenPermit) {
|
|
76
|
+
(0, inputTokens_1.encodePermit)(planner, options.inputTokenPermit);
|
|
77
|
+
}
|
|
78
|
+
const nativeCurrencyValue = inputCurrency.isNative
|
|
79
|
+
? ethers_1.BigNumber.from(trade.trade.maximumAmountIn(options.slippageTolerance).quotient.toString())
|
|
80
|
+
: ethers_1.BigNumber.from(0);
|
|
81
|
+
trade.encode(planner, { allowRevert: false });
|
|
82
|
+
return SwapRouter.encodePlan(planner, nativeCurrencyValue, {
|
|
83
|
+
deadline: options.deadlineOrPreviousBlockhash ? ethers_1.BigNumber.from(options.deadlineOrPreviousBlockhash) : undefined,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Encodes a planned route into a method name and parameters for the Router contract.
|
|
88
|
+
* @param planner the planned route
|
|
89
|
+
* @param nativeCurrencyValue the native currency value of the planned route
|
|
90
|
+
* @param config the router config
|
|
91
|
+
*/
|
|
92
|
+
static encodePlan(planner, nativeCurrencyValue, config = {}) {
|
|
93
|
+
const { commands, inputs } = planner;
|
|
94
|
+
const functionSignature = !!config.deadline ? 'execute(bytes,bytes[],uint256)' : 'execute(bytes,bytes[])';
|
|
95
|
+
const parameters = !!config.deadline ? [commands, inputs, config.deadline] : [commands, inputs];
|
|
96
|
+
const calldata = SwapRouter.INTERFACE.encodeFunctionData(functionSignature, parameters);
|
|
97
|
+
return { calldata, value: nativeCurrencyValue.toHexString() };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.SwapRouter = SwapRouter;
|
|
101
|
+
SwapRouter.INTERFACE = new abi_1.Interface(UNIVERSAL_ROUTER_ABI);
|
|
102
|
+
//# sourceMappingURL=swapRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swapRouter.js","sourceRoot":"","sources":["../../src/universal-router/swapRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const UNIVERSAL_ROUTER_ADDRESS: (chainId: number) => string;
|
|
2
|
+
export declare const UNIVERSAL_ROUTER_CREATION_BLOCK: (chainId: number) => number;
|
|
3
|
+
export declare const WETH_ADDRESS: (chainId: number) => string;
|
|
4
|
+
export declare const PERMIT2_ADDRESS = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
|
|
5
|
+
export declare const ETH_ADDRESS = "0x0000000000000000000000000000000000000000";
|
|
6
|
+
export declare const E_ETH_ADDRESS = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
|
|
7
|
+
export declare const SENDER_AS_RECIPIENT = "0x0000000000000000000000000000000000000001";
|
|
8
|
+
export declare const ROUTER_AS_RECIPIENT = "0x0000000000000000000000000000000000000002";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ROUTER_AS_RECIPIENT = exports.SENDER_AS_RECIPIENT = exports.E_ETH_ADDRESS = exports.ETH_ADDRESS = exports.PERMIT2_ADDRESS = exports.WETH_ADDRESS = exports.UNIVERSAL_ROUTER_CREATION_BLOCK = exports.UNIVERSAL_ROUTER_ADDRESS = void 0;
|
|
4
|
+
const chain_registry_1 = require("../../chain-registry");
|
|
5
|
+
const UNIVERSAL_ROUTER_ADDRESS = (chainId) => (0, chain_registry_1.getUniversalRouterDeployment)(chainId).router;
|
|
6
|
+
exports.UNIVERSAL_ROUTER_ADDRESS = UNIVERSAL_ROUTER_ADDRESS;
|
|
7
|
+
const UNIVERSAL_ROUTER_CREATION_BLOCK = (chainId) => (0, chain_registry_1.getUniversalRouterDeployment)(chainId).creationBlock;
|
|
8
|
+
exports.UNIVERSAL_ROUTER_CREATION_BLOCK = UNIVERSAL_ROUTER_CREATION_BLOCK;
|
|
9
|
+
const WETH_ADDRESS = (chainId) => {
|
|
10
|
+
const wrappedNative = (0, chain_registry_1.getUniversalRouterDeployment)(chainId).wrappedNative;
|
|
11
|
+
if (wrappedNative == chain_registry_1.WETH_NOT_SUPPORTED_ON_CHAIN)
|
|
12
|
+
throw new Error(`Chain ${chainId} does not have WETH`);
|
|
13
|
+
return wrappedNative;
|
|
14
|
+
};
|
|
15
|
+
exports.WETH_ADDRESS = WETH_ADDRESS;
|
|
16
|
+
exports.PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3';
|
|
17
|
+
exports.ETH_ADDRESS = '0x0000000000000000000000000000000000000000';
|
|
18
|
+
exports.E_ETH_ADDRESS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
|
|
19
|
+
exports.SENDER_AS_RECIPIENT = '0x0000000000000000000000000000000000000001';
|
|
20
|
+
exports.ROUTER_AS_RECIPIENT = '0x0000000000000000000000000000000000000002';
|
|
21
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/universal-router/utils/constants.ts"],"names":[],"mappings":";;;AAAA,yDAAgG;AAEzF,MAAM,wBAAwB,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,IAAA,6CAA4B,EAAC,OAAO,CAAC,CAAC,MAAM,CAAA;AAApG,QAAA,wBAAwB,4BAA4E;AAE1G,MAAM,+BAA+B,GAAG,CAAC,OAAe,EAAU,EAAE,CACzE,IAAA,6CAA4B,EAAC,OAAO,CAAC,CAAC,aAAa,CAAA;AADxC,QAAA,+BAA+B,mCACS;AAE9C,MAAM,YAAY,GAAG,CAAC,OAAe,EAAU,EAAE;IACtD,MAAM,aAAa,GAAG,IAAA,6CAA4B,EAAC,OAAO,CAAC,CAAC,aAAa,CAAA;IACzE,IAAI,aAAa,IAAI,4CAA2B;QAAE,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,qBAAqB,CAAC,CAAA;IACxG,OAAO,aAAa,CAAA;AACtB,CAAC,CAAA;AAJY,QAAA,YAAY,gBAIxB;AAEY,QAAA,eAAe,GAAG,4CAA4C,CAAA;AAE9D,QAAA,WAAW,GAAG,4CAA4C,CAAA;AAC1D,QAAA,aAAa,GAAG,4CAA4C,CAAA;AAE5D,QAAA,mBAAmB,GAAG,4CAA4C,CAAA;AAClE,QAAA,mBAAmB,GAAG,4CAA4C,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getNativeCurrencyValue = void 0;
|
|
4
|
+
const core_1 = require("../../core");
|
|
5
|
+
function getNativeCurrencyValue(currencyValues) {
|
|
6
|
+
for (const value of currencyValues) {
|
|
7
|
+
if (value.currency.isNative) {
|
|
8
|
+
const nativeCurrency = value.currency;
|
|
9
|
+
const zero = core_1.CurrencyAmount.fromRawAmount(nativeCurrency, 0);
|
|
10
|
+
return currencyValues.reduce(function (prevValue, currValue) {
|
|
11
|
+
const value = currValue.currency.isNative ? currValue : zero;
|
|
12
|
+
return prevValue.add(value);
|
|
13
|
+
}, zero);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return core_1.CurrencyAmount.fromRawAmount(core_1.Ether.onChain(1), 0);
|
|
17
|
+
}
|
|
18
|
+
exports.getNativeCurrencyValue = getNativeCurrencyValue;
|
|
19
|
+
//# sourceMappingURL=getNativeCurrencyValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getNativeCurrencyValue.js","sourceRoot":"","sources":["../../../src/universal-router/utils/getNativeCurrencyValue.ts"],"names":[],"mappings":";;;AAAA,qCAA4D;AAE5D,SAAgB,sBAAsB,CAAC,cAA0C;IAC/E,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE;QAClC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAC3B,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAA;YACrC,MAAM,IAAI,GAAG,qBAAc,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;YAE5D,OAAO,cAAc,CAAC,MAAM,CAAC,UAAU,SAAmC,EAAE,SAAmC;gBAC7G,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;gBAC5D,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC7B,CAAC,EAAE,IAAI,CAAC,CAAA;SACT;KACF;IACD,OAAO,qBAAc,CAAC,aAAa,CAAC,YAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAbD,wDAaC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PermitSingle } from '@uniswap/permit2-sdk';
|
|
2
|
+
import { RoutePlanner } from './routerCommands';
|
|
3
|
+
export interface Permit2Permit extends PermitSingle {
|
|
4
|
+
signature: string;
|
|
5
|
+
}
|
|
6
|
+
export type Permit2TransferFrom = {
|
|
7
|
+
token: string;
|
|
8
|
+
amount: string;
|
|
9
|
+
recipient?: string;
|
|
10
|
+
};
|
|
11
|
+
export type InputTokenOptions = {
|
|
12
|
+
permit2Permit?: Permit2Permit;
|
|
13
|
+
permit2TransferFrom?: Permit2TransferFrom;
|
|
14
|
+
};
|
|
15
|
+
export declare function encodePermit(planner: RoutePlanner, permit2: Permit2Permit): void;
|
|
16
|
+
export declare function encodeInputTokenOptions(planner: RoutePlanner, options: InputTokenOptions): void;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.encodeInputTokenOptions = exports.encodePermit = void 0;
|
|
7
|
+
const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
|
|
8
|
+
const ethers_1 = require("ethers");
|
|
9
|
+
const routerCommands_1 = require("./routerCommands");
|
|
10
|
+
const constants_1 = require("./constants");
|
|
11
|
+
const SIGNATURE_LENGTH = 65;
|
|
12
|
+
const EIP_2098_SIGNATURE_LENGTH = 64;
|
|
13
|
+
function encodePermit(planner, permit2) {
|
|
14
|
+
let signature = permit2.signature;
|
|
15
|
+
const length = ethers_1.ethers.utils.arrayify(permit2.signature).length;
|
|
16
|
+
// signature data provided for EIP-1271 may have length different from ECDSA signature
|
|
17
|
+
if (length === SIGNATURE_LENGTH || length === EIP_2098_SIGNATURE_LENGTH) {
|
|
18
|
+
// sanitizes signature to cover edge cases of malformed EIP-2098 sigs and v used as recovery id
|
|
19
|
+
signature = ethers_1.ethers.utils.joinSignature(ethers_1.ethers.utils.splitSignature(permit2.signature));
|
|
20
|
+
}
|
|
21
|
+
planner.addCommand(routerCommands_1.CommandType.PERMIT2_PERMIT, [permit2, signature]);
|
|
22
|
+
}
|
|
23
|
+
exports.encodePermit = encodePermit;
|
|
24
|
+
// Handles the encoding of commands needed to gather input tokens for a trade
|
|
25
|
+
// Permit: A Permit2 signature-based Permit to allow the router to access a user's tokens
|
|
26
|
+
// Transfer: A Permit2 TransferFrom of tokens from a user to either the router or another address.
|
|
27
|
+
function encodeInputTokenOptions(planner, options) {
|
|
28
|
+
// first ensure that all tokens provided for encoding are the same
|
|
29
|
+
if (!!options.permit2TransferFrom && !!options.permit2Permit)
|
|
30
|
+
(0, tiny_invariant_1.default)(options.permit2TransferFrom.token === options.permit2Permit.details.token, `inconsistent token`);
|
|
31
|
+
// if this order has a options.permit2Permit, encode it
|
|
32
|
+
if (!!options.permit2Permit) {
|
|
33
|
+
encodePermit(planner, options.permit2Permit);
|
|
34
|
+
}
|
|
35
|
+
if (!!options.permit2TransferFrom) {
|
|
36
|
+
planner.addCommand(routerCommands_1.CommandType.PERMIT2_TRANSFER_FROM, [
|
|
37
|
+
options.permit2TransferFrom.token,
|
|
38
|
+
options.permit2TransferFrom.recipient ? options.permit2TransferFrom.recipient : constants_1.ROUTER_AS_RECIPIENT,
|
|
39
|
+
options.permit2TransferFrom.amount,
|
|
40
|
+
]);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.encodeInputTokenOptions = encodeInputTokenOptions;
|
|
44
|
+
//# sourceMappingURL=inputTokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputTokens.js","sourceRoot":"","sources":["../../../src/universal-router/utils/inputTokens.ts"],"names":[],"mappings":";;;;;;AAAA,oEAAsC;AACtC,mCAA+B;AAE/B,qDAA4D;AAC5D,2CAAiD;AAiBjD,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAC3B,MAAM,yBAAyB,GAAG,EAAE,CAAA;AAEpC,SAAgB,YAAY,CAAC,OAAqB,EAAE,OAAsB;IACxE,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;IAEjC,MAAM,MAAM,GAAG,eAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAA;IAC9D,sFAAsF;IACtF,IAAI,MAAM,KAAK,gBAAgB,IAAI,MAAM,KAAK,yBAAyB,EAAE;QACvE,+FAA+F;QAC/F,SAAS,GAAG,eAAM,CAAC,KAAK,CAAC,aAAa,CAAC,eAAM,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;KACvF;IAED,OAAO,CAAC,UAAU,CAAC,4BAAW,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;AACtE,CAAC;AAXD,oCAWC;AAED,6EAA6E;AAC7E,yFAAyF;AACzF,kGAAkG;AAClG,SAAgB,uBAAuB,CAAC,OAAqB,EAAE,OAA0B;IACvF,kEAAkE;IAClE,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa;QAC1D,IAAA,wBAAS,EAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,KAAK,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAA;IAE5G,uDAAuD;IACvD,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE;QAC3B,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;KAC7C;IAED,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE;QACjC,OAAO,CAAC,UAAU,CAAC,4BAAW,CAAC,qBAAqB,EAAE;YACpD,OAAO,CAAC,mBAAmB,CAAC,KAAK;YACjC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,+BAAmB;YACnG,OAAO,CAAC,mBAAmB,CAAC,MAAM;SACnC,CAAC,CAAA;KACH;AACH,CAAC;AAjBD,0DAiBC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BigNumber } from 'ethers';
|
|
2
|
+
import JSBI from 'jsbi';
|
|
3
|
+
import { Percent } from '../../core';
|
|
4
|
+
export declare function expandTo18DecimalsBN(n: number): BigNumber;
|
|
5
|
+
export declare function expandTo18Decimals(n: number): JSBI;
|
|
6
|
+
export declare function encodeFeeBips(fee: Percent): string;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.encodeFeeBips = exports.expandTo18Decimals = exports.expandTo18DecimalsBN = void 0;
|
|
7
|
+
const ethers_1 = require("ethers");
|
|
8
|
+
const jsbi_1 = __importDefault(require("jsbi"));
|
|
9
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
10
|
+
const v3_1 = require("../../v3");
|
|
11
|
+
function expandTo18DecimalsBN(n) {
|
|
12
|
+
// use bn intermediately to allow decimals in intermediate calculations
|
|
13
|
+
return ethers_1.BigNumber.from(new bignumber_js_1.default(n).times(new bignumber_js_1.default(10).pow(18)).toFixed());
|
|
14
|
+
}
|
|
15
|
+
exports.expandTo18DecimalsBN = expandTo18DecimalsBN;
|
|
16
|
+
function expandTo18Decimals(n) {
|
|
17
|
+
return jsbi_1.default.BigInt(ethers_1.BigNumber.from(n).mul(ethers_1.BigNumber.from(10).pow(18)).toString());
|
|
18
|
+
}
|
|
19
|
+
exports.expandTo18Decimals = expandTo18Decimals;
|
|
20
|
+
function encodeFeeBips(fee) {
|
|
21
|
+
return (0, v3_1.toHex)(fee.multiply(10000).quotient);
|
|
22
|
+
}
|
|
23
|
+
exports.encodeFeeBips = encodeFeeBips;
|
|
24
|
+
//# sourceMappingURL=numbers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numbers.js","sourceRoot":"","sources":["../../../src/universal-router/utils/numbers.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAkC;AAClC,gDAAuB;AACvB,gEAA6B;AAE7B,iCAAgC;AAEhC,SAAgB,oBAAoB,CAAC,CAAS;IAC5C,uEAAuE;IACvE,OAAO,kBAAS,CAAC,IAAI,CAAC,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,sBAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;AACtE,CAAC;AAHD,oDAGC;AAED,SAAgB,kBAAkB,CAAC,CAAS;IAC1C,OAAO,cAAI,CAAC,MAAM,CAAC,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;AAClF,CAAC;AAFD,gDAEC;AAED,SAAgB,aAAa,CAAC,GAAY;IACxC,OAAO,IAAA,UAAK,EAAC,GAAG,CAAC,QAAQ,CAAC,KAAM,CAAC,CAAC,QAAQ,CAAC,CAAA;AAC7C,CAAC;AAFD,sCAEC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CommandTypes
|
|
3
|
+
* @description Flags that modify a command's execution
|
|
4
|
+
* @enum {number}
|
|
5
|
+
*/
|
|
6
|
+
export declare enum CommandType {
|
|
7
|
+
V3_SWAP_EXACT_IN = 0,
|
|
8
|
+
V3_SWAP_EXACT_OUT = 1,
|
|
9
|
+
PERMIT2_TRANSFER_FROM = 2,
|
|
10
|
+
PERMIT2_PERMIT_BATCH = 3,
|
|
11
|
+
SWEEP = 4,
|
|
12
|
+
TRANSFER = 5,
|
|
13
|
+
PAY_PORTION = 6,
|
|
14
|
+
PERMIT2_PERMIT = 10,
|
|
15
|
+
WRAP_ETH = 11,
|
|
16
|
+
UNWRAP_WETH = 12,
|
|
17
|
+
PERMIT2_TRANSFER_FROM_BATCH = 13
|
|
18
|
+
}
|
|
19
|
+
export declare class RoutePlanner {
|
|
20
|
+
commands: string;
|
|
21
|
+
inputs: string[];
|
|
22
|
+
constructor();
|
|
23
|
+
addCommand(type: CommandType, parameters: any[], allowRevert?: boolean): void;
|
|
24
|
+
}
|
|
25
|
+
export type RouterCommand = {
|
|
26
|
+
type: CommandType;
|
|
27
|
+
encodedInput: string;
|
|
28
|
+
};
|
|
29
|
+
export declare function createCommand(type: CommandType, parameters: any[]): RouterCommand;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createCommand = exports.RoutePlanner = exports.CommandType = void 0;
|
|
4
|
+
const utils_1 = require("ethers/lib/utils");
|
|
5
|
+
/**
|
|
6
|
+
* CommandTypes
|
|
7
|
+
* @description Flags that modify a command's execution
|
|
8
|
+
* @enum {number}
|
|
9
|
+
*/
|
|
10
|
+
var CommandType;
|
|
11
|
+
(function (CommandType) {
|
|
12
|
+
CommandType[CommandType["V3_SWAP_EXACT_IN"] = 0] = "V3_SWAP_EXACT_IN";
|
|
13
|
+
CommandType[CommandType["V3_SWAP_EXACT_OUT"] = 1] = "V3_SWAP_EXACT_OUT";
|
|
14
|
+
CommandType[CommandType["PERMIT2_TRANSFER_FROM"] = 2] = "PERMIT2_TRANSFER_FROM";
|
|
15
|
+
CommandType[CommandType["PERMIT2_PERMIT_BATCH"] = 3] = "PERMIT2_PERMIT_BATCH";
|
|
16
|
+
CommandType[CommandType["SWEEP"] = 4] = "SWEEP";
|
|
17
|
+
CommandType[CommandType["TRANSFER"] = 5] = "TRANSFER";
|
|
18
|
+
CommandType[CommandType["PAY_PORTION"] = 6] = "PAY_PORTION";
|
|
19
|
+
CommandType[CommandType["PERMIT2_PERMIT"] = 10] = "PERMIT2_PERMIT";
|
|
20
|
+
CommandType[CommandType["WRAP_ETH"] = 11] = "WRAP_ETH";
|
|
21
|
+
CommandType[CommandType["UNWRAP_WETH"] = 12] = "UNWRAP_WETH";
|
|
22
|
+
CommandType[CommandType["PERMIT2_TRANSFER_FROM_BATCH"] = 13] = "PERMIT2_TRANSFER_FROM_BATCH";
|
|
23
|
+
})(CommandType = exports.CommandType || (exports.CommandType = {}));
|
|
24
|
+
const PERMIT_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce) details,address spender,uint256 sigDeadline)';
|
|
25
|
+
const PERMIT_BATCH_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce)[] details,address spender,uint256 sigDeadline)';
|
|
26
|
+
const PERMIT2_TRANSFER_FROM_STRUCT = '(address from,address to,uint160 amount,address token)';
|
|
27
|
+
const PERMIT2_TRANSFER_FROM_BATCH_STRUCT = PERMIT2_TRANSFER_FROM_STRUCT + '[]';
|
|
28
|
+
const ABI_DEFINITION = {
|
|
29
|
+
// Permit2 Actions
|
|
30
|
+
[CommandType.PERMIT2_PERMIT]: [PERMIT_STRUCT, 'bytes'],
|
|
31
|
+
[CommandType.PERMIT2_PERMIT_BATCH]: [PERMIT_BATCH_STRUCT, 'bytes'],
|
|
32
|
+
[CommandType.PERMIT2_TRANSFER_FROM]: ['address', 'address', 'uint160'],
|
|
33
|
+
[CommandType.PERMIT2_TRANSFER_FROM_BATCH]: [PERMIT2_TRANSFER_FROM_BATCH_STRUCT],
|
|
34
|
+
// Uniswap Actions
|
|
35
|
+
[CommandType.V3_SWAP_EXACT_IN]: ['address', 'uint256', 'uint256', 'bytes', 'bool'],
|
|
36
|
+
[CommandType.V3_SWAP_EXACT_OUT]: ['address', 'uint256', 'uint256', 'bytes', 'bool'],
|
|
37
|
+
// Token Actions and Checks
|
|
38
|
+
[CommandType.WRAP_ETH]: ['address', 'uint256'],
|
|
39
|
+
[CommandType.UNWRAP_WETH]: ['address', 'uint256'],
|
|
40
|
+
[CommandType.SWEEP]: ['address', 'address', 'uint256'],
|
|
41
|
+
[CommandType.TRANSFER]: ['address', 'address', 'uint256'],
|
|
42
|
+
[CommandType.PAY_PORTION]: ['address', 'address', 'uint256'],
|
|
43
|
+
};
|
|
44
|
+
class RoutePlanner {
|
|
45
|
+
constructor() {
|
|
46
|
+
this.commands = '0x';
|
|
47
|
+
this.inputs = [];
|
|
48
|
+
}
|
|
49
|
+
addCommand(type, parameters, allowRevert = false) {
|
|
50
|
+
let command = createCommand(type, parameters);
|
|
51
|
+
this.inputs.push(command.encodedInput);
|
|
52
|
+
if (allowRevert) {
|
|
53
|
+
throw new Error(`command type: ${command.type} cannot be allowed to revert`);
|
|
54
|
+
}
|
|
55
|
+
this.commands = this.commands.concat(command.type.toString(16).padStart(2, '0'));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.RoutePlanner = RoutePlanner;
|
|
59
|
+
function createCommand(type, parameters) {
|
|
60
|
+
const encodedInput = utils_1.defaultAbiCoder.encode(ABI_DEFINITION[type], parameters);
|
|
61
|
+
return { type, encodedInput };
|
|
62
|
+
}
|
|
63
|
+
exports.createCommand = createCommand;
|
|
64
|
+
//# sourceMappingURL=routerCommands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routerCommands.js","sourceRoot":"","sources":["../../../src/universal-router/utils/routerCommands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Currency, TradeType } from '../../core';
|
|
2
|
+
import { SynthraTrade } from '../entities/trade';
|
|
3
|
+
export type TokenInRoute = {
|
|
4
|
+
address: string;
|
|
5
|
+
chainId: number;
|
|
6
|
+
symbol: string;
|
|
7
|
+
decimals: string;
|
|
8
|
+
name?: string;
|
|
9
|
+
buyFeeBps?: string;
|
|
10
|
+
sellFeeBps?: string;
|
|
11
|
+
};
|
|
12
|
+
export declare enum PoolType {
|
|
13
|
+
V3Pool = "v3-pool"
|
|
14
|
+
}
|
|
15
|
+
export type V3PoolInRoute = {
|
|
16
|
+
type: PoolType.V3Pool;
|
|
17
|
+
address?: string;
|
|
18
|
+
tokenIn: TokenInRoute;
|
|
19
|
+
tokenOut: TokenInRoute;
|
|
20
|
+
sqrtRatioX96: string;
|
|
21
|
+
liquidity: string;
|
|
22
|
+
tickCurrent: string;
|
|
23
|
+
fee: string;
|
|
24
|
+
amountIn?: string;
|
|
25
|
+
amountOut?: string;
|
|
26
|
+
};
|
|
27
|
+
export type PartialClassicQuote = {
|
|
28
|
+
tokenIn: string;
|
|
29
|
+
tokenOut: string;
|
|
30
|
+
tradeType: TradeType;
|
|
31
|
+
route: V3PoolInRoute[][];
|
|
32
|
+
};
|
|
33
|
+
export declare const isNativeCurrency: (address: string) => boolean;
|
|
34
|
+
export declare class RouterTradeAdapter {
|
|
35
|
+
static fromClassicQuote(quote: PartialClassicQuote): SynthraTrade<Currency, Currency, TradeType>;
|
|
36
|
+
private static toCurrency;
|
|
37
|
+
private static toToken;
|
|
38
|
+
private static toPool;
|
|
39
|
+
private static isVersionedRoute;
|
|
40
|
+
}
|