@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.
- package/README.md +6 -0
- package/artifacts/@openzeppelin/contracts/access/AccessControl.sol/AccessControl.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts/access/AccessControl.sol/AccessControl.json +215 -0
- package/artifacts/@openzeppelin/contracts/access/IAccessControl.sol/IAccessControl.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts/access/Ownable.sol/Ownable.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts/access/Ownable.sol/Ownable.json +63 -0
- package/artifacts/@openzeppelin/contracts/interfaces/IERC1967.sol/IERC1967.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts/interfaces/IERC1967.sol/IERC1967.json +56 -0
- package/artifacts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.json +24 -0
- package/artifacts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol/ERC1967Upgrade.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol/ERC1967Upgrade.json +56 -0
- package/artifacts/@openzeppelin/contracts/proxy/Proxy.sol/Proxy.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts/proxy/Proxy.sol/Proxy.json +19 -0
- package/artifacts/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol/BeaconProxy.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol/BeaconProxy.json +80 -0
- package/artifacts/@openzeppelin/contracts/proxy/beacon/IBeacon.sol/IBeacon.dbg.json +4 -0
- package/artifacts/{contracts/Interfaces/ComptrollerInterface.sol/ComptrollerInterface.json → @openzeppelin/contracts/proxy/beacon/IBeacon.sol/IBeacon.json} +5 -5
- package/artifacts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.json +113 -0
- package/artifacts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts/utils/Address.sol/Address.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts/utils/Address.sol/Address.json +10 -0
- package/artifacts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.json +10 -0
- package/artifacts/@openzeppelin/contracts/utils/Strings.sol/Strings.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts/utils/Strings.sol/Strings.json +10 -0
- package/artifacts/@openzeppelin/contracts/utils/introspection/ERC165.sol/ERC165.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts/utils/introspection/ERC165.sol/ERC165.json +30 -0
- package/artifacts/@openzeppelin/contracts/utils/introspection/IERC165.sol/IERC165.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts/utils/introspection/IERC165.sol/IERC165.json +30 -0
- package/artifacts/@openzeppelin/contracts/utils/math/Math.sol/Math.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts/utils/math/Math.sol/Math.json +10 -0
- package/artifacts/@openzeppelin/contracts/utils/math/SignedMath.sol/SignedMath.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts/utils/math/SignedMath.sol/SignedMath.json +10 -0
- package/artifacts/@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol/Ownable2StepUpgradeable.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol/PausableUpgradeable.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol/PausableUpgradeable.json +63 -0
- package/artifacts/@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol/ReentrancyGuardUpgradeable.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol/IERC20Upgradeable.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol/IERC20PermitUpgradeable.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol/SafeERC20Upgradeable.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.dbg.json +1 -1
- package/artifacts/@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol/AccessControlledV8.dbg.json +1 -1
- package/artifacts/@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol/IAccessControlManagerV8.dbg.json +1 -1
- package/artifacts/@venusprotocol/oracle/contracts/ResilientOracle.sol/ResilientOracle.dbg.json +4 -0
- package/artifacts/@venusprotocol/oracle/contracts/ResilientOracle.sol/ResilientOracle.json +649 -0
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/BoundValidatorInterface.dbg.json +4 -0
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/BoundValidatorInterface.json +40 -0
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/OracleInterface.dbg.json +4 -0
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/OracleInterface.json +30 -0
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/ResilientOracleInterface.dbg.json +4 -0
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/ResilientOracleInterface.json +75 -0
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/TwapInterface.dbg.json +4 -0
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/TwapInterface.json +49 -0
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/VBep20Interface.sol/VBep20Interface.dbg.json +4 -0
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/VBep20Interface.sol/VBep20Interface.json +246 -0
- package/artifacts/@venusprotocol/solidity-utilities/contracts/MaxLoopsLimitHelper.sol/MaxLoopsLimitHelper.dbg.json +1 -1
- package/artifacts/build-info/e6962244d9988e3e4bb55e591cf3b5d8.json +1 -0
- package/artifacts/contracts/Interfaces/IComptroller.sol/IComptroller.dbg.json +4 -0
- package/artifacts/contracts/Interfaces/IComptroller.sol/IComptroller.json +56 -0
- package/artifacts/contracts/Interfaces/IConverterNetwork.sol/IConverterNetwork.dbg.json +4 -0
- package/artifacts/contracts/Interfaces/IConverterNetwork.sol/IConverterNetwork.json +127 -0
- package/artifacts/contracts/Interfaces/IIncomeDestination.sol/IIncomeDestination.dbg.json +1 -1
- package/artifacts/contracts/Interfaces/IPoolRegistry.sol/IPoolRegistry.dbg.json +4 -0
- package/artifacts/contracts/Interfaces/IPoolRegistry.sol/IPoolRegistry.json +54 -0
- package/artifacts/contracts/Interfaces/IProtocolShareReserve.sol/IProtocolShareReserve.dbg.json +1 -1
- package/artifacts/contracts/Interfaces/IRiskFund.sol/IRiskFund.dbg.json +4 -0
- package/artifacts/contracts/Interfaces/IRiskFund.sol/IRiskFund.json +77 -0
- package/artifacts/contracts/Interfaces/IRiskFund.sol/IRiskFundGetters.dbg.json +4 -0
- package/artifacts/contracts/Interfaces/IRiskFund.sol/IRiskFundGetters.json +24 -0
- package/artifacts/contracts/Interfaces/IRiskFundConverter.sol/IRiskFundConverter.dbg.json +4 -0
- package/artifacts/contracts/Interfaces/{PoolRegistryInterface.sol/PoolRegistryInterface.json → IRiskFundConverter.sol/IRiskFundConverter.json} +23 -10
- package/artifacts/contracts/Interfaces/IShortfall.sol/IShortfall.dbg.json +4 -0
- package/artifacts/contracts/Interfaces/IShortfall.sol/IShortfall.json +24 -0
- package/artifacts/contracts/Interfaces/IVToken.sol/IVToken.dbg.json +1 -1
- package/artifacts/contracts/Interfaces/IXVSVault.sol/IXVSVault.dbg.json +4 -0
- package/artifacts/contracts/Interfaces/IXVSVault.sol/IXVSVault.json +24 -0
- package/artifacts/contracts/ProtocolReserve/ProtocolShareReserve.sol/ProtocolShareReserve.dbg.json +1 -1
- package/artifacts/contracts/ProtocolReserve/ProtocolShareReserve.sol/ProtocolShareReserve.json +7 -2
- package/artifacts/contracts/ProtocolReserve/RiskFundStorage.sol/MaxLoopsLimitHelpersStorage.dbg.json +4 -0
- package/artifacts/contracts/ProtocolReserve/RiskFundStorage.sol/MaxLoopsLimitHelpersStorage.json +24 -0
- package/artifacts/contracts/ProtocolReserve/RiskFundStorage.sol/ReserveHelpersStorage.dbg.json +4 -0
- package/artifacts/contracts/ProtocolReserve/RiskFundStorage.sol/ReserveHelpersStorage.json +139 -0
- package/artifacts/contracts/ProtocolReserve/RiskFundStorage.sol/RiskFundV1Storage.dbg.json +4 -0
- package/artifacts/contracts/ProtocolReserve/RiskFundStorage.sol/RiskFundV1Storage.json +178 -0
- package/artifacts/contracts/ProtocolReserve/RiskFundStorage.sol/RiskFundV2Storage.dbg.json +4 -0
- package/artifacts/contracts/ProtocolReserve/RiskFundStorage.sol/RiskFundV2Storage.json +191 -0
- package/artifacts/contracts/ProtocolReserve/RiskFundV2.sol/RiskFundV2.dbg.json +4 -0
- package/artifacts/contracts/ProtocolReserve/RiskFundV2.sol/RiskFundV2.json +630 -0
- package/artifacts/contracts/ProtocolReserve/XVSVaultTreasury.sol/XVSVaultTreasury.dbg.json +4 -0
- package/artifacts/contracts/ProtocolReserve/XVSVaultTreasury.sol/XVSVaultTreasury.json +315 -0
- package/artifacts/contracts/Test/Mocks/MockACM.sol/MockACM.dbg.json +4 -0
- package/artifacts/contracts/Test/Mocks/MockACM.sol/MockACM.json +369 -0
- package/artifacts/contracts/Test/Mocks/MockArraySorter.sol/MockArraySorter.dbg.json +4 -0
- package/artifacts/contracts/Test/Mocks/MockArraySorter.sol/MockArraySorter.json +40 -0
- package/artifacts/contracts/Test/Mocks/MockConverter.sol/MockConverter.dbg.json +4 -0
- package/artifacts/contracts/Test/Mocks/MockConverter.sol/MockConverter.json +1395 -0
- package/artifacts/contracts/Test/Mocks/MockDeflationaryToken.sol/MockDeflatingToken.dbg.json +4 -0
- package/artifacts/contracts/Test/Mocks/MockDeflationaryToken.sol/MockDeflatingToken.json +332 -0
- package/artifacts/contracts/Test/Mocks/MockRiskFundConverter.sol/MockRiskFundConverter.dbg.json +4 -0
- package/artifacts/contracts/Test/Mocks/MockRiskFundConverter.sol/MockRiskFundConverter.json +1761 -0
- package/artifacts/contracts/Test/Mocks/MockToken.sol/MockToken.dbg.json +1 -1
- package/artifacts/contracts/Test/Mocks/MockToken.sol/MockToken.json +20 -2
- package/artifacts/contracts/TokenConverter/AbstractTokenConverter.sol/AbstractTokenConverter.dbg.json +4 -0
- package/artifacts/contracts/TokenConverter/AbstractTokenConverter.sol/AbstractTokenConverter.json +1276 -0
- package/artifacts/contracts/TokenConverter/ConverterNetwork.sol/ConverterNetwork.dbg.json +4 -0
- package/artifacts/contracts/TokenConverter/ConverterNetwork.sol/ConverterNetwork.json +457 -0
- package/artifacts/contracts/TokenConverter/IAbstractTokenConverter.sol/IAbstractTokenConverter.dbg.json +4 -0
- package/artifacts/contracts/TokenConverter/IAbstractTokenConverter.sol/IAbstractTokenConverter.json +446 -0
- package/artifacts/contracts/TokenConverter/RiskFundConverter.sol/RiskFundConverter.dbg.json +4 -0
- package/artifacts/contracts/TokenConverter/RiskFundConverter.sol/RiskFundConverter.json +1631 -0
- package/artifacts/contracts/TokenConverter/SingleTokenConverter.sol/SingleTokenConverter.dbg.json +4 -0
- package/artifacts/contracts/TokenConverter/SingleTokenConverter.sol/SingleTokenConverter.json +1390 -0
- package/contracts/Interfaces/IComptroller.sol +10 -0
- package/contracts/Interfaces/IConverterNetwork.sol +46 -0
- package/contracts/Interfaces/IPoolRegistry.sol +10 -0
- package/contracts/Interfaces/IRiskFund.sol +28 -0
- package/contracts/Interfaces/IRiskFundConverter.sol +8 -0
- package/contracts/Interfaces/IShortfall.sol +11 -0
- package/contracts/Interfaces/IXVSVault.sol +9 -0
- package/contracts/ProtocolReserve/ProtocolShareReserve.sol +15 -12
- package/contracts/ProtocolReserve/RiskFundStorage.sol +67 -0
- package/contracts/ProtocolReserve/RiskFundV2.sol +253 -0
- package/contracts/ProtocolReserve/XVSVaultTreasury.sol +95 -0
- package/contracts/Test/Mocks/MockACM.sol +94 -0
- package/contracts/Test/Mocks/MockArraySorter.sol +14 -0
- package/contracts/Test/Mocks/MockConverter.sol +70 -0
- package/contracts/Test/Mocks/MockDeflationaryToken.sol +113 -0
- package/contracts/Test/Mocks/MockRiskFundConverter.sol +45 -0
- package/contracts/Test/Mocks/MockToken.sol +4 -0
- package/contracts/Test/imports.sol +11 -0
- package/contracts/TokenConverter/AbstractTokenConverter.sol +1167 -0
- package/contracts/TokenConverter/ConverterNetwork.sol +243 -0
- package/contracts/TokenConverter/IAbstractTokenConverter.sol +178 -0
- package/contracts/TokenConverter/RiskFundConverter.sol +449 -0
- package/contracts/TokenConverter/SingleTokenConverter.sol +103 -0
- package/contracts/Utils/ArrayHelpers.sol +41 -0
- package/deployments/bscmainnet/BTCBPrimeConverter.json +218 -0
- package/deployments/bscmainnet/ConverterNetwork.json +723 -0
- package/deployments/bscmainnet/ConverterNetwork_Implementation.json +823 -0
- package/deployments/bscmainnet/ConverterNetwork_Proxy.json +277 -0
- package/deployments/bscmainnet/ETHPrimeConverter.json +218 -0
- package/deployments/bscmainnet/ProtocolShareReserve_Implementation.json +89 -73
- package/deployments/bscmainnet/RiskFundConverter.json +2035 -0
- package/deployments/bscmainnet/RiskFundConverter_Implementation.json +2563 -0
- package/deployments/bscmainnet/RiskFundConverter_Proxy.json +403 -0
- package/deployments/bscmainnet/RiskFundV2.json +1049 -0
- package/deployments/bscmainnet/SingleTokenConverterBeacon.json +206 -0
- package/deployments/bscmainnet/SingleTokenConverterImp.json +2164 -0
- package/deployments/bscmainnet/USDCPrimeConverter.json +218 -0
- package/deployments/bscmainnet/USDTPrimeConverter.json +218 -0
- package/deployments/bscmainnet/XVSVaultConverter.json +218 -0
- package/deployments/bscmainnet/XVSVaultTreasury.json +579 -0
- package/deployments/bscmainnet/XVSVaultTreasury_Implementation.json +603 -0
- package/deployments/bscmainnet/XVSVaultTreasury_Proxy.json +281 -0
- package/deployments/bscmainnet/solcInputs/d02e743d886d63634298edb2c3d7a019.json +123 -0
- package/deployments/bscmainnet/solcInputs/ee8827a99e03cdf6f6a94fb8782ddf44.json +228 -0
- package/deployments/bscmainnet.json +8927 -873
- package/deployments/bscmainnet_addresses.json +19 -2
- package/deployments/bsctestnet/BTCBPrimeConverter.json +218 -0
- package/deployments/bsctestnet/ConverterNetwork.json +723 -0
- package/deployments/bsctestnet/ConverterNetwork_Implementation.json +823 -0
- package/deployments/bsctestnet/ConverterNetwork_Proxy.json +277 -0
- package/deployments/bsctestnet/ETHPrimeConverter.json +218 -0
- package/deployments/bsctestnet/ProtocolShareReserve_Implementation.json +89 -73
- package/deployments/bsctestnet/RiskFundConverter.json +2035 -0
- package/deployments/bsctestnet/RiskFundConverter_Implementation.json +2563 -0
- package/deployments/bsctestnet/RiskFundConverter_Proxy.json +403 -0
- package/deployments/bsctestnet/RiskFundV2.json +1049 -0
- package/deployments/bsctestnet/SingleTokenConverterBeacon.json +206 -0
- package/deployments/bsctestnet/SingleTokenConverterImp.json +2164 -0
- package/deployments/bsctestnet/USDCPrimeConverter.json +218 -0
- package/deployments/bsctestnet/USDTPrimeConverter.json +218 -0
- package/deployments/bsctestnet/XVSVaultConverter.json +218 -0
- package/deployments/bsctestnet/XVSVaultTreasury.json +579 -0
- package/deployments/bsctestnet/XVSVaultTreasury_Implementation.json +603 -0
- package/deployments/bsctestnet/XVSVaultTreasury_Proxy.json +281 -0
- package/deployments/bsctestnet/solcInputs/d02e743d886d63634298edb2c3d7a019.json +123 -0
- package/deployments/bsctestnet/solcInputs/ee8827a99e03cdf6f6a94fb8782ddf44.json +228 -0
- package/deployments/bsctestnet.json +8927 -873
- package/deployments/bsctestnet_addresses.json +19 -2
- package/dist/deploy/{1-deploy.d.ts → 001-psr.d.ts} +1 -1
- package/dist/deploy/001-psr.d.ts.map +1 -0
- package/dist/deploy/{1-deploy.js → 001-psr.js} +2 -2
- package/dist/deploy/001-psr.js.map +1 -0
- package/dist/deploy/002-risk-fund-converter.d.ts +4 -0
- package/dist/deploy/002-risk-fund-converter.d.ts.map +1 -0
- package/dist/deploy/002-risk-fund-converter.js +78 -0
- package/dist/deploy/002-risk-fund-converter.js.map +1 -0
- package/dist/deploy/003-xvs-vault-teasury.d.ts +7 -0
- package/dist/deploy/003-xvs-vault-teasury.d.ts.map +1 -0
- package/dist/deploy/003-xvs-vault-teasury.js +45 -0
- package/dist/deploy/003-xvs-vault-teasury.js.map +1 -0
- package/dist/deploy/004-single-token-converter.d.ts +4 -0
- package/dist/deploy/004-single-token-converter.d.ts.map +1 -0
- package/dist/deploy/004-single-token-converter.js +65 -0
- package/dist/deploy/004-single-token-converter.js.map +1 -0
- package/dist/deploy/005-converter-network.d.ts +7 -0
- package/dist/deploy/005-converter-network.d.ts.map +1 -0
- package/dist/deploy/005-converter-network.js +43 -0
- package/dist/deploy/005-converter-network.js.map +1 -0
- package/dist/hardhat.config.d.ts.map +1 -1
- package/dist/hardhat.config.js +6 -0
- package/dist/hardhat.config.js.map +1 -1
- package/dist/helpers/utils.d.ts +1 -0
- package/dist/helpers/utils.d.ts.map +1 -1
- package/dist/helpers/utils.js +2 -1
- package/dist/helpers/utils.js.map +1 -1
- package/package.json +19 -16
- package/typechain/AbstractTokenConverter.d.ts +1775 -0
- package/typechain/AccessControl.d.ts +388 -0
- package/typechain/BeaconProxy.d.ts +126 -0
- package/typechain/BoundValidatorInterface.d.ts +126 -0
- package/typechain/ConverterNetwork.d.ts +723 -0
- package/typechain/{PoolRegistryInterface.d.ts → ERC165.d.ts} +20 -25
- package/typechain/ERC1967Upgrade.d.ts +126 -0
- package/typechain/IAbstractTokenConverter.d.ts +773 -0
- package/typechain/IBeacon.d.ts +101 -0
- package/typechain/IComptroller.d.ts +136 -0
- package/typechain/IConverterNetwork.d.ts +292 -0
- package/typechain/IERC165.d.ts +116 -0
- package/typechain/{ComptrollerInterface.d.ts → IERC1822Proxiable.d.ts} +11 -11
- package/typechain/IERC1967.d.ts +126 -0
- package/typechain/IPoolRegistry.d.ts +155 -0
- package/typechain/IRiskFund.d.ts +200 -0
- package/typechain/IRiskFundConverter.d.ts +138 -0
- package/typechain/IRiskFundGetters.d.ts +103 -0
- package/typechain/IShortfall.d.ts +110 -0
- package/typechain/IXVSVault.d.ts +95 -0
- package/typechain/MaxLoopsLimitHelpersStorage.d.ts +101 -0
- package/typechain/MockACM.d.ts +615 -0
- package/typechain/MockArraySorter.d.ts +118 -0
- package/typechain/MockConverter.d.ts +1969 -0
- package/typechain/MockDeflatingToken.d.ts +486 -0
- package/typechain/MockRiskFundConverter.d.ts +2479 -0
- package/typechain/MockToken.d.ts +36 -0
- package/typechain/OracleInterface.d.ts +98 -0
- package/typechain/Ownable.d.ts +181 -0
- package/typechain/PausableUpgradeable.d.ts +129 -0
- package/typechain/Proxy.d.ts +78 -0
- package/typechain/ReserveHelpersStorage.d.ts +300 -0
- package/typechain/ResilientOracle.d.ts +1034 -0
- package/typechain/ResilientOracleInterface.d.ts +192 -0
- package/typechain/RiskFundConverter.d.ts +2235 -0
- package/typechain/RiskFundV1Storage.d.ts +353 -0
- package/typechain/RiskFundV2.d.ts +965 -0
- package/typechain/RiskFundV2Storage.d.ts +372 -0
- package/typechain/SingleTokenConverter.d.ts +1944 -0
- package/typechain/TwapInterface.d.ts +124 -0
- package/typechain/UpgradeableBeacon.d.ts +240 -0
- package/typechain/VBep20Interface.d.ts +379 -0
- package/typechain/XVSVaultTreasury.d.ts +515 -0
- package/typechain/factories/AbstractTokenConverter__factory.ts +1297 -0
- package/typechain/factories/AccessControl__factory.ts +227 -0
- package/typechain/factories/BeaconProxy__factory.ts +133 -0
- package/typechain/factories/BoundValidatorInterface__factory.ts +59 -0
- package/typechain/factories/ConverterNetwork__factory.ts +502 -0
- package/typechain/factories/ERC165__factory.ts +39 -0
- package/typechain/factories/ERC1967Upgrade__factory.ts +71 -0
- package/typechain/factories/IAbstractTokenConverter__factory.ts +466 -0
- package/typechain/factories/IBeacon__factory.ts +36 -0
- package/typechain/factories/IComptroller__factory.ts +68 -0
- package/typechain/factories/IConverterNetwork__factory.ts +142 -0
- package/typechain/factories/{ComptrollerInterface__factory.ts → IERC165__factory.ts} +14 -15
- package/typechain/factories/IERC1822Proxiable__factory.ts +39 -0
- package/typechain/factories/IERC1967__factory.ts +68 -0
- package/typechain/factories/IPoolRegistry__factory.ts +66 -0
- package/typechain/factories/{PoolRegistryInterface__factory.ts → IRiskFundConverter__factory.ts} +28 -19
- package/typechain/factories/IRiskFundGetters__factory.ts +39 -0
- package/typechain/factories/IRiskFund__factory.ts +89 -0
- package/typechain/factories/IShortfall__factory.ts +36 -0
- package/typechain/factories/IXVSVault__factory.ts +36 -0
- package/typechain/factories/MaxLoopsLimitHelpersStorage__factory.ts +75 -0
- package/typechain/factories/MockACM__factory.ts +411 -0
- package/typechain/factories/MockArraySorter__factory.ts +85 -0
- package/typechain/factories/MockConverter__factory.ts +1439 -0
- package/typechain/factories/MockDeflatingToken__factory.ts +389 -0
- package/typechain/factories/MockRiskFundConverter__factory.ts +1828 -0
- package/typechain/factories/MockToken__factory.ts +19 -1
- package/typechain/factories/OracleInterface__factory.ts +45 -0
- package/typechain/factories/Ownable__factory.ts +75 -0
- package/typechain/factories/PausableUpgradeable__factory.ts +78 -0
- package/typechain/factories/ProtocolShareReserve__factory.ts +6 -1
- package/typechain/factories/Proxy__factory.ts +28 -0
- package/typechain/factories/ReserveHelpersStorage__factory.ts +188 -0
- package/typechain/factories/ResilientOracleInterface__factory.ts +94 -0
- package/typechain/factories/ResilientOracle__factory.ts +710 -0
- package/typechain/factories/RiskFundConverter__factory.ts +1694 -0
- package/typechain/factories/RiskFundV1Storage__factory.ts +223 -0
- package/typechain/factories/RiskFundV2Storage__factory.ts +236 -0
- package/typechain/factories/RiskFundV2__factory.ts +672 -0
- package/typechain/factories/SingleTokenConverter__factory.ts +1441 -0
- package/typechain/factories/TwapInterface__factory.ts +61 -0
- package/typechain/factories/UpgradeableBeacon__factory.ts +163 -0
- package/typechain/factories/VBep20Interface__factory.ts +261 -0
- package/typechain/factories/XVSVaultTreasury__factory.ts +365 -0
- package/typechain/index.ts +84 -4
- package/artifacts/build-info/ac790619cb42a0f08af77d9ea733874e.json +0 -1
- package/artifacts/contracts/Interfaces/ComptrollerInterface.sol/ComptrollerInterface.dbg.json +0 -4
- package/artifacts/contracts/Interfaces/PoolRegistryInterface.sol/PoolRegistryInterface.dbg.json +0 -4
- package/contracts/Interfaces/ComptrollerInterface.sol +0 -6
- package/contracts/Interfaces/PoolRegistryInterface.sol +0 -7
- package/dist/deploy/1-deploy.d.ts.map +0 -1
- package/dist/deploy/1-deploy.js.map +0 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
pragma solidity 0.8.13;
|
|
3
|
+
|
|
4
|
+
interface IComptroller {
|
|
5
|
+
function isComptroller() external view returns (bool);
|
|
6
|
+
|
|
7
|
+
function markets(address) external view returns (bool);
|
|
8
|
+
|
|
9
|
+
function getAllMarkets() external view returns (address[] memory);
|
|
10
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
pragma solidity 0.8.13;
|
|
3
|
+
|
|
4
|
+
import { IAbstractTokenConverter } from "../TokenConverter/IAbstractTokenConverter.sol";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @title IConverterNetwork
|
|
8
|
+
* @author Venus
|
|
9
|
+
* @notice Interface implemented by `ConverterNetwork`.
|
|
10
|
+
*/
|
|
11
|
+
interface IConverterNetwork {
|
|
12
|
+
/// @notice Adds new converter to the array
|
|
13
|
+
/// @param _tokenConverter Address of the token converter
|
|
14
|
+
function addTokenConverter(IAbstractTokenConverter _tokenConverter) external;
|
|
15
|
+
|
|
16
|
+
/// @notice Removes converter from the array
|
|
17
|
+
/// @param _tokenConverter Address of the token converter
|
|
18
|
+
function removeTokenConverter(IAbstractTokenConverter _tokenConverter) external;
|
|
19
|
+
|
|
20
|
+
/// @notice Used to get the array of converters supporting conversions, arranged in descending order based on token balances
|
|
21
|
+
/// @param _tokenAddressIn Address of tokenIn
|
|
22
|
+
/// @param _tokenAddressOut Address of tokenOut
|
|
23
|
+
/// @return converters Array of the conveters on the basis of the tokens pair
|
|
24
|
+
/// @return convertersBalance Array of balances with respect to token out
|
|
25
|
+
function findTokenConverters(address _tokenAddressIn, address _tokenAddressOut)
|
|
26
|
+
external
|
|
27
|
+
returns (address[] memory converters, uint256[] memory convertersBalance);
|
|
28
|
+
|
|
29
|
+
/// @notice Used to get the array of converters supporting conversions, arranged in descending order based on token balances
|
|
30
|
+
/// @param _tokenAddressIn Address of tokenIn
|
|
31
|
+
/// @param _tokenAddressOut Address of tokenOut
|
|
32
|
+
/// @return converters Array of the conveters on the basis of the tokens pair
|
|
33
|
+
/// @return convertersBalance Array of balances with respect to token out
|
|
34
|
+
function findTokenConvertersForConverters(address _tokenAddressIn, address _tokenAddressOut)
|
|
35
|
+
external
|
|
36
|
+
returns (address[] memory converters, uint256[] memory convertersBalance);
|
|
37
|
+
|
|
38
|
+
/// @notice This function returns the array containing all the converters addresses
|
|
39
|
+
/// @return Array containing all the converters addresses
|
|
40
|
+
function getAllConverters() external view returns (IAbstractTokenConverter[] memory);
|
|
41
|
+
|
|
42
|
+
/// @notice This function checks for given address is converter or not
|
|
43
|
+
/// @param _tokenConverter Address of the token converter
|
|
44
|
+
/// @return boolean true if given address is converter otherwise false
|
|
45
|
+
function isTokenConverter(address _tokenConverter) external view returns (bool);
|
|
46
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
pragma solidity 0.8.13;
|
|
3
|
+
|
|
4
|
+
interface IPoolRegistry {
|
|
5
|
+
/// @notice Get VToken in the Pool for an Asset
|
|
6
|
+
function getVTokenForAsset(address comptroller, address asset) external view returns (address);
|
|
7
|
+
|
|
8
|
+
/// @notice Get the addresss of the Pools supported that include a market for the provided asset
|
|
9
|
+
function getPoolsSupportedByAsset(address asset) external view returns (address[] memory);
|
|
10
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
pragma solidity 0.8.13;
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @title IRiskFund
|
|
6
|
+
* @author Venus
|
|
7
|
+
* @notice Interface implemented by `RiskFund`.
|
|
8
|
+
*/
|
|
9
|
+
interface IRiskFund {
|
|
10
|
+
function transferReserveForAuction(address comptroller, uint256 amount) external returns (uint256);
|
|
11
|
+
|
|
12
|
+
function updatePoolState(
|
|
13
|
+
address comptroller,
|
|
14
|
+
address asset,
|
|
15
|
+
uint256 amount
|
|
16
|
+
) external;
|
|
17
|
+
|
|
18
|
+
function getPoolsBaseAssetReserves(address comptroller) external view returns (uint256);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @title IRiskFundGetters
|
|
23
|
+
* @author Venus
|
|
24
|
+
* @notice Interface implemented by `RiskFund` for getter methods.
|
|
25
|
+
*/
|
|
26
|
+
interface IRiskFundGetters {
|
|
27
|
+
function convertibleBaseAsset() external view returns (address);
|
|
28
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
pragma solidity 0.8.13;
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @title IShortfall
|
|
6
|
+
* @author Venus
|
|
7
|
+
* @notice Interface implemented by `Shortfall`.
|
|
8
|
+
*/
|
|
9
|
+
interface IShortfall {
|
|
10
|
+
function convertibleBaseAsset() external returns (address);
|
|
11
|
+
}
|
|
@@ -5,10 +5,11 @@ import { SafeERC20Upgradeable, IERC20Upgradeable } from "@openzeppelin/contracts
|
|
|
5
5
|
import { AccessControlledV8 } from "@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol";
|
|
6
6
|
import { ReentrancyGuardUpgradeable } from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
|
|
7
7
|
import { MaxLoopsLimitHelper } from "@venusprotocol/solidity-utilities/contracts/MaxLoopsLimitHelper.sol";
|
|
8
|
+
import { ensureNonzeroAddress } from "@venusprotocol/solidity-utilities/contracts/validators.sol";
|
|
8
9
|
|
|
9
10
|
import { IProtocolShareReserve } from "../Interfaces/IProtocolShareReserve.sol";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
11
|
+
import { IComptroller } from "../Interfaces/IComptroller.sol";
|
|
12
|
+
import { IPoolRegistry } from "../Interfaces/IPoolRegistry.sol";
|
|
12
13
|
import { IVToken } from "../Interfaces/IVToken.sol";
|
|
13
14
|
import { IIncomeDestination } from "../Interfaces/IIncomeDestination.sol";
|
|
14
15
|
|
|
@@ -69,7 +70,7 @@ contract ProtocolShareReserve is
|
|
|
69
70
|
/// @notice Emitted when pool registry address is updated
|
|
70
71
|
event PoolRegistryUpdated(address indexed oldPoolRegistry, address indexed newPoolRegistry);
|
|
71
72
|
|
|
72
|
-
/// @notice Event emitted after
|
|
73
|
+
/// @notice Event emitted after updating of the assets reserves.
|
|
73
74
|
event AssetsReservesUpdated(
|
|
74
75
|
address indexed comptroller,
|
|
75
76
|
address indexed asset,
|
|
@@ -122,9 +123,9 @@ contract ProtocolShareReserve is
|
|
|
122
123
|
address _wbnb,
|
|
123
124
|
address _vbnb
|
|
124
125
|
) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
126
|
+
ensureNonzeroAddress(_corePoolComptroller);
|
|
127
|
+
ensureNonzeroAddress(_wbnb);
|
|
128
|
+
ensureNonzeroAddress(_vbnb);
|
|
128
129
|
|
|
129
130
|
CORE_POOL_COMPTROLLER = _corePoolComptroller;
|
|
130
131
|
WBNB = _wbnb;
|
|
@@ -149,9 +150,10 @@ contract ProtocolShareReserve is
|
|
|
149
150
|
/**
|
|
150
151
|
* @dev Pool registry setter.
|
|
151
152
|
* @param _poolRegistry Address of the pool registry
|
|
153
|
+
* @custom:error ZeroAddressNotAllowed is thrown when pool registry address is zero
|
|
152
154
|
*/
|
|
153
155
|
function setPoolRegistry(address _poolRegistry) external onlyOwner {
|
|
154
|
-
|
|
156
|
+
ensureNonzeroAddress(_poolRegistry);
|
|
155
157
|
emit PoolRegistryUpdated(poolRegistry, _poolRegistry);
|
|
156
158
|
poolRegistry = _poolRegistry;
|
|
157
159
|
}
|
|
@@ -165,7 +167,7 @@ contract ProtocolShareReserve is
|
|
|
165
167
|
|
|
166
168
|
for (uint256 i = 0; i < configs.length; ) {
|
|
167
169
|
DistributionConfig memory _config = configs[i];
|
|
168
|
-
|
|
170
|
+
ensureNonzeroAddress(_config.destination);
|
|
169
171
|
|
|
170
172
|
bool updated = false;
|
|
171
173
|
uint256 distributionTargetsLength = distributionTargets.length;
|
|
@@ -313,7 +315,7 @@ contract ProtocolShareReserve is
|
|
|
313
315
|
|
|
314
316
|
/**
|
|
315
317
|
* @dev Update the reserve of the asset for the specific pool after transferring to the protocol share reserve.
|
|
316
|
-
* @param comptroller
|
|
318
|
+
* @param comptroller Comptroller address (pool)
|
|
317
319
|
* @param asset Asset address.
|
|
318
320
|
* @param incomeType type of income
|
|
319
321
|
*/
|
|
@@ -322,11 +324,12 @@ contract ProtocolShareReserve is
|
|
|
322
324
|
address asset,
|
|
323
325
|
IncomeType incomeType
|
|
324
326
|
) public override(IProtocolShareReserve) nonReentrant {
|
|
325
|
-
if (!
|
|
326
|
-
|
|
327
|
+
if (!IComptroller(comptroller).isComptroller()) revert InvalidAddress();
|
|
328
|
+
ensureNonzeroAddress(asset);
|
|
329
|
+
|
|
327
330
|
if (
|
|
328
331
|
comptroller != CORE_POOL_COMPTROLLER &&
|
|
329
|
-
|
|
332
|
+
IPoolRegistry(poolRegistry).getVTokenForAsset(comptroller, asset) == address(0)
|
|
330
333
|
) revert InvalidAddress();
|
|
331
334
|
|
|
332
335
|
Schema schema = _getSchema(incomeType);
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
pragma solidity 0.8.13;
|
|
3
|
+
|
|
4
|
+
import { Ownable2StepUpgradeable } from "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol";
|
|
5
|
+
import { ReentrancyGuardUpgradeable } from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
|
|
6
|
+
|
|
7
|
+
/// @title ReserveHelpersStorage
|
|
8
|
+
/// @author Venus
|
|
9
|
+
/// @dev Reserve helpers storage
|
|
10
|
+
/// @custom:security-contact https://github.com/VenusProtocol/protocol-reserve#discussion
|
|
11
|
+
contract ReserveHelpersStorage is Ownable2StepUpgradeable {
|
|
12
|
+
/// @notice Deprecated slot for assetReserves mapping
|
|
13
|
+
bytes32 private __deprecatedSlot1;
|
|
14
|
+
|
|
15
|
+
/// @notice Available asset's fund per pool in RiskFund
|
|
16
|
+
/// Comptroller(pool) -> Asset -> amount
|
|
17
|
+
mapping(address => mapping(address => uint256)) public poolAssetsFunds;
|
|
18
|
+
|
|
19
|
+
/// @notice Deprecated slot for poolRegistry address
|
|
20
|
+
bytes32 private __deprecatedSlot2;
|
|
21
|
+
/// @notice Deprecated slot for status variable
|
|
22
|
+
bytes32 private __deprecatedSlot3;
|
|
23
|
+
|
|
24
|
+
/// @dev This empty reserved space is put in place to allow future versions to add new
|
|
25
|
+
/// variables without shifting down storage in the inheritance chain.
|
|
26
|
+
uint256[46] private __gap;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/// @title MaxLoopsLimitHelpersStorage
|
|
30
|
+
/// @author Venus
|
|
31
|
+
/// @dev Max loop limit helpers storage
|
|
32
|
+
/// @custom:security-contact https://github.com/VenusProtocol/protocol-reserve#discussion
|
|
33
|
+
contract MaxLoopsLimitHelpersStorage {
|
|
34
|
+
/// @notice Limit for the loops to avoid the DOS
|
|
35
|
+
/// @notice This state is deprecated, using it to prevent storage collision
|
|
36
|
+
uint256 public maxLoopsLimit;
|
|
37
|
+
|
|
38
|
+
/// @dev This empty reserved space is put in place to allow future versions to add new
|
|
39
|
+
/// variables without shifting down storage in the inheritance chain.
|
|
40
|
+
/// See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps
|
|
41
|
+
uint256[49] private __gap;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/// @title RiskFundV1Storage
|
|
45
|
+
/// @author Venus
|
|
46
|
+
/// @dev Risk fund V1 storage
|
|
47
|
+
/// @custom:security-contact https://github.com/VenusProtocol/protocol-reserve#discussion
|
|
48
|
+
contract RiskFundV1Storage is ReserveHelpersStorage, MaxLoopsLimitHelpersStorage {
|
|
49
|
+
/// @notice Address of base asset
|
|
50
|
+
address public convertibleBaseAsset;
|
|
51
|
+
/// @notice Address of shortfall contract
|
|
52
|
+
address public shortfall;
|
|
53
|
+
|
|
54
|
+
/// @notice This state is deprecated, using it to prevent storage collision
|
|
55
|
+
address private pancakeSwapRouter;
|
|
56
|
+
/// @notice This state is deprecated, using it to prevent storage collision
|
|
57
|
+
uint256 private minAmountToConvert;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/// @title RiskFundV2Storage
|
|
61
|
+
/// @author Venus
|
|
62
|
+
/// @dev Risk fund V2 storage
|
|
63
|
+
/// @custom:security-contact https://github.com/VenusProtocol/protocol-reserve#discussion
|
|
64
|
+
contract RiskFundV2Storage is RiskFundV1Storage, ReentrancyGuardUpgradeable {
|
|
65
|
+
/// @notice Risk fund converter address
|
|
66
|
+
address public riskFundConverter;
|
|
67
|
+
}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
pragma solidity 0.8.13;
|
|
3
|
+
|
|
4
|
+
import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
|
|
5
|
+
import { AccessControlledV8 } from "@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol";
|
|
6
|
+
import { SafeERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol";
|
|
7
|
+
import { ensureNonzeroAddress, ensureNonzeroValue } from "@venusprotocol/solidity-utilities/contracts/validators.sol";
|
|
8
|
+
|
|
9
|
+
import { IRiskFund } from "../Interfaces/IRiskFund.sol";
|
|
10
|
+
import { IRiskFundConverter } from "../Interfaces/IRiskFundConverter.sol";
|
|
11
|
+
import { RiskFundV2Storage } from "./RiskFundStorage.sol";
|
|
12
|
+
|
|
13
|
+
/// @title RiskFundV2
|
|
14
|
+
/// @author Venus
|
|
15
|
+
/// @notice Contract with basic features to hold base asset for different Comptrollers
|
|
16
|
+
/// @dev This contract does not support BNB
|
|
17
|
+
/// @custom:security-contact https://github.com/VenusProtocol/protocol-reserve#discussion
|
|
18
|
+
contract RiskFundV2 is AccessControlledV8, RiskFundV2Storage, IRiskFund {
|
|
19
|
+
using SafeERC20Upgradeable for IERC20Upgradeable;
|
|
20
|
+
|
|
21
|
+
/// @notice Emitted when convertible base asset address is updated
|
|
22
|
+
event ConvertibleBaseAssetUpdated(address indexed oldConvertibleBaseAsset, address indexed newConvertibleBaseAsset);
|
|
23
|
+
|
|
24
|
+
/// @notice Emitted when risk fund converter address is updated
|
|
25
|
+
event RiskFundConverterUpdated(address indexed oldRiskFundConverter, address indexed newRiskFundConverter);
|
|
26
|
+
|
|
27
|
+
/// @notice Emitted when shortfall contract address is updated
|
|
28
|
+
event ShortfallContractUpdated(address indexed oldShortfallContract, address indexed newShortfallContract);
|
|
29
|
+
|
|
30
|
+
/// @notice Emitted when reserves are transferred for auction
|
|
31
|
+
event TransferredReserveForAuction(address indexed comptroller, uint256 amount);
|
|
32
|
+
|
|
33
|
+
/// @notice Emitted when pool asset states is updated with amount transferred to this contract
|
|
34
|
+
event PoolAssetsIncreased(address indexed comptroller, address indexed asset, uint256 amount);
|
|
35
|
+
|
|
36
|
+
/// @notice Emitted when pool asset states is updated with amount transferred from this contract on sweeping tokens
|
|
37
|
+
event PoolAssetsDecreased(address indexed comptroller, address indexed asset, uint256 amount);
|
|
38
|
+
|
|
39
|
+
/// @notice Event emitted when tokens are swept
|
|
40
|
+
event SweepToken(address indexed token, address indexed to, uint256 amount);
|
|
41
|
+
|
|
42
|
+
/// @notice Event emitted when tokens are swept and transferred from pool
|
|
43
|
+
event SweepTokenFromPool(address indexed token, address indexed comptroller, uint256 amount);
|
|
44
|
+
|
|
45
|
+
/// @notice Error is thrown when updatePoolState is not called by riskFundConverter
|
|
46
|
+
error InvalidRiskFundConverter();
|
|
47
|
+
|
|
48
|
+
/// @notice Error is thrown when transferReserveForAuction is called by non shortfall address
|
|
49
|
+
error InvalidShortfallAddress();
|
|
50
|
+
|
|
51
|
+
/// @notice thrown when amount entered is greater than balance
|
|
52
|
+
error InsufficientBalance();
|
|
53
|
+
|
|
54
|
+
/// @notice Error is thrown when pool reserve is less than the amount needed
|
|
55
|
+
error InsufficientPoolReserve(address comptroller, uint256 amount, uint256 poolReserve);
|
|
56
|
+
|
|
57
|
+
/// @dev Convertible base asset setter
|
|
58
|
+
/// @param convertibleBaseAsset_ Address of the convertible base asset
|
|
59
|
+
/// @custom:event ConvertibleBaseAssetUpdated emit on success
|
|
60
|
+
/// @custom:error ZeroAddressNotAllowed is thrown when convertible base asset address is zero
|
|
61
|
+
/// @custom:access Only Governance
|
|
62
|
+
function setConvertibleBaseAsset(address convertibleBaseAsset_) external onlyOwner {
|
|
63
|
+
ensureNonzeroAddress(convertibleBaseAsset_);
|
|
64
|
+
emit ConvertibleBaseAssetUpdated(convertibleBaseAsset, convertibleBaseAsset_);
|
|
65
|
+
convertibleBaseAsset = convertibleBaseAsset_;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/// @dev Risk fund converter setter
|
|
69
|
+
/// @param riskFundConverter_ Address of the risk fund converter
|
|
70
|
+
/// @custom:event RiskFundConverterUpdated emit on success
|
|
71
|
+
/// @custom:error ZeroAddressNotAllowed is thrown when risk fund converter address is zero
|
|
72
|
+
/// @custom:access Only Governance
|
|
73
|
+
function setRiskFundConverter(address riskFundConverter_) external onlyOwner {
|
|
74
|
+
ensureNonzeroAddress(riskFundConverter_);
|
|
75
|
+
emit RiskFundConverterUpdated(riskFundConverter, riskFundConverter_);
|
|
76
|
+
riskFundConverter = riskFundConverter_;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/// @dev Shortfall contract address setter
|
|
80
|
+
/// @param shortfallContractAddress_ Address of the auction contract
|
|
81
|
+
/// @custom:event ShortfallContractUpdated emit on success
|
|
82
|
+
/// @custom:error ZeroAddressNotAllowed is thrown when shortfall contract address is zero
|
|
83
|
+
/// @custom:access Only Governance
|
|
84
|
+
function setShortfallContractAddress(address shortfallContractAddress_) external onlyOwner {
|
|
85
|
+
ensureNonzeroAddress(shortfallContractAddress_);
|
|
86
|
+
emit ShortfallContractUpdated(shortfall, shortfallContractAddress_);
|
|
87
|
+
shortfall = shortfallContractAddress_;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/// @dev Transfer tokens for auction to shortfall contract
|
|
91
|
+
/// @param comptroller Comptroller of the pool
|
|
92
|
+
/// @param amount Amount to be transferred to the shortfall
|
|
93
|
+
/// @return Amount of tokens transferred to the shortfall
|
|
94
|
+
/// @custom:event TransferredReserveForAuction emit on success
|
|
95
|
+
/// @custom:error InvalidShortfallAddress is thrown when caller is not shortfall contract
|
|
96
|
+
/// @custom:error InsufficientPoolReserve is thrown when pool reserve is less than the amount needed
|
|
97
|
+
/// @custom:access Only Shortfall contract
|
|
98
|
+
function transferReserveForAuction(address comptroller, uint256 amount)
|
|
99
|
+
external
|
|
100
|
+
override
|
|
101
|
+
nonReentrant
|
|
102
|
+
returns (uint256)
|
|
103
|
+
{
|
|
104
|
+
uint256 poolReserve = poolAssetsFunds[comptroller][convertibleBaseAsset];
|
|
105
|
+
|
|
106
|
+
if (msg.sender != shortfall) {
|
|
107
|
+
revert InvalidShortfallAddress();
|
|
108
|
+
}
|
|
109
|
+
if (amount > poolReserve) {
|
|
110
|
+
revert InsufficientPoolReserve(comptroller, amount, poolReserve);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
unchecked {
|
|
114
|
+
poolAssetsFunds[comptroller][convertibleBaseAsset] = poolReserve - amount;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
IERC20Upgradeable(convertibleBaseAsset).safeTransfer(shortfall, amount);
|
|
118
|
+
emit TransferredReserveForAuction(comptroller, amount);
|
|
119
|
+
|
|
120
|
+
return amount;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/// @notice Function to sweep baseAsset for pool, Tokens are sent to address(to)
|
|
124
|
+
/// @param tokenAddress Address of the asset(token)
|
|
125
|
+
/// @param to Address to which assets will be transferred
|
|
126
|
+
/// @param amount Amount need to sweep for the pool
|
|
127
|
+
/// @custom:event Emits SweepToken event on success
|
|
128
|
+
/// @custom:error ZeroAddressNotAllowed is thrown when tokenAddress/to address is zero
|
|
129
|
+
/// @custom:error ZeroValueNotAllowed is thrown when amount is zero
|
|
130
|
+
/// @custom:access Only Governance
|
|
131
|
+
function sweepToken(
|
|
132
|
+
address tokenAddress,
|
|
133
|
+
address to,
|
|
134
|
+
uint256 amount
|
|
135
|
+
) external onlyOwner nonReentrant {
|
|
136
|
+
ensureNonzeroAddress(tokenAddress);
|
|
137
|
+
ensureNonzeroAddress(to);
|
|
138
|
+
ensureNonzeroValue(amount);
|
|
139
|
+
|
|
140
|
+
IERC20Upgradeable token = IERC20Upgradeable(tokenAddress);
|
|
141
|
+
preSweepToken(tokenAddress, amount);
|
|
142
|
+
token.safeTransfer(to, amount);
|
|
143
|
+
|
|
144
|
+
emit SweepToken(tokenAddress, to, amount);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/// @notice Function to sweep token from pool
|
|
148
|
+
/// @param tokenAddress Address of the asset(token)
|
|
149
|
+
/// @param comptroller Pool address to which assets will be transferred
|
|
150
|
+
/// @param amount Amount need to sweep from the pool
|
|
151
|
+
/// @custom:event Emits sweepTokenFromPool event on success
|
|
152
|
+
/// @custom:error ZeroAddressNotAllowed is thrown when tokenAddress/comptroller address is zero
|
|
153
|
+
/// @custom:error ZeroValueNotAllowed is thrown when amount is zero
|
|
154
|
+
/// @custom:access Only Governance
|
|
155
|
+
function sweepTokenFromPool(
|
|
156
|
+
address tokenAddress,
|
|
157
|
+
address comptroller,
|
|
158
|
+
uint256 amount
|
|
159
|
+
) external onlyOwner nonReentrant {
|
|
160
|
+
ensureNonzeroAddress(tokenAddress);
|
|
161
|
+
ensureNonzeroAddress(comptroller);
|
|
162
|
+
ensureNonzeroValue(amount);
|
|
163
|
+
|
|
164
|
+
uint256 poolReserve = poolAssetsFunds[comptroller][tokenAddress];
|
|
165
|
+
|
|
166
|
+
if (amount > poolReserve) {
|
|
167
|
+
revert InsufficientPoolReserve(comptroller, amount, poolReserve);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
unchecked {
|
|
171
|
+
poolAssetsFunds[comptroller][tokenAddress] = poolReserve - amount;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
IERC20Upgradeable(tokenAddress).safeTransfer(comptroller, amount);
|
|
175
|
+
|
|
176
|
+
emit SweepTokenFromPool(tokenAddress, comptroller, amount);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* @notice Get the Amount of the Base asset in the risk fund for the specific pool.
|
|
181
|
+
* @param comptroller Comptroller address(pool).
|
|
182
|
+
* @return Base Asset's reserve in risk fund.
|
|
183
|
+
*/
|
|
184
|
+
function getPoolsBaseAssetReserves(address comptroller) external view returns (uint256) {
|
|
185
|
+
return poolAssetsFunds[comptroller][convertibleBaseAsset];
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/// @dev Update the reserve of the asset for the specific pool after transferring to risk fund
|
|
189
|
+
/// @param comptroller Comptroller address (pool)
|
|
190
|
+
/// @param asset Address of the asset(token)
|
|
191
|
+
/// @param amount Amount transferred for the pool
|
|
192
|
+
/// @custom:event PoolAssetsIncreased emits on success
|
|
193
|
+
/// @custom:error InvalidRiskFundConverter is thrown if caller is not riskFundConverter contract
|
|
194
|
+
/// @custom:access Only RiskFundConverter contract
|
|
195
|
+
function updatePoolState(
|
|
196
|
+
address comptroller,
|
|
197
|
+
address asset,
|
|
198
|
+
uint256 amount
|
|
199
|
+
) public {
|
|
200
|
+
if (msg.sender != riskFundConverter) {
|
|
201
|
+
revert InvalidRiskFundConverter();
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
poolAssetsFunds[comptroller][asset] += amount;
|
|
205
|
+
emit PoolAssetsIncreased(comptroller, asset, amount);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/// @dev Operations to perform before sweeping tokens
|
|
209
|
+
/// @param tokenAddress Address of the token
|
|
210
|
+
/// @param amount Amount transferred to address(to)
|
|
211
|
+
/// @custom:error InsufficientBalance is thrown when amount entered is greater than balance
|
|
212
|
+
function preSweepToken(address tokenAddress, uint256 amount) internal {
|
|
213
|
+
uint256 balance = IERC20Upgradeable(tokenAddress).balanceOf(address(this));
|
|
214
|
+
if (amount > balance) revert InsufficientBalance();
|
|
215
|
+
|
|
216
|
+
address[] memory pools = IRiskFundConverter(riskFundConverter).getPools(tokenAddress);
|
|
217
|
+
|
|
218
|
+
uint256 assetReserves;
|
|
219
|
+
uint256 poolsLength = pools.length;
|
|
220
|
+
for (uint256 i; i < poolsLength; ) {
|
|
221
|
+
assetReserves += poolAssetsFunds[pools[i]][tokenAddress];
|
|
222
|
+
unchecked {
|
|
223
|
+
++i;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
uint256 balanceDiff = balance - assetReserves;
|
|
228
|
+
|
|
229
|
+
if (balanceDiff < amount) {
|
|
230
|
+
uint256 amountDiff;
|
|
231
|
+
unchecked {
|
|
232
|
+
amountDiff = amount - balanceDiff;
|
|
233
|
+
}
|
|
234
|
+
uint256 distributedShare;
|
|
235
|
+
for (uint256 i; i < poolsLength; ) {
|
|
236
|
+
if (poolAssetsFunds[pools[i]][tokenAddress] != 0) {
|
|
237
|
+
uint256 poolAmountShare;
|
|
238
|
+
if (i < (poolsLength - 1)) {
|
|
239
|
+
poolAmountShare = (poolAssetsFunds[pools[i]][tokenAddress] * amount) / assetReserves;
|
|
240
|
+
distributedShare += poolAmountShare;
|
|
241
|
+
} else {
|
|
242
|
+
poolAmountShare = amountDiff - distributedShare;
|
|
243
|
+
}
|
|
244
|
+
poolAssetsFunds[pools[i]][tokenAddress] -= poolAmountShare;
|
|
245
|
+
emit PoolAssetsDecreased(pools[i], tokenAddress, poolAmountShare);
|
|
246
|
+
}
|
|
247
|
+
unchecked {
|
|
248
|
+
++i;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
pragma solidity 0.8.13;
|
|
3
|
+
|
|
4
|
+
import { SafeERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol";
|
|
5
|
+
import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
|
|
6
|
+
import { AccessControlledV8 } from "@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol";
|
|
7
|
+
import { ReentrancyGuardUpgradeable } from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
|
|
8
|
+
import { ensureNonzeroAddress, ensureNonzeroValue } from "@venusprotocol/solidity-utilities/contracts/validators.sol";
|
|
9
|
+
|
|
10
|
+
import { IXVSVault } from "../Interfaces/IXVSVault.sol";
|
|
11
|
+
|
|
12
|
+
/// @title XVSVaultTreasury
|
|
13
|
+
/// @author Venus
|
|
14
|
+
/// @notice XVSVaultTreasury stores the tokens sent by SingleTokenConverter(XVS) and funds XVSVault
|
|
15
|
+
/// @custom:security-contact https://github.com/VenusProtocol/protocol-reserve#discussion
|
|
16
|
+
contract XVSVaultTreasury is AccessControlledV8, ReentrancyGuardUpgradeable {
|
|
17
|
+
using SafeERC20Upgradeable for IERC20Upgradeable;
|
|
18
|
+
|
|
19
|
+
/// @notice The xvs token address
|
|
20
|
+
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable
|
|
21
|
+
address public immutable XVS_ADDRESS;
|
|
22
|
+
|
|
23
|
+
/// @notice The xvsvault address
|
|
24
|
+
address public xvsVault;
|
|
25
|
+
|
|
26
|
+
/// @notice Emitted when XVS vault address is updated
|
|
27
|
+
event XVSVaultUpdated(address indexed oldXVSVault, address indexed newXVSVault);
|
|
28
|
+
|
|
29
|
+
/// @notice Emitted when funds transferred to XVSStore address
|
|
30
|
+
event FundsTransferredToXVSStore(address indexed xvsStore, uint256 amountMantissa);
|
|
31
|
+
|
|
32
|
+
/// @notice Thrown when given input amount is zero
|
|
33
|
+
error InsufficientBalance();
|
|
34
|
+
|
|
35
|
+
/// @custom:oz-upgrades-unsafe-allow constructor
|
|
36
|
+
/// @param xvsAddress_ XVS token address
|
|
37
|
+
constructor(address xvsAddress_) {
|
|
38
|
+
ensureNonzeroAddress(xvsAddress_);
|
|
39
|
+
XVS_ADDRESS = xvsAddress_;
|
|
40
|
+
|
|
41
|
+
// Note that the contract is upgradeable. Use initialize() or reinitializers
|
|
42
|
+
// to set the state variables.
|
|
43
|
+
_disableInitializers();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/// @param accessControlManager_ Access control manager contract address
|
|
47
|
+
/// @param xvsVault_ XVSVault address
|
|
48
|
+
/// @custom:event XVSVaultUpdated emits on success
|
|
49
|
+
/// @custom:error ZeroAddressNotAllowed is thrown when XVS vault address is zero
|
|
50
|
+
function initialize(address accessControlManager_, address xvsVault_) public initializer {
|
|
51
|
+
__AccessControlled_init(accessControlManager_);
|
|
52
|
+
__ReentrancyGuard_init();
|
|
53
|
+
_setXVSVault(xvsVault_);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/// @dev XVS vault setter
|
|
57
|
+
/// @param xvsVault_ Address of the XVS vault
|
|
58
|
+
/// @custom:event XVSVaultUpdated emits on success
|
|
59
|
+
/// @custom:error ZeroAddressNotAllowed is thrown when XVS vault address is zero
|
|
60
|
+
function setXVSVault(address xvsVault_) external onlyOwner {
|
|
61
|
+
_setXVSVault(xvsVault_);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/// @notice This function transfers funds to the XVS vault
|
|
65
|
+
/// @param amountMantissa Amount to be sent to XVS vault
|
|
66
|
+
/// @custom:event FundsTransferredToXVSStore emits on success
|
|
67
|
+
/// @custom:error InsufficientBalance is thrown when amount entered is greater than balance
|
|
68
|
+
/// @custom:access Restricted by ACM
|
|
69
|
+
function fundXVSVault(uint256 amountMantissa) external nonReentrant {
|
|
70
|
+
_checkAccessAllowed("fundXVSVault(uint256)");
|
|
71
|
+
ensureNonzeroValue(amountMantissa);
|
|
72
|
+
|
|
73
|
+
uint256 balance = IERC20Upgradeable(XVS_ADDRESS).balanceOf(address(this));
|
|
74
|
+
|
|
75
|
+
if (balance < amountMantissa) {
|
|
76
|
+
revert InsufficientBalance();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
address xvsStore = IXVSVault(xvsVault).xvsStore();
|
|
80
|
+
ensureNonzeroAddress(xvsStore);
|
|
81
|
+
IERC20Upgradeable(XVS_ADDRESS).safeTransfer(xvsStore, amountMantissa);
|
|
82
|
+
|
|
83
|
+
emit FundsTransferredToXVSStore(xvsStore, amountMantissa);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/// @dev XVS vault setter
|
|
87
|
+
/// @param xvsVault_ Address of the XVS vault
|
|
88
|
+
/// @custom:event XVSVaultUpdated emits on success
|
|
89
|
+
/// @custom:error ZeroAddressNotAllowed is thrown when XVS vault address is zero
|
|
90
|
+
function _setXVSVault(address xvsVault_) internal {
|
|
91
|
+
ensureNonzeroAddress(xvsVault_);
|
|
92
|
+
emit XVSVaultUpdated(xvsVault, xvsVault_);
|
|
93
|
+
xvsVault = xvsVault_;
|
|
94
|
+
}
|
|
95
|
+
}
|