@pendle/core-v2 0.17.5-testnet → 0.17.7-testnet

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 (271) hide show
  1. package/README.md +28 -0
  2. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiveEndpointUpg.sol/PendleMsgReceiveEndpointUpg.dbg.json +1 -1
  3. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiveEndpointUpg.sol/PendleMsgReceiveEndpointUpg.json +2 -2
  4. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiverAppUpg.sol/PendleMsgReceiverAppUpg.dbg.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/ExcessivelySafeCall.sol/ExcessivelySafeCall.dbg.json +1 -1
  9. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/libraries/ExcessivelySafeCall.sol/ExcessivelySafeCall.json +2 -2
  10. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/libraries/LayerZeroHelper.sol/LayerZeroHelper.dbg.json +1 -1
  11. package/build/artifacts/contracts/LiquidityMining/CrossChainMsg/libraries/LayerZeroHelper.sol/LayerZeroHelper.json +2 -2
  12. package/build/artifacts/contracts/LiquidityMining/FeeDistributor/EpochResultManager.sol/EpochResultManager.dbg.json +1 -1
  13. package/build/artifacts/contracts/LiquidityMining/FeeDistributor/PendleFeeDistributor.sol/PendleFeeDistributor.dbg.json +1 -1
  14. package/build/artifacts/contracts/LiquidityMining/FeeDistributor/PendleFeeDistributor.sol/PendleFeeDistributor.json +2 -2
  15. package/build/artifacts/contracts/LiquidityMining/FeeDistributor/PendleFeeDistributorFactory.sol/PendleFeeDistributorFactory.dbg.json +1 -1
  16. package/build/artifacts/contracts/LiquidityMining/FeeDistributor/PendleFeeDistributorFactory.sol/PendleFeeDistributorFactory.json +2 -2
  17. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
  18. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
  19. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.json +2 -2
  20. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
  21. package/build/artifacts/contracts/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.json +2 -2
  22. package/build/artifacts/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.dbg.json +1 -1
  23. package/build/artifacts/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.json +2 -2
  24. package/build/artifacts/contracts/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
  25. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +1 -1
  26. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.json +2 -2
  27. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
  28. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.json +2 -2
  29. package/build/artifacts/contracts/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
  30. package/build/artifacts/contracts/LiquidityMining/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
  31. package/build/artifacts/contracts/LiquidityMining/libraries/VeBalanceLib.sol/VeBalanceLib.json +2 -2
  32. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/CheckpointHelper.dbg.json +1 -1
  33. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/CheckpointHelper.json +2 -2
  34. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
  35. package/build/artifacts/contracts/LiquidityMining/libraries/VeHistoryLib.sol/Checkpoints.json +2 -2
  36. package/build/artifacts/contracts/core/BulkSeller/BulkSeller.sol/BulkSeller.dbg.json +1 -1
  37. package/build/artifacts/contracts/core/BulkSeller/BulkSeller.sol/BulkSeller.json +22 -28
  38. package/build/artifacts/contracts/core/BulkSeller/BulkSellerFactory.sol/BulkSellerFactory.dbg.json +1 -1
  39. package/build/artifacts/contracts/core/BulkSeller/BulkSellerFactory.sol/BulkSellerFactory.json +3 -22
  40. package/build/artifacts/contracts/core/BulkSeller/BulkSellerMathCore.sol/BulkSellerMathCore.dbg.json +1 -1
  41. package/build/artifacts/contracts/core/BulkSeller/BulkSellerMathCore.sol/BulkSellerMathCore.json +2 -2
  42. package/build/artifacts/contracts/core/Market/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
  43. package/build/artifacts/contracts/core/Market/MarketMathCore.sol/MarketMathCore.json +2 -2
  44. package/build/artifacts/contracts/core/Market/OracleLib.sol/OracleLib.dbg.json +1 -1
  45. package/build/artifacts/contracts/core/Market/OracleLib.sol/OracleLib.json +2 -2
  46. package/build/artifacts/contracts/core/Market/PendleGauge.sol/PendleGauge.dbg.json +1 -1
  47. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
  48. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +2 -2
  49. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
  50. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +2 -2
  51. package/build/artifacts/contracts/core/RewardManager/RewardManager.sol/RewardManager.dbg.json +1 -1
  52. package/build/artifacts/contracts/core/RewardManager/RewardManagerAbstract.sol/RewardManagerAbstract.dbg.json +1 -1
  53. package/build/artifacts/contracts/core/StandardizedYield/SYBase.sol/SYBase.dbg.json +1 -1
  54. package/build/artifacts/contracts/core/StandardizedYield/SYBaseWithRewards.sol/SYBaseWithRewards.dbg.json +1 -1
  55. package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.dbg.json +1 -1
  56. package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.json +2 -2
  57. package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenSY.sol/PendleQiTokenSY.dbg.json +1 -1
  58. package/build/artifacts/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenSY.sol/PendleQiTokenSY.json +2 -2
  59. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveFraxUsdcSY.sol/PendleCurveFraxUsdcSY.dbg.json +1 -1
  60. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveFraxUsdcSY.sol/PendleCurveFraxUsdcSY.json +2 -2
  61. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveUsdd3CrvSY.sol/PendleCurveUsdd3CrvSY.dbg.json +1 -1
  62. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/PendleCurveUsdd3CrvSY.sol/PendleCurveUsdd3CrvSY.json +2 -2
  63. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/Curve3CrvPoolHelper.sol/Curve3CrvPoolHelper.dbg.json +1 -1
  64. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/Curve3CrvPoolHelper.sol/Curve3CrvPoolHelper.json +2 -2
  65. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/CurveFraxUsdcPoolHelper.sol/CurveFraxUsdcPoolHelper.dbg.json +1 -1
  66. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/CurveFraxUsdcPoolHelper.sol/CurveFraxUsdcPoolHelper.json +2 -2
  67. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/CurveUsdd3CrvPoolHelper.sol/CurveUsdd3CrvPoolHelper.dbg.json +1 -1
  68. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/CurveUsdd3CrvPoolHelper.sol/CurveUsdd3CrvPoolHelper.json +2 -2
  69. package/build/artifacts/contracts/core/StandardizedYield/implementations/Convex/base/PendleConvexLPSY.sol/PendleConvexLPSY.dbg.json +1 -1
  70. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleLooksStakingSY.sol/PendleLooksStakingSY.dbg.json +1 -1
  71. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleLooksStakingSY.sol/PendleLooksStakingSY.json +2 -2
  72. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleWstEthSY.sol/PendleWstEthSY.dbg.json +1 -1
  73. package/build/artifacts/contracts/core/StandardizedYield/implementations/PendleWstEthSY.sol/PendleWstEthSY.json +2 -2
  74. package/build/artifacts/contracts/core/YieldContracts/InterestManagerYT.sol/InterestManagerYT.dbg.json +1 -1
  75. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +1 -1
  76. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.json +2 -2
  77. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
  78. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +2 -2
  79. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
  80. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.json +2 -2
  81. package/build/artifacts/contracts/core/erc20/PendleERC20.sol/PendleERC20.dbg.json +1 -1
  82. package/build/artifacts/contracts/core/erc20/PendleERC20.sol/PendleERC20.json +2 -2
  83. package/build/artifacts/contracts/core/erc20/PendleERC20Permit.sol/PendleERC20Permit.dbg.json +1 -1
  84. package/build/artifacts/contracts/core/erc20/PendleERC20Permit.sol/PendleERC20Permit.json +2 -2
  85. package/build/artifacts/contracts/core/libraries/ArrayLib.sol/ArrayLib.dbg.json +1 -1
  86. package/build/artifacts/contracts/core/libraries/ArrayLib.sol/ArrayLib.json +2 -2
  87. package/build/artifacts/contracts/core/libraries/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeable.dbg.json +1 -1
  88. package/build/artifacts/contracts/core/libraries/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeableData.dbg.json +1 -1
  89. package/build/artifacts/contracts/core/libraries/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeableData.json +2 -2
  90. package/build/artifacts/contracts/core/libraries/Errors.sol/Errors.dbg.json +1 -1
  91. package/build/artifacts/contracts/core/libraries/Errors.sol/Errors.json +2 -18
  92. package/build/artifacts/contracts/core/libraries/MiniHelpers.sol/MiniHelpers.dbg.json +1 -1
  93. package/build/artifacts/contracts/core/libraries/MiniHelpers.sol/MiniHelpers.json +2 -2
  94. package/build/artifacts/contracts/core/libraries/TokenHelper.sol/TokenHelper.dbg.json +1 -1
  95. package/build/artifacts/contracts/interfaces/Curve/ICrvPool.sol/ICrvPool.dbg.json +1 -1
  96. package/build/artifacts/contracts/interfaces/Curve/ITriCrvPool.sol/ITriCrvPool.dbg.json +1 -1
  97. package/build/artifacts/contracts/interfaces/IBoringOwnableUpgradeable.sol/IBoringOwnableUpgradeable.dbg.json +1 -1
  98. package/build/artifacts/contracts/interfaces/ILayerZeroEndpoint.sol/ILayerZeroEndpoint.dbg.json +1 -1
  99. package/build/artifacts/contracts/interfaces/ILayerZeroReceiver.sol/ILayerZeroReceiver.dbg.json +1 -1
  100. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.dbg.json +1 -1
  101. package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.dbg.json +1 -1
  102. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.dbg.json +1 -1
  103. package/build/artifacts/contracts/interfaces/IPActionSwapPTYT.sol/IPActionSwapPTYT.dbg.json +1 -1
  104. package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.dbg.json +1 -1
  105. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
  106. package/build/artifacts/contracts/interfaces/IPBulkSeller.sol/IPBulkSeller.dbg.json +1 -1
  107. package/build/artifacts/contracts/interfaces/IPBulkSeller.sol/IPBulkSeller.json +187 -1
  108. package/build/artifacts/contracts/interfaces/IPBulkSellerFactory.sol/IPBulkSellerFactory.dbg.json +1 -1
  109. package/build/artifacts/contracts/interfaces/IPBulkSellerFactory.sol/IPBulkSellerFactory.json +0 -19
  110. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.dbg.json +1 -1
  111. package/build/artifacts/contracts/interfaces/IPMsgReceiverApp.sol/IPMsgReceiverApp.dbg.json +1 -1
  112. package/build/artifacts/contracts/interfaces/IPMsgSendEndpoint.sol/IPMsgSendEndpoint.dbg.json +1 -1
  113. package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.dbg.json +1 -1
  114. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
  115. package/build/artifacts/contracts/interfaces/IPVotingEscrowMainchain.sol/IPVotingEscrowMainchain.dbg.json +1 -1
  116. package/build/artifacts/contracts/interfaces/IREDACTEDStaking.sol/IREDACTEDStaking.dbg.json +1 -1
  117. package/build/artifacts/contracts/interfaces/IStETH.sol/IStETH.dbg.json +1 -1
  118. package/build/artifacts/contracts/interfaces/IStargateLPStaking.sol/IStargateLPStaking.dbg.json +1 -1
  119. package/build/artifacts/contracts/interfaces/IStargatePool.sol/IStargatePool.dbg.json +1 -1
  120. package/build/artifacts/contracts/interfaces/IStargateRouter.sol/IStargateRouter.dbg.json +1 -1
  121. package/build/artifacts/contracts/interfaces/IWXBTRFLY.sol/IWXBTRFLY.dbg.json +1 -1
  122. package/build/artifacts/contracts/offchain-helpers/BaseSplitCodeFactoryContract.sol/BaseSplitCodeFactoryContract.dbg.json +1 -1
  123. package/build/artifacts/contracts/offchain-helpers/BaseSplitCodeFactoryContract.sol/BaseSplitCodeFactoryContract.json +2 -2
  124. package/build/artifacts/contracts/offchain-helpers/BulkSellerOffchain.sol/BulkSellerOffchain.dbg.json +1 -1
  125. package/build/artifacts/contracts/offchain-helpers/BulkSellerOffchain.sol/BulkSellerOffchain.json +2 -2
  126. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.dbg.json +1 -1
  127. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.json +2 -2
  128. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +1 -1
  129. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.json +160 -60
  130. package/build/artifacts/contracts/router/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.dbg.json +1 -1
  131. package/build/artifacts/contracts/router/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.json +2 -2
  132. package/build/artifacts/contracts/router/ActionCallback.sol/ActionCallback.dbg.json +1 -1
  133. package/build/artifacts/contracts/router/ActionCallback.sol/ActionCallback.json +2 -2
  134. package/build/artifacts/contracts/router/ActionMintRedeem.sol/ActionMintRedeem.dbg.json +1 -1
  135. package/build/artifacts/contracts/router/ActionMintRedeem.sol/ActionMintRedeem.json +2 -2
  136. package/build/artifacts/contracts/router/ActionMisc.sol/ActionMisc.dbg.json +1 -1
  137. package/build/artifacts/contracts/router/ActionMisc.sol/ActionMisc.json +2 -2
  138. package/build/artifacts/contracts/router/ActionSwapPT.sol/ActionSwapPT.dbg.json +1 -1
  139. package/build/artifacts/contracts/router/ActionSwapPT.sol/ActionSwapPT.json +2 -2
  140. package/build/artifacts/contracts/router/ActionSwapPTYT.sol/ActionSwapPTYT.dbg.json +1 -1
  141. package/build/artifacts/contracts/router/ActionSwapPTYT.sol/ActionSwapPTYT.json +2 -2
  142. package/build/artifacts/contracts/router/ActionSwapYT.sol/ActionSwapYT.dbg.json +1 -1
  143. package/build/artifacts/contracts/router/ActionSwapYT.sol/ActionSwapYT.json +2 -2
  144. package/build/artifacts/contracts/router/PendleRouter.sol/PendleRouter.dbg.json +1 -1
  145. package/build/artifacts/contracts/router/PendleRouter.sol/PendleRouter.json +2 -2
  146. package/build/artifacts/contracts/router/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.dbg.json +1 -1
  147. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtInLib.dbg.json +1 -1
  148. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtInLib.json +2 -2
  149. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtOutLib.dbg.json +1 -1
  150. package/build/artifacts/contracts/router/base/MarketApproxLib.sol/MarketApproxPtOutLib.json +2 -2
  151. package/build/artifacts/contracts/router/kyberswap/AggregationRouterHelper.sol/AggregationRouterHelper.dbg.json +1 -1
  152. package/build/artifacts/contracts/router/kyberswap/AggregationRouterHelper.sol/AggregationRouterHelper.json +2 -2
  153. package/build/artifacts/contracts/router/kyberswap/IAggregatorRouterHelper.sol/IAggregationRouterHelper.dbg.json +1 -1
  154. package/build/artifacts/contracts/router/kyberswap/IMultihopRouter.sol/IMultihopRouter.dbg.json +1 -1
  155. package/build/artifacts/contracts/router/kyberswap/KyberSwapHelper.sol/KyberSwapHelper.dbg.json +1 -1
  156. package/contracts/LiquidityMining/CrossChainMsg/PendleMsgReceiverAppUpg.sol +1 -4
  157. package/contracts/LiquidityMining/CrossChainMsg/PendleMsgSendEndpointUpg.sol +6 -5
  158. package/contracts/LiquidityMining/CrossChainMsg/PendleMsgSenderAppUpg.sol +1 -4
  159. package/contracts/LiquidityMining/CrossChainMsg/libraries/ExcessivelySafeCall.sol +1 -1
  160. package/contracts/LiquidityMining/CrossChainMsg/libraries/LayerZeroHelper.sol +9 -6
  161. package/contracts/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol +9 -21
  162. package/contracts/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol +0 -3
  163. package/contracts/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol +0 -3
  164. package/contracts/LiquidityMining/VotingController/PendleVotingControllerUpg.sol +34 -54
  165. package/contracts/LiquidityMining/VotingController/VotingControllerStorageUpg.sol +6 -25
  166. package/contracts/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol +20 -38
  167. package/contracts/LiquidityMining/libraries/VeHistoryLib.sol +1 -1
  168. package/contracts/core/BulkSeller/BulkSeller.sol +35 -42
  169. package/contracts/core/BulkSeller/BulkSellerFactory.sol +5 -9
  170. package/contracts/core/BulkSeller/BulkSellerMathCore.sol +6 -5
  171. package/contracts/core/StandardizedYield/SYBase.sol +5 -23
  172. package/contracts/core/StandardizedYield/SYBaseWithRewards.sol +1 -3
  173. package/contracts/core/StandardizedYield/implementations/Ape/PendleApeStakingSY.sol +184 -0
  174. package/contracts/core/StandardizedYield/implementations/BenQi/PendleQiTokenSY.sol +1 -3
  175. package/contracts/core/StandardizedYield/implementations/Convex/base/CurveUsdd3CrvPoolHelper.sol +1 -1
  176. package/contracts/core/StandardizedYield/implementations/Convex/base/PendleConvexLPSY.sol +1 -1
  177. package/contracts/core/StandardizedYield/implementations/PendleWstEthSY.sol +1 -1
  178. package/contracts/core/YieldContracts/PendleYieldToken.sol +6 -6
  179. package/contracts/core/erc20/PendleERC20.sol +2 -2
  180. package/contracts/core/erc20/PendleERC20Permit.sol +1 -1
  181. package/contracts/core/libraries/ArrayLib.sol +1 -1
  182. package/contracts/core/libraries/BoringOwnableUpgradeable.sol +1 -1
  183. package/contracts/core/libraries/Errors.sol +2 -1
  184. package/contracts/core/libraries/MiniHelpers.sol +1 -0
  185. package/contracts/core/libraries/TokenHelper.sol +4 -5
  186. package/contracts/interfaces/Curve/ICrvPool.sol +3 -4
  187. package/contracts/interfaces/Curve/ITriCrvPool.sol +1 -4
  188. package/contracts/interfaces/IApeStaking.sol +27 -0
  189. package/contracts/interfaces/IBoringOwnableUpgradeable.sol +2 -2
  190. package/contracts/interfaces/ILayerZeroEndpoint.sol +1 -1
  191. package/contracts/interfaces/ILayerZeroReceiver.sol +8 -3
  192. package/contracts/interfaces/IPBulkSeller.sol +30 -6
  193. package/contracts/interfaces/IPBulkSellerFactory.sol +0 -2
  194. package/contracts/interfaces/IPMarket.sol +2 -12
  195. package/contracts/interfaces/IPMsgReceiverApp.sol +1 -1
  196. package/contracts/interfaces/IPMsgSendEndpoint.sol +1 -1
  197. package/contracts/interfaces/IPVeToken.sol +1 -1
  198. package/contracts/interfaces/IREDACTEDStaking.sol +1 -1
  199. package/contracts/interfaces/IStETH.sol +1 -1
  200. package/contracts/interfaces/IStargateLPStaking.sol +1 -1
  201. package/contracts/interfaces/IStargatePool.sol +1 -1
  202. package/contracts/interfaces/IStargateRouter.sol +1 -1
  203. package/contracts/interfaces/IWXBTRFLY.sol +1 -1
  204. package/contracts/offchain-helpers/MarketMathStatic.sol +140 -37
  205. package/contracts/offchain-helpers/RouterStatic.sol +48 -27
  206. package/contracts/router/ActionAddRemoveLiq.sol +2 -2
  207. package/contracts/router/ActionMintRedeem.sol +4 -4
  208. package/contracts/router/ActionSwapPT.sol +4 -4
  209. package/contracts/router/ActionSwapPTYT.sol +1 -1
  210. package/contracts/router/ActionSwapYT.sol +8 -8
  211. package/contracts/router/base/ActionBaseMintRedeem.sol +6 -7
  212. package/contracts/router/base/MarketApproxLib.sol +14 -8
  213. package/contracts/router/kyberswap/AggregationRouterHelper.sol +1 -1
  214. package/contracts/router/kyberswap/IAggregatorRouterHelper.sol +1 -1
  215. package/contracts/router/kyberswap/IMultihopRouter.sol +1 -1
  216. package/deployments/43113-core.json +1 -1
  217. package/deployments/43113-markets/APE-30-MARCH.json +10 -0
  218. package/package.json +1 -1
  219. package/typechain-types/BulkSeller.ts +59 -6
  220. package/typechain-types/BulkSellerFactory.ts +0 -16
  221. package/typechain-types/IApeStaking.ts +274 -0
  222. package/typechain-types/IPBulkSeller.ts +178 -9
  223. package/typechain-types/IPBulkSellerFactory.ts +0 -16
  224. package/typechain-types/PendleApeStakingSY.ts +1251 -0
  225. package/typechain-types/RouterStatic.ts +40 -20
  226. package/typechain-types/SYBaseAutoCompound.ts +1203 -0
  227. package/typechain-types/factories/ActionAddRemoveLiq__factory.ts +1 -1
  228. package/typechain-types/factories/ActionCallback__factory.ts +1 -1
  229. package/typechain-types/factories/ActionMintRedeem__factory.ts +1 -1
  230. package/typechain-types/factories/ActionMisc__factory.ts +1 -1
  231. package/typechain-types/factories/ActionSwapPTYT__factory.ts +1 -1
  232. package/typechain-types/factories/ActionSwapPT__factory.ts +1 -1
  233. package/typechain-types/factories/ActionSwapYT__factory.ts +1 -1
  234. package/typechain-types/factories/AggregationRouterHelper__factory.ts +1 -1
  235. package/typechain-types/factories/BaseSplitCodeFactoryContract__factory.ts +1 -1
  236. package/typechain-types/factories/BoringOwnableUpgradeableData__factory.ts +1 -1
  237. package/typechain-types/factories/BulkSellerFactory__factory.ts +2 -21
  238. package/typechain-types/factories/BulkSellerOffchain__factory.ts +1 -1
  239. package/typechain-types/factories/BulkSeller__factory.ts +21 -27
  240. package/typechain-types/factories/Errors__factory.ts +1 -17
  241. package/typechain-types/factories/IApeStaking__factory.ts +127 -0
  242. package/typechain-types/factories/IPBulkSellerFactory__factory.ts +0 -19
  243. package/typechain-types/factories/IPBulkSeller__factory.ts +187 -1
  244. package/typechain-types/factories/MarketMathStatic__factory.ts +1 -1
  245. package/typechain-types/factories/OracleLib__factory.ts +1 -1
  246. package/typechain-types/factories/PendleApeStakingSY__factory.ts +1065 -0
  247. package/typechain-types/factories/PendleCurveFraxUsdcSY__factory.ts +1 -1
  248. package/typechain-types/factories/PendleCurveUsdd3CrvSY__factory.ts +1 -1
  249. package/typechain-types/factories/PendleERC20Permit__factory.ts +1 -1
  250. package/typechain-types/factories/PendleERC20__factory.ts +1 -1
  251. package/typechain-types/factories/PendleFeeDistributorFactory__factory.ts +1 -1
  252. package/typechain-types/factories/PendleFeeDistributor__factory.ts +1 -1
  253. package/typechain-types/factories/PendleGaugeControllerMainchainUpg__factory.ts +1 -1
  254. package/typechain-types/factories/PendleGaugeControllerSidechainUpg__factory.ts +1 -1
  255. package/typechain-types/factories/PendleLooksStakingSY__factory.ts +1 -1
  256. package/typechain-types/factories/PendleMarketFactory__factory.ts +1 -1
  257. package/typechain-types/factories/PendleMarket__factory.ts +1 -1
  258. package/typechain-types/factories/PendleMsgReceiveEndpointUpg__factory.ts +1 -1
  259. package/typechain-types/factories/PendleMsgSendEndpointUpg__factory.ts +1 -1
  260. package/typechain-types/factories/PendlePrincipalToken__factory.ts +1 -1
  261. package/typechain-types/factories/PendleQiTokenHelper__factory.ts +1 -1
  262. package/typechain-types/factories/PendleQiTokenSY__factory.ts +1 -1
  263. package/typechain-types/factories/PendleRouter__factory.ts +1 -1
  264. package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +1 -1
  265. package/typechain-types/factories/PendleWstEthSY__factory.ts +1 -1
  266. package/typechain-types/factories/PendleYieldContractFactory__factory.ts +1 -1
  267. package/typechain-types/factories/PendleYieldToken__factory.ts +1 -1
  268. package/typechain-types/factories/RouterStatic__factory.ts +101 -1
  269. package/typechain-types/factories/SYBaseAutoCompound__factory.ts +942 -0
  270. package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +1 -1
  271. package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +1 -1
@@ -46,7 +46,8 @@ library MarketMathStatic {
46
46
  uint256 netLpOut,
47
47
  uint256 netPtToSwap,
48
48
  uint256 netSyFee,
49
- uint256 priceImpact
49
+ uint256 priceImpact,
50
+ uint256 exchangeRateAfter
50
51
  )
51
52
  {
52
53
  MarketState memory state = IPMarket(market).readState(address(this));
@@ -72,7 +73,8 @@ library MarketMathStatic {
72
73
  block.timestamp
73
74
  );
74
75
 
75
- priceImpact = calcPriceImpact(market, netPtToSwap.neg());
76
+ priceImpact = calcPriceImpactPt(market, netPtToSwap.neg());
77
+ exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
76
78
  }
77
79
 
78
80
  /// @dev netPtFromSwap is the parameter to approx
@@ -86,7 +88,8 @@ library MarketMathStatic {
86
88
  uint256 netLpOut,
87
89
  uint256 netPtFromSwap,
88
90
  uint256 netSyFee,
89
- uint256 priceImpact
91
+ uint256 priceImpact,
92
+ uint256 exchangeRateAfter
90
93
  )
91
94
  {
92
95
  MarketState memory state = IPMarket(market).readState(address(this));
@@ -108,7 +111,8 @@ library MarketMathStatic {
108
111
  );
109
112
  (, netLpOut, , ) = state.addLiquidity(netSyIn - netSySwap, netPtFromSwap, block.timestamp);
110
113
 
111
- priceImpact = calcPriceImpact(market, netPtFromSwap.Int());
114
+ priceImpact = calcPriceImpactPt(market, netPtFromSwap.Int());
115
+ exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
112
116
  }
113
117
 
114
118
  function removeLiquidityDualSyAndPtStatic(address market, uint256 netLpToRemove)
@@ -131,7 +135,8 @@ library MarketMathStatic {
131
135
  uint256 netPtOut,
132
136
  uint256 netPtFromSwap,
133
137
  uint256 netSyFee,
134
- uint256 priceImpact
138
+ uint256 priceImpact,
139
+ uint256 exchangeRateAfter
135
140
  )
136
141
  {
137
142
  MarketState memory state = IPMarket(market).readState(address(this));
@@ -145,7 +150,11 @@ library MarketMathStatic {
145
150
  );
146
151
 
147
152
  netPtOut = ptFromBurn + netPtFromSwap;
148
- priceImpact = calcPriceImpact(market, netPtFromSwap.Int());
153
+ priceImpact = calcPriceImpactPt(market, netPtFromSwap.Int());
154
+
155
+ // Execute swap to calculate exchangeRateAfter
156
+ state.swapSyForExactPt(pyIndex(market), netPtFromSwap, block.timestamp);
157
+ exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
149
158
  }
150
159
 
151
160
  function removeLiquiditySingleSyStatic(address market, uint256 netLpToRemove)
@@ -153,7 +162,8 @@ library MarketMathStatic {
153
162
  returns (
154
163
  uint256 netSyOut,
155
164
  uint256 netSyFee,
156
- uint256 priceImpact
165
+ uint256 priceImpact,
166
+ uint256 exchangeRateAfter
157
167
  )
158
168
  {
159
169
  MarketState memory state = IPMarket(market).readState(address(this));
@@ -171,7 +181,8 @@ library MarketMathStatic {
171
181
  );
172
182
 
173
183
  netSyOut = syFromBurn + syFromSwap;
174
- priceImpact = calcPriceImpact(market, ptFromBurn.neg());
184
+ priceImpact = calcPriceImpactPt(market, ptFromBurn.neg());
185
+ exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
175
186
  }
176
187
  }
177
188
 
@@ -180,7 +191,8 @@ library MarketMathStatic {
180
191
  returns (
181
192
  uint256 netSyOut,
182
193
  uint256 netSyFee,
183
- uint256 priceImpact
194
+ uint256 priceImpact,
195
+ uint256 exchangeRateAfter
184
196
  )
185
197
  {
186
198
  MarketState memory state = IPMarket(market).readState(address(this));
@@ -189,7 +201,8 @@ library MarketMathStatic {
189
201
  exactPtIn,
190
202
  block.timestamp
191
203
  );
192
- priceImpact = calcPriceImpact(market, exactPtIn.neg());
204
+ priceImpact = calcPriceImpactPt(market, exactPtIn.neg());
205
+ exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
193
206
  }
194
207
 
195
208
  function swapSyForExactPtStatic(address market, uint256 exactPtOut)
@@ -197,7 +210,8 @@ library MarketMathStatic {
197
210
  returns (
198
211
  uint256 netSyIn,
199
212
  uint256 netSyFee,
200
- uint256 priceImpact
213
+ uint256 priceImpact,
214
+ uint256 exchangeRateAfter
201
215
  )
202
216
  {
203
217
  MarketState memory state = IPMarket(market).readState(address(this));
@@ -206,7 +220,8 @@ library MarketMathStatic {
206
220
  exactPtOut,
207
221
  block.timestamp
208
222
  );
209
- priceImpact = calcPriceImpact(market, exactPtOut.Int());
223
+ priceImpact = calcPriceImpactPt(market, exactPtOut.Int());
224
+ exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
210
225
  }
211
226
 
212
227
  /// @dev netPtOut is the parameter to approx
@@ -219,7 +234,8 @@ library MarketMathStatic {
219
234
  returns (
220
235
  uint256 netPtOut,
221
236
  uint256 netSyFee,
222
- uint256 priceImpact
237
+ uint256 priceImpact,
238
+ uint256 exchangeRateAfter
223
239
  )
224
240
  {
225
241
  MarketState memory state = IPMarket(market).readState(address(this));
@@ -229,7 +245,11 @@ library MarketMathStatic {
229
245
  block.timestamp,
230
246
  approxParams
231
247
  );
232
- priceImpact = calcPriceImpact(market, netPtOut.Int());
248
+ priceImpact = calcPriceImpactPt(market, netPtOut.Int());
249
+
250
+ // Execute swap to calculate exchangeRateAfter
251
+ state.swapSyForExactPt(pyIndex(market), netPtOut, block.timestamp);
252
+ exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
233
253
  }
234
254
 
235
255
  /// @dev netPtIn is the parameter to approx
@@ -242,7 +262,8 @@ library MarketMathStatic {
242
262
  returns (
243
263
  uint256 netPtIn,
244
264
  uint256 netSyFee,
245
- uint256 priceImpact
265
+ uint256 priceImpact,
266
+ uint256 exchangeRateAfter
246
267
  )
247
268
  {
248
269
  MarketState memory state = IPMarket(market).readState(address(this));
@@ -253,7 +274,11 @@ library MarketMathStatic {
253
274
  block.timestamp,
254
275
  approxParams
255
276
  );
256
- priceImpact = calcPriceImpact(market, netPtIn.neg());
277
+ priceImpact = calcPriceImpactPt(market, netPtIn.neg());
278
+
279
+ // Execute swap to calculate exchangeRateAfter
280
+ state.swapExactPtForSy(pyIndex(market), netPtIn, block.timestamp);
281
+ exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
257
282
  }
258
283
 
259
284
  function swapSyForExactYtStatic(address market, uint256 exactYtOut)
@@ -261,11 +286,13 @@ library MarketMathStatic {
261
286
  returns (
262
287
  uint256 netSyIn,
263
288
  uint256 netSyFee,
264
- uint256 priceImpact
289
+ uint256 priceImpact,
290
+ uint256 exchangeRateAfter
265
291
  )
266
292
  {
267
- MarketState memory state = IPMarket(market).readState(address(this));
293
+ priceImpact = calcPriceImpactYt(market, exactYtOut.neg());
268
294
 
295
+ MarketState memory state = IPMarket(market).readState(address(this));
269
296
  PYIndex index = pyIndex(market);
270
297
 
271
298
  uint256 syReceived;
@@ -278,7 +305,7 @@ library MarketMathStatic {
278
305
  uint256 totalSyNeed = index.assetToSyUp(exactYtOut);
279
306
  netSyIn = totalSyNeed.subMax0(syReceived);
280
307
 
281
- priceImpact = calcPriceImpact(market, exactYtOut.neg());
308
+ exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
282
309
  }
283
310
 
284
311
  /// @dev netYtOut is the parameter to approx
@@ -291,7 +318,8 @@ library MarketMathStatic {
291
318
  returns (
292
319
  uint256 netYtOut,
293
320
  uint256 netSyFee,
294
- uint256 priceImpact
321
+ uint256 priceImpact,
322
+ uint256 exchangeRateAfter
295
323
  )
296
324
  {
297
325
  MarketState memory state = IPMarket(market).readState(address(this));
@@ -304,7 +332,11 @@ library MarketMathStatic {
304
332
  approxParams
305
333
  );
306
334
 
307
- priceImpact = calcPriceImpact(market, netYtOut.neg());
335
+ priceImpact = calcPriceImpactYt(market, netYtOut.neg());
336
+
337
+ // Execute swap to calculate exchangeRateAfter
338
+ state.swapSyForExactPt(index, netYtOut, block.timestamp);
339
+ exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
308
340
  }
309
341
 
310
342
  function swapExactYtForSyStatic(address market, uint256 exactYtIn)
@@ -312,9 +344,12 @@ library MarketMathStatic {
312
344
  returns (
313
345
  uint256 netSyOut,
314
346
  uint256 netSyFee,
315
- uint256 priceImpact
347
+ uint256 priceImpact,
348
+ uint256 exchangeRateAfter
316
349
  )
317
350
  {
351
+ priceImpact = calcPriceImpactYt(market, exactYtIn.Int());
352
+
318
353
  MarketState memory state = IPMarket(market).readState(address(this));
319
354
 
320
355
  PYIndex index = pyIndex(market);
@@ -326,7 +361,7 @@ library MarketMathStatic {
326
361
  uint256 amountPYToRedeemSyOut = exactYtIn - amountPYToRepaySyOwed;
327
362
 
328
363
  netSyOut = index.assetToSy(amountPYToRedeemSyOut);
329
- priceImpact = calcPriceImpact(market, exactYtIn.Int());
364
+ exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
330
365
  }
331
366
 
332
367
  /// @dev netYtIn is the parameter to approx
@@ -339,7 +374,8 @@ library MarketMathStatic {
339
374
  returns (
340
375
  uint256 netYtIn,
341
376
  uint256 netSyFee,
342
- uint256 priceImpact
377
+ uint256 priceImpact,
378
+ uint256 exchangeRateAfter
343
379
  )
344
380
  {
345
381
  MarketState memory state = IPMarket(market).readState(address(this));
@@ -352,7 +388,11 @@ library MarketMathStatic {
352
388
  block.timestamp,
353
389
  approxParams
354
390
  );
355
- priceImpact = calcPriceImpact(market, netYtIn.Int());
391
+ priceImpact = calcPriceImpactYt(market, netYtIn.Int());
392
+
393
+ // Execute swap to calculate exchangeRateAfter
394
+ state.swapSyForExactPt(index, netYtIn, block.timestamp);
395
+ exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
356
396
  }
357
397
 
358
398
  // totalPtToSwap is the param to approx
@@ -366,7 +406,8 @@ library MarketMathStatic {
366
406
  uint256 netYtOut,
367
407
  uint256 totalPtToSwap,
368
408
  uint256 netSyFee,
369
- uint256 priceImpact
409
+ uint256 priceImpact,
410
+ uint256 exchangeRateAfter
370
411
  )
371
412
  {
372
413
  MarketState memory state = IPMarket(market).readState(address(this));
@@ -378,7 +419,11 @@ library MarketMathStatic {
378
419
  block.timestamp,
379
420
  approxParams
380
421
  );
381
- priceImpact = calcPriceImpact(market, totalPtToSwap.neg());
422
+ priceImpact = calcPriceImpactPY(market, totalPtToSwap.neg());
423
+
424
+ // Execute swap to calculate exchangeRateAfter
425
+ state.swapExactPtForSy(index, totalPtToSwap, block.timestamp);
426
+ exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
382
427
  }
383
428
 
384
429
  // totalPtSwapped is the param to approx
@@ -392,7 +437,8 @@ library MarketMathStatic {
392
437
  uint256 netPtOut,
393
438
  uint256 totalPtSwapped,
394
439
  uint256 netSyFee,
395
- uint256 priceImpact
440
+ uint256 priceImpact,
441
+ uint256 exchangeRateAfter
396
442
  )
397
443
  {
398
444
  MarketState memory state = IPMarket(market).readState(address(this));
@@ -405,7 +451,11 @@ library MarketMathStatic {
405
451
  approxParams
406
452
  );
407
453
 
408
- priceImpact = calcPriceImpact(market, totalPtSwapped.Int());
454
+ priceImpact = calcPriceImpactPY(market, totalPtSwapped.Int());
455
+
456
+ // Execute swap to calculate exchangeRateAfter
457
+ state.swapSyForExactPt(index, totalPtSwapped, block.timestamp);
458
+ exchangeRateAfter = _getTradeExchangeRateExcludeFee(market, state);
409
459
  }
410
460
 
411
461
  function pyIndex(address market) public returns (PYIndex index) {
@@ -414,15 +464,17 @@ library MarketMathStatic {
414
464
  return YT.newIndex();
415
465
  }
416
466
 
417
- function getExchangeRate(address market) public returns (uint256) {
418
- return getTradeExchangeRateExcludeFee(market);
419
- }
420
-
421
467
  function getTradeExchangeRateExcludeFee(address market) public returns (uint256) {
422
468
  if (IPMarket(market).isExpired()) return Math.ONE;
423
469
  MarketState memory state = IPMarket(market).readState(address(this));
424
- MarketPreCompute memory comp = state.getMarketPreCompute(pyIndex(market), block.timestamp);
470
+ return _getTradeExchangeRateExcludeFee(market, state);
471
+ }
425
472
 
473
+ function _getTradeExchangeRateExcludeFee(address market, MarketState memory state)
474
+ public
475
+ returns (uint256)
476
+ {
477
+ MarketPreCompute memory comp = state.getMarketPreCompute(pyIndex(market), block.timestamp);
426
478
  int256 preFeeExchangeRate = MarketMathCore._getExchangeRate(
427
479
  state.totalPt,
428
480
  comp.totalAsset,
@@ -460,14 +512,40 @@ library MarketMathStatic {
460
512
  }
461
513
  }
462
514
 
463
- function calcPriceImpact(address market, int256 netPtOut)
515
+ function calcPriceImpactPt(address market, int256 netPtOut)
464
516
  public
465
517
  returns (uint256 priceImpact)
466
518
  {
467
- uint256 preTradeRate = getTradeExchangeRateIncludeFee(market, 0);
519
+ uint256 preTradeRate = getTradeExchangeRateIncludeFee(market, _getSign(netPtOut));
468
520
  uint256 tradedRate = getTradeExchangeRateIncludeFee(market, netPtOut);
521
+ priceImpact = _calculateImpact(preTradeRate, tradedRate);
522
+ }
469
523
 
470
- priceImpact = (tradedRate.Int() - preTradeRate.Int()).abs().divDown(preTradeRate);
524
+ function calcPriceImpactYt(address market, int256 netPtOut)
525
+ public
526
+ returns (uint256 priceImpact)
527
+ {
528
+ uint256 ytPreTradeRate = _calcVirtualYTPrice(
529
+ getTradeExchangeRateIncludeFee(market, _getSign(netPtOut))
530
+ );
531
+ uint256 ytTradedRate = _calcVirtualYTPrice(
532
+ getTradeExchangeRateIncludeFee(market, netPtOut)
533
+ );
534
+ priceImpact = _calculateImpact(ytPreTradeRate, ytTradedRate);
535
+ }
536
+
537
+ function calcPriceImpactPY(address market, int256 netPtOut)
538
+ public
539
+ returns (uint256 priceImpact)
540
+ {
541
+ uint256 ptPreTradeRate = getTradeExchangeRateIncludeFee(market, _getSign(netPtOut));
542
+ uint256 ytPreTradeRate = _calcVirtualYTPrice(ptPreTradeRate);
543
+ uint256 ptTradeRate = getTradeExchangeRateIncludeFee(market, netPtOut);
544
+ uint256 ytTradeRate = _calcVirtualYTPrice(ptTradeRate);
545
+
546
+ uint256 pyPreTradeRate = ytPreTradeRate.divDown(ptPreTradeRate);
547
+ uint256 pyTradeRate = ytTradeRate.divDown(ptTradeRate);
548
+ priceImpact = _calculateImpact(pyPreTradeRate, pyTradeRate);
471
549
  }
472
550
 
473
551
  function getPtImpliedYield(address market) public view returns (int256) {
@@ -476,4 +554,29 @@ library MarketMathStatic {
476
554
  int256 lnImpliedRate = (state.lastLnImpliedRate).Int();
477
555
  return lnImpliedRate.exp();
478
556
  }
557
+
558
+ function _calcVirtualYTPrice(uint256 ptAssetExchangeRate)
559
+ private
560
+ pure
561
+ returns (uint256 ytAssetExchangeRate)
562
+ {
563
+ // 1 asset = EX pt
564
+ // 1 pt = 1/EX Asset
565
+ // 1 yt + 1/EX Asset = 1 Asset
566
+ // 1 yt = 1 Asset - 1/EX Asset
567
+ // 1 yt = (EX - 1) / EX Asset
568
+ return (ptAssetExchangeRate - Math.ONE).divDown(ptAssetExchangeRate);
569
+ }
570
+
571
+ function _getSign(int256 netPtOut) private pure returns (int256) {
572
+ return netPtOut > 0 ? int256(1) : int256(-1);
573
+ }
574
+
575
+ function _calculateImpact(uint256 rateBefore, uint256 rateTraded)
576
+ private
577
+ pure
578
+ returns (uint256 impact)
579
+ {
580
+ impact = (rateBefore.Int() - rateTraded.Int()).abs().divDown(rateBefore);
581
+ }
479
582
  }
@@ -158,7 +158,7 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
158
158
  sy = address(SY);
159
159
  state = _market.readState(address(this));
160
160
  impliedYield = getPtImpliedYield(market);
161
- exchangeRate = MarketMathStatic.getExchangeRate(market);
161
+ exchangeRate = MarketMathStatic.getTradeExchangeRateExcludeFee(market);
162
162
  }
163
163
 
164
164
  // ============= USER INFO =============
@@ -325,7 +325,8 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
325
325
  uint256 netLpOut,
326
326
  uint256 netPtToSwap,
327
327
  uint256 netSyFee,
328
- uint256 priceImpact
328
+ uint256 priceImpact,
329
+ uint256 exchangeRateAfter
329
330
  )
330
331
  {
331
332
  return
@@ -338,7 +339,8 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
338
339
  uint256 netLpOut,
339
340
  uint256 netPtFromSwap,
340
341
  uint256 netSyFee,
341
- uint256 priceImpact
342
+ uint256 priceImpact,
343
+ uint256 exchangeRateAfter
342
344
  )
343
345
  {
344
346
  return
@@ -356,7 +358,8 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
356
358
  uint256 netLpOut,
357
359
  uint256 netPtFromSwap,
358
360
  uint256 netSyFee,
359
- uint256 priceImpact
361
+ uint256 priceImpact,
362
+ uint256 exchangeRateAfter
360
363
  )
361
364
  {
362
365
  uint256 netSyIn = previewDepositStatic(
@@ -400,7 +403,8 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
400
403
  uint256 netPtOut,
401
404
  uint256 netPtFromSwap,
402
405
  uint256 netSyFee,
403
- uint256 priceImpact
406
+ uint256 priceImpact,
407
+ uint256 exchangeRateAfter
404
408
  )
405
409
  {
406
410
  return
@@ -416,7 +420,8 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
416
420
  returns (
417
421
  uint256 netSyOut,
418
422
  uint256 netSyFee,
419
- uint256 priceImpact
423
+ uint256 priceImpact,
424
+ uint256 exchangeRateAfter
420
425
  )
421
426
  {
422
427
  return MarketMathStatic.removeLiquiditySingleSyStatic(market, netLpToRemove);
@@ -432,12 +437,13 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
432
437
  returns (
433
438
  uint256 netBaseTokenOut,
434
439
  uint256 netSyFee,
435
- uint256 priceImpact
440
+ uint256 priceImpact,
441
+ uint256 exchangeRateAfter
436
442
  )
437
443
  {
438
444
  uint256 netSyOut;
439
445
 
440
- (netSyOut, netSyFee, priceImpact) = MarketMathStatic.removeLiquiditySingleSyStatic(
446
+ (netSyOut, netSyFee, priceImpact, exchangeRateAfter) = MarketMathStatic.removeLiquiditySingleSyStatic(
441
447
  market,
442
448
  netLpToRemove
443
449
  );
@@ -450,7 +456,8 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
450
456
  returns (
451
457
  uint256 netSyOut,
452
458
  uint256 netSyFee,
453
- uint256 priceImpact
459
+ uint256 priceImpact,
460
+ uint256 exchangeRateAfter
454
461
  )
455
462
  {
456
463
  return MarketMathStatic.swapExactPtForSyStatic(market, exactPtIn);
@@ -461,7 +468,8 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
461
468
  returns (
462
469
  uint256 netSyIn,
463
470
  uint256 netSyFee,
464
- uint256 priceImpact
471
+ uint256 priceImpact,
472
+ uint256 exchangeRateAfter
465
473
  )
466
474
  {
467
475
  return MarketMathStatic.swapSyForExactPtStatic(market, exactPtOut);
@@ -472,7 +480,8 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
472
480
  returns (
473
481
  uint256 netPtOut,
474
482
  uint256 netSyFee,
475
- uint256 priceImpact
483
+ uint256 priceImpact,
484
+ uint256 exchangeRateAfter
476
485
  )
477
486
  {
478
487
  return
@@ -484,7 +493,8 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
484
493
  returns (
485
494
  uint256 netPtIn,
486
495
  uint256 netSyFee,
487
- uint256 priceImpact
496
+ uint256 priceImpact,
497
+ uint256 exchangeRateAfter
488
498
  )
489
499
  {
490
500
  return
@@ -501,7 +511,8 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
501
511
  returns (
502
512
  uint256 netPtOut,
503
513
  uint256 netSyFee,
504
- uint256 priceImpact
514
+ uint256 priceImpact,
515
+ uint256 exchangeRateAfter
505
516
  )
506
517
  {
507
518
  uint256 netSyIn = previewDepositStatic(
@@ -523,11 +534,12 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
523
534
  returns (
524
535
  uint256 netBaseTokenOut,
525
536
  uint256 netSyFee,
526
- uint256 priceImpact
537
+ uint256 priceImpact,
538
+ uint256 exchangeRateAfter
527
539
  )
528
540
  {
529
541
  uint256 netSyOut;
530
- (netSyOut, netSyFee, priceImpact) = MarketMathStatic.swapExactPtForSyStatic(
542
+ (netSyOut, netSyFee, priceImpact, exchangeRateAfter) = MarketMathStatic.swapExactPtForSyStatic(
531
543
  market,
532
544
  exactPtIn
533
545
  );
@@ -540,7 +552,8 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
540
552
  returns (
541
553
  uint256 netSyIn,
542
554
  uint256 netSyFee,
543
- uint256 priceImpact
555
+ uint256 priceImpact,
556
+ uint256 exchangeRateAfter
544
557
  )
545
558
  {
546
559
  return MarketMathStatic.swapSyForExactYtStatic(market, exactYtOut);
@@ -551,7 +564,9 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
551
564
  returns (
552
565
  uint256 netYtOut,
553
566
  uint256 netSyFee,
554
- uint256 priceImpact
567
+ uint256 priceImpact,
568
+ uint256 exchangeRateAfter
569
+
555
570
  )
556
571
  {
557
572
  return
@@ -563,7 +578,9 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
563
578
  returns (
564
579
  uint256 netSyOut,
565
580
  uint256 netSyFee,
566
- uint256 priceImpact
581
+ uint256 priceImpact,
582
+ uint256 exchangeRateAfter
583
+
567
584
  )
568
585
  {
569
586
  return MarketMathStatic.swapExactYtForSyStatic(market, exactYtIn);
@@ -574,7 +591,8 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
574
591
  returns (
575
592
  uint256 netYtIn,
576
593
  uint256 netSyFee,
577
- uint256 priceImpact
594
+ uint256 priceImpact,
595
+ uint256 exchangeRateAfter
578
596
  )
579
597
  {
580
598
  return
@@ -591,11 +609,12 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
591
609
  returns (
592
610
  uint256 netBaseTokenOut,
593
611
  uint256 netSyFee,
594
- uint256 priceImpact
612
+ uint256 priceImpact,
613
+ uint256 exchangeRateAfter
595
614
  )
596
615
  {
597
616
  uint256 netSyOut;
598
- (netSyOut, netSyFee, priceImpact) = MarketMathStatic.swapExactYtForSyStatic(
617
+ (netSyOut, netSyFee, priceImpact, exchangeRateAfter) = MarketMathStatic.swapExactYtForSyStatic(
599
618
  market,
600
619
  exactYtIn
601
620
  );
@@ -613,7 +632,8 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
613
632
  returns (
614
633
  uint256 netYtOut,
615
634
  uint256 netSyFee,
616
- uint256 priceImpact
635
+ uint256 priceImpact,
636
+ uint256 exchangeRateAfter
617
637
  )
618
638
  {
619
639
  uint256 netSyIn = previewDepositStatic(
@@ -632,7 +652,8 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
632
652
  uint256 netYtOut,
633
653
  uint256 totalPtToSwap,
634
654
  uint256 netSyFee,
635
- uint256 priceImpact
655
+ uint256 priceImpact,
656
+ uint256 exchangeRateAfter
636
657
  )
637
658
  {
638
659
  return MarketMathStatic.swapExactPtForYt(market, exactPtIn, getDefaultApproxParams());
@@ -644,7 +665,8 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
644
665
  uint256 netPtOut,
645
666
  uint256 totalPtSwapped,
646
667
  uint256 netSyFee,
647
- uint256 priceImpact
668
+ uint256 priceImpact,
669
+ uint256 exchangeRateAfter
648
670
  )
649
671
  {
650
672
  return MarketMathStatic.swapExactYtForPt(market, exactYtIn, getDefaultApproxParams());
@@ -778,7 +800,7 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
778
800
  public
779
801
  returns (uint256 priceImpact)
780
802
  {
781
- return MarketMathStatic.calcPriceImpact(market, netPtOut);
803
+ return MarketMathStatic.calcPriceImpactPt(market, netPtOut);
782
804
  }
783
805
 
784
806
  // either but not both pyToken or market must be != 0
@@ -803,7 +825,7 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
803
825
  address bulk,
804
826
  uint256 netSyOut
805
827
  ) public view returns (uint256 netTokenIn) {
806
- uint256 pivotAmount = netSyOut;
828
+ uint256 pivotAmount = 10 ** IERC20Metadata(tokenIn).decimals();
807
829
 
808
830
  uint256 low = pivotAmount;
809
831
  {
@@ -885,7 +907,6 @@ contract RouterStatic is Initializable, BoringOwnableUpgradeable, UUPSUpgradeabl
885
907
  return (address(0), 0, 0);
886
908
  }
887
909
 
888
-
889
910
  // Liquidity check
890
911
  uint256 postFeeRateTokenToSy = state.rateTokenToSy.mulDown(Math.ONE - state.feeRate);
891
912
  uint256 postFeeRateSyToToken = state.rateSyToToken.mulDown(Math.ONE - state.feeRate);
@@ -76,7 +76,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
76
76
 
77
77
  /**
78
78
  * @notice Adds liquidity to SY/PT market using PT + any token.
79
- * @dev Input token is first swapped to SY-mintable token using Kyber, then SY is minted from
79
+ * @dev Input token is first swapped to SY-mintable token using Kyber, then SY is minted from
80
80
  * such. Finally the SY/PT pair is added to the market
81
81
  * @param input data for input token, see {`./kyberswap/KyberSwapHelper.sol`}
82
82
  * @param netPtDesired maximum PT to be used
@@ -218,7 +218,7 @@ contract ActionAddRemoveLiq is IPActionAddRemoveLiq, ActionBaseMintRedeem {
218
218
  }
219
219
 
220
220
  /**
221
- * @notice Adds liquidity using a single token input. The input token is first swapped through
221
+ * @notice Adds liquidity using a single token input. The input token is first swapped through
222
222
  * Kyberswap to a SY-mintable token, the rest is the same as `addLiquiditySingleSy()`
223
223
  * @param guessPtReceivedFromSy approximate PT output for the SY-to-PT swap
224
224
  * @param input data for input token, see {`./kyberswap/KyberSwapHelper.sol`}
@@ -31,7 +31,7 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
31
31
  }
32
32
 
33
33
  /**
34
- * @notice redeems SY for SY-mintable tokens, then (if needed) swaps resulting tokens for
34
+ * @notice redeems SY for SY-mintable tokens, then (if needed) swaps resulting tokens for
35
35
  * desired output token through Kyberswap
36
36
  * @param output data for desired output token, see {`./kyberswap/KyberSwapHelper.sol`}
37
37
  */
@@ -47,7 +47,7 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
47
47
 
48
48
  /**
49
49
  * @notice mints PY from any input token
50
- * @dev swaps input token through Kyberswap to SY-mintable tokens first, then mints SY, finally
50
+ * @dev swaps input token through Kyberswap to SY-mintable tokens first, then mints SY, finally
51
51
  * mints PY from SY
52
52
  * @param input data for input token, see {`./kyberswap/KyberSwapHelper.sol`}
53
53
  * @dev reverts if PY is expired
@@ -68,7 +68,7 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
68
68
 
69
69
  /**
70
70
  * @notice redeems PY for token
71
- * @dev redeems PT(+YT) for SY first, then redeems SY, finally swaps resulting tokens to output
71
+ * @dev redeems PT(+YT) for SY first, then redeems SY, finally swaps resulting tokens to output
72
72
  * token through Kyberswap (if needed)
73
73
  * @param output data for desired output token, see {`./kyberswap/KyberSwapHelper.sol`}
74
74
  */
@@ -166,7 +166,7 @@ contract ActionMintRedeem is IPActionMintRedeem, ActionBaseMintRedeem {
166
166
  uint256[] amounts;
167
167
  }
168
168
 
169
- /**
169
+ /**
170
170
  * @notice A function to:
171
171
  - Redeem all of caller's due interest and rewards in SYs, YTs, and markets
172
172
  - Redeem SYs themselves