@venusprotocol/venus-protocol 6.1.0-dev.7 → 6.1.0-dev.8
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/artifacts/@venusprotocol/governance-contracts/contracts/Governance/AccessControlledV8.sol/AccessControlledV8.dbg.json +1 -1
- package/artifacts/@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol/IAccessControlManagerV8.dbg.json +1 -1
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/BoundValidatorInterface.dbg.json +1 -1
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/OracleInterface.dbg.json +1 -1
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/ResilientOracleInterface.dbg.json +1 -1
- package/artifacts/@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol/TwapInterface.dbg.json +1 -1
- package/artifacts/@venusprotocol/solidity-utilities/contracts/MaxLoopsLimitHelper.sol/MaxLoopsLimitHelper.dbg.json +1 -1
- package/artifacts/build-info/{eeb502cfa65684cfcd3f593c290d1e44.json → ca9cec918639b6d02d5466619a4c008d.json} +1 -1
- package/artifacts/contracts/Admin/VBNBAdmin.sol/VBNBAdmin.dbg.json +1 -1
- package/artifacts/contracts/Admin/VBNBAdminStorage.sol/IProtocolShareReserve.dbg.json +1 -1
- package/artifacts/contracts/Admin/VBNBAdminStorage.sol/IWBNB.dbg.json +1 -1
- package/artifacts/contracts/Admin/VBNBAdminStorage.sol/VBNBAdminStorage.dbg.json +1 -1
- package/artifacts/contracts/Admin/VBNBAdminStorage.sol/VTokenInterface.dbg.json +1 -1
- package/artifacts/contracts/DelegateBorrowers/MoveDebtDelegate.sol/MoveDebtDelegate.dbg.json +4 -0
- package/artifacts/contracts/DelegateBorrowers/MoveDebtDelegate.sol/MoveDebtDelegate.json +361 -0
- package/artifacts/contracts/DelegateBorrowers/SwapDebtDelegate.sol/SwapDebtDelegate.dbg.json +1 -1
- package/artifacts/contracts/DelegateBorrowers/SwapDebtDelegate.sol/SwapDebtDelegate.json +4 -4
- package/artifacts/contracts/InterfacesV8.sol/IComptroller.dbg.json +4 -0
- package/artifacts/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IComptroller.json +14 -1
- package/artifacts/contracts/InterfacesV8.sol/ILiquidator.dbg.json +4 -0
- package/artifacts/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/ILiquidator.json +1 -1
- package/artifacts/contracts/InterfacesV8.sol/IVAIController.dbg.json +4 -0
- package/artifacts/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVAIController.json +1 -1
- package/artifacts/contracts/InterfacesV8.sol/IVBNB.dbg.json +4 -0
- package/artifacts/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVBNB.json +15 -2
- package/artifacts/contracts/InterfacesV8.sol/IVBep20.dbg.json +4 -0
- package/artifacts/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVBep20.json +63 -2
- package/artifacts/contracts/InterfacesV8.sol/IVToken.dbg.json +4 -0
- package/artifacts/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVToken.json +15 -2
- package/artifacts/contracts/Liquidator/BUSDLiquidator.sol/BUSDLiquidator.dbg.json +1 -1
- package/artifacts/contracts/Liquidator/BUSDLiquidator.sol/BUSDLiquidator.json +3 -3
- package/artifacts/contracts/Liquidator/Liquidator.sol/Liquidator.dbg.json +1 -1
- package/artifacts/contracts/Liquidator/Liquidator.sol/Liquidator.json +7 -7
- package/artifacts/contracts/PegStability/IVAI.sol/IVAI.dbg.json +1 -1
- package/artifacts/contracts/PegStability/PegStability.sol/PegStability.dbg.json +1 -1
- 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/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/Tokens/Prime/Interfaces/IPrime.sol/IPrime.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/Interfaces/IPrimeLiquidityProvider.sol/IPrimeLiquidityProvider.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/Interfaces/IVToken.sol/IVToken.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/Interfaces/IXVSVault.sol/IXVSVault.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/Interfaces/InterfaceComptroller.sol/InterfaceComptroller.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/Prime.sol/Prime.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/PrimeLiquidityProvider.sol/PrimeLiquidityProvider.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/PrimeStorage.sol/PrimeStorageV1.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/libs/FixedMath.sol/FixedMath.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/libs/FixedMath0x.sol/FixedMath0x.dbg.json +1 -1
- package/artifacts/contracts/Tokens/Prime/libs/Scores.sol/Scores.dbg.json +1 -1
- package/artifacts/contracts/test/AccessControlManagerMock.sol/AccessControlManagerMock.dbg.json +1 -1
- package/artifacts/contracts/test/LiquidatorHarness.sol/LiquidatorHarness.dbg.json +1 -1
- package/artifacts/contracts/test/LiquidatorHarness.sol/LiquidatorHarness.json +7 -7
- package/artifacts/contracts/test/MockProtocolShareReserve.sol/IComptroller.dbg.json +1 -1
- package/artifacts/contracts/test/MockProtocolShareReserve.sol/IIncomeDestination.dbg.json +1 -1
- package/artifacts/contracts/test/MockProtocolShareReserve.sol/IMockProtocolShareReserve.dbg.json +1 -1
- package/artifacts/contracts/test/MockProtocolShareReserve.sol/IPoolRegistry.dbg.json +1 -1
- package/artifacts/contracts/test/MockProtocolShareReserve.sol/IPrime.dbg.json +1 -1
- package/artifacts/contracts/test/MockProtocolShareReserve.sol/IVToken.dbg.json +1 -1
- package/artifacts/contracts/test/MockProtocolShareReserve.sol/MaxLoopsLimitHelper.dbg.json +1 -1
- package/artifacts/contracts/test/MockProtocolShareReserve.sol/MockProtocolShareReserve.dbg.json +1 -1
- package/artifacts/contracts/test/PrimeScenario.sol/PrimeScenario.dbg.json +1 -1
- package/contracts/DelegateBorrowers/MoveDebtDelegate.sol +179 -0
- package/contracts/DelegateBorrowers/SwapDebtDelegate.sol +15 -31
- package/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol} +10 -3
- package/contracts/Liquidator/BUSDLiquidator.sol +6 -5
- package/contracts/Liquidator/Liquidator.sol +6 -5
- package/dist/typechain/contracts/DelegateBorrowers/MoveDebtDelegate.d.ts +274 -0
- package/dist/typechain/contracts/DelegateBorrowers/{SwapDebtDelegate.sol/SwapDebtDelegate.d.ts → SwapDebtDelegate.d.ts} +1 -1
- package/dist/typechain/contracts/DelegateBorrowers/index.d.ts +2 -2
- package/dist/typechain/contracts/DelegateBorrowers/index.js +0 -1
- package/dist/typechain/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IComptroller.d.ts +10 -2
- package/dist/typechain/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/ILiquidator.d.ts +1 -1
- package/dist/typechain/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVAIController.d.ts +1 -1
- package/dist/typechain/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVBNB.d.ts +15 -7
- package/dist/typechain/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVBep20.d.ts +47 -7
- package/dist/typechain/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVToken.d.ts +15 -7
- package/dist/typechain/contracts/Liquidator/index.d.ts +0 -2
- package/dist/typechain/contracts/Liquidator/index.js +0 -1
- package/dist/typechain/contracts/index.d.ts +2 -0
- package/dist/typechain/factories/contracts/DelegateBorrowers/MoveDebtDelegate__factory.d.ts +294 -0
- package/dist/typechain/factories/contracts/DelegateBorrowers/MoveDebtDelegate__factory.js +390 -0
- package/dist/typechain/factories/contracts/DelegateBorrowers/{SwapDebtDelegate.sol/SwapDebtDelegate__factory.d.ts → SwapDebtDelegate__factory.d.ts} +5 -5
- package/dist/typechain/factories/contracts/DelegateBorrowers/{SwapDebtDelegate.sol/SwapDebtDelegate__factory.js → SwapDebtDelegate__factory.js} +3 -3
- package/dist/typechain/factories/contracts/DelegateBorrowers/index.d.ts +2 -1
- package/dist/typechain/factories/contracts/DelegateBorrowers/index.js +5 -25
- package/dist/typechain/factories/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IComptroller__factory.d.ts +11 -1
- package/dist/typechain/factories/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IComptroller__factory.js +13 -0
- package/dist/typechain/factories/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/ILiquidator__factory.d.ts +1 -1
- package/dist/typechain/factories/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVAIController__factory.d.ts +1 -1
- package/dist/typechain/factories/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVBNB__factory.d.ts +12 -2
- package/dist/typechain/factories/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVBNB__factory.js +14 -1
- package/dist/typechain/factories/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVBep20__factory.d.ts +48 -2
- package/dist/typechain/factories/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVBep20__factory.js +62 -1
- package/dist/typechain/factories/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVToken__factory.d.ts +12 -2
- package/dist/typechain/factories/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVToken__factory.js +14 -1
- package/dist/typechain/factories/contracts/Liquidator/BUSDLiquidator__factory.d.ts +2 -2
- package/dist/typechain/factories/contracts/Liquidator/BUSDLiquidator__factory.js +2 -2
- package/dist/typechain/factories/contracts/Liquidator/Liquidator__factory.d.ts +5 -5
- package/dist/typechain/factories/contracts/Liquidator/Liquidator__factory.js +6 -6
- package/dist/typechain/factories/contracts/Liquidator/index.d.ts +0 -1
- package/dist/typechain/factories/contracts/Liquidator/index.js +1 -25
- 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 +5 -5
- package/dist/typechain/factories/contracts/test/LiquidatorHarness__factory.js +6 -6
- package/dist/typechain/index.d.ts +14 -14
- package/dist/typechain/index.js +14 -14
- package/package.json +1 -1
- package/artifacts/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IComptroller.dbg.json +0 -4
- package/artifacts/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IComptroller.json +0 -24
- package/artifacts/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IPriceOracle.dbg.json +0 -4
- package/artifacts/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IPriceOracle.json +0 -30
- package/artifacts/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IVToken.dbg.json +0 -4
- package/artifacts/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IVToken.json +0 -104
- package/artifacts/contracts/Liquidator/Interfaces.sol/IComptroller.dbg.json +0 -4
- package/artifacts/contracts/Liquidator/Interfaces.sol/ILiquidator.dbg.json +0 -4
- package/artifacts/contracts/Liquidator/Interfaces.sol/IVAIController.dbg.json +0 -4
- package/artifacts/contracts/Liquidator/Interfaces.sol/IVBNB.dbg.json +0 -4
- package/artifacts/contracts/Liquidator/Interfaces.sol/IVBep20.dbg.json +0 -4
- package/artifacts/contracts/Liquidator/Interfaces.sol/IVToken.dbg.json +0 -4
- package/contracts/Liquidator/constants.sol +0 -5
- package/contracts/Liquidator/zeroAddress.sol +0 -11
- package/dist/typechain/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IComptroller.d.ts +0 -42
- package/dist/typechain/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IPriceOracle.d.ts +0 -42
- package/dist/typechain/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IPriceOracle.js +0 -3
- package/dist/typechain/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IVToken.d.ts +0 -98
- package/dist/typechain/contracts/DelegateBorrowers/SwapDebtDelegate.sol/index.d.ts +0 -4
- package/dist/typechain/contracts/Liquidator/Interfaces.sol/IVToken.js +0 -3
- package/dist/typechain/contracts/Liquidator/Interfaces.sol/index.js +0 -2
- package/dist/typechain/factories/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IComptroller__factory.d.ts +0 -18
- package/dist/typechain/factories/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IComptroller__factory.js +0 -30
- package/dist/typechain/factories/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IPriceOracle__factory.d.ts +0 -22
- package/dist/typechain/factories/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IPriceOracle__factory.js +0 -36
- package/dist/typechain/factories/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IVToken__factory.d.ts +0 -78
- package/dist/typechain/factories/contracts/DelegateBorrowers/SwapDebtDelegate.sol/IVToken__factory.js +0 -110
- package/dist/typechain/factories/contracts/DelegateBorrowers/SwapDebtDelegate.sol/index.d.ts +0 -4
- package/dist/typechain/factories/contracts/DelegateBorrowers/SwapDebtDelegate.sol/index.js +0 -14
- /package/contracts/{Liquidator → lib}/approveOrRevert.sol +0 -0
- /package/dist/typechain/contracts/DelegateBorrowers/{SwapDebtDelegate.sol/IComptroller.js → MoveDebtDelegate.js} +0 -0
- /package/dist/typechain/contracts/DelegateBorrowers/{SwapDebtDelegate.sol/SwapDebtDelegate.js → SwapDebtDelegate.js} +0 -0
- /package/dist/typechain/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IComptroller.js +0 -0
- /package/dist/typechain/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/ILiquidator.js +0 -0
- /package/dist/typechain/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVAIController.js +0 -0
- /package/dist/typechain/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVBNB.js +0 -0
- /package/dist/typechain/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVBep20.js +0 -0
- /package/dist/typechain/contracts/{DelegateBorrowers/SwapDebtDelegate.sol → InterfacesV8.sol}/IVToken.js +0 -0
- /package/dist/typechain/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/index.d.ts +0 -0
- /package/dist/typechain/contracts/{DelegateBorrowers/SwapDebtDelegate.sol → InterfacesV8.sol}/index.js +0 -0
- /package/dist/typechain/factories/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/ILiquidator__factory.js +0 -0
- /package/dist/typechain/factories/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/IVAIController__factory.js +0 -0
- /package/dist/typechain/factories/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/index.d.ts +0 -0
- /package/dist/typechain/factories/contracts/{Liquidator/Interfaces.sol → InterfacesV8.sol}/index.js +0 -0
|
@@ -121,11 +121,6 @@
|
|
|
121
121
|
"name": "TreasuryPercentTooHigh",
|
|
122
122
|
"type": "error"
|
|
123
123
|
},
|
|
124
|
-
{
|
|
125
|
-
"inputs": [],
|
|
126
|
-
"name": "UnexpectedZeroAddress",
|
|
127
|
-
"type": "error"
|
|
128
|
-
},
|
|
129
124
|
{
|
|
130
125
|
"inputs": [
|
|
131
126
|
{
|
|
@@ -163,6 +158,11 @@
|
|
|
163
158
|
"name": "WrongTransactionAmount",
|
|
164
159
|
"type": "error"
|
|
165
160
|
},
|
|
161
|
+
{
|
|
162
|
+
"inputs": [],
|
|
163
|
+
"name": "ZeroAddressNotAllowed",
|
|
164
|
+
"type": "error"
|
|
165
|
+
},
|
|
166
166
|
{
|
|
167
167
|
"anonymous": false,
|
|
168
168
|
"inputs": [
|
|
@@ -696,8 +696,8 @@
|
|
|
696
696
|
"type": "function"
|
|
697
697
|
}
|
|
698
698
|
],
|
|
699
|
-
"bytecode": "0x6101006040523480156200001257600080fd5b5060405162002052380380620020528339810160408190526200003591620001fb565b8282826200004382620000f9565b6200004e83620000f9565b6200005981620000f9565b6001600160a01b03808316608052831660a081905260408051639254f5e560e01b81529051639254f5e5916004808201926020929091908290030181865afa158015620000aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d091906200024f565b6001600160a01b0390811660c052811660e052620000ed62000124565b50505050505062000276565b6001600160a01b038116620001215760405163f5bf603960e01b815260040160405180910390fd5b50565b600054610100900460ff1615620001915760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620001e3576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200012157600080fd5b6000806000606084860312156200021157600080fd5b83516200021e81620001e5565b60208501519093506200023181620001e5565b60408501519092506200024481620001e5565b809150509250925092565b6000602082840312156200026257600080fd5b81516200026f81620001e5565b9392505050565b60805160a05160c05160e051611d55620002fd60003960008181610253015281816111d401526112710152600081816103660152818161076201528181610e3101528181610ed701528181610f0c0152610f6201526000818161021f015281816112d201526113900152600081816101d30152818161064e01526106d50152611d556000f3fe60806040526004361061012a5760003560e01c80638765adcb116100ab578063b26461de1161006f578063b26461de14610388578063bbd98d70146103b8578063e30c3978146103ed578063f2531ea11461040b578063f2fde38b1461042b578063fe4b84df1461044b57600080fd5b80638765adcb146102d257806389a2bc25146102f25780638da5cb5b146103125780638e3525fc146103305780639254f5e51461035457600080fd5b806361d027b3116100f257806361d027b31461024157806364fd707814610275578063715018a61461028857806379ba50971461029d5780637debe3fe146102b257600080fd5b806311ec4b7a1461012f57806344b3716a1461015157806347a6a971146101a15780635ba3792d146101c15780635fe3b5671461020d575b600080fd5b34801561013b57600080fd5b5061014f61014a366004611a7a565b61046b565b005b34801561015d57600080fd5b5061018c61016c366004611a9e565b60ca60209081526000928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b3480156101ad57600080fd5b5061014f6101bc366004611a9e565b610509565b3480156101cd57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610198565b34801561021957600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561024d57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b61014f610283366004611ad7565b6105c4565b34801561029457600080fd5b5061014f6108b3565b3480156102a957600080fd5b5061014f6108c7565b3480156102be57600080fd5b5061014f6102cd366004611a9e565b610941565b3480156102de57600080fd5b5061014f6102ed366004611a7a565b610a00565b3480156102fe57600080fd5b5061014f61030d366004611b2a565b610a95565b34801561031e57600080fd5b506033546001600160a01b03166101f5565b34801561033c57600080fd5b5061034660c95481565b604051908152602001610198565b34801561036057600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561039457600080fd5b5061018c6103a3366004611a7a565b60cb6020526000908152604090205460ff1681565b3480156103c457600080fd5b506103d86103d3366004611b43565b610ae7565b60408051928352602083019190915201610198565b3480156103f957600080fd5b506065546001600160a01b03166101f5565b34801561041757600080fd5b506103d8610426366004611b2a565b610b3b565b34801561043757600080fd5b5061014f610446366004611a7a565b610b50565b34801561045757600080fd5b5061014f610466366004611b2a565b610bc1565b610473610cd4565b6001600160a01b038116600090815260cb602052604090205460ff16156104bd5760405163404fe9fb60e11b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b038116600081815260cb6020526040808220805460ff19166001179055517f614c47c82976e8f145409efb6366fe2cefa323f389ed9354649262e38dbb35899190a250565b610511610cd4565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff1661056a5760405163435aad4360e01b81526001600160a01b038084166004830152821660248201526044016104b4565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19169055517f6b0d38eafddac0d37e0aff8f4bbd5f3a3cfe124b8eabea27558bffc931ac05b59190a35050565b6105cc610d2e565b6105d583610d87565b6105df8333610dae565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a9190611b6f565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031603610738573483146106ae5760405163dd97100160e01b8152600481018490523460248201526044016104b4565b604051635572051560e11b81526001600160a01b03858116600483015283811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063aae40a2a9034906044016000604051808303818588803b15801561071a57600080fd5b505af115801561072e573d6000803e3d6000fd5b50505050506107b5565b34156107605760405163dd97100160e01b8152600060048201523460248201526044016104b4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316036107a9576107a4848484610e2d565b6107b5565b6107b585858585610fe3565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108209190611b6f565b9050600061082e8383611b9e565b905060008061083d868461110f565b604080518a81526001600160a01b038d811660208301529181018490526060810183905292945090925080881691908a169033907fdd091524d794aecdb5235b2d816620c2598790835e0f3849808504c2dcb4f1a99060800160405180910390a450505050506108ad6001609755565b50505050565b6108bb610cd4565b6108c560006112ac565b565b60655433906001600160a01b031681146109355760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016104b4565b61093e816112ac565b50565b610949610cd4565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16156109a35760405163071df39160e01b81526001600160a01b038084166004830152821660248201526044016104b4565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19166001179055517ffe40417b78788808c927141f806ef5082e7bba0f7790f2e85b811621a91094339190a35050565b610a08610cd4565b6001600160a01b038116600090815260cb602052604090205460ff16610a4c57604051633bf9d98960e11b81526001600160a01b03821660048201526024016104b4565b6001600160a01b038116600081815260cb6020526040808220805460ff19169055517fe1f03de94d16c262d2f0e89a1c42ede8899d540ac992cf53495a5cf29c2896af9190a250565b610a9d610cd4565b610aa6816112c5565b60c95460408051918252602082018390527f0e9a1641744b21c49e4183ab9ce941d420e05a05a446c71875fb07814f362c1a910160405180910390a160c955565b600080610af4848461110f565b60408051838152602081018390529294509092507f965c73d6a816dcbe4cc33516168787cb029afb2156ec3372a16e8c6cfbbe6e22910160405180910390a15b9250929050565b600080610b4783611389565b91509150915091565b610b58610cd4565b606580546001600160a01b0383166001600160a01b03199091168117909155610b896033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600054610100900460ff1615808015610be15750600054600160ff909116105b80610bfb5750303b158015610bfb575060005460ff166001145b610c5e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104b4565b6000805460ff191660011790558015610c81576000805461ff0019166101001790555b610c8a8261143f565b8015610cd0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146108c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b4565b600260975403610d805760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104b4565b6002609755565b6001600160a01b03811661093e5760405163f5bf603960e01b815260040160405180910390fd5b6001600160a01b038216600090815260cb602052604090205460ff168015610dfc57506001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16155b15610cd05760405163074c80eb60e51b81526001600160a01b038084166004830152821660248201526044016104b4565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cbeb2b286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb19190611bb5565b9050610ec86001600160a01b03821633308661147f565b610efd6001600160a01b0382167f000000000000000000000000000000000000000000000000000000000000000060006114ea565b610f316001600160a01b0382167f0000000000000000000000000000000000000000000000000000000000000000856114ea565b6040516311b3d5e760e01b81526001600160a01b0385811660048301526024820185905283811660448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906311b3d5e79060640160408051808303816000875af1158015610fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd09190611bd2565b509050610fdc81611604565b5050505050565b6000846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110479190611bb5565b9050600061105782333087611628565b905061106e6001600160a01b0383168760006114ea565b6110826001600160a01b03831687836114ea565b604051637af1e23160e11b81526001600160a01b038681166004830152602482018390528481166044830152611107919088169063f5e3c462906064016020604051808303816000875af11580156110de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111029190611b6f565b611604565b505050505050565b60008061111b83611389565b60405163a9059cbb60e01b81523360048201526024810182905291935091506001600160a01b0385169063a9059cbb906044016020604051808303816000875af115801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190611bf6565b6111bd5760405163241165bb60e21b8152306004820152336024820152604481018290526064016104b4565b60405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112509190611bf6565b610b345760405163241165bb60e21b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604481018390526064016104b4565b6001609755565b606580546001600160a01b031916905561093e81611731565b6000670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561132e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113529190611b6f565b61135c9190611b9e565b905080821115610cd057604051635659cb3b60e01b815260048101829052602481018390526044016104b4565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190611b6f565b90508060c954856114219190611c18565b61142b9190611c37565b92506114378385611b9e565b915050915091565b600054610100900460ff166114665760405162461bcd60e51b81526004016104b490611c59565b61146e611783565b6114766117b2565b61093e816117e1565b6040516001600160a01b03808516602483015283166044820152606481018290526108ad9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611816565b8015806115645750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561153e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115629190611b6f565b155b6115cf5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016104b4565b6040516001600160a01b0383166024820152604481018290526115ff90849063095ea7b360e01b906064016114b3565b505050565b8061160c5750565b60405163125a96ab60e01b8152600481018290526024016104b4565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918716906370a0823190602401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190611b6f565b90506116ae6001600160a01b03871686868661147f565b6040516370a0823160e01b81526001600160a01b0385811660048301528291908816906370a0823190602401602060405180830381865afa1580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b9190611b6f565b6117259190611b9e565b9150505b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166117aa5760405162461bcd60e51b81526004016104b490611c59565b6108c56118eb565b600054610100900460ff166117d95760405162461bcd60e51b81526004016104b490611c59565b6108c561191b565b600054610100900460ff166118085760405162461bcd60e51b81526004016104b490611c59565b611811816112c5565b60c955565b600061186b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166119429092919063ffffffff16565b905080516000148061188c57508080602001905181019061188c9190611bf6565b6115ff5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104b4565b600054610100900460ff166119125760405162461bcd60e51b81526004016104b490611c59565b6108c5336112ac565b600054610100900460ff166112a55760405162461bcd60e51b81526004016104b490611c59565b6060611729848460008585600080866001600160a01b031685876040516119699190611cd0565b60006040518083038185875af1925050503d80600081146119a6576040519150601f19603f3d011682016040523d82523d6000602084013e6119ab565b606091505b50915091506119bc878383876119c7565b979650505050505050565b60608315611a36578251600003611a2f576001600160a01b0385163b611a2f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104b4565b5081611729565b6117298383815115611a4b5781518083602001fd5b8060405162461bcd60e51b81526004016104b49190611cec565b6001600160a01b038116811461093e57600080fd5b600060208284031215611a8c57600080fd5b8135611a9781611a65565b9392505050565b60008060408385031215611ab157600080fd5b8235611abc81611a65565b91506020830135611acc81611a65565b809150509250929050565b60008060008060808587031215611aed57600080fd5b8435611af881611a65565b93506020850135611b0881611a65565b9250604085013591506060850135611b1f81611a65565b939692955090935050565b600060208284031215611b3c57600080fd5b5035919050565b60008060408385031215611b5657600080fd5b8235611b6181611a65565b946020939093013593505050565b600060208284031215611b8157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015611bb057611bb0611b88565b500390565b600060208284031215611bc757600080fd5b8151611a9781611a65565b60008060408385031215611be557600080fd5b505080516020909101519092909150565b600060208284031215611c0857600080fd5b81518015158114611a9757600080fd5b6000816000190483118215151615611c3257611c32611b88565b500290565b600082611c5457634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b83811015611cbf578181015183820152602001611ca7565b838111156108ad5750506000910152565b60008251611ce2818460208701611ca4565b9190910192915050565b6020815260008251806020840152611d0b816040850160208701611ca4565b601f01601f1916919091016040019291505056fea26469706673582212200ae229ab6b9d2efb31694465c53d889a910120a74e2669aa09441f05209d2fd464736f6c634300080d0033",
|
|
700
|
-
"deployedBytecode": "0x60806040526004361061012a5760003560e01c80638765adcb116100ab578063b26461de1161006f578063b26461de14610388578063bbd98d70146103b8578063e30c3978146103ed578063f2531ea11461040b578063f2fde38b1461042b578063fe4b84df1461044b57600080fd5b80638765adcb146102d257806389a2bc25146102f25780638da5cb5b146103125780638e3525fc146103305780639254f5e51461035457600080fd5b806361d027b3116100f257806361d027b31461024157806364fd707814610275578063715018a61461028857806379ba50971461029d5780637debe3fe146102b257600080fd5b806311ec4b7a1461012f57806344b3716a1461015157806347a6a971146101a15780635ba3792d146101c15780635fe3b5671461020d575b600080fd5b34801561013b57600080fd5b5061014f61014a366004611a7a565b61046b565b005b34801561015d57600080fd5b5061018c61016c366004611a9e565b60ca60209081526000928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b3480156101ad57600080fd5b5061014f6101bc366004611a9e565b610509565b3480156101cd57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610198565b34801561021957600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561024d57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b61014f610283366004611ad7565b6105c4565b34801561029457600080fd5b5061014f6108b3565b3480156102a957600080fd5b5061014f6108c7565b3480156102be57600080fd5b5061014f6102cd366004611a9e565b610941565b3480156102de57600080fd5b5061014f6102ed366004611a7a565b610a00565b3480156102fe57600080fd5b5061014f61030d366004611b2a565b610a95565b34801561031e57600080fd5b506033546001600160a01b03166101f5565b34801561033c57600080fd5b5061034660c95481565b604051908152602001610198565b34801561036057600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561039457600080fd5b5061018c6103a3366004611a7a565b60cb6020526000908152604090205460ff1681565b3480156103c457600080fd5b506103d86103d3366004611b43565b610ae7565b60408051928352602083019190915201610198565b3480156103f957600080fd5b506065546001600160a01b03166101f5565b34801561041757600080fd5b506103d8610426366004611b2a565b610b3b565b34801561043757600080fd5b5061014f610446366004611a7a565b610b50565b34801561045757600080fd5b5061014f610466366004611b2a565b610bc1565b610473610cd4565b6001600160a01b038116600090815260cb602052604090205460ff16156104bd5760405163404fe9fb60e11b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b038116600081815260cb6020526040808220805460ff19166001179055517f614c47c82976e8f145409efb6366fe2cefa323f389ed9354649262e38dbb35899190a250565b610511610cd4565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff1661056a5760405163435aad4360e01b81526001600160a01b038084166004830152821660248201526044016104b4565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19169055517f6b0d38eafddac0d37e0aff8f4bbd5f3a3cfe124b8eabea27558bffc931ac05b59190a35050565b6105cc610d2e565b6105d583610d87565b6105df8333610dae565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a9190611b6f565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031603610738573483146106ae5760405163dd97100160e01b8152600481018490523460248201526044016104b4565b604051635572051560e11b81526001600160a01b03858116600483015283811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063aae40a2a9034906044016000604051808303818588803b15801561071a57600080fd5b505af115801561072e573d6000803e3d6000fd5b50505050506107b5565b34156107605760405163dd97100160e01b8152600060048201523460248201526044016104b4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316036107a9576107a4848484610e2d565b6107b5565b6107b585858585610fe3565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108209190611b6f565b9050600061082e8383611b9e565b905060008061083d868461110f565b604080518a81526001600160a01b038d811660208301529181018490526060810183905292945090925080881691908a169033907fdd091524d794aecdb5235b2d816620c2598790835e0f3849808504c2dcb4f1a99060800160405180910390a450505050506108ad6001609755565b50505050565b6108bb610cd4565b6108c560006112ac565b565b60655433906001600160a01b031681146109355760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016104b4565b61093e816112ac565b50565b610949610cd4565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16156109a35760405163071df39160e01b81526001600160a01b038084166004830152821660248201526044016104b4565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19166001179055517ffe40417b78788808c927141f806ef5082e7bba0f7790f2e85b811621a91094339190a35050565b610a08610cd4565b6001600160a01b038116600090815260cb602052604090205460ff16610a4c57604051633bf9d98960e11b81526001600160a01b03821660048201526024016104b4565b6001600160a01b038116600081815260cb6020526040808220805460ff19169055517fe1f03de94d16c262d2f0e89a1c42ede8899d540ac992cf53495a5cf29c2896af9190a250565b610a9d610cd4565b610aa6816112c5565b60c95460408051918252602082018390527f0e9a1641744b21c49e4183ab9ce941d420e05a05a446c71875fb07814f362c1a910160405180910390a160c955565b600080610af4848461110f565b60408051838152602081018390529294509092507f965c73d6a816dcbe4cc33516168787cb029afb2156ec3372a16e8c6cfbbe6e22910160405180910390a15b9250929050565b600080610b4783611389565b91509150915091565b610b58610cd4565b606580546001600160a01b0383166001600160a01b03199091168117909155610b896033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600054610100900460ff1615808015610be15750600054600160ff909116105b80610bfb5750303b158015610bfb575060005460ff166001145b610c5e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104b4565b6000805460ff191660011790558015610c81576000805461ff0019166101001790555b610c8a8261143f565b8015610cd0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146108c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b4565b600260975403610d805760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104b4565b6002609755565b6001600160a01b03811661093e5760405163f5bf603960e01b815260040160405180910390fd5b6001600160a01b038216600090815260cb602052604090205460ff168015610dfc57506001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16155b15610cd05760405163074c80eb60e51b81526001600160a01b038084166004830152821660248201526044016104b4565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cbeb2b286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb19190611bb5565b9050610ec86001600160a01b03821633308661147f565b610efd6001600160a01b0382167f000000000000000000000000000000000000000000000000000000000000000060006114ea565b610f316001600160a01b0382167f0000000000000000000000000000000000000000000000000000000000000000856114ea565b6040516311b3d5e760e01b81526001600160a01b0385811660048301526024820185905283811660448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906311b3d5e79060640160408051808303816000875af1158015610fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd09190611bd2565b509050610fdc81611604565b5050505050565b6000846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110479190611bb5565b9050600061105782333087611628565b905061106e6001600160a01b0383168760006114ea565b6110826001600160a01b03831687836114ea565b604051637af1e23160e11b81526001600160a01b038681166004830152602482018390528481166044830152611107919088169063f5e3c462906064016020604051808303816000875af11580156110de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111029190611b6f565b611604565b505050505050565b60008061111b83611389565b60405163a9059cbb60e01b81523360048201526024810182905291935091506001600160a01b0385169063a9059cbb906044016020604051808303816000875af115801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190611bf6565b6111bd5760405163241165bb60e21b8152306004820152336024820152604481018290526064016104b4565b60405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112509190611bf6565b610b345760405163241165bb60e21b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604481018390526064016104b4565b6001609755565b606580546001600160a01b031916905561093e81611731565b6000670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561132e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113529190611b6f565b61135c9190611b9e565b905080821115610cd057604051635659cb3b60e01b815260048101829052602481018390526044016104b4565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190611b6f565b90508060c954856114219190611c18565b61142b9190611c37565b92506114378385611b9e565b915050915091565b600054610100900460ff166114665760405162461bcd60e51b81526004016104b490611c59565b61146e611783565b6114766117b2565b61093e816117e1565b6040516001600160a01b03808516602483015283166044820152606481018290526108ad9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611816565b8015806115645750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561153e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115629190611b6f565b155b6115cf5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016104b4565b6040516001600160a01b0383166024820152604481018290526115ff90849063095ea7b360e01b906064016114b3565b505050565b8061160c5750565b60405163125a96ab60e01b8152600481018290526024016104b4565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918716906370a0823190602401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190611b6f565b90506116ae6001600160a01b03871686868661147f565b6040516370a0823160e01b81526001600160a01b0385811660048301528291908816906370a0823190602401602060405180830381865afa1580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b9190611b6f565b6117259190611b9e565b9150505b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166117aa5760405162461bcd60e51b81526004016104b490611c59565b6108c56118eb565b600054610100900460ff166117d95760405162461bcd60e51b81526004016104b490611c59565b6108c561191b565b600054610100900460ff166118085760405162461bcd60e51b81526004016104b490611c59565b611811816112c5565b60c955565b600061186b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166119429092919063ffffffff16565b905080516000148061188c57508080602001905181019061188c9190611bf6565b6115ff5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104b4565b600054610100900460ff166119125760405162461bcd60e51b81526004016104b490611c59565b6108c5336112ac565b600054610100900460ff166112a55760405162461bcd60e51b81526004016104b490611c59565b6060611729848460008585600080866001600160a01b031685876040516119699190611cd0565b60006040518083038185875af1925050503d80600081146119a6576040519150601f19603f3d011682016040523d82523d6000602084013e6119ab565b606091505b50915091506119bc878383876119c7565b979650505050505050565b60608315611a36578251600003611a2f576001600160a01b0385163b611a2f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104b4565b5081611729565b6117298383815115611a4b5781518083602001fd5b8060405162461bcd60e51b81526004016104b49190611cec565b6001600160a01b038116811461093e57600080fd5b600060208284031215611a8c57600080fd5b8135611a9781611a65565b9392505050565b60008060408385031215611ab157600080fd5b8235611abc81611a65565b91506020830135611acc81611a65565b809150509250929050565b60008060008060808587031215611aed57600080fd5b8435611af881611a65565b93506020850135611b0881611a65565b9250604085013591506060850135611b1f81611a65565b939692955090935050565b600060208284031215611b3c57600080fd5b5035919050565b60008060408385031215611b5657600080fd5b8235611b6181611a65565b946020939093013593505050565b600060208284031215611b8157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015611bb057611bb0611b88565b500390565b600060208284031215611bc757600080fd5b8151611a9781611a65565b60008060408385031215611be557600080fd5b505080516020909101519092909150565b600060208284031215611c0857600080fd5b81518015158114611a9757600080fd5b6000816000190483118215151615611c3257611c32611b88565b500290565b600082611c5457634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b83811015611cbf578181015183820152602001611ca7565b838111156108ad5750506000910152565b60008251611ce2818460208701611ca4565b9190910192915050565b6020815260008251806020840152611d0b816040850160208701611ca4565b601f01601f1916919091016040019291505056fea26469706673582212200ae229ab6b9d2efb31694465c53d889a910120a74e2669aa09441f05209d2fd464736f6c634300080d0033",
|
|
699
|
+
"bytecode": "0x6101006040523480156200001257600080fd5b5060405162002052380380620020528339810160408190526200003591620001fb565b8282826200004382620000f9565b6200004e83620000f9565b6200005981620000f9565b6001600160a01b03808316608052831660a081905260408051639254f5e560e01b81529051639254f5e5916004808201926020929091908290030181865afa158015620000aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d091906200024f565b6001600160a01b0390811660c052811660e052620000ed62000124565b50505050505062000276565b6001600160a01b03811662000121576040516342bcdf7f60e11b815260040160405180910390fd5b50565b600054610100900460ff1615620001915760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620001e3576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200012157600080fd5b6000806000606084860312156200021157600080fd5b83516200021e81620001e5565b60208501519093506200023181620001e5565b60408501519092506200024481620001e5565b809150509250925092565b6000602082840312156200026257600080fd5b81516200026f81620001e5565b9392505050565b60805160a05160c05160e051611d55620002fd60003960008181610253015281816111d401526112710152600081816103660152818161076201528181610e3101528181610ed701528181610f0c0152610f6201526000818161021f015281816112d201526113900152600081816101d30152818161064e01526106d50152611d556000f3fe60806040526004361061012a5760003560e01c80638765adcb116100ab578063b26461de1161006f578063b26461de14610388578063bbd98d70146103b8578063e30c3978146103ed578063f2531ea11461040b578063f2fde38b1461042b578063fe4b84df1461044b57600080fd5b80638765adcb146102d257806389a2bc25146102f25780638da5cb5b146103125780638e3525fc146103305780639254f5e51461035457600080fd5b806361d027b3116100f257806361d027b31461024157806364fd707814610275578063715018a61461028857806379ba50971461029d5780637debe3fe146102b257600080fd5b806311ec4b7a1461012f57806344b3716a1461015157806347a6a971146101a15780635ba3792d146101c15780635fe3b5671461020d575b600080fd5b34801561013b57600080fd5b5061014f61014a366004611a7a565b61046b565b005b34801561015d57600080fd5b5061018c61016c366004611a9e565b60ca60209081526000928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b3480156101ad57600080fd5b5061014f6101bc366004611a9e565b610509565b3480156101cd57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610198565b34801561021957600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561024d57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b61014f610283366004611ad7565b6105c4565b34801561029457600080fd5b5061014f6108b3565b3480156102a957600080fd5b5061014f6108c7565b3480156102be57600080fd5b5061014f6102cd366004611a9e565b610941565b3480156102de57600080fd5b5061014f6102ed366004611a7a565b610a00565b3480156102fe57600080fd5b5061014f61030d366004611b2a565b610a95565b34801561031e57600080fd5b506033546001600160a01b03166101f5565b34801561033c57600080fd5b5061034660c95481565b604051908152602001610198565b34801561036057600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561039457600080fd5b5061018c6103a3366004611a7a565b60cb6020526000908152604090205460ff1681565b3480156103c457600080fd5b506103d86103d3366004611b43565b610ae7565b60408051928352602083019190915201610198565b3480156103f957600080fd5b506065546001600160a01b03166101f5565b34801561041757600080fd5b506103d8610426366004611b2a565b610b3b565b34801561043757600080fd5b5061014f610446366004611a7a565b610b50565b34801561045757600080fd5b5061014f610466366004611b2a565b610bc1565b610473610cd4565b6001600160a01b038116600090815260cb602052604090205460ff16156104bd5760405163404fe9fb60e11b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b038116600081815260cb6020526040808220805460ff19166001179055517f614c47c82976e8f145409efb6366fe2cefa323f389ed9354649262e38dbb35899190a250565b610511610cd4565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff1661056a5760405163435aad4360e01b81526001600160a01b038084166004830152821660248201526044016104b4565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19169055517f6b0d38eafddac0d37e0aff8f4bbd5f3a3cfe124b8eabea27558bffc931ac05b59190a35050565b6105cc610d2e565b6105d583610d87565b6105df8333610dae565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a9190611b6f565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031603610738573483146106ae5760405163dd97100160e01b8152600481018490523460248201526044016104b4565b604051635572051560e11b81526001600160a01b03858116600483015283811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063aae40a2a9034906044016000604051808303818588803b15801561071a57600080fd5b505af115801561072e573d6000803e3d6000fd5b50505050506107b5565b34156107605760405163dd97100160e01b8152600060048201523460248201526044016104b4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316036107a9576107a4848484610e2d565b6107b5565b6107b585858585610fe3565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108209190611b6f565b9050600061082e8383611b9e565b905060008061083d868461110f565b604080518a81526001600160a01b038d811660208301529181018490526060810183905292945090925080881691908a169033907fdd091524d794aecdb5235b2d816620c2598790835e0f3849808504c2dcb4f1a99060800160405180910390a450505050506108ad6001609755565b50505050565b6108bb610cd4565b6108c560006112ac565b565b60655433906001600160a01b031681146109355760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016104b4565b61093e816112ac565b50565b610949610cd4565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16156109a35760405163071df39160e01b81526001600160a01b038084166004830152821660248201526044016104b4565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19166001179055517ffe40417b78788808c927141f806ef5082e7bba0f7790f2e85b811621a91094339190a35050565b610a08610cd4565b6001600160a01b038116600090815260cb602052604090205460ff16610a4c57604051633bf9d98960e11b81526001600160a01b03821660048201526024016104b4565b6001600160a01b038116600081815260cb6020526040808220805460ff19169055517fe1f03de94d16c262d2f0e89a1c42ede8899d540ac992cf53495a5cf29c2896af9190a250565b610a9d610cd4565b610aa6816112c5565b60c95460408051918252602082018390527f0e9a1641744b21c49e4183ab9ce941d420e05a05a446c71875fb07814f362c1a910160405180910390a160c955565b600080610af4848461110f565b60408051838152602081018390529294509092507f965c73d6a816dcbe4cc33516168787cb029afb2156ec3372a16e8c6cfbbe6e22910160405180910390a15b9250929050565b600080610b4783611389565b91509150915091565b610b58610cd4565b606580546001600160a01b0383166001600160a01b03199091168117909155610b896033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600054610100900460ff1615808015610be15750600054600160ff909116105b80610bfb5750303b158015610bfb575060005460ff166001145b610c5e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104b4565b6000805460ff191660011790558015610c81576000805461ff0019166101001790555b610c8a8261143f565b8015610cd0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146108c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b4565b600260975403610d805760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104b4565b6002609755565b6001600160a01b03811661093e576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b038216600090815260cb602052604090205460ff168015610dfc57506001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16155b15610cd05760405163074c80eb60e51b81526001600160a01b038084166004830152821660248201526044016104b4565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cbeb2b286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb19190611bb5565b9050610ec86001600160a01b03821633308661147f565b610efd6001600160a01b0382167f000000000000000000000000000000000000000000000000000000000000000060006114ea565b610f316001600160a01b0382167f0000000000000000000000000000000000000000000000000000000000000000856114ea565b6040516311b3d5e760e01b81526001600160a01b0385811660048301526024820185905283811660448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906311b3d5e79060640160408051808303816000875af1158015610fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd09190611bd2565b509050610fdc81611604565b5050505050565b6000846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110479190611bb5565b9050600061105782333087611628565b905061106e6001600160a01b0383168760006114ea565b6110826001600160a01b03831687836114ea565b604051637af1e23160e11b81526001600160a01b038681166004830152602482018390528481166044830152611107919088169063f5e3c462906064016020604051808303816000875af11580156110de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111029190611b6f565b611604565b505050505050565b60008061111b83611389565b60405163a9059cbb60e01b81523360048201526024810182905291935091506001600160a01b0385169063a9059cbb906044016020604051808303816000875af115801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190611bf6565b6111bd5760405163241165bb60e21b8152306004820152336024820152604481018290526064016104b4565b60405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112509190611bf6565b610b345760405163241165bb60e21b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604481018390526064016104b4565b6001609755565b606580546001600160a01b031916905561093e81611731565b6000670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561132e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113529190611b6f565b61135c9190611b9e565b905080821115610cd057604051635659cb3b60e01b815260048101829052602481018390526044016104b4565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190611b6f565b90508060c954856114219190611c18565b61142b9190611c37565b92506114378385611b9e565b915050915091565b600054610100900460ff166114665760405162461bcd60e51b81526004016104b490611c59565b61146e611783565b6114766117b2565b61093e816117e1565b6040516001600160a01b03808516602483015283166044820152606481018290526108ad9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611816565b8015806115645750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561153e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115629190611b6f565b155b6115cf5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016104b4565b6040516001600160a01b0383166024820152604481018290526115ff90849063095ea7b360e01b906064016114b3565b505050565b8061160c5750565b60405163125a96ab60e01b8152600481018290526024016104b4565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918716906370a0823190602401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190611b6f565b90506116ae6001600160a01b03871686868661147f565b6040516370a0823160e01b81526001600160a01b0385811660048301528291908816906370a0823190602401602060405180830381865afa1580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b9190611b6f565b6117259190611b9e565b9150505b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166117aa5760405162461bcd60e51b81526004016104b490611c59565b6108c56118eb565b600054610100900460ff166117d95760405162461bcd60e51b81526004016104b490611c59565b6108c561191b565b600054610100900460ff166118085760405162461bcd60e51b81526004016104b490611c59565b611811816112c5565b60c955565b600061186b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166119429092919063ffffffff16565b905080516000148061188c57508080602001905181019061188c9190611bf6565b6115ff5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104b4565b600054610100900460ff166119125760405162461bcd60e51b81526004016104b490611c59565b6108c5336112ac565b600054610100900460ff166112a55760405162461bcd60e51b81526004016104b490611c59565b6060611729848460008585600080866001600160a01b031685876040516119699190611cd0565b60006040518083038185875af1925050503d80600081146119a6576040519150601f19603f3d011682016040523d82523d6000602084013e6119ab565b606091505b50915091506119bc878383876119c7565b979650505050505050565b60608315611a36578251600003611a2f576001600160a01b0385163b611a2f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104b4565b5081611729565b6117298383815115611a4b5781518083602001fd5b8060405162461bcd60e51b81526004016104b49190611cec565b6001600160a01b038116811461093e57600080fd5b600060208284031215611a8c57600080fd5b8135611a9781611a65565b9392505050565b60008060408385031215611ab157600080fd5b8235611abc81611a65565b91506020830135611acc81611a65565b809150509250929050565b60008060008060808587031215611aed57600080fd5b8435611af881611a65565b93506020850135611b0881611a65565b9250604085013591506060850135611b1f81611a65565b939692955090935050565b600060208284031215611b3c57600080fd5b5035919050565b60008060408385031215611b5657600080fd5b8235611b6181611a65565b946020939093013593505050565b600060208284031215611b8157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015611bb057611bb0611b88565b500390565b600060208284031215611bc757600080fd5b8151611a9781611a65565b60008060408385031215611be557600080fd5b505080516020909101519092909150565b600060208284031215611c0857600080fd5b81518015158114611a9757600080fd5b6000816000190483118215151615611c3257611c32611b88565b500290565b600082611c5457634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b83811015611cbf578181015183820152602001611ca7565b838111156108ad5750506000910152565b60008251611ce2818460208701611ca4565b9190910192915050565b6020815260008251806020840152611d0b816040850160208701611ca4565b601f01601f1916919091016040019291505056fea2646970667358221220c2bf8fb23d37dda77ed8af95341d8eca024645e388818bbb0180f3c111874d1b64736f6c634300080d0033",
|
|
700
|
+
"deployedBytecode": "0x60806040526004361061012a5760003560e01c80638765adcb116100ab578063b26461de1161006f578063b26461de14610388578063bbd98d70146103b8578063e30c3978146103ed578063f2531ea11461040b578063f2fde38b1461042b578063fe4b84df1461044b57600080fd5b80638765adcb146102d257806389a2bc25146102f25780638da5cb5b146103125780638e3525fc146103305780639254f5e51461035457600080fd5b806361d027b3116100f257806361d027b31461024157806364fd707814610275578063715018a61461028857806379ba50971461029d5780637debe3fe146102b257600080fd5b806311ec4b7a1461012f57806344b3716a1461015157806347a6a971146101a15780635ba3792d146101c15780635fe3b5671461020d575b600080fd5b34801561013b57600080fd5b5061014f61014a366004611a7a565b61046b565b005b34801561015d57600080fd5b5061018c61016c366004611a9e565b60ca60209081526000928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b3480156101ad57600080fd5b5061014f6101bc366004611a9e565b610509565b3480156101cd57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610198565b34801561021957600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561024d57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b61014f610283366004611ad7565b6105c4565b34801561029457600080fd5b5061014f6108b3565b3480156102a957600080fd5b5061014f6108c7565b3480156102be57600080fd5b5061014f6102cd366004611a9e565b610941565b3480156102de57600080fd5b5061014f6102ed366004611a7a565b610a00565b3480156102fe57600080fd5b5061014f61030d366004611b2a565b610a95565b34801561031e57600080fd5b506033546001600160a01b03166101f5565b34801561033c57600080fd5b5061034660c95481565b604051908152602001610198565b34801561036057600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561039457600080fd5b5061018c6103a3366004611a7a565b60cb6020526000908152604090205460ff1681565b3480156103c457600080fd5b506103d86103d3366004611b43565b610ae7565b60408051928352602083019190915201610198565b3480156103f957600080fd5b506065546001600160a01b03166101f5565b34801561041757600080fd5b506103d8610426366004611b2a565b610b3b565b34801561043757600080fd5b5061014f610446366004611a7a565b610b50565b34801561045757600080fd5b5061014f610466366004611b2a565b610bc1565b610473610cd4565b6001600160a01b038116600090815260cb602052604090205460ff16156104bd5760405163404fe9fb60e11b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b038116600081815260cb6020526040808220805460ff19166001179055517f614c47c82976e8f145409efb6366fe2cefa323f389ed9354649262e38dbb35899190a250565b610511610cd4565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff1661056a5760405163435aad4360e01b81526001600160a01b038084166004830152821660248201526044016104b4565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19169055517f6b0d38eafddac0d37e0aff8f4bbd5f3a3cfe124b8eabea27558bffc931ac05b59190a35050565b6105cc610d2e565b6105d583610d87565b6105df8333610dae565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a9190611b6f565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031603610738573483146106ae5760405163dd97100160e01b8152600481018490523460248201526044016104b4565b604051635572051560e11b81526001600160a01b03858116600483015283811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063aae40a2a9034906044016000604051808303818588803b15801561071a57600080fd5b505af115801561072e573d6000803e3d6000fd5b50505050506107b5565b34156107605760405163dd97100160e01b8152600060048201523460248201526044016104b4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316036107a9576107a4848484610e2d565b6107b5565b6107b585858585610fe3565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108209190611b6f565b9050600061082e8383611b9e565b905060008061083d868461110f565b604080518a81526001600160a01b038d811660208301529181018490526060810183905292945090925080881691908a169033907fdd091524d794aecdb5235b2d816620c2598790835e0f3849808504c2dcb4f1a99060800160405180910390a450505050506108ad6001609755565b50505050565b6108bb610cd4565b6108c560006112ac565b565b60655433906001600160a01b031681146109355760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016104b4565b61093e816112ac565b50565b610949610cd4565b6001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16156109a35760405163071df39160e01b81526001600160a01b038084166004830152821660248201526044016104b4565b6001600160a01b03808316600081815260ca6020908152604080832094861680845294909152808220805460ff19166001179055517ffe40417b78788808c927141f806ef5082e7bba0f7790f2e85b811621a91094339190a35050565b610a08610cd4565b6001600160a01b038116600090815260cb602052604090205460ff16610a4c57604051633bf9d98960e11b81526001600160a01b03821660048201526024016104b4565b6001600160a01b038116600081815260cb6020526040808220805460ff19169055517fe1f03de94d16c262d2f0e89a1c42ede8899d540ac992cf53495a5cf29c2896af9190a250565b610a9d610cd4565b610aa6816112c5565b60c95460408051918252602082018390527f0e9a1641744b21c49e4183ab9ce941d420e05a05a446c71875fb07814f362c1a910160405180910390a160c955565b600080610af4848461110f565b60408051838152602081018390529294509092507f965c73d6a816dcbe4cc33516168787cb029afb2156ec3372a16e8c6cfbbe6e22910160405180910390a15b9250929050565b600080610b4783611389565b91509150915091565b610b58610cd4565b606580546001600160a01b0383166001600160a01b03199091168117909155610b896033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600054610100900460ff1615808015610be15750600054600160ff909116105b80610bfb5750303b158015610bfb575060005460ff166001145b610c5e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104b4565b6000805460ff191660011790558015610c81576000805461ff0019166101001790555b610c8a8261143f565b8015610cd0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6033546001600160a01b031633146108c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b4565b600260975403610d805760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104b4565b6002609755565b6001600160a01b03811661093e576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b038216600090815260cb602052604090205460ff168015610dfc57506001600160a01b03808316600090815260ca602090815260408083209385168352929052205460ff16155b15610cd05760405163074c80eb60e51b81526001600160a01b038084166004830152821660248201526044016104b4565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cbeb2b286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb19190611bb5565b9050610ec86001600160a01b03821633308661147f565b610efd6001600160a01b0382167f000000000000000000000000000000000000000000000000000000000000000060006114ea565b610f316001600160a01b0382167f0000000000000000000000000000000000000000000000000000000000000000856114ea565b6040516311b3d5e760e01b81526001600160a01b0385811660048301526024820185905283811660448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906311b3d5e79060640160408051808303816000875af1158015610fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd09190611bd2565b509050610fdc81611604565b5050505050565b6000846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110479190611bb5565b9050600061105782333087611628565b905061106e6001600160a01b0383168760006114ea565b6110826001600160a01b03831687836114ea565b604051637af1e23160e11b81526001600160a01b038681166004830152602482018390528481166044830152611107919088169063f5e3c462906064016020604051808303816000875af11580156110de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111029190611b6f565b611604565b505050505050565b60008061111b83611389565b60405163a9059cbb60e01b81523360048201526024810182905291935091506001600160a01b0385169063a9059cbb906044016020604051808303816000875af115801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190611bf6565b6111bd5760405163241165bb60e21b8152306004820152336024820152604481018290526064016104b4565b60405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af115801561122c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112509190611bf6565b610b345760405163241165bb60e21b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604481018390526064016104b4565b6001609755565b606580546001600160a01b031916905561093e81611731565b6000670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561132e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113529190611b6f565b61135c9190611b9e565b905080821115610cd057604051635659cb3b60e01b815260048101829052602481018390526044016104b4565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ada90af6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190611b6f565b90508060c954856114219190611c18565b61142b9190611c37565b92506114378385611b9e565b915050915091565b600054610100900460ff166114665760405162461bcd60e51b81526004016104b490611c59565b61146e611783565b6114766117b2565b61093e816117e1565b6040516001600160a01b03808516602483015283166044820152606481018290526108ad9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611816565b8015806115645750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561153e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115629190611b6f565b155b6115cf5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016104b4565b6040516001600160a01b0383166024820152604481018290526115ff90849063095ea7b360e01b906064016114b3565b505050565b8061160c5750565b60405163125a96ab60e01b8152600481018290526024016104b4565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918716906370a0823190602401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190611b6f565b90506116ae6001600160a01b03871686868661147f565b6040516370a0823160e01b81526001600160a01b0385811660048301528291908816906370a0823190602401602060405180830381865afa1580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b9190611b6f565b6117259190611b9e565b9150505b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166117aa5760405162461bcd60e51b81526004016104b490611c59565b6108c56118eb565b600054610100900460ff166117d95760405162461bcd60e51b81526004016104b490611c59565b6108c561191b565b600054610100900460ff166118085760405162461bcd60e51b81526004016104b490611c59565b611811816112c5565b60c955565b600061186b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166119429092919063ffffffff16565b905080516000148061188c57508080602001905181019061188c9190611bf6565b6115ff5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104b4565b600054610100900460ff166119125760405162461bcd60e51b81526004016104b490611c59565b6108c5336112ac565b600054610100900460ff166112a55760405162461bcd60e51b81526004016104b490611c59565b6060611729848460008585600080866001600160a01b031685876040516119699190611cd0565b60006040518083038185875af1925050503d80600081146119a6576040519150601f19603f3d011682016040523d82523d6000602084013e6119ab565b606091505b50915091506119bc878383876119c7565b979650505050505050565b60608315611a36578251600003611a2f576001600160a01b0385163b611a2f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104b4565b5081611729565b6117298383815115611a4b5781518083602001fd5b8060405162461bcd60e51b81526004016104b49190611cec565b6001600160a01b038116811461093e57600080fd5b600060208284031215611a8c57600080fd5b8135611a9781611a65565b9392505050565b60008060408385031215611ab157600080fd5b8235611abc81611a65565b91506020830135611acc81611a65565b809150509250929050565b60008060008060808587031215611aed57600080fd5b8435611af881611a65565b93506020850135611b0881611a65565b9250604085013591506060850135611b1f81611a65565b939692955090935050565b600060208284031215611b3c57600080fd5b5035919050565b60008060408385031215611b5657600080fd5b8235611b6181611a65565b946020939093013593505050565b600060208284031215611b8157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015611bb057611bb0611b88565b500390565b600060208284031215611bc757600080fd5b8151611a9781611a65565b60008060408385031215611be557600080fd5b505080516020909101519092909150565b600060208284031215611c0857600080fd5b81518015158114611a9757600080fd5b6000816000190483118215151615611c3257611c32611b88565b500290565b600082611c5457634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b83811015611cbf578181015183820152602001611ca7565b838111156108ad5750506000910152565b60008251611ce2818460208701611ca4565b9190910192915050565b6020815260008251806020840152611d0b816040850160208701611ca4565b601f01601f1916919091016040019291505056fea2646970667358221220c2bf8fb23d37dda77ed8af95341d8eca024645e388818bbb0180f3c111874d1b64736f6c634300080d0033",
|
|
701
701
|
"linkReferences": {},
|
|
702
702
|
"deployedLinkReferences": {}
|
|
703
703
|
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
|
|
3
|
+
pragma solidity 0.8.13;
|
|
4
|
+
|
|
5
|
+
import { Ownable2StepUpgradeable } from "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol";
|
|
6
|
+
import { ReentrancyGuardUpgradeable } from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
|
|
7
|
+
import { SafeERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol";
|
|
8
|
+
import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
|
|
9
|
+
import { ResilientOracleInterface } from "@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol";
|
|
10
|
+
|
|
11
|
+
import { approveOrRevert } from "../lib/approveOrRevert.sol";
|
|
12
|
+
import { IVBep20, IComptroller } from "../InterfacesV8.sol";
|
|
13
|
+
|
|
14
|
+
contract MoveDebtDelegate is Ownable2StepUpgradeable, ReentrancyGuardUpgradeable {
|
|
15
|
+
/// @dev VToken return value signalling about successful execution
|
|
16
|
+
uint256 internal constant NO_ERROR = 0;
|
|
17
|
+
|
|
18
|
+
/// @notice VToken to repay the debt to
|
|
19
|
+
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable
|
|
20
|
+
IVBep20 public immutable vTokenToRepay;
|
|
21
|
+
|
|
22
|
+
/// @notice User to borrow on behalf of
|
|
23
|
+
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable
|
|
24
|
+
address public immutable newBorrower;
|
|
25
|
+
|
|
26
|
+
/// @notice Whether to allow borrowing from the corresponding vToken
|
|
27
|
+
mapping(address => bool) public borrowAllowed;
|
|
28
|
+
|
|
29
|
+
/// @notice Emitted when vToken is allowed or denied to be borrowed from
|
|
30
|
+
event BorrowAllowedSet(address indexed vToken, bool allowed);
|
|
31
|
+
|
|
32
|
+
/// @notice Emitted if debt is swapped successfully
|
|
33
|
+
event DebtMoved(
|
|
34
|
+
address indexed originalBorrower,
|
|
35
|
+
address vTokenRepaid,
|
|
36
|
+
uint256 repaidAmount,
|
|
37
|
+
address indexed newBorrower,
|
|
38
|
+
address indexed vTokenBorrowed,
|
|
39
|
+
uint256 borrowedAmount
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
/// @notice Emitted when the owner transfers tokens, accidentially sent to this contract,
|
|
43
|
+
/// to their account
|
|
44
|
+
event SweptTokens(address indexed token, uint256 amount);
|
|
45
|
+
|
|
46
|
+
/// @notice Thrown if VTokens' comptrollers are not equal
|
|
47
|
+
error ComptrollerMismatch();
|
|
48
|
+
|
|
49
|
+
/// @notice Thrown if repayment fails with an error code
|
|
50
|
+
error RepaymentFailed(uint256 errorCode);
|
|
51
|
+
|
|
52
|
+
/// @notice Thrown if borrow fails with an error code
|
|
53
|
+
error BorrowFailed(uint256 errorCode);
|
|
54
|
+
|
|
55
|
+
/// @notice Thrown if borrowing from the corresponding vToken is not allowed
|
|
56
|
+
error BorrowNotAllowed(address vToken);
|
|
57
|
+
|
|
58
|
+
using SafeERC20Upgradeable for IERC20Upgradeable;
|
|
59
|
+
|
|
60
|
+
/// @notice Constructor for the implementation contract. Sets immutable variables.
|
|
61
|
+
/// @param vTokenToRepay_ VToken to repay the debt to
|
|
62
|
+
/// @param newBorrower_ User to borrow on behalf of
|
|
63
|
+
/// @custom:oz-upgrades-unsafe-allow constructor
|
|
64
|
+
constructor(IVBep20 vTokenToRepay_, address newBorrower_) {
|
|
65
|
+
vTokenToRepay = vTokenToRepay_;
|
|
66
|
+
newBorrower = newBorrower_;
|
|
67
|
+
_disableInitializers();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function initialize() external initializer {
|
|
71
|
+
__Ownable2Step_init();
|
|
72
|
+
__ReentrancyGuard_init();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @notice Repays originalBorrower's borrow in vTokenToRepay.underlying() and borrows
|
|
77
|
+
* vTokenToBorrow.underlying() on behalf of newBorrower
|
|
78
|
+
* @param originalBorrower The address of the borrower, whose debt to repay
|
|
79
|
+
* @param repayAmount The amount to repay in terms of vTokenToRepay.underlying()
|
|
80
|
+
* @param vTokenToBorrow VToken to borrow from
|
|
81
|
+
*/
|
|
82
|
+
function moveDebt(address originalBorrower, uint256 repayAmount, IVBep20 vTokenToBorrow) external nonReentrant {
|
|
83
|
+
if (!borrowAllowed[address(vTokenToBorrow)]) {
|
|
84
|
+
revert BorrowNotAllowed(address(vTokenToBorrow));
|
|
85
|
+
}
|
|
86
|
+
uint256 actualRepaymentAmount = _repay(originalBorrower, repayAmount);
|
|
87
|
+
uint256 amountToBorrow = _convert(vTokenToRepay, vTokenToBorrow, actualRepaymentAmount);
|
|
88
|
+
_borrow(vTokenToBorrow, amountToBorrow);
|
|
89
|
+
emit DebtMoved(
|
|
90
|
+
originalBorrower,
|
|
91
|
+
address(vTokenToRepay),
|
|
92
|
+
actualRepaymentAmount,
|
|
93
|
+
newBorrower,
|
|
94
|
+
address(vTokenToBorrow),
|
|
95
|
+
amountToBorrow
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @notice Allows or denies borrowing from the corresponding vToken
|
|
101
|
+
* @param vTokenToBorrow VToken to borrow from
|
|
102
|
+
* @param allow Whether to allow borrowing from the corresponding vToken
|
|
103
|
+
*/
|
|
104
|
+
function setBorrowAllowed(address vTokenToBorrow, bool allow) external onlyOwner {
|
|
105
|
+
if (borrowAllowed[vTokenToBorrow] != allow) {
|
|
106
|
+
borrowAllowed[vTokenToBorrow] = allow;
|
|
107
|
+
emit BorrowAllowedSet(vTokenToBorrow, allow);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* @notice Transfers tokens, accidentially sent to this contract, to the owner
|
|
113
|
+
* @param token ERC-20 token to sweep
|
|
114
|
+
*/
|
|
115
|
+
function sweepTokens(IERC20Upgradeable token) external onlyOwner {
|
|
116
|
+
uint256 amount = token.balanceOf(address(this));
|
|
117
|
+
token.safeTransfer(owner(), amount);
|
|
118
|
+
emit SweptTokens(address(token), amount);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* @dev Transfers the funds from the sender and repays a borrow in vToken on behalf of the borrower
|
|
123
|
+
* @param borrower The address of the borrower, whose debt to repay
|
|
124
|
+
* @param repayAmount The amount to repay in terms of underlying
|
|
125
|
+
*/
|
|
126
|
+
function _repay(address borrower, uint256 repayAmount) internal returns (uint256 actualRepaymentAmount) {
|
|
127
|
+
IERC20Upgradeable underlying = IERC20Upgradeable(vTokenToRepay.underlying());
|
|
128
|
+
uint256 balanceBefore = underlying.balanceOf(address(this));
|
|
129
|
+
underlying.safeTransferFrom(msg.sender, address(this), repayAmount);
|
|
130
|
+
uint256 balanceAfter = underlying.balanceOf(address(this));
|
|
131
|
+
uint256 repayAmountMinusFee = balanceAfter - balanceBefore;
|
|
132
|
+
|
|
133
|
+
uint256 borrowBalanceBefore = vTokenToRepay.borrowBalanceCurrent(borrower);
|
|
134
|
+
approveOrRevert(underlying, address(vTokenToRepay), repayAmountMinusFee);
|
|
135
|
+
uint256 err = vTokenToRepay.repayBorrowBehalf(borrower, repayAmountMinusFee);
|
|
136
|
+
if (err != NO_ERROR) {
|
|
137
|
+
revert RepaymentFailed(err);
|
|
138
|
+
}
|
|
139
|
+
approveOrRevert(underlying, address(vTokenToRepay), 0);
|
|
140
|
+
uint256 borrowBalanceAfter = vTokenToRepay.borrowBalanceCurrent(borrower);
|
|
141
|
+
return borrowBalanceBefore - borrowBalanceAfter;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* @dev Borrows in vToken on behalf of the borrower and transfers the funds to the sender
|
|
146
|
+
* @param vToken VToken to borrow from
|
|
147
|
+
* @param borrowAmount The amount to borrow in terms of underlying
|
|
148
|
+
*/
|
|
149
|
+
function _borrow(IVBep20 vToken, uint256 borrowAmount) internal {
|
|
150
|
+
IERC20Upgradeable underlying = IERC20Upgradeable(vToken.underlying());
|
|
151
|
+
uint256 balanceBefore = underlying.balanceOf(address(this));
|
|
152
|
+
uint256 err = vToken.borrowBehalf(newBorrower, borrowAmount);
|
|
153
|
+
if (err != NO_ERROR) {
|
|
154
|
+
revert BorrowFailed(err);
|
|
155
|
+
}
|
|
156
|
+
uint256 balanceAfter = underlying.balanceOf(address(this));
|
|
157
|
+
uint256 actualBorrowedAmount = balanceAfter - balanceBefore;
|
|
158
|
+
underlying.safeTransfer(msg.sender, actualBorrowedAmount);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* @dev Converts the value expressed in convertFrom.underlying() to a value
|
|
163
|
+
* in convertTo.underlying(), using the oracle price
|
|
164
|
+
* @param convertFrom VToken to convert from
|
|
165
|
+
* @param convertTo VToken to convert to
|
|
166
|
+
* @param amount The amount in convertFrom.underlying()
|
|
167
|
+
*/
|
|
168
|
+
function _convert(IVBep20 convertFrom, IVBep20 convertTo, uint256 amount) internal view returns (uint256) {
|
|
169
|
+
IComptroller comptroller = convertFrom.comptroller();
|
|
170
|
+
if (comptroller != convertTo.comptroller()) {
|
|
171
|
+
revert ComptrollerMismatch();
|
|
172
|
+
}
|
|
173
|
+
ResilientOracleInterface oracle = comptroller.oracle();
|
|
174
|
+
|
|
175
|
+
// Decimals are accounted for in the oracle contract
|
|
176
|
+
uint256 scaledUsdValue = oracle.getUnderlyingPrice(address(convertFrom)) * amount; // the USD value here has 36 decimals
|
|
177
|
+
return scaledUsdValue / oracle.getUnderlyingPrice(address(convertTo));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
@@ -2,30 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
pragma solidity 0.8.13;
|
|
4
4
|
|
|
5
|
-
import "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol";
|
|
6
|
-
import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
|
|
7
|
-
import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol";
|
|
8
|
-
import "@openzeppelin/contracts/token/ERC20/
|
|
5
|
+
import { Ownable2StepUpgradeable } from "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol";
|
|
6
|
+
import { ReentrancyGuardUpgradeable } from "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
|
|
7
|
+
import { SafeERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol";
|
|
8
|
+
import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
|
|
9
|
+
import { ResilientOracleInterface } from "@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol";
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
interface IComptroller {
|
|
15
|
-
function oracle() external view returns (IPriceOracle);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
interface IVToken {
|
|
19
|
-
function borrowBehalf(address borrower, uint256 borrowAmount) external returns (uint256);
|
|
20
|
-
|
|
21
|
-
function repayBorrowBehalf(address borrower, uint256 repayAmount) external returns (uint256);
|
|
22
|
-
|
|
23
|
-
function borrowBalanceCurrent(address account) external returns (uint256);
|
|
24
|
-
|
|
25
|
-
function comptroller() external view returns (IComptroller);
|
|
26
|
-
|
|
27
|
-
function underlying() external view returns (address);
|
|
28
|
-
}
|
|
11
|
+
import { approveOrRevert } from "../lib/approveOrRevert.sol";
|
|
12
|
+
import { IVBep20, IComptroller } from "../InterfacesV8.sol";
|
|
29
13
|
|
|
30
14
|
contract SwapDebtDelegate is Ownable2StepUpgradeable, ReentrancyGuardUpgradeable {
|
|
31
15
|
/// @dev VToken return value signalling about successful execution
|
|
@@ -69,8 +53,8 @@ contract SwapDebtDelegate is Ownable2StepUpgradeable, ReentrancyGuardUpgradeable
|
|
|
69
53
|
*/
|
|
70
54
|
function swapDebt(
|
|
71
55
|
address borrower,
|
|
72
|
-
|
|
73
|
-
|
|
56
|
+
IVBep20 repayTo,
|
|
57
|
+
IVBep20 borrowFrom,
|
|
74
58
|
uint256 repayAmount
|
|
75
59
|
) external onlyOwner nonReentrant {
|
|
76
60
|
uint256 actualRepaymentAmount = _repay(repayTo, borrower, repayAmount);
|
|
@@ -96,7 +80,7 @@ contract SwapDebtDelegate is Ownable2StepUpgradeable, ReentrancyGuardUpgradeable
|
|
|
96
80
|
* @param repayAmount The amount to repay in terms of underlying
|
|
97
81
|
*/
|
|
98
82
|
function _repay(
|
|
99
|
-
|
|
83
|
+
IVBep20 vToken,
|
|
100
84
|
address borrower,
|
|
101
85
|
uint256 repayAmount
|
|
102
86
|
) internal returns (uint256 actualRepaymentAmount) {
|
|
@@ -123,7 +107,7 @@ contract SwapDebtDelegate is Ownable2StepUpgradeable, ReentrancyGuardUpgradeable
|
|
|
123
107
|
* @param borrower The address of the borrower, who will own the borrow
|
|
124
108
|
* @param borrowAmount The amount to borrow in terms of underlying
|
|
125
109
|
*/
|
|
126
|
-
function _borrow(
|
|
110
|
+
function _borrow(IVBep20 vToken, address borrower, uint256 borrowAmount) internal {
|
|
127
111
|
IERC20Upgradeable underlying = IERC20Upgradeable(vToken.underlying());
|
|
128
112
|
uint256 balanceBefore = underlying.balanceOf(address(this));
|
|
129
113
|
uint256 err = vToken.borrowBehalf(borrower, borrowAmount);
|
|
@@ -142,15 +126,15 @@ contract SwapDebtDelegate is Ownable2StepUpgradeable, ReentrancyGuardUpgradeable
|
|
|
142
126
|
* @param convertTo VToken to convert to
|
|
143
127
|
* @param amount The amount in convertFrom.underlying()
|
|
144
128
|
*/
|
|
145
|
-
function _convert(
|
|
129
|
+
function _convert(IVBep20 convertFrom, IVBep20 convertTo, uint256 amount) internal view returns (uint256) {
|
|
146
130
|
IComptroller comptroller = convertFrom.comptroller();
|
|
147
131
|
if (comptroller != convertTo.comptroller()) {
|
|
148
132
|
revert ComptrollerMismatch();
|
|
149
133
|
}
|
|
150
|
-
|
|
134
|
+
ResilientOracleInterface oracle = comptroller.oracle();
|
|
151
135
|
|
|
152
136
|
// Decimals are accounted for in the oracle contract
|
|
153
|
-
uint256 scaledUsdValue = oracle.getUnderlyingPrice(convertFrom) * amount; // the USD value here has 36 decimals
|
|
154
|
-
return scaledUsdValue / oracle.getUnderlyingPrice(convertTo);
|
|
137
|
+
uint256 scaledUsdValue = oracle.getUnderlyingPrice(address(convertFrom)) * amount; // the USD value here has 36 decimals
|
|
138
|
+
return scaledUsdValue / oracle.getUnderlyingPrice(address(convertTo));
|
|
155
139
|
}
|
|
156
140
|
}
|
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
2
|
pragma solidity 0.8.13;
|
|
3
3
|
|
|
4
|
-
import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/
|
|
4
|
+
import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
|
|
5
|
+
import { ResilientOracleInterface } from "@venusprotocol/oracle/contracts/interfaces/OracleInterface.sol";
|
|
5
6
|
|
|
6
7
|
interface IVToken is IERC20Upgradeable {
|
|
7
8
|
function borrowBalanceCurrent(address borrower) external returns (uint256);
|
|
8
9
|
|
|
9
|
-
function
|
|
10
|
+
function comptroller() external view returns (IComptroller);
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
interface IVBep20 is IVToken {
|
|
13
|
-
function
|
|
14
|
+
function borrowBehalf(address borrower, uint256 borrowAmount) external returns (uint256);
|
|
15
|
+
|
|
16
|
+
function repayBorrowBehalf(address borrower, uint256 repayAmount) external returns (uint256);
|
|
14
17
|
|
|
15
18
|
function liquidateBorrow(
|
|
16
19
|
address borrower,
|
|
17
20
|
uint256 repayAmount,
|
|
18
21
|
IVToken vTokenCollateral
|
|
19
22
|
) external returns (uint256);
|
|
23
|
+
|
|
24
|
+
function underlying() external view returns (address);
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
interface IVBNB is IVToken {
|
|
@@ -53,6 +58,8 @@ interface IComptroller {
|
|
|
53
58
|
function vaiController() external view returns (IVAIController);
|
|
54
59
|
|
|
55
60
|
function liquidatorContract() external view returns (address);
|
|
61
|
+
|
|
62
|
+
function oracle() external view returns (ResilientOracleInterface);
|
|
56
63
|
}
|
|
57
64
|
|
|
58
65
|
interface ILiquidator {
|