@uniswap/universal-router-sdk 4.32.0 → 4.34.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.
@@ -9,6 +9,10 @@ export declare type FlatFeeOptions = {
9
9
  amount: BigNumberish;
10
10
  recipient: string;
11
11
  };
12
+ export declare enum TokenTransferMode {
13
+ Permit2 = "Permit2",
14
+ ApproveProxy = "ApproveProxy"
15
+ }
12
16
  export declare type SwapOptions = Omit<RouterSwapOptions, 'inputTokenPermit'> & {
13
17
  useRouterBalance?: boolean;
14
18
  inputTokenPermit?: Permit2Permit;
@@ -16,6 +20,8 @@ export declare type SwapOptions = Omit<RouterSwapOptions, 'inputTokenPermit'> &
16
20
  safeMode?: boolean;
17
21
  maxHopSlippage?: BigNumber[];
18
22
  urVersion?: URVersion;
23
+ tokenTransferMode?: TokenTransferMode;
24
+ chainId?: number;
19
25
  };
20
26
  export declare class UniswapTrade implements Command {
21
27
  trade: RouterTrade<Currency, Currency, TradeType>;
package/dist/index.d.ts CHANGED
@@ -4,7 +4,7 @@ export * from './entities';
4
4
  export * from './utils/routerTradeAdapter';
5
5
  export { RoutePlanner, CommandType, COMMAND_DEFINITION, Parser, Subparser } from './utils/routerCommands';
6
6
  export type { CommandDefinition, ParamType } from './utils/routerCommands';
7
- export { UNIVERSAL_ROUTER_CREATION_BLOCK, UNIVERSAL_ROUTER_ADDRESS, ROUTER_AS_RECIPIENT, WETH_ADDRESS, UniversalRouterVersion, } from './utils/constants';
7
+ export { UNIVERSAL_ROUTER_CREATION_BLOCK, UNIVERSAL_ROUTER_ADDRESS, SWAP_PROXY_ADDRESS, ROUTER_AS_RECIPIENT, WETH_ADDRESS, UniversalRouterVersion, } from './utils/constants';
8
8
  export { CommandParser, GenericCommandParser } from './utils/commandParser';
9
9
  export type { UniversalRouterCommand, UniversalRouterCall, Param, CommandsDefinition } from './utils/commandParser';
10
10
  export type { Permit2Permit } from './utils/inputTokens';
@@ -38,6 +38,7 @@ export interface MigrateV3ToV4Options {
38
38
  }
39
39
  export declare abstract class SwapRouter {
40
40
  static INTERFACE: Interface;
41
+ static PROXY_INTERFACE: Interface;
41
42
  static swapCallParameters(trades: RouterTrade<Currency, Currency, TradeType>, options: SwapOptions, bridgeOptions?: AcrossV4DepositV3Params[]): MethodParameters;
42
43
  /**
43
44
  * Generate EIP712 payload for signed execution (no signing performed)
@@ -78,4 +79,9 @@ export declare abstract class SwapRouter {
78
79
  * @param config the router config
79
80
  */
80
81
  private static encodePlan;
82
+ /**
83
+ * Encodes a planned route into calldata targeting the SwapProxy contract.
84
+ * The proxy pulls ERC20 tokens from the user into the UR, then executes commands.
85
+ */
86
+ private static encodeProxyPlan;
81
87
  }
@@ -442,13 +442,14 @@ function getPathCurrency(currency, pool) {
442
442
  RouterActionType["UnwrapWETH"] = "UnwrapWETH";
443
443
  })(exports.RouterActionType || (exports.RouterActionType = {}));
444
444
 
445
- var _routerConfigs, _routerConfigs2, _routerConfigs3, _routerConfigs4, _routerConfigs5, _routerConfigs6, _routerConfigs7, _routerConfigs8, _routerConfigs9, _routerConfigs0, _routerConfigs1, _routerConfigs10, _routerConfigs11, _routerConfigs12, _routerConfigs13, _routerConfigs14, _routerConfigs15, _routerConfigs16, _routerConfigs17, _routerConfigs18, _routerConfigs19, _routerConfigs20, _routerConfigs21, _routerConfigs22, _routerConfigs23, _routerConfigs24, _routerConfigs25, _CHAIN_CONFIGS;
445
+ var _routerConfigs, _routerConfigs2, _routerConfigs3, _routerConfigs4, _routerConfigs5, _routerConfigs6, _routerConfigs7, _routerConfigs8, _routerConfigs9, _routerConfigs0, _routerConfigs1, _routerConfigs10, _routerConfigs11, _routerConfigs12, _routerConfigs13, _routerConfigs14, _routerConfigs15, _routerConfigs16, _routerConfigs17, _routerConfigs18, _routerConfigs19, _routerConfigs20, _routerConfigs21, _routerConfigs22, _routerConfigs23, _routerConfigs24, _routerConfigs25, _routerConfigs26, _CHAIN_CONFIGS;
446
446
  (function (UniversalRouterVersion) {
447
447
  UniversalRouterVersion["V1_2"] = "1.2";
448
448
  UniversalRouterVersion["V2_0"] = "2.0";
449
449
  UniversalRouterVersion["V2_1"] = "2.1";
450
450
  })(exports.UniversalRouterVersion || (exports.UniversalRouterVersion = {}));
451
451
  var WETH_NOT_SUPPORTED_ON_CHAIN = '0x0000000000000000000000000000000000000000';
452
+ var SWAP_PROXY_DEPLOY_ADDRESS = '0x02E5be68D46DAc0B524905bfF209cf47EE6dB2a9';
452
453
  // Todo: Change `CHAIN_CONFIGS` to pull the UR address with v4
453
454
  var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
454
455
  weth: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
@@ -461,7 +462,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
461
462
  }, _routerConfigs[exports.UniversalRouterVersion.V2_1] = {
462
463
  address: '0xd92a36b0000531ef3063ded4de20a0783308446c',
463
464
  creationBlock: 23836348
464
- }, _routerConfigs)
465
+ }, _routerConfigs),
466
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
465
467
  }, _CHAIN_CONFIGS[5] = {
466
468
  weth: '0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6',
467
469
  routerConfigs: (_routerConfigs2 = {}, _routerConfigs2[exports.UniversalRouterVersion.V1_2] = {
@@ -485,7 +487,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
485
487
  }, _routerConfigs3[exports.UniversalRouterVersion.V2_1] = {
486
488
  address: '0x470FFC67b1feEEC31D16C46AC7545C98716a194c',
487
489
  creationBlock: 9664766
488
- }, _routerConfigs3)
490
+ }, _routerConfigs3),
491
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
489
492
  }, _CHAIN_CONFIGS[137] = {
490
493
  weth: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270',
491
494
  routerConfigs: (_routerConfigs4 = {}, _routerConfigs4[exports.UniversalRouterVersion.V1_2] = {
@@ -497,7 +500,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
497
500
  }, _routerConfigs4[exports.UniversalRouterVersion.V2_1] = {
498
501
  address: '0xE27610fD9dD05FC061366bc9dA414CA6F948f204',
499
502
  creationBlock: 79245524
500
- }, _routerConfigs4)
503
+ }, _routerConfigs4),
504
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
501
505
  }, _CHAIN_CONFIGS[80001] = {
502
506
  weth: '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889',
503
507
  routerConfigs: (_routerConfigs5 = {}, _routerConfigs5[exports.UniversalRouterVersion.V1_2] = {
@@ -521,7 +525,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
521
525
  }, _routerConfigs6[exports.UniversalRouterVersion.V2_1] = {
522
526
  address: '0xde20EEE5398D3790a4D356e8925bD21Ea65D99Af',
523
527
  creationBlock: 143998769
524
- }, _routerConfigs6)
528
+ }, _routerConfigs6),
529
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
525
530
  }, _CHAIN_CONFIGS[420] = {
526
531
  weth: '0x4200000000000000000000000000000000000006',
527
532
  routerConfigs: (_routerConfigs7 = {}, _routerConfigs7[exports.UniversalRouterVersion.V1_2] = {
@@ -545,7 +550,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
545
550
  }, _routerConfigs8[exports.UniversalRouterVersion.V2_1] = {
546
551
  address: '0x96b2FD2F80e9428Daa65d859653117D453981AB4',
547
552
  creationBlock: 402060097
548
- }, _routerConfigs8)
553
+ }, _routerConfigs8),
554
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
549
555
  }, _CHAIN_CONFIGS[421613] = {
550
556
  weth: '0xe39Ab88f8A4777030A534146A9Ca3B52bd5D43A3',
551
557
  routerConfigs: (_routerConfigs9 = {}, _routerConfigs9[exports.UniversalRouterVersion.V1_2] = {
@@ -569,7 +575,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
569
575
  }, _routerConfigs0[exports.UniversalRouterVersion.V2_1] = {
570
576
  address: '0xBB8Ed9bF0BFF210652AE5f473a849F82e990DDf6',
571
577
  creationBlock: 51696199
572
- }, _routerConfigs0)
578
+ }, _routerConfigs0),
579
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
573
580
  }, _CHAIN_CONFIGS[44787] = {
574
581
  weth: WETH_NOT_SUPPORTED_ON_CHAIN,
575
582
  routerConfigs: (_routerConfigs1 = {}, _routerConfigs1[exports.UniversalRouterVersion.V1_2] = {
@@ -593,7 +600,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
593
600
  }, _routerConfigs10[exports.UniversalRouterVersion.V2_1] = {
594
601
  address: '0x91BF3bfAEf8D771A74E1A8fE460b3EE646b2e588',
595
602
  creationBlock: 68794488
596
- }, _routerConfigs10)
603
+ }, _routerConfigs10),
604
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
597
605
  }, _CHAIN_CONFIGS[43114] = {
598
606
  weth: '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7',
599
607
  routerConfigs: (_routerConfigs11 = {}, _routerConfigs11[exports.UniversalRouterVersion.V1_2] = {
@@ -605,7 +613,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
605
613
  }, _routerConfigs11[exports.UniversalRouterVersion.V2_1] = {
606
614
  address: '0x0Cf1f86B331A03179646341D10A2A87515087221',
607
615
  creationBlock: 72254439
608
- }, _routerConfigs11)
616
+ }, _routerConfigs11),
617
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
609
618
  }, _CHAIN_CONFIGS[84531] = {
610
619
  weth: '0x4200000000000000000000000000000000000006',
611
620
  routerConfigs: (_routerConfigs12 = {}, _routerConfigs12[exports.UniversalRouterVersion.V1_2] = {
@@ -629,7 +638,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
629
638
  }, _routerConfigs13[exports.UniversalRouterVersion.V2_1] = {
630
639
  address: '0xf3a4f4094bd2c6c06ca2f61789d8727b8d1e7259',
631
640
  creationBlock: 38404211
632
- }, _routerConfigs13)
641
+ }, _routerConfigs13),
642
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
633
643
  }, _CHAIN_CONFIGS[81457] = {
634
644
  weth: '0x4300000000000000000000000000000000000004',
635
645
  routerConfigs: (_routerConfigs14 = {}, _routerConfigs14[exports.UniversalRouterVersion.V1_2] = {
@@ -641,7 +651,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
641
651
  }, _routerConfigs14[exports.UniversalRouterVersion.V2_1] = {
642
652
  address: '0x77c0097c1acf6fd84878d3f7c0603e3f04e8bec7',
643
653
  creationBlock: 27394047
644
- }, _routerConfigs14)
654
+ }, _routerConfigs14),
655
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
645
656
  }, _CHAIN_CONFIGS[7777777] = {
646
657
  weth: '0x4200000000000000000000000000000000000006',
647
658
  routerConfigs: (_routerConfigs15 = {}, _routerConfigs15[exports.UniversalRouterVersion.V1_2] = {
@@ -653,7 +664,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
653
664
  }, _routerConfigs15[exports.UniversalRouterVersion.V2_1] = {
654
665
  address: '0x880853091b60f80301a0c1d2f9893c4993041295',
655
666
  creationBlock: 38452170
656
- }, _routerConfigs15)
667
+ }, _routerConfigs15),
668
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
657
669
  }, _CHAIN_CONFIGS[324] = {
658
670
  weth: '0x5aea5775959fbc2557cc8789bc1bf90a239d9a91',
659
671
  routerConfigs: (_routerConfigs16 = {}, _routerConfigs16[exports.UniversalRouterVersion.V1_2] = {
@@ -665,7 +677,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
665
677
  }, _routerConfigs16[exports.UniversalRouterVersion.V2_1] = {
666
678
  address: '0x0000000000000000000000000000000000000000',
667
679
  creationBlock: 1
668
- }, _routerConfigs16)
680
+ }, _routerConfigs16),
681
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
669
682
  }, _CHAIN_CONFIGS[480] = {
670
683
  weth: '0x4200000000000000000000000000000000000006',
671
684
  routerConfigs: (_routerConfigs17 = {}, _routerConfigs17[exports.UniversalRouterVersion.V1_2] = {
@@ -677,7 +690,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
677
690
  }, _routerConfigs17[exports.UniversalRouterVersion.V2_1] = {
678
691
  address: '0x03c4f6b55733cdf3caa07c01e5b83ddee3381f60',
679
692
  creationBlock: 22131418
680
- }, _routerConfigs17)
693
+ }, _routerConfigs17),
694
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
681
695
  }, _CHAIN_CONFIGS[1301] = {
682
696
  weth: '0x4200000000000000000000000000000000000006',
683
697
  routerConfigs: (_routerConfigs18 = {}, _routerConfigs18[exports.UniversalRouterVersion.V1_2] = {
@@ -689,7 +703,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
689
703
  }, _routerConfigs18[exports.UniversalRouterVersion.V2_1] = {
690
704
  address: '0x7F9B8D606E0F35E5073ABf93695814530b28a37b',
691
705
  creationBlock: 36746405
692
- }, _routerConfigs18)
706
+ }, _routerConfigs18),
707
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
693
708
  }, _CHAIN_CONFIGS[130] = {
694
709
  weth: '0x4200000000000000000000000000000000000006',
695
710
  routerConfigs: (_routerConfigs19 = {}, _routerConfigs19[exports.UniversalRouterVersion.V1_2] = {
@@ -701,7 +716,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
701
716
  }, _routerConfigs19[exports.UniversalRouterVersion.V2_1] = {
702
717
  address: '0xe6039ae5b44f90d56c6b029354fb22999861a9a0',
703
718
  creationBlock: 32850661
704
- }, _routerConfigs19)
719
+ }, _routerConfigs19),
720
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
705
721
  }, _CHAIN_CONFIGS[10143] = {
706
722
  weth: '0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701',
707
723
  routerConfigs: (_routerConfigs20 = {}, _routerConfigs20[exports.UniversalRouterVersion.V1_2] = {
@@ -713,7 +729,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
713
729
  }, _routerConfigs20[exports.UniversalRouterVersion.V2_1] = {
714
730
  address: '0x0000000000000000000000000000000000000000',
715
731
  creationBlock: 1
716
- }, _routerConfigs20)
732
+ }, _routerConfigs20),
733
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
717
734
  }, _CHAIN_CONFIGS[84532] = {
718
735
  weth: '0x4200000000000000000000000000000000000006',
719
736
  routerConfigs: (_routerConfigs21 = {}, _routerConfigs21[exports.UniversalRouterVersion.V1_2] = {
@@ -725,7 +742,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
725
742
  }, _routerConfigs21[exports.UniversalRouterVersion.V2_1] = {
726
743
  address: '0x0000000000000000000000000000000000000000',
727
744
  creationBlock: 1
728
- }, _routerConfigs21)
745
+ }, _routerConfigs21),
746
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
729
747
  }, _CHAIN_CONFIGS[1868] = {
730
748
  weth: '0x4200000000000000000000000000000000000006',
731
749
  routerConfigs: (_routerConfigs22 = {}, _routerConfigs22[exports.UniversalRouterVersion.V1_2] = {
@@ -737,7 +755,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
737
755
  }, _routerConfigs22[exports.UniversalRouterVersion.V2_1] = {
738
756
  address: '0xdb1d5986551c820bd0f3b1caca3e77ce03acb5ef',
739
757
  creationBlock: 15232223
740
- }, _routerConfigs22)
758
+ }, _routerConfigs22),
759
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
741
760
  }, _CHAIN_CONFIGS[143] = {
742
761
  weth: '0x3bd359C1119dA7Da1D913D1C4D2B7c461115433A',
743
762
  routerConfigs: (_routerConfigs23 = {}, _routerConfigs23[exports.UniversalRouterVersion.V1_2] = {
@@ -749,7 +768,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
749
768
  }, _routerConfigs23[exports.UniversalRouterVersion.V2_1] = {
750
769
  address: '0xBC2A036E5027b9AE57BbA847eF88E1b14823F7B1',
751
770
  creationBlock: 36720825
752
- }, _routerConfigs23)
771
+ }, _routerConfigs23),
772
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
753
773
  }, _CHAIN_CONFIGS[59144] = {
754
774
  weth: '0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f',
755
775
  routerConfigs: (_routerConfigs24 = {}, _routerConfigs24[exports.UniversalRouterVersion.V1_2] = {
@@ -761,24 +781,45 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
761
781
  }, _routerConfigs24[exports.UniversalRouterVersion.V2_1] = {
762
782
  address: '0xba548ce7a95f87bc66a0c7c6eab1e428735f8b57',
763
783
  creationBlock: 1
764
- }, _routerConfigs24)
765
- }, _CHAIN_CONFIGS[196] = {
766
- weth: '0xe538905cf8410324e03A5A23C1c177a474D59b2b',
784
+ }, _routerConfigs24),
785
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
786
+ }, _CHAIN_CONFIGS[4217] = {
787
+ weth: WETH_NOT_SUPPORTED_ON_CHAIN,
767
788
  routerConfigs: (_routerConfigs25 = {}, _routerConfigs25[exports.UniversalRouterVersion.V1_2] = {
768
789
  address: '0x0000000000000000000000000000000000000000',
769
790
  creationBlock: 1
770
791
  }, _routerConfigs25[exports.UniversalRouterVersion.V2_0] = {
792
+ address: '0x1febb76be10aaf3a1402f04e8e835f2c382f7914',
793
+ creationBlock: 1
794
+ }, _routerConfigs25[exports.UniversalRouterVersion.V2_1] = {
795
+ address: '0xa2dc7d0266f0cc50b3eeaf36c9bfcecff1beea91',
796
+ creationBlock: 1
797
+ }, _routerConfigs25),
798
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
799
+ }, _CHAIN_CONFIGS[196] = {
800
+ weth: '0xe538905cf8410324e03A5A23C1c177a474D59b2b',
801
+ routerConfigs: (_routerConfigs26 = {}, _routerConfigs26[exports.UniversalRouterVersion.V1_2] = {
802
+ address: '0x0000000000000000000000000000000000000000',
803
+ creationBlock: 1
804
+ }, _routerConfigs26[exports.UniversalRouterVersion.V2_0] = {
771
805
  address: '0x5507749f2c558bb3e162c6e90c314c092e7372ff',
772
806
  creationBlock: 47680350
773
- }, _routerConfigs25[exports.UniversalRouterVersion.V2_1] = {
807
+ }, _routerConfigs26[exports.UniversalRouterVersion.V2_1] = {
774
808
  address: '0x0000000000000000000000000000000000000000',
775
809
  creationBlock: 1
776
- }, _routerConfigs25)
810
+ }, _routerConfigs26),
811
+ swapProxy: SWAP_PROXY_DEPLOY_ADDRESS
777
812
  }, _CHAIN_CONFIGS);
778
813
  var UNIVERSAL_ROUTER_ADDRESS = function UNIVERSAL_ROUTER_ADDRESS(version, chainId) {
779
814
  if (!(chainId in CHAIN_CONFIGS)) throw new Error("Universal Router not deployed on chain " + chainId);
780
815
  return CHAIN_CONFIGS[chainId].routerConfigs[version].address;
781
816
  };
817
+ var SWAP_PROXY_ADDRESS = function SWAP_PROXY_ADDRESS(chainId) {
818
+ if (!(chainId in CHAIN_CONFIGS)) throw new Error("SwapProxy not deployed on chain " + chainId);
819
+ var proxy = CHAIN_CONFIGS[chainId].swapProxy;
820
+ if (!proxy) throw new Error("SwapProxy not configured for chain " + chainId);
821
+ return proxy;
822
+ };
782
823
  var UNIVERSAL_ROUTER_CREATION_BLOCK = function UNIVERSAL_ROUTER_CREATION_BLOCK(version, chainId) {
783
824
  if (!(chainId in CHAIN_CONFIGS)) throw new Error("Universal Router not deployed on chain " + chainId);
784
825
  return CHAIN_CONFIGS[chainId].routerConfigs[version].creationBlock;
@@ -802,6 +843,10 @@ function encodeFeeBips(fee) {
802
843
  return v3Sdk.toHex(fee.multiply(10000).quotient);
803
844
  }
804
845
 
846
+ (function (TokenTransferMode) {
847
+ TokenTransferMode["Permit2"] = "Permit2";
848
+ TokenTransferMode["ApproveProxy"] = "ApproveProxy";
849
+ })(exports.TokenTransferMode || (exports.TokenTransferMode = {}));
805
850
  var REFUND_ETH_PRICE_IMPACT_THRESHOLD = /*#__PURE__*/new sdkCore.Percent(50, 100);
806
851
  // Wrapper for uniswap router-sdk trade entity to encode swaps for Universal Router
807
852
  // also translates trade objects from previous (v2, v3) SDKs
@@ -811,7 +856,12 @@ var UniswapTrade = /*#__PURE__*/function () {
811
856
  this.options = options;
812
857
  this.tradeType = exports.RouterActionType.UniswapTrade;
813
858
  if (!!options.fee && !!options.flatFee) throw new Error('Only one fee option permitted');
814
- if (this.inputRequiresWrap || this.inputRequiresUnwrap || this.options.useRouterBalance) {
859
+ if (options.tokenTransferMode === exports.TokenTransferMode.ApproveProxy) {
860
+ if (!options.recipient || options.recipient === SENDER_AS_RECIPIENT) {
861
+ throw new Error('Explicit recipient address required when using SwapProxy (SENDER_AS_RECIPIENT resolves to proxy)');
862
+ }
863
+ this.payerIsUser = false;
864
+ } else if (this.inputRequiresWrap || this.inputRequiresUnwrap || this.options.useRouterBalance) {
815
865
  this.payerIsUser = false;
816
866
  } else {
817
867
  this.payerIsUser = true;
@@ -825,8 +875,11 @@ var UniswapTrade = /*#__PURE__*/function () {
825
875
  // TODO: optimize if only one v2 pool we can directly send this to the pool
826
876
  planner.addCommand(exports.CommandType.WRAP_ETH, [ROUTER_AS_RECIPIENT, this.trade.maximumAmountIn(this.options.slippageTolerance).quotient.toString()]);
827
877
  } else if (this.inputRequiresUnwrap) {
828
- // send wrapped token to router to unwrap
829
- planner.addCommand(exports.CommandType.PERMIT2_TRANSFER_FROM, [this.trade.inputAmount.currency.address, ROUTER_AS_RECIPIENT, this.trade.maximumAmountIn(this.options.slippageTolerance).quotient.toString()]);
878
+ if (this.options.tokenTransferMode !== exports.TokenTransferMode.ApproveProxy) {
879
+ // send wrapped token to router to unwrap via Permit2
880
+ planner.addCommand(exports.CommandType.PERMIT2_TRANSFER_FROM, [this.trade.inputAmount.currency.address, ROUTER_AS_RECIPIENT, this.trade.maximumAmountIn(this.options.slippageTolerance).quotient.toString()]);
881
+ }
882
+ // In proxy mode, the proxy already transferred tokens to the UR; just unwrap
830
883
  planner.addCommand(exports.CommandType.UNWRAP_WETH, [ROUTER_AS_RECIPIENT, 0]);
831
884
  }
832
885
  // The overall recipient at the end of the trade, SENDER_AS_RECIPIENT uses the msg.sender
@@ -901,6 +954,9 @@ var UniswapTrade = /*#__PURE__*/function () {
901
954
  planner.addCommand(exports.CommandType.UNWRAP_WETH, [this.options.recipient, 0]);
902
955
  } else if (this.inputRequiresUnwrap) {
903
956
  planner.addCommand(exports.CommandType.WRAP_ETH, [this.options.recipient, CONTRACT_BALANCE]);
957
+ } else if (this.options.tokenTransferMode === exports.TokenTransferMode.ApproveProxy) {
958
+ // Proxy pulled maximumAmountIn into the UR; sweep any unused input back to the user
959
+ planner.addCommand(exports.CommandType.SWEEP, [getCurrencyAddress(this.trade.inputAmount.currency), this.options.recipient, 0]);
904
960
  } else if (this.trade.inputAmount.currency.isNative) {
905
961
  // must refund extra native currency sent along for native v4 trades (no input transition)
906
962
  planner.addCommand(exports.CommandType.SWEEP, [ETH_ADDRESS, this.options.recipient, 0]);
@@ -1275,11 +1331,19 @@ function generateNonce() {
1275
1331
  */
1276
1332
  var NONCE_SKIP_CHECK = '0x' + /*#__PURE__*/'f'.repeat(64); // bytes32(type(uint256).max)
1277
1333
 
1334
+ var _UR_VERSION_MAP;
1278
1335
  function isMint(options) {
1279
1336
  return Object.keys(options).some(function (k) {
1280
1337
  return k === 'recipient';
1281
1338
  });
1282
1339
  }
1340
+ var UR_VERSION_MAP = (_UR_VERSION_MAP = {}, _UR_VERSION_MAP[v4Sdk.URVersion.V2_0] = exports.UniversalRouterVersion.V2_0, _UR_VERSION_MAP[v4Sdk.URVersion.V2_1] = exports.UniversalRouterVersion.V2_1, _UR_VERSION_MAP);
1341
+ function toUniversalRouterVersion(urVersion) {
1342
+ if (urVersion === undefined) return undefined;
1343
+ var mapped = UR_VERSION_MAP[urVersion];
1344
+ if (!mapped) throw new Error("Unsupported URVersion: " + urVersion);
1345
+ return mapped;
1346
+ }
1283
1347
  var SwapRouter = /*#__PURE__*/function () {
1284
1348
  function SwapRouter() {}
1285
1349
  SwapRouter.swapCallParameters = function swapCallParameters(trades, options, bridgeOptions // Optional bridge parameters
@@ -1288,9 +1352,15 @@ var SwapRouter = /*#__PURE__*/function () {
1288
1352
  var planner = new RoutePlanner();
1289
1353
  var trade = new UniswapTrade(trades, options);
1290
1354
  var inputCurrency = trade.trade.inputAmount.currency;
1291
- !!(inputCurrency.isNative && !!options.inputTokenPermit) ? invariant(false, 'NATIVE_INPUT_PERMIT') : void 0;
1292
- if (options.inputTokenPermit) {
1293
- encodePermit(planner, options.inputTokenPermit);
1355
+ if (options.tokenTransferMode === exports.TokenTransferMode.ApproveProxy) {
1356
+ !!inputCurrency.isNative ? invariant(false, 'PROXY_NATIVE_INPUT: SwapProxy only supports ERC20 input') : void 0;
1357
+ !!!options.chainId ? invariant(false, 'PROXY_MISSING_CHAIN_ID: chainId required when tokenTransferMode is ApproveProxy') : void 0;
1358
+ !!options.inputTokenPermit ? invariant(false, 'PROXY_PERMIT_CONFLICT: Permit2 not used with SwapProxy') : void 0;
1359
+ } else {
1360
+ !!(inputCurrency.isNative && !!options.inputTokenPermit) ? invariant(false, 'NATIVE_INPUT_PERMIT') : void 0;
1361
+ if (options.inputTokenPermit) {
1362
+ encodePermit(planner, options.inputTokenPermit);
1363
+ }
1294
1364
  }
1295
1365
  var nativeCurrencyValue = inputCurrency.isNative ? ethers.BigNumber.from(trade.trade.maximumAmountIn(options.slippageTolerance).quotient.toString()) : ethers.BigNumber.from(0);
1296
1366
  trade.encode(planner, {
@@ -1303,6 +1373,9 @@ var SwapRouter = /*#__PURE__*/function () {
1303
1373
  planner.addAcrossBridge(bridge);
1304
1374
  }
1305
1375
  }
1376
+ if (options.tokenTransferMode === exports.TokenTransferMode.ApproveProxy) {
1377
+ return SwapRouter.encodeProxyPlan(planner, trade, options);
1378
+ }
1306
1379
  return SwapRouter.encodePlan(planner, nativeCurrencyValue, {
1307
1380
  deadline: options.deadlineOrPreviousBlockhash ? ethers.BigNumber.from(options.deadlineOrPreviousBlockhash) : undefined
1308
1381
  });
@@ -1484,10 +1557,30 @@ var SwapRouter = /*#__PURE__*/function () {
1484
1557
  calldata: calldata,
1485
1558
  value: nativeCurrencyValue.toHexString()
1486
1559
  };
1560
+ }
1561
+ /**
1562
+ * Encodes a planned route into calldata targeting the SwapProxy contract.
1563
+ * The proxy pulls ERC20 tokens from the user into the UR, then executes commands.
1564
+ */;
1565
+ SwapRouter.encodeProxyPlan = function encodeProxyPlan(planner, trade, options) {
1566
+ var _toUniversalRouterVer;
1567
+ var commands = planner.commands,
1568
+ inputs = planner.inputs;
1569
+ var urVersion = (_toUniversalRouterVer = toUniversalRouterVersion(options.urVersion)) != null ? _toUniversalRouterVer : exports.UniversalRouterVersion.V2_0;
1570
+ var routerAddress = UNIVERSAL_ROUTER_ADDRESS(urVersion, options.chainId);
1571
+ var inputToken = trade.trade.inputAmount.currency.address;
1572
+ var inputAmount = ethers.BigNumber.from(trade.trade.maximumAmountIn(options.slippageTolerance).quotient.toString());
1573
+ var deadline = options.deadlineOrPreviousBlockhash ? ethers.BigNumber.from(options.deadlineOrPreviousBlockhash) : ethers.BigNumber.from(Math.floor(Date.now() / 1000) + 1800); // 30 min default
1574
+ var calldata = SwapRouter.PROXY_INTERFACE.encodeFunctionData('execute', [routerAddress, inputToken, inputAmount, commands, inputs, deadline]);
1575
+ return {
1576
+ calldata: calldata,
1577
+ value: ethers.BigNumber.from(0).toHexString()
1578
+ };
1487
1579
  };
1488
1580
  return SwapRouter;
1489
1581
  }();
1490
1582
  SwapRouter.INTERFACE = /*#__PURE__*/new abi.Interface(UniversalRouter.abi);
1583
+ SwapRouter.PROXY_INTERFACE = /*#__PURE__*/new abi.Interface(['function execute(address router, address token, uint256 amount, bytes calldata commands, bytes[] calldata inputs, uint256 deadline) external']);
1491
1584
 
1492
1585
  var UnwrapWETH = /*#__PURE__*/function () {
1493
1586
  function UnwrapWETH(amount, chainId, permit2) {
@@ -1819,6 +1912,7 @@ exports.NONCE_SKIP_CHECK = NONCE_SKIP_CHECK;
1819
1912
  exports.ROUTER_AS_RECIPIENT = ROUTER_AS_RECIPIENT;
1820
1913
  exports.RoutePlanner = RoutePlanner;
1821
1914
  exports.RouterTradeAdapter = RouterTradeAdapter;
1915
+ exports.SWAP_PROXY_ADDRESS = SWAP_PROXY_ADDRESS;
1822
1916
  exports.SwapRouter = SwapRouter;
1823
1917
  exports.UNIVERSAL_ROUTER_ADDRESS = UNIVERSAL_ROUTER_ADDRESS;
1824
1918
  exports.UNIVERSAL_ROUTER_CREATION_BLOCK = UNIVERSAL_ROUTER_CREATION_BLOCK;