Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 8 additions & 10 deletions src/MainChainGaugeInjector.sol
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,20 @@ 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.
* @notice The configuration is rewritten each time it is loaded.
* @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
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -208,14 +207,15 @@ 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));
Target memory target;

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 (
Expand Down Expand Up @@ -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);
}

/**
Expand All @@ -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);
Expand Down Expand Up @@ -403,15 +403,13 @@ contract MainChainGaugeInjector is
/**
* @notice Gets the token this injector is operating on
*/

function getInjectTokenAddress() external view returns (address) {
return s_injectTokenAddress;
}
/**
* @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
)
Expand Down
178 changes: 87 additions & 91 deletions src/interfaces/IMainChainGauge.sol
Original file line number Diff line number Diff line change
@@ -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);
Expand All @@ -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;
Expand Down