@pendle/core-v2 1.3.0-mainnet → 2.0.0-mainnet

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 (413) hide show
  1. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiveEndpointUpg.sol/PendleMsgReceiveEndpointUpg.dbg.json +1 -1
  2. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiveEndpointUpg.sol/PendleMsgReceiveEndpointUpg.json +2 -2
  3. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiverAppUpg.sol/PendleMsgReceiverAppUpg.dbg.json +1 -1
  4. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiverAppUpg.sol/PendleMsgReceiverAppUpg.json +1 -1
  5. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgSendEndpointUpg.sol/PendleMsgSendEndpointUpg.dbg.json +1 -1
  6. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgSendEndpointUpg.sol/PendleMsgSendEndpointUpg.json +2 -2
  7. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgSenderAppUpg.sol/PendleMsgSenderAppUpg.dbg.json +1 -1
  8. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/libraries/LayerZeroHelper.sol/LayerZeroHelper.dbg.json +1 -1
  9. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/libraries/LayerZeroHelper.sol/LayerZeroHelper.json +2 -2
  10. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
  11. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
  12. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.json +2 -2
  13. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
  14. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.json +3 -3
  15. package/build/artifacts/contracts/LiquidityMining/VeDistributor/PendleFeeDistributor.sol/PendleFeeDistributor.dbg.json +1 -1
  16. package/build/artifacts/contracts/LiquidityMining/VeDistributor/PendleFeeDistributor.sol/PendleFeeDistributor.json +2 -2
  17. package/build/artifacts/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.dbg.json +1 -1
  18. package/build/artifacts/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.json +2 -2
  19. package/build/artifacts/contracts/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
  20. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +1 -1
  21. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.json +2 -2
  22. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
  23. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.json +3 -3
  24. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
  25. package/build/artifacts/contracts/LiquidityMining/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
  26. package/build/artifacts/contracts/LiquidityMining/libraries/VeBalanceLib.sol/VeBalanceLib.json +2 -2
  27. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/CheckpointHelper.dbg.json +1 -1
  28. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/CheckpointHelper.json +2 -2
  29. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
  30. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/Checkpoints.json +2 -2
  31. package/build/artifacts/contracts/core/BulkSeller/BulkSeller.sol/BulkSeller.dbg.json +1 -1
  32. package/build/artifacts/contracts/core/BulkSeller/BulkSeller.sol/BulkSeller.json +2 -2
  33. package/build/artifacts/contracts/core/BulkSeller/BulkSellerFactory.sol/BulkSellerFactory.dbg.json +1 -1
  34. package/build/artifacts/contracts/core/BulkSeller/BulkSellerFactory.sol/BulkSellerFactory.json +2 -2
  35. package/build/artifacts/contracts/core/BulkSeller/BulkSellerMathCore.sol/BulkSellerMathCore.dbg.json +1 -1
  36. package/build/artifacts/contracts/core/BulkSeller/BulkSellerMathCore.sol/BulkSellerMathCore.json +2 -2
  37. package/build/artifacts/contracts/core/Market/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
  38. package/build/artifacts/contracts/core/Market/MarketMathCore.sol/MarketMathCore.json +2 -2
  39. package/build/artifacts/contracts/core/Market/OracleLib.sol/OracleLib.dbg.json +1 -1
  40. package/build/artifacts/contracts/core/Market/OracleLib.sol/OracleLib.json +2 -2
  41. package/build/artifacts/contracts/core/Market/PendleGauge.sol/PendleGauge.dbg.json +1 -1
  42. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
  43. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +2 -2
  44. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
  45. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +2 -2
  46. package/build/artifacts/contracts/core/RewardManager/RewardManager.sol/RewardManager.dbg.json +1 -1
  47. package/build/artifacts/contracts/core/RewardManager/RewardManagerAbstract.sol/RewardManagerAbstract.dbg.json +1 -1
  48. package/build/artifacts/contracts/core/StandardizedYield/SYBase.sol/SYBase.dbg.json +1 -1
  49. package/build/artifacts/contracts/core/StandardizedYield/SYBaseWithRewards.sol/SYBaseWithRewards.dbg.json +1 -1
  50. package/build/artifacts/contracts/core/StandardizedYield/StEthHelper.sol/StEthHelper.dbg.json +1 -1
  51. package/build/artifacts/contracts/core/StandardizedYield/StEthHelper.sol/StEthHelper.json +1 -41
  52. package/build/artifacts/contracts/core/StandardizedYield/implementations/Ape/sAPE.sol/sAPE.dbg.json +1 -1
  53. package/build/artifacts/contracts/core/StandardizedYield/implementations/Ape/sAPE.sol/sAPE.json +2 -2
  54. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAura3EthSY.sol/PendleAura3EthSY.dbg.json +1 -1
  55. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAura3EthSY.sol/PendleAura3EthSY.json +2 -41
  56. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraCbethWstethSY.sol/PendleAuraCbethWstethSY.dbg.json +1 -1
  57. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraCbethWstethSY.sol/PendleAuraCbethWstethSY.json +2 -41
  58. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethRethSY.sol/PendleAuraWethRethSY.dbg.json +1 -1
  59. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethRethSY.sol/PendleAuraWethRethSY.json +2 -2
  60. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethWstethSY.sol/PendleAuraWethWstethSY.dbg.json +1 -1
  61. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/PendleAuraWethWstethSY.sol/PendleAuraWethWstethSY.json +2 -41
  62. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStableMath.sol/ComposableStableMath.dbg.json +1 -1
  63. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/ComposableStable/ComposableStablePreview.sol/ComposableStablePreview.dbg.json +1 -1
  64. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/FixedPoint.sol/FixedPoint.dbg.json +1 -1
  65. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/MetaStable/MetaStableMath.sol/MetaStableMath.dbg.json +1 -1
  66. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/MetaStable/MetaStablePreview.sol/MetaStablePreview.dbg.json +1 -1
  67. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/PendleAuraBalancerStableLPSY.sol/PendleAuraBalancerStableLPSY.dbg.json +1 -1
  68. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/StablePoolUserData.sol/StablePoolUserData.dbg.json +1 -1
  69. package/build/artifacts/contracts/core/StandardizedYield/implementations/BalancerStable/base/StablePreviewBase.sol/StablePreviewBase.dbg.json +1 -1
  70. package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.dbg.json +1 -1
  71. package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.json +2 -2
  72. package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenSY.sol/PendleQiTokenSY.dbg.json +1 -1
  73. package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenSY.sol/PendleQiTokenSY.json +2 -2
  74. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveFraxUsdcSY.sol/PendleCurveFraxUsdcSY.dbg.json +1 -1
  75. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveFraxUsdcSY.sol/PendleCurveFraxUsdcSY.json +2 -2
  76. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveUsdd3CrvSY.sol/PendleCurveUsdd3CrvSY.dbg.json +1 -1
  77. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveUsdd3CrvSY.sol/PendleCurveUsdd3CrvSY.json +2 -2
  78. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/PendleConvexLPSY.sol/PendleConvexLPSY.dbg.json +1 -1
  79. package/build/artifacts/contracts/core/StandardizedYield/implementations/GLP/GLPPreviewHelper.sol/GLPPreviewHelper.dbg.json +4 -0
  80. package/build/artifacts/contracts/core/StandardizedYield/implementations/GLP/GLPPreviewHelper.sol/GLPPreviewHelper.json +50 -0
  81. package/build/artifacts/contracts/core/StandardizedYield/implementations/GLP/PendleGlpSY.sol/PendleGlpSY.dbg.json +4 -0
  82. package/build/artifacts/contracts/core/StandardizedYield/implementations/GLP/PendleGlpSY.sol/PendleGlpSY.json +1163 -0
  83. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleLooksStakingSY.sol/PendleLooksStakingSY.dbg.json +1 -1
  84. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleLooksStakingSY.sol/PendleLooksStakingSY.json +2 -2
  85. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleWstEthSY.sol/PendleWstEthSY.dbg.json +1 -1
  86. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleWstEthSY.sol/PendleWstEthSY.json +2 -2
  87. package/build/artifacts/contracts/core/YieldContracts/InterestManagerYT.sol/InterestManagerYT.dbg.json +1 -1
  88. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +1 -1
  89. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.json +2 -2
  90. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
  91. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +2 -2
  92. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
  93. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.json +2 -2
  94. package/build/artifacts/contracts/core/YieldContractsV2/InterestManagerYTV2.sol/InterestManagerYTV2.dbg.json +4 -0
  95. package/build/artifacts/contracts/core/YieldContractsV2/InterestManagerYTV2.sol/InterestManagerYTV2.json +66 -0
  96. package/build/artifacts/contracts/core/YieldContractsV2/PendlePrincipalTokenV2.sol/PendlePrincipalTokenV2.dbg.json +4 -0
  97. package/build/artifacts/contracts/core/YieldContractsV2/PendlePrincipalTokenV2.sol/PendlePrincipalTokenV2.json +476 -0
  98. package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldContractFactoryV2.sol/PendleYieldContractFactoryV2.dbg.json +4 -0
  99. package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldContractFactoryV2.sol/PendleYieldContractFactoryV2.json +590 -0
  100. package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldTokenV2.sol/PendleYieldTokenV2.dbg.json +4 -0
  101. package/build/artifacts/contracts/core/YieldContractsV2/PendleYieldTokenV2.sol/PendleYieldTokenV2.json +1017 -0
  102. package/build/artifacts/contracts/core/libraries/ArrayLib.sol/ArrayLib.dbg.json +1 -1
  103. package/build/artifacts/contracts/core/libraries/Errors.sol/Errors.dbg.json +1 -1
  104. package/build/artifacts/contracts/core/libraries/Errors.sol/Errors.json +50 -2
  105. package/build/artifacts/contracts/core/libraries/TokenHelper.sol/TokenHelper.dbg.json +1 -1
  106. package/build/artifacts/contracts/interfaces/Balancer/IAsset.sol/IAsset.dbg.json +1 -1
  107. package/build/artifacts/contracts/interfaces/Balancer/IBalancerFees.sol/IBalancerFees.dbg.json +1 -1
  108. package/build/artifacts/contracts/interfaces/Balancer/IBalancerStablePreview.sol/IBalancerStablePreview.dbg.json +1 -1
  109. package/build/artifacts/contracts/interfaces/Balancer/IBasePool.sol/IBasePool.dbg.json +1 -1
  110. package/build/artifacts/contracts/interfaces/Balancer/IComposableStable.sol/IComposableStable.dbg.json +1 -1
  111. package/build/artifacts/contracts/interfaces/Balancer/IGauge.sol/IGauge.dbg.json +1 -1
  112. package/build/artifacts/contracts/interfaces/Balancer/ILiquidityGaugeFactory.sol/ILiquidityGaugeFactory.dbg.json +1 -1
  113. package/build/artifacts/contracts/interfaces/Balancer/IMetaStablePool.sol/IMetaStablePool.dbg.json +1 -1
  114. package/build/artifacts/contracts/interfaces/Balancer/IRateProvider.sol/IRateProvider.dbg.json +1 -1
  115. package/build/artifacts/contracts/interfaces/Balancer/IVault.sol/IVault.dbg.json +1 -1
  116. package/build/artifacts/contracts/interfaces/ConvexCurve/IRewards.sol/IRewards.dbg.json +1 -1
  117. package/build/artifacts/contracts/interfaces/GMX/IGMXVault.sol/IGMXVault.dbg.json +4 -0
  118. package/build/artifacts/contracts/interfaces/GMX/IGMXVault.sol/IGMXVault.json +308 -0
  119. package/build/artifacts/contracts/interfaces/GMX/IGlpManager.sol/IGlpManager.dbg.json +4 -0
  120. package/build/artifacts/contracts/interfaces/GMX/IGlpManager.sol/IGlpManager.json +43 -0
  121. package/build/artifacts/contracts/interfaces/GMX/IRewardRouterV2.sol/IRewardRouterV2.dbg.json +4 -0
  122. package/build/artifacts/contracts/interfaces/GMX/IRewardRouterV2.sol/IRewardRouterV2.json +201 -0
  123. package/build/artifacts/contracts/interfaces/GMX/IVaultPriceFeed.sol/IVaultPriceFeed.dbg.json +4 -0
  124. package/build/artifacts/contracts/interfaces/GMX/IVaultPriceFeed.sol/IVaultPriceFeed.json +45 -0
  125. package/build/artifacts/contracts/interfaces/IAddressProvider.sol/IAddressProvider.dbg.json +4 -0
  126. package/build/artifacts/contracts/interfaces/IAddressProvider.sol/IAddressProvider.json +48 -0
  127. package/build/artifacts/contracts/interfaces/IApeStaking.sol/IApeStaking.dbg.json +1 -1
  128. package/build/artifacts/contracts/interfaces/IDiamondCut.sol/IDiamondCut.dbg.json +4 -0
  129. package/build/artifacts/contracts/interfaces/IDiamondCut.sol/IDiamondCut.json +93 -0
  130. package/build/artifacts/contracts/interfaces/IDiamondLoupe.sol/IDiamondLoupe.dbg.json +4 -0
  131. package/build/artifacts/contracts/interfaces/IDiamondLoupe.sol/IDiamondLoupe.json +87 -0
  132. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.dbg.json +1 -1
  133. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.json +338 -16
  134. package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.dbg.json +1 -1
  135. package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.json +105 -224
  136. package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.dbg.json +1 -1
  137. package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.json +56 -12
  138. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.dbg.json +1 -1
  139. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.json +52 -8
  140. package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.dbg.json +1 -1
  141. package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.json +231 -8
  142. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
  143. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.json +675 -241
  144. package/build/artifacts/contracts/interfaces/IPBulkSeller.sol/IPBulkSeller.dbg.json +1 -1
  145. package/build/artifacts/contracts/interfaces/IPFeeDistributor.sol/IPFeeDistributor.dbg.json +1 -1
  146. package/build/artifacts/contracts/interfaces/IPInterestManagerYTV2.sol/IPInterestManagerYTV2.dbg.json +4 -0
  147. package/build/artifacts/contracts/interfaces/IPInterestManagerYTV2.sol/IPInterestManagerYTV2.json +40 -0
  148. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.dbg.json +1 -1
  149. package/build/artifacts/contracts/interfaces/IPMsgReceiverApp.sol/IPMsgReceiverApp.dbg.json +1 -1
  150. package/build/artifacts/contracts/interfaces/IPMsgReceiverApp.sol/IPMsgReceiverApp.json +1 -1
  151. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
  152. package/build/artifacts/contracts/interfaces/IPVotingEscrowMainchain.sol/IPVotingEscrowMainchain.dbg.json +1 -1
  153. package/build/artifacts/contracts/interfaces/IPYieldTokenV2.sol/IPYieldTokenV2.dbg.json +4 -0
  154. package/build/artifacts/contracts/interfaces/IPYieldTokenV2.sol/IPYieldTokenV2.json +679 -0
  155. package/build/artifacts/contracts/offchain-helpers/AddressProvider.sol/AddressProvider.dbg.json +4 -0
  156. package/build/artifacts/contracts/offchain-helpers/AddressProvider.sol/AddressProvider.json +143 -0
  157. package/build/artifacts/contracts/offchain-helpers/BulkSellerOffchain.sol/BulkSellerOffchain.dbg.json +1 -1
  158. package/build/artifacts/contracts/offchain-helpers/BulkSellerOffchain.sol/BulkSellerOffchain.json +2 -2
  159. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.dbg.json +1 -1
  160. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.json +2 -28
  161. package/build/artifacts/contracts/offchain-helpers/Multicall2.sol/Multicall2.dbg.json +1 -1
  162. package/build/artifacts/contracts/offchain-helpers/PendleMulticall.sol/PendleMulticall.dbg.json +4 -0
  163. package/build/artifacts/contracts/offchain-helpers/PendleMulticall.sol/PendleMulticall.json +47 -0
  164. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +1 -1
  165. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.json +144 -60
  166. package/build/artifacts/contracts/router/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.dbg.json +1 -1
  167. package/build/artifacts/contracts/router/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.json +345 -62
  168. package/build/artifacts/contracts/router/ActionMintRedeem.sol/ActionMintRedeem.dbg.json +1 -1
  169. package/build/artifacts/contracts/router/ActionMintRedeem.sol/ActionMintRedeem.json +107 -260
  170. package/build/artifacts/contracts/router/ActionMisc.sol/ActionMisc.dbg.json +1 -1
  171. package/build/artifacts/contracts/router/ActionMisc.sol/ActionMisc.json +57 -18
  172. package/build/artifacts/contracts/router/ActionSwapPT.sol/ActionSwapPT.dbg.json +1 -1
  173. package/build/artifacts/contracts/router/ActionSwapPT.sol/ActionSwapPT.json +54 -65
  174. package/build/artifacts/contracts/router/ActionSwapYT.sol/ActionSwapYT.dbg.json +1 -1
  175. package/build/artifacts/contracts/router/ActionSwapYT.sol/ActionSwapYT.json +342 -44
  176. package/build/artifacts/contracts/router/PendleRouter.sol/PendleRouter.dbg.json +1 -1
  177. package/build/artifacts/contracts/router/PendleRouter.sol/PendleRouter.json +76 -67
  178. package/build/artifacts/contracts/router/base/ActionBaseCallback.sol/ActionBaseCallback.dbg.json +4 -0
  179. package/build/artifacts/contracts/router/base/ActionBaseCallback.sol/ActionBaseCallback.json +141 -0
  180. package/build/artifacts/contracts/router/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.dbg.json +1 -1
  181. package/build/artifacts/contracts/router/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.json +1 -15
  182. package/build/artifacts/contracts/router/base/CallbackHelper.sol/CallbackHelper.dbg.json +1 -1
  183. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtInLib.dbg.json +1 -1
  184. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtInLib.json +2 -2
  185. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtOutLib.dbg.json +1 -1
  186. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtOutLib.json +2 -2
  187. package/build/artifacts/contracts/router/swap-aggregator/1inch/I1inchAggregationRouterV5.sol/I1inchAggregationRouterV5.dbg.json +4 -0
  188. package/build/artifacts/contracts/router/swap-aggregator/1inch/I1inchAggregationRouterV5.sol/I1inchAggregationRouterV5.json +160 -0
  189. package/build/artifacts/contracts/router/swap-aggregator/1inch/OneInchAggregationRouterHelper.sol/OneInchAggregationRouterHelper.dbg.json +4 -0
  190. package/build/artifacts/contracts/router/swap-aggregator/1inch/OneInchAggregationRouterHelper.sol/OneInchAggregationRouterHelper.json +10 -0
  191. package/build/artifacts/contracts/router/swap-aggregator/IPSwapAggregator.sol/IPSwapAggregator.dbg.json +4 -0
  192. package/build/artifacts/contracts/router/swap-aggregator/IPSwapAggregator.sol/IPSwapAggregator.json +56 -0
  193. package/build/artifacts/contracts/router/swap-aggregator/PendleSwapAggregator.sol/PendleSwapAggregator.dbg.json +4 -0
  194. package/build/artifacts/contracts/router/swap-aggregator/PendleSwapAggregator.sol/PendleSwapAggregator.json +72 -0
  195. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/KyberAggregationRouterHelper.sol/KyberAggregationRouterHelper.dbg.json +4 -0
  196. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/KyberAggregationRouterHelper.sol/KyberAggregationRouterHelper.json +10 -0
  197. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/ScaleDataHelperEthereum1.sol/ScaleDataHelperEthereum1.dbg.json +4 -0
  198. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/ScaleDataHelperEthereum1.sol/ScaleDataHelperEthereum1.json +10 -0
  199. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IAggregationExecutor.sol/IAggregationExecutor.dbg.json +4 -0
  200. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IAggregationExecutor.sol/IAggregationExecutor.json +65 -0
  201. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelperEthereum1.sol/IExecutorHelperEthereum1.dbg.json +4 -0
  202. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelperEthereum1.sol/IExecutorHelperEthereum1.json +388 -0
  203. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IHashflow.sol/IHashflow.dbg.json +4 -0
  204. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IHashflow.sol/IHashflow.json +101 -0
  205. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IMetaAggregationRouterV2.sol/IMetaAggregationRouterV2.dbg.json +4 -0
  206. package/build/artifacts/contracts/router/swap-aggregator/kyberswap/interfaces/IMetaAggregationRouterV2.sol/IMetaAggregationRouterV2.json +215 -0
  207. package/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiverAppUpg.sol +0 -1
  208. package/contracts/LiquidityMining/CrossChainMsg/libraries/LayerZeroHelper.sol +7 -9
  209. package/contracts/core/StandardizedYield/StEthHelper.sol +4 -4
  210. package/contracts/core/StandardizedYield/implementations/GLP/GLPPreviewHelper.sol +142 -0
  211. package/contracts/core/StandardizedYield/implementations/GLP/PendleGlpSY.sol +222 -0
  212. package/contracts/core/StandardizedYield/implementations/GLP/README.md +61 -0
  213. package/contracts/core/YieldContractsV2/InterestManagerYTV2.sol +114 -0
  214. package/contracts/core/YieldContractsV2/PendlePrincipalTokenV2.sol +63 -0
  215. package/contracts/core/YieldContractsV2/PendleYieldContractFactoryV2.sol +200 -0
  216. package/contracts/core/YieldContractsV2/PendleYieldTokenV2.sol +485 -0
  217. package/contracts/core/libraries/Errors.sol +5 -0
  218. package/contracts/core/libraries/TokenHelper.sol +10 -0
  219. package/contracts/interfaces/GMX/IGMXVault.sol +47 -0
  220. package/contracts/interfaces/GMX/IGlpManager.sol +8 -0
  221. package/contracts/interfaces/GMX/IRewardRouterV2.sol +43 -0
  222. package/contracts/interfaces/GMX/IVaultPriceFeed.sol +11 -0
  223. package/contracts/interfaces/IAddressProvider.sol +7 -0
  224. package/contracts/interfaces/IDiamondCut.sol +36 -0
  225. package/contracts/interfaces/IDiamondLoupe.sol +38 -0
  226. package/contracts/interfaces/IPActionAddRemoveLiq.sol +36 -1
  227. package/contracts/interfaces/IPActionMintRedeem.sol +2 -55
  228. package/contracts/interfaces/IPActionMisc.sol +18 -4
  229. package/contracts/interfaces/IPActionSwapPT.sol +1 -1
  230. package/contracts/interfaces/IPActionSwapYT.sol +28 -4
  231. package/contracts/interfaces/IPAllAction.sol +5 -3
  232. package/contracts/interfaces/IPInterestManagerYTV2.sol +13 -0
  233. package/contracts/interfaces/IPMsgReceiverApp.sol +1 -1
  234. package/contracts/interfaces/IPYieldTokenV2.sol +66 -0
  235. package/contracts/offchain-helpers/AddressProvider.sol +16 -0
  236. package/contracts/offchain-helpers/MarketMathStatic.sol +15 -0
  237. package/contracts/offchain-helpers/PendleMulticall.sol +26 -0
  238. package/contracts/offchain-helpers/RouterStatic.sol +22 -0
  239. package/contracts/router/ActionAddRemoveLiq.sol +116 -6
  240. package/contracts/router/ActionMintRedeem.sol +12 -202
  241. package/contracts/router/ActionMisc.sol +45 -19
  242. package/contracts/router/ActionSwapPT.sol +0 -5
  243. package/contracts/router/ActionSwapYT.sol +103 -13
  244. package/contracts/router/PendleRouter.sol +211 -72
  245. package/contracts/router/{ActionCallback.sol → base/ActionBaseCallback.sol} +47 -47
  246. package/contracts/router/base/ActionBaseMintRedeem.sol +105 -60
  247. package/contracts/router/base/CallbackHelper.sol +137 -44
  248. package/contracts/router/base/MarketApproxLib.sol +227 -350
  249. package/contracts/router/swap-aggregator/1inch/I1inchAggregationRouterV5.sol +45 -0
  250. package/contracts/router/swap-aggregator/1inch/OneInchAggregationRouterHelper.sol +69 -0
  251. package/contracts/router/swap-aggregator/IPSwapAggregator.sol +25 -0
  252. package/contracts/router/swap-aggregator/PendleSwapAggregator.sol +47 -0
  253. package/contracts/router/swap-aggregator/kyberswap/KyberAggregationRouterHelper.sol +214 -0
  254. package/contracts/router/swap-aggregator/kyberswap/ScaleDataHelperEthereum1.sol +147 -0
  255. package/contracts/router/swap-aggregator/kyberswap/interfaces/IAggregationExecutor.sol +17 -0
  256. package/contracts/router/swap-aggregator/kyberswap/interfaces/IExecutorHelperEthereum1.sol +191 -0
  257. package/contracts/router/swap-aggregator/kyberswap/interfaces/IHashflow.sol +30 -0
  258. package/contracts/router/swap-aggregator/kyberswap/interfaces/IMetaAggregationRouterV2.sol +42 -0
  259. package/deployments/1-core.json +2 -1
  260. package/deployments/1-markets/BALANCER-LP-AURA-WSTETH-WETH-JUN272024.json +11 -0
  261. package/deployments/1-offchain-helper.json +4 -0
  262. package/deployments/42161-core.json +26 -0
  263. package/deployments/42161-markets/GLP-28MARCH2024.json +10 -0
  264. package/deployments/42161-offchain-helper.json +4 -0
  265. package/package.json +1 -1
  266. package/typechain-types/ActionAddRemoveLiq.ts +203 -23
  267. package/typechain-types/ActionBaseCallback.ts +115 -0
  268. package/typechain-types/ActionMintRedeem.ts +29 -230
  269. package/typechain-types/ActionMisc.ts +77 -27
  270. package/typechain-types/ActionSwapPT.ts +26 -31
  271. package/typechain-types/ActionSwapYT.ts +202 -21
  272. package/typechain-types/AddressProvider.ts +280 -0
  273. package/typechain-types/GLPPreviewHelper.ts +121 -0
  274. package/typechain-types/GMXPreviewHelper.ts +121 -0
  275. package/typechain-types/I1inchAggregationRouterV5.ts +257 -0
  276. package/typechain-types/IAddressProvider.ts +123 -0
  277. package/typechain-types/IAggregationExecutor.ts +182 -0
  278. package/typechain-types/IDiamondCut.ts +152 -0
  279. package/typechain-types/IDiamondLoupe.ts +190 -0
  280. package/typechain-types/IExecutorHelperEthereum1.ts +643 -0
  281. package/typechain-types/IGMXVault.ts +494 -0
  282. package/typechain-types/IGlpManager.ts +115 -0
  283. package/typechain-types/IHashflow.ts +159 -0
  284. package/typechain-types/IKyberSwapAggregationRouterHelper.ts +109 -0
  285. package/typechain-types/IMetaAggregationRouter.ts +213 -0
  286. package/typechain-types/IMetaAggregationRouterV2.ts +221 -0
  287. package/typechain-types/IPActionAddRemoveLiq.ts +213 -14
  288. package/typechain-types/IPActionMintRedeem.ts +29 -211
  289. package/typechain-types/IPActionMisc.ts +77 -27
  290. package/typechain-types/IPActionSwapPT.ts +26 -12
  291. package/typechain-types/IPActionSwapYT.ts +168 -12
  292. package/typechain-types/IPAllAction.ts +445 -227
  293. package/typechain-types/IPInterestManagerYTV2.ts +117 -0
  294. package/typechain-types/IPMsgReceiverApp.ts +5 -5
  295. package/typechain-types/IPSwapAggregator.ts +126 -0
  296. package/typechain-types/IPYieldTokenV2.ts +901 -0
  297. package/typechain-types/IRewardRouterV2.ts +346 -0
  298. package/typechain-types/ISwapAggregator.ts +124 -0
  299. package/typechain-types/IVaultPriceFeed.ts +114 -0
  300. package/typechain-types/InterestManagerYTV2.ts +157 -0
  301. package/typechain-types/PendleAura3EthSY.ts +0 -39
  302. package/typechain-types/PendleAuraCbethWstethSY.ts +0 -39
  303. package/typechain-types/PendleAuraWethWstethSY.ts +0 -39
  304. package/typechain-types/PendleGaugeControllerSidechainUpg.ts +4 -4
  305. package/typechain-types/PendleGlpSY.ts +1463 -0
  306. package/typechain-types/PendleMsgReceiverAppUpg.ts +5 -5
  307. package/typechain-types/PendleMulticall.ts +110 -0
  308. package/typechain-types/PendlePrincipalTokenV2.ts +614 -0
  309. package/typechain-types/PendleRouter.ts +109 -131
  310. package/typechain-types/PendleSwapAggregator.ts +126 -0
  311. package/typechain-types/PendleYieldContractFactoryV2.ts +801 -0
  312. package/typechain-types/PendleYieldTokenV2.ts +1298 -0
  313. package/typechain-types/RouterStatic.ts +92 -0
  314. package/typechain-types/SwapAggregator.ts +406 -0
  315. package/typechain-types/VotingEscrowPendleSidechain.ts +4 -5
  316. package/typechain-types/factories/ActionAddRemoveLiq__factory.ts +346 -68
  317. package/typechain-types/factories/ActionBaseCallback__factory.ts +156 -0
  318. package/typechain-types/factories/ActionMintRedeem__factory.ts +108 -266
  319. package/typechain-types/factories/ActionMisc__factory.ts +56 -17
  320. package/typechain-types/factories/ActionSwapPT__factory.ts +55 -71
  321. package/typechain-types/factories/ActionSwapYT__factory.ts +356 -48
  322. package/typechain-types/factories/AddressProvider__factory.ts +196 -0
  323. package/typechain-types/factories/AggregationRouterHelper__factory.ts +1 -1
  324. package/typechain-types/factories/BulkSellerFactory__factory.ts +1 -1
  325. package/typechain-types/factories/BulkSellerOffchain__factory.ts +1 -1
  326. package/typechain-types/factories/BulkSeller__factory.ts +1 -1
  327. package/typechain-types/factories/Errors__factory.ts +49 -1
  328. package/typechain-types/factories/GLPPreviewHelper__factory.ts +65 -0
  329. package/typechain-types/factories/GMXPreviewHelper__factory.ts +65 -0
  330. package/typechain-types/factories/I1inchAggregationRouterV5__factory.ts +179 -0
  331. package/typechain-types/factories/IAddressProvider__factory.ts +63 -0
  332. package/typechain-types/factories/IAggregationExecutor__factory.ts +84 -0
  333. package/typechain-types/factories/IDiamondCut__factory.ts +105 -0
  334. package/typechain-types/factories/IDiamondLoupe__factory.ts +99 -0
  335. package/typechain-types/factories/IExecutorHelperEthereum1__factory.ts +407 -0
  336. package/typechain-types/factories/IGMXVault__factory.ts +320 -0
  337. package/typechain-types/factories/IGlpManager__factory.ts +55 -0
  338. package/typechain-types/factories/IHashflow__factory.ts +113 -0
  339. package/typechain-types/factories/IKyberSwapAggregationRouterHelper__factory.ts +56 -0
  340. package/typechain-types/factories/IMetaAggregationRouterV2__factory.ts +234 -0
  341. package/typechain-types/factories/IMetaAggregationRouter__factory.ts +202 -0
  342. package/typechain-types/factories/IPActionAddRemoveLiq__factory.ts +338 -16
  343. package/typechain-types/factories/IPActionMintRedeem__factory.ts +105 -224
  344. package/typechain-types/factories/IPActionMisc__factory.ts +55 -11
  345. package/typechain-types/factories/IPActionSwapPT__factory.ts +52 -8
  346. package/typechain-types/factories/IPActionSwapYT__factory.ts +231 -8
  347. package/typechain-types/factories/IPAllAction__factory.ts +675 -241
  348. package/typechain-types/factories/IPInterestManagerYTV2__factory.ts +59 -0
  349. package/typechain-types/factories/IPMsgReceiverApp__factory.ts +1 -1
  350. package/typechain-types/factories/IPSwapAggregator__factory.ts +71 -0
  351. package/typechain-types/factories/IPYieldTokenV2__factory.ts +694 -0
  352. package/typechain-types/factories/IRewardRouterV2__factory.ts +216 -0
  353. package/typechain-types/factories/ISwapAggregator__factory.ts +66 -0
  354. package/typechain-types/factories/IVaultPriceFeed__factory.ts +60 -0
  355. package/typechain-types/factories/InterestManagerYTV2__factory.ts +81 -0
  356. package/typechain-types/factories/MarketMathStatic__factory.ts +1 -27
  357. package/typechain-types/factories/OracleLib__factory.ts +1 -1
  358. package/typechain-types/factories/PendleAura3EthSY__factory.ts +1 -40
  359. package/typechain-types/factories/PendleAuraCbethWstethSY__factory.ts +1 -40
  360. package/typechain-types/factories/PendleAuraWethRethSY__factory.ts +1 -1
  361. package/typechain-types/factories/PendleAuraWethWstethSY__factory.ts +1 -40
  362. package/typechain-types/factories/PendleCurveFraxUsdcSY__factory.ts +1 -1
  363. package/typechain-types/factories/PendleCurveUsdd3CrvSY__factory.ts +1 -1
  364. package/typechain-types/factories/PendleFeeDistributor__factory.ts +1 -1
  365. package/typechain-types/factories/PendleGaugeControllerMainchainUpg__factory.ts +1 -1
  366. package/typechain-types/factories/PendleGaugeControllerSidechainUpg__factory.ts +2 -2
  367. package/typechain-types/factories/PendleGlpSY__factory.ts +1249 -0
  368. package/typechain-types/factories/PendleLooksStakingSY__factory.ts +1 -1
  369. package/typechain-types/factories/PendleMarketFactory__factory.ts +1 -1
  370. package/typechain-types/factories/PendleMarket__factory.ts +1 -1
  371. package/typechain-types/factories/PendleMsgReceiveEndpointUpg__factory.ts +1 -1
  372. package/typechain-types/factories/PendleMsgReceiverAppUpg__factory.ts +1 -1
  373. package/typechain-types/factories/PendleMsgSendEndpointUpg__factory.ts +1 -1
  374. package/typechain-types/factories/PendleMulticall__factory.ts +100 -0
  375. package/typechain-types/factories/PendlePrincipalTokenV2__factory.ts +564 -0
  376. package/typechain-types/factories/PendlePrincipalToken__factory.ts +1 -1
  377. package/typechain-types/factories/PendleQiTokenHelper__factory.ts +1 -1
  378. package/typechain-types/factories/PendleQiTokenSY__factory.ts +1 -1
  379. package/typechain-types/factories/PendleRouter__factory.ts +75 -74
  380. package/typechain-types/factories/PendleSwapAggregator__factory.ts +129 -0
  381. package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +1 -1
  382. package/typechain-types/factories/PendleWstEthSY__factory.ts +1 -1
  383. package/typechain-types/factories/PendleYieldContractFactoryV2__factory.ts +674 -0
  384. package/typechain-types/factories/PendleYieldContractFactory__factory.ts +1 -1
  385. package/typechain-types/factories/PendleYieldTokenV2__factory.ts +1109 -0
  386. package/typechain-types/factories/PendleYieldToken__factory.ts +1 -1
  387. package/typechain-types/factories/RouterStatic__factory.ts +69 -1
  388. package/typechain-types/factories/SAPE__factory.ts +1 -1
  389. package/typechain-types/factories/SwapAggregator__factory.ts +309 -0
  390. package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +1 -1
  391. package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +2 -2
  392. package/typechain-types/hardhat.d.ts +203 -59
  393. package/typechain-types/index.ts +50 -18
  394. package/build/artifacts/contracts/interfaces/IPActionSwapPTYT.sol/IPActionSwapPTYT.dbg.json +0 -4
  395. package/build/artifacts/contracts/interfaces/IPActionSwapPTYT.sol/IPActionSwapPTYT.json +0 -190
  396. package/build/artifacts/contracts/router/ActionCallback.sol/ActionCallback.dbg.json +0 -4
  397. package/build/artifacts/contracts/router/ActionCallback.sol/ActionCallback.json +0 -165
  398. package/build/artifacts/contracts/router/ActionSwapPTYT.sol/ActionSwapPTYT.dbg.json +0 -4
  399. package/build/artifacts/contracts/router/ActionSwapPTYT.sol/ActionSwapPTYT.json +0 -343
  400. package/build/artifacts/contracts/router/kyberswap/AggregationRouterHelper.sol/AggregationRouterHelper.dbg.json +0 -4
  401. package/build/artifacts/contracts/router/kyberswap/AggregationRouterHelper.sol/AggregationRouterHelper.json +0 -224
  402. package/build/artifacts/contracts/router/kyberswap/IAggregatorRouterHelper.sol/IAggregationRouterHelper.dbg.json +0 -4
  403. package/build/artifacts/contracts/router/kyberswap/IAggregatorRouterHelper.sol/IAggregationRouterHelper.json +0 -35
  404. package/build/artifacts/contracts/router/kyberswap/IMultihopRouterEthereum.sol/IMultihopRouterEthereum.dbg.json +0 -4
  405. package/build/artifacts/contracts/router/kyberswap/IMultihopRouterEthereum.sol/IMultihopRouterEthereum.json +0 -136
  406. package/build/artifacts/contracts/router/kyberswap/KyberSwapHelper.sol/KyberSwapHelper.dbg.json +0 -4
  407. package/build/artifacts/contracts/router/kyberswap/KyberSwapHelper.sol/KyberSwapHelper.json +0 -24
  408. package/contracts/interfaces/IPActionSwapPTYT.sol +0 -31
  409. package/contracts/router/ActionSwapPTYT.sol +0 -108
  410. package/contracts/router/kyberswap/AggregationRouterHelper.sol +0 -341
  411. package/contracts/router/kyberswap/IAggregatorRouterHelper.sol +0 -10
  412. package/contracts/router/kyberswap/IMultihopRouterEthereum.sol +0 -141
  413. package/contracts/router/kyberswap/KyberSwapHelper.sol +0 -79
@@ -0,0 +1,485 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity 0.8.17;
3
+
4
+ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
5
+
6
+ import "../../interfaces/IStandardizedYield.sol";
7
+ import "../../interfaces/IPYieldTokenV2.sol";
8
+ import "../../interfaces/IPPrincipalToken.sol";
9
+
10
+ import "../libraries/math/Math.sol";
11
+ import "../libraries/ArrayLib.sol";
12
+ import "../../interfaces/IPYieldContractFactory.sol";
13
+ import "../StandardizedYield/SYUtils.sol";
14
+ import "../libraries/Errors.sol";
15
+ import "../libraries/MiniHelpers.sol";
16
+
17
+ import "../RewardManager/RewardManager.sol";
18
+ import "../erc20/PendleERC20Permit.sol";
19
+ import "./InterestManagerYTV2.sol";
20
+
21
+ /**
22
+ Invariance to maintain:
23
+ - address(0) & address(this) should never have any rewards & activeBalance accounting done. This is
24
+ guaranteed by address(0) & address(this) check in each updateForTwo function
25
+ */
26
+ contract PendleYieldTokenV2 is
27
+ IPYieldTokenV2,
28
+ PendleERC20Permit,
29
+ RewardManager,
30
+ InterestManagerYTV2
31
+ {
32
+ using Math for uint256;
33
+ using SafeERC20 for IERC20;
34
+ using ArrayLib for uint256[];
35
+
36
+ struct PostExpiryData {
37
+ uint256 firstPYIndex;
38
+ }
39
+
40
+ address public immutable SY;
41
+ address public immutable PT;
42
+ address public immutable factory;
43
+ uint256 public immutable expiry;
44
+
45
+ bool public immutable doCacheIndexSameBlock;
46
+
47
+ uint256 public syReserve;
48
+
49
+ uint128 public pyIndexLastUpdatedBlock;
50
+ uint128 internal _pyIndexStored;
51
+
52
+ PostExpiryData public postExpiry;
53
+
54
+ uint256 internal _lastCollectedInterestIndex;
55
+
56
+ modifier updateData() {
57
+ if (isExpired()) _setPostExpiryData();
58
+ _;
59
+ _updateSyReserve();
60
+ }
61
+
62
+ modifier notExpired() {
63
+ if (isExpired()) revert Errors.YCExpired();
64
+ _;
65
+ }
66
+
67
+ /**
68
+ * @param _doCacheIndexSameBlock if true, the PY index is cached for each block, and thus is
69
+ * constant for all txs within the same block. Otherwise, the PY index is recalculated for
70
+ * every tx.
71
+ */
72
+ constructor(
73
+ address _SY,
74
+ address _PT,
75
+ string memory _name,
76
+ string memory _symbol,
77
+ uint8 __decimals,
78
+ uint256 _expiry,
79
+ bool _doCacheIndexSameBlock
80
+ ) PendleERC20Permit(_name, _symbol, __decimals) {
81
+ SY = _SY;
82
+ PT = _PT;
83
+ expiry = _expiry;
84
+ factory = msg.sender;
85
+ doCacheIndexSameBlock = _doCacheIndexSameBlock;
86
+ }
87
+
88
+ /**
89
+ * @notice Tokenize SY into PT + YT of equal qty. Every unit of asset of SY will create 1 PT + 1 YT
90
+ * @dev SY must be transferred to this contract prior to calling
91
+ */
92
+ function mintPY(address receiverPT, address receiverYT)
93
+ external
94
+ nonReentrant
95
+ notExpired
96
+ updateData
97
+ returns (uint256 amountPYOut)
98
+ {
99
+ address[] memory receiverPTs = new address[](1);
100
+ address[] memory receiverYTs = new address[](1);
101
+ uint256[] memory amountSyToMints = new uint256[](1);
102
+
103
+ (receiverPTs[0], receiverYTs[0], amountSyToMints[0]) = (
104
+ receiverPT,
105
+ receiverYT,
106
+ _getFloatingSyAmount()
107
+ );
108
+
109
+ uint256[] memory amountPYOuts = _mintPY(receiverPTs, receiverYTs, amountSyToMints);
110
+ amountPYOut = amountPYOuts[0];
111
+ }
112
+
113
+ /// @notice Tokenize SY into PT + YT for multiple receivers. See `mintPY()` for more details
114
+ function mintPYMulti(
115
+ address[] calldata receiverPTs,
116
+ address[] calldata receiverYTs,
117
+ uint256[] calldata amountSyToMints
118
+ ) external nonReentrant notExpired updateData returns (uint256[] memory amountPYOuts) {
119
+ uint256 length = receiverPTs.length;
120
+
121
+ if (length == 0) revert Errors.ArrayEmpty();
122
+ if (receiverYTs.length != length || amountSyToMints.length != length)
123
+ revert Errors.ArrayLengthMismatch();
124
+
125
+ uint256 totalSyToMint = amountSyToMints.sum();
126
+ if (totalSyToMint > _getFloatingSyAmount())
127
+ revert Errors.YieldContractInsufficientSy(totalSyToMint, _getFloatingSyAmount());
128
+
129
+ amountPYOuts = _mintPY(receiverPTs, receiverYTs, amountSyToMints);
130
+ }
131
+
132
+ /**
133
+ * @notice converts PT(+YT) tokens into SY, but interests & rewards are not redeemed at the
134
+ * same time
135
+ * @dev PT/YT must be transferred to this contract prior to calling
136
+ */
137
+ function redeemPY(address receiver)
138
+ external
139
+ nonReentrant
140
+ updateData
141
+ returns (uint256 amountSyOut)
142
+ {
143
+ address[] memory receivers = new address[](1);
144
+ uint256[] memory amounts = new uint256[](1);
145
+ (receivers[0], amounts[0]) = (receiver, _getAmountPYToRedeem());
146
+
147
+ uint256[] memory amountSyOuts;
148
+ amountSyOuts = _redeemPY(receivers, amounts);
149
+
150
+ amountSyOut = amountSyOuts[0];
151
+ }
152
+
153
+ /**
154
+ * @notice redeems PT(+YT) for multiple users. See `redeemPY()`
155
+ * @dev PT/YT must be transferred to this contract prior to calling
156
+ * @dev fails if unable to redeem the total PY amount in `amountPYToRedeems`
157
+ */
158
+ function redeemPYMulti(address[] calldata receivers, uint256[] calldata amountPYToRedeems)
159
+ external
160
+ nonReentrant
161
+ updateData
162
+ returns (uint256[] memory amountSyOuts)
163
+ {
164
+ if (receivers.length != amountPYToRedeems.length) revert Errors.ArrayLengthMismatch();
165
+ if (receivers.length == 0) revert Errors.ArrayEmpty();
166
+ amountSyOuts = _redeemPY(receivers, amountPYToRedeems);
167
+ }
168
+
169
+ /**
170
+ * @notice Redeems interests and rewards for `user`
171
+ * @param redeemInterest will only transfer out interest for user if true
172
+ * @param redeemRewards will only transfer out rewards for user if true
173
+ * @dev With YT yielding interest in the form of SY, which is redeemable by users, the reward
174
+ * distribution should be based on the amount of SYs that their YT currently represent, plus
175
+ * their dueInterest. It has been proven and tested that _rewardSharesUser will not change over
176
+ * time, unless users redeem their dueInterest or redeemPY. Due to this, it is required to
177
+ * update users' accruedReward STRICTLY BEFORE transferring out their interest.
178
+ */
179
+ function redeemDueInterestAndRewards(
180
+ address user,
181
+ bool redeemInterest,
182
+ bool redeemRewards
183
+ ) external nonReentrant updateData returns (uint256 interestOut, uint256[] memory rewardsOut) {
184
+ if (!redeemInterest && !redeemRewards) revert Errors.YCNothingToRedeem();
185
+
186
+ // if redeemRewards == true, this line must be here for obvious reason
187
+ // if redeemInterest == true, this line must be here because of the reason above
188
+ _updateAndDistributeRewards(user);
189
+
190
+ if (redeemRewards) {
191
+ rewardsOut = _doTransferOutRewards(user, user);
192
+ emit RedeemRewards(user, rewardsOut);
193
+ } else {
194
+ address[] memory tokens = getRewardTokens();
195
+ rewardsOut = new uint256[](tokens.length);
196
+ }
197
+
198
+ if (redeemInterest) {
199
+ _updateAndDistributeInterest(user);
200
+ interestOut = _doTransferOutInterest(user, SY);
201
+ emit RedeemInterest(user, interestOut);
202
+ } else {
203
+ interestOut = 0;
204
+ }
205
+ }
206
+
207
+ /**
208
+ * @dev All rewards and interests accrued post-expiry goes to the treasury.
209
+ * Reverts if called pre-expiry.
210
+ */
211
+ function redeemInterestAndRewardsPostExpiryForTreasury() external nonReentrant updateData {
212
+ if (!isExpired()) revert Errors.YCNotExpired();
213
+
214
+ _collectInterest();
215
+ _redeemExternalReward();
216
+ }
217
+
218
+ /// @notice updates and returns the reward indexes
219
+ function rewardIndexesCurrent() external override nonReentrant returns (uint256[] memory) {
220
+ return IStandardizedYield(SY).rewardIndexesCurrent();
221
+ }
222
+
223
+ /**
224
+ * @notice updates and returns the current PY index
225
+ * @dev this function maximizes the current PY index with the previous index, guaranteeing
226
+ * non-decreasing PY index
227
+ * @dev if `doCacheIndexSameBlock` is true, PY index only updates at most once per block,
228
+ * and has no state changes on the second call onwards (within the same block).
229
+ * @dev see `pyIndexStored()` for view function for cached value.
230
+ */
231
+ function pyIndexCurrent() public nonReentrant returns (uint256 currentIndex) {
232
+ currentIndex = _pyIndexCurrent();
233
+ }
234
+
235
+ /// @notice returns the last-updated PY index
236
+ function pyIndexStored() public view returns (uint256) {
237
+ return _pyIndexStored;
238
+ }
239
+
240
+ /**
241
+ * @notice do a final rewards redeeming, and sets post-expiry data
242
+ * @dev has no effect if called pre-expiry
243
+ */
244
+ function setPostExpiryData() external nonReentrant {
245
+ if (isExpired()) {
246
+ _setPostExpiryData();
247
+ }
248
+ }
249
+
250
+ /**
251
+ * @notice returns the current data post-expiry, if exists
252
+ * @dev reverts if post-expiry data not set (see `setPostExpiryData()`)
253
+ * @return firstPYIndex the earliest PY index post-expiry
254
+ */
255
+ function getPostExpiryData() external view returns (uint256 firstPYIndex) {
256
+ if (postExpiry.firstPYIndex == 0) revert Errors.YCPostExpiryDataNotSet();
257
+ firstPYIndex = postExpiry.firstPYIndex;
258
+ }
259
+
260
+ function _mintPY(
261
+ address[] memory receiverPTs,
262
+ address[] memory receiverYTs,
263
+ uint256[] memory amountSyToMints
264
+ ) internal returns (uint256[] memory amountPYOuts) {
265
+ amountPYOuts = new uint256[](amountSyToMints.length);
266
+
267
+ uint256 index = _pyIndexCurrent();
268
+
269
+ for (uint256 i = 0; i < amountSyToMints.length; i++) {
270
+ amountPYOuts[i] = _calcPYToMint(amountSyToMints[i], index);
271
+
272
+ _mint(receiverYTs[i], amountPYOuts[i]);
273
+ IPPrincipalToken(PT).mintByYT(receiverPTs[i], amountPYOuts[i]);
274
+
275
+ emit Mint(
276
+ msg.sender,
277
+ receiverPTs[i],
278
+ receiverYTs[i],
279
+ amountSyToMints[i],
280
+ amountPYOuts[i]
281
+ );
282
+ }
283
+ }
284
+
285
+ function isExpired() public view returns (bool) {
286
+ return MiniHelpers.isCurrentlyExpired(expiry);
287
+ }
288
+
289
+ function isDistributingInterestAndRewards() public view returns (bool) {
290
+ return postExpiry.firstPYIndex == 0;
291
+ }
292
+
293
+ function _redeemPY(address[] memory receivers, uint256[] memory amountPYToRedeems)
294
+ internal
295
+ returns (uint256[] memory amountSyOuts)
296
+ {
297
+ uint256 totalAmountPYToRedeem = amountPYToRedeems.sum();
298
+ IPPrincipalToken(PT).burnByYT(address(this), totalAmountPYToRedeem);
299
+ if (!isExpired()) _burn(address(this), totalAmountPYToRedeem);
300
+
301
+ uint256 index = _pyIndexCurrent();
302
+ uint256 totalSyInterestPostExpiry;
303
+ amountSyOuts = new uint256[](receivers.length);
304
+
305
+ for (uint256 i = 0; i < receivers.length; i++) {
306
+ uint256 syInterestPostExpiry;
307
+ (amountSyOuts[i], syInterestPostExpiry) = _calcSyRedeemableFromPY(
308
+ amountPYToRedeems[i],
309
+ index
310
+ );
311
+ _transferOut(SY, receivers[i], amountSyOuts[i]);
312
+ totalSyInterestPostExpiry += syInterestPostExpiry;
313
+
314
+ emit Burn(msg.sender, receivers[i], amountPYToRedeems[i], amountSyOuts[i]);
315
+ }
316
+
317
+ address treasury = IPYieldContractFactory(factory).treasury();
318
+ _transferOut(SY, treasury, totalSyInterestPostExpiry);
319
+ }
320
+
321
+ function _calcPYToMint(uint256 amountSy, uint256 indexCurrent)
322
+ internal
323
+ pure
324
+ returns (uint256 amountPY)
325
+ {
326
+ // doesn't matter before or after expiry, since mintPY is only allowed before expiry
327
+ return SYUtils.syToAsset(indexCurrent, amountSy);
328
+ }
329
+
330
+ function _calcSyRedeemableFromPY(uint256 amountPY, uint256 indexCurrent)
331
+ internal
332
+ view
333
+ returns (uint256 syToUser, uint256 syInterestPostExpiry)
334
+ {
335
+ syToUser = SYUtils.assetToSy(indexCurrent, amountPY);
336
+ if (isExpired()) {
337
+ uint256 totalSyRedeemable = SYUtils.assetToSy(postExpiry.firstPYIndex, amountPY);
338
+ syInterestPostExpiry = totalSyRedeemable - syToUser;
339
+ }
340
+ }
341
+
342
+ function _getAmountPYToRedeem() internal view returns (uint256) {
343
+ if (!isExpired()) return Math.min(_selfBalance(PT), balanceOf(address(this)));
344
+ else return _selfBalance(PT);
345
+ }
346
+
347
+ function _updateSyReserve() internal virtual {
348
+ syReserve = _selfBalance(SY);
349
+ }
350
+
351
+ function _getFloatingSyAmount() internal view returns (uint256 amount) {
352
+ amount = _selfBalance(SY) - syReserve;
353
+ if (amount == 0) revert Errors.YCNoFloatingSy();
354
+ }
355
+
356
+ function _setPostExpiryData() internal {
357
+ PostExpiryData storage local = postExpiry;
358
+ if (local.firstPYIndex != 0) return; // already set
359
+
360
+ _updateInterestIndex();
361
+ _updateRewardIndex();
362
+
363
+ // by setting this, we have finished setting postExpiry data, all income will go to treasury
364
+ local.firstPYIndex = _pyIndexCurrent().Uint128();
365
+ }
366
+
367
+ /*///////////////////////////////////////////////////////////////
368
+ INTEREST-RELATED
369
+ //////////////////////////////////////////////////////////////*/
370
+
371
+ function _pyIndexCurrent() internal returns (uint256 currentIndex) {
372
+ if (doCacheIndexSameBlock && pyIndexLastUpdatedBlock == block.number)
373
+ return _pyIndexStored;
374
+
375
+ uint128 index128 = Math
376
+ .max(IStandardizedYield(SY).exchangeRate(), _pyIndexStored)
377
+ .Uint128();
378
+
379
+ currentIndex = index128;
380
+ _pyIndexStored = index128;
381
+ pyIndexLastUpdatedBlock = uint128(block.number);
382
+ }
383
+
384
+ function _collectInterest()
385
+ internal
386
+ override
387
+ returns (uint256 accuredAmount, uint256 currentIndex)
388
+ {
389
+ uint256 prevIndex = _lastCollectedInterestIndex;
390
+ currentIndex = _pyIndexCurrent();
391
+
392
+ if (prevIndex != 0 && prevIndex != currentIndex) {
393
+ // guaranteed feeAmount != 0
394
+ address treasury = IPYieldContractFactory(factory).treasury();
395
+ uint256 interestFeeRate = isDistributingInterestAndRewards()
396
+ ? IPYieldContractFactory(factory).interestFeeRate()
397
+ : Math.ONE;
398
+
399
+ uint256 totalInterest = _calcInterest(totalSupply(), prevIndex, currentIndex);
400
+ uint256 feeAmount = totalInterest.mulDown(interestFeeRate);
401
+ accuredAmount = totalInterest - feeAmount;
402
+
403
+ _transferOut(SY, treasury, feeAmount);
404
+ _updateSyReserve();
405
+ emit CollectInterestFee(feeAmount);
406
+ }
407
+
408
+ _lastCollectedInterestIndex = currentIndex;
409
+ }
410
+
411
+ function _calcInterest(
412
+ uint256 principal,
413
+ uint256 prevIndex,
414
+ uint256 currentIndex
415
+ ) internal pure returns (uint256) {
416
+ return (principal * (currentIndex - prevIndex)).divDown(prevIndex * currentIndex);
417
+ }
418
+
419
+ function _YTbalance(address user) internal view override returns (uint256) {
420
+ return balanceOf(user);
421
+ }
422
+
423
+ function _YTSupply() internal view override returns (uint256) {
424
+ return totalSupply();
425
+ }
426
+
427
+ function _getGlobalPYIndex() internal view virtual override returns (uint256) {
428
+ return _pyIndexStored;
429
+ }
430
+
431
+ /*///////////////////////////////////////////////////////////////
432
+ REWARDS-RELATED
433
+ //////////////////////////////////////////////////////////////*/
434
+
435
+ function getRewardTokens() public view returns (address[] memory) {
436
+ return IStandardizedYield(SY).getRewardTokens();
437
+ }
438
+
439
+ function _redeemExternalReward() internal virtual override {
440
+ IStandardizedYield(SY).claimRewards(address(this));
441
+
442
+ address treasury = IPYieldContractFactory(factory).treasury();
443
+ uint256 rewardFeeRate = isDistributingInterestAndRewards()
444
+ ? IPYieldContractFactory(factory).rewardFeeRate()
445
+ : Math.ONE;
446
+
447
+ address[] memory rewardTokens = getRewardTokens();
448
+
449
+ for (uint256 i = 0; i < rewardTokens.length; ++i) {
450
+ address token = rewardTokens[i];
451
+ uint256 accruedReward = _selfBalance(token) - rewardState[token].lastBalance;
452
+
453
+ uint256 amountRewardFee = accruedReward.mulDown(rewardFeeRate);
454
+
455
+ _transferOut(token, treasury, amountRewardFee);
456
+ emit CollectRewardFee(token, amountRewardFee);
457
+ }
458
+ }
459
+
460
+ /// @dev effectively returning the amount of SY generating rewards for this user
461
+ function _rewardSharesUser(address user) internal view virtual override returns (uint256) {
462
+ uint256 index = userInterest[user].pyIndex;
463
+ if (index == 0) return 0;
464
+ return SYUtils.assetToSy(index, balanceOf(user)) + userInterest[user].accrued;
465
+ }
466
+
467
+ function _rewardSharesTotal() internal view virtual override returns (uint256) {
468
+ return syReserve;
469
+ }
470
+
471
+ function _getRewardTokens() internal view virtual override returns (address[] memory) {
472
+ return IStandardizedYield(SY).getRewardTokens();
473
+ }
474
+
475
+ //solhint-disable-next-line ordering
476
+ function _beforeTokenTransfer(
477
+ address from,
478
+ address to,
479
+ uint256
480
+ ) internal override {
481
+ if (isExpired()) _setPostExpiryData();
482
+ _updateAndDistributeRewardsForTwo(from, to);
483
+ _updateAndDistributeInterestForTwo(from, to);
484
+ }
485
+ }
@@ -75,6 +75,7 @@ library Errors {
75
75
  error RouterTimeRangeZero();
76
76
  error RouterCallbackNotPendleMarket(address caller);
77
77
  error RouterInvalidAction(bytes4 selector);
78
+ error RouterInvalidFacet(address facet);
78
79
 
79
80
  error RouterKyberSwapDataZero();
80
81
 
@@ -169,4 +170,8 @@ library Errors {
169
170
  error OnlyYT();
170
171
  error OnlyYCFactory();
171
172
  error OnlyWhitelisted();
173
+
174
+ // Swap Aggregator
175
+ error SAInsufficientTokenIn(address tokenIn, uint256 amountExpected, uint256 amountActual);
176
+ error UnsupportedSelector(uint256 aggregatorType, bytes4 selector);
172
177
  }
@@ -2,6 +2,7 @@
2
2
  pragma solidity 0.8.17;
3
3
  import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
4
4
  import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
5
+ import "../../interfaces/IWETH.sol";
5
6
 
6
7
  abstract contract TokenHelper {
7
8
  using SafeERC20 for IERC20;
@@ -83,4 +84,13 @@ abstract contract TokenHelper {
83
84
  _safeApprove(token, to, type(uint256).max);
84
85
  }
85
86
  }
87
+
88
+ function _wrap_unwrap_ETH(
89
+ address tokenIn,
90
+ address tokenOut,
91
+ uint256 netTokenIn
92
+ ) internal {
93
+ if (tokenIn == NATIVE) IWETH(tokenOut).deposit{ value: netTokenIn }();
94
+ else IWETH(tokenIn).withdraw(netTokenIn);
95
+ }
86
96
  }
@@ -0,0 +1,47 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity 0.8.17;
3
+
4
+ interface IGMXVault {
5
+ function BASIS_POINTS_DIVISOR() external view returns (uint256);
6
+
7
+ function PRICE_PRECISION() external view returns (uint256);
8
+
9
+ function priceFeed() external view returns (address);
10
+
11
+ function usdg() external view returns (address);
12
+
13
+ function hasDynamicFees() external view returns (bool);
14
+
15
+ function totalTokenWeights() external view returns (uint256);
16
+
17
+ function tokenBalances(address) external view returns (uint256);
18
+
19
+ function usdgAmounts(address) external view returns (uint256);
20
+
21
+ function getMinPrice(address _token) external view returns (uint256);
22
+
23
+ function getRedemptionAmount(address _token, uint256 _usdgAmount)
24
+ external
25
+ view
26
+ returns (uint256);
27
+
28
+ function taxBasisPoints() external view returns (uint256);
29
+
30
+ function mintBurnFeeBasisPoints() external view returns (uint256);
31
+
32
+ function allWhitelistedTokensLength() external view returns (uint256);
33
+
34
+ function allWhitelistedTokens(uint256) external view returns (address);
35
+
36
+ function whitelistedTokens(address) external view returns (bool);
37
+
38
+ function whitelistedTokenCount() external view returns (uint256);
39
+
40
+ function tokenWeights(address _token) external view returns (uint256);
41
+
42
+ function adjustForDecimals(
43
+ uint256 _amount,
44
+ address _tokenDiv,
45
+ address _tokenMul
46
+ ) external view returns (uint256);
47
+ }
@@ -0,0 +1,8 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity 0.8.17;
3
+
4
+ interface IGlpManager {
5
+ function getAumInUsdg(bool maximise) external view returns (uint256);
6
+
7
+ function vault() external view returns (address);
8
+ }
@@ -0,0 +1,43 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity 0.8.17;
3
+
4
+ interface IRewardRouterV2 {
5
+ function weth() external view returns (address);
6
+
7
+ function handleRewards(
8
+ bool _shouldClaimGmx,
9
+ bool _shouldStakeGmx,
10
+ bool _shouldClaimEsGmx,
11
+ bool _shouldStakeEsGmx,
12
+ bool _shouldStakeMultiplierPoints,
13
+ bool _shouldClaimWeth,
14
+ bool _shouldConvertWethToEth
15
+ ) external;
16
+
17
+ function glpManager() external view returns (address);
18
+
19
+ function mintAndStakeGlp(
20
+ address _token,
21
+ uint256 _amount,
22
+ uint256 _minUsdg,
23
+ uint256 _minGlp
24
+ ) external returns (uint256);
25
+
26
+ function mintAndStakeGlpETH(uint256 _minUsdg, uint256 _minGlp)
27
+ external
28
+ payable
29
+ returns (uint256);
30
+
31
+ function unstakeAndRedeemGlp(
32
+ address _tokenOut,
33
+ uint256 _glpAmount,
34
+ uint256 _minOut,
35
+ address _receiver
36
+ ) external returns (uint256);
37
+
38
+ function unstakeAndRedeemGlpETH(
39
+ uint256 _glpAmount,
40
+ uint256 _minOut,
41
+ address payable _receiver
42
+ ) external returns (uint256);
43
+ }
@@ -0,0 +1,11 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity 0.8.17;
3
+
4
+ interface IVaultPriceFeed {
5
+ function getPrice(
6
+ address _token,
7
+ bool _maximise,
8
+ bool _includeAmmPrice,
9
+ bool _useSwapPricing
10
+ ) external view returns (uint256);
11
+ }
@@ -0,0 +1,7 @@
1
+ pragma solidity 0.8.17;
2
+
3
+ interface IAddressProvider {
4
+ function get(uint256) external view returns (address);
5
+
6
+ function set(uint256 id, address addr) external;
7
+ }
@@ -0,0 +1,36 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ /******************************************************************************\
5
+ * Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)
6
+ * EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
7
+ /******************************************************************************/
8
+
9
+ interface IDiamondCut {
10
+ enum FacetCutAction {
11
+ Add,
12
+ Replace,
13
+ Remove
14
+ }
15
+ // Add=0, Replace=1, Remove=2
16
+
17
+ struct FacetCut {
18
+ address facetAddress;
19
+ FacetCutAction action;
20
+ bytes4[] functionSelectors;
21
+ }
22
+
23
+ /// @notice Add/replace/remove any number of functions and optionally execute
24
+ /// a function with delegatecall
25
+ /// @param _diamondCut Contains the facet addresses and function selectors
26
+ /// @param _init The address of the contract or facet to execute _calldata
27
+ /// @param _calldata A function call, including function selector and arguments
28
+ /// _calldata is executed with delegatecall on _init
29
+ function diamondCut(
30
+ FacetCut[] calldata _diamondCut,
31
+ address _init,
32
+ bytes calldata _calldata
33
+ ) external;
34
+
35
+ event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);
36
+ }