@venusprotocol/venus-protocol 3.0.0-dev.13 → 3.0.0-dev.14
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 +46 -139
- package/artifacts/@openzeppelin/contracts/access/IAccessControl.sol/IAccessControl.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts/access/IAccessControl.sol/IAccessControl.json +183 -0
- package/artifacts/@openzeppelin/contracts/access/Ownable.sol/Ownable.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts/access/Ownable2Step.sol/Ownable2Step.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol/IERC20Permit.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts/token/ERC20/extensions/{draft-IERC20Permit.sol → IERC20Permit.sol}/IERC20Permit.json +1 -1
- package/artifacts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.json +2 -2
- package/artifacts/@openzeppelin/contracts/utils/Address.sol/Address.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts/utils/Address.sol/Address.json +2 -2
- package/artifacts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json +1 -1
- 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/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/IERC20MetadataUpgradeable.sol/IERC20MetadataUpgradeable.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol/IERC20MetadataUpgradeable.json +233 -0
- package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol/IERC20PermitUpgradeable.dbg.json +4 -0
- package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/{draft-IERC20PermitUpgradeable.sol → IERC20PermitUpgradeable.sol}/IERC20PermitUpgradeable.json +1 -1
- package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol/SafeERC20Upgradeable.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol/SafeERC20Upgradeable.json +2 -2
- package/artifacts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.json +2 -2
- 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 +4 -0
- package/artifacts/@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol/AccessControlledV8.json +181 -0
- package/artifacts/@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol/IAccessControlManagerV8.dbg.json +4 -0
- package/artifacts/@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol/IAccessControlManagerV8.json +282 -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/build-info/ace314491952b59855cb85d2b2f6e8f3.json +1 -0
- package/artifacts/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IComptroller.dbg.json +1 -1
- package/artifacts/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IPriceOracle.dbg.json +1 -1
- package/artifacts/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IVToken.dbg.json +1 -1
- package/artifacts/contracts/DelegateBorrowers/SwapDebtDelegate.sol/SwapDebtDelegate.dbg.json +1 -1
- package/artifacts/contracts/DelegateBorrowers/SwapDebtDelegate.sol/SwapDebtDelegate.json +2 -2
- package/artifacts/contracts/Liquidator/Interfaces.sol/IComptroller.dbg.json +1 -1
- package/artifacts/contracts/Liquidator/Interfaces.sol/IVAIController.dbg.json +1 -1
- package/artifacts/contracts/Liquidator/Interfaces.sol/IVBNB.dbg.json +1 -1
- package/artifacts/contracts/Liquidator/Interfaces.sol/IVBep20.dbg.json +1 -1
- package/artifacts/contracts/Liquidator/Interfaces.sol/IVToken.dbg.json +1 -1
- package/artifacts/contracts/Liquidator/Liquidator.sol/Liquidator.dbg.json +1 -1
- package/artifacts/contracts/Liquidator/Liquidator.sol/Liquidator.json +2 -2
- package/artifacts/contracts/PegStability/IVAI.sol/IVAI.dbg.json +4 -0
- package/artifacts/contracts/PegStability/IVAI.sol/IVAI.json +95 -0
- package/artifacts/contracts/PegStability/PegStability.sol/PegStability.dbg.json +4 -0
- package/artifacts/contracts/PegStability/PegStability.sol/PegStability.json +787 -0
- package/artifacts/contracts/Swap/IRouterHelper.sol/IRouterHelper.dbg.json +1 -1
- package/artifacts/contracts/Swap/RouterHelper.sol/RouterHelper.dbg.json +1 -1
- package/artifacts/contracts/Swap/SwapRouter.sol/SwapRouter.dbg.json +1 -1
- package/artifacts/contracts/Swap/SwapRouter.sol/SwapRouter.json +2 -2
- package/artifacts/contracts/Swap/interfaces/IPancakePair.sol/IPancakePair.dbg.json +1 -1
- package/artifacts/contracts/Swap/interfaces/IPancakeSwapV2Factory.sol/IPancakeSwapV2Factory.dbg.json +1 -1
- package/artifacts/contracts/Swap/interfaces/IPancakeSwapV2Router.sol/IPancakeSwapV2Router.dbg.json +1 -1
- package/artifacts/contracts/Swap/interfaces/IVBNB.sol/IVBNB.dbg.json +1 -1
- package/artifacts/contracts/Swap/interfaces/IVtoken.sol/IVToken.dbg.json +1 -1
- package/artifacts/contracts/Swap/interfaces/IWBNB.sol/IWBNB.dbg.json +1 -1
- package/artifacts/contracts/Swap/interfaces/InterfaceComptroller.sol/InterfaceComptroller.dbg.json +1 -1
- package/artifacts/contracts/Swap/lib/PancakeLibrary.sol/PancakeLibrary.dbg.json +1 -1
- package/artifacts/contracts/Swap/lib/TransferHelper.sol/TransferHelper.dbg.json +1 -1
- package/artifacts/contracts/test/LiquidatorHarness.sol/LiquidatorHarness.dbg.json +1 -1
- package/artifacts/contracts/test/LiquidatorHarness.sol/LiquidatorHarness.json +2 -2
- package/contracts/PegStability/IVAI.sol +12 -0
- package/contracts/PegStability/PegStability.sol +500 -0
- package/deployments/bscmainnet/DefaultProxyAdmin.json +257 -0
- package/deployments/bscmainnet/PegStability_USDT.json +945 -0
- package/deployments/bscmainnet/PegStability_USDT_Implementation.json +1076 -0
- package/deployments/bscmainnet/PegStability_USDT_Proxy.json +267 -0
- package/deployments/bscmainnet/solcInputs/0e89febeebc7444140de8e67c9067d2c.json +78 -0
- package/deployments/bscmainnet/solcInputs/822f68e7114df9df2dc3cc4555bcf616.json +132 -0
- package/deployments/bsctestnet/.migrations.json +3 -0
- package/deployments/bsctestnet/DefaultProxyAdmin.json +257 -0
- package/deployments/bsctestnet/PegStability_USDT.json +945 -0
- package/deployments/bsctestnet/PegStability_USDT_Implementation.json +1076 -0
- package/deployments/bsctestnet/PegStability_USDT_Proxy.json +267 -0
- package/deployments/bsctestnet/solcInputs/0e89febeebc7444140de8e67c9067d2c.json +78 -0
- package/deployments/bsctestnet/solcInputs/6f56db373f5e9158556be1af9ccf91fb.json +132 -0
- package/deployments/bsctestnet/solcInputs/70d128da5db4d0b45c404d3f3fe2c806.json +69 -0
- package/deployments/bsctestnet/solcInputs/76ea5ea1fe9239cc3ffbe46145aeead0.json +69 -0
- package/dist/deploy/006-deploy-psm.d.ts +3 -0
- package/dist/deploy/006-deploy-psm.js +65 -0
- package/dist/deploy/006-update-psm.d.ts +3 -0
- package/dist/deploy/006-update-psm.js +29 -0
- package/dist/hardhat.config.js +2 -2
- package/dist/typechain/@openzeppelin/contracts/access/IAccessControl.d.ts +145 -0
- package/dist/typechain/@openzeppelin/contracts/access/IAccessControl.js +3 -0
- package/dist/typechain/@openzeppelin/contracts/access/index.d.ts +1 -0
- package/dist/typechain/@openzeppelin/contracts/token/ERC20/extensions/{draft-IERC20Permit.sol/IERC20Permit.d.ts → IERC20Permit.d.ts} +1 -1
- package/dist/typechain/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.js +3 -0
- package/dist/typechain/@openzeppelin/contracts/token/ERC20/extensions/index.d.ts +1 -2
- package/dist/typechain/@openzeppelin/contracts/token/ERC20/extensions/index.js +0 -1
- package/dist/typechain/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.d.ts +166 -0
- package/dist/typechain/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/{draft-IERC20PermitUpgradeable.sol/IERC20PermitUpgradeable.d.ts → IERC20PermitUpgradeable.d.ts} +1 -1
- package/dist/typechain/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/index.d.ts +2 -2
- package/dist/typechain/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/index.js +0 -1
- package/dist/typechain/@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.d.ts +172 -0
- package/dist/typechain/@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.js +3 -0
- package/dist/typechain/@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.d.ts +205 -0
- package/dist/typechain/@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.js +3 -0
- package/dist/typechain/@venusprotocol/governance-contracts/contracts/Governance/index.d.ts +2 -0
- package/dist/typechain/@venusprotocol/index.d.ts +2 -0
- package/dist/typechain/@venusprotocol/oracle/contracts/index.d.ts +2 -0
- package/dist/typechain/@venusprotocol/oracle/contracts/index.js +3 -0
- package/dist/typechain/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/BoundValidatorInterface.d.ts +46 -0
- package/dist/typechain/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/BoundValidatorInterface.js +3 -0
- package/dist/typechain/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/OracleInterface.d.ts +42 -0
- package/dist/typechain/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/OracleInterface.js +3 -0
- package/dist/typechain/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/ResilientOracleInterface.d.ts +82 -0
- package/dist/typechain/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/ResilientOracleInterface.js +3 -0
- package/dist/typechain/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/TwapInterface.d.ts +58 -0
- package/dist/typechain/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/TwapInterface.js +3 -0
- package/dist/typechain/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/index.d.ts +4 -0
- package/dist/typechain/@venusprotocol/oracle/contracts/interfaces/index.d.ts +2 -0
- package/dist/typechain/@venusprotocol/oracle/contracts/interfaces/index.js +3 -0
- package/dist/typechain/@venusprotocol/oracle/index.d.ts +2 -0
- package/dist/typechain/@venusprotocol/oracle/index.js +3 -0
- package/dist/typechain/contracts/PegStability/IVAI.d.ts +102 -0
- package/dist/typechain/contracts/PegStability/IVAI.js +3 -0
- package/dist/typechain/contracts/PegStability/PegStability.d.ts +564 -0
- package/dist/typechain/contracts/PegStability/PegStability.js +3 -0
- package/dist/typechain/contracts/PegStability/index.d.ts +2 -0
- package/dist/typechain/contracts/index.d.ts +2 -0
- package/dist/typechain/factories/@openzeppelin/contracts/access/IAccessControl__factory.d.ts +142 -0
- package/dist/typechain/factories/@openzeppelin/contracts/access/IAccessControl__factory.js +189 -0
- package/dist/typechain/factories/@openzeppelin/contracts/access/index.d.ts +1 -0
- package/dist/typechain/factories/@openzeppelin/contracts/access/index.js +3 -1
- package/dist/typechain/factories/@openzeppelin/contracts/token/ERC20/extensions/{draft-IERC20Permit.sol/IERC20Permit__factory.d.ts → IERC20Permit__factory.d.ts} +1 -1
- package/dist/typechain/factories/@openzeppelin/contracts/token/ERC20/extensions/index.d.ts +1 -1
- package/dist/typechain/factories/@openzeppelin/contracts/token/ERC20/extensions/index.js +3 -25
- package/dist/typechain/factories/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable__factory.d.ts +178 -0
- package/dist/typechain/factories/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable__factory.js +239 -0
- package/dist/typechain/factories/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/{draft-IERC20PermitUpgradeable.sol/IERC20PermitUpgradeable__factory.d.ts → IERC20PermitUpgradeable__factory.d.ts} +1 -1
- package/dist/typechain/factories/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/index.d.ts +2 -1
- package/dist/typechain/factories/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/index.js +5 -25
- package/dist/typechain/factories/@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8__factory.d.ts +141 -0
- package/dist/typechain/factories/@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8__factory.js +187 -0
- package/dist/typechain/factories/@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8__factory.d.ts +218 -0
- package/dist/typechain/factories/@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8__factory.js +288 -0
- package/dist/typechain/factories/@venusprotocol/governance-contracts/contracts/Governance/index.d.ts +2 -0
- package/dist/typechain/factories/@venusprotocol/governance-contracts/contracts/Governance/index.js +5 -1
- package/dist/typechain/factories/@venusprotocol/index.d.ts +1 -0
- package/dist/typechain/factories/@venusprotocol/index.js +2 -1
- package/dist/typechain/factories/@venusprotocol/oracle/contracts/index.d.ts +1 -0
- package/dist/typechain/factories/@venusprotocol/oracle/contracts/index.js +30 -0
- package/dist/typechain/factories/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/BoundValidatorInterface__factory.d.ts +30 -0
- package/dist/typechain/factories/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/BoundValidatorInterface__factory.js +46 -0
- package/dist/typechain/factories/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/OracleInterface__factory.d.ts +22 -0
- package/dist/typechain/factories/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/OracleInterface__factory.js +36 -0
- package/dist/typechain/factories/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/ResilientOracleInterface__factory.d.ts +56 -0
- package/dist/typechain/factories/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/ResilientOracleInterface__factory.js +81 -0
- package/dist/typechain/factories/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/TwapInterface__factory.d.ts +36 -0
- package/dist/typechain/factories/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/TwapInterface__factory.js +55 -0
- package/dist/typechain/factories/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/index.d.ts +4 -0
- package/dist/typechain/factories/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/index.js +14 -0
- package/dist/typechain/factories/@venusprotocol/oracle/contracts/interfaces/index.d.ts +1 -0
- package/dist/typechain/factories/@venusprotocol/oracle/contracts/interfaces/index.js +30 -0
- package/dist/typechain/factories/@venusprotocol/oracle/index.d.ts +1 -0
- package/dist/typechain/factories/@venusprotocol/oracle/index.js +30 -0
- package/dist/typechain/factories/contracts/DelegateBorrowers/SwapDebtDelegate.sol/SwapDebtDelegate__factory.d.ts +1 -1
- package/dist/typechain/factories/contracts/DelegateBorrowers/SwapDebtDelegate.sol/SwapDebtDelegate__factory.js +1 -1
- package/dist/typechain/factories/contracts/Liquidator/Liquidator__factory.d.ts +1 -1
- package/dist/typechain/factories/contracts/Liquidator/Liquidator__factory.js +1 -1
- package/dist/typechain/factories/contracts/PegStability/IVAI__factory.d.ts +72 -0
- package/dist/typechain/factories/contracts/PegStability/IVAI__factory.js +101 -0
- package/dist/typechain/factories/contracts/PegStability/PegStability__factory.d.ts +625 -0
- package/dist/typechain/factories/contracts/PegStability/PegStability__factory.js +816 -0
- package/dist/typechain/factories/contracts/PegStability/index.d.ts +2 -0
- package/dist/typechain/factories/contracts/PegStability/index.js +10 -0
- package/dist/typechain/factories/contracts/Swap/SwapRouter__factory.d.ts +1 -1
- package/dist/typechain/factories/contracts/Swap/SwapRouter__factory.js +1 -1
- package/dist/typechain/factories/contracts/index.d.ts +1 -0
- package/dist/typechain/factories/contracts/index.js +2 -1
- package/dist/typechain/factories/contracts/test/LiquidatorHarness__factory.d.ts +1 -1
- package/dist/typechain/factories/contracts/test/LiquidatorHarness__factory.js +1 -1
- package/dist/typechain/index.d.ts +24 -4
- package/dist/typechain/index.js +27 -7
- package/package.json +2 -1
- package/artifacts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.dbg.json +0 -4
- package/artifacts/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol/IERC20PermitUpgradeable.dbg.json +0 -4
- package/artifacts/build-info/7ba4636f17a9306e510e09b5ee7b87c3.json +0 -1
- package/dist/typechain/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.d.ts +0 -1
- package/dist/typechain/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol/index.d.ts +0 -1
- package/dist/typechain/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.d.ts +0 -1
- package/dist/typechain/factories/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/index.js +0 -8
- package/dist/typechain/factories/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol/index.d.ts +0 -1
- package/dist/typechain/factories/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol/index.js +0 -8
- /package/dist/typechain/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/{draft-IERC20PermitUpgradeable.sol/IERC20PermitUpgradeable.js → IERC20MetadataUpgradeable.js} +0 -0
- /package/dist/typechain/@openzeppelin/{contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.js → contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.js} +0 -0
- /package/dist/typechain/{@openzeppelin/contracts-upgradeable/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol → @venusprotocol/oracle/contracts/interfaces/OracleInterface.sol}/index.js +0 -0
- /package/dist/typechain/{@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol → contracts/PegStability}/index.js +0 -0
- /package/dist/typechain/factories/@openzeppelin/contracts/token/ERC20/extensions/{draft-IERC20Permit.sol/IERC20Permit__factory.js → IERC20Permit__factory.js} +0 -0
- /package/dist/typechain/factories/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/{draft-IERC20PermitUpgradeable.sol/IERC20PermitUpgradeable__factory.js → IERC20PermitUpgradeable__factory.js} +0 -0
|
@@ -696,8 +696,8 @@
|
|
|
696
696
|
"type": "function"
|
|
697
697
|
}
|
|
698
698
|
],
|
|
699
|
-
"bytecode": "0x6101006040523480156200001257600080fd5b5060405162002050380380620020508339810160408190526200003591620001fc565b8282826200004382620000f9565b6200004e83620000f9565b6200005981620000f9565b6001600160a01b03808316608052831660a081905260408051639254f5e560e01b81529051639254f5e5916004808201926020929091908290030181865afa158015620000aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d0919062000250565b6001600160a01b0390811660c052811660e052620000ed62000124565b50505050505062000277565b6001600160a01b038116620001215760405163f5bf603960e01b815260040160405180910390fd5b50565b600054610100900460ff1615620001915760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620001e4576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200012157600080fd5b6000806000606084860312156200021257600080fd5b83516200021f81620001e6565b60208501519093506200023281620001e6565b60408501519092506200024581620001e6565b809150509250925092565b6000602082840312156200026357600080fd5b81516200027081620001e6565b9392505050565b60805160a05160c05160e051611d52620002fe60003960008181610253015281816111d401526112710152600081816103660152818161076201528181610e3101528181610ed701528181610f0c0152610f6201526000818161021f015281816112d201526113900152600081816101d30152818161064e01526106d50152611d526000f3fe60806040526004361061012a5760003560e01c80638765adcb116100ab578063b26461de1161006f578063b26461de14610388578063bbd98d70146103b8578063e30c3978146103ed578063f2531ea11461040b578063f2fde38b1461042b578063fe4b84df1461044b57600080fd5b80638765adcb146102d257806389a2bc25146102f25780638da5cb5b146103125780638e3525fc146103305780639254f5e51461035457600080fd5b806361d027b3116100f257806361d027b31461024157806364fd707814610275578063715018a61461028857806379ba50971461029d5780637debe3fe146102b257600080fd5b806311ec4b7a1461012f57806344b3716a1461015157806347a6a971146101a15780635ba3792d146101c15780635fe3b5671461020d575b600080fd5b34801561013b57600080fd5b5061014f61014a366004611a77565b61046b565b005b34801561015d57600080fd5b5061018c61016c366004611a9b565b60ca60209081526000928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b3480156101ad57600080fd5b5061014f6101bc366004611a9b565b610509565b3480156101cd57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610198565b34801561021957600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561024d57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b61014f610283366004611ad4565b6105c4565b34801561029457600080fd5b5061014f6108b3565b3480156102a957600080fd5b5061014f6108c7565b3480156102be57600080fd5b5061014f6102cd366004611a9b565b610941565b3480156102de57600080fd5b5061014f6102ed366004611a77565b610a00565b3480156102fe57600080fd5b5061014f61030d366004611b27565b610a95565b34801561031e57600080fd5b506033546001600160a01b03166101f5565b34801561033c57600080fd5b5061034660c95481565b604051908152602001610198565b34801561036057600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561039457600080fd5b5061018c6103a3366004611a77565b60cb6020526000908152604090205460ff1681565b3480156103c457600080fd5b506103d86103d3366004611b40565b610ae7565b60408051928352602083019190915201610198565b3480156103f957600080fd5b506065546001600160a01b03166101f5565b34801561041757600080fd5b506103d8610426366004611b27565b610b3b565b34801561043757600080fd5b5061014f610446366004611a77565b610b50565b34801561045757600080fd5b5061014f610466366004611b27565b610bc1565b610473610cd4565b6001600160a01b038116600090815260cb602052604090205460ff16156104bd5760405163404fe9fb60e11b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b038116600081815260cb6020526040808220805460ff19166001179055517f614c47c82976e8f145409efb6366fe2cefa323f389ed9354649262e38dbb35899190a250565b610511610cd4565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff1661056a5760405163435aad4360e01b81526001600160a01b038084166004830152821660248201526044016104b4565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19169055517f6b0d38eafddac0d37e0aff8f4bbd5f3a3cfe124b8eabea27558bffc931ac05b59190a35050565b6105cc610d2e565b6105d583610d87565b6105df8333610dae565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a9190611b6c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031603610738573483146106ae5760405163dd97100160e01b8152600481018490523460248201526044016104b4565b604051635572051560e11b81526001600160a01b03858116600483015283811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063aae40a2a9034906044016000604051808303818588803b15801561071a57600080fd5b505af115801561072e573d6000803e3d6000fd5b50505050506107b5565b34156107605760405163dd97100160e01b8152600060048201523460248201526044016104b4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316036107a9576107a4848484610e2d565b6107b5565b6107b585858585610fe3565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108209190611b6c565b9050600061082e8383611b9b565b905060008061083d868461110f565b604080518a81526001600160a01b038d811660208301529181018490526060810183905292945090925080881691908a169033907fdd091524d794aecdb5235b2d816620c2598790835e0f3849808504c2dcb4f1a99060800160405180910390a450505050506108ad6001609755565b50505050565b6108bb610cd4565b6108c560006112ac565b565b60655433906001600160a01b031681146109355760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016104b4565b61093e816112ac565b50565b610949610cd4565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16156109a35760405163071df39160e01b81526001600160a01b038084166004830152821660248201526044016104b4565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19166001179055517ffe40417b78788808c927141f806ef5082e7bba0f7790f2e85b811621a91094339190a35050565b610a08610cd4565b6001600160a01b038116600090815260cb602052604090205460ff16610a4c57604051633bf9d98960e11b81526001600160a01b03821660048201526024016104b4565b6001600160a01b038116600081815260cb6020526040808220805460ff19169055517fe1f03de94d16c262d2f0e89a1c42ede8899d540ac992cf53495a5cf29c2896af9190a250565b610a9d610cd4565b610aa6816112c5565b60c95460408051918252602082018390527f0e9a1641744b21c49e4183ab9ce941d420e05a05a446c71875fb07814f362c1a910160405180910390a160c955565b600080610af4848461110f565b60408051838152602081018390529294509092507f965c73d6a816dcbe4cc33516168787cb029afb2156ec3372a16e8c6cfbbe6e22910160405180910390a15b9250929050565b600080610b4783611389565b91509150915091565b610b58610cd4565b606580546001600160a01b0383166001600160a01b03199091168117909155610b896033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600054610100900460ff1615808015610be15750600054600160ff909116105b80610bfb5750303b158015610bfb575060005460ff166001145b610c5e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104b4565b6000805460ff191660011790558015610c81576000805461ff0019166101001790555b610c8a8261143f565b8015610cd0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146108c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b4565b600260975403610d805760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104b4565b6002609755565b6001600160a01b03811661093e5760405163f5bf603960e01b815260040160405180910390fd5b6001600160a01b038216600090815260cb602052604090205460ff168015610dfc57506001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16155b15610cd05760405163074c80eb60e51b81526001600160a01b038084166004830152821660248201526044016104b4565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cbeb2b286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb19190611bb2565b9050610ec86001600160a01b03821633308661147f565b610efd6001600160a01b0382167f000000000000000000000000000000000000000000000000000000000000000060006114ea565b610f316001600160a01b0382167f0000000000000000000000000000000000000000000000000000000000000000856114ea565b6040516311b3d5e760e01b81526001600160a01b0385811660048301526024820185905283811660448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906311b3d5e79060640160408051808303816000875af1158015610fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd09190611bcf565b509050610fdc81611604565b5050505050565b6000846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110479190611bb2565b9050600061105782333087611628565b905061106e6001600160a01b0383168760006114ea565b6110826001600160a01b03831687836114ea565b604051637af1e23160e11b81526001600160a01b038681166004830152602482018390528481166044830152611107919088169063f5e3c462906064016020604051808303816000875af11580156110de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111029190611b6c565b611604565b505050505050565b60008061111b83611389565b60405163a9059cbb60e01b81523360048201526024810182905291935091506001600160a01b0385169063a9059cbb906044016020604051808303816000875af115801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190611bf3565b6111bd5760405163241165bb60e21b8152306004820152336024820152604481018290526064016104b4565b60405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112509190611bf3565b610b345760405163241165bb60e21b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604481018390526064016104b4565b6001609755565b606580546001600160a01b031916905561093e81611731565b6000670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561132e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113529190611b6c565b61135c9190611b9b565b905080821115610cd057604051635659cb3b60e01b815260048101829052602481018390526044016104b4565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190611b6c565b90508060c954856114219190611c15565b61142b9190611c34565b92506114378385611b9b565b915050915091565b600054610100900460ff166114665760405162461bcd60e51b81526004016104b490611c56565b61146e611783565b6114766117b2565b61093e816117e1565b6040516001600160a01b03808516602483015283166044820152606481018290526108ad9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611816565b8015806115645750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561153e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115629190611b6c565b155b6115cf5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016104b4565b6040516001600160a01b0383166024820152604481018290526115ff90849063095ea7b360e01b906064016114b3565b505050565b8061160c5750565b60405163125a96ab60e01b8152600481018290526024016104b4565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918716906370a0823190602401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190611b6c565b90506116ae6001600160a01b03871686868661147f565b6040516370a0823160e01b81526001600160a01b0385811660048301528291908816906370a0823190602401602060405180830381865afa1580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b9190611b6c565b6117259190611b9b565b9150505b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166117aa5760405162461bcd60e51b81526004016104b490611c56565b6108c56118e8565b600054610100900460ff166117d95760405162461bcd60e51b81526004016104b490611c56565b6108c5611918565b600054610100900460ff166118085760405162461bcd60e51b81526004016104b490611c56565b611811816112c5565b60c955565b600061186b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661193f9092919063ffffffff16565b8051909150156115ff57808060200190518101906118899190611bf3565b6115ff5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104b4565b600054610100900460ff1661190f5760405162461bcd60e51b81526004016104b490611c56565b6108c5336112ac565b600054610100900460ff166112a55760405162461bcd60e51b81526004016104b490611c56565b6060611729848460008585600080866001600160a01b031685876040516119669190611ccd565b60006040518083038185875af1925050503d80600081146119a3576040519150601f19603f3d011682016040523d82523d6000602084013e6119a8565b606091505b50915091506119b9878383876119c4565b979650505050505050565b60608315611a33578251600003611a2c576001600160a01b0385163b611a2c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104b4565b5081611729565b6117298383815115611a485781518083602001fd5b8060405162461bcd60e51b81526004016104b49190611ce9565b6001600160a01b038116811461093e57600080fd5b600060208284031215611a8957600080fd5b8135611a9481611a62565b9392505050565b60008060408385031215611aae57600080fd5b8235611ab981611a62565b91506020830135611ac981611a62565b809150509250929050565b60008060008060808587031215611aea57600080fd5b8435611af581611a62565b93506020850135611b0581611a62565b9250604085013591506060850135611b1c81611a62565b939692955090935050565b600060208284031215611b3957600080fd5b5035919050565b60008060408385031215611b5357600080fd5b8235611b5e81611a62565b946020939093013593505050565b600060208284031215611b7e57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015611bad57611bad611b85565b500390565b600060208284031215611bc457600080fd5b8151611a9481611a62565b60008060408385031215611be257600080fd5b505080516020909101519092909150565b600060208284031215611c0557600080fd5b81518015158114611a9457600080fd5b6000816000190483118215151615611c2f57611c2f611b85565b500290565b600082611c5157634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b83811015611cbc578181015183820152602001611ca4565b838111156108ad5750506000910152565b60008251611cdf818460208701611ca1565b9190910192915050565b6020815260008251806020840152611d08816040850160208701611ca1565b601f01601f1916919091016040019291505056fea26469706673582212206f1ea04b4427ef257842fa6e19f5bfe6b55b6a3956868e9936c0a5fd3277a13464736f6c634300080d0033",
|
|
700
|
-
"deployedBytecode": "0x60806040526004361061012a5760003560e01c80638765adcb116100ab578063b26461de1161006f578063b26461de14610388578063bbd98d70146103b8578063e30c3978146103ed578063f2531ea11461040b578063f2fde38b1461042b578063fe4b84df1461044b57600080fd5b80638765adcb146102d257806389a2bc25146102f25780638da5cb5b146103125780638e3525fc146103305780639254f5e51461035457600080fd5b806361d027b3116100f257806361d027b31461024157806364fd707814610275578063715018a61461028857806379ba50971461029d5780637debe3fe146102b257600080fd5b806311ec4b7a1461012f57806344b3716a1461015157806347a6a971146101a15780635ba3792d146101c15780635fe3b5671461020d575b600080fd5b34801561013b57600080fd5b5061014f61014a366004611a77565b61046b565b005b34801561015d57600080fd5b5061018c61016c366004611a9b565b60ca60209081526000928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b3480156101ad57600080fd5b5061014f6101bc366004611a9b565b610509565b3480156101cd57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610198565b34801561021957600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561024d57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b61014f610283366004611ad4565b6105c4565b34801561029457600080fd5b5061014f6108b3565b3480156102a957600080fd5b5061014f6108c7565b3480156102be57600080fd5b5061014f6102cd366004611a9b565b610941565b3480156102de57600080fd5b5061014f6102ed366004611a77565b610a00565b3480156102fe57600080fd5b5061014f61030d366004611b27565b610a95565b34801561031e57600080fd5b506033546001600160a01b03166101f5565b34801561033c57600080fd5b5061034660c95481565b604051908152602001610198565b34801561036057600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561039457600080fd5b5061018c6103a3366004611a77565b60cb6020526000908152604090205460ff1681565b3480156103c457600080fd5b506103d86103d3366004611b40565b610ae7565b60408051928352602083019190915201610198565b3480156103f957600080fd5b506065546001600160a01b03166101f5565b34801561041757600080fd5b506103d8610426366004611b27565b610b3b565b34801561043757600080fd5b5061014f610446366004611a77565b610b50565b34801561045757600080fd5b5061014f610466366004611b27565b610bc1565b610473610cd4565b6001600160a01b038116600090815260cb602052604090205460ff16156104bd5760405163404fe9fb60e11b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b038116600081815260cb6020526040808220805460ff19166001179055517f614c47c82976e8f145409efb6366fe2cefa323f389ed9354649262e38dbb35899190a250565b610511610cd4565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff1661056a5760405163435aad4360e01b81526001600160a01b038084166004830152821660248201526044016104b4565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19169055517f6b0d38eafddac0d37e0aff8f4bbd5f3a3cfe124b8eabea27558bffc931ac05b59190a35050565b6105cc610d2e565b6105d583610d87565b6105df8333610dae565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a9190611b6c565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031603610738573483146106ae5760405163dd97100160e01b8152600481018490523460248201526044016104b4565b604051635572051560e11b81526001600160a01b03858116600483015283811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063aae40a2a9034906044016000604051808303818588803b15801561071a57600080fd5b505af115801561072e573d6000803e3d6000fd5b50505050506107b5565b34156107605760405163dd97100160e01b8152600060048201523460248201526044016104b4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316036107a9576107a4848484610e2d565b6107b5565b6107b585858585610fe3565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108209190611b6c565b9050600061082e8383611b9b565b905060008061083d868461110f565b604080518a81526001600160a01b038d811660208301529181018490526060810183905292945090925080881691908a169033907fdd091524d794aecdb5235b2d816620c2598790835e0f3849808504c2dcb4f1a99060800160405180910390a450505050506108ad6001609755565b50505050565b6108bb610cd4565b6108c560006112ac565b565b60655433906001600160a01b031681146109355760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016104b4565b61093e816112ac565b50565b610949610cd4565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16156109a35760405163071df39160e01b81526001600160a01b038084166004830152821660248201526044016104b4565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19166001179055517ffe40417b78788808c927141f806ef5082e7bba0f7790f2e85b811621a91094339190a35050565b610a08610cd4565b6001600160a01b038116600090815260cb602052604090205460ff16610a4c57604051633bf9d98960e11b81526001600160a01b03821660048201526024016104b4565b6001600160a01b038116600081815260cb6020526040808220805460ff19169055517fe1f03de94d16c262d2f0e89a1c42ede8899d540ac992cf53495a5cf29c2896af9190a250565b610a9d610cd4565b610aa6816112c5565b60c95460408051918252602082018390527f0e9a1641744b21c49e4183ab9ce941d420e05a05a446c71875fb07814f362c1a910160405180910390a160c955565b600080610af4848461110f565b60408051838152602081018390529294509092507f965c73d6a816dcbe4cc33516168787cb029afb2156ec3372a16e8c6cfbbe6e22910160405180910390a15b9250929050565b600080610b4783611389565b91509150915091565b610b58610cd4565b606580546001600160a01b0383166001600160a01b03199091168117909155610b896033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600054610100900460ff1615808015610be15750600054600160ff909116105b80610bfb5750303b158015610bfb575060005460ff166001145b610c5e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104b4565b6000805460ff191660011790558015610c81576000805461ff0019166101001790555b610c8a8261143f565b8015610cd0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146108c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b4565b600260975403610d805760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104b4565b6002609755565b6001600160a01b03811661093e5760405163f5bf603960e01b815260040160405180910390fd5b6001600160a01b038216600090815260cb602052604090205460ff168015610dfc57506001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16155b15610cd05760405163074c80eb60e51b81526001600160a01b038084166004830152821660248201526044016104b4565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cbeb2b286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb19190611bb2565b9050610ec86001600160a01b03821633308661147f565b610efd6001600160a01b0382167f000000000000000000000000000000000000000000000000000000000000000060006114ea565b610f316001600160a01b0382167f0000000000000000000000000000000000000000000000000000000000000000856114ea565b6040516311b3d5e760e01b81526001600160a01b0385811660048301526024820185905283811660448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906311b3d5e79060640160408051808303816000875af1158015610fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd09190611bcf565b509050610fdc81611604565b5050505050565b6000846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110479190611bb2565b9050600061105782333087611628565b905061106e6001600160a01b0383168760006114ea565b6110826001600160a01b03831687836114ea565b604051637af1e23160e11b81526001600160a01b038681166004830152602482018390528481166044830152611107919088169063f5e3c462906064016020604051808303816000875af11580156110de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111029190611b6c565b611604565b505050505050565b60008061111b83611389565b60405163a9059cbb60e01b81523360048201526024810182905291935091506001600160a01b0385169063a9059cbb906044016020604051808303816000875af115801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190611bf3565b6111bd5760405163241165bb60e21b8152306004820152336024820152604481018290526064016104b4565b60405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112509190611bf3565b610b345760405163241165bb60e21b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604481018390526064016104b4565b6001609755565b606580546001600160a01b031916905561093e81611731565b6000670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561132e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113529190611b6c565b61135c9190611b9b565b905080821115610cd057604051635659cb3b60e01b815260048101829052602481018390526044016104b4565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190611b6c565b90508060c954856114219190611c15565b61142b9190611c34565b92506114378385611b9b565b915050915091565b600054610100900460ff166114665760405162461bcd60e51b81526004016104b490611c56565b61146e611783565b6114766117b2565b61093e816117e1565b6040516001600160a01b03808516602483015283166044820152606481018290526108ad9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611816565b8015806115645750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561153e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115629190611b6c565b155b6115cf5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016104b4565b6040516001600160a01b0383166024820152604481018290526115ff90849063095ea7b360e01b906064016114b3565b505050565b8061160c5750565b60405163125a96ab60e01b8152600481018290526024016104b4565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918716906370a0823190602401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190611b6c565b90506116ae6001600160a01b03871686868661147f565b6040516370a0823160e01b81526001600160a01b0385811660048301528291908816906370a0823190602401602060405180830381865afa1580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b9190611b6c565b6117259190611b9b565b9150505b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166117aa5760405162461bcd60e51b81526004016104b490611c56565b6108c56118e8565b600054610100900460ff166117d95760405162461bcd60e51b81526004016104b490611c56565b6108c5611918565b600054610100900460ff166118085760405162461bcd60e51b81526004016104b490611c56565b611811816112c5565b60c955565b600061186b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661193f9092919063ffffffff16565b8051909150156115ff57808060200190518101906118899190611bf3565b6115ff5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104b4565b600054610100900460ff1661190f5760405162461bcd60e51b81526004016104b490611c56565b6108c5336112ac565b600054610100900460ff166112a55760405162461bcd60e51b81526004016104b490611c56565b6060611729848460008585600080866001600160a01b031685876040516119669190611ccd565b60006040518083038185875af1925050503d80600081146119a3576040519150601f19603f3d011682016040523d82523d6000602084013e6119a8565b606091505b50915091506119b9878383876119c4565b979650505050505050565b60608315611a33578251600003611a2c576001600160a01b0385163b611a2c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104b4565b5081611729565b6117298383815115611a485781518083602001fd5b8060405162461bcd60e51b81526004016104b49190611ce9565b6001600160a01b038116811461093e57600080fd5b600060208284031215611a8957600080fd5b8135611a9481611a62565b9392505050565b60008060408385031215611aae57600080fd5b8235611ab981611a62565b91506020830135611ac981611a62565b809150509250929050565b60008060008060808587031215611aea57600080fd5b8435611af581611a62565b93506020850135611b0581611a62565b9250604085013591506060850135611b1c81611a62565b939692955090935050565b600060208284031215611b3957600080fd5b5035919050565b60008060408385031215611b5357600080fd5b8235611b5e81611a62565b946020939093013593505050565b600060208284031215611b7e57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015611bad57611bad611b85565b500390565b600060208284031215611bc457600080fd5b8151611a9481611a62565b60008060408385031215611be257600080fd5b505080516020909101519092909150565b600060208284031215611c0557600080fd5b81518015158114611a9457600080fd5b6000816000190483118215151615611c2f57611c2f611b85565b500290565b600082611c5157634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b83811015611cbc578181015183820152602001611ca4565b838111156108ad5750506000910152565b60008251611cdf818460208701611ca1565b9190910192915050565b6020815260008251806020840152611d08816040850160208701611ca1565b601f01601f1916919091016040019291505056fea26469706673582212206f1ea04b4427ef257842fa6e19f5bfe6b55b6a3956868e9936c0a5fd3277a13464736f6c634300080d0033",
|
|
699
|
+
"bytecode": "0x6101006040523480156200001257600080fd5b5060405162002052380380620020528339810160408190526200003591620001fb565b8282826200004382620000f9565b6200004e83620000f9565b6200005981620000f9565b6001600160a01b03808316608052831660a081905260408051639254f5e560e01b81529051639254f5e5916004808201926020929091908290030181865afa158015620000aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d091906200024f565b6001600160a01b0390811660c052811660e052620000ed62000124565b50505050505062000276565b6001600160a01b038116620001215760405163f5bf603960e01b815260040160405180910390fd5b50565b600054610100900460ff1615620001915760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620001e3576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200012157600080fd5b6000806000606084860312156200021157600080fd5b83516200021e81620001e5565b60208501519093506200023181620001e5565b60408501519092506200024481620001e5565b809150509250925092565b6000602082840312156200026257600080fd5b81516200026f81620001e5565b9392505050565b60805160a05160c05160e051611d55620002fd60003960008181610253015281816111d401526112710152600081816103660152818161076201528181610e3101528181610ed701528181610f0c0152610f6201526000818161021f015281816112d201526113900152600081816101d30152818161064e01526106d50152611d556000f3fe60806040526004361061012a5760003560e01c80638765adcb116100ab578063b26461de1161006f578063b26461de14610388578063bbd98d70146103b8578063e30c3978146103ed578063f2531ea11461040b578063f2fde38b1461042b578063fe4b84df1461044b57600080fd5b80638765adcb146102d257806389a2bc25146102f25780638da5cb5b146103125780638e3525fc146103305780639254f5e51461035457600080fd5b806361d027b3116100f257806361d027b31461024157806364fd707814610275578063715018a61461028857806379ba50971461029d5780637debe3fe146102b257600080fd5b806311ec4b7a1461012f57806344b3716a1461015157806347a6a971146101a15780635ba3792d146101c15780635fe3b5671461020d575b600080fd5b34801561013b57600080fd5b5061014f61014a366004611a7a565b61046b565b005b34801561015d57600080fd5b5061018c61016c366004611a9e565b60ca60209081526000928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b3480156101ad57600080fd5b5061014f6101bc366004611a9e565b610509565b3480156101cd57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610198565b34801561021957600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561024d57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b61014f610283366004611ad7565b6105c4565b34801561029457600080fd5b5061014f6108b3565b3480156102a957600080fd5b5061014f6108c7565b3480156102be57600080fd5b5061014f6102cd366004611a9e565b610941565b3480156102de57600080fd5b5061014f6102ed366004611a7a565b610a00565b3480156102fe57600080fd5b5061014f61030d366004611b2a565b610a95565b34801561031e57600080fd5b506033546001600160a01b03166101f5565b34801561033c57600080fd5b5061034660c95481565b604051908152602001610198565b34801561036057600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561039457600080fd5b5061018c6103a3366004611a7a565b60cb6020526000908152604090205460ff1681565b3480156103c457600080fd5b506103d86103d3366004611b43565b610ae7565b60408051928352602083019190915201610198565b3480156103f957600080fd5b506065546001600160a01b03166101f5565b34801561041757600080fd5b506103d8610426366004611b2a565b610b3b565b34801561043757600080fd5b5061014f610446366004611a7a565b610b50565b34801561045757600080fd5b5061014f610466366004611b2a565b610bc1565b610473610cd4565b6001600160a01b038116600090815260cb602052604090205460ff16156104bd5760405163404fe9fb60e11b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b038116600081815260cb6020526040808220805460ff19166001179055517f614c47c82976e8f145409efb6366fe2cefa323f389ed9354649262e38dbb35899190a250565b610511610cd4565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff1661056a5760405163435aad4360e01b81526001600160a01b038084166004830152821660248201526044016104b4565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19169055517f6b0d38eafddac0d37e0aff8f4bbd5f3a3cfe124b8eabea27558bffc931ac05b59190a35050565b6105cc610d2e565b6105d583610d87565b6105df8333610dae565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a9190611b6f565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031603610738573483146106ae5760405163dd97100160e01b8152600481018490523460248201526044016104b4565b604051635572051560e11b81526001600160a01b03858116600483015283811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063aae40a2a9034906044016000604051808303818588803b15801561071a57600080fd5b505af115801561072e573d6000803e3d6000fd5b50505050506107b5565b34156107605760405163dd97100160e01b8152600060048201523460248201526044016104b4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316036107a9576107a4848484610e2d565b6107b5565b6107b585858585610fe3565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108209190611b6f565b9050600061082e8383611b9e565b905060008061083d868461110f565b604080518a81526001600160a01b038d811660208301529181018490526060810183905292945090925080881691908a169033907fdd091524d794aecdb5235b2d816620c2598790835e0f3849808504c2dcb4f1a99060800160405180910390a450505050506108ad6001609755565b50505050565b6108bb610cd4565b6108c560006112ac565b565b60655433906001600160a01b031681146109355760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016104b4565b61093e816112ac565b50565b610949610cd4565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16156109a35760405163071df39160e01b81526001600160a01b038084166004830152821660248201526044016104b4565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19166001179055517ffe40417b78788808c927141f806ef5082e7bba0f7790f2e85b811621a91094339190a35050565b610a08610cd4565b6001600160a01b038116600090815260cb602052604090205460ff16610a4c57604051633bf9d98960e11b81526001600160a01b03821660048201526024016104b4565b6001600160a01b038116600081815260cb6020526040808220805460ff19169055517fe1f03de94d16c262d2f0e89a1c42ede8899d540ac992cf53495a5cf29c2896af9190a250565b610a9d610cd4565b610aa6816112c5565b60c95460408051918252602082018390527f0e9a1641744b21c49e4183ab9ce941d420e05a05a446c71875fb07814f362c1a910160405180910390a160c955565b600080610af4848461110f565b60408051838152602081018390529294509092507f965c73d6a816dcbe4cc33516168787cb029afb2156ec3372a16e8c6cfbbe6e22910160405180910390a15b9250929050565b600080610b4783611389565b91509150915091565b610b58610cd4565b606580546001600160a01b0383166001600160a01b03199091168117909155610b896033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600054610100900460ff1615808015610be15750600054600160ff909116105b80610bfb5750303b158015610bfb575060005460ff166001145b610c5e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104b4565b6000805460ff191660011790558015610c81576000805461ff0019166101001790555b610c8a8261143f565b8015610cd0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146108c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b4565b600260975403610d805760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104b4565b6002609755565b6001600160a01b03811661093e5760405163f5bf603960e01b815260040160405180910390fd5b6001600160a01b038216600090815260cb602052604090205460ff168015610dfc57506001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16155b15610cd05760405163074c80eb60e51b81526001600160a01b038084166004830152821660248201526044016104b4565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cbeb2b286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb19190611bb5565b9050610ec86001600160a01b03821633308661147f565b610efd6001600160a01b0382167f000000000000000000000000000000000000000000000000000000000000000060006114ea565b610f316001600160a01b0382167f0000000000000000000000000000000000000000000000000000000000000000856114ea565b6040516311b3d5e760e01b81526001600160a01b0385811660048301526024820185905283811660448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906311b3d5e79060640160408051808303816000875af1158015610fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd09190611bd2565b509050610fdc81611604565b5050505050565b6000846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110479190611bb5565b9050600061105782333087611628565b905061106e6001600160a01b0383168760006114ea565b6110826001600160a01b03831687836114ea565b604051637af1e23160e11b81526001600160a01b038681166004830152602482018390528481166044830152611107919088169063f5e3c462906064016020604051808303816000875af11580156110de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111029190611b6f565b611604565b505050505050565b60008061111b83611389565b60405163a9059cbb60e01b81523360048201526024810182905291935091506001600160a01b0385169063a9059cbb906044016020604051808303816000875af115801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190611bf6565b6111bd5760405163241165bb60e21b8152306004820152336024820152604481018290526064016104b4565b60405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112509190611bf6565b610b345760405163241165bb60e21b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604481018390526064016104b4565b6001609755565b606580546001600160a01b031916905561093e81611731565b6000670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561132e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113529190611b6f565b61135c9190611b9e565b905080821115610cd057604051635659cb3b60e01b815260048101829052602481018390526044016104b4565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190611b6f565b90508060c954856114219190611c18565b61142b9190611c37565b92506114378385611b9e565b915050915091565b600054610100900460ff166114665760405162461bcd60e51b81526004016104b490611c59565b61146e611783565b6114766117b2565b61093e816117e1565b6040516001600160a01b03808516602483015283166044820152606481018290526108ad9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611816565b8015806115645750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561153e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115629190611b6f565b155b6115cf5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016104b4565b6040516001600160a01b0383166024820152604481018290526115ff90849063095ea7b360e01b906064016114b3565b505050565b8061160c5750565b60405163125a96ab60e01b8152600481018290526024016104b4565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918716906370a0823190602401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190611b6f565b90506116ae6001600160a01b03871686868661147f565b6040516370a0823160e01b81526001600160a01b0385811660048301528291908816906370a0823190602401602060405180830381865afa1580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b9190611b6f565b6117259190611b9e565b9150505b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166117aa5760405162461bcd60e51b81526004016104b490611c59565b6108c56118eb565b600054610100900460ff166117d95760405162461bcd60e51b81526004016104b490611c59565b6108c561191b565b600054610100900460ff166118085760405162461bcd60e51b81526004016104b490611c59565b611811816112c5565b60c955565b600061186b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166119429092919063ffffffff16565b905080516000148061188c57508080602001905181019061188c9190611bf6565b6115ff5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104b4565b600054610100900460ff166119125760405162461bcd60e51b81526004016104b490611c59565b6108c5336112ac565b600054610100900460ff166112a55760405162461bcd60e51b81526004016104b490611c59565b6060611729848460008585600080866001600160a01b031685876040516119699190611cd0565b60006040518083038185875af1925050503d80600081146119a6576040519150601f19603f3d011682016040523d82523d6000602084013e6119ab565b606091505b50915091506119bc878383876119c7565b979650505050505050565b60608315611a36578251600003611a2f576001600160a01b0385163b611a2f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104b4565b5081611729565b6117298383815115611a4b5781518083602001fd5b8060405162461bcd60e51b81526004016104b49190611cec565b6001600160a01b038116811461093e57600080fd5b600060208284031215611a8c57600080fd5b8135611a9781611a65565b9392505050565b60008060408385031215611ab157600080fd5b8235611abc81611a65565b91506020830135611acc81611a65565b809150509250929050565b60008060008060808587031215611aed57600080fd5b8435611af881611a65565b93506020850135611b0881611a65565b9250604085013591506060850135611b1f81611a65565b939692955090935050565b600060208284031215611b3c57600080fd5b5035919050565b60008060408385031215611b5657600080fd5b8235611b6181611a65565b946020939093013593505050565b600060208284031215611b8157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015611bb057611bb0611b88565b500390565b600060208284031215611bc757600080fd5b8151611a9781611a65565b60008060408385031215611be557600080fd5b505080516020909101519092909150565b600060208284031215611c0857600080fd5b81518015158114611a9757600080fd5b6000816000190483118215151615611c3257611c32611b88565b500290565b600082611c5457634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b83811015611cbf578181015183820152602001611ca7565b838111156108ad5750506000910152565b60008251611ce2818460208701611ca4565b9190910192915050565b6020815260008251806020840152611d0b816040850160208701611ca4565b601f01601f1916919091016040019291505056fea2646970667358221220995876a270861855be588e817571a7a5bbcd01cb5a0542d6dabb83dd380add4464736f6c634300080d0033",
|
|
700
|
+
"deployedBytecode": "0x60806040526004361061012a5760003560e01c80638765adcb116100ab578063b26461de1161006f578063b26461de14610388578063bbd98d70146103b8578063e30c3978146103ed578063f2531ea11461040b578063f2fde38b1461042b578063fe4b84df1461044b57600080fd5b80638765adcb146102d257806389a2bc25146102f25780638da5cb5b146103125780638e3525fc146103305780639254f5e51461035457600080fd5b806361d027b3116100f257806361d027b31461024157806364fd707814610275578063715018a61461028857806379ba50971461029d5780637debe3fe146102b257600080fd5b806311ec4b7a1461012f57806344b3716a1461015157806347a6a971146101a15780635ba3792d146101c15780635fe3b5671461020d575b600080fd5b34801561013b57600080fd5b5061014f61014a366004611a7a565b61046b565b005b34801561015d57600080fd5b5061018c61016c366004611a9e565b60ca60209081526000928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b3480156101ad57600080fd5b5061014f6101bc366004611a9e565b610509565b3480156101cd57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610198565b34801561021957600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561024d57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b61014f610283366004611ad7565b6105c4565b34801561029457600080fd5b5061014f6108b3565b3480156102a957600080fd5b5061014f6108c7565b3480156102be57600080fd5b5061014f6102cd366004611a9e565b610941565b3480156102de57600080fd5b5061014f6102ed366004611a7a565b610a00565b3480156102fe57600080fd5b5061014f61030d366004611b2a565b610a95565b34801561031e57600080fd5b506033546001600160a01b03166101f5565b34801561033c57600080fd5b5061034660c95481565b604051908152602001610198565b34801561036057600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561039457600080fd5b5061018c6103a3366004611a7a565b60cb6020526000908152604090205460ff1681565b3480156103c457600080fd5b506103d86103d3366004611b43565b610ae7565b60408051928352602083019190915201610198565b3480156103f957600080fd5b506065546001600160a01b03166101f5565b34801561041757600080fd5b506103d8610426366004611b2a565b610b3b565b34801561043757600080fd5b5061014f610446366004611a7a565b610b50565b34801561045757600080fd5b5061014f610466366004611b2a565b610bc1565b610473610cd4565b6001600160a01b038116600090815260cb602052604090205460ff16156104bd5760405163404fe9fb60e11b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b038116600081815260cb6020526040808220805460ff19166001179055517f614c47c82976e8f145409efb6366fe2cefa323f389ed9354649262e38dbb35899190a250565b610511610cd4565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff1661056a5760405163435aad4360e01b81526001600160a01b038084166004830152821660248201526044016104b4565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19169055517f6b0d38eafddac0d37e0aff8f4bbd5f3a3cfe124b8eabea27558bffc931ac05b59190a35050565b6105cc610d2e565b6105d583610d87565b6105df8333610dae565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a9190611b6f565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031603610738573483146106ae5760405163dd97100160e01b8152600481018490523460248201526044016104b4565b604051635572051560e11b81526001600160a01b03858116600483015283811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063aae40a2a9034906044016000604051808303818588803b15801561071a57600080fd5b505af115801561072e573d6000803e3d6000fd5b50505050506107b5565b34156107605760405163dd97100160e01b8152600060048201523460248201526044016104b4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316036107a9576107a4848484610e2d565b6107b5565b6107b585858585610fe3565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108209190611b6f565b9050600061082e8383611b9e565b905060008061083d868461110f565b604080518a81526001600160a01b038d811660208301529181018490526060810183905292945090925080881691908a169033907fdd091524d794aecdb5235b2d816620c2598790835e0f3849808504c2dcb4f1a99060800160405180910390a450505050506108ad6001609755565b50505050565b6108bb610cd4565b6108c560006112ac565b565b60655433906001600160a01b031681146109355760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016104b4565b61093e816112ac565b50565b610949610cd4565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16156109a35760405163071df39160e01b81526001600160a01b038084166004830152821660248201526044016104b4565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19166001179055517ffe40417b78788808c927141f806ef5082e7bba0f7790f2e85b811621a91094339190a35050565b610a08610cd4565b6001600160a01b038116600090815260cb602052604090205460ff16610a4c57604051633bf9d98960e11b81526001600160a01b03821660048201526024016104b4565b6001600160a01b038116600081815260cb6020526040808220805460ff19169055517fe1f03de94d16c262d2f0e89a1c42ede8899d540ac992cf53495a5cf29c2896af9190a250565b610a9d610cd4565b610aa6816112c5565b60c95460408051918252602082018390527f0e9a1641744b21c49e4183ab9ce941d420e05a05a446c71875fb07814f362c1a910160405180910390a160c955565b600080610af4848461110f565b60408051838152602081018390529294509092507f965c73d6a816dcbe4cc33516168787cb029afb2156ec3372a16e8c6cfbbe6e22910160405180910390a15b9250929050565b600080610b4783611389565b91509150915091565b610b58610cd4565b606580546001600160a01b0383166001600160a01b03199091168117909155610b896033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600054610100900460ff1615808015610be15750600054600160ff909116105b80610bfb5750303b158015610bfb575060005460ff166001145b610c5e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104b4565b6000805460ff191660011790558015610c81576000805461ff0019166101001790555b610c8a8261143f565b8015610cd0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146108c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b4565b600260975403610d805760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104b4565b6002609755565b6001600160a01b03811661093e5760405163f5bf603960e01b815260040160405180910390fd5b6001600160a01b038216600090815260cb602052604090205460ff168015610dfc57506001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16155b15610cd05760405163074c80eb60e51b81526001600160a01b038084166004830152821660248201526044016104b4565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cbeb2b286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb19190611bb5565b9050610ec86001600160a01b03821633308661147f565b610efd6001600160a01b0382167f000000000000000000000000000000000000000000000000000000000000000060006114ea565b610f316001600160a01b0382167f0000000000000000000000000000000000000000000000000000000000000000856114ea565b6040516311b3d5e760e01b81526001600160a01b0385811660048301526024820185905283811660448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906311b3d5e79060640160408051808303816000875af1158015610fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd09190611bd2565b509050610fdc81611604565b5050505050565b6000846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110479190611bb5565b9050600061105782333087611628565b905061106e6001600160a01b0383168760006114ea565b6110826001600160a01b03831687836114ea565b604051637af1e23160e11b81526001600160a01b038681166004830152602482018390528481166044830152611107919088169063f5e3c462906064016020604051808303816000875af11580156110de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111029190611b6f565b611604565b505050505050565b60008061111b83611389565b60405163a9059cbb60e01b81523360048201526024810182905291935091506001600160a01b0385169063a9059cbb906044016020604051808303816000875af115801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190611bf6565b6111bd5760405163241165bb60e21b8152306004820152336024820152604481018290526064016104b4565b60405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112509190611bf6565b610b345760405163241165bb60e21b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604481018390526064016104b4565b6001609755565b606580546001600160a01b031916905561093e81611731565b6000670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561132e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113529190611b6f565b61135c9190611b9e565b905080821115610cd057604051635659cb3b60e01b815260048101829052602481018390526044016104b4565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190611b6f565b90508060c954856114219190611c18565b61142b9190611c37565b92506114378385611b9e565b915050915091565b600054610100900460ff166114665760405162461bcd60e51b81526004016104b490611c59565b61146e611783565b6114766117b2565b61093e816117e1565b6040516001600160a01b03808516602483015283166044820152606481018290526108ad9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611816565b8015806115645750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561153e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115629190611b6f565b155b6115cf5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016104b4565b6040516001600160a01b0383166024820152604481018290526115ff90849063095ea7b360e01b906064016114b3565b505050565b8061160c5750565b60405163125a96ab60e01b8152600481018290526024016104b4565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918716906370a0823190602401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190611b6f565b90506116ae6001600160a01b03871686868661147f565b6040516370a0823160e01b81526001600160a01b0385811660048301528291908816906370a0823190602401602060405180830381865afa1580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b9190611b6f565b6117259190611b9e565b9150505b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166117aa5760405162461bcd60e51b81526004016104b490611c59565b6108c56118eb565b600054610100900460ff166117d95760405162461bcd60e51b81526004016104b490611c59565b6108c561191b565b600054610100900460ff166118085760405162461bcd60e51b81526004016104b490611c59565b611811816112c5565b60c955565b600061186b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166119429092919063ffffffff16565b905080516000148061188c57508080602001905181019061188c9190611bf6565b6115ff5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104b4565b600054610100900460ff166119125760405162461bcd60e51b81526004016104b490611c59565b6108c5336112ac565b600054610100900460ff166112a55760405162461bcd60e51b81526004016104b490611c59565b6060611729848460008585600080866001600160a01b031685876040516119699190611cd0565b60006040518083038185875af1925050503d80600081146119a6576040519150601f19603f3d011682016040523d82523d6000602084013e6119ab565b606091505b50915091506119bc878383876119c7565b979650505050505050565b60608315611a36578251600003611a2f576001600160a01b0385163b611a2f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104b4565b5081611729565b6117298383815115611a4b5781518083602001fd5b8060405162461bcd60e51b81526004016104b49190611cec565b6001600160a01b038116811461093e57600080fd5b600060208284031215611a8c57600080fd5b8135611a9781611a65565b9392505050565b60008060408385031215611ab157600080fd5b8235611abc81611a65565b91506020830135611acc81611a65565b809150509250929050565b60008060008060808587031215611aed57600080fd5b8435611af881611a65565b93506020850135611b0881611a65565b9250604085013591506060850135611b1f81611a65565b939692955090935050565b600060208284031215611b3c57600080fd5b5035919050565b60008060408385031215611b5657600080fd5b8235611b6181611a65565b946020939093013593505050565b600060208284031215611b8157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015611bb057611bb0611b88565b500390565b600060208284031215611bc757600080fd5b8151611a9781611a65565b60008060408385031215611be557600080fd5b505080516020909101519092909150565b600060208284031215611c0857600080fd5b81518015158114611a9757600080fd5b6000816000190483118215151615611c3257611c32611b88565b500290565b600082611c5457634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b83811015611cbf578181015183820152602001611ca7565b838111156108ad5750506000910152565b60008251611ce2818460208701611ca4565b9190910192915050565b6020815260008251806020840152611d0b816040850160208701611ca4565b601f01601f1916919091016040019291505056fea2646970667358221220995876a270861855be588e817571a7a5bbcd01cb5a0542d6dabb83dd380add4464736f6c634300080d0033",
|
|
701
701
|
"linkReferences": {},
|
|
702
702
|
"deployedLinkReferences": {}
|
|
703
703
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
pragma solidity 0.8.13;
|
|
3
|
+
|
|
4
|
+
interface IVAI {
|
|
5
|
+
function balanceOf(address usr) external returns (uint256);
|
|
6
|
+
|
|
7
|
+
function transferFrom(address src, address dst, uint amount) external returns (bool);
|
|
8
|
+
|
|
9
|
+
function mint(address usr, uint wad) external;
|
|
10
|
+
|
|
11
|
+
function burn(address usr, uint wad) external;
|
|
12
|
+
}
|
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
pragma solidity 0.8.13;
|
|
3
|
+
|
|
4
|
+
import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
|
|
5
|
+
import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
|
|
6
|
+
import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol";
|
|
7
|
+
import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol";
|
|
8
|
+
import "@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol";
|
|
9
|
+
import { ResilientOracleInterface } from "@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol";
|
|
10
|
+
import { IVAI } from "./IVAI.sol";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @title Peg Stability Contract.
|
|
14
|
+
* @notice Contract for swapping stable token for VAI token and vice versa to maintain the peg stability between them.
|
|
15
|
+
* @author Venus Protocol
|
|
16
|
+
*/
|
|
17
|
+
contract PegStability is AccessControlledV8, ReentrancyGuardUpgradeable {
|
|
18
|
+
using SafeERC20Upgradeable for IERC20Upgradeable;
|
|
19
|
+
|
|
20
|
+
// Helper enum for calculation of the fee.
|
|
21
|
+
enum FeeDirection {
|
|
22
|
+
IN,
|
|
23
|
+
OUT
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/// @notice The divisor used to convert fees to basis points.
|
|
27
|
+
uint256 public constant BASIS_POINTS_DIVISOR = 10000;
|
|
28
|
+
|
|
29
|
+
/// @notice The mantissa value representing 1 (used for calculations).
|
|
30
|
+
uint256 public constant MANTISSA_ONE = 1e18;
|
|
31
|
+
|
|
32
|
+
/// @notice The value representing one dollar in the stable token.
|
|
33
|
+
/// @dev Our oracle is returning amount depending on the number of decimals of the stable token. (36 - asset_decimals) E.g. 8 decimal asset = 1e28.
|
|
34
|
+
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable
|
|
35
|
+
uint256 public immutable ONE_DOLLAR;
|
|
36
|
+
|
|
37
|
+
/// @notice VAI token contract.
|
|
38
|
+
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable
|
|
39
|
+
IVAI public immutable VAI;
|
|
40
|
+
|
|
41
|
+
/// @notice The address of the stable token contract.
|
|
42
|
+
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable
|
|
43
|
+
address public immutable STABLE_TOKEN_ADDRESS;
|
|
44
|
+
|
|
45
|
+
/// @notice The address of ResilientOracle contract wrapped in its interface.
|
|
46
|
+
ResilientOracleInterface public oracle;
|
|
47
|
+
|
|
48
|
+
/// @notice The address of the Venus Treasury contract.
|
|
49
|
+
address public venusTreasury;
|
|
50
|
+
|
|
51
|
+
/// @notice The incoming stableCoin fee. (Fee for swapStableForVAI).
|
|
52
|
+
uint256 public feeIn;
|
|
53
|
+
|
|
54
|
+
/// @notice The outgoing stableCoin fee. (Fee for swapVAIForStable).
|
|
55
|
+
uint256 public feeOut;
|
|
56
|
+
|
|
57
|
+
/// @notice The maximum amount of VAI that can be minted through this contract.
|
|
58
|
+
uint256 public vaiMintCap;
|
|
59
|
+
|
|
60
|
+
/// @notice The total amount of VAI minted through this contract.
|
|
61
|
+
uint256 public vaiMinted;
|
|
62
|
+
|
|
63
|
+
/// @notice A flag indicating whether the contract is currently paused or not.
|
|
64
|
+
bool public isPaused;
|
|
65
|
+
|
|
66
|
+
/// @notice Event emitted when contract is paused.
|
|
67
|
+
event PSMPaused(address indexed admin);
|
|
68
|
+
|
|
69
|
+
/// @notice Event emitted when the contract is resumed after pause.
|
|
70
|
+
event PSMResumed(address indexed admin);
|
|
71
|
+
|
|
72
|
+
/// @notice Event emitted when feeIn state var is modified.
|
|
73
|
+
event FeeInChanged(uint256 oldFeeIn, uint256 newFeeIn);
|
|
74
|
+
|
|
75
|
+
/// @notice Event emitted when feeOut state var is modified.
|
|
76
|
+
event FeeOutChanged(uint256 oldFeeOut, uint256 newFeeOut);
|
|
77
|
+
|
|
78
|
+
/// @notice Event emitted when vaiMintCap state var is modified.
|
|
79
|
+
event VAIMintCapChanged(uint256 oldCap, uint256 newCap);
|
|
80
|
+
|
|
81
|
+
/// @notice Event emitted when venusTreasury state var is modified.
|
|
82
|
+
event VenusTreasuryChanged(address indexed oldTreasury, address indexed newTreasury);
|
|
83
|
+
|
|
84
|
+
/// @notice Event emitted when oracle state var is modified.
|
|
85
|
+
event OracleChanged(address indexed oldOracle, address indexed newOracle);
|
|
86
|
+
|
|
87
|
+
/// @notice Event emitted when stable token is swapped for VAI.
|
|
88
|
+
event StableForVAISwapped(uint256 stableIn, uint256 vaiOut, uint256 fee);
|
|
89
|
+
|
|
90
|
+
/// @notice Event emitted when stable token is swapped for VAI.
|
|
91
|
+
event VAIForStableSwapped(uint256 vaiBurnt, uint256 stableOut, uint256 vaiFee);
|
|
92
|
+
|
|
93
|
+
/// @notice thrown when contract is in paused state
|
|
94
|
+
error Paused();
|
|
95
|
+
|
|
96
|
+
/// @notice thrown when attempted to pause an already paused contract
|
|
97
|
+
error AlreadyPaused();
|
|
98
|
+
|
|
99
|
+
/// @notice thrown when attempted to resume the contract if it is already resumed
|
|
100
|
+
error NotPaused();
|
|
101
|
+
|
|
102
|
+
/// @notice thrown when stable token has more than 18 decimals
|
|
103
|
+
error TooManyDecimals();
|
|
104
|
+
|
|
105
|
+
/// @notice thrown when fee is >= 100%
|
|
106
|
+
error InvalidFee();
|
|
107
|
+
|
|
108
|
+
/// @notice thrown when a zero address is passed as a function parameter
|
|
109
|
+
error ZeroAddress();
|
|
110
|
+
|
|
111
|
+
/// @notice thrown when a zero amount is passed as stable token amount parameter
|
|
112
|
+
error ZeroAmount();
|
|
113
|
+
|
|
114
|
+
/// @notice thrown when the user doesn't have enough VAI balance to provide for the amount of stable tokens he wishes to get
|
|
115
|
+
error NotEnoughVAI();
|
|
116
|
+
|
|
117
|
+
/// @notice thrown when the amount of VAI to be burnt exceeds the vaiMinted amount
|
|
118
|
+
error VAIMintedUnderflow();
|
|
119
|
+
|
|
120
|
+
/// @notice thrown when the VAI transfer to treasury fails
|
|
121
|
+
error VAITransferFail();
|
|
122
|
+
|
|
123
|
+
/// @notice thrown when VAI to be minted will go beyond the mintCap threshold
|
|
124
|
+
error VAIMintCapReached();
|
|
125
|
+
/// @notice thrown when fee calculation will result in rounding down to 0 due to stable token amount being a too small number
|
|
126
|
+
error AmountTooSmall();
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* @dev Prevents functions to execute when contract is paused.
|
|
130
|
+
*/
|
|
131
|
+
modifier isActive() {
|
|
132
|
+
if (isPaused) revert Paused();
|
|
133
|
+
_;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/// @custom:oz-upgrades-unsafe-allow constructor
|
|
137
|
+
constructor(address stableTokenAddress_, address vaiAddress_) {
|
|
138
|
+
_ensureNonzeroAddress(stableTokenAddress_);
|
|
139
|
+
_ensureNonzeroAddress(vaiAddress_);
|
|
140
|
+
|
|
141
|
+
uint256 decimals_ = IERC20MetadataUpgradeable(stableTokenAddress_).decimals();
|
|
142
|
+
|
|
143
|
+
if (decimals_ > 18) {
|
|
144
|
+
revert TooManyDecimals();
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
ONE_DOLLAR = 10 ** (36 - decimals_); // 1$ scaled to the decimals returned by our Oracle
|
|
148
|
+
STABLE_TOKEN_ADDRESS = stableTokenAddress_;
|
|
149
|
+
VAI = IVAI(vaiAddress_);
|
|
150
|
+
_disableInitializers();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* @notice Initializes the contract via Proxy Contract with the required parameters.
|
|
155
|
+
* @param accessControlManager_ The address of the AccessControlManager contract.
|
|
156
|
+
* @param venusTreasury_ The address where fees will be sent.
|
|
157
|
+
* @param oracleAddress_ The address of the ResilientOracle contract.
|
|
158
|
+
* @param feeIn_ The percentage of fees to be applied to a stablecoin -> VAI swap.
|
|
159
|
+
* @param feeOut_ The percentage of fees to be applied to a VAI -> stablecoin swap.
|
|
160
|
+
* @param vaiMintCap_ The cap for the total amount of VAI that can be minted.
|
|
161
|
+
*/
|
|
162
|
+
function initialize(
|
|
163
|
+
address accessControlManager_,
|
|
164
|
+
address venusTreasury_,
|
|
165
|
+
address oracleAddress_,
|
|
166
|
+
uint256 feeIn_,
|
|
167
|
+
uint256 feeOut_,
|
|
168
|
+
uint256 vaiMintCap_
|
|
169
|
+
) external initializer {
|
|
170
|
+
_ensureNonzeroAddress(accessControlManager_);
|
|
171
|
+
_ensureNonzeroAddress(venusTreasury_);
|
|
172
|
+
_ensureNonzeroAddress(oracleAddress_);
|
|
173
|
+
__AccessControlled_init(accessControlManager_);
|
|
174
|
+
__ReentrancyGuard_init();
|
|
175
|
+
|
|
176
|
+
if (feeIn_ >= BASIS_POINTS_DIVISOR || feeOut_ >= BASIS_POINTS_DIVISOR) {
|
|
177
|
+
revert InvalidFee();
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
feeIn = feeIn_;
|
|
181
|
+
feeOut = feeOut_;
|
|
182
|
+
vaiMintCap = vaiMintCap_;
|
|
183
|
+
venusTreasury = venusTreasury_;
|
|
184
|
+
oracle = ResilientOracleInterface(oracleAddress_);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/*** Swap Functions ***/
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* @notice Swaps VAI for a stable token.
|
|
191
|
+
* @param receiver The address where the stablecoin will be sent.
|
|
192
|
+
* @param stableTknAmount The amount of stable tokens to receive.
|
|
193
|
+
* @return The amount of VAI received and burnt from the sender.
|
|
194
|
+
*/
|
|
195
|
+
// @custom:event Emits VAIForStableSwapped event.
|
|
196
|
+
function swapVAIForStable(
|
|
197
|
+
address receiver,
|
|
198
|
+
uint256 stableTknAmount
|
|
199
|
+
) external isActive nonReentrant returns (uint256) {
|
|
200
|
+
_ensureNonzeroAddress(receiver);
|
|
201
|
+
_ensureNonzeroAmount(stableTknAmount);
|
|
202
|
+
|
|
203
|
+
// update oracle price and calculate USD value of the stable token amount scaled in 18 decimals
|
|
204
|
+
oracle.updateAssetPrice(STABLE_TOKEN_ADDRESS);
|
|
205
|
+
uint256 stableTknAmountUSD = _previewTokenUSDAmount(stableTknAmount, FeeDirection.OUT);
|
|
206
|
+
uint256 fee = _calculateFee(stableTknAmountUSD, FeeDirection.OUT);
|
|
207
|
+
|
|
208
|
+
if (VAI.balanceOf(msg.sender) < stableTknAmountUSD + fee) {
|
|
209
|
+
revert NotEnoughVAI();
|
|
210
|
+
}
|
|
211
|
+
if (vaiMinted < stableTknAmountUSD) {
|
|
212
|
+
revert VAIMintedUnderflow();
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
unchecked {
|
|
216
|
+
vaiMinted -= stableTknAmountUSD;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
if (fee != 0) {
|
|
220
|
+
bool success = VAI.transferFrom(msg.sender, venusTreasury, fee);
|
|
221
|
+
if (!success) {
|
|
222
|
+
revert VAITransferFail();
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
VAI.burn(msg.sender, stableTknAmountUSD);
|
|
227
|
+
IERC20Upgradeable(STABLE_TOKEN_ADDRESS).safeTransfer(receiver, stableTknAmount);
|
|
228
|
+
emit VAIForStableSwapped(stableTknAmountUSD, stableTknAmount, fee);
|
|
229
|
+
return stableTknAmountUSD;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* @notice Swaps stable tokens for VAI with fees.
|
|
234
|
+
* @dev This function adds support to fee-on-transfer tokens. The actualTransferAmt is calculated, by recording token balance state before and after the transfer.
|
|
235
|
+
* @param receiver The address that will receive the VAI tokens.
|
|
236
|
+
* @param stableTknAmount The amount of stable tokens to be swapped.
|
|
237
|
+
* @return Amount of VAI minted to the sender.
|
|
238
|
+
*/
|
|
239
|
+
// @custom:event Emits StableForVAISwapped event.
|
|
240
|
+
function swapStableForVAI(
|
|
241
|
+
address receiver,
|
|
242
|
+
uint256 stableTknAmount
|
|
243
|
+
) external isActive nonReentrant returns (uint256) {
|
|
244
|
+
_ensureNonzeroAddress(receiver);
|
|
245
|
+
_ensureNonzeroAmount(stableTknAmount);
|
|
246
|
+
// transfer IN, supporting fee-on-transfer tokens
|
|
247
|
+
uint256 balanceBefore = IERC20Upgradeable(STABLE_TOKEN_ADDRESS).balanceOf(address(this));
|
|
248
|
+
IERC20Upgradeable(STABLE_TOKEN_ADDRESS).safeTransferFrom(msg.sender, address(this), stableTknAmount);
|
|
249
|
+
uint256 balanceAfter = IERC20Upgradeable(STABLE_TOKEN_ADDRESS).balanceOf(address(this));
|
|
250
|
+
|
|
251
|
+
//calculate actual transfered amount (in case of fee-on-transfer tokens)
|
|
252
|
+
uint256 actualTransferAmt = balanceAfter - balanceBefore;
|
|
253
|
+
|
|
254
|
+
// update oracle price and calculate USD value of the stable token amount scaled in 18 decimals
|
|
255
|
+
oracle.updateAssetPrice(STABLE_TOKEN_ADDRESS);
|
|
256
|
+
uint256 actualTransferAmtInUSD = _previewTokenUSDAmount(actualTransferAmt, FeeDirection.IN);
|
|
257
|
+
|
|
258
|
+
//calculate feeIn
|
|
259
|
+
uint256 fee = _calculateFee(actualTransferAmtInUSD, FeeDirection.IN);
|
|
260
|
+
uint256 vaiToMint = actualTransferAmtInUSD - fee;
|
|
261
|
+
|
|
262
|
+
if (vaiMinted + actualTransferAmtInUSD > vaiMintCap) {
|
|
263
|
+
revert VAIMintCapReached();
|
|
264
|
+
}
|
|
265
|
+
unchecked {
|
|
266
|
+
vaiMinted += actualTransferAmtInUSD;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// mint VAI to receiver
|
|
270
|
+
VAI.mint(receiver, vaiToMint);
|
|
271
|
+
|
|
272
|
+
// mint VAI fee to venus treasury
|
|
273
|
+
if (fee != 0) {
|
|
274
|
+
VAI.mint(venusTreasury, fee);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
emit StableForVAISwapped(actualTransferAmt, vaiToMint, fee);
|
|
278
|
+
return vaiToMint;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/*** Admin Functions ***/
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* @notice Pause the PSM contract.
|
|
285
|
+
* @dev Reverts if the contract is already paused.
|
|
286
|
+
*/
|
|
287
|
+
// @custom:event Emits PSMPaused event.
|
|
288
|
+
function pause() external {
|
|
289
|
+
_checkAccessAllowed("pause()");
|
|
290
|
+
if (isPaused) {
|
|
291
|
+
revert AlreadyPaused();
|
|
292
|
+
}
|
|
293
|
+
isPaused = true;
|
|
294
|
+
emit PSMPaused(msg.sender);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* @notice Resume the PSM contract.
|
|
299
|
+
* @dev Reverts if the contract is not paused.
|
|
300
|
+
*/
|
|
301
|
+
// @custom:event Emits PSMResumed event.
|
|
302
|
+
function resume() external {
|
|
303
|
+
_checkAccessAllowed("resume()");
|
|
304
|
+
if (!isPaused) {
|
|
305
|
+
revert NotPaused();
|
|
306
|
+
}
|
|
307
|
+
isPaused = false;
|
|
308
|
+
emit PSMResumed(msg.sender);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* @notice Set the fee percentage for incoming swaps.
|
|
313
|
+
* @dev Reverts if the new fee percentage is invalid (greater than or equal to BASIS_POINTS_DIVISOR).
|
|
314
|
+
* @param feeIn_ The new fee percentage for incoming swaps.
|
|
315
|
+
*/
|
|
316
|
+
// @custom:event Emits FeeInChanged event.
|
|
317
|
+
function setFeeIn(uint256 feeIn_) external {
|
|
318
|
+
_checkAccessAllowed("setFeeIn(uint256)");
|
|
319
|
+
// feeIn = 10000 = 100%
|
|
320
|
+
if (feeIn_ >= BASIS_POINTS_DIVISOR) {
|
|
321
|
+
revert InvalidFee();
|
|
322
|
+
}
|
|
323
|
+
uint256 oldFeeIn = feeIn;
|
|
324
|
+
feeIn = feeIn_;
|
|
325
|
+
emit FeeInChanged(oldFeeIn, feeIn_);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* @notice Set the fee percentage for outgoing swaps.
|
|
330
|
+
* @dev Reverts if the new fee percentage is invalid (greater than or equal to BASIS_POINTS_DIVISOR).
|
|
331
|
+
* @param feeOut_ The new fee percentage for outgoing swaps.
|
|
332
|
+
*/
|
|
333
|
+
// @custom:event Emits FeeOutChanged event.
|
|
334
|
+
function setFeeOut(uint256 feeOut_) external {
|
|
335
|
+
_checkAccessAllowed("setFeeOut(uint256)");
|
|
336
|
+
// feeOut = 10000 = 100%
|
|
337
|
+
if (feeOut_ >= BASIS_POINTS_DIVISOR) {
|
|
338
|
+
revert InvalidFee();
|
|
339
|
+
}
|
|
340
|
+
uint256 oldFeeOut = feeOut;
|
|
341
|
+
feeOut = feeOut_;
|
|
342
|
+
emit FeeOutChanged(oldFeeOut, feeOut_);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* @dev Set the maximum amount of VAI that can be minted through this contract.
|
|
347
|
+
* @param vaiMintCap_ The new maximum amount of VAI that can be minted.
|
|
348
|
+
*/
|
|
349
|
+
// @custom:event Emits VAIMintCapChanged event.
|
|
350
|
+
function setVAIMintCap(uint256 vaiMintCap_) external {
|
|
351
|
+
_checkAccessAllowed("setVAIMintCap(uint256)");
|
|
352
|
+
uint256 oldVAIMintCap = vaiMintCap;
|
|
353
|
+
vaiMintCap = vaiMintCap_;
|
|
354
|
+
emit VAIMintCapChanged(oldVAIMintCap, vaiMintCap_);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* @notice Set the address of the Venus Treasury contract.
|
|
359
|
+
* @dev Reverts if the new address is zero.
|
|
360
|
+
* @param venusTreasury_ The new address of the Venus Treasury contract.
|
|
361
|
+
*/
|
|
362
|
+
// @custom:event Emits VenusTreasuryChanged event.
|
|
363
|
+
function setVenusTreasury(address venusTreasury_) external {
|
|
364
|
+
_checkAccessAllowed("setVenusTreasury(address)");
|
|
365
|
+
_ensureNonzeroAddress(venusTreasury_);
|
|
366
|
+
address oldTreasuryAddress = venusTreasury;
|
|
367
|
+
venusTreasury = venusTreasury_;
|
|
368
|
+
emit VenusTreasuryChanged(oldTreasuryAddress, venusTreasury_);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* @notice Set the address of the ResilientOracle contract.
|
|
373
|
+
* @dev Reverts if the new address is zero.
|
|
374
|
+
* @param oracleAddress_ The new address of the ResilientOracle contract.
|
|
375
|
+
*/
|
|
376
|
+
// @custom:event Emits OracleChanged event.
|
|
377
|
+
function setOracle(address oracleAddress_) external {
|
|
378
|
+
_checkAccessAllowed("setOracle(address)");
|
|
379
|
+
_ensureNonzeroAddress(oracleAddress_);
|
|
380
|
+
address oldOracleAddress = address(oracle);
|
|
381
|
+
oracle = ResilientOracleInterface(oracleAddress_);
|
|
382
|
+
emit OracleChanged(oldOracleAddress, oracleAddress_);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* @dev Disabling renounceOwnership function.
|
|
387
|
+
*/
|
|
388
|
+
function renounceOwnership() public override {}
|
|
389
|
+
|
|
390
|
+
/*** Helper Functions ***/
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* @notice Calculates the amount of VAI that would be burnt from the user.
|
|
394
|
+
* @dev This calculation might be off with a bit, if the price of the oracle for this asset is not updated in the block this function is invoked.
|
|
395
|
+
* @param stableTknAmount The amount of stable tokens to be received after the swap.
|
|
396
|
+
* @return The amount of VAI that would be taken from the user.
|
|
397
|
+
*/
|
|
398
|
+
function previewSwapVAIForStable(uint256 stableTknAmount) external view returns (uint256) {
|
|
399
|
+
_ensureNonzeroAmount(stableTknAmount);
|
|
400
|
+
uint256 stableTknAmountUSD = _previewTokenUSDAmount(stableTknAmount, FeeDirection.OUT);
|
|
401
|
+
uint256 fee = _calculateFee(stableTknAmountUSD, FeeDirection.OUT);
|
|
402
|
+
|
|
403
|
+
if (vaiMinted < stableTknAmountUSD) {
|
|
404
|
+
revert VAIMintedUnderflow();
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
return stableTknAmountUSD + fee;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* @notice Calculates the amount of VAI that would be sent to the receiver.
|
|
412
|
+
* @dev This calculation might be off with a bit, if the price of the oracle for this asset is not updated in the block this function is invoked.
|
|
413
|
+
* @param stableTknAmount The amount of stable tokens provided for the swap.
|
|
414
|
+
* @return The amount of VAI that would be sent to the receiver.
|
|
415
|
+
*/
|
|
416
|
+
function previewSwapStableForVAI(uint256 stableTknAmount) external view returns (uint256) {
|
|
417
|
+
_ensureNonzeroAmount(stableTknAmount);
|
|
418
|
+
uint256 stableTknAmountUSD = _previewTokenUSDAmount(stableTknAmount, FeeDirection.IN);
|
|
419
|
+
|
|
420
|
+
//calculate feeIn
|
|
421
|
+
uint256 fee = _calculateFee(stableTknAmountUSD, FeeDirection.IN);
|
|
422
|
+
uint256 vaiToMint = stableTknAmountUSD - fee;
|
|
423
|
+
|
|
424
|
+
if (vaiMinted + stableTknAmountUSD > vaiMintCap) {
|
|
425
|
+
revert VAIMintCapReached();
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
return vaiToMint;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* @dev Calculates the USD value of the given amount of stable tokens depending on the swap direction.
|
|
433
|
+
* @param amount The amount of stable tokens.
|
|
434
|
+
* @param direction The direction of the swap.
|
|
435
|
+
* @return The USD value of the given amount of stable tokens scaled by 1e18 taking into account the direction of the swap
|
|
436
|
+
*/
|
|
437
|
+
function _previewTokenUSDAmount(uint256 amount, FeeDirection direction) internal view returns (uint256) {
|
|
438
|
+
return (amount * _getPriceInUSD(direction)) / MANTISSA_ONE;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
/**
|
|
442
|
+
* @notice Get the price of stable token in USD.
|
|
443
|
+
* @dev This function returns either min(1$,oraclePrice) or max(1$,oraclePrice) with a decimal scale (36 - asset_decimals). E.g. for 8 decimal token 1$ will be 1e28.
|
|
444
|
+
* @param direction The direction of the swap: FeeDirection.IN or FeeDirection.OUT.
|
|
445
|
+
* @return The price in USD, adjusted based on the selected direction.
|
|
446
|
+
*/
|
|
447
|
+
function _getPriceInUSD(FeeDirection direction) internal view returns (uint256) {
|
|
448
|
+
// get price with a scale = (36 - asset_decimals)
|
|
449
|
+
uint256 price = oracle.getPrice(STABLE_TOKEN_ADDRESS);
|
|
450
|
+
|
|
451
|
+
if (direction == FeeDirection.IN) {
|
|
452
|
+
// MIN(1, price)
|
|
453
|
+
return price < ONE_DOLLAR ? price : ONE_DOLLAR;
|
|
454
|
+
} else {
|
|
455
|
+
// MAX(1, price)
|
|
456
|
+
return price > ONE_DOLLAR ? price : ONE_DOLLAR;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
/**
|
|
461
|
+
* @notice Calculate the fee amount based on the input amount and fee percentage.
|
|
462
|
+
* @dev Reverts if the fee percentage calculation results in rounding down to 0.
|
|
463
|
+
* @param amount The input amount to calculate the fee from.
|
|
464
|
+
* @param direction The direction of the fee: FeeDirection.IN or FeeDirection.OUT.
|
|
465
|
+
* @return The fee amount.
|
|
466
|
+
*/
|
|
467
|
+
function _calculateFee(uint256 amount, FeeDirection direction) internal view returns (uint256) {
|
|
468
|
+
uint256 feePercent;
|
|
469
|
+
if (direction == FeeDirection.IN) {
|
|
470
|
+
feePercent = feeIn;
|
|
471
|
+
} else {
|
|
472
|
+
feePercent = feeOut;
|
|
473
|
+
}
|
|
474
|
+
if (feePercent == 0) {
|
|
475
|
+
return 0;
|
|
476
|
+
} else {
|
|
477
|
+
// checking if the percent calculation will result in rounding down to 0
|
|
478
|
+
if (amount * feePercent < BASIS_POINTS_DIVISOR) {
|
|
479
|
+
revert AmountTooSmall();
|
|
480
|
+
}
|
|
481
|
+
return (amount * feePercent) / BASIS_POINTS_DIVISOR;
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
/**
|
|
486
|
+
* @notice Checks that the address is not the zero address.
|
|
487
|
+
* @param someone The address to check.
|
|
488
|
+
*/
|
|
489
|
+
function _ensureNonzeroAddress(address someone) private pure {
|
|
490
|
+
if (someone == address(0)) revert ZeroAddress();
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
/**
|
|
494
|
+
* @notice Checks that the amount passed as stable tokens is bigger than zero
|
|
495
|
+
* @param amount The amount to validate
|
|
496
|
+
*/
|
|
497
|
+
function _ensureNonzeroAmount(uint256 amount) private pure {
|
|
498
|
+
if (amount == 0) revert ZeroAmount();
|
|
499
|
+
}
|
|
500
|
+
}
|