@gooddollar/goodprotocol 1.0.19-beta.2 → 1.0.19-beta.3
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/abis/DistributionHelper.min.json +1 -0
- package/artifacts/abis/ERC20.min.json +1 -1
- package/artifacts/abis/GoodDollarMintBurnWrapper.min.json +1 -0
- package/artifacts/abis/GoodDollarStaking.min.json +1 -0
- package/artifacts/abis/GoodReserveCDai.min.json +1 -1
- package/artifacts/abis/IERC2917.min.json +1 -1
- package/artifacts/abis/IMultichainRouter.min.json +1 -0
- package/artifacts/abis/IRouter.min.json +1 -0
- package/artifacts/abis/Math64x64.min.json +1 -0
- package/artifacts/abis/PausableControl.min.json +1 -0
- package/artifacts/abis/RewardsMinter.min.json +1 -0
- package/artifacts/abis/StakingRewardsFixedAPY.min.json +1 -0
- package/artifacts/abis/TokenOperation.min.json +1 -0
- package/artifacts/abis/cERC20.min.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/Avatar.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/Controller.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/GlobalConstraintInterface.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/IntVoteInterface.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/ReputationInterface.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/SchemeRegistrar.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/AggregatorV3Interface.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ERC20.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ERC20.json +13 -0
- package/artifacts/contracts/Interfaces.sol/IAaveIncentivesController.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IAdminWallet.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IDonationStaking.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IERC2917.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IERC2917.json +13 -0
- package/artifacts/contracts/Interfaces.sol/IFirstClaimPool.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IGoodDollar.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IGoodStaking.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IHasRouter.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IIdentity.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IMultichainRouter.dbg.json +4 -0
- package/artifacts/contracts/Interfaces.sol/IMultichainRouter.json +39 -0
- package/artifacts/contracts/Interfaces.sol/INameService.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IUBIScheme.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ProxyAdmin.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/Reserve.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/Uniswap.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/UniswapFactory.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/UniswapPair.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/cERC20.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/cERC20.json +13 -0
- package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
- package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.json +2 -2
- package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
- package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.json +2 -2
- package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
- package/artifacts/contracts/governance/GReputation.sol/GReputation.json +2 -2
- package/artifacts/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking.dbg.json +4 -0
- package/artifacts/contracts/governance/GoodDollarStaking.sol/GoodDollarStaking.json +1028 -0
- package/artifacts/contracts/governance/GoodDollarStaking.sol/RewardsMinter.dbg.json +4 -0
- package/artifacts/contracts/governance/GoodDollarStaking.sol/RewardsMinter.json +35 -0
- package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.dbg.json +1 -1
- package/artifacts/contracts/governance/GovernanceStaking.sol/GovernanceStaking.json +2 -2
- package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
- package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
- package/artifacts/contracts/governance/Reputation.sol/Reputation.json +2 -2
- package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
- package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.json +2 -2
- package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.json +2 -2
- package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.json +2 -2
- package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
- package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.json +2 -2
- package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
- package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.json +2 -2
- package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.json +2 -2
- package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock.json +2 -2
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock2.json +2 -2
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock3.json +2 -2
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.dbg.json +1 -1
- package/artifacts/contracts/mocks/UpgradableMocks.sol/UpgradableMock4.json +2 -2
- package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
- package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.dbg.json +4 -0
- package/artifacts/contracts/reserve/DistributionHelper.sol/DistributionHelper.json +574 -0
- package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
- package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.json +2 -2
- package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
- package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.json +2 -2
- package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
- package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
- package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.json +65 -2
- package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
- package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.json +2 -2
- package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.dbg.json +1 -1
- package/artifacts/contracts/staking/BaseShareFieldV2.sol/BaseShareFieldV2.json +2 -2
- package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.json +2 -2
- package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
- package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.json +2 -2
- package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/SimpleStakingV2.sol/SimpleStakingV2.dbg.json +1 -1
- package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
- package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.json +2 -2
- package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
- package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.json +2 -2
- package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.json +2 -2
- package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.dbg.json +1 -1
- package/artifacts/contracts/staking/aave/GoodAaveStakingV2.sol/GoodAaveStakingV2.json +2 -2
- package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.json +2 -2
- package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.json +2 -2
- package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/GoodCompoundStakingV2.sol/GoodCompoundStakingV2.json +2 -2
- package/artifacts/contracts/staking/utils/Math64X64.sol/Math64x64.dbg.json +4 -0
- package/artifacts/contracts/staking/utils/Math64X64.sol/Math64x64.json +10 -0
- package/artifacts/contracts/staking/utils/StakingRewardsFixedAPY.sol/StakingRewardsFixedAPY.dbg.json +4 -0
- package/artifacts/contracts/staking/utils/StakingRewardsFixedAPY.sol/StakingRewardsFixedAPY.json +153 -0
- package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
- package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.json +2 -2
- package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
- package/artifacts/contracts/utils/BulkProof.sol/BulkProof.dbg.json +1 -1
- package/artifacts/contracts/utils/BulkProof.sol/BulkProof.json +2 -2
- package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
- package/artifacts/contracts/utils/DAOContract.sol/DAOContract.json +2 -2
- package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
- package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.json +2 -2
- package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
- package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.dbg.json +4 -0
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/GoodDollarMintBurnWrapper.json +954 -0
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/IRouter.dbg.json +4 -0
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/IRouter.json +59 -0
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/PausableControl.dbg.json +4 -0
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/PausableControl.json +69 -0
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/TokenOperation.dbg.json +4 -0
- package/artifacts/contracts/utils/GoodDollarMintBurnWrapper.sol/TokenOperation.json +10 -0
- package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.json +2 -2
- package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.json +2 -2
- package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgradeFuseRecover.sol/ProtocolUpgradeFuseRecover.json +2 -2
- package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgradeRecover.sol/ProtocolUpgradeRecover.json +2 -2
- package/artifacts/contracts/utils/ProxyFactory1967.sol/ERC1967Proxy.dbg.json +1 -1
- package/artifacts/contracts/utils/ProxyFactory1967.sol/ProxyFactory1967.dbg.json +1 -1
- package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
- package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.json +2 -2
- package/contracts/Interfaces.sol +12 -0
- package/contracts/governance/GoodDollarStaking.sol +260 -0
- package/contracts/reserve/DistributionHelper.sol +118 -0
- package/contracts/reserve/GoodReserveCDai.sol +28 -1
- package/contracts/staking/utils/Math64X64.sol +268 -0
- package/contracts/staking/utils/StakingRewardsFixedAPY.sol +141 -0
- package/contracts/utils/GoodDollarMintBurnWrapper.sol +417 -0
- package/package.json +1 -1
- package/releases/deployment.json +4 -1
- package/scripts/multichain-deploy/basicdao-deploy.ts +22 -20
- package/scripts/multichain-deploy/helpers.ts +5 -3
- package/scripts/multichain-deploy/multichainWrapper-deploy.ts +67 -0
- package/scripts/voltageswaps.ts +47 -0
|
@@ -114,8 +114,8 @@
|
|
|
114
114
|
"type": "receive"
|
|
115
115
|
}
|
|
116
116
|
],
|
|
117
|
-
"bytecode": "0x60806040523480156200001157600080fd5b5060405162001ae138038062001ae1833981016040819052620000349162000116565b600080546001600160a01b038085166001600160a01b03199283168117909355600180549185169190921617905560408051632d77bef360e11b81529051635aef7de691600480820192602092909190829003018186803b1580156200009957600080fd5b505afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d4919062000155565b600280546001600160a01b0319166001600160a01b0392909216919091179055506200017c9050565b6001600160a01b03811681146200011357600080fd5b50565b600080604083850312156200012a57600080fd5b82516200013781620000fd565b60208401519092506200014a81620000fd565b809150509250929050565b6000602082840312156200016857600080fd5b81516200017581620000fd565b9392505050565b611955806200018c6000396000f3fe60806040526004361061004e5760003560e01c80631fedded51461005a5780633f40cf5b1461007c5780638815bdae1461009c57806391ea50ae146100bc578063bdc27b9b146100dc57600080fd5b3661005557005b600080fd5b34801561006657600080fd5b5061007a61007536600461138f565b6100fc565b005b34801561008857600080fd5b5061007a6100973660046113b3565b610314565b3480156100a857600080fd5b5061007a6100b736600461142a565b6104e6565b3480156100c857600080fd5b5061007a6100d7366004611580565b6105c6565b3480156100e857600080fd5b5061007a6100f736600461138f565b61086c565b6001546001600160a01b0316331461012f5760405162461bcd60e51b815260040161012690611655565b60405180910390fd5b6000805460025460405163e869d45f60e01b81526001600160a01b0385811660048301526024820194909452601f60e01b6044820152908316606482015291169063e869d45f90608401602060405180830381600087803b15801561019357600080fd5b505af11580156101a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101cb919061168e565b6102285760405162461bcd60e51b815260206004820152602860248201527f7265676973746572696e6720636f6d706f756e64566f74696e674d616368696e604482015267194819985a5b195960c21b6064820152608401610126565b600054600254604051636c525b1360e01b81526001600160a01b0392831692636c525b139261025c929116906004016116a9565b602060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ae919061168e565b6103065760405162461bcd60e51b8152602060048201526024808201527f756e7265676973746572696e672070726f746f636f6c757067726164652066616044820152631a5b195960e21b6064820152608401610126565b6001546001600160a01b0316ff5b6001546001600160a01b0316331461033e5760405162461bcd60e51b815260040161012690611655565b6000805460405163bf40fac160e01b81526001600160a01b039182169163d1b7089a919086169063bf40fac190610377906004016116bd565b60206040518083038186803b15801561038f57600080fd5b505afa1580156103a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c791906116de565b6040516024810186905260440160408051601f198184030181529181526020820180516001600160e01b0316630a7445bf60e41b179052600254905160e085901b6001600160e01b031916815261042f9392916001600160a01b031690600090600401611727565b600060405180830381600087803b15801561044957600080fd5b505af115801561045d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104859190810190611778565b509050806104e15760405162461bcd60e51b815260206004820152602360248201527f43616c6c696e67207365745265736572766547445841697264726f70206661696044820152621b195960ea1b6064820152608401610126565b505050565b6001546001600160a01b031633146105105760405162461bcd60e51b815260040161012690611655565b8281146105515760405162461bcd60e51b815260206004820152600f60248201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401610126565b6105bf85858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805160208089028281018201909352888252909350889250879182918501908490808284376000920191909152506108ab92505050565b5050505050565b6001546001600160a01b031633146105f05760405162461bcd60e51b815260040161012690611655565b805182511461063b5760405162461bcd60e51b81526020600482015260176024820152760e6e8c2d6d2dcce40d8cadccee8d040dad2e6dac2e8c6d604b1b6044820152606401610126565b60005b8251811015610866576000805460405163bf40fac160e01b815260206004820152600c60248201526b232aa7222fa6a0a720a3a2a960a11b60448201526001600160a01b039182169163d1b7089a919088169063bf40fac19060640160206040518083038186803b1580156106b257600080fd5b505afa1580156106c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ea91906116de565b8585815181106106fc576106fc61181f565b60200260200101518786815181106107165761071661181f565b602090810291909101015160405160248101929092526001600160a01b031660448201526000606482018190526084820181905260a482015260c40160408051601f198184030181529181526020820180516001600160e01b0316631f1ad8ed60e21b179052600254905160e085901b6001600160e01b03191681526107ad9392916001600160a01b031690600090600401611727565b600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108039190810190611778565b509050806108535760405162461bcd60e51b815260206004820181905260248201527f43616c6c696e67207365745374616b696e6752657761726473206661696c65646044820152606401610126565b508061085e81611835565b91505061063e565b50505050565b6001546001600160a01b031633146108965760405162461bcd60e51b815260040161012690611655565b61089f816109e6565b6108a881610eea565b50565b600080546040516001600160a01b039091169063d1b7089a9086906108d6908790879060240161185e565b60408051601f198184030181529181526020820180516001600160e01b0316634ab01f5b60e01b179052600254905160e085901b6001600160e01b03191681526109319392916001600160a01b031690600090600401611727565b600060405180830381600087803b15801561094b57600080fd5b505af115801561095f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109879190810190611778565b509050806108665760405162461bcd60e51b815260206004820152602660248201527f43616c6c696e67207365744e616d6553657276696365436f6e7472616374732060448201526519985a5b195960d21b6064820152608401610126565b6000805460405163bf40fac160e01b81526001600160a01b039182169163d1b7089a919085169063bf40fac190610a1f906004016118e2565b60206040518083038186803b158015610a3757600080fd5b505afa158015610a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6f91906116de565b60405163bf40fac160e01b81526001600160a01b0386169063bf40fac190610a99906004016116bd565b60206040518083038186803b158015610ab157600080fd5b505afa158015610ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae991906116de565b604051602401610af991906116a9565b60408051601f198184030181529181526020820180516001600160e01b0316634c1d96ab60e11b179052600254905160e085901b6001600160e01b0319168152610b549392916001600160a01b031690600090600401611727565b600060405180830381600087803b158015610b6e57600080fd5b505af1158015610b82573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610baa9190810190611778565b50905080610bf55760405162461bcd60e51b815260206004820152601860248201527710d85b1b1a5b99c8185919135a5b9d195c8819985a5b195960421b6044820152606401610126565b60005460405163bf40fac160e01b81526001600160a01b039182169163d1b7089a919085169063bf40fac190610c2d906004016118e2565b60206040518083038186803b158015610c4557600080fd5b505afa158015610c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7d91906116de565b6040805160048082526024820183526020820180516001600160e01b0316639865027560e01b179052600254925160e086901b6001600160e01b0319168152610cd494936001600160a01b03169160009101611727565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d2a9190810190611778565b50905080610d7a5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c696e672072656e6f756e63654d696e746572206661696c65640000006044820152606401610126565b60005460405163bf40fac160e01b81526001600160a01b039182169163e4537a74919085169063bf40fac190610db2906004016116bd565b60206040518083038186803b158015610dca57600080fd5b505afa158015610dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0291906116de565b60025460405160e084901b6001600160e01b03191681526001600160a01b0392831660048201526000602482015291166044820152606401602060405180830381600087803b158015610e5457600080fd5b505af1158015610e68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8c919061168e565b905080610ee65760405162461bcd60e51b815260206004820152602260248201527f43616c6c696e6720616464476c6f62616c436f6e73747261696e74206661696c604482015261195960f21b6064820152608401610126565b5050565b600080826001600160a01b031663bf40fac16040518163ffffffff1660e01b8152600401610f30906020808252600490820152634344414960e01b604082015260600190565b60206040518083038186803b158015610f4857600080fd5b505afa158015610f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8091906116de565b6002546040516370a0823160e01b81529192506000916001600160a01b03808516926370a0823192610fb892909116906004016116a9565b60206040518083038186803b158015610fd057600080fd5b505afa158015610fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110089190611906565b60005460405163bf40fac160e01b81529192506001600160a01b039081169163b9a04cdd9185919088169063bf40fac190611045906004016116bd565b60206040518083038186803b15801561105d57600080fd5b505afa158015611071573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109591906116de565b60025460405160e085901b6001600160e01b03191681526001600160a01b039384166004820152918316602483015260448201869052919091166064820152608401602060405180830381600087803b1580156110f157600080fd5b505af1158015611105573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611129919061168e565b9250826111845760405162461bcd60e51b815260206004820152602360248201527f7472616e73666572206364616920746f206e65772072657365727665206661696044820152621b195960ea1b6064820152608401610126565b60005460405163bf40fac160e01b815260206004820152600c60248201526b26a0a925a2aa2fa6a0a5a2a960a11b60448201526001600160a01b039182169163d1b7089a919087169063bf40fac19060640160206040518083038186803b1580156111ee57600080fd5b505afa158015611202573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122691906116de565b6040516001600160a01b0386166024820152648cd0c73ebb6044820152660f5e1925bd0bc76064820152620c4b0b6084820152636216391460a482015260c40160408051601f198184030181529181526020820180516001600160e01b0316638ee090fb60e01b179052600254905160e085901b6001600160e01b03191681526112c19392916001600160a01b031690600090600401611727565b600060405180830381600087803b1580156112db57600080fd5b505af11580156112ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113179190810190611778565b509250826108665760405162461bcd60e51b815260206004820152602a60248201527f63616c6c696e67206d61726b65744d616b657220696e697469616c697a65546f6044820152691ad95b8819985a5b195960b21b6064820152608401610126565b6001600160a01b03811681146108a857600080fd5b6000602082840312156113a157600080fd5b81356113ac8161137a565b9392505050565b600080604083850312156113c657600080fd5b82356113d18161137a565b946020939093013593505050565b60008083601f8401126113f157600080fd5b5081356001600160401b0381111561140857600080fd5b6020830191508360208260051b850101111561142357600080fd5b9250929050565b60008060008060006060868803121561144257600080fd5b853561144d8161137a565b945060208601356001600160401b038082111561146957600080fd5b61147589838a016113df565b9096509450604088013591508082111561148e57600080fd5b5061149b888289016113df565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156114ea576114ea6114ac565b604052919050565b60006001600160401b0382111561150b5761150b6114ac565b5060051b60200190565b600082601f83011261152657600080fd5b8135602061153b611536836114f2565b6114c2565b82815260059290921b8401810191818101908684111561155a57600080fd5b8286015b84811015611575578035835291830191830161155e565b509695505050505050565b60008060006060848603121561159557600080fd5b83356115a08161137a565b92506020848101356001600160401b03808211156115bd57600080fd5b818701915087601f8301126115d157600080fd5b81356115df611536826114f2565b81815260059190911b8301840190848101908a8311156115fe57600080fd5b938501935b828510156116255784356116168161137a565b82529385019390850190611603565b96505050604087013592508083111561163d57600080fd5b505061164b86828701611515565b9150509250925092565b6020808252600a908201526937b7363c9037bbb732b960b11b604082015260600190565b8051801515811461168957600080fd5b919050565b6000602082840312156116a057600080fd5b6113ac82611679565b6001600160a01b0391909116815260200190565b6020808252600790820152665245534552564560c81b604082015260600190565b6000602082840312156116f057600080fd5b81516113ac8161137a565b60005b838110156117165781810151838201526020016116fe565b838111156108665750506000910152565b600060018060a01b0380871683526080602084015285518060808501526117558160a0860160208a016116fb565b9416604083015250606081019190915260a0601f909201601f1916010192915050565b6000806040838503121561178b57600080fd5b61179483611679565b60208401519092506001600160401b03808211156117b157600080fd5b818501915085601f8301126117c557600080fd5b8151818111156117d7576117d76114ac565b6117ea601f8201601f19166020016114c2565b915080825286602082850101111561180157600080fd5b6118128160208401602086016116fb565b5080925050509250929050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561185757634e487b7160e01b600052601160045260246000fd5b5060010190565b604080825283519082018190526000906020906060840190828701845b828110156118975781518452928401929084019060010161187b565b5050508381038285015284518082528583019183019060005b818110156118d55783516001600160a01b0316835292840192918401916001016118b0565b5090979650505050505050565b6020808252600a908201526923a7a7a22227a62620a960b11b604082015260600190565b60006020828403121561191857600080fd5b505191905056fea2646970667358221220a21b279b283883dd54445ef1b90ca1c3c566c619ccfbff391ee6831d72a3031b64736f6c63430008080033",
|
|
118
|
-
"deployedBytecode": "0x60806040526004361061004e5760003560e01c80631fedded51461005a5780633f40cf5b1461007c5780638815bdae1461009c57806391ea50ae146100bc578063bdc27b9b146100dc57600080fd5b3661005557005b600080fd5b34801561006657600080fd5b5061007a61007536600461138f565b6100fc565b005b34801561008857600080fd5b5061007a6100973660046113b3565b610314565b3480156100a857600080fd5b5061007a6100b736600461142a565b6104e6565b3480156100c857600080fd5b5061007a6100d7366004611580565b6105c6565b3480156100e857600080fd5b5061007a6100f736600461138f565b61086c565b6001546001600160a01b0316331461012f5760405162461bcd60e51b815260040161012690611655565b60405180910390fd5b6000805460025460405163e869d45f60e01b81526001600160a01b0385811660048301526024820194909452601f60e01b6044820152908316606482015291169063e869d45f90608401602060405180830381600087803b15801561019357600080fd5b505af11580156101a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101cb919061168e565b6102285760405162461bcd60e51b815260206004820152602860248201527f7265676973746572696e6720636f6d706f756e64566f74696e674d616368696e604482015267194819985a5b195960c21b6064820152608401610126565b600054600254604051636c525b1360e01b81526001600160a01b0392831692636c525b139261025c929116906004016116a9565b602060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ae919061168e565b6103065760405162461bcd60e51b8152602060048201526024808201527f756e7265676973746572696e672070726f746f636f6c757067726164652066616044820152631a5b195960e21b6064820152608401610126565b6001546001600160a01b0316ff5b6001546001600160a01b0316331461033e5760405162461bcd60e51b815260040161012690611655565b6000805460405163bf40fac160e01b81526001600160a01b039182169163d1b7089a919086169063bf40fac190610377906004016116bd565b60206040518083038186803b15801561038f57600080fd5b505afa1580156103a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c791906116de565b6040516024810186905260440160408051601f198184030181529181526020820180516001600160e01b0316630a7445bf60e41b179052600254905160e085901b6001600160e01b031916815261042f9392916001600160a01b031690600090600401611727565b600060405180830381600087803b15801561044957600080fd5b505af115801561045d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104859190810190611778565b509050806104e15760405162461bcd60e51b815260206004820152602360248201527f43616c6c696e67207365745265736572766547445841697264726f70206661696044820152621b195960ea1b6064820152608401610126565b505050565b6001546001600160a01b031633146105105760405162461bcd60e51b815260040161012690611655565b8281146105515760405162461bcd60e51b815260206004820152600f60248201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401610126565b6105bf85858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805160208089028281018201909352888252909350889250879182918501908490808284376000920191909152506108ab92505050565b5050505050565b6001546001600160a01b031633146105f05760405162461bcd60e51b815260040161012690611655565b805182511461063b5760405162461bcd60e51b81526020600482015260176024820152760e6e8c2d6d2dcce40d8cadccee8d040dad2e6dac2e8c6d604b1b6044820152606401610126565b60005b8251811015610866576000805460405163bf40fac160e01b815260206004820152600c60248201526b232aa7222fa6a0a720a3a2a960a11b60448201526001600160a01b039182169163d1b7089a919088169063bf40fac19060640160206040518083038186803b1580156106b257600080fd5b505afa1580156106c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ea91906116de565b8585815181106106fc576106fc61181f565b60200260200101518786815181106107165761071661181f565b602090810291909101015160405160248101929092526001600160a01b031660448201526000606482018190526084820181905260a482015260c40160408051601f198184030181529181526020820180516001600160e01b0316631f1ad8ed60e21b179052600254905160e085901b6001600160e01b03191681526107ad9392916001600160a01b031690600090600401611727565b600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108039190810190611778565b509050806108535760405162461bcd60e51b815260206004820181905260248201527f43616c6c696e67207365745374616b696e6752657761726473206661696c65646044820152606401610126565b508061085e81611835565b91505061063e565b50505050565b6001546001600160a01b031633146108965760405162461bcd60e51b815260040161012690611655565b61089f816109e6565b6108a881610eea565b50565b600080546040516001600160a01b039091169063d1b7089a9086906108d6908790879060240161185e565b60408051601f198184030181529181526020820180516001600160e01b0316634ab01f5b60e01b179052600254905160e085901b6001600160e01b03191681526109319392916001600160a01b031690600090600401611727565b600060405180830381600087803b15801561094b57600080fd5b505af115801561095f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109879190810190611778565b509050806108665760405162461bcd60e51b815260206004820152602660248201527f43616c6c696e67207365744e616d6553657276696365436f6e7472616374732060448201526519985a5b195960d21b6064820152608401610126565b6000805460405163bf40fac160e01b81526001600160a01b039182169163d1b7089a919085169063bf40fac190610a1f906004016118e2565b60206040518083038186803b158015610a3757600080fd5b505afa158015610a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6f91906116de565b60405163bf40fac160e01b81526001600160a01b0386169063bf40fac190610a99906004016116bd565b60206040518083038186803b158015610ab157600080fd5b505afa158015610ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae991906116de565b604051602401610af991906116a9565b60408051601f198184030181529181526020820180516001600160e01b0316634c1d96ab60e11b179052600254905160e085901b6001600160e01b0319168152610b549392916001600160a01b031690600090600401611727565b600060405180830381600087803b158015610b6e57600080fd5b505af1158015610b82573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610baa9190810190611778565b50905080610bf55760405162461bcd60e51b815260206004820152601860248201527710d85b1b1a5b99c8185919135a5b9d195c8819985a5b195960421b6044820152606401610126565b60005460405163bf40fac160e01b81526001600160a01b039182169163d1b7089a919085169063bf40fac190610c2d906004016118e2565b60206040518083038186803b158015610c4557600080fd5b505afa158015610c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7d91906116de565b6040805160048082526024820183526020820180516001600160e01b0316639865027560e01b179052600254925160e086901b6001600160e01b0319168152610cd494936001600160a01b03169160009101611727565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d2a9190810190611778565b50905080610d7a5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c696e672072656e6f756e63654d696e746572206661696c65640000006044820152606401610126565b60005460405163bf40fac160e01b81526001600160a01b039182169163e4537a74919085169063bf40fac190610db2906004016116bd565b60206040518083038186803b158015610dca57600080fd5b505afa158015610dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0291906116de565b60025460405160e084901b6001600160e01b03191681526001600160a01b0392831660048201526000602482015291166044820152606401602060405180830381600087803b158015610e5457600080fd5b505af1158015610e68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8c919061168e565b905080610ee65760405162461bcd60e51b815260206004820152602260248201527f43616c6c696e6720616464476c6f62616c436f6e73747261696e74206661696c604482015261195960f21b6064820152608401610126565b5050565b600080826001600160a01b031663bf40fac16040518163ffffffff1660e01b8152600401610f30906020808252600490820152634344414960e01b604082015260600190565b60206040518083038186803b158015610f4857600080fd5b505afa158015610f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8091906116de565b6002546040516370a0823160e01b81529192506000916001600160a01b03808516926370a0823192610fb892909116906004016116a9565b60206040518083038186803b158015610fd057600080fd5b505afa158015610fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110089190611906565b60005460405163bf40fac160e01b81529192506001600160a01b039081169163b9a04cdd9185919088169063bf40fac190611045906004016116bd565b60206040518083038186803b15801561105d57600080fd5b505afa158015611071573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109591906116de565b60025460405160e085901b6001600160e01b03191681526001600160a01b039384166004820152918316602483015260448201869052919091166064820152608401602060405180830381600087803b1580156110f157600080fd5b505af1158015611105573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611129919061168e565b9250826111845760405162461bcd60e51b815260206004820152602360248201527f7472616e73666572206364616920746f206e65772072657365727665206661696044820152621b195960ea1b6064820152608401610126565b60005460405163bf40fac160e01b815260206004820152600c60248201526b26a0a925a2aa2fa6a0a5a2a960a11b60448201526001600160a01b039182169163d1b7089a919087169063bf40fac19060640160206040518083038186803b1580156111ee57600080fd5b505afa158015611202573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122691906116de565b6040516001600160a01b0386166024820152648cd0c73ebb6044820152660f5e1925bd0bc76064820152620c4b0b6084820152636216391460a482015260c40160408051601f198184030181529181526020820180516001600160e01b0316638ee090fb60e01b179052600254905160e085901b6001600160e01b03191681526112c19392916001600160a01b031690600090600401611727565b600060405180830381600087803b1580156112db57600080fd5b505af11580156112ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113179190810190611778565b509250826108665760405162461bcd60e51b815260206004820152602a60248201527f63616c6c696e67206d61726b65744d616b657220696e697469616c697a65546f6044820152691ad95b8819985a5b195960b21b6064820152608401610126565b6001600160a01b03811681146108a857600080fd5b6000602082840312156113a157600080fd5b81356113ac8161137a565b9392505050565b600080604083850312156113c657600080fd5b82356113d18161137a565b946020939093013593505050565b60008083601f8401126113f157600080fd5b5081356001600160401b0381111561140857600080fd5b6020830191508360208260051b850101111561142357600080fd5b9250929050565b60008060008060006060868803121561144257600080fd5b853561144d8161137a565b945060208601356001600160401b038082111561146957600080fd5b61147589838a016113df565b9096509450604088013591508082111561148e57600080fd5b5061149b888289016113df565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156114ea576114ea6114ac565b604052919050565b60006001600160401b0382111561150b5761150b6114ac565b5060051b60200190565b600082601f83011261152657600080fd5b8135602061153b611536836114f2565b6114c2565b82815260059290921b8401810191818101908684111561155a57600080fd5b8286015b84811015611575578035835291830191830161155e565b509695505050505050565b60008060006060848603121561159557600080fd5b83356115a08161137a565b92506020848101356001600160401b03808211156115bd57600080fd5b818701915087601f8301126115d157600080fd5b81356115df611536826114f2565b81815260059190911b8301840190848101908a8311156115fe57600080fd5b938501935b828510156116255784356116168161137a565b82529385019390850190611603565b96505050604087013592508083111561163d57600080fd5b505061164b86828701611515565b9150509250925092565b6020808252600a908201526937b7363c9037bbb732b960b11b604082015260600190565b8051801515811461168957600080fd5b919050565b6000602082840312156116a057600080fd5b6113ac82611679565b6001600160a01b0391909116815260200190565b6020808252600790820152665245534552564560c81b604082015260600190565b6000602082840312156116f057600080fd5b81516113ac8161137a565b60005b838110156117165781810151838201526020016116fe565b838111156108665750506000910152565b600060018060a01b0380871683526080602084015285518060808501526117558160a0860160208a016116fb565b9416604083015250606081019190915260a0601f909201601f1916010192915050565b6000806040838503121561178b57600080fd5b61179483611679565b60208401519092506001600160401b03808211156117b157600080fd5b818501915085601f8301126117c557600080fd5b8151818111156117d7576117d76114ac565b6117ea601f8201601f19166020016114c2565b915080825286602082850101111561180157600080fd5b6118128160208401602086016116fb565b5080925050509250929050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561185757634e487b7160e01b600052601160045260246000fd5b5060010190565b604080825283519082018190526000906020906060840190828701845b828110156118975781518452928401929084019060010161187b565b5050508381038285015284518082528583019183019060005b818110156118d55783516001600160a01b0316835292840192918401916001016118b0565b5090979650505050505050565b6020808252600a908201526923a7a7a22227a62620a960b11b604082015260600190565b60006020828403121561191857600080fd5b505191905056fea2646970667358221220a21b279b283883dd54445ef1b90ca1c3c566c619ccfbff391ee6831d72a3031b64736f6c63430008080033",
|
|
117
|
+
"bytecode": "0x60806040523480156200001157600080fd5b5060405162001ae138038062001ae1833981016040819052620000349162000116565b600080546001600160a01b038085166001600160a01b03199283168117909355600180549185169190921617905560408051632d77bef360e11b81529051635aef7de691600480820192602092909190829003018186803b1580156200009957600080fd5b505afa158015620000ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d4919062000155565b600280546001600160a01b0319166001600160a01b0392909216919091179055506200017c9050565b6001600160a01b03811681146200011357600080fd5b50565b600080604083850312156200012a57600080fd5b82516200013781620000fd565b60208401519092506200014a81620000fd565b809150509250929050565b6000602082840312156200016857600080fd5b81516200017581620000fd565b9392505050565b611955806200018c6000396000f3fe60806040526004361061004e5760003560e01c80631fedded51461005a5780633f40cf5b1461007c5780638815bdae1461009c57806391ea50ae146100bc578063bdc27b9b146100dc57600080fd5b3661005557005b600080fd5b34801561006657600080fd5b5061007a61007536600461138f565b6100fc565b005b34801561008857600080fd5b5061007a6100973660046113b3565b610314565b3480156100a857600080fd5b5061007a6100b736600461142a565b6104e6565b3480156100c857600080fd5b5061007a6100d7366004611580565b6105c6565b3480156100e857600080fd5b5061007a6100f736600461138f565b61086c565b6001546001600160a01b0316331461012f5760405162461bcd60e51b815260040161012690611655565b60405180910390fd5b6000805460025460405163e869d45f60e01b81526001600160a01b0385811660048301526024820194909452601f60e01b6044820152908316606482015291169063e869d45f90608401602060405180830381600087803b15801561019357600080fd5b505af11580156101a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101cb919061168e565b6102285760405162461bcd60e51b815260206004820152602860248201527f7265676973746572696e6720636f6d706f756e64566f74696e674d616368696e604482015267194819985a5b195960c21b6064820152608401610126565b600054600254604051636c525b1360e01b81526001600160a01b0392831692636c525b139261025c929116906004016116a9565b602060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ae919061168e565b6103065760405162461bcd60e51b8152602060048201526024808201527f756e7265676973746572696e672070726f746f636f6c757067726164652066616044820152631a5b195960e21b6064820152608401610126565b6001546001600160a01b0316ff5b6001546001600160a01b0316331461033e5760405162461bcd60e51b815260040161012690611655565b6000805460405163bf40fac160e01b81526001600160a01b039182169163d1b7089a919086169063bf40fac190610377906004016116bd565b60206040518083038186803b15801561038f57600080fd5b505afa1580156103a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c791906116de565b6040516024810186905260440160408051601f198184030181529181526020820180516001600160e01b0316630a7445bf60e41b179052600254905160e085901b6001600160e01b031916815261042f9392916001600160a01b031690600090600401611727565b600060405180830381600087803b15801561044957600080fd5b505af115801561045d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104859190810190611778565b509050806104e15760405162461bcd60e51b815260206004820152602360248201527f43616c6c696e67207365745265736572766547445841697264726f70206661696044820152621b195960ea1b6064820152608401610126565b505050565b6001546001600160a01b031633146105105760405162461bcd60e51b815260040161012690611655565b8281146105515760405162461bcd60e51b815260206004820152600f60248201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401610126565b6105bf85858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805160208089028281018201909352888252909350889250879182918501908490808284376000920191909152506108ab92505050565b5050505050565b6001546001600160a01b031633146105f05760405162461bcd60e51b815260040161012690611655565b805182511461063b5760405162461bcd60e51b81526020600482015260176024820152760e6e8c2d6d2dcce40d8cadccee8d040dad2e6dac2e8c6d604b1b6044820152606401610126565b60005b8251811015610866576000805460405163bf40fac160e01b815260206004820152600c60248201526b232aa7222fa6a0a720a3a2a960a11b60448201526001600160a01b039182169163d1b7089a919088169063bf40fac19060640160206040518083038186803b1580156106b257600080fd5b505afa1580156106c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ea91906116de565b8585815181106106fc576106fc61181f565b60200260200101518786815181106107165761071661181f565b602090810291909101015160405160248101929092526001600160a01b031660448201526000606482018190526084820181905260a482015260c40160408051601f198184030181529181526020820180516001600160e01b0316631f1ad8ed60e21b179052600254905160e085901b6001600160e01b03191681526107ad9392916001600160a01b031690600090600401611727565b600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108039190810190611778565b509050806108535760405162461bcd60e51b815260206004820181905260248201527f43616c6c696e67207365745374616b696e6752657761726473206661696c65646044820152606401610126565b508061085e81611835565b91505061063e565b50505050565b6001546001600160a01b031633146108965760405162461bcd60e51b815260040161012690611655565b61089f816109e6565b6108a881610eea565b50565b600080546040516001600160a01b039091169063d1b7089a9086906108d6908790879060240161185e565b60408051601f198184030181529181526020820180516001600160e01b0316634ab01f5b60e01b179052600254905160e085901b6001600160e01b03191681526109319392916001600160a01b031690600090600401611727565b600060405180830381600087803b15801561094b57600080fd5b505af115801561095f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109879190810190611778565b509050806108665760405162461bcd60e51b815260206004820152602660248201527f43616c6c696e67207365744e616d6553657276696365436f6e7472616374732060448201526519985a5b195960d21b6064820152608401610126565b6000805460405163bf40fac160e01b81526001600160a01b039182169163d1b7089a919085169063bf40fac190610a1f906004016118e2565b60206040518083038186803b158015610a3757600080fd5b505afa158015610a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6f91906116de565b60405163bf40fac160e01b81526001600160a01b0386169063bf40fac190610a99906004016116bd565b60206040518083038186803b158015610ab157600080fd5b505afa158015610ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae991906116de565b604051602401610af991906116a9565b60408051601f198184030181529181526020820180516001600160e01b0316634c1d96ab60e11b179052600254905160e085901b6001600160e01b0319168152610b549392916001600160a01b031690600090600401611727565b600060405180830381600087803b158015610b6e57600080fd5b505af1158015610b82573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610baa9190810190611778565b50905080610bf55760405162461bcd60e51b815260206004820152601860248201527710d85b1b1a5b99c8185919135a5b9d195c8819985a5b195960421b6044820152606401610126565b60005460405163bf40fac160e01b81526001600160a01b039182169163d1b7089a919085169063bf40fac190610c2d906004016118e2565b60206040518083038186803b158015610c4557600080fd5b505afa158015610c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7d91906116de565b6040805160048082526024820183526020820180516001600160e01b0316639865027560e01b179052600254925160e086901b6001600160e01b0319168152610cd494936001600160a01b03169160009101611727565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d2a9190810190611778565b50905080610d7a5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c696e672072656e6f756e63654d696e746572206661696c65640000006044820152606401610126565b60005460405163bf40fac160e01b81526001600160a01b039182169163e4537a74919085169063bf40fac190610db2906004016116bd565b60206040518083038186803b158015610dca57600080fd5b505afa158015610dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0291906116de565b60025460405160e084901b6001600160e01b03191681526001600160a01b0392831660048201526000602482015291166044820152606401602060405180830381600087803b158015610e5457600080fd5b505af1158015610e68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8c919061168e565b905080610ee65760405162461bcd60e51b815260206004820152602260248201527f43616c6c696e6720616464476c6f62616c436f6e73747261696e74206661696c604482015261195960f21b6064820152608401610126565b5050565b600080826001600160a01b031663bf40fac16040518163ffffffff1660e01b8152600401610f30906020808252600490820152634344414960e01b604082015260600190565b60206040518083038186803b158015610f4857600080fd5b505afa158015610f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8091906116de565b6002546040516370a0823160e01b81529192506000916001600160a01b03808516926370a0823192610fb892909116906004016116a9565b60206040518083038186803b158015610fd057600080fd5b505afa158015610fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110089190611906565b60005460405163bf40fac160e01b81529192506001600160a01b039081169163b9a04cdd9185919088169063bf40fac190611045906004016116bd565b60206040518083038186803b15801561105d57600080fd5b505afa158015611071573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109591906116de565b60025460405160e085901b6001600160e01b03191681526001600160a01b039384166004820152918316602483015260448201869052919091166064820152608401602060405180830381600087803b1580156110f157600080fd5b505af1158015611105573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611129919061168e565b9250826111845760405162461bcd60e51b815260206004820152602360248201527f7472616e73666572206364616920746f206e65772072657365727665206661696044820152621b195960ea1b6064820152608401610126565b60005460405163bf40fac160e01b815260206004820152600c60248201526b26a0a925a2aa2fa6a0a5a2a960a11b60448201526001600160a01b039182169163d1b7089a919087169063bf40fac19060640160206040518083038186803b1580156111ee57600080fd5b505afa158015611202573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122691906116de565b6040516001600160a01b0386166024820152648cd0c73ebb6044820152660f5e1925bd0bc76064820152620c4b0b6084820152636216391460a482015260c40160408051601f198184030181529181526020820180516001600160e01b0316638ee090fb60e01b179052600254905160e085901b6001600160e01b03191681526112c19392916001600160a01b031690600090600401611727565b600060405180830381600087803b1580156112db57600080fd5b505af11580156112ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113179190810190611778565b509250826108665760405162461bcd60e51b815260206004820152602a60248201527f63616c6c696e67206d61726b65744d616b657220696e697469616c697a65546f6044820152691ad95b8819985a5b195960b21b6064820152608401610126565b6001600160a01b03811681146108a857600080fd5b6000602082840312156113a157600080fd5b81356113ac8161137a565b9392505050565b600080604083850312156113c657600080fd5b82356113d18161137a565b946020939093013593505050565b60008083601f8401126113f157600080fd5b5081356001600160401b0381111561140857600080fd5b6020830191508360208260051b850101111561142357600080fd5b9250929050565b60008060008060006060868803121561144257600080fd5b853561144d8161137a565b945060208601356001600160401b038082111561146957600080fd5b61147589838a016113df565b9096509450604088013591508082111561148e57600080fd5b5061149b888289016113df565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156114ea576114ea6114ac565b604052919050565b60006001600160401b0382111561150b5761150b6114ac565b5060051b60200190565b600082601f83011261152657600080fd5b8135602061153b611536836114f2565b6114c2565b82815260059290921b8401810191818101908684111561155a57600080fd5b8286015b84811015611575578035835291830191830161155e565b509695505050505050565b60008060006060848603121561159557600080fd5b83356115a08161137a565b92506020848101356001600160401b03808211156115bd57600080fd5b818701915087601f8301126115d157600080fd5b81356115df611536826114f2565b81815260059190911b8301840190848101908a8311156115fe57600080fd5b938501935b828510156116255784356116168161137a565b82529385019390850190611603565b96505050604087013592508083111561163d57600080fd5b505061164b86828701611515565b9150509250925092565b6020808252600a908201526937b7363c9037bbb732b960b11b604082015260600190565b8051801515811461168957600080fd5b919050565b6000602082840312156116a057600080fd5b6113ac82611679565b6001600160a01b0391909116815260200190565b6020808252600790820152665245534552564560c81b604082015260600190565b6000602082840312156116f057600080fd5b81516113ac8161137a565b60005b838110156117165781810151838201526020016116fe565b838111156108665750506000910152565b600060018060a01b0380871683526080602084015285518060808501526117558160a0860160208a016116fb565b9416604083015250606081019190915260a0601f909201601f1916010192915050565b6000806040838503121561178b57600080fd5b61179483611679565b60208401519092506001600160401b03808211156117b157600080fd5b818501915085601f8301126117c557600080fd5b8151818111156117d7576117d76114ac565b6117ea601f8201601f19166020016114c2565b915080825286602082850101111561180157600080fd5b6118128160208401602086016116fb565b5080925050509250929050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561185757634e487b7160e01b600052601160045260246000fd5b5060010190565b604080825283519082018190526000906020906060840190828701845b828110156118975781518452928401929084019060010161187b565b5050508381038285015284518082528583019183019060005b818110156118d55783516001600160a01b0316835292840192918401916001016118b0565b5090979650505050505050565b6020808252600a908201526923a7a7a22227a62620a960b11b604082015260600190565b60006020828403121561191857600080fd5b505191905056fea2646970667358221220ae686dd4dc14e86bbfdf3210ae5519430163a6f4fface8619bf0e6734522674a64736f6c63430008080033",
|
|
118
|
+
"deployedBytecode": "0x60806040526004361061004e5760003560e01c80631fedded51461005a5780633f40cf5b1461007c5780638815bdae1461009c57806391ea50ae146100bc578063bdc27b9b146100dc57600080fd5b3661005557005b600080fd5b34801561006657600080fd5b5061007a61007536600461138f565b6100fc565b005b34801561008857600080fd5b5061007a6100973660046113b3565b610314565b3480156100a857600080fd5b5061007a6100b736600461142a565b6104e6565b3480156100c857600080fd5b5061007a6100d7366004611580565b6105c6565b3480156100e857600080fd5b5061007a6100f736600461138f565b61086c565b6001546001600160a01b0316331461012f5760405162461bcd60e51b815260040161012690611655565b60405180910390fd5b6000805460025460405163e869d45f60e01b81526001600160a01b0385811660048301526024820194909452601f60e01b6044820152908316606482015291169063e869d45f90608401602060405180830381600087803b15801561019357600080fd5b505af11580156101a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101cb919061168e565b6102285760405162461bcd60e51b815260206004820152602860248201527f7265676973746572696e6720636f6d706f756e64566f74696e674d616368696e604482015267194819985a5b195960c21b6064820152608401610126565b600054600254604051636c525b1360e01b81526001600160a01b0392831692636c525b139261025c929116906004016116a9565b602060405180830381600087803b15801561027657600080fd5b505af115801561028a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ae919061168e565b6103065760405162461bcd60e51b8152602060048201526024808201527f756e7265676973746572696e672070726f746f636f6c757067726164652066616044820152631a5b195960e21b6064820152608401610126565b6001546001600160a01b0316ff5b6001546001600160a01b0316331461033e5760405162461bcd60e51b815260040161012690611655565b6000805460405163bf40fac160e01b81526001600160a01b039182169163d1b7089a919086169063bf40fac190610377906004016116bd565b60206040518083038186803b15801561038f57600080fd5b505afa1580156103a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c791906116de565b6040516024810186905260440160408051601f198184030181529181526020820180516001600160e01b0316630a7445bf60e41b179052600254905160e085901b6001600160e01b031916815261042f9392916001600160a01b031690600090600401611727565b600060405180830381600087803b15801561044957600080fd5b505af115801561045d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104859190810190611778565b509050806104e15760405162461bcd60e51b815260206004820152602360248201527f43616c6c696e67207365745265736572766547445841697264726f70206661696044820152621b195960ea1b6064820152608401610126565b505050565b6001546001600160a01b031633146105105760405162461bcd60e51b815260040161012690611655565b8281146105515760405162461bcd60e51b815260206004820152600f60248201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401610126565b6105bf85858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805160208089028281018201909352888252909350889250879182918501908490808284376000920191909152506108ab92505050565b5050505050565b6001546001600160a01b031633146105f05760405162461bcd60e51b815260040161012690611655565b805182511461063b5760405162461bcd60e51b81526020600482015260176024820152760e6e8c2d6d2dcce40d8cadccee8d040dad2e6dac2e8c6d604b1b6044820152606401610126565b60005b8251811015610866576000805460405163bf40fac160e01b815260206004820152600c60248201526b232aa7222fa6a0a720a3a2a960a11b60448201526001600160a01b039182169163d1b7089a919088169063bf40fac19060640160206040518083038186803b1580156106b257600080fd5b505afa1580156106c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ea91906116de565b8585815181106106fc576106fc61181f565b60200260200101518786815181106107165761071661181f565b602090810291909101015160405160248101929092526001600160a01b031660448201526000606482018190526084820181905260a482015260c40160408051601f198184030181529181526020820180516001600160e01b0316631f1ad8ed60e21b179052600254905160e085901b6001600160e01b03191681526107ad9392916001600160a01b031690600090600401611727565b600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108039190810190611778565b509050806108535760405162461bcd60e51b815260206004820181905260248201527f43616c6c696e67207365745374616b696e6752657761726473206661696c65646044820152606401610126565b508061085e81611835565b91505061063e565b50505050565b6001546001600160a01b031633146108965760405162461bcd60e51b815260040161012690611655565b61089f816109e6565b6108a881610eea565b50565b600080546040516001600160a01b039091169063d1b7089a9086906108d6908790879060240161185e565b60408051601f198184030181529181526020820180516001600160e01b0316634ab01f5b60e01b179052600254905160e085901b6001600160e01b03191681526109319392916001600160a01b031690600090600401611727565b600060405180830381600087803b15801561094b57600080fd5b505af115801561095f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109879190810190611778565b509050806108665760405162461bcd60e51b815260206004820152602660248201527f43616c6c696e67207365744e616d6553657276696365436f6e7472616374732060448201526519985a5b195960d21b6064820152608401610126565b6000805460405163bf40fac160e01b81526001600160a01b039182169163d1b7089a919085169063bf40fac190610a1f906004016118e2565b60206040518083038186803b158015610a3757600080fd5b505afa158015610a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6f91906116de565b60405163bf40fac160e01b81526001600160a01b0386169063bf40fac190610a99906004016116bd565b60206040518083038186803b158015610ab157600080fd5b505afa158015610ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae991906116de565b604051602401610af991906116a9565b60408051601f198184030181529181526020820180516001600160e01b0316634c1d96ab60e11b179052600254905160e085901b6001600160e01b0319168152610b549392916001600160a01b031690600090600401611727565b600060405180830381600087803b158015610b6e57600080fd5b505af1158015610b82573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610baa9190810190611778565b50905080610bf55760405162461bcd60e51b815260206004820152601860248201527710d85b1b1a5b99c8185919135a5b9d195c8819985a5b195960421b6044820152606401610126565b60005460405163bf40fac160e01b81526001600160a01b039182169163d1b7089a919085169063bf40fac190610c2d906004016118e2565b60206040518083038186803b158015610c4557600080fd5b505afa158015610c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7d91906116de565b6040805160048082526024820183526020820180516001600160e01b0316639865027560e01b179052600254925160e086901b6001600160e01b0319168152610cd494936001600160a01b03169160009101611727565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d2a9190810190611778565b50905080610d7a5760405162461bcd60e51b815260206004820152601d60248201527f43616c6c696e672072656e6f756e63654d696e746572206661696c65640000006044820152606401610126565b60005460405163bf40fac160e01b81526001600160a01b039182169163e4537a74919085169063bf40fac190610db2906004016116bd565b60206040518083038186803b158015610dca57600080fd5b505afa158015610dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0291906116de565b60025460405160e084901b6001600160e01b03191681526001600160a01b0392831660048201526000602482015291166044820152606401602060405180830381600087803b158015610e5457600080fd5b505af1158015610e68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8c919061168e565b905080610ee65760405162461bcd60e51b815260206004820152602260248201527f43616c6c696e6720616464476c6f62616c436f6e73747261696e74206661696c604482015261195960f21b6064820152608401610126565b5050565b600080826001600160a01b031663bf40fac16040518163ffffffff1660e01b8152600401610f30906020808252600490820152634344414960e01b604082015260600190565b60206040518083038186803b158015610f4857600080fd5b505afa158015610f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8091906116de565b6002546040516370a0823160e01b81529192506000916001600160a01b03808516926370a0823192610fb892909116906004016116a9565b60206040518083038186803b158015610fd057600080fd5b505afa158015610fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110089190611906565b60005460405163bf40fac160e01b81529192506001600160a01b039081169163b9a04cdd9185919088169063bf40fac190611045906004016116bd565b60206040518083038186803b15801561105d57600080fd5b505afa158015611071573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109591906116de565b60025460405160e085901b6001600160e01b03191681526001600160a01b039384166004820152918316602483015260448201869052919091166064820152608401602060405180830381600087803b1580156110f157600080fd5b505af1158015611105573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611129919061168e565b9250826111845760405162461bcd60e51b815260206004820152602360248201527f7472616e73666572206364616920746f206e65772072657365727665206661696044820152621b195960ea1b6064820152608401610126565b60005460405163bf40fac160e01b815260206004820152600c60248201526b26a0a925a2aa2fa6a0a5a2a960a11b60448201526001600160a01b039182169163d1b7089a919087169063bf40fac19060640160206040518083038186803b1580156111ee57600080fd5b505afa158015611202573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122691906116de565b6040516001600160a01b0386166024820152648cd0c73ebb6044820152660f5e1925bd0bc76064820152620c4b0b6084820152636216391460a482015260c40160408051601f198184030181529181526020820180516001600160e01b0316638ee090fb60e01b179052600254905160e085901b6001600160e01b03191681526112c19392916001600160a01b031690600090600401611727565b600060405180830381600087803b1580156112db57600080fd5b505af11580156112ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113179190810190611778565b509250826108665760405162461bcd60e51b815260206004820152602a60248201527f63616c6c696e67206d61726b65744d616b657220696e697469616c697a65546f6044820152691ad95b8819985a5b195960b21b6064820152608401610126565b6001600160a01b03811681146108a857600080fd5b6000602082840312156113a157600080fd5b81356113ac8161137a565b9392505050565b600080604083850312156113c657600080fd5b82356113d18161137a565b946020939093013593505050565b60008083601f8401126113f157600080fd5b5081356001600160401b0381111561140857600080fd5b6020830191508360208260051b850101111561142357600080fd5b9250929050565b60008060008060006060868803121561144257600080fd5b853561144d8161137a565b945060208601356001600160401b038082111561146957600080fd5b61147589838a016113df565b9096509450604088013591508082111561148e57600080fd5b5061149b888289016113df565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156114ea576114ea6114ac565b604052919050565b60006001600160401b0382111561150b5761150b6114ac565b5060051b60200190565b600082601f83011261152657600080fd5b8135602061153b611536836114f2565b6114c2565b82815260059290921b8401810191818101908684111561155a57600080fd5b8286015b84811015611575578035835291830191830161155e565b509695505050505050565b60008060006060848603121561159557600080fd5b83356115a08161137a565b92506020848101356001600160401b03808211156115bd57600080fd5b818701915087601f8301126115d157600080fd5b81356115df611536826114f2565b81815260059190911b8301840190848101908a8311156115fe57600080fd5b938501935b828510156116255784356116168161137a565b82529385019390850190611603565b96505050604087013592508083111561163d57600080fd5b505061164b86828701611515565b9150509250925092565b6020808252600a908201526937b7363c9037bbb732b960b11b604082015260600190565b8051801515811461168957600080fd5b919050565b6000602082840312156116a057600080fd5b6113ac82611679565b6001600160a01b0391909116815260200190565b6020808252600790820152665245534552564560c81b604082015260600190565b6000602082840312156116f057600080fd5b81516113ac8161137a565b60005b838110156117165781810151838201526020016116fe565b838111156108665750506000910152565b600060018060a01b0380871683526080602084015285518060808501526117558160a0860160208a016116fb565b9416604083015250606081019190915260a0601f909201601f1916010192915050565b6000806040838503121561178b57600080fd5b61179483611679565b60208401519092506001600160401b03808211156117b157600080fd5b818501915085601f8301126117c557600080fd5b8151818111156117d7576117d76114ac565b6117ea601f8201601f19166020016114c2565b915080825286602082850101111561180157600080fd5b6118128160208401602086016116fb565b5080925050509250929050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561185757634e487b7160e01b600052601160045260246000fd5b5060010190565b604080825283519082018190526000906020906060840190828701845b828110156118975781518452928401929084019060010161187b565b5050508381038285015284518082528583019183019060005b818110156118d55783516001600160a01b0316835292840192918401916001016118b0565b5090979650505050505050565b6020808252600a908201526923a7a7a22227a62620a960b11b604082015260600190565b60006020828403121561191857600080fd5b505191905056fea2646970667358221220ae686dd4dc14e86bbfdf3210ae5519430163a6f4fface8619bf0e6734522674a64736f6c63430008080033",
|
|
119
119
|
"linkReferences": {},
|
|
120
120
|
"deployedLinkReferences": {}
|
|
121
121
|
}
|
|
@@ -74,8 +74,8 @@
|
|
|
74
74
|
"type": "function"
|
|
75
75
|
}
|
|
76
76
|
],
|
|
77
|
-
"bytecode": "
|
|
78
|
-
"deployedBytecode": "
|
|
77
|
+
"bytecode": "0x608060405234801561001057600080fd5b5060405161035c38038061035c83398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6102c9806100936000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80635653eeeb1461004657806391d61f3e1461005b578063c52164c61461006e575b600080fd5b6100596100543660046101e7565b61009d565b005b6100596100693660046101e7565b610145565b600054610081906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b60005b8181101561013f576000546040516340c10f1960e01b81526001600160a01b03909116906340c10f19906100da9087908790600401610228565b602060405180830381600087803b1580156100f457600080fd5b505af1158015610108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012c9190610241565b50806101378161026a565b9150506100a0565b50505050565b60005b8181101561013f57600054604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac906101829087908790600401610228565b602060405180830381600087803b15801561019c57600080fd5b505af11580156101b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d49190610241565b50806101df8161026a565b915050610148565b6000806000606084860312156101fc57600080fd5b83356001600160a01b038116811461021357600080fd5b95602085013595506040909401359392505050565b6001600160a01b03929092168252602082015260400190565b60006020828403121561025357600080fd5b8151801515811461026357600080fd5b9392505050565b600060001982141561028c57634e487b7160e01b600052601160045260246000fd5b506001019056fea26469706673582212204e7ecf50608024b30b943ad63c2e064e321d773f386de2f9a7c838fe1a54e40964736f6c63430008080033",
|
|
78
|
+
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c80635653eeeb1461004657806391d61f3e1461005b578063c52164c61461006e575b600080fd5b6100596100543660046101e7565b61009d565b005b6100596100693660046101e7565b610145565b600054610081906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b60005b8181101561013f576000546040516340c10f1960e01b81526001600160a01b03909116906340c10f19906100da9087908790600401610228565b602060405180830381600087803b1580156100f457600080fd5b505af1158015610108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012c9190610241565b50806101378161026a565b9150506100a0565b50505050565b60005b8181101561013f57600054604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac906101829087908790600401610228565b602060405180830381600087803b15801561019c57600080fd5b505af11580156101b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d49190610241565b50806101df8161026a565b915050610148565b6000806000606084860312156101fc57600080fd5b83356001600160a01b038116811461021357600080fd5b95602085013595506040909401359392505050565b6001600160a01b03929092168252602082015260400190565b60006020828403121561025357600080fd5b8151801515811461026357600080fd5b9392505050565b600060001982141561028c57634e487b7160e01b600052601160045260246000fd5b506001019056fea26469706673582212204e7ecf50608024b30b943ad63c2e064e321d773f386de2f9a7c838fe1a54e40964736f6c63430008080033",
|
|
79
79
|
"linkReferences": {},
|
|
80
80
|
"deployedLinkReferences": {}
|
|
81
81
|
}
|
package/contracts/Interfaces.sol
CHANGED
|
@@ -15,6 +15,8 @@ interface ERC20 {
|
|
|
15
15
|
|
|
16
16
|
function mint(address to, uint256 mintAmount) external returns (uint256);
|
|
17
17
|
|
|
18
|
+
function burn(uint256 amount) external;
|
|
19
|
+
|
|
18
20
|
function totalSupply() external view returns (uint256);
|
|
19
21
|
|
|
20
22
|
function allowance(address owner, address spender)
|
|
@@ -447,3 +449,13 @@ interface IAdminWallet {
|
|
|
447
449
|
|
|
448
450
|
function transferOwnership(address _owner) external;
|
|
449
451
|
}
|
|
452
|
+
|
|
453
|
+
interface IMultichainRouter {
|
|
454
|
+
// Swaps `amount` `token` from this chain to `toChainID` chain with recipient `to`
|
|
455
|
+
function anySwapOut(
|
|
456
|
+
address token,
|
|
457
|
+
address to,
|
|
458
|
+
uint256 amount,
|
|
459
|
+
uint256 toChainID
|
|
460
|
+
) external;
|
|
461
|
+
}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
pragma solidity >=0.8.0;
|
|
4
|
+
|
|
5
|
+
import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";
|
|
6
|
+
import "../utils/DAOUpgradeableContract.sol";
|
|
7
|
+
import "../utils/NameService.sol";
|
|
8
|
+
import "../Interfaces.sol";
|
|
9
|
+
import "../DAOStackInterfaces.sol";
|
|
10
|
+
import "./MultiBaseGovernanceShareField.sol";
|
|
11
|
+
import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
|
|
12
|
+
import "../staking/utils/StakingRewardsFixedAPY.sol";
|
|
13
|
+
|
|
14
|
+
interface RewardsMinter {
|
|
15
|
+
function sendOrMint(address to, uint256 amount) external returns (uint256);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @title Staking contract that allows citizens to stake G$ to get GOOD + G$ rewards
|
|
20
|
+
* it implements
|
|
21
|
+
*/
|
|
22
|
+
contract GoodDollarStaking is
|
|
23
|
+
ERC20Upgradeable,
|
|
24
|
+
MultiBaseGovernanceShareField,
|
|
25
|
+
DAOUpgradeableContract,
|
|
26
|
+
ReentrancyGuardUpgradeable,
|
|
27
|
+
StakingRewardsFixedAPY
|
|
28
|
+
{
|
|
29
|
+
// Token address
|
|
30
|
+
ERC20 token;
|
|
31
|
+
|
|
32
|
+
uint128 public numberOfBlocksPerYear;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @dev Emitted when `staker` earns an `amount` of GOOD tokens
|
|
36
|
+
*/
|
|
37
|
+
event ReputationEarned(address indexed staker, uint256 amount);
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @dev Emitted when `staker` stakes an `amount` of GoodDollars
|
|
41
|
+
*/
|
|
42
|
+
event Staked(address indexed staker, uint256 amount);
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @dev Emitted when `staker` withdraws an `amount` of staked GoodDollars
|
|
46
|
+
*/
|
|
47
|
+
event StakeWithdraw(address indexed staker, uint256 amount);
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @dev Constructor
|
|
51
|
+
* @param _ns The address of the INameService contract
|
|
52
|
+
*/
|
|
53
|
+
constructor(
|
|
54
|
+
INameService _ns,
|
|
55
|
+
uint128 _interestRatePerBlock,
|
|
56
|
+
uint128 _numberOfBlocksPerYear
|
|
57
|
+
) StakingRewardsFixedAPY(_interestRatePerBlock) {
|
|
58
|
+
setDAO(_ns);
|
|
59
|
+
require(
|
|
60
|
+
nameService.getAddress("MintBurnWrapper") != address(0),
|
|
61
|
+
"rewards minter not set"
|
|
62
|
+
);
|
|
63
|
+
numberOfBlocksPerYear = _numberOfBlocksPerYear;
|
|
64
|
+
token = ERC20(nameService.getAddress("GOODDOLLAR"));
|
|
65
|
+
__ERC20_init("G$ Savings", "svG$");
|
|
66
|
+
rewardsPerBlock[address(this)] = (2 ether * 1e6) / getChainBlocksPerMonth(); // (2M monthly GDAO as specified in specs, divided by blocks in month )
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function getChainBlocksPerMonth() public view override returns (uint256) {
|
|
70
|
+
return numberOfBlocksPerYear / 12;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @dev Allows a staker to deposit Tokens. Notice that `approve` is
|
|
75
|
+
* needed to be executed before the execution of this method.
|
|
76
|
+
* Can be executed only when the contract is not paused.
|
|
77
|
+
* @param _amount The amount of GD to stake
|
|
78
|
+
*/
|
|
79
|
+
function stake(uint256 _amount) external {
|
|
80
|
+
require(_amount > 0, "You need to stake a positive token amount");
|
|
81
|
+
require(
|
|
82
|
+
token.transferFrom(_msgSender(), address(this), _amount),
|
|
83
|
+
"transferFrom failed, make sure you approved token transfer"
|
|
84
|
+
);
|
|
85
|
+
/* GOOD rewards Updates */
|
|
86
|
+
_increaseProductivity(
|
|
87
|
+
address(this),
|
|
88
|
+
_msgSender(),
|
|
89
|
+
_amount,
|
|
90
|
+
0,
|
|
91
|
+
block.number
|
|
92
|
+
);
|
|
93
|
+
_mint(_msgSender(), _amount); // mint Staking token for staker
|
|
94
|
+
_mintRewards(_msgSender());
|
|
95
|
+
/* end GOOD rewards Updates */
|
|
96
|
+
|
|
97
|
+
/* G$ rewards updates */
|
|
98
|
+
_stake(_msgSender(), _amount);
|
|
99
|
+
|
|
100
|
+
emit Staked(_msgSender(), _amount);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* @dev Withdraws the sender staked Token.
|
|
105
|
+
*/
|
|
106
|
+
function withdrawStake(uint256 _amount) external nonReentrant {
|
|
107
|
+
(uint256 userProductivity, ) = getProductivity(address(this), _msgSender());
|
|
108
|
+
if (_amount == 0) _amount = userProductivity;
|
|
109
|
+
require(_amount > 0, "Should withdraw positive amount");
|
|
110
|
+
require(userProductivity >= _amount, "Not enough token staked");
|
|
111
|
+
uint256 tokenWithdraw = _amount;
|
|
112
|
+
|
|
113
|
+
_burn(_msgSender(), _amount); // burn their staking tokens
|
|
114
|
+
|
|
115
|
+
/* Good rewards update */
|
|
116
|
+
_decreaseProductivity(
|
|
117
|
+
address(this),
|
|
118
|
+
_msgSender(),
|
|
119
|
+
_amount,
|
|
120
|
+
0,
|
|
121
|
+
block.number
|
|
122
|
+
);
|
|
123
|
+
_mintRewards(_msgSender());
|
|
124
|
+
/* end Good rewards update */
|
|
125
|
+
|
|
126
|
+
/* G$ rewards update */
|
|
127
|
+
_withdraw(_msgSender(), tokenWithdraw);
|
|
128
|
+
if (stakersInfo[_msgSender()].balance == 0) {
|
|
129
|
+
_mintGDRewards(_msgSender()); //we mint GD rewards only when balance is 0 or upon request
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/* end G$ rewards update */
|
|
133
|
+
|
|
134
|
+
require(
|
|
135
|
+
token.transfer(_msgSender(), tokenWithdraw),
|
|
136
|
+
"withdraw transfer failed"
|
|
137
|
+
);
|
|
138
|
+
emit StakeWithdraw(_msgSender(), _amount);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function _mintGDRewards(address _to) internal returns (uint256 actualSent) {
|
|
142
|
+
uint256 rewards = _getReward(_to);
|
|
143
|
+
|
|
144
|
+
//make sure RewardsMinter failure doesnt prevent withdrawl of stake
|
|
145
|
+
try
|
|
146
|
+
RewardsMinter(nameService.getAddress("MintBurnWrapper")).sendOrMint(
|
|
147
|
+
_to,
|
|
148
|
+
rewards
|
|
149
|
+
)
|
|
150
|
+
returns (uint256 _res) {
|
|
151
|
+
actualSent = _res;
|
|
152
|
+
} catch {
|
|
153
|
+
actualSent = 0;
|
|
154
|
+
}
|
|
155
|
+
//it could be that rewards minter doesnt have enough or passed cap
|
|
156
|
+
//so we keep track of debt to user
|
|
157
|
+
if (actualSent < rewards) {
|
|
158
|
+
_undoReward(_to, rewards - actualSent);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* @dev Staker can withdraw their rewards without withdraw their stake
|
|
164
|
+
*/
|
|
165
|
+
function withdrawRewards()
|
|
166
|
+
public
|
|
167
|
+
nonReentrant
|
|
168
|
+
returns (uint256 goodRewards, uint256 gdRewards)
|
|
169
|
+
{
|
|
170
|
+
goodRewards = _mintRewards(_msgSender());
|
|
171
|
+
gdRewards = _mintGDRewards(_msgSender());
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* @dev Mint rewards of the staker
|
|
176
|
+
* @param user Receipent address of the rewards
|
|
177
|
+
* @return Returns amount of the minted rewards
|
|
178
|
+
* emits 'ReputationEarned' event for staker earned GOOD amount
|
|
179
|
+
*/
|
|
180
|
+
function _mintRewards(address user) internal returns (uint256) {
|
|
181
|
+
uint256 amount = _issueEarnedRewards(address(this), user, 0, block.number);
|
|
182
|
+
if (amount > 0) {
|
|
183
|
+
ERC20(nameService.getAddress("REPUTATION")).mint(user, amount);
|
|
184
|
+
emit ReputationEarned(_msgSender(), amount);
|
|
185
|
+
}
|
|
186
|
+
return amount;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* @dev Returns the number of decimals used to get its user representation.
|
|
191
|
+
*/
|
|
192
|
+
function decimals() public view virtual override returns (uint8) {
|
|
193
|
+
return 2;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* @dev override _transfer to handle rewards calculations when transfer the stake
|
|
198
|
+
*/
|
|
199
|
+
function _transfer(
|
|
200
|
+
address from,
|
|
201
|
+
address to,
|
|
202
|
+
uint256 value
|
|
203
|
+
) internal override {
|
|
204
|
+
_decreaseProductivity(address(this), from, value, 0, block.number);
|
|
205
|
+
_withdraw(from, value); //update G$ rewards
|
|
206
|
+
_increaseProductivity(address(this), to, value, 0, block.number);
|
|
207
|
+
_stake(to, value); //update G$ rewards
|
|
208
|
+
|
|
209
|
+
//mint GOOD rewards
|
|
210
|
+
_mintRewards(from);
|
|
211
|
+
_mintRewards(to);
|
|
212
|
+
|
|
213
|
+
if (stakersInfo[from].balance == 0) {
|
|
214
|
+
_mintGDRewards(from); //we mint GD rewards only when balance is 0 or upon request
|
|
215
|
+
}
|
|
216
|
+
super._transfer(from, to, value);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* @dev Calculate rewards per block from monthly amount of rewards and set it
|
|
221
|
+
* @param _monthlyAmount total rewards which will distribute monthly
|
|
222
|
+
*/
|
|
223
|
+
function setMonthlyGOODRewards(uint256 _monthlyAmount) public {
|
|
224
|
+
_onlyAvatar();
|
|
225
|
+
_setMonthlyRewards(address(this), _monthlyAmount);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* @dev Calculate rewards per block from monthly amount of rewards and set it
|
|
230
|
+
* @param _interestRatePerBlock bps yearly apy
|
|
231
|
+
*/
|
|
232
|
+
function setGdApy(uint128 _interestRatePerBlock) public {
|
|
233
|
+
_onlyAvatar();
|
|
234
|
+
_setAPY(_interestRatePerBlock);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/// @dev helper function for multibase
|
|
238
|
+
function getRewardsPerBlock() public view returns (uint256) {
|
|
239
|
+
return rewardsPerBlock[address(this)];
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/// @dev helper function for multibase
|
|
243
|
+
function getStaked(address _user) public view returns (uint256, uint256) {
|
|
244
|
+
return getProductivity(address(this), _user);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/// @dev helper function for multibase
|
|
248
|
+
function getUserPendingReward(address _user) public view returns (uint256) {
|
|
249
|
+
return getUserPendingReward(address(this), 0, block.number, _user);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/// @dev helper function for multibase
|
|
253
|
+
function goodStakerInfo(address _user) public view returns (UserInfo memory) {
|
|
254
|
+
return contractToUsers[address(this)][_user];
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
function totalRewardsPerShare() public view returns (uint256) {
|
|
258
|
+
return totalRewardsPerShare(address(this));
|
|
259
|
+
}
|
|
260
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
/**
|
|
3
|
+
Wrap the G$ token to provide mint permissions to multichain.org router/bridge
|
|
4
|
+
based on https://github.com/anyswap/multichain-smart-contracts/blob/1459fe6281867319af8ffb1849e5c16d242d6530/contracts/wrapper/MintBurnWrapper.sol
|
|
5
|
+
|
|
6
|
+
Added onTokenTransfer
|
|
7
|
+
|
|
8
|
+
Fixed:
|
|
9
|
+
https://github.com/anyswap/multichain-smart-contracts/issues/4
|
|
10
|
+
https://github.com/anyswap/multichain-smart-contracts/issues/3
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
pragma solidity ^0.8;
|
|
14
|
+
|
|
15
|
+
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
16
|
+
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
17
|
+
import "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol";
|
|
18
|
+
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
|
19
|
+
import "@openzeppelin/contracts/utils/math/Math.sol";
|
|
20
|
+
|
|
21
|
+
import "../utils/DAOUpgradeableContract.sol";
|
|
22
|
+
|
|
23
|
+
contract DistributionHelper is
|
|
24
|
+
DAOUpgradeableContract,
|
|
25
|
+
AccessControlEnumerableUpgradeable
|
|
26
|
+
{
|
|
27
|
+
enum TransferType {
|
|
28
|
+
FuseBridge,
|
|
29
|
+
MultichainBridge,
|
|
30
|
+
Contract
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
struct DistributionRecipient {
|
|
34
|
+
uint32 bps;
|
|
35
|
+
uint32 chainId;
|
|
36
|
+
address addr;
|
|
37
|
+
TransferType transferType;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
DistributionRecipient[] public distributionRecipients;
|
|
41
|
+
address public fuseBridge;
|
|
42
|
+
IMultichainRouter public multiChainBridge;
|
|
43
|
+
|
|
44
|
+
event Distribution(
|
|
45
|
+
uint256 distributed,
|
|
46
|
+
uint256 startingBalance,
|
|
47
|
+
uint256 incomingAmount
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
function initialize(INameService _ns) external initializer {
|
|
51
|
+
__AccessControlEnumerable_init();
|
|
52
|
+
setDAO(_ns);
|
|
53
|
+
_setupRole(DEFAULT_ADMIN_ROLE, avatar);
|
|
54
|
+
fuseBridge = nameService.getAddress("BRIDGE_CONTRACT");
|
|
55
|
+
multiChainBridge = IMultichainRouter(
|
|
56
|
+
0xf27Ee99622C3C9b264583dACB2cCE056e194494f
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function onDistribution(uint256 _amount) external {
|
|
61
|
+
//we consider the actuall balance and not _amount
|
|
62
|
+
uint256 toDistribute = nativeToken().balanceOf(address(this));
|
|
63
|
+
if (toDistribute == 0) return;
|
|
64
|
+
|
|
65
|
+
uint256 totalDistributed;
|
|
66
|
+
for (uint256 i = 0; i < distributionRecipients.length; i++) {
|
|
67
|
+
DistributionRecipient storage r = distributionRecipients[i];
|
|
68
|
+
if (r.bps > 0) {
|
|
69
|
+
uint256 toTransfer = (toDistribute * r.bps) / 10000;
|
|
70
|
+
totalDistributed += toTransfer;
|
|
71
|
+
distribute(r, toTransfer);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
emit Distribution(totalDistributed, toDistribute, _amount);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function addRecipient(DistributionRecipient memory _recipient)
|
|
79
|
+
external
|
|
80
|
+
onlyRole(DEFAULT_ADMIN_ROLE)
|
|
81
|
+
{
|
|
82
|
+
distributionRecipients.push(_recipient);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function updateRecipient(DistributionRecipient memory _recipient)
|
|
86
|
+
external
|
|
87
|
+
onlyRole(DEFAULT_ADMIN_ROLE)
|
|
88
|
+
{
|
|
89
|
+
for (uint256 i = 0; i < distributionRecipients.length; i++) {
|
|
90
|
+
if (distributionRecipients[i].addr == _recipient.addr) {
|
|
91
|
+
distributionRecipients[i] = _recipient;
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function distribute(DistributionRecipient storage _recipient, uint256 _amount)
|
|
98
|
+
internal
|
|
99
|
+
{
|
|
100
|
+
if (_recipient.transferType == TransferType.FuseBridge) {
|
|
101
|
+
nativeToken().transferAndCall(
|
|
102
|
+
fuseBridge,
|
|
103
|
+
_amount,
|
|
104
|
+
abi.encodePacked(_recipient.addr)
|
|
105
|
+
);
|
|
106
|
+
} else if (_recipient.transferType == TransferType.MultichainBridge) {
|
|
107
|
+
nativeToken().approve(address(multiChainBridge), _amount);
|
|
108
|
+
multiChainBridge.anySwapOut(
|
|
109
|
+
address(nativeToken()),
|
|
110
|
+
_recipient.addr,
|
|
111
|
+
_amount,
|
|
112
|
+
_recipient.chainId
|
|
113
|
+
);
|
|
114
|
+
} else if (_recipient.transferType == TransferType.Contract) {
|
|
115
|
+
nativeToken().transferAndCall(_recipient.addr, _amount, "");
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -11,6 +11,7 @@ import "../utils/NameService.sol";
|
|
|
11
11
|
import "../DAOStackInterfaces.sol";
|
|
12
12
|
import "../Interfaces.sol";
|
|
13
13
|
import "./GoodMarketMaker.sol";
|
|
14
|
+
import "./DistributionHelper.sol";
|
|
14
15
|
|
|
15
16
|
interface ContributionCalc {
|
|
16
17
|
function calculateContribution(
|
|
@@ -51,6 +52,9 @@ contract GoodReserveCDai is
|
|
|
51
52
|
/// @dev mark if user claimed his GDX
|
|
52
53
|
mapping(address => bool) public isClaimedGDX;
|
|
53
54
|
|
|
55
|
+
uint32 public nonUbiBps; //how much of expansion G$ to allocate for non Ubi causes
|
|
56
|
+
DistributionHelper public distributionHelper; //in charge of distributing non UBI to different recipients
|
|
57
|
+
|
|
54
58
|
// Emits when new GD tokens minted
|
|
55
59
|
event UBIMinted(
|
|
56
60
|
//epoch of UBI
|
|
@@ -109,6 +113,8 @@ contract GoodReserveCDai is
|
|
|
109
113
|
address indexed receiverAddress
|
|
110
114
|
);
|
|
111
115
|
|
|
116
|
+
event NonUBIMinted(address distributionHelper, uint256 amountMinted);
|
|
117
|
+
|
|
112
118
|
function initialize(INameService _ns, bytes32 _gdxAirdrop)
|
|
113
119
|
public
|
|
114
120
|
virtual
|
|
@@ -353,10 +359,22 @@ contract GoodReserveCDai is
|
|
|
353
359
|
interestInCdai
|
|
354
360
|
);
|
|
355
361
|
uint256 gdExpansionToMint = getMarketMaker().mintExpansion(_interestToken);
|
|
362
|
+
|
|
363
|
+
uint256 nonUBI;
|
|
364
|
+
|
|
365
|
+
lastMinted = block.number;
|
|
356
366
|
uint256 gdUBI = gdInterestToMint + gdExpansionToMint;
|
|
367
|
+
|
|
368
|
+
if (nonUbiBps > 0) {
|
|
369
|
+
nonUBI = (gdExpansionToMint * nonUbiBps) / 10000;
|
|
370
|
+
gdUBI -= nonUBI;
|
|
371
|
+
_mintGoodDollars(address(distributionHelper), nonUBI, false);
|
|
372
|
+
emit NonUBIMinted(address(distributionHelper), nonUBI);
|
|
373
|
+
try distributionHelper.onDistribution(nonUBI) {} catch {}
|
|
374
|
+
}
|
|
357
375
|
//this enforces who can call the public mintUBI method. only an address with permissions at reserve of RESERVE_MINTER_ROLE
|
|
376
|
+
|
|
358
377
|
_mintGoodDollars(nameService.getAddress("FUND_MANAGER"), gdUBI, false);
|
|
359
|
-
lastMinted = block.number;
|
|
360
378
|
emit UBIMinted(
|
|
361
379
|
lastMinted,
|
|
362
380
|
address(_interestToken),
|
|
@@ -365,9 +383,18 @@ contract GoodReserveCDai is
|
|
|
365
383
|
gdExpansionToMint,
|
|
366
384
|
gdUBI
|
|
367
385
|
);
|
|
386
|
+
|
|
368
387
|
return (gdUBI, interestInCdai);
|
|
369
388
|
}
|
|
370
389
|
|
|
390
|
+
function setDistributionHelper(DistributionHelper _helper, uint32 _bps)
|
|
391
|
+
public
|
|
392
|
+
{
|
|
393
|
+
_onlyAvatar();
|
|
394
|
+
distributionHelper = _helper;
|
|
395
|
+
nonUbiBps = _bps;
|
|
396
|
+
}
|
|
397
|
+
|
|
371
398
|
/**
|
|
372
399
|
* @dev Allows the DAO to change the daily expansion rate
|
|
373
400
|
* it is calculated by _nom/_denom with e27 precision. Emits
|