diff --git a/src/MainChainGaugeInjector.sol b/src/MainChainGaugeInjector.sol index b27f353..e558523 100644 --- a/src/MainChainGaugeInjector.sol +++ b/src/MainChainGaugeInjector.sol @@ -7,10 +7,10 @@ import "@chainlink/contracts/src/v0.8/interfaces/KeeperCompatibleInterface.sol"; import "@openzeppelin/contracts/security/Pausable.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import "./interfaces/IMainChainGauge.sol"; +import "interfaces/balancer/IChildChainGauge.sol"; /** - * @title The MainChainGaugeInjector Contract + * @title The ChildChainGaugeInjector Contract * @author 0xtritium.eth + master coder Mike B * @notice This contract is a chainlink automation compatible interface to automate regular payment of non-BAL tokens to a child chain gauge. * @notice This contract is meant to run/manage a single token. This is almost always the case for a DAO trying to use such a thing. @@ -18,10 +18,9 @@ import "./interfaces/IMainChainGauge.sol"; * @notice This contract will only function if it is configured as the distributor for a token/gauge it is operating on. * @notice The contract is meant to hold token balances, and works on a schedule set using setRecipientList. The schedule defines an amount per round and number of rounds per gauge. * @notice This contract is Ownable and has lots of sweep functionality to allow the owner to work with the contract or get tokens out should there be a problem. - * @dev This release only works on mainnet, due to differences in the interface of mainchain/childchain gauges!!! * see https://docs.chain.link/chainlink-automation/utility-contracts/ */ -contract MainChainGaugeInjector is +contract ChildChainGaugeInjector is ConfirmedOwner, Pausable, KeeperCompatibleInterface @@ -176,7 +175,7 @@ contract MainChainGaugeInjector is Target memory target; for (uint256 idx = 0; idx < gaugeList.length; idx++) { target = s_targets[gaugeList[idx]]; - IMainChainGauge gauge = IMainChainGauge(gaugeList[idx]); + IChildChainGauge gauge = IChildChainGauge(gaugeList[idx]); uint256 period_finish = gauge.reward_data(tokenAddress).period_finish; @@ -208,6 +207,7 @@ contract MainChainGaugeInjector is * @param ready the list of gauges to fund (addresses must be pre-approved) */ function _injectFunds(address[] memory ready) internal whenNotPaused { + uint256 minWaitPeriodSeconds = s_minWaitPeriodSeconds; address tokenAddress = s_injectTokenAddress; IERC20 token = IERC20(tokenAddress); uint256 balance = token.balanceOf(address(this)); @@ -215,7 +215,7 @@ contract MainChainGaugeInjector is for (uint256 idx = 0; idx < ready.length; idx++) { target = s_targets[ready[idx]]; - IMainChainGauge gauge = IMainChainGauge(ready[idx]); + IChildChainGauge gauge = IChildChainGauge(ready[idx]); uint256 period_finish = gauge.reward_data(tokenAddress).period_finish; if ( @@ -326,7 +326,7 @@ contract MainChainGaugeInjector is address gauge, address reward_token ) external onlyOwner { - IMainChainGauge(gauge).set_reward_distributor(reward_token, msg.sender); + IChildChainGauge(gauge).set_reward_distributor(reward_token, msg.sender); } /** @@ -340,7 +340,7 @@ contract MainChainGaugeInjector is address reward_token, uint256 amount ) external onlyOwner { - IMainChainGauge gaugeContract = IMainChainGauge(gauge); + IChildChainGauge gaugeContract = IChildChainGauge(gauge); IERC20 token = IERC20(reward_token); SafeERC20.safeApprove(token, gauge, amount); gaugeContract.deposit_reward_token(reward_token, amount); @@ -403,7 +403,6 @@ contract MainChainGaugeInjector is /** * @notice Gets the token this injector is operating on */ - function getInjectTokenAddress() external view returns (address) { return s_injectTokenAddress; } @@ -411,7 +410,6 @@ contract MainChainGaugeInjector is * @notice Gets configuration information for an address on the gaugelist * @param targetAddress return Target struct for a given gauge according to the current scheduled distributions */ - function getAccountInfo( address targetAddress ) diff --git a/src/interfaces/IMainChainGauge.sol b/src/interfaces/IMainChainGauge.sol index 7135213..d1f3405 100644 --- a/src/interfaces/IMainChainGauge.sol +++ b/src/interfaces/IMainChainGauge.sol @@ -1,73 +1,106 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.4; +// SPDX-License-Identifier: UNLICENSED +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; -interface IMainChainGauge { +interface IChildChainGauge { event Approval( address indexed _owner, address indexed _spender, uint256 _value ); - event Deposit(address indexed provider, uint256 value); - event RelativeWeightCapChanged(uint256 new_relative_weight_cap); - event RewardDistributorUpdated( - address indexed reward_token, - address distributor - ); event Transfer(address indexed _from, address indexed _to, uint256 _value); + event Deposit(address indexed _user, uint256 _value); + event Withdraw(address indexed _user, uint256 _value); event UpdateLiquidityLimit( - address indexed user, - uint256 original_balance, - uint256 original_supply, - uint256 working_balance, - uint256 working_supply + address indexed _user, + uint256 _original_balance, + uint256 _original_supply, + uint256 _working_balance, + uint256 _working_supply ); - event Withdraw(address indexed provider, uint256 value); - function DOMAIN_SEPARATOR() external view returns (bytes32); - function add_reward(address _reward_token, address _distributor) external; - function allowance( - address owner, - address spender - ) external view returns (uint256); + function deposit(uint256 _value) external; + function deposit(uint256 _value, address _user) external; + function withdraw(uint256 _value) external; + function withdraw(uint256 _value, address _user) external; + function transferFrom( + address _from, + address _to, + uint256 _value + ) external returns (bool); function approve(address _spender, uint256 _value) external returns (bool); - function balanceOf(address arg0) external view returns (uint256); - function claim_rewards() external; - function claim_rewards(address _addr) external; - function claim_rewards(address _addr, address _receiver) external; - function claimable_reward( - address _user, - address _reward_token - ) external view returns (uint256); + function permit( + address _owner, + address _spender, + uint256 _value, + uint256 _deadline, + uint8 _v, + bytes32 _r, + bytes32 _s + ) external returns (bool); + function transfer(address _to, uint256 _value) external returns (bool); + function increaseAllowance( + address _spender, + uint256 _added_value + ) external returns (bool); + function decreaseAllowance( + address _spender, + uint256 _subtracted_value + ) external returns (bool); + function user_checkpoint(address addr) external returns (bool); function claimable_tokens(address addr) external returns (uint256); function claimed_reward( address _addr, address _token ) external view returns (uint256); - function decimals() external view returns (uint256); - function decreaseAllowance( - address _spender, - uint256 _subtracted_value - ) external returns (bool); - function deposit(uint256 _value) external; - function deposit(uint256 _value, address _addr) external; - function deposit(uint256 _value, address _addr, bool _claim_rewards) external; + function claimable_reward( + address _user, + address _reward_token + ) external view returns (uint256); + function set_rewards_receiver(address _receiver) external; + function claim_rewards() external; + function claim_rewards(address _addr) external; + function claim_rewards(address _addr, address _receiver) external; + function claim_rewards( + address _addr, + address _receiver, + uint256[] memory _reward_indexes + ) external; + function add_reward(address _reward_token, address _distributor) external; + function set_reward_distributor( + address _reward_token, + address _distributor + ) external; function deposit_reward_token( address _reward_token, uint256 _amount ) external; - function future_epoch_time() external view returns (uint256); - function getCappedRelativeWeight( - uint256 time + function killGauge() external; + function unkillGauge() external; + function decimals() external view returns (uint256); + function allowance( + address owner, + address spender ) external view returns (uint256); - function getMaxRelativeWeightCap() external pure returns (uint256); - function getRelativeWeightCap() external view returns (uint256); - function increaseAllowance( - address _spender, - uint256 _added_value - ) external returns (bool); - function inflation_rate() external view returns (uint256); - function initialize(address _lp_token, uint256 relative_weight_cap) external; function integrate_checkpoint() external view returns (uint256); + function bal_token() external view returns (address); + function bal_pseudo_minter() external view returns (address); + function voting_escrow_delegation_proxy() external view returns (address); + function authorizer_adaptor() external view returns (address); + function initialize(address _lp_token, string memory _version) external; + function DOMAIN_SEPARATOR() external view returns (bytes32); + function nonces(address arg0) external view returns (uint256); + function name() external view returns (string memory); + function symbol() external view returns (string memory); + function balanceOf(address arg0) external view returns (uint256); + function totalSupply() external view returns (uint256); + function lp_token() external view returns (address); + function version() external view returns (string memory); + function factory() external view returns (address); + function working_balances(address arg0) external view returns (uint256); + function working_supply() external view returns (uint256); + function period() external view returns (uint256); + function period_timestamp(uint256 arg0) external view returns (uint256); function integrate_checkpoint_of( address arg0 ) external view returns (uint256); @@ -76,56 +109,19 @@ interface IMainChainGauge { function integrate_inv_supply_of( address arg0 ) external view returns (uint256); - function is_killed() external view returns (bool); - function kick(address addr) external; - function killGauge() external; - function lp_token() external view returns (address); - function name() external view returns (string memory); - function nonces(address arg0) external view returns (uint256); - function period() external view returns (int128); - function period_timestamp(uint256 arg0) external view returns (uint256); - function permit( - address _owner, - address _spender, - uint256 _value, - uint256 _deadline, - uint8 _v, - bytes32 _r, - bytes32 _s - ) external returns (bool); function reward_count() external view returns (uint256); - function reward_data(address arg0) external view returns (Reward memory); + function reward_tokens(uint256 arg0) external view returns (address); + function reward_data(address arg0) external view returns (S_0 memory); + function rewards_receiver(address arg0) external view returns (address); function reward_integral_for( address arg0, address arg1 ) external view returns (uint256); - function reward_tokens(uint256 arg0) external view returns (address); - function rewards_receiver(address arg0) external view returns (address); - function setRelativeWeightCap(uint256 relative_weight_cap) external; - function set_reward_distributor( - address _reward_token, - address _distributor - ) external; - function set_rewards_receiver(address _receiver) external; - function symbol() external view returns (string memory); - function totalSupply() external view returns (uint256); - function transfer(address _to, uint256 _value) external returns (bool); - function transferFrom( - address _from, - address _to, - uint256 _value - ) external returns (bool); - function unkillGauge() external; - function user_checkpoint(address addr) external returns (bool); - function version() external view returns (string memory); - function withdraw(uint256 _value) external; - function withdraw(uint256 _value, bool _claim_rewards) external; - function working_balances(address arg0) external view returns (uint256); - function working_supply() external view returns (uint256); + function is_killed() external view returns (bool); + function inflation_rate(uint256 arg0) external view returns (uint256); } -struct Reward { - address token; +struct S_0 { address distributor; uint256 period_finish; uint256 rate;