@pendle/core-v2 0.9.4-beta → 0.10.2-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 (360) hide show
  1. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.dbg.json +1 -1
  2. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.json +2 -2
  3. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/WadRayMath.sol/WadRayMath.dbg.json +1 -1
  4. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiSAvaxSCY.sol/PendleQiSAvaxSCY.dbg.json +1 -1
  5. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiSAvaxSCY.sol/PendleQiSAvaxSCY.json +2 -2
  6. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.dbg.json +1 -1
  7. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.dbg.json +1 -1
  8. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.json +2 -2
  9. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol/PendleSAvaxSCY.dbg.json +1 -1
  10. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol/PendleSAvaxSCY.json +2 -2
  11. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol/PendleEulerSCY.dbg.json +1 -1
  12. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol/PendleEulerSCY.json +7 -2
  13. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.dbg.json +1 -1
  14. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.json +2 -2
  15. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol/PendleStargateSCY.dbg.json +1 -1
  16. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol/PendleStargateSCY.json +2 -2
  17. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.dbg.json +1 -1
  18. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.json +2 -2
  19. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultSCY.sol/PendleYearnVaultSCY.dbg.json +4 -0
  20. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/{PendleYearnVaultScy.sol → PendleYearnVaultSCY.sol}/PendleYearnVaultSCY.json +3 -3
  21. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol/PendleSJoeSCY.dbg.json +1 -1
  22. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol/PendleSJoeSCY.json +2 -2
  23. package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBase.sol/SCYBase.dbg.json +1 -1
  24. package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol/SCYBaseWithRewards.dbg.json +1 -1
  25. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol/CelerReceiverUpg.dbg.json +1 -1
  26. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol/CelerReceiverUpg.json +67 -5
  27. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol/CelerSenderUpg.dbg.json +1 -1
  28. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol/CelerSenderUpg.json +63 -1
  29. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.dbg.json +1 -1
  30. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol/PendleGaugeControllerBaseUpg.json +65 -3
  31. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.dbg.json +1 -1
  32. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol/PendleGaugeControllerMainchainUpg.json +74 -10
  33. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.dbg.json +1 -1
  34. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol/PendleGaugeControllerSidechainUpg.json +79 -15
  35. package/build/artifacts/contracts/core/LiquidityMining/PendleGauge.sol/PendleGauge.dbg.json +1 -1
  36. package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.dbg.json +1 -1
  37. package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol/PendleVotingControllerUpg.json +204 -123
  38. package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.dbg.json +1 -1
  39. package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol/VotingControllerStorageUpg.json +127 -73
  40. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +1 -1
  41. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.json +93 -34
  42. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +1 -1
  43. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.json +90 -14
  44. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.dbg.json +1 -1
  45. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol/VotingEscrowTokenBase.json +14 -1
  46. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +1 -1
  47. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +139 -37
  48. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +1 -1
  49. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +84 -56
  50. package/build/artifacts/contracts/core/PendleERC20.sol/PendleERC20.dbg.json +1 -1
  51. package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.dbg.json +1 -1
  52. package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.json +122 -11
  53. package/build/artifacts/contracts/core/YieldContracts/InterestManagerYT.sol/InterestManagerYT.dbg.json +1 -1
  54. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +1 -1
  55. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.json +2 -2
  56. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +1 -1
  57. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +96 -40
  58. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +1 -1
  59. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.json +2 -2
  60. package/build/artifacts/contracts/core/actions/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.dbg.json +4 -0
  61. package/build/artifacts/contracts/core/actions/ActionAddRemoveLiq.sol/ActionAddRemoveLiq.json +1025 -0
  62. package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.dbg.json +1 -1
  63. package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.json +2 -2
  64. package/build/artifacts/contracts/core/actions/ActionMintRedeem.sol/ActionMintRedeem.dbg.json +4 -0
  65. package/build/artifacts/contracts/core/actions/ActionMintRedeem.sol/ActionMintRedeem.json +622 -0
  66. package/build/artifacts/contracts/core/actions/ActionMisc.sol/ActionMisc.dbg.json +4 -0
  67. package/build/artifacts/contracts/core/actions/ActionMisc.sol/ActionMisc.json +35 -0
  68. package/build/artifacts/contracts/core/actions/ActionSwapPT.sol/ActionSwapPT.dbg.json +4 -0
  69. package/build/artifacts/contracts/core/actions/ActionSwapPT.sol/ActionSwapPT.json +459 -0
  70. package/build/artifacts/contracts/core/actions/ActionSwapYT.sol/ActionSwapYT.dbg.json +4 -0
  71. package/build/artifacts/contracts/core/actions/ActionSwapYT.sol/ActionSwapYT.json +459 -0
  72. package/build/artifacts/contracts/core/actions/base/ActionBaseMintRedeem.sol/ActionBaseMintRedeem.dbg.json +4 -0
  73. package/build/artifacts/contracts/core/actions/base/{ActionSCYAndPTBase.sol/ActionSCYAndPTBase.json → ActionBaseMintRedeem.sol/ActionBaseMintRedeem.json} +2 -2
  74. package/build/artifacts/contracts/core/actions/base/CallbackHelper.sol/CallbackHelper.dbg.json +1 -1
  75. package/build/artifacts/contracts/interfaces/IAToken.sol/IAToken.dbg.json +1 -1
  76. package/build/artifacts/contracts/interfaces/IAavePool.sol/IAavePool.dbg.json +1 -1
  77. package/build/artifacts/contracts/interfaces/IAaveRewardsController.sol/IAaveRewardsController.dbg.json +1 -1
  78. package/build/artifacts/contracts/interfaces/IBenQiComptroller.sol/IBenQiComptroller.dbg.json +1 -1
  79. package/build/artifacts/contracts/interfaces/IBenQiComptroller.sol/IBenQiComptroller.json +24 -0
  80. package/build/artifacts/contracts/interfaces/IBenQiInterestRateModel.sol/IBenQiInterestRateModel.dbg.json +1 -1
  81. package/build/artifacts/contracts/interfaces/ICelerMessageBus.sol/ICelerMessageBus.dbg.json +1 -1
  82. package/build/artifacts/contracts/interfaces/ICelerMessageReceiverApp.sol/ICelerMessageReceiverApp.dbg.json +1 -1
  83. package/build/artifacts/contracts/interfaces/IERC4626.sol/IERC4626.dbg.json +1 -1
  84. package/build/artifacts/contracts/interfaces/IEulerEToken.sol/IEulerEToken.dbg.json +1 -1
  85. package/build/artifacts/contracts/interfaces/IEulerMarkets.sol/IEulerMarkets.dbg.json +1 -1
  86. package/build/artifacts/contracts/interfaces/IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.dbg.json +4 -0
  87. package/build/artifacts/contracts/interfaces/{IPActionCore.sol/IPActionCore.json → IPActionAddRemoveLiq.sol/IPActionAddRemoveLiq.json} +141 -912
  88. package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.dbg.json +4 -0
  89. package/build/artifacts/contracts/interfaces/IPActionMintRedeem.sol/IPActionMintRedeem.json +598 -0
  90. package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.dbg.json +4 -0
  91. package/build/artifacts/contracts/interfaces/IPActionMisc.sol/IPActionMisc.json +35 -0
  92. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.dbg.json +4 -0
  93. package/build/artifacts/contracts/interfaces/IPActionSwapPT.sol/IPActionSwapPT.json +435 -0
  94. package/build/artifacts/contracts/interfaces/IPActionSwapYT.sol/IPActionSwapYT.dbg.json +4 -0
  95. package/build/artifacts/contracts/interfaces/{IPActionYT.sol/IPActionYT.json → IPActionSwapYT.sol/IPActionSwapYT.json} +23 -11
  96. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
  97. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.json +323 -47
  98. package/build/artifacts/contracts/interfaces/IPGauge.sol/IPGauge.dbg.json +4 -0
  99. package/build/artifacts/contracts/{core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.json → interfaces/IPGauge.sol/IPGauge.json} +5 -5
  100. package/build/artifacts/contracts/interfaces/IPGaugeController.sol/IPGaugeController.dbg.json +1 -1
  101. package/build/artifacts/contracts/interfaces/IPGaugeControllerMainchain.sol/IPGaugeControllerMainchain.dbg.json +1 -1
  102. package/build/artifacts/contracts/interfaces/IPGovernanceManager.sol/IPGovernanceManager.dbg.json +1 -1
  103. package/build/artifacts/contracts/interfaces/IPInterestManagerYT.sol/IPInterestManagerYT.dbg.json +1 -1
  104. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.dbg.json +1 -1
  105. package/build/artifacts/contracts/interfaces/IPMarket.sol/IPMarket.json +72 -29
  106. package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.dbg.json +1 -1
  107. package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.json +0 -11
  108. package/build/artifacts/contracts/interfaces/IPMarketSwapCallback.sol/IPMarketSwapCallback.dbg.json +1 -1
  109. package/build/artifacts/contracts/interfaces/IPPermissionsV2Upg.sol/IPermissionsV2Upg.dbg.json +1 -1
  110. package/build/artifacts/contracts/interfaces/IPPrincipalToken.sol/IPPrincipalToken.dbg.json +1 -1
  111. package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.dbg.json +1 -1
  112. package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.json +1 -1
  113. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +1 -1
  114. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.json +0 -37
  115. package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IPVotingEscrow.dbg.json +1 -1
  116. package/build/artifacts/contracts/interfaces/IPYieldContractFactory.sol/IPYieldContractFactory.dbg.json +1 -1
  117. package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.dbg.json +1 -1
  118. package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.json +1 -1
  119. package/build/artifacts/contracts/interfaces/IQiAvax.sol/IQiAvax.dbg.json +1 -1
  120. package/build/artifacts/contracts/interfaces/IQiErc20.sol/IQiErc20.dbg.json +1 -1
  121. package/build/artifacts/contracts/interfaces/IQiToken.sol/IQiToken.dbg.json +1 -1
  122. package/build/artifacts/contracts/interfaces/IREDACTEDStaking.sol/IREDACTEDStaking.dbg.json +1 -1
  123. package/build/artifacts/contracts/interfaces/IRewardManager.sol/IRewardManager.dbg.json +1 -1
  124. package/build/artifacts/contracts/interfaces/IRewardManager.sol/IRewardManager.json +1 -1
  125. package/build/artifacts/contracts/interfaces/ISAvax.sol/ISAvax.dbg.json +1 -1
  126. package/build/artifacts/contracts/interfaces/ISJoe.sol/ISJoe.dbg.json +1 -1
  127. package/build/artifacts/contracts/interfaces/IStETH.sol/IStETH.dbg.json +1 -1
  128. package/build/artifacts/contracts/interfaces/IStargateLPStaking.sol/IStargateLPStaking.dbg.json +1 -1
  129. package/build/artifacts/contracts/interfaces/IStargatePool.sol/IStargatePool.dbg.json +1 -1
  130. package/build/artifacts/contracts/interfaces/IStargateRouter.sol/IStargateRouter.dbg.json +1 -1
  131. package/build/artifacts/contracts/interfaces/ISuperComposableYield.sol/ISuperComposableYield.dbg.json +1 -1
  132. package/build/artifacts/contracts/interfaces/IWAvax.sol/IWAvax.dbg.json +1 -1
  133. package/build/artifacts/contracts/interfaces/IWETH.sol/IWETH.dbg.json +1 -1
  134. package/build/artifacts/contracts/interfaces/IWXBTRFLY.sol/IWXBTRFLY.dbg.json +1 -1
  135. package/build/artifacts/contracts/interfaces/IWstETH.sol/IWstETH.dbg.json +1 -1
  136. package/build/artifacts/contracts/interfaces/IYearnVault.sol/IYearnVault.dbg.json +1 -1
  137. package/build/artifacts/contracts/libraries/OracleLib.sol/OracleLib.dbg.json +4 -0
  138. package/build/artifacts/contracts/libraries/OracleLib.sol/OracleLib.json +74 -0
  139. package/build/artifacts/contracts/libraries/RewardManager.sol/RewardManager.dbg.json +1 -1
  140. package/build/artifacts/contracts/libraries/RewardManagerAbstract.sol/RewardManagerAbstract.dbg.json +1 -1
  141. package/build/artifacts/contracts/libraries/SCY/SCYUtils.sol/SCYUtils.dbg.json +1 -1
  142. package/build/artifacts/contracts/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +1 -1
  143. package/build/artifacts/contracts/libraries/VeHistoryLib.sol/Checkpoints.dbg.json +1 -1
  144. package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.dbg.json +1 -1
  145. package/build/artifacts/contracts/libraries/helpers/ExpiryUtilsLib.sol/ExpiryUtils.dbg.json +1 -1
  146. package/build/artifacts/contracts/libraries/helpers/MiniHelpers.sol/MiniHelpers.dbg.json +1 -1
  147. package/build/artifacts/contracts/libraries/helpers/PYIndex.sol/PYIndexLib.dbg.json +1 -1
  148. package/build/artifacts/contracts/libraries/helpers/PYIndex.sol/PYIndexLib.json +2 -2
  149. package/build/artifacts/contracts/libraries/helpers/SSTORE2Deployer.sol/SSTORE2Deployer.dbg.json +1 -1
  150. package/build/artifacts/contracts/libraries/helpers/TokenHelper.sol/TokenHelper.dbg.json +1 -1
  151. package/build/artifacts/contracts/libraries/kyberswap/KyberSwapHelper.sol/KyberSwapHelper.dbg.json +1 -1
  152. package/build/artifacts/contracts/libraries/math/LogExpMath.sol/LogExpMath.dbg.json +1 -1
  153. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxLib.dbg.json +1 -1
  154. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxLib.json +2 -2
  155. package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
  156. package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.json +2 -2
  157. package/build/artifacts/contracts/libraries/math/Math.sol/Math.dbg.json +1 -1
  158. package/build/artifacts/contracts/libraries/math/WeekMath.sol/WeekMath.dbg.json +1 -1
  159. package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.dbg.json +1 -1
  160. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.dbg.json +4 -0
  161. package/build/artifacts/contracts/offchain-helpers/MarketMathStatic.sol/MarketMathStatic.json +93 -0
  162. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +1 -1
  163. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.json +427 -39
  164. package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeable.dbg.json +4 -0
  165. package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeable.json +86 -0
  166. package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeableData.dbg.json +4 -0
  167. package/build/artifacts/contracts/periphery/BoringOwnableUpgradeable.sol/BoringOwnableUpgradeableData.json +37 -0
  168. package/build/artifacts/contracts/periphery/PendleGovernanceManager.sol/PendleGovernanceManager.dbg.json +1 -1
  169. package/build/artifacts/contracts/periphery/PermissionsV2Upg.sol/PermissionsV2Upg.dbg.json +1 -1
  170. package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol +8 -0
  171. package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleSAvaxSCY.sol +1 -1
  172. package/contracts/SuperComposableYield/SCY-implementations/Euler/PendleEulerSCY.sol +11 -5
  173. package/contracts/SuperComposableYield/SCY-implementations/PendleStargateSCY.sol +0 -1
  174. package/contracts/SuperComposableYield/SCY-implementations/{PendleYearnVaultScy.sol → PendleYearnVaultSCY.sol} +0 -0
  175. package/contracts/SuperComposableYield/SCY-implementations/TraderJoe/PendleSJoeSCY.sol +1 -0
  176. package/contracts/SuperComposableYield/base-implementations/SCYBase.sol +1 -1
  177. package/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiverUpg.sol +7 -7
  178. package/contracts/core/LiquidityMining/CelerAbstracts/CelerSenderUpg.sol +7 -6
  179. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerBaseUpg.sol +4 -5
  180. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchainUpg.sol +6 -3
  181. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechainUpg.sol +6 -3
  182. package/contracts/core/LiquidityMining/PendleGauge.sol +3 -2
  183. package/contracts/core/LiquidityMining/VotingController/PendleVotingControllerUpg.sol +22 -28
  184. package/contracts/core/LiquidityMining/VotingController/VotingControllerStorageUpg.sol +71 -13
  185. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol +7 -4
  186. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol +6 -2
  187. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowTokenBase.sol +4 -3
  188. package/contracts/core/Market/PendleMarket.sol +93 -57
  189. package/contracts/core/Market/PendleMarketFactory.sol +18 -33
  190. package/contracts/core/PendleRouter.sol +60 -52
  191. package/contracts/core/YieldContracts/PendleYieldContractFactory.sol +12 -12
  192. package/contracts/core/YieldContracts/PendleYieldToken.sol +1 -1
  193. package/contracts/core/actions/ActionAddRemoveLiq.sol +366 -0
  194. package/contracts/core/actions/ActionCallback.sol +6 -6
  195. package/contracts/core/actions/ActionMintRedeem.sol +124 -0
  196. package/contracts/core/actions/ActionMisc.sol +24 -0
  197. package/contracts/core/actions/ActionSwapPT.sol +199 -0
  198. package/contracts/core/actions/{base/ActionSCYAndYTBase.sol → ActionSwapYT.sol} +109 -74
  199. package/contracts/core/actions/base/{ActionSCYAndPYBase.sol → ActionBaseMintRedeem.sol} +9 -8
  200. package/contracts/interfaces/IBenQiComptroller.sol +2 -0
  201. package/contracts/interfaces/IPActionAddRemoveLiq.sol +188 -0
  202. package/contracts/interfaces/IPActionMintRedeem.sol +115 -0
  203. package/contracts/interfaces/IPActionMisc.sol +9 -0
  204. package/contracts/interfaces/IPActionSwapPT.sol +69 -0
  205. package/contracts/interfaces/{IPActionYT.sol → IPActionSwapYT.sol} +12 -10
  206. package/contracts/interfaces/IPAllAction.sol +12 -3
  207. package/contracts/interfaces/IPGauge.sol +6 -0
  208. package/contracts/interfaces/IPGaugeController.sol +0 -2
  209. package/contracts/interfaces/IPMarket.sol +28 -10
  210. package/contracts/interfaces/IPMarketFactory.sol +1 -7
  211. package/contracts/interfaces/IPVeToken.sol +1 -1
  212. package/contracts/interfaces/IPVotingController.sol +0 -2
  213. package/contracts/interfaces/IRewardManager.sol +1 -1
  214. package/contracts/libraries/OracleLib.sol +214 -0
  215. package/contracts/libraries/RewardManagerAbstract.sol +1 -1
  216. package/contracts/libraries/math/MarketApproxLib.sol +227 -14
  217. package/contracts/libraries/math/MarketMathCore.sol +0 -33
  218. package/contracts/offchain-helpers/MarketMathStatic.sol +565 -0
  219. package/contracts/offchain-helpers/RouterStatic.sol +187 -251
  220. package/contracts/periphery/BoringOwnableUpgradeable.sol +62 -0
  221. package/deployments/43113-core.json +7 -8
  222. package/deployments/43113-markets/benqi-market-590025.json +8 -0
  223. package/deployments/43113-markets/benqi-market-c93916.json +8 -0
  224. package/deployments/80001-core.json +6 -7
  225. package/deployments/80001-markets/benqi-market-3b8BD1.json +8 -0
  226. package/deployments/80001-markets/benqi-market-b61e7f.json +8 -0
  227. package/package.json +11 -11
  228. package/typechain-types/ActionAddRemoveLiq.ts +1037 -0
  229. package/typechain-types/ActionBaseMintRedeem.ts +87 -0
  230. package/typechain-types/ActionCore.ts +21 -20
  231. package/typechain-types/ActionMintRedeem.ts +665 -0
  232. package/typechain-types/ActionMisc.ts +105 -0
  233. package/typechain-types/ActionSwapPT.ts +515 -0
  234. package/typechain-types/ActionSwapYT.ts +515 -0
  235. package/typechain-types/ActionYT.ts +5 -4
  236. package/typechain-types/BoringOwnable.ts +194 -0
  237. package/typechain-types/BoringOwnableData.ts +100 -0
  238. package/typechain-types/BoringOwnableUpgradeable.ts +194 -0
  239. package/typechain-types/BoringOwnableUpgradeableData.ts +100 -0
  240. package/typechain-types/CelerReceiverUpg.ts +124 -19
  241. package/typechain-types/CelerSenderUpg.ts +116 -11
  242. package/typechain-types/IBenQiComptroller.ts +39 -0
  243. package/typechain-types/IPActionAddRemoveLiq.ts +1018 -0
  244. package/typechain-types/IPActionCore.ts +21 -20
  245. package/typechain-types/IPActionMintRedeem.ts +646 -0
  246. package/typechain-types/IPActionMisc.ts +105 -0
  247. package/typechain-types/IPActionSwapPT.ts +496 -0
  248. package/typechain-types/IPActionSwapYT.ts +496 -0
  249. package/typechain-types/IPActionYT.ts +5 -4
  250. package/typechain-types/IPAllAction.ts +431 -193
  251. package/typechain-types/IPGauge.ts +87 -0
  252. package/typechain-types/IPMarket.ts +133 -50
  253. package/typechain-types/IPMarketFactory.ts +7 -17
  254. package/typechain-types/IPVeToken.ts +8 -8
  255. package/typechain-types/IPVotingController.ts +0 -20
  256. package/typechain-types/IPYieldToken.ts +3 -3
  257. package/typechain-types/IRewardManager.ts +3 -3
  258. package/typechain-types/MarketMathStatic.ts +198 -0
  259. package/typechain-types/OracleLib.ts +124 -0
  260. package/typechain-types/PendleGaugeControllerBaseUpg.ts +118 -15
  261. package/typechain-types/PendleGaugeControllerMainchainUpg.ts +136 -9
  262. package/typechain-types/PendleGaugeControllerSidechainUpg.ts +138 -11
  263. package/typechain-types/PendleMarket.ts +178 -59
  264. package/typechain-types/PendleMarketFactory.ts +135 -61
  265. package/typechain-types/PendleRouter.ts +201 -31
  266. package/typechain-types/PendleVotingControllerUpg.ts +325 -149
  267. package/typechain-types/PendleYieldContractFactory.ts +144 -21
  268. package/typechain-types/RouterStatic.ts +344 -64
  269. package/typechain-types/VotingControllerStorageUpg.ts +182 -113
  270. package/typechain-types/VotingEscrowPendleMainchain.ts +170 -63
  271. package/typechain-types/VotingEscrowPendleSidechain.ts +163 -17
  272. package/typechain-types/VotingEscrowTokenBase.ts +27 -8
  273. package/typechain-types/factories/ActionAddRemoveLiq__factory.ts +1083 -0
  274. package/typechain-types/factories/ActionBaseMintRedeem__factory.ts +43 -0
  275. package/typechain-types/factories/ActionCallback__factory.ts +1 -1
  276. package/typechain-types/factories/ActionCore__factory.ts +6 -6
  277. package/typechain-types/factories/ActionMintRedeem__factory.ts +680 -0
  278. package/typechain-types/factories/ActionMisc__factory.ts +85 -0
  279. package/typechain-types/factories/ActionSwapPT__factory.ts +514 -0
  280. package/typechain-types/factories/ActionSwapYT__factory.ts +514 -0
  281. package/typechain-types/factories/ActionYT__factory.ts +2 -2
  282. package/typechain-types/factories/BoringOwnableData__factory.ts +90 -0
  283. package/typechain-types/factories/BoringOwnableUpgradeableData__factory.ts +96 -0
  284. package/typechain-types/factories/BoringOwnableUpgradeable__factory.ts +143 -0
  285. package/typechain-types/factories/BoringOwnable__factory.ts +141 -0
  286. package/typechain-types/factories/CelerReceiverUpg__factory.ts +67 -5
  287. package/typechain-types/factories/CelerSenderUpg__factory.ts +63 -1
  288. package/typechain-types/factories/IBenQiComptroller__factory.ts +24 -0
  289. package/typechain-types/factories/IPActionAddRemoveLiq__factory.ts +1020 -0
  290. package/typechain-types/factories/IPActionCore__factory.ts +5 -5
  291. package/typechain-types/factories/IPActionMintRedeem__factory.ts +613 -0
  292. package/typechain-types/factories/IPActionMisc__factory.ts +47 -0
  293. package/typechain-types/factories/IPActionSwapPT__factory.ts +450 -0
  294. package/typechain-types/factories/IPActionSwapYT__factory.ts +450 -0
  295. package/typechain-types/factories/IPActionYT__factory.ts +1 -1
  296. package/typechain-types/factories/IPAllAction__factory.ts +323 -47
  297. package/typechain-types/factories/IPGauge__factory.ts +36 -0
  298. package/typechain-types/factories/IPMarketFactory__factory.ts +0 -11
  299. package/typechain-types/factories/IPMarket__factory.ts +72 -29
  300. package/typechain-types/factories/IPVeToken__factory.ts +1 -1
  301. package/typechain-types/factories/IPVotingController__factory.ts +0 -37
  302. package/typechain-types/factories/IPYieldToken__factory.ts +1 -1
  303. package/typechain-types/factories/IRewardManager__factory.ts +1 -1
  304. package/typechain-types/factories/MarketMathStatic__factory.ts +146 -0
  305. package/typechain-types/factories/OracleLib__factory.ts +124 -0
  306. package/typechain-types/factories/PendleAaveV3SCY__factory.ts +1 -1
  307. package/typechain-types/factories/PendleERC4626SCY__factory.ts +1 -1
  308. package/typechain-types/factories/PendleEulerSCY__factory.ts +10 -1
  309. package/typechain-types/factories/PendleGaugeControllerBaseUpg__factory.ts +65 -3
  310. package/typechain-types/factories/PendleGaugeControllerMainchainUpg__factory.ts +73 -13
  311. package/typechain-types/factories/PendleGaugeControllerSidechainUpg__factory.ts +79 -23
  312. package/typechain-types/factories/PendleMarketFactory__factory.ts +84 -86
  313. package/typechain-types/factories/PendleMarket__factory.ts +131 -37
  314. package/typechain-types/factories/PendlePrincipalToken__factory.ts +1 -1
  315. package/typechain-types/factories/PendleQiSAvaxSCY__factory.ts +1 -1
  316. package/typechain-types/factories/PendleQiTokenSCY__factory.ts +1 -1
  317. package/typechain-types/factories/PendleRouter__factory.ts +141 -22
  318. package/typechain-types/factories/PendleSAvaxSCY__factory.ts +1 -1
  319. package/typechain-types/factories/PendleSJoeSCY__factory.ts +1 -1
  320. package/typechain-types/factories/PendleStargateSCY__factory.ts +1 -1
  321. package/typechain-types/factories/PendleVotingControllerUpg__factory.ts +203 -129
  322. package/typechain-types/factories/PendleWstEthSCY__factory.ts +1 -1
  323. package/typechain-types/factories/PendleYearnVaultSCY__factory.ts +1 -1
  324. package/typechain-types/factories/PendleYieldContractFactory__factory.ts +97 -72
  325. package/typechain-types/factories/PendleYieldToken__factory.ts +1 -1
  326. package/typechain-types/factories/RouterStatic__factory.ts +233 -39
  327. package/typechain-types/factories/VotingControllerStorageUpg__factory.ts +126 -72
  328. package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +93 -41
  329. package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +90 -17
  330. package/typechain-types/factories/VotingEscrowTokenBase__factory.ts +14 -1
  331. package/typechain-types/hardhat.d.ts +162 -0
  332. package/typechain-types/index.ts +36 -0
  333. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol/PendleYearnVaultSCY.dbg.json +0 -4
  334. package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.dbg.json +0 -4
  335. package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.json +0 -1801
  336. package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.dbg.json +0 -4
  337. package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.json +0 -447
  338. package/build/artifacts/contracts/core/actions/base/ActionSCYAndPTBase.sol/ActionSCYAndPTBase.dbg.json +0 -4
  339. package/build/artifacts/contracts/core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.dbg.json +0 -4
  340. package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.dbg.json +0 -4
  341. package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.json +0 -24
  342. package/build/artifacts/contracts/interfaces/IPActionCore.sol/IPActionCore.dbg.json +0 -4
  343. package/build/artifacts/contracts/interfaces/IPActionYT.sol/IPActionYT.dbg.json +0 -4
  344. package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.dbg.json +0 -4
  345. package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.json +0 -874
  346. package/contracts/core/actions/ActionCore.sol +0 -382
  347. package/contracts/core/actions/ActionYT.sol +0 -93
  348. package/contracts/core/actions/base/ActionSCYAndPTBase.sol +0 -303
  349. package/contracts/interfaces/IPActionCore.sol +0 -306
  350. package/contracts/interfaces/IPRouterStatic.sol +0 -152
  351. package/deployments/43113-markets/benqi-market-599408.json +0 -7
  352. package/deployments/43113-markets/benqi-market-93bbf0.json +0 -7
  353. package/deployments/43113-markets/benqi-market-95E744.json +0 -7
  354. package/deployments/43113-markets/benqi-market-D91a3F.json +0 -7
  355. package/deployments/80001-markets/benqi-market-007811.json +0 -7
  356. package/deployments/80001-markets/benqi-market-3fe528.json +0 -7
  357. package/typechain-types/FeeDistributorAbstract.ts +0 -164
  358. package/typechain-types/IPVotingControllerStorage.ts +0 -169
  359. package/typechain-types/factories/FeeDistributorAbstract__factory.ts +0 -90
  360. package/typechain-types/factories/IPVotingControllerStorage__factory.ts +0 -107
@@ -0,0 +1,214 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity 0.8.15;
3
+
4
+ /// Adapted from UniswapV3's Oracle
5
+
6
+ library OracleLib {
7
+ struct Observation {
8
+ uint32 blockTimestamp;
9
+ uint216 lnImpliedRateCumulative;
10
+ bool initialized;
11
+ // 1 SLOT = 256 bits
12
+ }
13
+
14
+ function transform(
15
+ Observation memory last,
16
+ uint32 blockTimestamp,
17
+ uint96 lnImpliedRate
18
+ ) public pure returns (Observation memory) {
19
+ return
20
+ Observation({
21
+ blockTimestamp: blockTimestamp,
22
+ lnImpliedRateCumulative: last.lnImpliedRateCumulative +
23
+ uint216(lnImpliedRate) *
24
+ (blockTimestamp - last.blockTimestamp),
25
+ initialized: true
26
+ });
27
+ }
28
+
29
+ function initialize(Observation[65535] storage self, uint32 time)
30
+ public
31
+ returns (uint16 cardinality, uint16 cardinalityNext)
32
+ {
33
+ self[0] = Observation({
34
+ blockTimestamp: time,
35
+ lnImpliedRateCumulative: 0,
36
+ initialized: true
37
+ });
38
+ return (1, 1);
39
+ }
40
+
41
+ function write(
42
+ Observation[65535] storage self,
43
+ uint16 index,
44
+ uint32 blockTimestamp,
45
+ uint96 lnImpliedRate,
46
+ uint16 cardinality,
47
+ uint16 cardinalityNext
48
+ ) public returns (uint16 indexUpdated, uint16 cardinalityUpdated) {
49
+ Observation memory last = self[index];
50
+
51
+ // early return if we've already written an observation this block
52
+ if (last.blockTimestamp == blockTimestamp) return (index, cardinality);
53
+
54
+ // if the conditions are right, we can bump the cardinality
55
+ if (cardinalityNext > cardinality && index == (cardinality - 1)) {
56
+ cardinalityUpdated = cardinalityNext;
57
+ } else {
58
+ cardinalityUpdated = cardinality;
59
+ }
60
+
61
+ indexUpdated = (index + 1) % cardinalityUpdated;
62
+ self[indexUpdated] = transform(last, blockTimestamp, lnImpliedRate);
63
+ }
64
+
65
+ function grow(
66
+ Observation[65535] storage self,
67
+ uint16 current,
68
+ uint16 next
69
+ ) public returns (uint16) {
70
+ require(current != 0, "uninitialized");
71
+ // no-op if the passed next value isn't greater than the current next value
72
+ if (next <= current) return current;
73
+ // store in each slot to prevent fresh SSTOREs in swaps
74
+ // this data will not be used because the initialized boolean is still false
75
+ for (uint16 i = current; i != next; ) {
76
+ self[i].blockTimestamp = 1;
77
+ unchecked {
78
+ ++i;
79
+ }
80
+ }
81
+ return next;
82
+ }
83
+
84
+ function binarySearch(
85
+ Observation[65535] storage self,
86
+ uint32 target,
87
+ uint16 index,
88
+ uint16 cardinality
89
+ ) public view returns (Observation memory beforeOrAt, Observation memory atOrAfter) {
90
+ uint256 l = (index + 1) % cardinality; // oldest observation
91
+ uint256 r = l + cardinality - 1; // newest observation
92
+ uint256 i;
93
+ while (true) {
94
+ i = (l + r) / 2;
95
+
96
+ beforeOrAt = self[i % cardinality];
97
+
98
+ // we've landed on an uninitialized observation, keep searching higher (more recently)
99
+ if (!beforeOrAt.initialized) {
100
+ l = i + 1;
101
+ continue;
102
+ }
103
+
104
+ atOrAfter = self[(i + 1) % cardinality];
105
+
106
+ bool targetAtOrAfter = beforeOrAt.blockTimestamp <= target;
107
+
108
+ // check if we've found the answer!
109
+ if (targetAtOrAfter && target <= atOrAfter.blockTimestamp) break;
110
+
111
+ if (!targetAtOrAfter) r = i - 1;
112
+ else l = i + 1;
113
+ }
114
+ }
115
+
116
+ function getSurroundingObservations(
117
+ Observation[65535] storage self,
118
+ uint32 target,
119
+ uint96 lnImpliedRate,
120
+ uint16 index,
121
+ uint16 cardinality
122
+ ) public view returns (Observation memory beforeOrAt, Observation memory atOrAfter) {
123
+ // optimistically set before to the newest observation
124
+ beforeOrAt = self[index];
125
+
126
+ // if the target is chronologically at or after the newest observation, we can early return
127
+ if (beforeOrAt.blockTimestamp <= target) {
128
+ if (beforeOrAt.blockTimestamp == target) {
129
+ // if newest observation equals target, we're in the same block, so we can ignore atOrAfter
130
+ return (beforeOrAt, atOrAfter);
131
+ } else {
132
+ // otherwise, we need to transform
133
+ return (beforeOrAt, transform(beforeOrAt, target, lnImpliedRate));
134
+ }
135
+ }
136
+
137
+ // now, set beforeOrAt to the oldest observation
138
+ beforeOrAt = self[(index + 1) % cardinality];
139
+ if (!beforeOrAt.initialized) beforeOrAt = self[0];
140
+
141
+ // ensure that the target is chronologically at or after the oldest observation
142
+ require(beforeOrAt.blockTimestamp <= target, "target too old for observation");
143
+
144
+ // if we've reached this point, we have to binary search
145
+ return binarySearch(self, target, index, cardinality);
146
+ }
147
+
148
+ function observeSingle(
149
+ Observation[65535] storage self,
150
+ uint32 time,
151
+ uint32 secondsAgo,
152
+ uint96 lnImpliedRate,
153
+ uint16 index,
154
+ uint16 cardinality
155
+ ) public view returns (uint216 lnImpliedRateCumulative) {
156
+ if (secondsAgo == 0) {
157
+ Observation memory last = self[index];
158
+ if (last.blockTimestamp != time) {
159
+ return transform(last, time, lnImpliedRate).lnImpliedRateCumulative;
160
+ }
161
+ return last.lnImpliedRateCumulative;
162
+ }
163
+
164
+ uint32 target = time - secondsAgo;
165
+
166
+ (Observation memory beforeOrAt, Observation memory atOrAfter) = getSurroundingObservations(
167
+ self,
168
+ target,
169
+ lnImpliedRate,
170
+ index,
171
+ cardinality
172
+ );
173
+
174
+ if (target == beforeOrAt.blockTimestamp) {
175
+ // we're at the left boundary
176
+ return beforeOrAt.lnImpliedRateCumulative;
177
+ } else if (target == atOrAfter.blockTimestamp) {
178
+ // we're at the right boundary
179
+ return atOrAfter.lnImpliedRateCumulative;
180
+ } else {
181
+ // we're in the middle
182
+ return (beforeOrAt.lnImpliedRateCumulative +
183
+ uint216(
184
+ (uint256(
185
+ atOrAfter.lnImpliedRateCumulative - beforeOrAt.lnImpliedRateCumulative
186
+ ) * (target - beforeOrAt.blockTimestamp)) /
187
+ (atOrAfter.blockTimestamp - beforeOrAt.blockTimestamp)
188
+ ));
189
+ }
190
+ }
191
+
192
+ function observe(
193
+ Observation[65535] storage self,
194
+ uint32 time,
195
+ uint32[] memory secondsAgos,
196
+ uint96 lnImpliedRate,
197
+ uint16 index,
198
+ uint16 cardinality
199
+ ) public view returns (uint216[] memory lnImpliedRateCumulative) {
200
+ require(cardinality != 0, "cardinality must be positive");
201
+
202
+ lnImpliedRateCumulative = new uint216[](secondsAgos.length);
203
+ for (uint256 i = 0; i < lnImpliedRateCumulative.length; ++i) {
204
+ lnImpliedRateCumulative[i] = observeSingle(
205
+ self,
206
+ time,
207
+ secondsAgos[i],
208
+ lnImpliedRate,
209
+ index,
210
+ cardinality
211
+ );
212
+ }
213
+ }
214
+ }
@@ -18,7 +18,7 @@ abstract contract RewardManagerAbstract is IRewardManager, TokenHelper {
18
18
  uint128 accrued;
19
19
  }
20
20
 
21
- // [token] => [user] => (index,accured)
21
+ // [token] => [user] => (index,accrued)
22
22
  mapping(address => mapping(address => UserReward)) public userReward;
23
23
 
24
24
  function _updateAndDistributeRewards(address user) internal virtual {
@@ -3,7 +3,6 @@ pragma solidity 0.8.15;
3
3
 
4
4
  import "./Math.sol";
5
5
  import "./MarketMathCore.sol";
6
- import "./MarketMathCore.sol";
7
6
 
8
7
  struct ApproxParams {
9
8
  uint256 guessMin;
@@ -132,7 +131,7 @@ library MarketApproxLib {
132
131
  }
133
132
 
134
133
  struct VarsSwapExactScyForYt {
135
- uint256 ptInGuess;
134
+ uint256 netPtInGuess;
136
135
  int256 assetToAccount;
137
136
  int256 assetToReserve;
138
137
  uint256 netAssetOut;
@@ -184,34 +183,37 @@ library MarketApproxLib {
184
183
  VarsSwapExactScyForYt memory vars;
185
184
  MarketPreCompute memory comp = market.getMarketPreCompute(index, blockTime);
186
185
 
186
+ vars.maxAssetIn = index.scyToAsset(maxScyIn);
187
+
187
188
  if (approx.guessMax == type(uint256).max) approx.guessMax = calcMaxPtIn(comp.totalAsset);
188
189
 
189
- vars.maxAssetIn = index.scyToAsset(maxScyIn);
190
+ // at minimum we will flashswap maxAssetIn since we have enough SCY to payback the PT loan
191
+ if (approx.guessMin == 0) approx.guessMin = vars.maxAssetIn;
190
192
 
191
193
  for (uint256 iter = 0; iter < approx.maxIteration; ) {
192
194
  // ytOutGuess = ptInGuess
193
- vars.ptInGuess = getCurrentGuess(iter, approx);
195
+ vars.netPtInGuess = getCurrentGuess(iter, approx);
194
196
 
195
197
  (vars.isSlopeNonNeg, vars.largestGoodSlope) = updateSlope(
196
198
  comp,
197
199
  market.totalPt,
198
- vars.ptInGuess,
200
+ vars.netPtInGuess,
199
201
  vars.largestGoodSlope
200
202
  );
201
203
  if (!vars.isSlopeNonNeg) {
202
- approx.guessMax = vars.ptInGuess - 1;
204
+ approx.guessMax = vars.netPtInGuess - 1;
203
205
  continue;
204
206
  }
205
207
 
206
208
  (vars.assetToAccount, vars.assetToReserve) = market.calcTrade(
207
209
  comp,
208
- vars.ptInGuess.neg()
210
+ vars.netPtInGuess.neg()
209
211
  );
210
212
  vars.netAssetOut = vars.assetToAccount.Uint();
211
- vars.amountAssetNeedMore = vars.ptInGuess - vars.netAssetOut;
213
+ vars.amountAssetNeedMore = vars.netPtInGuess - vars.netAssetOut;
212
214
 
213
215
  if (vars.amountAssetNeedMore <= vars.maxAssetIn) {
214
- approx.guessMin = vars.ptInGuess;
216
+ approx.guessMin = vars.netPtInGuess;
215
217
  bool isAnswerAccepted = Math.isASmallerApproxB(
216
218
  vars.amountAssetNeedMore,
217
219
  vars.maxAssetIn,
@@ -219,12 +221,12 @@ library MarketApproxLib {
219
221
  );
220
222
  if (isAnswerAccepted)
221
223
  return (
222
- vars.ptInGuess,
224
+ vars.netPtInGuess,
223
225
  index.assetToScy(vars.amountAssetNeedMore),
224
226
  index.assetToScy(vars.assetToReserve.Uint())
225
227
  );
226
228
  } else {
227
- approx.guessMax = vars.ptInGuess - 1;
229
+ approx.guessMax = vars.netPtInGuess - 1;
228
230
  }
229
231
 
230
232
  unchecked {
@@ -368,7 +370,7 @@ library MarketApproxLib {
368
370
  approx.guessMax = calcMaxPtOut(market.totalPt, comp);
369
371
  }
370
372
 
371
- vars.minAssetOut = index.scyToAsset(minScyOut);
373
+ vars.minAssetOut = index.scyToAssetUp(minScyOut);
372
374
 
373
375
  for (uint256 iter = 0; iter < approx.maxIteration; ) {
374
376
  // ytInGuess = ptOutGuess
@@ -405,16 +407,227 @@ library MarketApproxLib {
405
407
  revert("approx fail");
406
408
  }
407
409
 
410
+ struct VarsSwapPtToAddLiquidity {
411
+ uint256 netPtInGuess;
412
+ int256 assetToAccount;
413
+ int256 assetToReserve;
414
+ uint256 netAssetOut;
415
+ uint256 netPtRemaining;
416
+ uint256 newTotalPt;
417
+ uint256 newTotalAsset;
418
+ uint256 largestGoodSlope;
419
+ uint256 assetNumerator;
420
+ uint256 ptNumerator;
421
+ bool isSlopeNonNeg;
422
+ }
423
+
424
+ function approxSwapPtToAddLiquidity(
425
+ MarketState memory market,
426
+ PYIndex index,
427
+ uint256 netPtAdded,
428
+ uint256 blockTime,
429
+ ApproxParams memory approx
430
+ )
431
+ internal
432
+ pure
433
+ returns (
434
+ uint256, /*netPtIn*/
435
+ uint256, /*netScyOut*/
436
+ uint256 /*netScyToReserve*/
437
+ )
438
+ {
439
+ /*
440
+ The algorithm is essentially to:
441
+ 1. Binary search netPtIn (therefore netScyOut)
442
+ 2. Swap netPtIn for netScyOut
443
+ 3. Use (netPtAdded - netPtIn) and netScyOut to mint LP
444
+ 4. If (netPtAdded - netPtIn) / netScyOut ratio is close enough to the market's PT/SCY ratio
445
+ => answer found
446
+
447
+ Note that market maintains PT/SCY ratio, but here PT/asset is used instead
448
+ */
449
+
450
+ require(market.totalLp != 0, "no existing lp");
451
+
452
+ VarsSwapPtToAddLiquidity memory vars;
453
+ MarketPreCompute memory comp = market.getMarketPreCompute(index, blockTime);
454
+
455
+ if (approx.guessMax == type(uint256).max) {
456
+ // ensures that netPtIn is always valid and not greater than netPtAdded
457
+ approx.guessMax = Math.min(calcMaxPtIn(comp.totalAsset), netPtAdded);
458
+ }
459
+
460
+ require(isValidApproxParams(approx), "invalid approx");
461
+
462
+ for (uint256 iter = 0; iter < approx.maxIteration; ) {
463
+ vars.netPtInGuess = getCurrentGuess(iter, approx);
464
+
465
+ (vars.isSlopeNonNeg, vars.largestGoodSlope) = updateSlope(
466
+ comp,
467
+ market.totalPt,
468
+ vars.netPtInGuess,
469
+ vars.largestGoodSlope
470
+ );
471
+ if (!vars.isSlopeNonNeg) {
472
+ approx.guessMax = vars.netPtInGuess;
473
+ continue;
474
+ }
475
+
476
+ (vars.assetToAccount, vars.assetToReserve) = market.calcTrade(
477
+ comp,
478
+ vars.netPtInGuess.neg()
479
+ );
480
+
481
+ vars.netAssetOut = vars.assetToAccount.Uint();
482
+ vars.netPtRemaining = netPtAdded - vars.netPtInGuess;
483
+ vars.newTotalPt = market.totalPt.Uint() + vars.netPtInGuess;
484
+ vars.newTotalAsset = (comp.totalAsset - vars.assetToAccount - vars.assetToReserve)
485
+ .Uint();
486
+
487
+ // it is desired that
488
+ // netAssetOut / newTotalAsset = netPtRemaining / newTotalPt
489
+ // which is equivalent to
490
+ // netAssetOut * newTotalPt = netPtRemaining * newTotalAsset
491
+
492
+ vars.assetNumerator = vars.netAssetOut * vars.newTotalPt;
493
+ vars.ptNumerator = vars.netPtRemaining * vars.newTotalAsset;
494
+
495
+ if (Math.isAApproxB(vars.assetNumerator, vars.ptNumerator, approx.eps)) {
496
+ return (
497
+ vars.netPtInGuess,
498
+ index.assetToScy(vars.netAssetOut),
499
+ index.assetToScy(vars.assetToReserve.Uint())
500
+ );
501
+ }
502
+
503
+ if (vars.assetNumerator <= vars.ptNumerator) {
504
+ // needs more asset --> swap more PT
505
+ approx.guessMin = vars.netPtInGuess + 1;
506
+ } else {
507
+ // needs less asset --> swap less PT
508
+ approx.guessMax = vars.netPtInGuess - 1;
509
+ }
510
+
511
+ unchecked {
512
+ ++iter;
513
+ }
514
+ }
515
+ revert("approx fail");
516
+ }
517
+
518
+ struct VarsSwapScyToAddLiquidity {
519
+ uint256 netAssetAdded;
520
+ uint256 ptOutGuess;
521
+ int256 assetToAccount;
522
+ int256 assetToReserve;
523
+ uint256 netAssetIn;
524
+ uint256 netAssetRemaining;
525
+ uint256 newTotalPt;
526
+ uint256 newTotalAsset;
527
+ uint256 ptNumerator;
528
+ uint256 assetNumerator;
529
+ }
530
+
531
+ function approxSwapScyToAddLiquidity(
532
+ MarketState memory market,
533
+ PYIndex index,
534
+ uint256 netScyAdded,
535
+ uint256 blockTime,
536
+ ApproxParams memory approx
537
+ )
538
+ internal
539
+ pure
540
+ returns (
541
+ uint256, /*netPtOut*/
542
+ uint256, /*netScyIn*/
543
+ uint256 /*netScyToReserve*/
544
+ )
545
+ {
546
+ /*
547
+ The algorithm is essentially to:
548
+ 1. Binary search netPtOut (therefore netScyIn)
549
+ 2. Swap netScyIn for netPtOut
550
+ 3. Use netPtOut and (netScyAdded - netScyIn) to mint LP
551
+ 4. If netPtOut / (netScyAdded - netScyIn) ratio is close enough to the market's PT/SCY ratio
552
+ => answer found
553
+
554
+ Note that market maintains PT/SCY ratio, but here PT/asset is used instead
555
+ */
556
+ require(market.totalLp != 0, "no existing lp");
557
+
558
+ VarsSwapScyToAddLiquidity memory vars;
559
+ MarketPreCompute memory comp = market.getMarketPreCompute(index, blockTime);
560
+ if (approx.guessMax == type(uint256).max) {
561
+ approx.guessMax = calcMaxPtOut(market.totalPt, comp);
562
+ }
563
+
564
+ require(isValidApproxParams(approx), "invalid approx");
565
+
566
+ vars.netAssetAdded = index.scyToAsset(netScyAdded);
567
+
568
+ for (uint256 iter = 0; iter < approx.maxIteration; ) {
569
+ vars.ptOutGuess = getCurrentGuess(iter, approx);
570
+ (vars.assetToAccount, vars.assetToReserve) = market.calcTrade(
571
+ comp,
572
+ vars.ptOutGuess.Int()
573
+ );
574
+
575
+ vars.netAssetIn = vars.assetToAccount.abs();
576
+
577
+ if (vars.netAssetIn > vars.netAssetAdded) {
578
+ approx.guessMax = vars.ptOutGuess - 1;
579
+ unchecked {
580
+ ++iter;
581
+ }
582
+ continue;
583
+ }
584
+
585
+ vars.netAssetRemaining = vars.netAssetAdded - vars.netAssetIn;
586
+ vars.newTotalPt = market.totalPt.Uint() - vars.ptOutGuess;
587
+ vars.newTotalAsset = (comp.totalAsset - vars.assetToAccount - vars.assetToReserve)
588
+ .Uint();
589
+
590
+ // it is desired that
591
+ // ptOutGuess / newTotalPt = netAssetRemaining / newTotalAsset
592
+ // which is equivalent to
593
+ // ptOutGuess * newTotalAsset = netAssetRemaining * newTotalPt
594
+
595
+ vars.ptNumerator = vars.ptOutGuess * vars.newTotalAsset;
596
+ vars.assetNumerator = vars.netAssetRemaining * vars.newTotalPt;
597
+
598
+ if (Math.isAApproxB(vars.ptNumerator, vars.assetNumerator, approx.eps)) {
599
+ return (
600
+ vars.ptOutGuess,
601
+ index.assetToScy(vars.netAssetIn),
602
+ index.assetToScy(vars.assetToReserve.Uint())
603
+ );
604
+ }
605
+
606
+ if (vars.ptNumerator <= vars.assetNumerator) {
607
+ // needs more PT
608
+ approx.guessMin = vars.ptOutGuess + 1;
609
+ } else {
610
+ // needs less PT
611
+ approx.guessMax = vars.ptOutGuess - 1;
612
+ }
613
+
614
+ unchecked {
615
+ ++iter;
616
+ }
617
+ }
618
+ revert("approx fail");
619
+ }
620
+
408
621
  function updateSlope(
409
622
  MarketPreCompute memory comp,
410
623
  int256 totalPt,
411
624
  uint256 ptInGuess,
412
625
  uint256 largestGoodSlope
413
- ) internal pure returns (bool isSlopeNonNeg, uint256 newLargestGoodSlop) {
626
+ ) internal pure returns (bool isSlopeNonNeg, uint256 newLargestGoodSlope) {
414
627
  if (ptInGuess <= largestGoodSlope) {
415
628
  return (true, largestGoodSlope);
416
629
  }
417
- // it's not guaranteed that the current slop is good
630
+ // it's not guaranteed that the current slope is good
418
631
  // we therefore have to recalculate the slope
419
632
  int256 slope = slopeFactor(totalPt, ptInGuess.neg(), comp);
420
633
  if (slope >= 0) return (true, ptInGuess);
@@ -10,17 +10,14 @@ struct MarketState {
10
10
  int256 totalPt;
11
11
  int256 totalScy;
12
12
  int256 totalLp;
13
- uint256 oracleRate;
14
13
  address treasury;
15
14
  /// immutable variables ///
16
15
  int256 scalarRoot;
17
16
  uint256 lnFeeRateRoot;
18
- uint256 rateOracleTimeWindow;
19
17
  uint256 expiry;
20
18
  uint256 reserveFeePercent; // base 100
21
19
  /// last trade data ///
22
20
  uint256 lastLnImpliedRate;
23
- uint256 lastTradeTime;
24
21
  }
25
22
 
26
23
  // params that are expensive to compute, therefore we pre-compute them
@@ -317,8 +314,6 @@ library MarketMathCore {
317
314
  ) internal pure {
318
315
  uint256 timeToExpiry = market.expiry - blockTime;
319
316
 
320
- market.lastTradeTime = blockTime;
321
-
322
317
  market.totalPt = market.totalPt.subNoNeg(netPtToAccount);
323
318
  market.totalScy = market.totalScy.subNoNeg(netScyToAccount + netScyToReserve);
324
319
 
@@ -448,32 +443,4 @@ library MarketMathCore {
448
443
  timeToExpiry
449
444
  );
450
445
  }
451
-
452
- function getNewRateOracle(MarketState memory market, uint256 blockTime)
453
- internal
454
- pure
455
- returns (uint256)
456
- {
457
- // This can occur when using a view function get to a market state in the past
458
- if (market.lastTradeTime > blockTime) {
459
- return market.lastLnImpliedRate;
460
- }
461
-
462
- uint256 timeDiff = blockTime - market.lastTradeTime;
463
- if (timeDiff > market.rateOracleTimeWindow) {
464
- // If past the time window just return the market.lastLnImpliedRate
465
- return market.lastLnImpliedRate;
466
- }
467
-
468
- // (currentTs - previousTs) / timeWindow
469
- uint256 lastTradeWeight = timeDiff.divDown(market.rateOracleTimeWindow);
470
-
471
- // 1 - (currentTs - previousTs) / timeWindow
472
- uint256 oracleWeight = Math.ONE - lastTradeWeight;
473
-
474
- uint256 newOracleRate = market.lastLnImpliedRate.mulDown(lastTradeWeight) +
475
- market.oracleRate.mulDown(oracleWeight);
476
-
477
- return newOracleRate;
478
- }
479
446
  }