Address Contract Partially Verified
Address
0x723f9Aa67FDD9B0e375eF8553eB2AFC28eCD4a96
Balance
0 ETH
Nonce
1
Code Size
1928 bytes
Creator
0x947B7742...0277 at tx 0x751ff1be...256854
Indexed Transactions
0 (1 on-chain, 1.3% indexed)
Contract Bytecode
1928 bytes
0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063770c3a8b11610066578063770c3a8b1461014b5780638da5cb5b14610171578063acecbe9d14610195578063b0de36f5146101c1578063f2fde38b146101f95761009e565b806313e7c9d8146100a35780632663fcfc146100dd5780635cfbfc6d146100e75780635f96a27414610115578063715018a614610143575b600080fd5b6100c9600480360360208110156100b957600080fd5b50356001600160a01b031661021f565b604080519115158252519081900360200190f35b6100e5610234565b005b6100e5600480360360408110156100fd57600080fd5b506001600160a01b03813516906020013515156102d5565b6100e56004803603604081101561012b57600080fd5b506001600160a01b038135811691602001351661037d565b6100e561045c565b6100e56004803603602081101561016157600080fd5b50356001600160a01b03166104ee565b6101796105ab565b604080516001600160a01b039092168252519081900360200190f35b610179600480360360408110156101ab57600080fd5b506001600160a01b0381351690602001356105ba565b6101e7600480360360208110156101d757600080fd5b50356001600160a01b03166105ef565b60408051918252519081900360200190f35b6100e56004803603602081101561020f57600080fd5b50356001600160a01b031661060a565b60016020526000908152604090205460ff1681565b33600090815260026020526040812054905b818110156102d15733600090815260026020526040902080548290811061026957fe5b600091825260208220015460408051630c00007b60e41b815233600482015290516001600160a01b039092169263c00007b09260248084019382900301818387803b1580156102b757600080fd5b505af19250505080156102c8575060015b50600101610246565b5050565b6000546001600160a01b0316331461031d576040805162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015290519081900360640190fd5b6001600160a01b038216600081815260016020908152604091829020805460ff1916851515908117909155825190815291517fbadd5a134a60c76befc7e7d53706d47a82ac7037171f88c24a7f70faa2998ef19281900390910190a25050565b3360009081526001602052604090205460ff16806103a557506000546001600160a01b031633145b6103e2576040805162461bcd60e51b815260206004820152600960248201526810b7b832b930ba37b960b91b604482015290519081900360640190fd5b6001600160a01b03828116600081815260026020908152604080832080546001810182559084529282902090920180546001600160a01b03191694861694851790558151938452905191927f5d8a70e9b2298fac0fd87b08f4fb15a4565be2a8002ccaab0955c861961e977e929081900390910190a25050565b6000546001600160a01b031633146104a4576040805162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b3360009081526001602052604090205460ff168061051657506000546001600160a01b031633145b610553576040805162461bcd60e51b815260206004820152600960248201526810b7b832b930ba37b960b91b604482015290519081900360640190fd5b6001600160a01b0381166000908152600260205260408120610574916106f2565b6040516001600160a01b038216907f31b5fdaa7a1cd6edd22dbd38cee5d45471c944e9f1fd6775ded773bfe214581090600090a250565b6000546001600160a01b031681565b600260205281600052604060002081815481106105d357fe5b6000918252602090912001546001600160a01b03169150829050565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b03163314610652576040805162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015290519081900360640190fd5b6001600160a01b0381166106975760405162461bcd60e51b815260040180806020018281038252602681526020018061072d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b50805460008255906000526020600020908101906107109190610713565b50565b5b808211156107285760008155600101610714565b509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a264697066735822122040a6d5be75ddc5d76bcbabbbd62f1ca1d722f024afc996a22f1740208d1f3abf64736f6c634300060c0033
Verified Source Code Partial Match
Compiler: v0.6.12+commit.27d51765
EVM: istanbul
Optimization: Yes (200 runs)
IRewards.sol 19 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
interface IRewards{
function stake(address, uint256) external;
function stakeFor(address, uint256) external;
function withdraw(address, uint256) external;
function setWeight(address _pool, uint256 _amount) external returns(bool);
function setWeights(address[] calldata _account, uint256[] calldata _amount) external;
function setDistributor(address _distro, bool _valid) external;
function getReward(address) external;
function queueNewRewards(uint256) external;
function addExtraReward(address) external;
function setRewardHook(address) external;
function user_checkpoint(address _account) external returns(bool);
function rewardToken() external view returns(address);
function rewardMap(address) external view returns(bool);
function earned(address account) external view returns (uint256);
}
IRewardHook.sol 7 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
interface IRewardHook {
function onRewardClaim() external;
}
IBooster.sol 10 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
interface IBooster {
function owner() external view returns(address);
function setVoteDelegate(address _voteDelegate) external;
function vote(uint256 _voteId, address _votingAddress, bool _support) external returns(bool);
function voteGaugeWeight(address[] calldata _gauge, uint256[] calldata _weight ) external returns(bool);
function poolInfo(uint256 _pid) external view returns(address _lptoken, address _token, address _gauge, address _crvRewards, address _stash, bool _shutdown);
}
PoolRewardHook.sol 85 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
import "./interfaces/IBooster.sol";
import "./interfaces/IRewards.sol";
import "./interfaces/IRewardHook.sol";
/*
A Hook contract that pools call to perform extra actions when updating rewards
(Example: claiming extra rewards from an outside contract)
*/
contract PoolRewardHook is IRewardHook{
address public owner;
mapping(address => bool) public operators;
mapping(address => address[]) public poolRewardList;
event PoolRewardAdded(address indexed pool, address rewardContract);
event PoolRewardReset(address indexed pool);
event AddOperator(address indexed _op, bool _valid);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() public {
owner = address(0xa3C5A1e09150B75ff251c1a7815A07182c3de2FB); //default to convex multisig
operators[msg.sender] = true;
emit OwnershipTransferred(address(0), owner);
emit AddOperator(msg.sender, true);
}
modifier onlyOwner() {
require(owner == msg.sender, "!owner");
_;
}
modifier onlyOperators() {
require(operators[msg.sender] || owner == msg.sender, "!operator");
_;
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
//set operator
function setOperators(address _op, bool _valid) external onlyOwner{
operators[_op] = _valid;
emit AddOperator(_op, _valid);
}
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(owner, address(0));
owner = address(0);
}
//get reward contract list count for given pool/account
function poolRewardLength(address _pool) external view returns(uint256){
return poolRewardList[_pool].length;
}
//clear reward contract list for given pool/account
function clearPoolRewardList(address _pool) external onlyOperators{
delete poolRewardList[_pool];
emit PoolRewardReset(_pool);
}
//add a reward contract to the list of contracts for a given pool/account
function addPoolReward(address _pool, address _rewardContract) external onlyOperators{
poolRewardList[_pool].push(_rewardContract);
emit PoolRewardAdded(_pool, _rewardContract);
}
//call all reward contracts to claim. (unguarded)
function onRewardClaim() external override{
uint256 rewardLength = poolRewardList[msg.sender].length;
for(uint256 i = 0; i < rewardLength; i++){
//use try-catch as this could be a 3rd party contract
try IRewards(poolRewardList[msg.sender][i]).getReward(msg.sender){
}catch{}
}
}
}
Read Contract
operators 0x13e7c9d8 → bool
owner 0x8da5cb5b → address
poolRewardLength 0xb0de36f5 → uint256
poolRewardList 0xacecbe9d → address
Write Contract 6 functions
These functions modify contract state and require a wallet transaction to execute.
addPoolReward 0x5f96a274
address _pool
address _rewardContract
clearPoolRewardList 0x770c3a8b
address _pool
onRewardClaim 0x2663fcfc
No parameters
renounceOwnership 0x715018a6
No parameters
setOperators 0x5cfbfc6d
address _op
bool _valid
transferOwnership 0xf2fde38b
address newOwner
Recent Transactions
This address has 1 on-chain transactions, but only 1.3% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →