@centurion_project/universal-router-sdk 5.1.0-ctn.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/README.md +332 -0
  2. package/dist/cjs/src/entities/Command.d.ts +12 -0
  3. package/dist/cjs/src/entities/Command.js +9 -0
  4. package/dist/cjs/src/entities/Command.js.map +1 -0
  5. package/dist/cjs/src/entities/actions/across.d.ts +21 -0
  6. package/dist/cjs/src/entities/actions/across.js +7 -0
  7. package/dist/cjs/src/entities/actions/across.js.map +1 -0
  8. package/dist/cjs/src/entities/actions/index.d.ts +3 -0
  9. package/dist/cjs/src/entities/actions/index.js +7 -0
  10. package/dist/cjs/src/entities/actions/index.js.map +1 -0
  11. package/dist/cjs/src/entities/actions/uniswap.d.ts +38 -0
  12. package/dist/cjs/src/entities/actions/uniswap.js +545 -0
  13. package/dist/cjs/src/entities/actions/uniswap.js.map +1 -0
  14. package/dist/cjs/src/entities/actions/unwrapWETH.d.ts +12 -0
  15. package/dist/cjs/src/entities/actions/unwrapWETH.js +33 -0
  16. package/dist/cjs/src/entities/actions/unwrapWETH.js.map +1 -0
  17. package/dist/cjs/src/entities/index.d.ts +2 -0
  18. package/dist/cjs/src/entities/index.js +6 -0
  19. package/dist/cjs/src/entities/index.js.map +1 -0
  20. package/dist/cjs/src/index.d.ts +11 -0
  21. package/dist/cjs/src/index.js +31 -0
  22. package/dist/cjs/src/index.js.map +1 -0
  23. package/dist/cjs/src/swapRouter.d.ts +87 -0
  24. package/dist/cjs/src/swapRouter.js +263 -0
  25. package/dist/cjs/src/swapRouter.js.map +1 -0
  26. package/dist/cjs/src/utils/commandParser.d.ts +34 -0
  27. package/dist/cjs/src/utils/commandParser.js +145 -0
  28. package/dist/cjs/src/utils/commandParser.js.map +1 -0
  29. package/dist/cjs/src/utils/constants.d.ts +39 -0
  30. package/dist/cjs/src/utils/constants.js +549 -0
  31. package/dist/cjs/src/utils/constants.js.map +1 -0
  32. package/dist/cjs/src/utils/eip712.d.ts +17 -0
  33. package/dist/cjs/src/utils/eip712.js +43 -0
  34. package/dist/cjs/src/utils/eip712.js.map +1 -0
  35. package/dist/cjs/src/utils/getCurrencyAddress.d.ts +2 -0
  36. package/dist/cjs/src/utils/getCurrencyAddress.js +9 -0
  37. package/dist/cjs/src/utils/getCurrencyAddress.js.map +1 -0
  38. package/dist/cjs/src/utils/inputTokens.d.ts +23 -0
  39. package/dist/cjs/src/utils/inputTokens.js +58 -0
  40. package/dist/cjs/src/utils/inputTokens.js.map +1 -0
  41. package/dist/cjs/src/utils/numbers.d.ts +7 -0
  42. package/dist/cjs/src/utils/numbers.js +27 -0
  43. package/dist/cjs/src/utils/numbers.js.map +1 -0
  44. package/dist/cjs/src/utils/pathCurrency.d.ts +3 -0
  45. package/dist/cjs/src/utils/pathCurrency.js +27 -0
  46. package/dist/cjs/src/utils/pathCurrency.js.map +1 -0
  47. package/dist/cjs/src/utils/routerCommands.d.ts +77 -0
  48. package/dist/cjs/src/utils/routerCommands.js +334 -0
  49. package/dist/cjs/src/utils/routerCommands.js.map +1 -0
  50. package/dist/cjs/src/utils/routerTradeAdapter.d.ts +73 -0
  51. package/dist/cjs/src/utils/routerTradeAdapter.js +139 -0
  52. package/dist/cjs/src/utils/routerTradeAdapter.js.map +1 -0
  53. package/dist/esm/src/entities/Command.d.ts +12 -0
  54. package/dist/esm/src/entities/Command.js +6 -0
  55. package/dist/esm/src/entities/Command.js.map +1 -0
  56. package/dist/esm/src/entities/actions/across.d.ts +21 -0
  57. package/dist/esm/src/entities/actions/across.js +3 -0
  58. package/dist/esm/src/entities/actions/across.js.map +1 -0
  59. package/dist/esm/src/entities/actions/index.d.ts +3 -0
  60. package/dist/esm/src/entities/actions/index.js +4 -0
  61. package/dist/esm/src/entities/actions/index.js.map +1 -0
  62. package/dist/esm/src/entities/actions/uniswap.d.ts +38 -0
  63. package/dist/esm/src/entities/actions/uniswap.js +541 -0
  64. package/dist/esm/src/entities/actions/uniswap.js.map +1 -0
  65. package/dist/esm/src/entities/actions/unwrapWETH.d.ts +12 -0
  66. package/dist/esm/src/entities/actions/unwrapWETH.js +28 -0
  67. package/dist/esm/src/entities/actions/unwrapWETH.js.map +1 -0
  68. package/dist/esm/src/entities/index.d.ts +2 -0
  69. package/dist/esm/src/entities/index.js +3 -0
  70. package/dist/esm/src/entities/index.js.map +1 -0
  71. package/dist/esm/src/index.d.ts +11 -0
  72. package/dist/esm/src/index.js +8 -0
  73. package/dist/esm/src/index.js.map +1 -0
  74. package/dist/esm/src/swapRouter.d.ts +87 -0
  75. package/dist/esm/src/swapRouter.js +258 -0
  76. package/dist/esm/src/swapRouter.js.map +1 -0
  77. package/dist/esm/src/utils/commandParser.d.ts +34 -0
  78. package/dist/esm/src/utils/commandParser.js +137 -0
  79. package/dist/esm/src/utils/commandParser.js.map +1 -0
  80. package/dist/esm/src/utils/constants.d.ts +39 -0
  81. package/dist/esm/src/utils/constants.js +541 -0
  82. package/dist/esm/src/utils/constants.js.map +1 -0
  83. package/dist/esm/src/utils/eip712.d.ts +17 -0
  84. package/dist/esm/src/utils/eip712.js +38 -0
  85. package/dist/esm/src/utils/eip712.js.map +1 -0
  86. package/dist/esm/src/utils/getCurrencyAddress.d.ts +2 -0
  87. package/dist/esm/src/utils/getCurrencyAddress.js +5 -0
  88. package/dist/esm/src/utils/getCurrencyAddress.js.map +1 -0
  89. package/dist/esm/src/utils/inputTokens.d.ts +23 -0
  90. package/dist/esm/src/utils/inputTokens.js +51 -0
  91. package/dist/esm/src/utils/inputTokens.js.map +1 -0
  92. package/dist/esm/src/utils/numbers.d.ts +7 -0
  93. package/dist/esm/src/utils/numbers.js +19 -0
  94. package/dist/esm/src/utils/numbers.js.map +1 -0
  95. package/dist/esm/src/utils/pathCurrency.d.ts +3 -0
  96. package/dist/esm/src/utils/pathCurrency.js +23 -0
  97. package/dist/esm/src/utils/pathCurrency.js.map +1 -0
  98. package/dist/esm/src/utils/routerCommands.d.ts +77 -0
  99. package/dist/esm/src/utils/routerCommands.js +329 -0
  100. package/dist/esm/src/utils/routerCommands.js.map +1 -0
  101. package/dist/esm/src/utils/routerTradeAdapter.d.ts +73 -0
  102. package/dist/esm/src/utils/routerTradeAdapter.js +134 -0
  103. package/dist/esm/src/utils/routerTradeAdapter.js.map +1 -0
  104. package/dist/types/src/entities/Command.d.ts +12 -0
  105. package/dist/types/src/entities/actions/across.d.ts +21 -0
  106. package/dist/types/src/entities/actions/index.d.ts +3 -0
  107. package/dist/types/src/entities/actions/uniswap.d.ts +38 -0
  108. package/dist/types/src/entities/actions/unwrapWETH.d.ts +12 -0
  109. package/dist/types/src/entities/index.d.ts +2 -0
  110. package/dist/types/src/index.d.ts +11 -0
  111. package/dist/types/src/swapRouter.d.ts +87 -0
  112. package/dist/types/src/utils/commandParser.d.ts +34 -0
  113. package/dist/types/src/utils/constants.d.ts +39 -0
  114. package/dist/types/src/utils/eip712.d.ts +17 -0
  115. package/dist/types/src/utils/getCurrencyAddress.d.ts +2 -0
  116. package/dist/types/src/utils/inputTokens.d.ts +23 -0
  117. package/dist/types/src/utils/numbers.d.ts +7 -0
  118. package/dist/types/src/utils/pathCurrency.d.ts +3 -0
  119. package/dist/types/src/utils/routerCommands.d.ts +77 -0
  120. package/dist/types/src/utils/routerTradeAdapter.d.ts +73 -0
  121. package/package.json +85 -0
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCurrencyAddress = void 0;
4
+ const constants_1 = require("./constants");
5
+ function getCurrencyAddress(currency) {
6
+ return currency.isNative ? constants_1.ETH_ADDRESS : currency.wrapped.address;
7
+ }
8
+ exports.getCurrencyAddress = getCurrencyAddress;
9
+ //# sourceMappingURL=getCurrencyAddress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCurrencyAddress.js","sourceRoot":"","sources":["../../../../src/utils/getCurrencyAddress.ts"],"names":[],"mappings":";;;AACA,2CAAyC;AAEzC,SAAgB,kBAAkB,CAAC,QAAkB;IACnD,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,uBAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAA;AACnE,CAAC;AAFD,gDAEC"}
@@ -0,0 +1,23 @@
1
+ import { BigintIsh } from '@centurion_project/sdk-core';
2
+ import { NFTPermitOptions } from '@centurion_project/v3-sdk';
3
+ import { PermitSingle } from '@centurion_project/permit2-sdk';
4
+ import { RoutePlanner } from './routerCommands';
5
+ export interface Permit2Permit extends PermitSingle {
6
+ signature: string;
7
+ }
8
+ export type ApproveProtocol = {
9
+ token: string;
10
+ protocol: string;
11
+ };
12
+ export type Permit2TransferFrom = {
13
+ token: string;
14
+ amount: string;
15
+ recipient?: string;
16
+ };
17
+ export type InputTokenOptions = {
18
+ permit2Permit?: Permit2Permit;
19
+ permit2TransferFrom?: Permit2TransferFrom;
20
+ };
21
+ export declare function encodePermit(planner: RoutePlanner, permit2: Permit2Permit): void;
22
+ export declare function encodeV3PositionPermit(planner: RoutePlanner, permit: NFTPermitOptions, tokenId: BigintIsh): void;
23
+ export declare function encodeInputTokenOptions(planner: RoutePlanner, options: InputTokenOptions): void;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encodeInputTokenOptions = exports.encodeV3PositionPermit = exports.encodePermit = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const tiny_invariant_1 = tslib_1.__importDefault(require("tiny-invariant"));
6
+ const ethers_1 = require("ethers");
7
+ const sdk_core_1 = require("@centurion_project/sdk-core");
8
+ const v3_sdk_1 = require("@centurion_project/v3-sdk");
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
+ function encodeV3PositionPermit(planner, permit, tokenId) {
25
+ const calldata = v3_sdk_1.NonfungiblePositionManager.INTERFACE.encodeFunctionData('permit', [
26
+ (0, sdk_core_1.validateAndParseAddress)(permit.spender),
27
+ tokenId,
28
+ permit.deadline,
29
+ permit.v,
30
+ permit.r,
31
+ permit.s,
32
+ ]);
33
+ planner.addCommand(routerCommands_1.CommandType.V3_POSITION_MANAGER_PERMIT, [calldata]);
34
+ }
35
+ exports.encodeV3PositionPermit = encodeV3PositionPermit;
36
+ // Handles the encoding of commands needed to gather input tokens for a trade
37
+ // Approval: The router approving another address to take tokens.
38
+ // note: Only seaport and sudoswap support this action. Approvals are left open.
39
+ // Permit: A Permit2 signature-based Permit to allow the router to access a user's tokens
40
+ // Transfer: A Permit2 TransferFrom of tokens from a user to either the router or another address
41
+ function encodeInputTokenOptions(planner, options) {
42
+ // first ensure that all tokens provided for encoding are the same
43
+ if (!!options.permit2TransferFrom && !!options.permit2Permit)
44
+ (0, tiny_invariant_1.default)(options.permit2TransferFrom.token === options.permit2Permit.details.token, `inconsistent token`);
45
+ // if this order has a options.permit2Permit, encode it
46
+ if (!!options.permit2Permit) {
47
+ encodePermit(planner, options.permit2Permit);
48
+ }
49
+ if (!!options.permit2TransferFrom) {
50
+ planner.addCommand(routerCommands_1.CommandType.PERMIT2_TRANSFER_FROM, [
51
+ options.permit2TransferFrom.token,
52
+ options.permit2TransferFrom.recipient ? options.permit2TransferFrom.recipient : constants_1.ROUTER_AS_RECIPIENT,
53
+ options.permit2TransferFrom.amount,
54
+ ]);
55
+ }
56
+ }
57
+ exports.encodeInputTokenOptions = encodeInputTokenOptions;
58
+ //# sourceMappingURL=inputTokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputTokens.js","sourceRoot":"","sources":["../../../../src/utils/inputTokens.ts"],"names":[],"mappings":";;;;AAAA,4EAAsC;AACtC,mCAA+B;AAC/B,0DAAgF;AAChF,sDAAwF;AAExF,qDAA4D;AAC5D,2CAAiD;AAsBjD,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,SAAgB,sBAAsB,CAAC,OAAqB,EAAE,MAAwB,EAAE,OAAkB;IACxG,MAAM,QAAQ,GAAG,mCAA0B,CAAC,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE;QACjF,IAAA,kCAAuB,EAAC,MAAM,CAAC,OAAO,CAAC;QACvC,OAAO;QACP,MAAM,CAAC,QAAQ;QACf,MAAM,CAAC,CAAC;QACR,MAAM,CAAC,CAAC;QACR,MAAM,CAAC,CAAC;KACT,CAAC,CAAA;IAEF,OAAO,CAAC,UAAU,CAAC,4BAAW,CAAC,0BAA0B,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;AACxE,CAAC;AAXD,wDAWC;AAED,6EAA6E;AAC7E,iEAAiE;AACjE,kFAAkF;AAClF,yFAAyF;AACzF,iGAAiG;AACjG,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,7 @@
1
+ import { BigNumber } from 'ethers';
2
+ import JSBI from 'jsbi';
3
+ import { Percent } from '@centurion_project/sdk-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;
7
+ export declare function encodeFee1e18(fee: Percent): string;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encodeFee1e18 = exports.encodeFeeBips = exports.expandTo18Decimals = exports.expandTo18DecimalsBN = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const ethers_1 = require("ethers");
6
+ const jsbi_1 = tslib_1.__importDefault(require("jsbi"));
7
+ const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
8
+ const v3_sdk_1 = require("@centurion_project/v3-sdk");
9
+ function expandTo18DecimalsBN(n) {
10
+ // use bn intermediately to allow decimals in intermediate calculations
11
+ return ethers_1.BigNumber.from(new bignumber_js_1.default(n).times(new bignumber_js_1.default(10).pow(18)).toFixed());
12
+ }
13
+ exports.expandTo18DecimalsBN = expandTo18DecimalsBN;
14
+ function expandTo18Decimals(n) {
15
+ return jsbi_1.default.BigInt(ethers_1.BigNumber.from(n).mul(ethers_1.BigNumber.from(10).pow(18)).toString());
16
+ }
17
+ exports.expandTo18Decimals = expandTo18Decimals;
18
+ function encodeFeeBips(fee) {
19
+ return (0, v3_sdk_1.toHex)(fee.multiply(10000).quotient);
20
+ }
21
+ exports.encodeFeeBips = encodeFeeBips;
22
+ const FULL_PORTION_PRECISION = jsbi_1.default.exponentiate(jsbi_1.default.BigInt(10), jsbi_1.default.BigInt(18));
23
+ function encodeFee1e18(fee) {
24
+ return (0, v3_sdk_1.toHex)(fee.multiply(FULL_PORTION_PRECISION).quotient);
25
+ }
26
+ exports.encodeFee1e18 = encodeFee1e18;
27
+ //# sourceMappingURL=numbers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numbers.js","sourceRoot":"","sources":["../../../../src/utils/numbers.ts"],"names":[],"mappings":";;;;AAAA,mCAAkC;AAClC,wDAAuB;AACvB,wEAA6B;AAE7B,sDAAiD;AAEjD,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,cAAK,EAAC,GAAG,CAAC,QAAQ,CAAC,KAAM,CAAC,CAAC,QAAQ,CAAC,CAAA;AAC7C,CAAC;AAFD,sCAEC;AAED,MAAM,sBAAsB,GAAG,cAAI,CAAC,YAAY,CAAC,cAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,cAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;AAElF,SAAgB,aAAa,CAAC,GAAY;IACxC,OAAO,IAAA,cAAK,EAAC,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,CAAA;AAC7D,CAAC;AAFD,sCAEC"}
@@ -0,0 +1,3 @@
1
+ import { Currency } from '@centurion_project/sdk-core';
2
+ import { TPool } from '@centurion_project/router-sdk';
3
+ export declare function getPathCurrency(currency: Currency, pool: TPool): Currency;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPathCurrency = void 0;
4
+ const v4_sdk_1 = require("@uniswap/v4-sdk");
5
+ function getPathCurrency(currency, pool) {
6
+ // return currency if the currency matches a currency of the pool
7
+ if (pool.involvesToken(currency)) {
8
+ return currency;
9
+ // return if currency.wrapped if pool involves wrapped currency
10
+ }
11
+ else if (pool.involvesToken(currency.wrapped)) {
12
+ return currency.wrapped;
13
+ // return native currency if pool involves native version of wrapped currency (only applies to V4)
14
+ }
15
+ else if (pool instanceof v4_sdk_1.Pool && pool.token0.wrapped.equals(currency)) {
16
+ return pool.token0;
17
+ }
18
+ else if (pool instanceof v4_sdk_1.Pool && pool.token1.wrapped.equals(currency)) {
19
+ return pool.token1;
20
+ }
21
+ else {
22
+ throw new Error(`Expected currency ${currency.symbol} to be either ${pool.token0.symbol} or ${pool.token1.symbol}`);
23
+ }
24
+ return currency; // this line needed for typescript to compile
25
+ }
26
+ exports.getPathCurrency = getPathCurrency;
27
+ //# sourceMappingURL=pathCurrency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathCurrency.js","sourceRoot":"","sources":["../../../../src/utils/pathCurrency.ts"],"names":[],"mappings":";;;AACA,4CAAgD;AAGhD,SAAgB,eAAe,CAAC,QAAkB,EAAE,IAAW;IAC7D,iEAAiE;IACjE,IAAI,IAAI,CAAC,aAAa,CAAC,QAAiB,CAAC,EAAE;QACzC,OAAO,QAAQ,CAAA;QAEf,+DAA+D;KAChE;SAAM,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAgB,CAAC,EAAE;QACxD,OAAO,QAAQ,CAAC,OAAO,CAAA;QAEvB,kGAAkG;KACnG;SAAM,IAAI,IAAI,YAAY,aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;QACzE,OAAO,IAAI,CAAC,MAAM,CAAA;KACnB;SAAM,IAAI,IAAI,YAAY,aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;QACzE,OAAO,IAAI,CAAC,MAAM,CAAA;KACnB;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,iBAAiB,IAAI,CAAC,MAAM,CAAC,MAAM,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;KACpH;IAED,OAAO,QAAQ,CAAA,CAAC,6CAA6C;AAC/D,CAAC;AAnBD,0CAmBC"}
@@ -0,0 +1,77 @@
1
+ import { UniversalRouterVersion } from './constants';
2
+ import { AcrossV4DepositV3Params } from '../entities/actions/across';
3
+ /**
4
+ * CommandTypes
5
+ * @description Flags that modify a command's execution
6
+ * @enum {number}
7
+ */
8
+ export declare enum CommandType {
9
+ V3_SWAP_EXACT_IN = 0,
10
+ V3_SWAP_EXACT_OUT = 1,
11
+ PERMIT2_TRANSFER_FROM = 2,
12
+ PERMIT2_PERMIT_BATCH = 3,
13
+ SWEEP = 4,
14
+ TRANSFER = 5,
15
+ PAY_PORTION = 6,
16
+ PAY_PORTION_FULL_PRECISION = 7,
17
+ V2_SWAP_EXACT_IN = 8,
18
+ V2_SWAP_EXACT_OUT = 9,
19
+ PERMIT2_PERMIT = 10,
20
+ WRAP_ETH = 11,
21
+ UNWRAP_WETH = 12,
22
+ PERMIT2_TRANSFER_FROM_BATCH = 13,
23
+ BALANCE_CHECK_ERC20 = 14,
24
+ V4_SWAP = 16,
25
+ V3_POSITION_MANAGER_PERMIT = 17,
26
+ V3_POSITION_MANAGER_CALL = 18,
27
+ V4_INITIALIZE_POOL = 19,
28
+ V4_POSITION_MANAGER_CALL = 20,
29
+ EXECUTE_SUB_PLAN = 33,
30
+ ACROSS_V4_DEPOSIT_V3 = 64
31
+ }
32
+ export declare enum Subparser {
33
+ V3PathExactIn = 0,
34
+ V3PathExactOut = 1
35
+ }
36
+ export declare enum Parser {
37
+ Abi = 0,
38
+ V4Actions = 1,
39
+ V3Actions = 2
40
+ }
41
+ export type ParamType = {
42
+ readonly name: string;
43
+ readonly type: string;
44
+ readonly subparser?: Subparser;
45
+ };
46
+ export type CommandDefinition = {
47
+ parser: Parser.Abi;
48
+ params: ParamType[];
49
+ } | {
50
+ parser: Parser.V4Actions;
51
+ } | {
52
+ parser: Parser.V3Actions;
53
+ };
54
+ export declare const COMMAND_DEFINITION: {
55
+ [key in CommandType]: CommandDefinition;
56
+ };
57
+ export declare const V2V3_SWAP_COMMANDS_V2_1_1: {
58
+ [key: number]: CommandDefinition;
59
+ };
60
+ export declare class RoutePlanner {
61
+ commands: string;
62
+ inputs: string[];
63
+ constructor();
64
+ addSubPlan(subplan: RoutePlanner): RoutePlanner;
65
+ addCommand(type: CommandType, parameters: any[], allowRevert?: boolean, urVersion?: UniversalRouterVersion): RoutePlanner;
66
+ /**
67
+ * Add Across bridge deposit command for cross-chain bridging
68
+ * @param params AcrossV4DepositV3Params containing bridge parameters
69
+ * @returns RoutePlanner instance for chaining
70
+ */
71
+ addAcrossBridge(params: AcrossV4DepositV3Params): RoutePlanner;
72
+ }
73
+ export type RouterCommand = {
74
+ type: CommandType;
75
+ encodedInput: string;
76
+ };
77
+ export declare function createCommand(type: CommandType, parameters: any[], urVersion?: UniversalRouterVersion): RouterCommand;
@@ -0,0 +1,334 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCommand = exports.RoutePlanner = exports.V2V3_SWAP_COMMANDS_V2_1_1 = exports.COMMAND_DEFINITION = exports.Parser = exports.Subparser = exports.CommandType = void 0;
4
+ const utils_1 = require("ethers/lib/utils");
5
+ const constants_1 = require("./constants");
6
+ /**
7
+ * CommandTypes
8
+ * @description Flags that modify a command's execution
9
+ * @enum {number}
10
+ */
11
+ var CommandType;
12
+ (function (CommandType) {
13
+ CommandType[CommandType["V3_SWAP_EXACT_IN"] = 0] = "V3_SWAP_EXACT_IN";
14
+ CommandType[CommandType["V3_SWAP_EXACT_OUT"] = 1] = "V3_SWAP_EXACT_OUT";
15
+ CommandType[CommandType["PERMIT2_TRANSFER_FROM"] = 2] = "PERMIT2_TRANSFER_FROM";
16
+ CommandType[CommandType["PERMIT2_PERMIT_BATCH"] = 3] = "PERMIT2_PERMIT_BATCH";
17
+ CommandType[CommandType["SWEEP"] = 4] = "SWEEP";
18
+ CommandType[CommandType["TRANSFER"] = 5] = "TRANSFER";
19
+ CommandType[CommandType["PAY_PORTION"] = 6] = "PAY_PORTION";
20
+ CommandType[CommandType["PAY_PORTION_FULL_PRECISION"] = 7] = "PAY_PORTION_FULL_PRECISION";
21
+ CommandType[CommandType["V2_SWAP_EXACT_IN"] = 8] = "V2_SWAP_EXACT_IN";
22
+ CommandType[CommandType["V2_SWAP_EXACT_OUT"] = 9] = "V2_SWAP_EXACT_OUT";
23
+ CommandType[CommandType["PERMIT2_PERMIT"] = 10] = "PERMIT2_PERMIT";
24
+ CommandType[CommandType["WRAP_ETH"] = 11] = "WRAP_ETH";
25
+ CommandType[CommandType["UNWRAP_WETH"] = 12] = "UNWRAP_WETH";
26
+ CommandType[CommandType["PERMIT2_TRANSFER_FROM_BATCH"] = 13] = "PERMIT2_TRANSFER_FROM_BATCH";
27
+ CommandType[CommandType["BALANCE_CHECK_ERC20"] = 14] = "BALANCE_CHECK_ERC20";
28
+ CommandType[CommandType["V4_SWAP"] = 16] = "V4_SWAP";
29
+ CommandType[CommandType["V3_POSITION_MANAGER_PERMIT"] = 17] = "V3_POSITION_MANAGER_PERMIT";
30
+ CommandType[CommandType["V3_POSITION_MANAGER_CALL"] = 18] = "V3_POSITION_MANAGER_CALL";
31
+ CommandType[CommandType["V4_INITIALIZE_POOL"] = 19] = "V4_INITIALIZE_POOL";
32
+ CommandType[CommandType["V4_POSITION_MANAGER_CALL"] = 20] = "V4_POSITION_MANAGER_CALL";
33
+ CommandType[CommandType["EXECUTE_SUB_PLAN"] = 33] = "EXECUTE_SUB_PLAN";
34
+ // 3rd party integrations (0x40-0x5f range)
35
+ CommandType[CommandType["ACROSS_V4_DEPOSIT_V3"] = 64] = "ACROSS_V4_DEPOSIT_V3";
36
+ })(CommandType = exports.CommandType || (exports.CommandType = {}));
37
+ var Subparser;
38
+ (function (Subparser) {
39
+ Subparser[Subparser["V3PathExactIn"] = 0] = "V3PathExactIn";
40
+ Subparser[Subparser["V3PathExactOut"] = 1] = "V3PathExactOut";
41
+ })(Subparser = exports.Subparser || (exports.Subparser = {}));
42
+ var Parser;
43
+ (function (Parser) {
44
+ Parser[Parser["Abi"] = 0] = "Abi";
45
+ Parser[Parser["V4Actions"] = 1] = "V4Actions";
46
+ Parser[Parser["V3Actions"] = 2] = "V3Actions";
47
+ })(Parser = exports.Parser || (exports.Parser = {}));
48
+ const ALLOW_REVERT_FLAG = 0x80;
49
+ const REVERTIBLE_COMMANDS = new Set([CommandType.EXECUTE_SUB_PLAN]);
50
+ const PERMIT_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce) details,address spender,uint256 sigDeadline)';
51
+ const PERMIT_BATCH_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce)[] details,address spender,uint256 sigDeadline)';
52
+ const POOL_KEY_STRUCT = '(address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks)';
53
+ const PERMIT2_TRANSFER_FROM_STRUCT = '(address from,address to,uint160 amount,address token)';
54
+ const PERMIT2_TRANSFER_FROM_BATCH_STRUCT = PERMIT2_TRANSFER_FROM_STRUCT + '[]';
55
+ exports.COMMAND_DEFINITION = {
56
+ // Batch Reverts
57
+ [CommandType.EXECUTE_SUB_PLAN]: {
58
+ parser: Parser.Abi,
59
+ params: [
60
+ { name: 'commands', type: 'bytes' },
61
+ { name: 'inputs', type: 'bytes[]' },
62
+ ],
63
+ },
64
+ // Permit2 Actions
65
+ [CommandType.PERMIT2_PERMIT]: {
66
+ parser: Parser.Abi,
67
+ params: [
68
+ { name: 'permit', type: PERMIT_STRUCT },
69
+ { name: 'signature', type: 'bytes' },
70
+ ],
71
+ },
72
+ [CommandType.PERMIT2_PERMIT_BATCH]: {
73
+ parser: Parser.Abi,
74
+ params: [
75
+ { name: 'permit', type: PERMIT_BATCH_STRUCT },
76
+ { name: 'signature', type: 'bytes' },
77
+ ],
78
+ },
79
+ [CommandType.PERMIT2_TRANSFER_FROM]: {
80
+ parser: Parser.Abi,
81
+ params: [
82
+ { name: 'token', type: 'address' },
83
+ { name: 'recipient', type: 'address' },
84
+ { name: 'amount', type: 'uint160' },
85
+ ],
86
+ },
87
+ [CommandType.PERMIT2_TRANSFER_FROM_BATCH]: {
88
+ parser: Parser.Abi,
89
+ params: [
90
+ {
91
+ name: 'transferFrom',
92
+ type: PERMIT2_TRANSFER_FROM_BATCH_STRUCT,
93
+ },
94
+ ],
95
+ },
96
+ // Uniswap Actions
97
+ [CommandType.V3_SWAP_EXACT_IN]: {
98
+ parser: Parser.Abi,
99
+ params: [
100
+ { name: 'recipient', type: 'address' },
101
+ { name: 'amountIn', type: 'uint256' },
102
+ { name: 'amountOutMin', type: 'uint256' },
103
+ { name: 'path', subparser: Subparser.V3PathExactIn, type: 'bytes' },
104
+ { name: 'payerIsUser', type: 'bool' },
105
+ ],
106
+ },
107
+ [CommandType.V3_SWAP_EXACT_OUT]: {
108
+ parser: Parser.Abi,
109
+ params: [
110
+ { name: 'recipient', type: 'address' },
111
+ { name: 'amountOut', type: 'uint256' },
112
+ { name: 'amountInMax', type: 'uint256' },
113
+ { name: 'path', subparser: Subparser.V3PathExactOut, type: 'bytes' },
114
+ { name: 'payerIsUser', type: 'bool' },
115
+ ],
116
+ },
117
+ [CommandType.V2_SWAP_EXACT_IN]: {
118
+ parser: Parser.Abi,
119
+ params: [
120
+ { name: 'recipient', type: 'address' },
121
+ { name: 'amountIn', type: 'uint256' },
122
+ { name: 'amountOutMin', type: 'uint256' },
123
+ { name: 'path', type: 'address[]' },
124
+ { name: 'payerIsUser', type: 'bool' },
125
+ ],
126
+ },
127
+ [CommandType.V2_SWAP_EXACT_OUT]: {
128
+ parser: Parser.Abi,
129
+ params: [
130
+ { name: 'recipient', type: 'address' },
131
+ { name: 'amountOut', type: 'uint256' },
132
+ { name: 'amountInMax', type: 'uint256' },
133
+ { name: 'path', type: 'address[]' },
134
+ { name: 'payerIsUser', type: 'bool' },
135
+ ],
136
+ },
137
+ [CommandType.V4_SWAP]: { parser: Parser.V4Actions },
138
+ // Token Actions and Checks
139
+ [CommandType.WRAP_ETH]: {
140
+ parser: Parser.Abi,
141
+ params: [
142
+ { name: 'recipient', type: 'address' },
143
+ { name: 'amount', type: 'uint256' },
144
+ ],
145
+ },
146
+ [CommandType.UNWRAP_WETH]: {
147
+ parser: Parser.Abi,
148
+ params: [
149
+ { name: 'recipient', type: 'address' },
150
+ { name: 'amountMin', type: 'uint256' },
151
+ ],
152
+ },
153
+ [CommandType.SWEEP]: {
154
+ parser: Parser.Abi,
155
+ params: [
156
+ { name: 'token', type: 'address' },
157
+ { name: 'recipient', type: 'address' },
158
+ { name: 'amountMin', type: 'uint256' },
159
+ ],
160
+ },
161
+ [CommandType.TRANSFER]: {
162
+ parser: Parser.Abi,
163
+ params: [
164
+ { name: 'token', type: 'address' },
165
+ { name: 'recipient', type: 'address' },
166
+ { name: 'value', type: 'uint256' },
167
+ ],
168
+ },
169
+ [CommandType.PAY_PORTION]: {
170
+ parser: Parser.Abi,
171
+ params: [
172
+ { name: 'token', type: 'address' },
173
+ { name: 'recipient', type: 'address' },
174
+ { name: 'bips', type: 'uint256' },
175
+ ],
176
+ },
177
+ [CommandType.PAY_PORTION_FULL_PRECISION]: {
178
+ parser: Parser.Abi,
179
+ params: [
180
+ { name: 'token', type: 'address' },
181
+ { name: 'recipient', type: 'address' },
182
+ { name: 'portion', type: 'uint256' },
183
+ ],
184
+ },
185
+ [CommandType.BALANCE_CHECK_ERC20]: {
186
+ parser: Parser.Abi,
187
+ params: [
188
+ { name: 'owner', type: 'address' },
189
+ { name: 'token', type: 'address' },
190
+ { name: 'minBalance', type: 'uint256' },
191
+ ],
192
+ },
193
+ [CommandType.V4_INITIALIZE_POOL]: {
194
+ parser: Parser.Abi,
195
+ params: [
196
+ { name: 'poolKey', type: POOL_KEY_STRUCT },
197
+ { name: 'sqrtPriceX96', type: 'uint160' },
198
+ ],
199
+ },
200
+ // Position Actions
201
+ [CommandType.V3_POSITION_MANAGER_PERMIT]: { parser: Parser.V3Actions },
202
+ [CommandType.V3_POSITION_MANAGER_CALL]: { parser: Parser.V3Actions },
203
+ [CommandType.V4_POSITION_MANAGER_CALL]: { parser: Parser.V4Actions },
204
+ // 3rd Party Integrations
205
+ [CommandType.ACROSS_V4_DEPOSIT_V3]: {
206
+ parser: Parser.Abi,
207
+ params: [
208
+ { name: 'depositor', type: 'address' },
209
+ { name: 'recipient', type: 'address' },
210
+ { name: 'inputToken', type: 'address' },
211
+ { name: 'outputToken', type: 'address' },
212
+ { name: 'inputAmount', type: 'uint256' },
213
+ { name: 'outputAmount', type: 'uint256' },
214
+ { name: 'destinationChainId', type: 'uint256' },
215
+ { name: 'exclusiveRelayer', type: 'address' },
216
+ { name: 'quoteTimestamp', type: 'uint32' },
217
+ { name: 'fillDeadline', type: 'uint32' },
218
+ { name: 'exclusivityDeadline', type: 'uint32' },
219
+ { name: 'message', type: 'bytes' },
220
+ { name: 'useNative', type: 'bool' },
221
+ ],
222
+ },
223
+ };
224
+ // V2.1.1 ABI definitions for V2/V3 swap commands (extended with maxHopSlippage)
225
+ exports.V2V3_SWAP_COMMANDS_V2_1_1 = {
226
+ [CommandType.V3_SWAP_EXACT_IN]: {
227
+ parser: Parser.Abi,
228
+ params: [
229
+ { name: 'recipient', type: 'address' },
230
+ { name: 'amountIn', type: 'uint256' },
231
+ { name: 'amountOutMin', type: 'uint256' },
232
+ { name: 'path', subparser: Subparser.V3PathExactIn, type: 'bytes' },
233
+ { name: 'payerIsUser', type: 'bool' },
234
+ { name: 'maxHopSlippage', type: 'uint256[]' },
235
+ ],
236
+ },
237
+ [CommandType.V3_SWAP_EXACT_OUT]: {
238
+ parser: Parser.Abi,
239
+ params: [
240
+ { name: 'recipient', type: 'address' },
241
+ { name: 'amountOut', type: 'uint256' },
242
+ { name: 'amountInMax', type: 'uint256' },
243
+ { name: 'path', subparser: Subparser.V3PathExactOut, type: 'bytes' },
244
+ { name: 'payerIsUser', type: 'bool' },
245
+ { name: 'maxHopSlippage', type: 'uint256[]' },
246
+ ],
247
+ },
248
+ [CommandType.V2_SWAP_EXACT_IN]: {
249
+ parser: Parser.Abi,
250
+ params: [
251
+ { name: 'recipient', type: 'address' },
252
+ { name: 'amountIn', type: 'uint256' },
253
+ { name: 'amountOutMin', type: 'uint256' },
254
+ { name: 'path', type: 'address[]' },
255
+ { name: 'payerIsUser', type: 'bool' },
256
+ { name: 'maxHopSlippage', type: 'uint256[]' },
257
+ ],
258
+ },
259
+ [CommandType.V2_SWAP_EXACT_OUT]: {
260
+ parser: Parser.Abi,
261
+ params: [
262
+ { name: 'recipient', type: 'address' },
263
+ { name: 'amountOut', type: 'uint256' },
264
+ { name: 'amountInMax', type: 'uint256' },
265
+ { name: 'path', type: 'address[]' },
266
+ { name: 'payerIsUser', type: 'bool' },
267
+ { name: 'maxHopSlippage', type: 'uint256[]' },
268
+ ],
269
+ },
270
+ };
271
+ class RoutePlanner {
272
+ constructor() {
273
+ this.commands = '0x';
274
+ this.inputs = [];
275
+ }
276
+ addSubPlan(subplan) {
277
+ this.addCommand(CommandType.EXECUTE_SUB_PLAN, [subplan.commands, subplan.inputs], true);
278
+ return this;
279
+ }
280
+ addCommand(type, parameters, allowRevert = false, urVersion) {
281
+ let command = createCommand(type, parameters, urVersion);
282
+ this.inputs.push(command.encodedInput);
283
+ if (allowRevert) {
284
+ if (!REVERTIBLE_COMMANDS.has(command.type)) {
285
+ throw new Error(`command type: ${command.type} cannot be allowed to revert`);
286
+ }
287
+ command.type = command.type | ALLOW_REVERT_FLAG;
288
+ }
289
+ this.commands = this.commands.concat(command.type.toString(16).padStart(2, '0'));
290
+ return this;
291
+ }
292
+ /**
293
+ * Add Across bridge deposit command for cross-chain bridging
294
+ * @param params AcrossV4DepositV3Params containing bridge parameters
295
+ * @returns RoutePlanner instance for chaining
296
+ */
297
+ addAcrossBridge(params) {
298
+ this.addCommand(CommandType.ACROSS_V4_DEPOSIT_V3, [
299
+ params.depositor,
300
+ params.recipient,
301
+ params.inputToken,
302
+ params.outputToken,
303
+ params.inputAmount,
304
+ params.outputAmount,
305
+ params.destinationChainId,
306
+ params.exclusiveRelayer,
307
+ params.quoteTimestamp,
308
+ params.fillDeadline,
309
+ params.exclusivityDeadline,
310
+ params.message,
311
+ params.useNative,
312
+ ]);
313
+ return this;
314
+ }
315
+ }
316
+ exports.RoutePlanner = RoutePlanner;
317
+ function createCommand(type, parameters, urVersion) {
318
+ const commandDef = (0, constants_1.isAtLeastV2_1_1)(urVersion) && type in exports.V2V3_SWAP_COMMANDS_V2_1_1
319
+ ? exports.V2V3_SWAP_COMMANDS_V2_1_1[type]
320
+ : exports.COMMAND_DEFINITION[type];
321
+ switch (commandDef.parser) {
322
+ case Parser.Abi:
323
+ const encodedInput = utils_1.defaultAbiCoder.encode(commandDef.params.map((abi) => abi.type), parameters);
324
+ return { type, encodedInput };
325
+ case Parser.V4Actions:
326
+ // v4 swap data comes pre-encoded at index 0
327
+ return { type, encodedInput: parameters[0] };
328
+ case Parser.V3Actions:
329
+ // v3 swap data comes pre-encoded at index 0
330
+ return { type, encodedInput: parameters[0] };
331
+ }
332
+ }
333
+ exports.createCommand = createCommand;
334
+ //# sourceMappingURL=routerCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routerCommands.js","sourceRoot":"","sources":["../../../../src/utils/routerCommands.ts"],"names":[],"mappings":"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"}