@venusprotocol/protocol-reserve 1.3.0 → 1.4.0-dev.2

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 (311) hide show
  1. package/README.md +6 -0
  2. package/artifacts/@openzeppelin/contracts/access/AccessControl.sol/AccessControl.dbg.json +4 -0
  3. package/artifacts/@openzeppelin/contracts/access/AccessControl.sol/AccessControl.json +215 -0
  4. package/artifacts/@openzeppelin/contracts/access/IAccessControl.sol/IAccessControl.dbg.json +1 -1
  5. package/artifacts/@openzeppelin/contracts/access/Ownable.sol/Ownable.dbg.json +4 -0
  6. package/artifacts/@openzeppelin/contracts/access/Ownable.sol/Ownable.json +63 -0
  7. package/artifacts/@openzeppelin/contracts/interfaces/IERC1967.sol/IERC1967.dbg.json +4 -0
  8. package/artifacts/@openzeppelin/contracts/interfaces/IERC1967.sol/IERC1967.json +56 -0
  9. package/artifacts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.dbg.json +4 -0
  10. package/artifacts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.json +24 -0
  11. package/artifacts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol/ERC1967Upgrade.dbg.json +4 -0
  12. package/artifacts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol/ERC1967Upgrade.json +56 -0
  13. package/artifacts/@openzeppelin/contracts/proxy/Proxy.sol/Proxy.dbg.json +4 -0
  14. package/artifacts/@openzeppelin/contracts/proxy/Proxy.sol/Proxy.json +19 -0
  15. package/artifacts/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol/BeaconProxy.dbg.json +4 -0
  16. package/artifacts/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol/BeaconProxy.json +80 -0
  17. package/artifacts/@openzeppelin/contracts/proxy/beacon/IBeacon.sol/IBeacon.dbg.json +4 -0
  18. package/artifacts/{contracts/Interfaces/ComptrollerInterface.sol/ComptrollerInterface.json → @openzeppelin/contracts/proxy/beacon/IBeacon.sol/IBeacon.json} +5 -5
  19. package/artifacts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.dbg.json +4 -0
  20. package/artifacts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.json +113 -0
  21. package/artifacts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.dbg.json +1 -1
  22. package/artifacts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.dbg.json +1 -1
  23. package/artifacts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.dbg.json +1 -1
  24. package/artifacts/@openzeppelin/contracts/utils/Address.sol/Address.dbg.json +4 -0
  25. package/artifacts/@openzeppelin/contracts/utils/Address.sol/Address.json +10 -0
  26. package/artifacts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json +1 -1
  27. package/artifacts/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.dbg.json +4 -0
  28. package/artifacts/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.json +10 -0
  29. package/artifacts/@openzeppelin/contracts/utils/Strings.sol/Strings.dbg.json +4 -0
  30. package/artifacts/@openzeppelin/contracts/utils/Strings.sol/Strings.json +10 -0
  31. package/artifacts/@openzeppelin/contracts/utils/introspection/ERC165.sol/ERC165.dbg.json +4 -0
  32. package/artifacts/@openzeppelin/contracts/utils/introspection/ERC165.sol/ERC165.json +30 -0
  33. package/artifacts/@openzeppelin/contracts/utils/introspection/IERC165.sol/IERC165.dbg.json +4 -0
  34. package/artifacts/@openzeppelin/contracts/utils/introspection/IERC165.sol/IERC165.json +30 -0
  35. package/artifacts/@openzeppelin/contracts/utils/math/Math.sol/Math.dbg.json +4 -0
  36. package/artifacts/@openzeppelin/contracts/utils/math/Math.sol/Math.json +10 -0
  37. package/artifacts/@openzeppelin/contracts/utils/math/SignedMath.sol/SignedMath.dbg.json +4 -0
  38. package/artifacts/@openzeppelin/contracts/utils/math/SignedMath.sol/SignedMath.json +10 -0
  39. package/artifacts/@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol/Ownable2StepUpgradeable.dbg.json +1 -1
  40. package/artifacts/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.dbg.json +1 -1
  41. package/artifacts/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.dbg.json +1 -1
  42. package/artifacts/@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol/PausableUpgradeable.dbg.json +4 -0
  43. package/artifacts/@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol/PausableUpgradeable.json +63 -0
  44. package/artifacts/@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol/ReentrancyGuardUpgradeable.dbg.json +1 -1
  45. package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol/IERC20Upgradeable.dbg.json +1 -1
  46. package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol/IERC20PermitUpgradeable.dbg.json +1 -1
  47. package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol/SafeERC20Upgradeable.dbg.json +1 -1
  48. package/artifacts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.dbg.json +1 -1
  49. package/artifacts/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.dbg.json +1 -1
  50. package/artifacts/@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol/AccessControlledV8.dbg.json +1 -1
  51. package/artifacts/@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol/IAccessControlManagerV8.dbg.json +1 -1
  52. package/artifacts/@venusprotocol/oracle/contracts/ResilientOracle.sol/ResilientOracle.dbg.json +4 -0
  53. package/artifacts/@venusprotocol/oracle/contracts/ResilientOracle.sol/ResilientOracle.json +649 -0
  54. package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/BoundValidatorInterface.dbg.json +4 -0
  55. package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/BoundValidatorInterface.json +40 -0
  56. package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/OracleInterface.dbg.json +4 -0
  57. package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/OracleInterface.json +30 -0
  58. package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/ResilientOracleInterface.dbg.json +4 -0
  59. package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/ResilientOracleInterface.json +75 -0
  60. package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/TwapInterface.dbg.json +4 -0
  61. package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/TwapInterface.json +49 -0
  62. package/artifacts/@venusprotocol/oracle/contracts/interfaces/VBep20Interface.sol/VBep20Interface.dbg.json +4 -0
  63. package/artifacts/@venusprotocol/oracle/contracts/interfaces/VBep20Interface.sol/VBep20Interface.json +246 -0
  64. package/artifacts/@venusprotocol/solidity-utilities/contracts/MaxLoopsLimitHelper.sol/MaxLoopsLimitHelper.dbg.json +1 -1
  65. package/artifacts/build-info/e6962244d9988e3e4bb55e591cf3b5d8.json +1 -0
  66. package/artifacts/contracts/Interfaces/IComptroller.sol/IComptroller.dbg.json +4 -0
  67. package/artifacts/contracts/Interfaces/IComptroller.sol/IComptroller.json +56 -0
  68. package/artifacts/contracts/Interfaces/IConverterNetwork.sol/IConverterNetwork.dbg.json +4 -0
  69. package/artifacts/contracts/Interfaces/IConverterNetwork.sol/IConverterNetwork.json +127 -0
  70. package/artifacts/contracts/Interfaces/IIncomeDestination.sol/IIncomeDestination.dbg.json +1 -1
  71. package/artifacts/contracts/Interfaces/IPoolRegistry.sol/IPoolRegistry.dbg.json +4 -0
  72. package/artifacts/contracts/Interfaces/IPoolRegistry.sol/IPoolRegistry.json +54 -0
  73. package/artifacts/contracts/Interfaces/IProtocolShareReserve.sol/IProtocolShareReserve.dbg.json +1 -1
  74. package/artifacts/contracts/Interfaces/IRiskFund.sol/IRiskFund.dbg.json +4 -0
  75. package/artifacts/contracts/Interfaces/IRiskFund.sol/IRiskFund.json +77 -0
  76. package/artifacts/contracts/Interfaces/IRiskFund.sol/IRiskFundGetters.dbg.json +4 -0
  77. package/artifacts/contracts/Interfaces/IRiskFund.sol/IRiskFundGetters.json +24 -0
  78. package/artifacts/contracts/Interfaces/IRiskFundConverter.sol/IRiskFundConverter.dbg.json +4 -0
  79. package/artifacts/contracts/Interfaces/{PoolRegistryInterface.sol/PoolRegistryInterface.json → IRiskFundConverter.sol/IRiskFundConverter.json} +23 -10
  80. package/artifacts/contracts/Interfaces/IShortfall.sol/IShortfall.dbg.json +4 -0
  81. package/artifacts/contracts/Interfaces/IShortfall.sol/IShortfall.json +24 -0
  82. package/artifacts/contracts/Interfaces/IVToken.sol/IVToken.dbg.json +1 -1
  83. package/artifacts/contracts/Interfaces/IXVSVault.sol/IXVSVault.dbg.json +4 -0
  84. package/artifacts/contracts/Interfaces/IXVSVault.sol/IXVSVault.json +24 -0
  85. package/artifacts/contracts/ProtocolReserve/ProtocolShareReserve.sol/ProtocolShareReserve.dbg.json +1 -1
  86. package/artifacts/contracts/ProtocolReserve/ProtocolShareReserve.sol/ProtocolShareReserve.json +7 -2
  87. package/artifacts/contracts/ProtocolReserve/RiskFundStorage.sol/MaxLoopsLimitHelpersStorage.dbg.json +4 -0
  88. package/artifacts/contracts/ProtocolReserve/RiskFundStorage.sol/MaxLoopsLimitHelpersStorage.json +24 -0
  89. package/artifacts/contracts/ProtocolReserve/RiskFundStorage.sol/ReserveHelpersStorage.dbg.json +4 -0
  90. package/artifacts/contracts/ProtocolReserve/RiskFundStorage.sol/ReserveHelpersStorage.json +139 -0
  91. package/artifacts/contracts/ProtocolReserve/RiskFundStorage.sol/RiskFundV1Storage.dbg.json +4 -0
  92. package/artifacts/contracts/ProtocolReserve/RiskFundStorage.sol/RiskFundV1Storage.json +178 -0
  93. package/artifacts/contracts/ProtocolReserve/RiskFundStorage.sol/RiskFundV2Storage.dbg.json +4 -0
  94. package/artifacts/contracts/ProtocolReserve/RiskFundStorage.sol/RiskFundV2Storage.json +191 -0
  95. package/artifacts/contracts/ProtocolReserve/RiskFundV2.sol/RiskFundV2.dbg.json +4 -0
  96. package/artifacts/contracts/ProtocolReserve/RiskFundV2.sol/RiskFundV2.json +630 -0
  97. package/artifacts/contracts/ProtocolReserve/XVSVaultTreasury.sol/XVSVaultTreasury.dbg.json +4 -0
  98. package/artifacts/contracts/ProtocolReserve/XVSVaultTreasury.sol/XVSVaultTreasury.json +315 -0
  99. package/artifacts/contracts/Test/Mocks/MockACM.sol/MockACM.dbg.json +4 -0
  100. package/artifacts/contracts/Test/Mocks/MockACM.sol/MockACM.json +369 -0
  101. package/artifacts/contracts/Test/Mocks/MockArraySorter.sol/MockArraySorter.dbg.json +4 -0
  102. package/artifacts/contracts/Test/Mocks/MockArraySorter.sol/MockArraySorter.json +40 -0
  103. package/artifacts/contracts/Test/Mocks/MockConverter.sol/MockConverter.dbg.json +4 -0
  104. package/artifacts/contracts/Test/Mocks/MockConverter.sol/MockConverter.json +1395 -0
  105. package/artifacts/contracts/Test/Mocks/MockDeflationaryToken.sol/MockDeflatingToken.dbg.json +4 -0
  106. package/artifacts/contracts/Test/Mocks/MockDeflationaryToken.sol/MockDeflatingToken.json +332 -0
  107. package/artifacts/contracts/Test/Mocks/MockRiskFundConverter.sol/MockRiskFundConverter.dbg.json +4 -0
  108. package/artifacts/contracts/Test/Mocks/MockRiskFundConverter.sol/MockRiskFundConverter.json +1761 -0
  109. package/artifacts/contracts/Test/Mocks/MockToken.sol/MockToken.dbg.json +1 -1
  110. package/artifacts/contracts/Test/Mocks/MockToken.sol/MockToken.json +20 -2
  111. package/artifacts/contracts/TokenConverter/AbstractTokenConverter.sol/AbstractTokenConverter.dbg.json +4 -0
  112. package/artifacts/contracts/TokenConverter/AbstractTokenConverter.sol/AbstractTokenConverter.json +1276 -0
  113. package/artifacts/contracts/TokenConverter/ConverterNetwork.sol/ConverterNetwork.dbg.json +4 -0
  114. package/artifacts/contracts/TokenConverter/ConverterNetwork.sol/ConverterNetwork.json +457 -0
  115. package/artifacts/contracts/TokenConverter/IAbstractTokenConverter.sol/IAbstractTokenConverter.dbg.json +4 -0
  116. package/artifacts/contracts/TokenConverter/IAbstractTokenConverter.sol/IAbstractTokenConverter.json +446 -0
  117. package/artifacts/contracts/TokenConverter/RiskFundConverter.sol/RiskFundConverter.dbg.json +4 -0
  118. package/artifacts/contracts/TokenConverter/RiskFundConverter.sol/RiskFundConverter.json +1631 -0
  119. package/artifacts/contracts/TokenConverter/SingleTokenConverter.sol/SingleTokenConverter.dbg.json +4 -0
  120. package/artifacts/contracts/TokenConverter/SingleTokenConverter.sol/SingleTokenConverter.json +1390 -0
  121. package/contracts/Interfaces/IComptroller.sol +10 -0
  122. package/contracts/Interfaces/IConverterNetwork.sol +46 -0
  123. package/contracts/Interfaces/IPoolRegistry.sol +10 -0
  124. package/contracts/Interfaces/IRiskFund.sol +28 -0
  125. package/contracts/Interfaces/IRiskFundConverter.sol +8 -0
  126. package/contracts/Interfaces/IShortfall.sol +11 -0
  127. package/contracts/Interfaces/IXVSVault.sol +9 -0
  128. package/contracts/ProtocolReserve/ProtocolShareReserve.sol +15 -12
  129. package/contracts/ProtocolReserve/RiskFundStorage.sol +67 -0
  130. package/contracts/ProtocolReserve/RiskFundV2.sol +253 -0
  131. package/contracts/ProtocolReserve/XVSVaultTreasury.sol +95 -0
  132. package/contracts/Test/Mocks/MockACM.sol +94 -0
  133. package/contracts/Test/Mocks/MockArraySorter.sol +14 -0
  134. package/contracts/Test/Mocks/MockConverter.sol +70 -0
  135. package/contracts/Test/Mocks/MockDeflationaryToken.sol +113 -0
  136. package/contracts/Test/Mocks/MockRiskFundConverter.sol +45 -0
  137. package/contracts/Test/Mocks/MockToken.sol +4 -0
  138. package/contracts/Test/imports.sol +11 -0
  139. package/contracts/TokenConverter/AbstractTokenConverter.sol +1167 -0
  140. package/contracts/TokenConverter/ConverterNetwork.sol +243 -0
  141. package/contracts/TokenConverter/IAbstractTokenConverter.sol +178 -0
  142. package/contracts/TokenConverter/RiskFundConverter.sol +449 -0
  143. package/contracts/TokenConverter/SingleTokenConverter.sol +103 -0
  144. package/contracts/Utils/ArrayHelpers.sol +41 -0
  145. package/deployments/bscmainnet/BTCBPrimeConverter.json +218 -0
  146. package/deployments/bscmainnet/ConverterNetwork.json +723 -0
  147. package/deployments/bscmainnet/ConverterNetwork_Implementation.json +823 -0
  148. package/deployments/bscmainnet/ConverterNetwork_Proxy.json +277 -0
  149. package/deployments/bscmainnet/ETHPrimeConverter.json +218 -0
  150. package/deployments/bscmainnet/ProtocolShareReserve_Implementation.json +89 -73
  151. package/deployments/bscmainnet/RiskFundConverter.json +2035 -0
  152. package/deployments/bscmainnet/RiskFundConverter_Implementation.json +2563 -0
  153. package/deployments/bscmainnet/RiskFundConverter_Proxy.json +403 -0
  154. package/deployments/bscmainnet/RiskFundV2.json +1049 -0
  155. package/deployments/bscmainnet/SingleTokenConverterBeacon.json +206 -0
  156. package/deployments/bscmainnet/SingleTokenConverterImp.json +2164 -0
  157. package/deployments/bscmainnet/USDCPrimeConverter.json +218 -0
  158. package/deployments/bscmainnet/USDTPrimeConverter.json +218 -0
  159. package/deployments/bscmainnet/XVSVaultConverter.json +218 -0
  160. package/deployments/bscmainnet/XVSVaultTreasury.json +579 -0
  161. package/deployments/bscmainnet/XVSVaultTreasury_Implementation.json +603 -0
  162. package/deployments/bscmainnet/XVSVaultTreasury_Proxy.json +281 -0
  163. package/deployments/bscmainnet/solcInputs/d02e743d886d63634298edb2c3d7a019.json +123 -0
  164. package/deployments/bscmainnet/solcInputs/ee8827a99e03cdf6f6a94fb8782ddf44.json +228 -0
  165. package/deployments/bscmainnet.json +8927 -873
  166. package/deployments/bscmainnet_addresses.json +19 -2
  167. package/deployments/bsctestnet/BTCBPrimeConverter.json +218 -0
  168. package/deployments/bsctestnet/ConverterNetwork.json +723 -0
  169. package/deployments/bsctestnet/ConverterNetwork_Implementation.json +823 -0
  170. package/deployments/bsctestnet/ConverterNetwork_Proxy.json +277 -0
  171. package/deployments/bsctestnet/ETHPrimeConverter.json +218 -0
  172. package/deployments/bsctestnet/ProtocolShareReserve_Implementation.json +89 -73
  173. package/deployments/bsctestnet/RiskFundConverter.json +2035 -0
  174. package/deployments/bsctestnet/RiskFundConverter_Implementation.json +2563 -0
  175. package/deployments/bsctestnet/RiskFundConverter_Proxy.json +403 -0
  176. package/deployments/bsctestnet/RiskFundV2.json +1049 -0
  177. package/deployments/bsctestnet/SingleTokenConverterBeacon.json +206 -0
  178. package/deployments/bsctestnet/SingleTokenConverterImp.json +2164 -0
  179. package/deployments/bsctestnet/USDCPrimeConverter.json +218 -0
  180. package/deployments/bsctestnet/USDTPrimeConverter.json +218 -0
  181. package/deployments/bsctestnet/XVSVaultConverter.json +218 -0
  182. package/deployments/bsctestnet/XVSVaultTreasury.json +579 -0
  183. package/deployments/bsctestnet/XVSVaultTreasury_Implementation.json +603 -0
  184. package/deployments/bsctestnet/XVSVaultTreasury_Proxy.json +281 -0
  185. package/deployments/bsctestnet/solcInputs/d02e743d886d63634298edb2c3d7a019.json +123 -0
  186. package/deployments/bsctestnet/solcInputs/ee8827a99e03cdf6f6a94fb8782ddf44.json +228 -0
  187. package/deployments/bsctestnet.json +8927 -873
  188. package/deployments/bsctestnet_addresses.json +19 -2
  189. package/dist/deploy/{1-deploy.d.ts → 001-psr.d.ts} +1 -1
  190. package/dist/deploy/001-psr.d.ts.map +1 -0
  191. package/dist/deploy/{1-deploy.js → 001-psr.js} +2 -2
  192. package/dist/deploy/001-psr.js.map +1 -0
  193. package/dist/deploy/002-risk-fund-converter.d.ts +4 -0
  194. package/dist/deploy/002-risk-fund-converter.d.ts.map +1 -0
  195. package/dist/deploy/002-risk-fund-converter.js +78 -0
  196. package/dist/deploy/002-risk-fund-converter.js.map +1 -0
  197. package/dist/deploy/003-xvs-vault-teasury.d.ts +7 -0
  198. package/dist/deploy/003-xvs-vault-teasury.d.ts.map +1 -0
  199. package/dist/deploy/003-xvs-vault-teasury.js +45 -0
  200. package/dist/deploy/003-xvs-vault-teasury.js.map +1 -0
  201. package/dist/deploy/004-single-token-converter.d.ts +4 -0
  202. package/dist/deploy/004-single-token-converter.d.ts.map +1 -0
  203. package/dist/deploy/004-single-token-converter.js +65 -0
  204. package/dist/deploy/004-single-token-converter.js.map +1 -0
  205. package/dist/deploy/005-converter-network.d.ts +7 -0
  206. package/dist/deploy/005-converter-network.d.ts.map +1 -0
  207. package/dist/deploy/005-converter-network.js +43 -0
  208. package/dist/deploy/005-converter-network.js.map +1 -0
  209. package/dist/hardhat.config.d.ts.map +1 -1
  210. package/dist/hardhat.config.js +6 -0
  211. package/dist/hardhat.config.js.map +1 -1
  212. package/dist/helpers/utils.d.ts +1 -0
  213. package/dist/helpers/utils.d.ts.map +1 -1
  214. package/dist/helpers/utils.js +2 -1
  215. package/dist/helpers/utils.js.map +1 -1
  216. package/package.json +19 -16
  217. package/typechain/AbstractTokenConverter.d.ts +1775 -0
  218. package/typechain/AccessControl.d.ts +388 -0
  219. package/typechain/BeaconProxy.d.ts +126 -0
  220. package/typechain/BoundValidatorInterface.d.ts +126 -0
  221. package/typechain/ConverterNetwork.d.ts +723 -0
  222. package/typechain/{PoolRegistryInterface.d.ts → ERC165.d.ts} +20 -25
  223. package/typechain/ERC1967Upgrade.d.ts +126 -0
  224. package/typechain/IAbstractTokenConverter.d.ts +773 -0
  225. package/typechain/IBeacon.d.ts +101 -0
  226. package/typechain/IComptroller.d.ts +136 -0
  227. package/typechain/IConverterNetwork.d.ts +292 -0
  228. package/typechain/IERC165.d.ts +116 -0
  229. package/typechain/{ComptrollerInterface.d.ts → IERC1822Proxiable.d.ts} +11 -11
  230. package/typechain/IERC1967.d.ts +126 -0
  231. package/typechain/IPoolRegistry.d.ts +155 -0
  232. package/typechain/IRiskFund.d.ts +200 -0
  233. package/typechain/IRiskFundConverter.d.ts +138 -0
  234. package/typechain/IRiskFundGetters.d.ts +103 -0
  235. package/typechain/IShortfall.d.ts +110 -0
  236. package/typechain/IXVSVault.d.ts +95 -0
  237. package/typechain/MaxLoopsLimitHelpersStorage.d.ts +101 -0
  238. package/typechain/MockACM.d.ts +615 -0
  239. package/typechain/MockArraySorter.d.ts +118 -0
  240. package/typechain/MockConverter.d.ts +1969 -0
  241. package/typechain/MockDeflatingToken.d.ts +486 -0
  242. package/typechain/MockRiskFundConverter.d.ts +2479 -0
  243. package/typechain/MockToken.d.ts +36 -0
  244. package/typechain/OracleInterface.d.ts +98 -0
  245. package/typechain/Ownable.d.ts +181 -0
  246. package/typechain/PausableUpgradeable.d.ts +129 -0
  247. package/typechain/Proxy.d.ts +78 -0
  248. package/typechain/ReserveHelpersStorage.d.ts +300 -0
  249. package/typechain/ResilientOracle.d.ts +1034 -0
  250. package/typechain/ResilientOracleInterface.d.ts +192 -0
  251. package/typechain/RiskFundConverter.d.ts +2235 -0
  252. package/typechain/RiskFundV1Storage.d.ts +353 -0
  253. package/typechain/RiskFundV2.d.ts +965 -0
  254. package/typechain/RiskFundV2Storage.d.ts +372 -0
  255. package/typechain/SingleTokenConverter.d.ts +1944 -0
  256. package/typechain/TwapInterface.d.ts +124 -0
  257. package/typechain/UpgradeableBeacon.d.ts +240 -0
  258. package/typechain/VBep20Interface.d.ts +379 -0
  259. package/typechain/XVSVaultTreasury.d.ts +515 -0
  260. package/typechain/factories/AbstractTokenConverter__factory.ts +1297 -0
  261. package/typechain/factories/AccessControl__factory.ts +227 -0
  262. package/typechain/factories/BeaconProxy__factory.ts +133 -0
  263. package/typechain/factories/BoundValidatorInterface__factory.ts +59 -0
  264. package/typechain/factories/ConverterNetwork__factory.ts +502 -0
  265. package/typechain/factories/ERC165__factory.ts +39 -0
  266. package/typechain/factories/ERC1967Upgrade__factory.ts +71 -0
  267. package/typechain/factories/IAbstractTokenConverter__factory.ts +466 -0
  268. package/typechain/factories/IBeacon__factory.ts +36 -0
  269. package/typechain/factories/IComptroller__factory.ts +68 -0
  270. package/typechain/factories/IConverterNetwork__factory.ts +142 -0
  271. package/typechain/factories/{ComptrollerInterface__factory.ts → IERC165__factory.ts} +14 -15
  272. package/typechain/factories/IERC1822Proxiable__factory.ts +39 -0
  273. package/typechain/factories/IERC1967__factory.ts +68 -0
  274. package/typechain/factories/IPoolRegistry__factory.ts +66 -0
  275. package/typechain/factories/{PoolRegistryInterface__factory.ts → IRiskFundConverter__factory.ts} +28 -19
  276. package/typechain/factories/IRiskFundGetters__factory.ts +39 -0
  277. package/typechain/factories/IRiskFund__factory.ts +89 -0
  278. package/typechain/factories/IShortfall__factory.ts +36 -0
  279. package/typechain/factories/IXVSVault__factory.ts +36 -0
  280. package/typechain/factories/MaxLoopsLimitHelpersStorage__factory.ts +75 -0
  281. package/typechain/factories/MockACM__factory.ts +411 -0
  282. package/typechain/factories/MockArraySorter__factory.ts +85 -0
  283. package/typechain/factories/MockConverter__factory.ts +1439 -0
  284. package/typechain/factories/MockDeflatingToken__factory.ts +389 -0
  285. package/typechain/factories/MockRiskFundConverter__factory.ts +1828 -0
  286. package/typechain/factories/MockToken__factory.ts +19 -1
  287. package/typechain/factories/OracleInterface__factory.ts +45 -0
  288. package/typechain/factories/Ownable__factory.ts +75 -0
  289. package/typechain/factories/PausableUpgradeable__factory.ts +78 -0
  290. package/typechain/factories/ProtocolShareReserve__factory.ts +6 -1
  291. package/typechain/factories/Proxy__factory.ts +28 -0
  292. package/typechain/factories/ReserveHelpersStorage__factory.ts +188 -0
  293. package/typechain/factories/ResilientOracleInterface__factory.ts +94 -0
  294. package/typechain/factories/ResilientOracle__factory.ts +710 -0
  295. package/typechain/factories/RiskFundConverter__factory.ts +1694 -0
  296. package/typechain/factories/RiskFundV1Storage__factory.ts +223 -0
  297. package/typechain/factories/RiskFundV2Storage__factory.ts +236 -0
  298. package/typechain/factories/RiskFundV2__factory.ts +672 -0
  299. package/typechain/factories/SingleTokenConverter__factory.ts +1441 -0
  300. package/typechain/factories/TwapInterface__factory.ts +61 -0
  301. package/typechain/factories/UpgradeableBeacon__factory.ts +163 -0
  302. package/typechain/factories/VBep20Interface__factory.ts +261 -0
  303. package/typechain/factories/XVSVaultTreasury__factory.ts +365 -0
  304. package/typechain/index.ts +84 -4
  305. package/artifacts/build-info/ac790619cb42a0f08af77d9ea733874e.json +0 -1
  306. package/artifacts/contracts/Interfaces/ComptrollerInterface.sol/ComptrollerInterface.dbg.json +0 -4
  307. package/artifacts/contracts/Interfaces/PoolRegistryInterface.sol/PoolRegistryInterface.dbg.json +0 -4
  308. package/contracts/Interfaces/ComptrollerInterface.sol +0 -6
  309. package/contracts/Interfaces/PoolRegistryInterface.sol +0 -7
  310. package/dist/deploy/1-deploy.d.ts.map +0 -1
  311. package/dist/deploy/1-deploy.js.map +0 -1
@@ -0,0 +1,243 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ pragma solidity 0.8.13;
3
+
4
+ import { AccessControlledV8 } from "@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol";
5
+ import { MaxLoopsLimitHelper } from "@venusprotocol/solidity-utilities/contracts/MaxLoopsLimitHelper.sol";
6
+ import { ensureNonzeroAddress } from "@venusprotocol/solidity-utilities/contracts/validators.sol";
7
+
8
+ import { sort } from "../Utils/ArrayHelpers.sol";
9
+ import { IAbstractTokenConverter } from "./IAbstractTokenConverter.sol";
10
+ import { IConverterNetwork } from "../Interfaces/IConverterNetwork.sol";
11
+
12
+ /// @title ConverterNetwork
13
+ /// @author Venus
14
+ /// @notice ConverterNetwork keeps track of all the converters and is used to fetch valid converters which provide conversions according to token addresses provided
15
+ /// @custom:security-contact https://github.com/VenusProtocol/protocol-reserve#discussion
16
+ contract ConverterNetwork is IConverterNetwork, AccessControlledV8, MaxLoopsLimitHelper {
17
+ /// @notice Array holding all the converters
18
+ IAbstractTokenConverter[] public allConverters;
19
+
20
+ /// @notice Emitted when new converter is added
21
+ event ConverterAdded(address indexed converter);
22
+
23
+ /// @notice Emitted when converter is removed
24
+ event ConverterRemoved(address indexed converter);
25
+
26
+ /// @notice Error thrown when converter already exists
27
+ error ConverterAlreadyExists();
28
+
29
+ /// @notice Error thrown converter does not exist
30
+ error ConverterDoesNotExist();
31
+
32
+ /// @notice Error thrown when converter address is invalid
33
+ error InvalidTokenConverterAddress();
34
+
35
+ /// @notice Error thrown when loops limit is invalid
36
+ error InvalidMaxLoopsLimit(uint256 loopsLimit);
37
+
38
+ /// @custom:oz-upgrades-unsafe-allow constructor
39
+ constructor() {
40
+ // Note that the contract is upgradeable. Use initialize() or reinitializers
41
+ // to set the state variables.
42
+ _disableInitializers();
43
+ }
44
+
45
+ /// @notice ConverterNetwork initializer
46
+ /// @param _accessControlManager The address of ACM contract
47
+ /// @param _loopsLimit Limit for the loops in the contract to avoid DOS
48
+ /// @custom:event ConverterAdded is emitted for each converter added on success
49
+ /// @custom:error InvalidMaxLoopsLimit is thrown when when loops limit is invalid
50
+ function initialize(address _accessControlManager, uint256 _loopsLimit) external initializer {
51
+ ensureNonzeroAddress(_accessControlManager);
52
+ __AccessControlled_init(_accessControlManager);
53
+
54
+ if (_loopsLimit >= type(uint128).max) revert InvalidMaxLoopsLimit(_loopsLimit);
55
+ _setMaxLoopsLimit(_loopsLimit);
56
+ }
57
+
58
+ /**
59
+ * @notice Set the limit for the loops can iterate to avoid the DOS
60
+ * @param limit Limit for the max loops can execute at a time
61
+ * @custom:error InvalidMaxLoopsLimit is thrown when when loops limit is invalid
62
+ * @custom:access Only owner
63
+ */
64
+ function setMaxLoopsLimit(uint256 limit) external onlyOwner {
65
+ if (limit >= type(uint128).max) revert InvalidMaxLoopsLimit(limit);
66
+ _setMaxLoopsLimit(limit);
67
+ }
68
+
69
+ /// @notice Adds new converter to the array
70
+ /// @param _tokenConverter Address of the token converter
71
+ /// @custom:event ConverterAdded is emitted on success
72
+ /// @custom:access Only Governance
73
+ function addTokenConverter(IAbstractTokenConverter _tokenConverter) external {
74
+ _checkAccessAllowed("addTokenConverter(address)");
75
+ _addTokenConverter(_tokenConverter);
76
+ }
77
+
78
+ /// @notice Removes converter from the array
79
+ /// @param _tokenConverter Address of the token converter
80
+ /// @custom:error ConverterDoesNotExist is thrown when converter to remove does not exist
81
+ /// @custom:event ConverterRemoved is emitted on success
82
+ /// @custom:access Only Governance
83
+ function removeTokenConverter(IAbstractTokenConverter _tokenConverter) external {
84
+ _checkAccessAllowed("removeTokenConverter(address)");
85
+
86
+ // Find the index of the converter in the array
87
+ uint128 indexToRemove = _findConverterIndex(_tokenConverter);
88
+
89
+ // Ensure that the converter exists in the array
90
+ if (indexToRemove == type(uint128).max) revert ConverterDoesNotExist();
91
+
92
+ // Swap the element to remove with the last element
93
+ allConverters[indexToRemove] = allConverters[allConverters.length - 1];
94
+
95
+ // Remove the last element (which is now a duplicate)
96
+ allConverters.pop();
97
+
98
+ emit ConverterRemoved(address(_tokenConverter));
99
+ }
100
+
101
+ /// @notice Used to get the array of converters supporting conversions, arranged in descending order based on token balances
102
+ /// It will return the converters which are open to users for conversion
103
+ /// @param _tokenAddressIn Address of tokenIn
104
+ /// @param _tokenAddressOut Address of tokenOut
105
+ /// @return converters Array of the conveters on the basis of the tokens pair
106
+ /// @return convertersBalance Array of balances with respect to token out
107
+ function findTokenConverters(address _tokenAddressIn, address _tokenAddressOut)
108
+ external
109
+ returns (address[] memory converters, uint256[] memory convertersBalance)
110
+ {
111
+ (converters, convertersBalance) = _findTokenConverters(_tokenAddressIn, _tokenAddressOut, false);
112
+ }
113
+
114
+ /// @notice Used to get the array of converters supporting conversions, arranged in descending order based on token balances
115
+ /// It will return the converters which are open to converters for conversion.
116
+ /// @param _tokenAddressIn Address of tokenIn
117
+ /// @param _tokenAddressOut Address of tokenOut
118
+ /// @return converters Array of the conveters on the basis of the tokens pair
119
+ /// @return convertersBalance Array of balances with respect to token out
120
+ function findTokenConvertersForConverters(address _tokenAddressIn, address _tokenAddressOut)
121
+ external
122
+ returns (address[] memory converters, uint256[] memory convertersBalance)
123
+ {
124
+ (converters, convertersBalance) = _findTokenConverters(_tokenAddressIn, _tokenAddressOut, true);
125
+ }
126
+
127
+ /// @notice This function returns the array containing all the converters addresses
128
+ /// @return converters Array containing all the converters addresses
129
+ function getAllConverters() external view returns (IAbstractTokenConverter[] memory converters) {
130
+ converters = allConverters;
131
+ }
132
+
133
+ /// @notice This function checks if the given address is a converter or not
134
+ /// @param _tokenConverter Address of the token converter
135
+ /// @return isConverter true if given address is converter otherwise false
136
+ function isTokenConverter(address _tokenConverter) external view returns (bool isConverter) {
137
+ uint128 index = _findConverterIndex(IAbstractTokenConverter(_tokenConverter));
138
+
139
+ if (index != type(uint128).max) {
140
+ isConverter = true;
141
+ }
142
+ }
143
+
144
+ /// @notice Adds new converter contract to the array
145
+ /// @param _tokenConverter Address of the token converter
146
+ /// @custom:error ConverterAlreadyExists is thrown when new tokenconverter to add already exists
147
+ /// @custom:event ConverterAdded is emitted on success
148
+ function _addTokenConverter(IAbstractTokenConverter _tokenConverter) internal {
149
+ if (
150
+ (address(_tokenConverter) == address(0)) || (address(_tokenConverter.converterNetwork()) != address(this))
151
+ ) {
152
+ revert InvalidTokenConverterAddress();
153
+ }
154
+
155
+ uint128 index = _findConverterIndex(_tokenConverter);
156
+ if (index != type(uint128).max) revert ConverterAlreadyExists();
157
+
158
+ allConverters.push(_tokenConverter);
159
+ _ensureMaxLoops(allConverters.length);
160
+
161
+ emit ConverterAdded(address(_tokenConverter));
162
+ }
163
+
164
+ /// @notice Used to get the array of converters supporting conversions, arranged in descending order based on token balances
165
+ /// @param _tokenAddressIn Address of tokenIn
166
+ /// @param _tokenAddressOut Address of tokenOut
167
+ /// @param forConverters Bool to filter out converters on the basis of the conversionAccess
168
+ /// @return converters Array of converters
169
+ /// @return convertersBalance Array of balances with respect to token out
170
+ function _findTokenConverters(
171
+ address _tokenAddressIn,
172
+ address _tokenAddressOut,
173
+ bool forConverters
174
+ ) internal returns (address[] memory converters, uint256[] memory convertersBalance) {
175
+ uint128 convertersLength = uint128(allConverters.length);
176
+
177
+ // Create a dynamic array to store the matching converters
178
+ converters = new address[](convertersLength);
179
+ convertersBalance = new uint256[](convertersLength);
180
+ uint128 count;
181
+
182
+ for (uint128 i; i < convertersLength; ) {
183
+ IAbstractTokenConverter converter = allConverters[i];
184
+
185
+ unchecked {
186
+ ++i;
187
+ }
188
+
189
+ if ((address(converter.converterNetwork()) != address(this)) || msg.sender == address(converter)) {
190
+ continue;
191
+ }
192
+
193
+ (, IAbstractTokenConverter.ConversionAccessibility conversionAccess) = converter.conversionConfigurations(
194
+ _tokenAddressIn,
195
+ _tokenAddressOut
196
+ );
197
+
198
+ if (conversionAccess == IAbstractTokenConverter.ConversionAccessibility.ALL) {
199
+ converters[count] = address(converter);
200
+ convertersBalance[count] = converter.balanceOf(_tokenAddressOut);
201
+ ++count;
202
+ } else if (
203
+ forConverters &&
204
+ (conversionAccess == IAbstractTokenConverter.ConversionAccessibility.ONLY_FOR_CONVERTERS)
205
+ ) {
206
+ converters[count] = address(converter);
207
+ convertersBalance[count] = converter.balanceOf(_tokenAddressOut);
208
+ ++count;
209
+ } else if (
210
+ !forConverters && (conversionAccess == IAbstractTokenConverter.ConversionAccessibility.ONLY_FOR_USERS)
211
+ ) {
212
+ converters[count] = address(converter);
213
+ convertersBalance[count] = converter.balanceOf(_tokenAddressOut);
214
+ ++count;
215
+ }
216
+ }
217
+
218
+ // Resize the array to the actual number of matching converters
219
+ assembly {
220
+ mstore(converters, count)
221
+ mstore(convertersBalance, count)
222
+ }
223
+ sort(convertersBalance, converters);
224
+ }
225
+
226
+ /// @notice Used to get the index of the converter stored in the array
227
+ /// This will return the index if the converter exists in the array otherwise will return type(uint128).max
228
+ /// @param _tokenConverter Address of the token converter
229
+ /// @return index of the converter address in the allConverters array
230
+ function _findConverterIndex(IAbstractTokenConverter _tokenConverter) internal view returns (uint128 index) {
231
+ index = type(uint128).max; // Not found, return a large value
232
+
233
+ uint128 convertersLength = uint128(allConverters.length);
234
+ for (uint128 i; i < convertersLength; ) {
235
+ if (allConverters[i] == _tokenConverter) {
236
+ index = i;
237
+ }
238
+ unchecked {
239
+ ++i;
240
+ }
241
+ }
242
+ }
243
+ }
@@ -0,0 +1,178 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ pragma solidity 0.8.13;
3
+
4
+ import { ResilientOracle } from "@venusprotocol/oracle/contracts/ResilientOracle.sol";
5
+ import { IConverterNetwork } from "../Interfaces/IConverterNetwork.sol";
6
+
7
+ /// @notice Interface for AbstractTokenConverter
8
+ /// @custom:security-contact https://github.com/VenusProtocol/protocol-reserve#discussion
9
+ interface IAbstractTokenConverter {
10
+ /// @notice This enum define the all possible ways of conversion can happen
11
+ enum ConversionAccessibility {
12
+ NONE, // Conversion is disable for the pair
13
+ ALL, // Conversion is enable for private conversion and users
14
+ ONLY_FOR_CONVERTERS, // Conversion is enable only for private conversion
15
+ ONLY_FOR_USERS // Conversion is enable only for users
16
+ }
17
+
18
+ /// @notice This struct represents the configuration for a token conversion.
19
+ struct ConversionConfig {
20
+ /// incentive on conversion of tokens in mantissa i.e 10% incentive would be 0.1 * 1e18
21
+ uint256 incentive;
22
+ /// enable or disable conversion for users or converters or both or none
23
+ ConversionAccessibility conversionAccess;
24
+ }
25
+
26
+ /// @notice Pause conversion of tokens
27
+ function pauseConversion() external;
28
+
29
+ /// @notice Resume conversion of tokens.
30
+ function resumeConversion() external;
31
+
32
+ /// @notice Sets a new price oracle
33
+ /// @param priceOracle_ Address of the new price oracle to set
34
+ function setPriceOracle(ResilientOracle priceOracle_) external;
35
+
36
+ /// @notice Set the configuration for new or existing convert pair
37
+ /// @param tokenAddressIn Address of tokenIn
38
+ /// @param tokenAddressOut Address of tokenOut
39
+ /// @param conversionConfig ConversionConfig config details to update
40
+ function setConversionConfig(
41
+ address tokenAddressIn,
42
+ address tokenAddressOut,
43
+ ConversionConfig calldata conversionConfig
44
+ ) external;
45
+
46
+ /// @notice Convert exact amount of tokenAddressIn for tokenAddressOut
47
+ /// @dev Method does not support deflationary tokens transfer
48
+ /// @param amountInMantissa Amount of tokenAddressIn
49
+ /// @param amountOutMinMantissa Min amount of tokenAddressOut required as output
50
+ /// @param tokenAddressIn Address of the token to convert
51
+ /// @param tokenAddressOut Address of the token to get after convert
52
+ /// @param to Address of the tokenAddressOut receiver
53
+ function convertExactTokens(
54
+ uint256 amountInMantissa,
55
+ uint256 amountOutMinMantissa,
56
+ address tokenAddressIn,
57
+ address tokenAddressOut,
58
+ address to
59
+ ) external returns (uint256 actualAmountIn, uint256 actualAmountOut);
60
+
61
+ /// @notice Convert tokens for tokenAddressIn for exact amount of tokenAddressOut
62
+ /// @dev Method does not support deflationary tokens transfer
63
+ /// @param amountInMaxMantissa Max amount of tokenAddressIn
64
+ /// @param amountOutMantissa Amount of tokenAddressOut required as output
65
+ /// @param tokenAddressIn Address of the token to convert
66
+ /// @param tokenAddressOut Address of the token to get after convert
67
+ /// @param to Address of the tokenAddressOut receiver
68
+ function convertForExactTokens(
69
+ uint256 amountInMaxMantissa,
70
+ uint256 amountOutMantissa,
71
+ address tokenAddressIn,
72
+ address tokenAddressOut,
73
+ address to
74
+ ) external returns (uint256 actualAmountIn, uint256 actualAmountOut);
75
+
76
+ /// @notice Convert exact amount of tokenAddressIn for tokenAddressOut
77
+ /// @param amountInMantissa Amount of tokenAddressIn
78
+ /// @param amountOutMinMantissa Min amount of tokenAddressOut required as output
79
+ /// @param tokenAddressIn Address of the token to convert
80
+ /// @param tokenAddressOut Address of the token to get after convert
81
+ /// @param to Address of the tokenAddressOut receiver
82
+ function convertExactTokensSupportingFeeOnTransferTokens(
83
+ uint256 amountInMantissa,
84
+ uint256 amountOutMinMantissa,
85
+ address tokenAddressIn,
86
+ address tokenAddressOut,
87
+ address to
88
+ ) external returns (uint256 actualAmountIn, uint256 actualAmountOut);
89
+
90
+ /// @notice Convert tokens for tokenAddressIn for exact amount of tokenAddressOut
91
+ /// @param amountInMaxMantissa Max amount of tokenAddressIn
92
+ /// @param amountOutMantissa Amount of tokenAddressOut required as output
93
+ /// @param tokenAddressIn Address of the token to convert
94
+ /// @param tokenAddressOut Address of the token to get after convert
95
+ /// @param to Address of the tokenAddressOut receiver
96
+ function convertForExactTokensSupportingFeeOnTransferTokens(
97
+ uint256 amountInMaxMantissa,
98
+ uint256 amountOutMantissa,
99
+ address tokenAddressIn,
100
+ address tokenAddressOut,
101
+ address to
102
+ ) external returns (uint256 actualAmountIn, uint256 actualAmountOut);
103
+
104
+ /// @notice Get the configuration for the pair of the tokens
105
+ /// @param tokenAddressIn Address of the token to convert
106
+ /// @param tokenAddressOut Address of the token to get after conversion
107
+ /// @return incentives Percentage of incentives to be distributed for the pair of tokens
108
+ /// @return conversionAccess Accessibility for the pair of tokens
109
+ function conversionConfigurations(address tokenAddressIn, address tokenAddressOut)
110
+ external
111
+ returns (uint256 incentives, ConversionAccessibility conversionAccess);
112
+
113
+ /// @notice Get the address of the converterNetwork
114
+ function converterNetwork() external returns (IConverterNetwork converterNetwork);
115
+
116
+ /// @notice To get the amount of tokenAddressOut tokens sender could receive on providing amountInMantissa tokens of tokenAddressIn
117
+ /// @param amountInMantissa Amount of tokenAddressIn
118
+ /// @param tokenAddressIn Address of the token to convert
119
+ /// @param tokenAddressOut Address of the token to get after conversion
120
+ /// @return amountConvertedMantissa Amount of tokenAddressIn should be transferred after conversion
121
+ /// @return amountOutMantissa Amount of the tokenAddressOut sender should receive after conversion
122
+ /// @custom:error InsufficientInputAmount error is thrown when given input amount is zero
123
+ /// @custom:error ConversionConfigNotEnabled is thrown when conversion is disabled or config does not exist for given pair
124
+ function getUpdatedAmountOut(
125
+ uint256 amountInMantissa,
126
+ address tokenAddressIn,
127
+ address tokenAddressOut
128
+ ) external returns (uint256 amountConvertedMantissa, uint256 amountOutMantissa);
129
+
130
+ /// @notice To get the amount of tokenAddressIn tokens sender would send on receiving amountOutMantissa tokens of tokenAddressOut
131
+ /// @param amountOutMantissa Amount of tokenAddressOut user wants to receive
132
+ /// @param tokenAddressIn Address of the token to convert
133
+ /// @param tokenAddressOut Address of the token to get after conversion
134
+ /// @return amountConvertedMantissa Amount of tokenAddressOut should be transferred after conversion
135
+ /// @return amountInMantissa Amount of the tokenAddressIn sender would send to contract before conversion
136
+ /// @custom:error InsufficientInputAmount error is thrown when given input amount is zero
137
+ /// @custom:error ConversionConfigNotEnabled is thrown when conversion is disabled or config does not exist for given pair
138
+ function getUpdatedAmountIn(
139
+ uint256 amountOutMantissa,
140
+ address tokenAddressIn,
141
+ address tokenAddressOut
142
+ ) external returns (uint256 amountConvertedMantissa, uint256 amountInMantissa);
143
+
144
+ /// @notice To get the amount of tokenAddressIn tokens sender would send on receiving amountOutMantissa tokens of tokenAddressOut
145
+ /// @dev This function retrieves values without altering token prices.
146
+ /// @param amountOutMantissa Amount of tokenAddressOut user wants to receive
147
+ /// @param tokenAddressIn Address of the token to convert
148
+ /// @param tokenAddressOut Address of the token to get after conversion
149
+ /// @return amountConvertedMantissa Amount of tokenAddressOut should be transferred after conversion
150
+ /// @return amountInMantissa Amount of the tokenAddressIn sender would send to contract before conversion
151
+ /// @custom:error InsufficientInputAmount error is thrown when given input amount is zero
152
+ /// @custom:error ConversionConfigNotEnabled is thrown when conversion is disabled or config does not exist for given pair
153
+ function getAmountIn(
154
+ uint256 amountOutMantissa,
155
+ address tokenAddressIn,
156
+ address tokenAddressOut
157
+ ) external view returns (uint256 amountConvertedMantissa, uint256 amountInMantissa);
158
+
159
+ /// @notice To get the amount of tokenAddressOut tokens sender could receive on providing amountInMantissa tokens of tokenAddressIn
160
+ /// @dev This function retrieves values without altering token prices.
161
+ /// @param amountInMantissa Amount of tokenAddressIn
162
+ /// @param tokenAddressIn Address of the token to convert
163
+ /// @param tokenAddressOut Address of the token to get after conversion
164
+ /// @return amountConvertedMantissa Amount of tokenAddressIn should be transferred after conversion
165
+ /// @return amountOutMantissa Amount of the tokenAddressOut sender should receive after conversion
166
+ /// @custom:error InsufficientInputAmount error is thrown when given input amount is zero
167
+ /// @custom:error ConversionConfigNotEnabled is thrown when conversion is disabled or config does not exist for given pair
168
+ function getAmountOut(
169
+ uint256 amountInMantissa,
170
+ address tokenAddressIn,
171
+ address tokenAddressOut
172
+ ) external view returns (uint256 amountConvertedMantissa, uint256 amountOutMantissa);
173
+
174
+ /// @notice Get the balance for specific token
175
+ /// @param token Address of the token
176
+ /// @return tokenBalance Balance of the token the contract has
177
+ function balanceOf(address token) external view returns (uint256 tokenBalance);
178
+ }