@pendle/core-v2 0.6.8 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (519) hide show
  1. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.dbg.json +4 -0
  2. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.json +751 -0
  3. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/AaveV3/WadRayMath.sol/WadRayMath.dbg.json +4 -0
  4. package/build/artifacts/contracts/{core/PendleSCYImpl → SuperComposableYield/SCY-implementations}/AaveV3/WadRayMath.sol/WadRayMath.json +3 -3
  5. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.dbg.json +4 -0
  6. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol/PendleQiTokenHelper.json +27 -0
  7. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.dbg.json +4 -0
  8. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol/PendleQiTokenSCY.json +761 -0
  9. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleBtrflySCY.sol/PendleBtrflyScy.dbg.json +4 -0
  10. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleBtrflySCY.sol/PendleBtrflyScy.json +635 -0
  11. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.dbg.json +4 -0
  12. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol/PendleERC4626SCY.json +609 -0
  13. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleJoeLpSCY.sol/PendleJoeLpSCY.dbg.json +4 -0
  14. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleJoeLpSCY.sol/PendleJoeLpSCY.json +653 -0
  15. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.dbg.json +4 -0
  16. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol/PendleWstEthSCY.json +622 -0
  17. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol/PendleYearnVaultSCY.dbg.json +4 -0
  18. package/build/artifacts/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol/PendleYearnVaultSCY.json +622 -0
  19. package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBase.sol/SCYBase.dbg.json +4 -0
  20. package/build/artifacts/contracts/SuperComposableYield/{ISuperComposableYield.sol/ISuperComposableYield.json → base-implementations/SCYBase.sol/SCYBase.json} +221 -141
  21. package/build/artifacts/contracts/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol/SCYBaseWithRewards.dbg.json +4 -0
  22. package/build/artifacts/contracts/SuperComposableYield/{implementations → base-implementations}/SCYBaseWithRewards.sol/SCYBaseWithRewards.json +247 -223
  23. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiver.sol/CelerReceiver.dbg.json +4 -0
  24. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiver.sol/CelerReceiver.json +128 -0
  25. package/build/artifacts/contracts/core/LiquidityMining/CelerAbstracts/CelerSender.sol/CelerSender.dbg.json +4 -0
  26. package/build/artifacts/contracts/{SuperComposableYield/implementations/IRewardManager.sol/IRewardManager.json → core/LiquidityMining/CelerAbstracts/CelerSender.sol/CelerSender.json} +29 -33
  27. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeController.sol/PendleGaugeController.dbg.json +4 -0
  28. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeController.sol/PendleGaugeController.json +193 -0
  29. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchain.sol/PendleGaugeControllerMainchain.dbg.json +4 -0
  30. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchain.sol/PendleGaugeControllerMainchain.json +255 -0
  31. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechain.sol/PendleGaugeControllerSidechain.dbg.json +4 -0
  32. package/build/artifacts/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechain.sol/PendleGaugeControllerSidechain.json +318 -0
  33. package/build/artifacts/contracts/core/LiquidityMining/PendleGauge.sol/PendleGauge.dbg.json +4 -0
  34. package/build/artifacts/contracts/{interfaces/IPVotingEscrow.sol/IVotingEscrowPendle.json → core/LiquidityMining/PendleGauge.sol/PendleGauge.json} +57 -65
  35. package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingController.sol/PendleVotingController.dbg.json +4 -0
  36. package/build/artifacts/contracts/core/LiquidityMining/VotingController/PendleVotingController.sol/PendleVotingController.json +707 -0
  37. package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorage.sol/VotingControllerStorage.dbg.json +4 -0
  38. package/build/artifacts/contracts/core/LiquidityMining/VotingController/VotingControllerStorage.sol/VotingControllerStorage.json +342 -0
  39. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.dbg.json +4 -0
  40. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol/VotingEscrowPendleMainchain.json +547 -0
  41. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.dbg.json +4 -0
  42. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol/VotingEscrowPendleSidechain.json +353 -0
  43. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowToken.sol/VotingEscrowToken.dbg.json +4 -0
  44. package/build/artifacts/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowToken.sol/VotingEscrowToken.json +138 -0
  45. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.dbg.json +4 -0
  46. package/build/artifacts/contracts/core/Market/PendleMarket.sol/PendleMarket.json +922 -0
  47. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +4 -0
  48. package/build/artifacts/contracts/core/Market/PendleMarketFactory.sol/PendleMarketFactory.json +345 -0
  49. package/build/artifacts/contracts/core/PendleERC20.sol/PendleERC20.dbg.json +4 -0
  50. package/build/artifacts/contracts/core/PendleERC20.sol/PendleERC20.json +254 -0
  51. package/build/artifacts/contracts/core/PendleERC20Permit.sol/PendleERC20Permit.dbg.json +4 -0
  52. package/build/artifacts/contracts/core/PendleERC20Permit.sol/PendleERC20Permit.json +329 -0
  53. package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.dbg.json +1 -1
  54. package/build/artifacts/contracts/core/PendleRouter.sol/PendleRouter.json +2 -20
  55. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +4 -0
  56. package/build/artifacts/contracts/core/YieldContracts/PendlePrincipalToken.sol/PendlePrincipalToken.json +445 -0
  57. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +4 -0
  58. package/build/artifacts/contracts/core/YieldContracts/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +344 -0
  59. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.dbg.json +4 -0
  60. package/build/artifacts/contracts/core/YieldContracts/PendleYieldToken.sol/PendleYieldToken.json +750 -0
  61. package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.dbg.json +1 -1
  62. package/build/artifacts/contracts/core/actions/ActionCallback.sol/ActionCallback.json +2 -2
  63. package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.dbg.json +1 -1
  64. package/build/artifacts/contracts/core/actions/ActionCore.sol/ActionCore.json +123 -77
  65. package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.dbg.json +1 -1
  66. package/build/artifacts/contracts/core/actions/ActionYT.sol/ActionYT.json +39 -42
  67. package/build/artifacts/contracts/core/actions/base/ActionSCYAndPTBase.sol/ActionSCYAndPTBase.dbg.json +1 -1
  68. package/build/artifacts/contracts/core/actions/base/ActionSCYAndPTBase.sol/ActionSCYAndPTBase.json +163 -1
  69. package/build/artifacts/contracts/core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.dbg.json +1 -1
  70. package/build/artifacts/contracts/core/actions/base/ActionSCYAndPYBase.sol/ActionSCYAndPYBase.json +0 -13
  71. package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.dbg.json +1 -1
  72. package/build/artifacts/contracts/core/actions/base/ActionSCYAndYTBase.sol/ActionSCYAndYTBase.json +1 -14
  73. package/build/artifacts/contracts/core/actions/base/CallbackHelper.sol/CallbackHelper.dbg.json +4 -0
  74. package/build/artifacts/contracts/core/actions/base/CallbackHelper.sol/CallbackHelper.json +10 -0
  75. package/build/artifacts/contracts/interfaces/IAToken.sol/IAToken.dbg.json +1 -1
  76. package/build/artifacts/contracts/interfaces/IAToken.sol/IAToken.json +39 -0
  77. package/build/artifacts/contracts/interfaces/IAavePool.sol/IAavePool.dbg.json +1 -1
  78. package/build/artifacts/contracts/interfaces/IAaveRewardsController.sol/IAaveRewardsController.dbg.json +1 -1
  79. package/build/artifacts/contracts/interfaces/IBenQiComptroller.sol/IBenQiComptroller.dbg.json +1 -1
  80. package/build/artifacts/contracts/interfaces/IBenQiComptroller.sol/IBenQiComptroller.json +13 -0
  81. package/build/artifacts/contracts/interfaces/IBenQiInterestRateModel.sol/IBenQiInterestRateModel.dbg.json +4 -0
  82. package/build/artifacts/contracts/interfaces/IBenQiInterestRateModel.sol/IBenQiInterestRateModel.json +74 -0
  83. package/build/artifacts/contracts/interfaces/ICelerMessageBus.sol/ICelerMessageBus.dbg.json +4 -0
  84. package/build/artifacts/contracts/interfaces/{IVePToken.sol/IVePToken.json → ICelerMessageBus.sol/ICelerMessageBus.json} +21 -11
  85. package/build/artifacts/contracts/interfaces/ICelerMessageReceiverApp.sol/ICelerMessageReceiverApp.dbg.json +4 -0
  86. package/build/artifacts/contracts/interfaces/ICelerMessageReceiverApp.sol/ICelerMessageReceiverApp.json +45 -0
  87. package/build/artifacts/contracts/interfaces/IERC4626.sol/IERC4626.dbg.json +4 -0
  88. package/build/artifacts/contracts/{core/PendleBaseToken.sol/PendleBaseToken.json → interfaces/IERC4626.sol/IERC4626.json} +53 -68
  89. package/build/artifacts/contracts/interfaces/IJoePair.sol/IJoePair.dbg.json +1 -1
  90. package/build/artifacts/contracts/interfaces/IJoeRouter01.sol/IJoeRouter01.dbg.json +1 -1
  91. package/build/artifacts/contracts/interfaces/IJoeRouter02.sol/IJoeRouter02.dbg.json +4 -0
  92. package/build/artifacts/contracts/interfaces/IJoeRouter02.sol/IJoeRouter02.json +962 -0
  93. package/build/artifacts/contracts/interfaces/IPActionCore.sol/IPActionCore.dbg.json +1 -1
  94. package/build/artifacts/contracts/interfaces/IPActionCore.sol/IPActionCore.json +122 -58
  95. package/build/artifacts/contracts/interfaces/IPActionYT.sol/IPActionYT.dbg.json +1 -1
  96. package/build/artifacts/contracts/interfaces/IPActionYT.sol/IPActionYT.json +36 -21
  97. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.dbg.json +1 -1
  98. package/build/artifacts/contracts/interfaces/IPAllAction.sol/IPAllAction.json +116 -81
  99. package/build/artifacts/contracts/interfaces/IPGaugeController.sol/IPGaugeController.dbg.json +4 -0
  100. package/build/artifacts/contracts/interfaces/IPGaugeController.sol/IPGaugeController.json +109 -0
  101. package/build/artifacts/contracts/interfaces/IPGaugeControllerMainchain.sol/IPGaugeControllerMainchain.dbg.json +4 -0
  102. package/build/artifacts/contracts/interfaces/IPGaugeControllerMainchain.sol/IPGaugeControllerMainchain.json +132 -0
  103. package/build/artifacts/contracts/interfaces/IPGovernanceManager.sol/IPGovernanceManager.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 +35 -54
  106. package/build/artifacts/contracts/interfaces/IPMarketAddRemoveCallback.sol/IPMarketAddRemoveCallback.dbg.json +1 -1
  107. package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.dbg.json +1 -1
  108. package/build/artifacts/contracts/interfaces/IPMarketFactory.sol/IPMarketFactory.json +31 -0
  109. package/build/artifacts/contracts/interfaces/IPMarketSwapCallback.sol/IPMarketSwapCallback.dbg.json +1 -1
  110. package/build/artifacts/contracts/interfaces/IPPermissionsV2Upg.sol/IPermissionsV2Upg.dbg.json +1 -1
  111. package/build/artifacts/contracts/interfaces/IPPrincipalToken.sol/IPPrincipalToken.dbg.json +1 -1
  112. package/build/artifacts/contracts/interfaces/IPPrincipalToken.sol/IPPrincipalToken.json +5 -5
  113. package/build/artifacts/contracts/interfaces/IPRouterStatic.sol/IPRouterStatic.dbg.json +1 -1
  114. package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.dbg.json +4 -0
  115. package/build/artifacts/contracts/interfaces/IPVeToken.sol/IPVeToken.json +99 -0
  116. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.dbg.json +4 -0
  117. package/build/artifacts/contracts/interfaces/IPVotingController.sol/IPVotingController.json +167 -0
  118. package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IPVotingEscrow.dbg.json +4 -0
  119. package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IPVotingEscrow.json +148 -0
  120. package/build/artifacts/contracts/interfaces/IPYieldContractFactory.sol/IPYieldContractFactory.dbg.json +1 -1
  121. package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.dbg.json +1 -1
  122. package/build/artifacts/contracts/interfaces/IPYieldToken.sol/IPYieldToken.json +85 -83
  123. package/build/artifacts/contracts/interfaces/IQiAvax.sol/IQiAvax.dbg.json +4 -0
  124. package/build/artifacts/contracts/interfaces/{IPBaseToken.sol/IPBaseToken.json → IQiAvax.sol/IQiAvax.json} +106 -15
  125. package/build/artifacts/contracts/interfaces/IQiErc20.sol/IQiErc20.dbg.json +1 -1
  126. package/build/artifacts/contracts/interfaces/IQiErc20.sol/IQiErc20.json +117 -0
  127. package/build/artifacts/contracts/interfaces/IQiToken.sol/IQiToken.dbg.json +1 -1
  128. package/build/artifacts/contracts/interfaces/IQiToken.sol/IQiToken.json +117 -0
  129. package/build/artifacts/contracts/interfaces/IREDACTEDStaking.sol/IREDACTEDStaking.dbg.json +1 -1
  130. package/build/artifacts/contracts/interfaces/IRewardManager.sol/IRewardManager.dbg.json +4 -0
  131. package/build/artifacts/contracts/{periphery/PendleJoeSwapHelperUpg.sol/PendleJoeSwapHelperUpg.json → interfaces/IRewardManager.sol/IRewardManager.json} +12 -14
  132. package/build/artifacts/contracts/interfaces/ISuperComposableYield.sol/ISuperComposableYield.dbg.json +4 -0
  133. package/build/artifacts/contracts/{SuperComposableYield/implementations/SCYBase.sol/SCYBase.json → interfaces/ISuperComposableYield.sol/ISuperComposableYield.json} +183 -181
  134. package/build/artifacts/contracts/interfaces/IWETH.sol/IWETH.dbg.json +1 -1
  135. package/build/artifacts/contracts/interfaces/IWXBTRFLY.sol/IWXBTRFLY.dbg.json +1 -1
  136. package/build/artifacts/contracts/interfaces/IWXBTRFLY.sol/IWXBTRFLY.json +13 -0
  137. package/build/artifacts/contracts/interfaces/IWstETH.sol/IWstETH.dbg.json +1 -1
  138. package/build/artifacts/contracts/interfaces/IWstETH.sol/IWstETH.json +13 -0
  139. package/build/artifacts/contracts/interfaces/IYearnVault.sol/IYearnVault.dbg.json +1 -1
  140. package/build/artifacts/contracts/interfaces/IYearnVault.sol/IYearnVault.json +13 -0
  141. package/build/artifacts/contracts/libraries/RewardManager.sol/RewardManager.dbg.json +4 -0
  142. package/build/artifacts/contracts/{SuperComposableYield/implementations → libraries}/RewardManager.sol/RewardManager.json +44 -33
  143. package/build/artifacts/contracts/libraries/RewardManagerMini.sol/RewardManagerMini.dbg.json +4 -0
  144. package/build/artifacts/contracts/libraries/RewardManagerMini.sol/RewardManagerMini.json +101 -0
  145. package/build/artifacts/contracts/libraries/SCY/SCYIndex.sol/SCYIndexLib.dbg.json +4 -0
  146. package/build/artifacts/contracts/libraries/{SCYIndex.sol → SCY/SCYIndex.sol}/SCYIndexLib.json +3 -3
  147. package/build/artifacts/contracts/libraries/SCY/SCYUtils.sol/SCYUtils.dbg.json +4 -0
  148. package/build/artifacts/contracts/{SuperComposableYield → libraries/SCY}/SCYUtils.sol/SCYUtils.json +3 -3
  149. package/build/artifacts/contracts/libraries/VeBalanceLib.sol/VeBalanceLib.dbg.json +4 -0
  150. package/build/artifacts/contracts/libraries/{math/MarketMathAux.sol/MarketMathAux.json → VeBalanceLib.sol/VeBalanceLib.json} +4 -4
  151. package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.dbg.json +4 -0
  152. package/build/artifacts/contracts/libraries/helpers/ArrayLib.sol/ArrayLib.json +10 -0
  153. package/build/artifacts/contracts/libraries/helpers/ExpiryUtilsLib.sol/ExpiryUtils.dbg.json +1 -1
  154. package/build/artifacts/contracts/libraries/helpers/ExpiryUtilsLib.sol/ExpiryUtils.json +2 -2
  155. package/build/artifacts/contracts/libraries/helpers/MiniDeployer.sol/MiniDeployer.dbg.json +4 -0
  156. package/build/artifacts/contracts/libraries/helpers/MiniDeployer.sol/MiniDeployer.json +10 -0
  157. package/build/artifacts/contracts/libraries/helpers/MiniHelpers.sol/MiniHelpers.dbg.json +4 -0
  158. package/build/artifacts/contracts/libraries/helpers/MiniHelpers.sol/MiniHelpers.json +10 -0
  159. package/build/artifacts/contracts/libraries/helpers/TokenHelper.sol/TokenHelper.dbg.json +4 -0
  160. package/build/artifacts/contracts/{core/actions/base/ActionType.sol/ActionType.json → libraries/helpers/TokenHelper.sol/TokenHelper.json} +2 -2
  161. package/build/artifacts/contracts/libraries/math/LogExpMath.sol/LogExpMath.dbg.json +1 -1
  162. package/build/artifacts/contracts/libraries/math/LogExpMath.sol/LogExpMath.json +2 -2
  163. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxLib.dbg.json +1 -1
  164. package/build/artifacts/contracts/libraries/math/MarketApproxLib.sol/MarketApproxLib.json +2 -2
  165. package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.dbg.json +1 -1
  166. package/build/artifacts/contracts/libraries/math/MarketMathCore.sol/MarketMathCore.json +2 -2
  167. package/build/artifacts/contracts/libraries/math/Math.sol/Math.dbg.json +1 -1
  168. package/build/artifacts/contracts/libraries/math/Math.sol/Math.json +2 -2
  169. package/build/artifacts/contracts/libraries/math/WeekMath.sol/WeekMath.dbg.json +4 -0
  170. package/build/artifacts/contracts/libraries/math/WeekMath.sol/WeekMath.json +10 -0
  171. package/build/artifacts/contracts/libraries/solmate/Bytes32AddressLib.sol/Bytes32AddressLib.dbg.json +4 -0
  172. package/build/artifacts/contracts/libraries/solmate/Bytes32AddressLib.sol/Bytes32AddressLib.json +10 -0
  173. package/build/artifacts/contracts/libraries/solmate/LibRLP.sol/LibRLP.dbg.json +4 -0
  174. package/build/artifacts/contracts/libraries/solmate/LibRLP.sol/LibRLP.json +10 -0
  175. package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.dbg.json +4 -0
  176. package/build/artifacts/contracts/libraries/solmate/SSTORE2.sol/SSTORE2.json +10 -0
  177. package/build/artifacts/contracts/libraries/traderjoe/JoeLibrary.sol/JoeLibrary.dbg.json +4 -0
  178. package/build/artifacts/contracts/libraries/{JoeLibrary.sol → traderjoe/JoeLibrary.sol}/JoeLibrary.json +3 -3
  179. package/build/artifacts/contracts/libraries/traderjoe/PendleJoeSwapHelperUpg.sol/PendleJoeSwapHelperUpg.dbg.json +4 -0
  180. package/build/artifacts/contracts/libraries/traderjoe/PendleJoeSwapHelperUpg.sol/PendleJoeSwapHelperUpg.json +24 -0
  181. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.dbg.json +4 -0
  182. package/build/artifacts/contracts/offchain-helpers/RouterStatic.sol/RouterStatic.json +862 -0
  183. package/build/artifacts/contracts/periphery/PendleGovernanceManager.sol/PendleGovernanceManager.dbg.json +1 -1
  184. package/build/artifacts/contracts/periphery/PendleGovernanceManager.sol/PendleGovernanceManager.json +2 -2
  185. package/build/artifacts/contracts/periphery/PermissionsV2Upg.sol/PermissionsV2Upg.dbg.json +1 -1
  186. package/contracts/SuperComposableYield/SCY-implementations/AaveV3/PendleAaveV3SCY.sol +147 -0
  187. package/contracts/{core/PendleSCYImpl → SuperComposableYield/SCY-implementations}/AaveV3/WadRayMath.sol +1 -1
  188. package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenHelper.sol +74 -0
  189. package/contracts/SuperComposableYield/SCY-implementations/BenQi/PendleQiTokenSCY.sol +187 -0
  190. package/contracts/SuperComposableYield/SCY-implementations/PendleBtrflySCY.sol +123 -0
  191. package/contracts/SuperComposableYield/SCY-implementations/PendleERC4626SCY.sol +99 -0
  192. package/contracts/SuperComposableYield/SCY-implementations/PendleJoeLpSCY.sol +245 -0
  193. package/contracts/SuperComposableYield/SCY-implementations/PendleWstEthSCY.sol +107 -0
  194. package/contracts/SuperComposableYield/SCY-implementations/PendleYearnVaultScy.sol +120 -0
  195. package/contracts/SuperComposableYield/base-implementations/SCYBase.sol +197 -0
  196. package/contracts/SuperComposableYield/base-implementations/SCYBaseWithRewards.sol +131 -0
  197. package/contracts/core/LiquidityMining/CelerAbstracts/CelerReceiver.sol +47 -0
  198. package/contracts/core/LiquidityMining/CelerAbstracts/CelerSender.sol +52 -0
  199. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeController.sol +141 -0
  200. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerMainchain.sol +30 -0
  201. package/contracts/core/LiquidityMining/GaugeController/PendleGaugeControllerSidechain.sol +22 -0
  202. package/contracts/core/LiquidityMining/PendleGauge.sol +118 -0
  203. package/contracts/core/LiquidityMining/README.md +63 -0
  204. package/contracts/core/LiquidityMining/VotingController/PendleVotingController.sol +323 -0
  205. package/contracts/core/LiquidityMining/VotingController/VotingControllerStorage.sol +224 -0
  206. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleMainchain.sol +241 -0
  207. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowPendleSidechain.sol +73 -0
  208. package/contracts/core/LiquidityMining/VotingEscrow/VotingEscrowToken.sol +53 -0
  209. package/contracts/core/{PendleMarket.sol → Market/PendleMarket.sol} +139 -103
  210. package/contracts/core/{PendleMarketFactory.sol → Market/PendleMarketFactory.sol} +62 -19
  211. package/contracts/core/PendleERC20.sol +358 -0
  212. package/contracts/core/PendleERC20Permit.sol +84 -0
  213. package/contracts/core/PendleRouter.sol +6 -12
  214. package/contracts/core/YieldContracts/InterestManagerYT.sol +87 -0
  215. package/contracts/core/YieldContracts/PendlePrincipalToken.sol +52 -0
  216. package/contracts/core/{PendleYieldContractFactory.sol → YieldContracts/PendleYieldContractFactory.sol} +46 -25
  217. package/contracts/core/YieldContracts/PendleYieldToken.sol +340 -0
  218. package/contracts/core/actions/ActionCallback.sol +63 -43
  219. package/contracts/core/actions/ActionCore.sol +95 -78
  220. package/contracts/core/actions/ActionYT.sol +35 -86
  221. package/contracts/core/actions/base/ActionSCYAndPTBase.sol +133 -78
  222. package/contracts/core/actions/base/ActionSCYAndPYBase.sol +31 -46
  223. package/contracts/core/actions/base/ActionSCYAndYTBase.sol +127 -45
  224. package/contracts/core/actions/base/CallbackHelper.sol +81 -0
  225. package/contracts/interfaces/IAToken.sol +11 -1
  226. package/contracts/interfaces/IAavePool.sol +1 -1
  227. package/contracts/interfaces/IAaveRewardsController.sol +1 -1
  228. package/contracts/interfaces/IBenQiComptroller.sol +3 -1
  229. package/contracts/interfaces/IBenQiInterestRateModel.sol +16 -0
  230. package/contracts/interfaces/ICelerMessageBus.sol +28 -0
  231. package/contracts/interfaces/ICelerMessageReceiverApp.sol +25 -0
  232. package/contracts/interfaces/IERC4626.sol +39 -0
  233. package/contracts/interfaces/IJoeRouter01.sol +1 -1
  234. package/contracts/interfaces/IJoeRouter02.sol +52 -0
  235. package/contracts/interfaces/IPActionCore.sol +44 -27
  236. package/contracts/interfaces/IPActionYT.sol +12 -9
  237. package/contracts/interfaces/IPAllAction.sol +2 -3
  238. package/contracts/interfaces/IPGaugeController.sol +22 -0
  239. package/contracts/interfaces/IPGaugeControllerMainchain.sol +12 -0
  240. package/contracts/interfaces/IPGovernanceManager.sol +1 -1
  241. package/contracts/interfaces/IPInterestManagerYT.sol +9 -0
  242. package/contracts/interfaces/IPMarket.sol +13 -13
  243. package/contracts/interfaces/IPMarketAddRemoveCallback.sol +3 -3
  244. package/contracts/interfaces/IPMarketFactory.sol +8 -1
  245. package/contracts/interfaces/IPMarketSwapCallback.sol +1 -1
  246. package/contracts/interfaces/IPPermissionsV2Upg.sol +1 -1
  247. package/contracts/interfaces/IPPrincipalToken.sol +9 -5
  248. package/contracts/interfaces/IPRouterStatic.sol +1 -1
  249. package/contracts/interfaces/IPVeToken.sol +10 -5
  250. package/contracts/interfaces/IPVotingController.sol +21 -0
  251. package/contracts/interfaces/IPVotingEscrow.sol +14 -22
  252. package/contracts/interfaces/IPYieldContractFactory.sol +1 -1
  253. package/contracts/interfaces/IPYieldToken.sol +17 -17
  254. package/contracts/interfaces/IQiAvax.sol +31 -0
  255. package/contracts/interfaces/IQiErc20.sol +1 -1
  256. package/contracts/interfaces/IQiToken.sol +22 -1
  257. package/contracts/interfaces/IREDACTEDStaking.sol +1 -1
  258. package/contracts/interfaces/IRewardManager.sol +9 -0
  259. package/contracts/interfaces/ISuperComposableYield.sol +182 -0
  260. package/contracts/interfaces/IWETH.sol +1 -1
  261. package/contracts/interfaces/IWXBTRFLY.sol +3 -1
  262. package/contracts/interfaces/IWstETH.sol +3 -1
  263. package/contracts/interfaces/IYearnVault.sol +3 -1
  264. package/contracts/libraries/RewardManager.sol +78 -0
  265. package/contracts/libraries/RewardManagerAbstract.sol +81 -0
  266. package/contracts/libraries/{SCYIndex.sol → SCY/SCYIndex.sol} +8 -8
  267. package/contracts/libraries/SCY/SCYUtils.sol +18 -0
  268. package/contracts/libraries/VeBalanceLib.sol +114 -0
  269. package/contracts/libraries/helpers/ArrayLib.sol +65 -0
  270. package/contracts/libraries/helpers/ExpiryUtilsLib.sol +1 -1
  271. package/contracts/libraries/helpers/MiniDeployer.sol +23 -0
  272. package/contracts/libraries/helpers/MiniHelpers.sol +15 -0
  273. package/contracts/libraries/helpers/TokenHelper.sol +105 -0
  274. package/contracts/libraries/math/LogExpMath.sol +59 -1
  275. package/contracts/libraries/math/MarketApproxLib.sol +167 -164
  276. package/contracts/libraries/math/MarketMathCore.sol +106 -25
  277. package/contracts/libraries/math/Math.sol +28 -21
  278. package/contracts/libraries/math/WeekMath.sol +19 -0
  279. package/contracts/libraries/solmate/Bytes32AddressLib.sol +14 -0
  280. package/contracts/libraries/solmate/LibRLP.sol +30 -0
  281. package/contracts/libraries/solmate/SSTORE2.sol +99 -0
  282. package/contracts/libraries/{JoeLibrary.sol → traderjoe/JoeLibrary.sol} +3 -2
  283. package/contracts/{periphery → libraries/traderjoe}/PendleJoeSwapHelperUpg.sol +8 -10
  284. package/contracts/{core → offchain-helpers}/RouterStatic.sol +24 -19
  285. package/contracts/periphery/PendleGovernanceManager.sol +1 -1
  286. package/contracts/periphery/PermissionsV2Upg.sol +1 -1
  287. package/package.json +1 -1
  288. package/typechain-types/ActionCore.ts +169 -96
  289. package/typechain-types/ActionSCYAndPTBase.ts +210 -0
  290. package/typechain-types/ActionSCYAndPYBase.ts +0 -13
  291. package/typechain-types/ActionSCYAndYTBase.ts +8 -21
  292. package/typechain-types/ActionYT.ts +73 -64
  293. package/typechain-types/BeaconProxy.ts +97 -0
  294. package/typechain-types/CelerReceiver.ts +267 -0
  295. package/typechain-types/CelerSender.ts +197 -0
  296. package/typechain-types/ERC1967Upgrade.ts +97 -0
  297. package/typechain-types/ERC20Permit.ts +521 -0
  298. package/typechain-types/IAToken.ts +55 -0
  299. package/typechain-types/IBeacon.ts +87 -0
  300. package/typechain-types/IBenQiComptroller.ts +13 -0
  301. package/typechain-types/IBenQiInterestRateModel.ts +162 -0
  302. package/typechain-types/ICelerMessageBus.ts +134 -0
  303. package/typechain-types/ICelerMessageReceiverApp.ts +120 -0
  304. package/typechain-types/IERC1822Proxiable.ts +87 -0
  305. package/typechain-types/IERC20Permit.ts +175 -0
  306. package/typechain-types/IERC4626.ts +463 -0
  307. package/typechain-types/IJoeRouter02.ts +1420 -0
  308. package/typechain-types/IPActionCore.ts +169 -83
  309. package/typechain-types/IPActionYT.ts +65 -43
  310. package/typechain-types/IPAllAction.ts +190 -137
  311. package/typechain-types/IPGauge.ts +104 -0
  312. package/typechain-types/IPGaugeController.ts +191 -0
  313. package/typechain-types/IPGaugeControllerMainchain.ts +236 -0
  314. package/typechain-types/IPMarket.ts +73 -74
  315. package/typechain-types/IPMarketFactory.ts +27 -0
  316. package/typechain-types/IPPrincipalToken.ts +8 -20
  317. package/typechain-types/IPVeToken.ts +198 -0
  318. package/typechain-types/IPVotingController.ts +179 -0
  319. package/typechain-types/IPVotingEscrow.ts +217 -0
  320. package/typechain-types/IPVotingEscrowController.ts +154 -0
  321. package/typechain-types/IPYieldToken.ts +176 -213
  322. package/typechain-types/IQiAvax.ts +551 -0
  323. package/typechain-types/IQiErc20.ts +171 -0
  324. package/typechain-types/IQiToken.ts +171 -0
  325. package/typechain-types/IRewardManager.ts +16 -87
  326. package/typechain-types/ISuperComposableYield.ts +283 -269
  327. package/typechain-types/IWXBTRFLY.ts +13 -0
  328. package/typechain-types/IWstETH.ts +13 -0
  329. package/typechain-types/IYearnVault.ts +13 -0
  330. package/typechain-types/PendleAaveV3SCY.ts +382 -477
  331. package/typechain-types/PendleBtrflyScy.ts +287 -348
  332. package/typechain-types/PendleERC20.ts +339 -0
  333. package/typechain-types/PendleERC20Permit.ts +443 -0
  334. package/typechain-types/PendleERC4626SCY.ts +801 -0
  335. package/typechain-types/PendleGauge.ts +276 -0
  336. package/typechain-types/PendleGaugeController.ts +346 -0
  337. package/typechain-types/PendleGaugeControllerMainchain.ts +410 -0
  338. package/typechain-types/PendleGaugeControllerSidechain.ts +524 -0
  339. package/typechain-types/PendleJoeLpSCY.ts +837 -0
  340. package/typechain-types/PendleJoeSwapHelperUpg.ts +0 -13
  341. package/typechain-types/PendleMarket.ts +265 -151
  342. package/typechain-types/PendleMarketFactory.ts +111 -16
  343. package/typechain-types/PendleMarketRewards.ts +1317 -0
  344. package/typechain-types/PendlePrincipalToken.ts +103 -130
  345. package/typechain-types/PendleQiTokenHelper.ts +57 -0
  346. package/typechain-types/PendleQiTokenSCY.ts +991 -0
  347. package/typechain-types/PendleRouter.ts +0 -19
  348. package/typechain-types/PendleVotingController.ts +1042 -0
  349. package/typechain-types/PendleWstEthSCY.ts +813 -0
  350. package/typechain-types/PendleYearnVaultScy.ts +278 -339
  351. package/typechain-types/PendleYieldContractFactory.ts +43 -27
  352. package/typechain-types/PendleYieldToken.ts +297 -428
  353. package/typechain-types/RewardManager.ts +70 -69
  354. package/typechain-types/RewardManagerMini.ts +200 -0
  355. package/typechain-types/SCYBase.ts +276 -335
  356. package/typechain-types/SCYBaseWithRewards.ts +367 -424
  357. package/typechain-types/VotingControllerStorage.ts +507 -0
  358. package/typechain-types/VotingEscrowPendleMainchain.ts +854 -0
  359. package/typechain-types/VotingEscrowPendleSidechain.ts +546 -0
  360. package/typechain-types/VotingEscrowToken.ts +251 -0
  361. package/typechain-types/factories/ActionCallback__factory.ts +1 -1
  362. package/typechain-types/factories/ActionCore__factory.ts +122 -80
  363. package/typechain-types/factories/ActionRedeem__factory.ts +1 -1
  364. package/typechain-types/factories/ActionSCYAndPTBase__factory.ts +187 -0
  365. package/typechain-types/factories/ActionSCYAndPYBase__factory.ts +0 -13
  366. package/typechain-types/factories/ActionSCYAndYTBase__factory.ts +1 -14
  367. package/typechain-types/factories/ActionYT__factory.ts +39 -48
  368. package/typechain-types/factories/BeaconProxy__factory.ts +141 -0
  369. package/typechain-types/factories/CelerReceiver__factory.ts +140 -0
  370. package/typechain-types/factories/CelerSender__factory.ts +85 -0
  371. package/typechain-types/factories/ERC1967Upgrade__factory.ts +71 -0
  372. package/typechain-types/factories/ERC20Permit__factory.ts +368 -0
  373. package/typechain-types/factories/ERC20__factory.ts +1 -1
  374. package/typechain-types/factories/IAToken__factory.ts +39 -0
  375. package/typechain-types/factories/IBeacon__factory.ts +36 -0
  376. package/typechain-types/factories/IBenQiComptroller__factory.ts +13 -0
  377. package/typechain-types/factories/IBenQiInterestRateModel__factory.ts +93 -0
  378. package/typechain-types/factories/ICelerMessageBus__factory.ts +68 -0
  379. package/typechain-types/factories/ICelerMessageReceiverApp__factory.ts +64 -0
  380. package/typechain-types/factories/IERC1822Proxiable__factory.ts +39 -0
  381. package/typechain-types/factories/IERC20Permit__factory.ts +98 -0
  382. package/typechain-types/factories/IERC4626__factory.ts +330 -0
  383. package/typechain-types/factories/IJoeRouter02__factory.ts +974 -0
  384. package/typechain-types/factories/IPActionCore__factory.ts +122 -58
  385. package/typechain-types/factories/IPActionYT__factory.ts +36 -21
  386. package/typechain-types/factories/IPAllAction__factory.ts +116 -81
  387. package/typechain-types/factories/IPGaugeControllerMainchain__factory.ts +151 -0
  388. package/typechain-types/factories/IPGaugeController__factory.ts +124 -0
  389. package/typechain-types/factories/IPGauge__factory.ts +42 -0
  390. package/typechain-types/factories/IPMarketFactory__factory.ts +31 -0
  391. package/typechain-types/factories/IPMarket__factory.ts +35 -54
  392. package/typechain-types/factories/IPPrincipalToken__factory.ts +5 -5
  393. package/typechain-types/factories/IPVeToken__factory.ts +111 -0
  394. package/typechain-types/factories/IPVotingController__factory.ts +182 -0
  395. package/typechain-types/factories/IPVotingEscrowController__factory.ts +80 -0
  396. package/typechain-types/factories/IPVotingEscrow__factory.ts +163 -0
  397. package/typechain-types/factories/IPYieldToken__factory.ts +85 -83
  398. package/typechain-types/factories/IQiAvax__factory.ts +362 -0
  399. package/typechain-types/factories/IQiErc20__factory.ts +117 -0
  400. package/typechain-types/factories/IQiToken__factory.ts +117 -0
  401. package/typechain-types/factories/IRewardManager__factory.ts +5 -47
  402. package/typechain-types/factories/ISuperComposableYield__factory.ts +201 -138
  403. package/typechain-types/factories/IWXBTRFLY__factory.ts +13 -0
  404. package/typechain-types/factories/IWstETH__factory.ts +13 -0
  405. package/typechain-types/factories/IYearnVault__factory.ts +13 -0
  406. package/typechain-types/factories/PendleAaveV3SCY__factory.ts +246 -315
  407. package/typechain-types/factories/PendleBtrflyScy__factory.ts +200 -234
  408. package/typechain-types/factories/PendleERC20Permit__factory.ts +405 -0
  409. package/typechain-types/factories/PendleERC20__factory.ts +327 -0
  410. package/typechain-types/factories/PendleERC4626SCY__factory.ts +678 -0
  411. package/typechain-types/factories/PendleGaugeControllerMainchain__factory.ts +332 -0
  412. package/typechain-types/factories/PendleGaugeControllerSidechain__factory.ts +391 -0
  413. package/typechain-types/factories/PendleGaugeController__factory.ts +212 -0
  414. package/typechain-types/factories/PendleGauge__factory.ts +171 -0
  415. package/typechain-types/factories/PendleGovernanceManager__factory.ts +1 -1
  416. package/typechain-types/factories/PendleJoeLpSCY__factory.ts +726 -0
  417. package/typechain-types/factories/PendleJoeSwapHelperUpg__factory.ts +0 -13
  418. package/typechain-types/factories/PendleMarketFactory__factory.ts +90 -5
  419. package/typechain-types/factories/PendleMarketRewards__factory.ts +1140 -0
  420. package/typechain-types/factories/PendleMarket__factory.ts +182 -94
  421. package/typechain-types/factories/PendlePrincipalToken__factory.ts +74 -77
  422. package/typechain-types/factories/PendleQiTokenHelper__factory.ts +99 -0
  423. package/typechain-types/factories/PendleQiTokenSCY__factory.ts +845 -0
  424. package/typechain-types/factories/PendleRouter__factory.ts +1 -23
  425. package/typechain-types/factories/PendleVotingController__factory.ts +776 -0
  426. package/typechain-types/factories/PendleWstEthSCY__factory.ts +686 -0
  427. package/typechain-types/factories/PendleYearnVaultScy__factory.ts +218 -243
  428. package/typechain-types/factories/PendleYieldContractFactory__factory.ts +39 -29
  429. package/typechain-types/factories/PendleYieldToken__factory.ts +153 -211
  430. package/typechain-types/factories/RewardManagerMini__factory.ts +116 -0
  431. package/typechain-types/factories/RewardManager__factory.ts +43 -32
  432. package/typechain-types/factories/RouterStatic__factory.ts +1 -1
  433. package/typechain-types/factories/SCYBaseWithRewards__factory.ts +242 -218
  434. package/typechain-types/factories/SCYBase__factory.ts +195 -176
  435. package/typechain-types/factories/VotingControllerStorage__factory.ts +361 -0
  436. package/typechain-types/factories/VotingEscrowPendleMainchain__factory.ts +616 -0
  437. package/typechain-types/factories/VotingEscrowPendleSidechain__factory.ts +415 -0
  438. package/typechain-types/factories/VotingEscrowToken__factory.ts +153 -0
  439. package/typechain-types/hardhat.d.ts +338 -131
  440. package/typechain-types/index.ts +92 -38
  441. package/build/artifacts/contracts/SuperComposableYield/ISuperComposableYield.sol/ISuperComposableYield.dbg.json +0 -4
  442. package/build/artifacts/contracts/SuperComposableYield/SCYUtils.sol/SCYUtils.dbg.json +0 -4
  443. package/build/artifacts/contracts/SuperComposableYield/implementations/IRewardManager.sol/IRewardManager.dbg.json +0 -4
  444. package/build/artifacts/contracts/SuperComposableYield/implementations/RewardManager.sol/RewardManager.dbg.json +0 -4
  445. package/build/artifacts/contracts/SuperComposableYield/implementations/SCYBase.sol/SCYBase.dbg.json +0 -4
  446. package/build/artifacts/contracts/SuperComposableYield/implementations/SCYBaseWithRewards.sol/SCYBaseWithRewards.dbg.json +0 -4
  447. package/build/artifacts/contracts/core/PendleBaseToken.sol/PendleBaseToken.dbg.json +0 -4
  448. package/build/artifacts/contracts/core/PendleMarket.sol/PendleMarket.dbg.json +0 -4
  449. package/build/artifacts/contracts/core/PendleMarket.sol/PendleMarket.json +0 -842
  450. package/build/artifacts/contracts/core/PendleMarketFactory.sol/PendleMarketFactory.dbg.json +0 -4
  451. package/build/artifacts/contracts/core/PendleMarketFactory.sol/PendleMarketFactory.json +0 -265
  452. package/build/artifacts/contracts/core/PendlePrincipalToken.sol/PendlePrincipalToken.dbg.json +0 -4
  453. package/build/artifacts/contracts/core/PendlePrincipalToken.sol/PendlePrincipalToken.json +0 -452
  454. package/build/artifacts/contracts/core/PendleSCYImpl/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.dbg.json +0 -4
  455. package/build/artifacts/contracts/core/PendleSCYImpl/AaveV3/PendleAaveV3SCY.sol/PendleAaveV3SCY.json +0 -783
  456. package/build/artifacts/contracts/core/PendleSCYImpl/AaveV3/WadRayMath.sol/WadRayMath.dbg.json +0 -4
  457. package/build/artifacts/contracts/core/PendleSCYImpl/PendleBenQiErc20SCY.sol/PendleBenQiErc20SCY.dbg.json +0 -4
  458. package/build/artifacts/contracts/core/PendleSCYImpl/PendleBenQiErc20SCY.sol/PendleBenQiErc20SCY.json +0 -766
  459. package/build/artifacts/contracts/core/PendleSCYImpl/PendleBtrflySCY.sol/PendleBtrflyScy.dbg.json +0 -4
  460. package/build/artifacts/contracts/core/PendleSCYImpl/PendleBtrflySCY.sol/PendleBtrflyScy.json +0 -641
  461. package/build/artifacts/contracts/core/PendleSCYImpl/PendleStETHSCY.sol/PendleStEthSCY.dbg.json +0 -4
  462. package/build/artifacts/contracts/core/PendleSCYImpl/PendleStETHSCY.sol/PendleStEthSCY.json +0 -623
  463. package/build/artifacts/contracts/core/PendleSCYImpl/PendleYearnVaultSCY.sol/PendleYearnVaultScy.dbg.json +0 -4
  464. package/build/artifacts/contracts/core/PendleSCYImpl/PendleYearnVaultSCY.sol/PendleYearnVaultScy.json +0 -623
  465. package/build/artifacts/contracts/core/PendleYieldContractFactory.sol/PendleYieldContractFactory.dbg.json +0 -4
  466. package/build/artifacts/contracts/core/PendleYieldContractFactory.sol/PendleYieldContractFactory.json +0 -339
  467. package/build/artifacts/contracts/core/PendleYieldToken.sol/PendleYieldToken.dbg.json +0 -4
  468. package/build/artifacts/contracts/core/PendleYieldToken.sol/PendleYieldToken.json +0 -808
  469. package/build/artifacts/contracts/core/RouterStatic.sol/RouterStatic.dbg.json +0 -4
  470. package/build/artifacts/contracts/core/RouterStatic.sol/RouterStatic.json +0 -862
  471. package/build/artifacts/contracts/core/actions/ActionRedeem.sol/ActionRedeem.dbg.json +0 -4
  472. package/build/artifacts/contracts/core/actions/ActionRedeem.sol/ActionRedeem.json +0 -55
  473. package/build/artifacts/contracts/core/actions/base/ActionType.sol/ActionType.dbg.json +0 -4
  474. package/build/artifacts/contracts/interfaces/IPActionRedeem.sol/IPActionRedeem.dbg.json +0 -4
  475. package/build/artifacts/contracts/interfaces/IPActionRedeem.sol/IPActionRedeem.json +0 -55
  476. package/build/artifacts/contracts/interfaces/IPBaseToken.sol/IPBaseToken.dbg.json +0 -4
  477. package/build/artifacts/contracts/interfaces/IPGauge.sol/IPendleGauge.dbg.json +0 -4
  478. package/build/artifacts/contracts/interfaces/IPGauge.sol/IPendleGauge.json +0 -113
  479. package/build/artifacts/contracts/interfaces/IPVeToken.sol/IVePToken.dbg.json +0 -4
  480. package/build/artifacts/contracts/interfaces/IPVeToken.sol/IVePToken.json +0 -43
  481. package/build/artifacts/contracts/interfaces/IPVotingEscrow.sol/IVotingEscrowPendle.dbg.json +0 -4
  482. package/build/artifacts/contracts/interfaces/IPVotingEscrowController.sol/VotingEscrowController.dbg.json +0 -4
  483. package/build/artifacts/contracts/interfaces/IPVotingEscrowController.sol/VotingEscrowController.json +0 -61
  484. package/build/artifacts/contracts/interfaces/IPendleGauge.sol/IPendleGauge.dbg.json +0 -4
  485. package/build/artifacts/contracts/interfaces/IPendleGauge.sol/IPendleGauge.json +0 -113
  486. package/build/artifacts/contracts/interfaces/IVePToken.sol/IVePToken.dbg.json +0 -4
  487. package/build/artifacts/contracts/interfaces/IVotingEscrowController.sol/VotingEscrowController.dbg.json +0 -4
  488. package/build/artifacts/contracts/interfaces/IVotingEscrowController.sol/VotingEscrowController.json +0 -61
  489. package/build/artifacts/contracts/interfaces/IVotingEscrowPendle.sol/IVotingEscrowPendle.dbg.json +0 -4
  490. package/build/artifacts/contracts/interfaces/IVotingEscrowPendle.sol/IVotingEscrowPendle.json +0 -167
  491. package/build/artifacts/contracts/libraries/JoeLibrary.sol/JoeLibrary.dbg.json +0 -4
  492. package/build/artifacts/contracts/libraries/SCYIndex.sol/SCYIndexLib.dbg.json +0 -4
  493. package/build/artifacts/contracts/libraries/math/MarketMathAux.sol/MarketMathAux.dbg.json +0 -4
  494. package/build/artifacts/contracts/periphery/PendleJoeSwapHelperUpg.sol/PendleJoeSwapHelperUpg.dbg.json +0 -4
  495. package/contracts/SuperComposableYield/ISuperComposableYield.sol +0 -80
  496. package/contracts/SuperComposableYield/SCYUtils.sol +0 -14
  497. package/contracts/SuperComposableYield/implementations/IRewardManager.sol +0 -16
  498. package/contracts/SuperComposableYield/implementations/RewardManager.sol +0 -151
  499. package/contracts/SuperComposableYield/implementations/SCYBase.sol +0 -166
  500. package/contracts/SuperComposableYield/implementations/SCYBaseWithRewards.sol +0 -88
  501. package/contracts/core/PendleBaseToken.sol +0 -35
  502. package/contracts/core/PendlePrincipalToken.sol +0 -54
  503. package/contracts/core/PendleSCYImpl/AaveV3/PendleAaveV3SCY.sol +0 -140
  504. package/contracts/core/PendleSCYImpl/PendleBenQiErc20SCY.sol +0 -133
  505. package/contracts/core/PendleSCYImpl/PendleBtrflySCY.sol +0 -120
  506. package/contracts/core/PendleSCYImpl/PendleStETHSCY.sol +0 -107
  507. package/contracts/core/PendleSCYImpl/PendleYearnVaultSCY.sol +0 -109
  508. package/contracts/core/PendleYieldToken.sol +0 -340
  509. package/contracts/core/actions/ActionRedeem.sol +0 -36
  510. package/contracts/core/actions/base/ActionType.sol +0 -11
  511. package/contracts/interfaces/IPActionRedeem.sol +0 -17
  512. package/contracts/interfaces/IPBaseToken.sol +0 -9
  513. package/contracts/interfaces/IPGauge.sol +0 -32
  514. package/contracts/interfaces/IPVotingEscrowController.sol +0 -14
  515. package/contracts/interfaces/IPendleGauge.sol +0 -32
  516. package/contracts/interfaces/IVePToken.sol +0 -14
  517. package/contracts/interfaces/IVotingEscrowController.sol +0 -14
  518. package/contracts/interfaces/IVotingEscrowPendle.sol +0 -32
  519. package/contracts/libraries/math/MarketMathAux.sol +0 -101
@@ -0,0 +1,105 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ pragma solidity 0.8.13;
3
+ import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
4
+ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
5
+
6
+ abstract contract TokenHelper {
7
+ using SafeERC20 for IERC20;
8
+ address internal constant NATIVE = address(0);
9
+
10
+ function _transferIn(
11
+ address token,
12
+ address from,
13
+ uint256 amount
14
+ ) internal {
15
+ if (amount == 0 || token == NATIVE) return;
16
+ IERC20(token).safeTransferFrom(from, address(this), amount);
17
+ }
18
+
19
+ function _transferOut(
20
+ address token,
21
+ address to,
22
+ uint256 amount
23
+ ) internal {
24
+ if (amount == 0) return;
25
+ if (token == NATIVE) {
26
+ (bool success, ) = to.call{ value: amount }("");
27
+ require(success, "eth send failed");
28
+ } else {
29
+ IERC20(token).safeTransfer(to, amount);
30
+ }
31
+ }
32
+
33
+ function _transferOut(
34
+ address[] memory tokens,
35
+ address to,
36
+ uint256[] memory amounts
37
+ ) internal {
38
+ uint256 numTokens = tokens.length;
39
+ require(numTokens == amounts.length, "length mismatch");
40
+ for (uint256 i = 0; i < numTokens; ) {
41
+ _transferOut(tokens[i], to, amounts[i]);
42
+ unchecked {
43
+ i++;
44
+ }
45
+ }
46
+ }
47
+
48
+ function _transferOutMaxMulti(
49
+ address token,
50
+ uint256 totalAmount,
51
+ address[] memory tos,
52
+ uint256[] memory maxAmounts
53
+ ) internal {
54
+ uint256 numTos = tos.length;
55
+ require(numTos == maxAmounts.length, "invalid length");
56
+
57
+ uint256 remaining = totalAmount;
58
+ for (uint256 i = 0; i < numTos; ) {
59
+ uint256 maxAmount = maxAmounts[i];
60
+ if (maxAmount > remaining) {
61
+ maxAmount = remaining;
62
+ }
63
+ _transferOut(token, tos[i], maxAmount);
64
+ unchecked {
65
+ remaining -= maxAmount;
66
+ i++;
67
+ }
68
+ }
69
+ }
70
+
71
+ function _selfBalance(address token) internal view returns (uint256) {
72
+ return (token == NATIVE) ? address(this).balance : IERC20(token).balanceOf(address(this));
73
+ }
74
+
75
+ function _selfBalances(address[] memory tokens)
76
+ internal
77
+ view
78
+ returns (uint256[] memory balances)
79
+ {
80
+ uint256 length = tokens.length;
81
+ balances = new uint256[](length);
82
+ for (uint256 i = 0; i < length; ) {
83
+ balances[i] = _selfBalance(tokens[i]);
84
+ unchecked {
85
+ i++;
86
+ }
87
+ }
88
+ }
89
+
90
+ /// @notice Approves the stipulated contract to spend the given allowance in the given token
91
+ /// @dev Errors with 'SA' if transfer fails
92
+ /// @param token The contract address of the token to be approved
93
+ /// @param to The target of the approval
94
+ /// @param value The amount of the given token the target will be allowed to spend
95
+ function _safeApprove(
96
+ address token,
97
+ address to,
98
+ uint256 value
99
+ ) internal {
100
+ (bool success, bytes memory data) = token.call(
101
+ abi.encodeWithSelector(IERC20.approve.selector, to, value)
102
+ );
103
+ require(success && (data.length == 0 || abi.decode(data, (bool))), "Safe Approve");
104
+ }
105
+ }
@@ -12,7 +12,7 @@
12
12
  // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
13
13
  // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
14
 
15
- pragma solidity 0.8.9;
15
+ pragma solidity 0.8.13;
16
16
 
17
17
  /* solhint-disable */
18
18
 
@@ -53,6 +53,8 @@ library LogExpMath {
53
53
  int256 constant LN_36_LOWER_BOUND = ONE_18 - 1e17;
54
54
  int256 constant LN_36_UPPER_BOUND = ONE_18 + 1e17;
55
55
 
56
+ uint256 constant MILD_EXPONENT_BOUND = 2**254 / uint256(ONE_20);
57
+
56
58
  // 18 decimal constants
57
59
  int256 constant x0 = 128000000000000000000; // 2ˆ7
58
60
  int256 constant a0 = 38877084059945950922200000000000000000000000000000000000; // eˆ(x0) (no decimals)
@@ -240,6 +242,62 @@ library LogExpMath {
240
242
  }
241
243
  }
242
244
 
245
+ /**
246
+ * @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.
247
+ *
248
+ * Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`.
249
+ */
250
+ function pow(uint256 x, uint256 y) internal pure returns (uint256) {
251
+ if (y == 0) {
252
+ // We solve the 0^0 indetermination by making it equal one.
253
+ return uint256(ONE_18);
254
+ }
255
+
256
+ if (x == 0) {
257
+ return 0;
258
+ }
259
+
260
+ // Instead of computing x^y directly, we instead rely on the properties of logarithms and exponentiation to
261
+ // arrive at that r`esult. In particular, exp(ln(x)) = x, and ln(x^y) = y * ln(x). This means
262
+ // x^y = exp(y * ln(x)).
263
+
264
+ // The ln function takes a signed value, so we need to make sure x fits in the signed 256 bit range.
265
+ require(x < 2**255, "x out of bounds");
266
+ int256 x_int256 = int256(x);
267
+
268
+ // We will compute y * ln(x) in a single step. Depending on the value of x, we can either use ln or ln_36. In
269
+ // both cases, we leave the division by ONE_18 (due to fixed point multiplication) to the end.
270
+
271
+ // This prevents y * ln(x) from overflowing, and at the same time guarantees y fits in the signed 256 bit range.
272
+ require(y < MILD_EXPONENT_BOUND, "y out of bounds");
273
+ int256 y_int256 = int256(y);
274
+
275
+ int256 logx_times_y;
276
+ if (LN_36_LOWER_BOUND < x_int256 && x_int256 < LN_36_UPPER_BOUND) {
277
+ int256 ln_36_x = _ln_36(x_int256);
278
+
279
+ // ln_36_x has 36 decimal places, so multiplying by y_int256 isn't as straightforward, since we can't just
280
+ // bring y_int256 to 36 decimal places, as it might overflow. Instead, we perform two 18 decimal
281
+ // multiplications and add the results: one with the first 18 decimals of ln_36_x, and one with the
282
+ // (downscaled) last 18 decimals.
283
+ logx_times_y = ((ln_36_x / ONE_18) *
284
+ y_int256 +
285
+ ((ln_36_x % ONE_18) * y_int256) /
286
+ ONE_18);
287
+ } else {
288
+ logx_times_y = _ln(x_int256) * y_int256;
289
+ }
290
+ logx_times_y /= ONE_18;
291
+
292
+ // Finally, we compute exp(y * ln(x)) to arrive at x^y
293
+ require(
294
+ MIN_NATURAL_EXPONENT <= logx_times_y && logx_times_y <= MAX_NATURAL_EXPONENT,
295
+ "product out of bounds"
296
+ );
297
+
298
+ return uint256(exp(logx_times_y));
299
+ }
300
+
243
301
  /**
244
302
  * @dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument.
245
303
  */
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: GPL-3.0-or-later
2
- pragma solidity 0.8.9;
2
+ pragma solidity 0.8.13;
3
3
 
4
4
  import "./Math.sol";
5
5
  import "./MarketMathCore.sol";
@@ -36,12 +36,17 @@ library MarketApproxLib {
36
36
  using SCYIndexLib for SCYIndex;
37
37
  using MarketMathCore for MarketState;
38
38
 
39
- struct SlotSwapPtForExactScy {
40
- uint256 ptInGuess;
41
- int256 _assetToAccount;
39
+ struct VarsSwapPtForExactScy {
40
+ uint256 netPtInGuess;
41
+ int256 assetToAccount;
42
42
  uint256 netAssetOut;
43
+ uint256 minAssetOut;
44
+ uint256 largestGoodSlope;
45
+ bool isSlopeNonNeg;
43
46
  }
44
47
 
48
+ /// `guessMin` & `guessMax` is to guess the `netPtIn`
49
+
45
50
  function approxSwapPtForExactScy(
46
51
  MarketState memory market,
47
52
  SCYIndex index,
@@ -56,65 +61,59 @@ library MarketApproxLib {
56
61
  uint256 /*netScyOut*/
57
62
  )
58
63
  {
59
- /// ------------------------------------------------------------
60
- /// CHECKS
61
- /// ------------------------------------------------------------
62
- require(minScyOut > 0, "invalid minScyOut");
63
- require(isValidApproxParams(approx), "invalid approx approx");
64
+ /*
65
+ the algorithm is essentially to:
66
+ 1. binary search netPtIn
67
+ 2. if netScyOut is greater & approx minScyOut => answer found
68
+
69
+ Psuedo code:
70
+ binary search netPtIn:
71
+ netAssetOut = calcTrade(netPtIn)
72
+ if (netScyOut >= minScyOut):
73
+ guessMax = netPtIn;
74
+ if (netScyOut `greaterApprox` minScyOut) => answer found
75
+ else:
76
+ guessMin = netPtIn;
77
+ */
64
78
 
65
- /// ------------------------------------------------------------
66
- /// SET UP VARIABLES
67
- /// ------------------------------------------------------------
68
- uint256 minAssetOut = index.scyToAsset(minScyOut);
69
- uint256 largestGoodSlope;
70
- bool isSlopeNonNeg;
79
+ require(isValidApproxParams(approx), "invalid approx approx");
71
80
 
81
+ VarsSwapPtForExactScy memory vars;
72
82
  MarketPreCompute memory comp = market.getMarketPreCompute(index, blockTime);
73
83
 
74
84
  if (approx.guessMax == type(uint256).max) {
75
85
  approx.guessMax = calcMaxPtIn(market.totalPt, comp.totalAsset);
76
86
  }
77
-
78
- /// ------------------------------------------------------------
79
- /// BINARY SEARCH
80
- /// ------------------------------------------------------------
87
+ vars.minAssetOut = index.scyToAsset(minScyOut);
81
88
 
82
89
  for (uint256 iter = 0; iter < approx.maxIteration; ) {
83
- // ++iter at end of loop
84
-
85
- SlotSwapPtForExactScy memory slot;
86
- slot.ptInGuess = getCurrentGuess(iter, approx);
90
+ vars.netPtInGuess = getCurrentGuess(iter, approx);
87
91
 
88
- /// ------------------------------------------------------------
89
- /// CHECK SLOPE
90
- /// ------------------------------------------------------------
91
- (isSlopeNonNeg, largestGoodSlope) = updateSlope(
92
- market.totalPt,
93
- slot.ptInGuess,
92
+ (vars.isSlopeNonNeg, vars.largestGoodSlope) = updateSlope(
94
93
  comp,
95
- largestGoodSlope
94
+ market.totalPt,
95
+ vars.netPtInGuess,
96
+ vars.largestGoodSlope
96
97
  );
97
- if (!isSlopeNonNeg) {
98
- approx.guessMax = slot.ptInGuess;
98
+ if (!vars.isSlopeNonNeg) {
99
+ approx.guessMax = vars.netPtInGuess;
99
100
  continue;
100
101
  }
101
102
 
102
- /// ------------------------------------------------------------
103
- /// CHECK ASSET
104
- /// ------------------------------------------------------------
105
- (slot._assetToAccount, ) = market.calcTrade(comp, slot.ptInGuess.neg());
106
- slot.netAssetOut = slot._assetToAccount.Uint();
107
-
108
- if (slot.netAssetOut >= minAssetOut) {
109
- approx.guessMax = slot.ptInGuess;
110
- /// ------------------------------------------------------------
111
- /// CHECK IF ANSWER FOUND
112
- /// ------------------------------------------------------------
113
- if (Math.isAGreaterApproxB(slot.netAssetOut, minAssetOut, approx.eps)) {
114
- return (slot.ptInGuess, index.assetToScy(slot.netAssetOut));
115
- }
103
+ (vars.assetToAccount, ) = market.calcTrade(comp, vars.netPtInGuess.neg());
104
+ vars.netAssetOut = vars.assetToAccount.Uint();
105
+
106
+ if (vars.netAssetOut >= vars.minAssetOut) {
107
+ approx.guessMax = vars.netPtInGuess;
108
+ bool isAnswerAccepted = Math.isAGreaterApproxB(
109
+ vars.netAssetOut,
110
+ vars.minAssetOut,
111
+ approx.eps
112
+ );
113
+ if (isAnswerAccepted)
114
+ return (vars.netPtInGuess, index.assetToScy(vars.netAssetOut));
116
115
  } else {
117
- approx.guessMin = slot.ptInGuess + 1;
116
+ approx.guessMin = vars.netPtInGuess;
118
117
  }
119
118
 
120
119
  unchecked {
@@ -124,7 +123,18 @@ library MarketApproxLib {
124
123
  revert("approx fail");
125
124
  }
126
125
 
127
- function approxSwapExactScyForPt(
126
+ struct VarsSwapExactScyForYt {
127
+ uint256 ptInGuess;
128
+ int256 assetToAccount;
129
+ uint256 netAssetOut;
130
+ uint256 amountAssetNeedMore;
131
+ uint256 largestGoodSlope;
132
+ bool isSlopeNonNeg;
133
+ uint256 maxAssetIn;
134
+ }
135
+
136
+ /// `guessMin` & `guessMax` is to guess the `netPtIn` == `netYtOut`
137
+ function approxSwapExactScyForYt(
128
138
  MarketState memory market,
129
139
  SCYIndex index,
130
140
  uint256 maxScyIn,
@@ -134,50 +144,72 @@ library MarketApproxLib {
134
144
  internal
135
145
  pure
136
146
  returns (
137
- uint256, /*netPtOut*/
147
+ uint256, /*netYtOut*/
138
148
  uint256 /*netScyIn*/
139
149
  )
140
150
  {
141
- /// ------------------------------------------------------------
142
- /// CHECKS
143
- /// ------------------------------------------------------------
144
- require(maxScyIn > 0, "invalid maxScyIn");
145
- require(isValidApproxParams(approx), "invalid approx approx");
151
+ /*
152
+ the algorithm is essentially to:
153
+ 1. Binary search netPtIn (therefore netScyOut)
154
+ 2. flashswap some netScyOut (now we owe netPtIn)
155
+ 3. Use netScyOut + additional SCY from user => convert to PT + YT
156
+ 4. Pay back PT & give user YT.
157
+ 5. If the PT loan can be successfully & amount of additional SCY is smallerApprox maxScyIn
158
+ => answer found
159
+
160
+ Psuedo code:
161
+ maxAssetIn = maxScyIn -> asset
162
+ binary search netPtIn:
163
+ netAssetOut = calcTrade(netPtIn)
164
+ totalAssetNeedMoreToConvertPt = netPtIn - netAssetOut
165
+ if (totalAssetNeedMoreToConvertPt <= maxAssetIn):
166
+ guessMin = netPtIn;
167
+ if (totalAssetNeedMoreToConvertPt `smallerApprox` maxAssetIn) => answer found
168
+ else:
169
+ guessMax = netPtOut;
170
+ */
146
171
 
147
- /// ------------------------------------------------------------
148
- /// SET UP VAIRBALES
149
- /// ------------------------------------------------------------
150
- uint256 maxAssetIn = index.scyToAsset(maxScyIn);
172
+ require(isValidApproxParams(approx), "invalid approx approx");
151
173
 
174
+ VarsSwapExactScyForYt memory vars;
152
175
  MarketPreCompute memory comp = market.getMarketPreCompute(index, blockTime);
153
176
 
154
177
  if (approx.guessMax == type(uint256).max) {
155
- approx.guessMax = calcMaxPtOut(market.totalPt, comp);
178
+ approx.guessMax = calcMaxPtIn(market.totalPt, comp.totalAsset);
156
179
  }
157
180
 
158
- /// ------------------------------------------------------------
159
- /// BINARY SEARCH
160
- /// ------------------------------------------------------------
181
+ vars.maxAssetIn = index.scyToAsset(maxScyIn);
161
182
 
162
183
  for (uint256 iter = 0; iter < approx.maxIteration; ) {
163
- uint256 ptOutGuess = getCurrentGuess(iter, approx);
184
+ // ytOutGuess = ptInGuess
185
+ vars.ptInGuess = getCurrentGuess(iter, approx);
164
186
 
165
- /// ------------------------------------------------------------
166
- /// CHECK ASSET
167
- /// ------------------------------------------------------------
168
- (int256 _assetToAccount, ) = market.calcTrade(comp, ptOutGuess.Int());
169
- uint256 netAssetIn = _assetToAccount.neg().Uint();
187
+ (vars.isSlopeNonNeg, vars.largestGoodSlope) = updateSlope(
188
+ comp,
189
+ market.totalPt,
190
+ vars.ptInGuess,
191
+ vars.largestGoodSlope
192
+ );
193
+ if (!vars.isSlopeNonNeg) {
194
+ approx.guessMax = vars.ptInGuess - 1;
195
+ continue;
196
+ }
170
197
 
171
- if (netAssetIn <= maxAssetIn) {
172
- approx.guessMin = ptOutGuess;
173
- /// ------------------------------------------------------------
174
- /// CHECK IF ANSWER FOUND
175
- /// ------------------------------------------------------------
176
- if (Math.isASmallerApproxB(netAssetIn, maxAssetIn, approx.eps)) {
177
- return (ptOutGuess, index.assetToScy(netAssetIn));
178
- }
198
+ (vars.assetToAccount, ) = market.calcTrade(comp, vars.ptInGuess.neg());
199
+ vars.netAssetOut = vars.assetToAccount.Uint();
200
+ vars.amountAssetNeedMore = vars.ptInGuess - vars.netAssetOut;
201
+
202
+ if (vars.amountAssetNeedMore <= vars.maxAssetIn) {
203
+ approx.guessMin = vars.ptInGuess;
204
+ bool isAnswerAccepted = Math.isASmallerApproxB(
205
+ vars.amountAssetNeedMore,
206
+ vars.maxAssetIn,
207
+ approx.eps
208
+ );
209
+ if (isAnswerAccepted)
210
+ return (vars.ptInGuess, index.assetToScy(vars.amountAssetNeedMore));
179
211
  } else {
180
- approx.guessMax = ptOutGuess - 1;
212
+ approx.guessMax = vars.ptInGuess - 1;
181
213
  }
182
214
 
183
215
  unchecked {
@@ -187,14 +219,7 @@ library MarketApproxLib {
187
219
  revert("approx fail");
188
220
  }
189
221
 
190
- struct SlotSwapExactScyForYt {
191
- uint256 ptInGuess;
192
- int256 _assetToAccount;
193
- uint256 netAssetOut;
194
- uint256 amountAssetNeedMore;
195
- }
196
-
197
- function approxSwapExactScyForYt(
222
+ function approxSwapExactScyForPt(
198
223
  MarketState memory market,
199
224
  SCYIndex index,
200
225
  uint256 maxScyIn,
@@ -204,72 +229,46 @@ library MarketApproxLib {
204
229
  internal
205
230
  pure
206
231
  returns (
207
- uint256, /*netYtOut*/
232
+ uint256, /*netPtOut*/
208
233
  uint256 /*netScyIn*/
209
234
  )
210
235
  {
211
- /// ------------------------------------------------------------
212
- /// CHECKS
213
- /// ------------------------------------------------------------
214
- require(maxScyIn > 0, "invalid maxScyIn");
215
- require(isValidApproxParams(approx), "invalid approx approx");
236
+ /*
237
+ the algorithm is essentially to:
238
+ 1. binary search netPtOut
239
+ 2. if netScyIn smaller & approx maxScyIn => answer found
240
+
241
+ Psuedo code:
242
+ maxAssetIn = maxScyIn -> asset
243
+ binary search netPtOut:
244
+ netAssetIn = calcTrade(netPtOut)
245
+ if (netAssetIn <= maxAssetIn):
246
+ guessMin = netPtOut
247
+ if (netAssetIn `smallerApprox` maxAssetIn) => answer found
248
+ else:
249
+ guessMax = netPtOut;
250
+ */
216
251
 
217
- /// ------------------------------------------------------------
218
- /// SET UP VAIRBALES
219
- /// ------------------------------------------------------------
220
- uint256 maxAssetIn = index.scyToAsset(maxScyIn);
221
- uint256 largestGoodSlope;
222
- bool isSlopeNonNeg;
252
+ require(isValidApproxParams(approx), "invalid approx approx");
223
253
 
224
254
  MarketPreCompute memory comp = market.getMarketPreCompute(index, blockTime);
225
-
226
255
  if (approx.guessMax == type(uint256).max) {
227
- approx.guessMax = calcMaxPtIn(market.totalPt, comp.totalAsset);
256
+ approx.guessMax = calcMaxPtOut(market.totalPt, comp);
228
257
  }
229
258
 
230
- /// ------------------------------------------------------------
231
- /// BINARY SEARCH
232
- /// ------------------------------------------------------------
259
+ uint256 maxAssetIn = index.scyToAsset(maxScyIn);
233
260
 
234
261
  for (uint256 iter = 0; iter < approx.maxIteration; ) {
235
- // iter++ at end of loop
236
-
237
- SlotSwapExactScyForYt memory slot;
238
- // ytOutGuess = ptInGuess
239
-
240
- slot.ptInGuess = getCurrentGuess(iter, approx);
241
-
242
- /// ------------------------------------------------------------
243
- /// CHECK SLOPE
244
- /// ------------------------------------------------------------
245
- (isSlopeNonNeg, largestGoodSlope) = updateSlope(
246
- market.totalPt,
247
- slot.ptInGuess,
248
- comp,
249
- largestGoodSlope
250
- );
251
- if (!isSlopeNonNeg) {
252
- approx.guessMax = slot.ptInGuess - 1;
253
- continue;
254
- }
262
+ uint256 ptOutGuess = getCurrentGuess(iter, approx);
263
+ (int256 assetToAccount, ) = market.calcTrade(comp, ptOutGuess.Int());
264
+ uint256 netAssetIn = assetToAccount.abs();
255
265
 
256
- /// ------------------------------------------------------------
257
- /// CHECK ASSET
258
- /// ------------------------------------------------------------
259
- (slot._assetToAccount, ) = market.calcTrade(comp, slot.ptInGuess.neg());
260
- slot.netAssetOut = slot._assetToAccount.Uint();
261
- slot.amountAssetNeedMore = slot.ptInGuess - slot.netAssetOut;
262
-
263
- if (slot.amountAssetNeedMore <= maxAssetIn) {
264
- approx.guessMin = slot.ptInGuess;
265
- /// ------------------------------------------------------------
266
- /// CHECK IF ANSWER FOUND
267
- /// ------------------------------------------------------------
268
- if (Math.isASmallerApproxB(slot.amountAssetNeedMore, maxAssetIn, approx.eps)) {
269
- return (slot.ptInGuess, index.assetToScy(slot.amountAssetNeedMore));
270
- }
266
+ if (netAssetIn <= maxAssetIn) {
267
+ approx.guessMin = ptOutGuess;
268
+ bool isAnswerAccepted = Math.isASmallerApproxB(netAssetIn, maxAssetIn, approx.eps);
269
+ if (isAnswerAccepted) return (ptOutGuess, index.assetToScy(netAssetIn));
271
270
  } else {
272
- approx.guessMax = slot.ptInGuess - 1;
271
+ approx.guessMax = ptOutGuess;
273
272
  }
274
273
 
275
274
  unchecked {
@@ -293,38 +292,42 @@ library MarketApproxLib {
293
292
  uint256 /*netScyOut*/
294
293
  )
295
294
  {
296
- /// ------------------------------------------------------------
297
- /// CHECKS
298
- /// ------------------------------------------------------------
299
- require(minScyOut > 0, "invalid maxScyIn");
300
- require(isValidApproxParams(approx), "invalid approx approx");
295
+ /*
296
+ the algorithm is essentially to:
297
+ 1. Binary search netPtOut (therefore netScyIn) (netYtIn == netPtOut)
298
+ 2. flashswap netPtOut (now we owe netScyIn)
299
+ 3. Pair netPtOut with the corresponding amount of Yt => redeem Scy
300
+ 4. Pay back Scy & the exceed amount of Scy (netScyOut) is transferred out to user
301
+ 5. If netScyOut is greater approx minScyOut => answer found
302
+
303
+ Psuedo code:
304
+ minAssetOut = minScyOut -> asset
305
+ binary search netPtOut:
306
+ netAssetIn = calcTrade(netPtOut)
307
+ netAssetFromPtYt = netPtOut
308
+ netAssetOut = netAssetFromPtYt - netAssetIn
309
+ if (netAssetOut >= minAssetOut):
310
+ guessMax = netPtOut
311
+ if (netAssetOut `greaterApprox` minAssetOut) => answer found
312
+ else:
313
+ guessMin = netPtOut;
314
+ */
301
315
 
302
- /// ------------------------------------------------------------
303
- /// SET UP VAIRBALES
304
- /// ------------------------------------------------------------
305
- uint256 minAssetOut = index.scyToAsset(minScyOut);
316
+ require(isValidApproxParams(approx), "invalid approx approx");
306
317
 
307
318
  MarketPreCompute memory comp = market.getMarketPreCompute(index, blockTime);
308
-
309
319
  if (approx.guessMax == type(uint256).max) {
310
320
  approx.guessMax = calcMaxPtOut(market.totalPt, comp);
311
321
  }
312
322
 
313
- /// ------------------------------------------------------------
314
- /// BINARY SEARCH
315
- /// ------------------------------------------------------------
323
+ uint256 minAssetOut = index.scyToAsset(minScyOut);
316
324
 
317
325
  for (uint256 iter = 0; iter < approx.maxIteration; ) {
318
- // iter++ at end of loop
319
-
320
326
  // ytInGuess = ptOutGuess
321
327
  uint256 ptOutGuess = getCurrentGuess(iter, approx);
322
328
 
323
- /// ------------------------------------------------------------
324
- /// CHECK ASSET
325
- /// ------------------------------------------------------------
326
- (int256 _assetToAccount, ) = market.calcTrade(comp, ptOutGuess.Int());
327
- uint256 netAssetOwed = _assetToAccount.neg().Uint();
329
+ (int256 assetToAccount, ) = market.calcTrade(comp, ptOutGuess.Int());
330
+ uint256 netAssetOwed = assetToAccount.abs();
328
331
 
329
332
  // since ptOutGuess is between guessMin & guessMax, it's guaranteed that
330
333
  // there are enough Yt to pair with ptOut
@@ -333,9 +336,6 @@ library MarketApproxLib {
333
336
 
334
337
  if (netAssetOut >= minAssetOut) {
335
338
  approx.guessMax = ptOutGuess;
336
- /// ------------------------------------------------------------
337
- /// CHECK IF ANSWER FOUND
338
- /// ------------------------------------------------------------
339
339
  if (Math.isAGreaterApproxB(netAssetOut, minAssetOut, approx.eps)) {
340
340
  return (ptOutGuess, index.assetToScy(netAssetOut));
341
341
  }
@@ -351,9 +351,9 @@ library MarketApproxLib {
351
351
  }
352
352
 
353
353
  function updateSlope(
354
+ MarketPreCompute memory comp,
354
355
  int256 totalPt,
355
356
  uint256 ptInGuess,
356
- MarketPreCompute memory comp,
357
357
  uint256 largestGoodSlope
358
358
  ) internal pure returns (bool isSlopeNonNeg, uint256 newLargestGoodSlop) {
359
359
  if (ptInGuess <= largestGoodSlope) {
@@ -393,7 +393,7 @@ library MarketApproxLib {
393
393
  pure
394
394
  returns (uint256)
395
395
  {
396
- int256 logitP = (Math.IONE.mulDown(comp.lnFeeRate) - comp.rateAnchor)
396
+ int256 logitP = (Math.IONE.mulDown(comp.feeRate) - comp.rateAnchor)
397
397
  .mulDown(comp.rateScalar)
398
398
  .exp();
399
399
  int256 proportion = logitP.divDown(logitP + Math.IONE);
@@ -417,6 +417,9 @@ library MarketApproxLib {
417
417
  returns (uint256)
418
418
  {
419
419
  if (iteration == 0 && approx.guessOffchain != 0) return approx.guessOffchain;
420
- else return (approx.guessMin + approx.guessMax) / 2;
420
+ else {
421
+ if (approx.guessMin > approx.guessMax) return approx.guessMax;
422
+ return (approx.guessMin + approx.guessMax) / 2;
423
+ }
421
424
  }
422
425
  }