Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 448 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Feed | 19957443 | 671 days ago | IN | 0 ETH | 0.00044853 | ||||
| Feed | 19914518 | 677 days ago | IN | 0 ETH | 0.00180564 | ||||
| Feed | 19907373 | 678 days ago | IN | 0 ETH | 0.00047528 | ||||
| Feed | 19900221 | 679 days ago | IN | 0 ETH | 0.00038022 | ||||
| Feed | 19893074 | 680 days ago | IN | 0 ETH | 0.00038022 | ||||
| Feed | 19885929 | 681 days ago | IN | 0 ETH | 0.00056078 | ||||
| Feed | 19878774 | 682 days ago | IN | 0 ETH | 0.00057033 | ||||
| Feed | 19871605 | 683 days ago | IN | 0 ETH | 0.00047528 | ||||
| Feed | 19864486 | 684 days ago | IN | 0 ETH | 0.00038022 | ||||
| Feed | 19857331 | 685 days ago | IN | 0 ETH | 0.00047528 | ||||
| Feed | 19850182 | 686 days ago | IN | 0 ETH | 0.00038022 | ||||
| Feed | 19843028 | 687 days ago | IN | 0 ETH | 0.00057033 | ||||
| Feed | 19835875 | 688 days ago | IN | 0 ETH | 0.00044862 | ||||
| Feed | 19828724 | 689 days ago | IN | 0 ETH | 0.00038022 | ||||
| Feed | 19821576 | 690 days ago | IN | 0 ETH | 0.00047528 | ||||
| Feed | 19814431 | 691 days ago | IN | 0 ETH | 0.00038022 | ||||
| Feed | 19807283 | 692 days ago | IN | 0 ETH | 0.00057033 | ||||
| Feed | 19800132 | 693 days ago | IN | 0 ETH | 0.00047528 | ||||
| Feed | 19792975 | 694 days ago | IN | 0 ETH | 0.00057033 | ||||
| Feed | 19785822 | 695 days ago | IN | 0 ETH | 0.00067293 | ||||
| Feed | 19778679 | 696 days ago | IN | 0 ETH | 0.00066539 | ||||
| Feed | 19771512 | 697 days ago | IN | 0 ETH | 0.00076044 | ||||
| Feed | 19764353 | 698 days ago | IN | 0 ETH | 0.00066539 | ||||
| Feed | 19757203 | 699 days ago | IN | 0 ETH | 0.00047528 | ||||
| Feed | 19750055 | 700 days ago | IN | 0 ETH | 0.00047528 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
GFFeeder01
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;
import "@openzeppelin/contracts/interfaces/IERC20.sol";
import "./base/BaseFeeder.sol";
import "./interfaces/IxGF.sol";
import "./interfaces/IStakingPoolManager.sol";
import "./SafeToken.sol";
contract GFFeeder01 is BaseFeeder {
using SafeToken for address;
struct Snapshot {
uint112 stakingPoolTvl;
uint112 xGFTvl;
uint32 blockNumber;
}
uint256 public constant MAX_BIAS = 10000;
IStakingPoolManager public stakingPoolManager;
address public stakingPool;
uint256 public bias = 3000; // 30%
/// @dev Mapping ( round off timestamp to week => Snapshot ) to keep track of each week snapshot
mapping(uint256 => Snapshot) public weeklySnapshotOf;
event MissingSnapshot(uint40 fromBlock, uint40 toBlock);
event SetBias(uint256 oldBias, uint256 newBias);
constructor(
address _stakingPool,
address _stakingPoolManager,
address _rewardManager,
address _rewardSource,
uint256 _rewardRatePerBlock,
uint40 _lastRewardBlock,
uint40 _rewardEndBlock
) BaseFeeder(_rewardManager, _rewardSource, _rewardRatePerBlock, _lastRewardBlock, _rewardEndBlock) {
stakingPoolManager = IStakingPoolManager(_stakingPoolManager);
stakingPool = _stakingPool;
require(stakingPoolManager.reward() == rewardManager.rewardToken(), "invalid legacy reward");
token.safeApprove(_rewardManager, type(uint256).max);
}
function stakingPoolTvl() public view returns (uint256) {
return IERC20(token).balanceOf(stakingPool);
}
function xGFTvl() public view returns (uint256) {
return IxGF(rewardManager.xGF()).supply() + rewardManager.lastTokenBalance();
}
function getRate(uint256 timestamp) external view returns (uint256, uint256) {
uint256 _weekCursor = _timestampToFloorWeek(timestamp);
return _getRate(weeklySnapshotOf[_weekCursor], rewardRatePerBlock);
}
function _feed() override internal {
// 1. Feed reward for this week
Snapshot memory _thisWeekSnapshot = weeklySnapshotOf[_timestampToFloorWeek(block.timestamp)];
if (_thisWeekSnapshot.blockNumber == 0) {
// missing a call to snapshot this week, need to fix with inject reward
emit MissingSnapshot(lastRewardBlock, uint40(block.number));
} else {
_updatePools(_thisWeekSnapshot, lastRewardBlock);
}
_updateLastRewardBlock(uint40(block.number));
// 3. Record Snapshot to be used for next week
_takeSnapshot(_timestampToFloorWeek(block.timestamp + WEEK - 1));
}
function _updateLastRewardBlock(uint40 blockNumber) internal {
uint40 _rewardEndBlock = rewardEndBlock;
lastRewardBlock = blockNumber > _rewardEndBlock ? _rewardEndBlock : blockNumber;
}
function _updatePools(Snapshot memory _snapshot, uint40 _lastRewardBlock) internal {
(uint256 rate1, uint256 rate2) = _getRate(_snapshot, rewardRatePerBlock);
_setStakingPoolManagerRate(rate1);
uint256 _feedAmount = _feedRewardManager(rate2, _lastRewardBlock, block.number);
emit Feed(_feedAmount);
}
function _takeSnapshot(uint256 _weekCursor) internal {
weeklySnapshotOf[_weekCursor] = Snapshot({
stakingPoolTvl: uint112(stakingPoolTvl()),
xGFTvl: uint112(xGFTvl()),
blockNumber: uint32(block.number)
});
}
function _setStakingPoolManagerRate(uint256 _rate) internal {
if (stakingPoolManager.rewardPerBlock() == _rate) {
stakingPoolManager.distributeRewards();
} else {
stakingPoolManager.setRewardPerBlock(_rate);
}
}
function _feedRewardManager(
uint256 _rate,
uint256 _fromBlock,
uint256 _toBlock
) internal returns (uint256) {
uint256 blockDelta = _getMultiplier(_fromBlock, _toBlock, rewardEndBlock);
if (blockDelta == 0) {
return 0;
}
uint256 _toDistribute = _rate * blockDelta;
if (_toDistribute > 0) {
token.safeTransferFrom(rewardSource, address(this), _toDistribute);
rewardManager.feed(_toDistribute);
}
return _toDistribute;
}
function _getMultiplier(
uint256 _from,
uint256 _to,
uint256 _endBlock
) internal pure returns (uint256) {
if ((_from >= _endBlock) || (_from > _to)) {
return 0;
}
if (_to <= _endBlock) {
return _to - _from;
}
return _endBlock - _from;
}
function _getRate(Snapshot memory _snapshot, uint256 _maxRatePerBlock)
internal
view
returns (uint256 rate1, uint256 rate2)
{
if (_snapshot.stakingPoolTvl == 0 || _snapshot.xGFTvl == 0) {
rate1 = 0;
rate2 = 0;
return (rate1, rate2);
}
uint256 _bias = bias;
uint256 _adjustedV1Weight = uint256(_snapshot.stakingPoolTvl) * (MAX_BIAS - _bias);
uint256 _adjustedV2Weight = uint256(_snapshot.xGFTvl) * (MAX_BIAS + _bias);
uint256 _totalWeight = _adjustedV1Weight + _adjustedV2Weight;
rate1 = (_maxRatePerBlock * _adjustedV1Weight) / _totalWeight;
rate2 = (_maxRatePerBlock * _adjustedV2Weight) / _totalWeight;
}
function _timestampToFloorWeek(uint256 _timestamp) internal pure returns (uint256) {
return (_timestamp / WEEK) * WEEK;
}
function setBias(uint256 _newBias, bool _distribute) external onlyOwner {
require(_newBias <= MAX_BIAS, "exceed MAX_BIAS");
if (_distribute) {
_feed();
}
uint256 _oldBias = bias;
bias = _newBias;
emit SetBias(_oldBias, _newBias);
}
function injectSnapshot(uint256 _timestamp, Snapshot memory _snapshot) external onlyOwner {
uint256 _weekCursor = _timestampToFloorWeek(_timestamp);
weeklySnapshotOf[_weekCursor] = _snapshot;
}
function setRewardRatePerBlock(uint256 _newRate) override external onlyOwner {
// 1. feed
Snapshot memory _thisWeekSnapshot = weeklySnapshotOf[_timestampToFloorWeek(block.timestamp)];
require(_thisWeekSnapshot.blockNumber != 0, "!thisWeekSnapshot");
_updatePools(_thisWeekSnapshot, lastRewardBlock);
_updateLastRewardBlock(uint40(block.number));
_takeSnapshot(_timestampToFloorWeek(block.timestamp + WEEK - 1));
// 2. update rate
uint256 _nextWeekCursor = _timestampToFloorWeek(block.timestamp + WEEK - 1);
_takeSnapshot(_nextWeekCursor);
uint256 _prevRate = rewardRatePerBlock;
rewardRatePerBlock = _newRate;
// 3. apply new rate to staking pool
(uint newRate1,) = _getRate(_thisWeekSnapshot, _newRate);
_setStakingPoolManagerRate(newRate1);
emit SetNewRewardRatePerBlock(msg.sender, _prevRate, _newRate);
}
}// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol) pragma solidity ^0.8.0; import "../token/ERC20/IERC20.sol";
// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;
import "@openzeppelin/contracts/access/Ownable.sol";
import "../interfaces/IRewardManager.sol";
abstract contract BaseFeeder is Ownable {
/// @dev Time-related constants
uint256 public constant WEEK = 7 days;
address public token;
address public rewardSource;
IRewardManager public rewardManager;
uint40 public lastRewardBlock;
uint40 public rewardEndBlock;
uint256 public rewardRatePerBlock;
mapping(address => bool) public whitelistedFeedCallers;
event Feed(uint256 feedAmount);
event SetCanDistributeRewards(bool canDistributeRewards);
event SetNewRewardEndBlock(address indexed caller, uint256 preRewardEndBlock, uint256 newRewardEndBlock);
event SetNewRewardRatePerBlock(address indexed caller, uint256 prevRate, uint256 newRate);
event SetNewRewardSource(address indexed caller, address prevSource, address newSource);
event SetNewRewardManager(address indexed caller, address prevManager, address newManager);
event SetWhitelistedFeedCaller(address indexed caller, address indexed addr, bool ok);
constructor(
address _rewardManager,
address _rewardSource,
uint256 _rewardRatePerBlock,
uint40 _lastRewardBlock,
uint40 _rewardEndBlock
) {
rewardManager = IRewardManager(_rewardManager);
token = rewardManager.rewardToken();
rewardSource = _rewardSource;
lastRewardBlock = _lastRewardBlock;
rewardEndBlock = _rewardEndBlock;
rewardRatePerBlock = _rewardRatePerBlock;
require(_lastRewardBlock < _rewardEndBlock, "bad _lastRewardBlock");
}
function feed() external {
require(whitelistedFeedCallers[msg.sender],"!whitelisted");
_feed();
}
function _feed() virtual internal;
function setRewardRatePerBlock(uint256 _newRate) virtual external onlyOwner {
_feed();
uint256 _prevRate = rewardRatePerBlock;
rewardRatePerBlock = _newRate;
emit SetNewRewardRatePerBlock(msg.sender, _prevRate, _newRate);
}
function setRewardEndBlock(uint40 _newRewardEndBlock) external onlyOwner {
uint40 _prevRewardEndBlock = rewardEndBlock;
require(_newRewardEndBlock > rewardEndBlock, "!future");
rewardEndBlock = _newRewardEndBlock;
emit SetNewRewardEndBlock(msg.sender, _prevRewardEndBlock, _newRewardEndBlock);
}
function setRewardSource(address _rewardSource) external onlyOwner {
address _prevSource = rewardSource;
rewardSource = _rewardSource;
emit SetNewRewardSource(msg.sender, _prevSource , _rewardSource);
}
function setRewardManager(address _newManager) external onlyOwner {
address _prevManager = address(rewardManager);
rewardManager = IRewardManager(_newManager);
emit SetNewRewardManager(msg.sender, _prevManager, _newManager);
}
function setWhitelistedFeedCallers(address[] calldata callers, bool ok) external onlyOwner {
for (uint256 idx = 0; idx < callers.length; idx++) {
whitelistedFeedCallers[callers[idx]] = ok;
emit SetWhitelistedFeedCaller(msg.sender, callers[idx], ok);
}
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;
struct Point {
int128 bias; // Voting weight
int128 slope; // Multiplier factor to get voting weight at a given time
uint256 timestamp;
uint256 blockNumber;
}
interface IxGF {
/// @dev Return the max epoch of the given "_user"
function userPointEpoch(address _user) external view returns (uint256);
/// @dev Return the max global epoch
function epoch() external view returns (uint256);
/// @dev Return the recorded point for _user at specific _epoch
function userPointHistory(address _user, uint256 _epoch) external view returns (Point memory);
/// @dev Return the recorded global point at specific _epoch
function pointHistory(uint256 _epoch) external view returns (Point memory);
/// @dev Trigger global check point
function checkpoint() external;
function supply() external view returns (uint256);
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;
interface IStakingPoolManager {
function reward() external view returns (address);
function rewardPerBlock() external view returns (uint256);
function setRewardPerBlock(uint256 _rewardPerBlock) external;
function distributeRewards() external;
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;
interface ERC20Interface {
function balanceOf(address user) external view returns (uint256);
}
library SafeToken {
function myBalance(address token) internal view returns (uint256) {
return ERC20Interface(token).balanceOf(address(this));
}
function safeTransfer(address token, address to, uint256 value) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
// solhint-disable-next-line avoid-low-level-calls
require(token.code.length > 0, "!contract");
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), "!safeTransfer");
}
function safeTransferFrom(address token, address from, address to, uint256 value) internal {
// bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
// solhint-disable-next-line avoid-low-level-calls
require(token.code.length > 0, "!contract");
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), "!safeTransferFrom");
}
function safeApprove(address token, address to, uint256 value) internal {
// bytes4(keccak256(bytes('approve(address,uint256)')));
require(token.code.length > 0, "!contract");
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), "!safeApprove");
}
function safeTransferETH(address to, uint256 value) internal {
// solhint-disable-next-line no-call-value
(bool success, ) = to.call{ value: value }(new bytes(0));
require(success, "!safeTransferETH");
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;
interface IRewardManager {
function xGF() external view returns (address);
function rewardToken() external returns (address);
function feed(uint256 _amount) external returns (bool);
function claim(address _for) external returns (uint256);
function pendingRewardsOf(address _user) external returns (uint256);
function lastTokenBalance() external view returns (uint256);
function checkpointToken() external view returns (uint256);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"metadata": {
"useLiteralContent": true
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_stakingPool","type":"address"},{"internalType":"address","name":"_stakingPoolManager","type":"address"},{"internalType":"address","name":"_rewardManager","type":"address"},{"internalType":"address","name":"_rewardSource","type":"address"},{"internalType":"uint256","name":"_rewardRatePerBlock","type":"uint256"},{"internalType":"uint40","name":"_lastRewardBlock","type":"uint40"},{"internalType":"uint40","name":"_rewardEndBlock","type":"uint40"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"feedAmount","type":"uint256"}],"name":"Feed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint40","name":"fromBlock","type":"uint40"},{"indexed":false,"internalType":"uint40","name":"toBlock","type":"uint40"}],"name":"MissingSnapshot","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldBias","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBias","type":"uint256"}],"name":"SetBias","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"canDistributeRewards","type":"bool"}],"name":"SetCanDistributeRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"preRewardEndBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRewardEndBlock","type":"uint256"}],"name":"SetNewRewardEndBlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"address","name":"prevManager","type":"address"},{"indexed":false,"internalType":"address","name":"newManager","type":"address"}],"name":"SetNewRewardManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"prevRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"SetNewRewardRatePerBlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"address","name":"prevSource","type":"address"},{"indexed":false,"internalType":"address","name":"newSource","type":"address"}],"name":"SetNewRewardSource","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"bool","name":"ok","type":"bool"}],"name":"SetWhitelistedFeedCaller","type":"event"},{"inputs":[],"name":"MAX_BIAS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WEEK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bias","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"components":[{"internalType":"uint112","name":"stakingPoolTvl","type":"uint112"},{"internalType":"uint112","name":"xGFTvl","type":"uint112"},{"internalType":"uint32","name":"blockNumber","type":"uint32"}],"internalType":"struct GFFeeder01.Snapshot","name":"_snapshot","type":"tuple"}],"name":"injectSnapshot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastRewardBlock","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardEndBlock","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardManager","outputs":[{"internalType":"contract IRewardManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardSource","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newBias","type":"uint256"},{"internalType":"bool","name":"_distribute","type":"bool"}],"name":"setBias","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint40","name":"_newRewardEndBlock","type":"uint40"}],"name":"setRewardEndBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newManager","type":"address"}],"name":"setRewardManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newRate","type":"uint256"}],"name":"setRewardRatePerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardSource","type":"address"}],"name":"setRewardSource","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"callers","type":"address[]"},{"internalType":"bool","name":"ok","type":"bool"}],"name":"setWhitelistedFeedCallers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingPoolManager","outputs":[{"internalType":"contract IStakingPoolManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingPoolTvl","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"weeklySnapshotOf","outputs":[{"internalType":"uint112","name":"stakingPoolTvl","type":"uint112"},{"internalType":"uint112","name":"xGFTvl","type":"uint112"},{"internalType":"uint32","name":"blockNumber","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedFeedCallers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xGFTvl","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
6080604052610bb86008553480156200001757600080fd5b5060405162002006380380620020068339810160408190526200003a916200051d565b84848484846200004a336200033e565b600380546001600160a01b0319166001600160a01b0387169081179091556040805163f7c618c160e01b8152905163f7c618c19160048082019260209290919082900301816000875af1158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620005a9565b600180546001600160a01b03199081166001600160a01b03938416179091556002805490911691861691909117905560038054600160a01b600160f01b031916600160a01b64ffffffffff85811691820264ffffffffff60c81b191692909217600160c81b92851692830217909255600485905511620001935760405162461bcd60e51b815260206004820152601460248201527f626164205f6c617374526577617264426c6f636b00000000000000000000000060448201526064015b60405180910390fd5b5050600680546001600160a01b03808c166001600160a01b031992831617909255600780548d841692169190911790556003546040805163f7c618c160e01b8152905191909216945063f7c618c193506004808301935060209282900301816000875af115801562000209573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022f9190620005a9565b6001600160a01b0316600660009054906101000a90046001600160a01b03166001600160a01b031663228cb7336040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b29190620005a9565b6001600160a01b0316146200030a5760405162461bcd60e51b815260206004820152601560248201527f696e76616c6964206c656761637920726577617264000000000000000000000060448201526064016200018a565b60015462000331906001600160a01b0316866000196200038e602090811b62000da217901c565b5050505050505062000630565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000836001600160a01b03163b11620003d65760405162461bcd60e51b81526020600482015260096024820152680858dbdb9d1c9858dd60ba1b60448201526064016200018a565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1790529151600092839290871691620004349190620005ce565b6000604051808303816000865af19150503d806000811462000473576040519150601f19603f3d011682016040523d82523d6000602084013e62000478565b606091505b5091509150818015620004a6575080511580620004a6575080806020019051810190620004a691906200060c565b620004e35760405162461bcd60e51b815260206004820152600c60248201526b2173616665417070726f766560a01b60448201526064016200018a565b5050505050565b80516001600160a01b03811681146200050257600080fd5b919050565b805164ffffffffff811681146200050257600080fd5b600080600080600080600060e0888a0312156200053957600080fd5b6200054488620004ea565b96506200055460208901620004ea565b95506200056460408901620004ea565b94506200057460608901620004ea565b9350608088015192506200058b60a0890162000507565b91506200059b60c0890162000507565b905092959891949750929550565b600060208284031215620005bc57600080fd5b620005c782620004ea565b9392505050565b6000825160005b81811015620005f15760208186018101518583015201620005d5565b8181111562000601576000828501525b509190910192915050565b6000602082840312156200061f57600080fd5b81518015158114620005c757600080fd5b6119c680620006406000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806373568dc3116100f9578063b2f196f611610097578063f15e683e11610071578063f15e683e146103f6578063f2fde38b14610409578063f4359ce51461041c578063fc0c546a1461042657600080fd5b8063b2f196f6146103bd578063b619691a146103d0578063d600af40146103e357600080fd5b80638f05f844116100d35780638f05f8441461035657806390870492146103895780639cfbc00214610392578063a9f8d181146103a557600080fd5b806373568dc3146103295780637b8d2be01461033c5780638da5cb5b1461034557600080fd5b806337a7b7d8116101665780635776409411610140578063577640941461025b578063604ef2e514610283578063628d24cd146102b1578063715018a61461032157600080fd5b806337a7b7d81461023857806344aac9a71461024057806349e9a2891461025357600080fd5b8063054816cc146101ae5780630c56ae3b146101ca5780630f4ef8a6146101f5578063153ee554146102085780631d3257e21461021d57806321f3640314610230575b600080fd5b6101b760085481565b6040519081526020015b60405180910390f35b6007546101dd906001600160a01b031681565b6040516001600160a01b0390911681526020016101c1565b6003546101dd906001600160a01b031681565b61021b610216366004611634565b610439565b005b61021b61022b36600461165f565b6104d0565b6101b76105e6565b61021b61073b565b61021b61024e366004611634565b610793565b6101b7610819565b61026e6102693660046116e5565b61088e565b604080519283526020830191909152016101c1565b60035461029b90600160c81b900464ffffffffff1681565b60405164ffffffffff90911681526020016101c1565b6102f56102bf3660046116e5565b6009602052600090815260409020546001600160701b0380821691600160701b810490911690600160e01b900463ffffffff1683565b604080516001600160701b03948516815293909216602084015263ffffffff16908201526060016101c1565b61021b610902565b61021b61033736600461171a565b610936565b6101b761271081565b6000546001600160a01b03166101dd565b610379610364366004611634565b60056020526000908152604090205460ff1681565b60405190151581526020016101c1565b6101b760045481565b6002546101dd906001600160a01b031681565b60035461029b90600160a01b900464ffffffffff1681565b61021b6103cb3660046116e5565b6109d3565b61021b6103de3660046117bf565b610b6b565b6006546101dd906001600160a01b031681565b61021b6104043660046117ef565b610c2d565b61021b610417366004611634565b610d07565b6101b762093a8081565b6001546101dd906001600160a01b031681565b6000546001600160a01b0316331461046c5760405162461bcd60e51b815260040161046390611816565b60405180910390fd5b600380546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935233917f5915dd0ceab51d6f9250fe2c8e9407fdc9107e17dc9b5ab0b0e5ff8db1859e1c91015b60405180910390a25050565b6000546001600160a01b031633146104fa5760405162461bcd60e51b815260040161046390611816565b60005b828110156105e057816005600086868581811061051c5761051c61184b565b90506020020160208101906105319190611634565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905583838281811061056b5761056b61184b565b90506020020160208101906105809190611634565b6001600160a01b0316336001600160a01b03167f3e04bad06656d11b5a65d510d72748a09e347ec2f41fe2ad195013d0c4f25cf2846040516105c6911515815260200190565b60405180910390a3806105d881611877565b9150506104fd565b50505050565b6003546040805163862a9f2f60e01b815290516000926001600160a01b03169163862a9f2f9160048083019260209291908290030181865afa158015610630573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106549190611892565b600360009054906101000a90046001600160a01b03166001600160a01b031663f5fdaba26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cb91906118ab565b6001600160a01b031663047fc9aa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072c9190611892565b61073691906118c8565b905090565b3360009081526005602052604090205460ff166107895760405162461bcd60e51b815260206004820152600c60248201526b085dda1a5d195b1a5cdd195960a21b6044820152606401610463565b610791610ef2565b565b6000546001600160a01b031633146107bd5760405162461bcd60e51b815260040161046390611816565b600280546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935233917fe5ea988bce75d719b93c6766991c2ec43296f472964e908e7c7585b9567eef2491016104c4565b6001546007546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561086a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107369190611892565b600080600061089c84610fe0565b600081815260096020908152604091829020825160608101845290546001600160701b038082168352600160701b82041692820192909252600160e01b90910463ffffffff16918101919091526004549192506108f891611000565b9250925050915091565b6000546001600160a01b0316331461092c5760405162461bcd60e51b815260040161046390611816565b61079160006110cf565b6000546001600160a01b031633146109605760405162461bcd60e51b815260040161046390611816565b600061096b83610fe0565b6000908152600960209081526040918290208451815492860151939095015163ffffffff16600160e01b026001600160e01b036001600160701b03948516600160701b026001600160e01b031990941694909616939093179190911793909316179091555050565b6000546001600160a01b031633146109fd5760405162461bcd60e51b815260040161046390611816565b600060096000610a0c42610fe0565b81526020808201929092526040908101600020815160608101835290546001600160701b038082168352600160701b82041693820193909352600160e01b90920463ffffffff16908201819052909150610a9c5760405162461bcd60e51b8152602060048201526011602482015270085d1a1a5cd5d9595ad4db985c1cda1bdd607a1b6044820152606401610463565b600354610ab8908290600160a01b900464ffffffffff1661111f565b610ac143611191565b610aea610ae56001610ad662093a80426118c8565b610ae091906118e0565b610fe0565b6111db565b6000610afe6001610ad662093a80426118c8565b9050610b09816111db565b60048054908490556000610b1d8486611000565b509050610b2981611276565b604080518381526020810187905233917fe2d585ca44df8b3a1162faf72c4db2ff738e95fcf1006995bd75d781b187fa27910160405180910390a25050505050565b6000546001600160a01b03163314610b955760405162461bcd60e51b815260040161046390611816565b612710821115610bd95760405162461bcd60e51b815260206004820152600f60248201526e657863656564204d41585f4249415360881b6044820152606401610463565b8015610be757610be7610ef2565b600880549083905560408051828152602081018590527f67f4724377be925ea349f77530d1018be9089fd01377d3a882fc804a9aefb0bf910160405180910390a1505050565b6000546001600160a01b03163314610c575760405162461bcd60e51b815260040161046390611816565b60035464ffffffffff600160c81b90910481169082168110610ca55760405162461bcd60e51b81526020600482015260076024820152662166757475726560c81b6044820152606401610463565b6003805464ffffffffff60c81b1916600160c81b64ffffffffff85811691820292909217909255604080519184168252602082019290925233917fbf5a0a0875eaa2b61c067a17ac1b69a307917fefec902ea7d469ff3082b6204091016104c4565b6000546001600160a01b03163314610d315760405162461bcd60e51b815260040161046390611816565b6001600160a01b038116610d965760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610463565b610d9f816110cf565b50565b6000836001600160a01b03163b11610de85760405162461bcd60e51b81526020600482015260096024820152680858dbdb9d1c9858dd60ba1b6044820152606401610463565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1790529151600092839290871691610e4491906118f7565b6000604051808303816000865af19150503d8060008114610e81576040519150601f19603f3d011682016040523d82523d6000602084013e610e86565b606091505b5091509150818015610eb0575080511580610eb0575080806020019051810190610eb09190611932565b610eeb5760405162461bcd60e51b815260206004820152600c60248201526b2173616665417070726f766560a01b6044820152606401610463565b5050505050565b600060096000610f0142610fe0565b81526020808201929092526040908101600020815160608101835290546001600160701b038082168352600160701b82041693820193909352600160e01b90920463ffffffff16908201819052909150610fa65760035460408051600160a01b90920464ffffffffff9081168352431660208301527f39f637ee8ed5afb0722c78c3202eb9485f5127e42c6e1f5e4c097483d375194c910160405180910390a1610fc2565b600354610fc2908290600160a01b900464ffffffffff1661111f565b610fcb43611191565b610d9f610ae56001610ad662093a80426118c8565b600062093a80610ff0818461194f565b610ffa9190611971565b92915050565b815160009081906001600160701b03161580611027575060208401516001600160701b0316155b15611037575060009050806110c8565b6008546000611048826127106118e0565b865161105d91906001600160701b0316611971565b9050600061106d836127106118c8565b87602001516001600160701b03166110859190611971565b9050600061109382846118c8565b9050806110a08489611971565b6110aa919061194f565b9550806110b78389611971565b6110c1919061194f565b9450505050505b9250929050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008061112e84600454611000565b9150915061113b82611276565b600061114f828564ffffffffff1643611393565b90507faee7b00ca0359ab0727fb54b350e15a1ed46fb12dc0d04ca9bb5f4e7c313249a8160405161118291815260200190565b60405180910390a15050505050565b60035464ffffffffff600160c81b909104811690821681106111b357816111b5565b805b600360146101000a81548164ffffffffff021916908364ffffffffff1602179055505050565b60405180606001604052806111ee610819565b6001600160701b031681526020016112046105e6565b6001600160701b03908116825263ffffffff43811660209384015260009485526009835260409485902084518154948601519590960151909116600160e01b026001600160e01b03948316600160701b026001600160e01b031990941695909216949094179190911791909116179055565b600654604080516322b8e72b60e21b8152905183926001600160a01b031691638ae39cac9160048083019260209291908290030181865afa1580156112bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e39190611892565b141561134d57600660009054906101000a90046001600160a01b03166001600160a01b0316636f4a2cd06040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561133957600080fd5b505af1158015610eeb573d6000803e3d6000fd5b600654604051635dc395a560e11b8152600481018390526001600160a01b039091169063bb872b4a90602401600060405180830381600087803b15801561133957600080fd5b6000806113bb8484600360199054906101000a900464ffffffffff1664ffffffffff1661147a565b9050806113cc576000915050611473565b60006113d88287611971565b9050801561146f576002546001546113fe916001600160a01b03918216911630846114c1565b60035460405163f59dfdfb60e01b8152600481018390526001600160a01b039091169063f59dfdfb906024016020604051808303816000875af1158015611449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146d9190611932565b505b9150505b9392505050565b6000818410158061148a57508284115b1561149757506000611473565b8183116114af576114a884846118e0565b9050611473565b6114b984836118e0565b949350505050565b6000846001600160a01b03163b116115075760405162461bcd60e51b81526020600482015260096024820152680858dbdb9d1c9858dd60ba1b6044820152606401610463565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161156b91906118f7565b6000604051808303816000865af19150503d80600081146115a8576040519150601f19603f3d011682016040523d82523d6000602084013e6115ad565b606091505b50915091508180156115d75750805115806115d75750808060200190518101906115d79190611932565b6116175760405162461bcd60e51b815260206004820152601160248201527021736166655472616e7366657246726f6d60781b6044820152606401610463565b505050505050565b6001600160a01b0381168114610d9f57600080fd5b60006020828403121561164657600080fd5b81356114738161161f565b8015158114610d9f57600080fd5b60008060006040848603121561167457600080fd5b833567ffffffffffffffff8082111561168c57600080fd5b818601915086601f8301126116a057600080fd5b8135818111156116af57600080fd5b8760208260051b85010111156116c457600080fd5b602092830195509350508401356116da81611651565b809150509250925092565b6000602082840312156116f757600080fd5b5035919050565b80356001600160701b038116811461171557600080fd5b919050565b600080828403608081121561172e57600080fd5b833592506060601f198201121561174457600080fd5b506040516060810181811067ffffffffffffffff8211171561177657634e487b7160e01b600052604160045260246000fd5b604052611785602085016116fe565b8152611793604085016116fe565b6020820152606084013563ffffffff811681146117af57600080fd5b6040820152919491935090915050565b600080604083850312156117d257600080fd5b8235915060208301356117e481611651565b809150509250929050565b60006020828403121561180157600080fd5b813564ffffffffff8116811461147357600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561188b5761188b611861565b5060010190565b6000602082840312156118a457600080fd5b5051919050565b6000602082840312156118bd57600080fd5b81516114738161161f565b600082198211156118db576118db611861565b500190565b6000828210156118f2576118f2611861565b500390565b6000825160005b8181101561191857602081860181015185830152016118fe565b81811115611927576000828501525b509190910192915050565b60006020828403121561194457600080fd5b815161147381611651565b60008261196c57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561198b5761198b611861565b50029056fea2646970667358221220ca307db0e7b75caac1eee5e22f686a0502399c18d5b9d14f54181f7b1dc7a09d64736f6c634300080a0033000000000000000000000000c747f9d3e6b34596977e79f09a2ab122042673e100000000000000000000000061030d2d0106ee3b1251642b098f3da2b781b55600000000000000000000000026034cc54f92ca04400d84bc1b9e09a1d8ba8a11000000000000000000000000e86fb860e8fcc93e05db3d4386d4e20bc9e9f0570000000000000000000000000000000000000000000000002f86d3e1fe21dcee0000000000000000000000000000000000000000000000000000000000fc3b1800000000000000000000000000000000000000000000000000000000012225c0
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c806373568dc3116100f9578063b2f196f611610097578063f15e683e11610071578063f15e683e146103f6578063f2fde38b14610409578063f4359ce51461041c578063fc0c546a1461042657600080fd5b8063b2f196f6146103bd578063b619691a146103d0578063d600af40146103e357600080fd5b80638f05f844116100d35780638f05f8441461035657806390870492146103895780639cfbc00214610392578063a9f8d181146103a557600080fd5b806373568dc3146103295780637b8d2be01461033c5780638da5cb5b1461034557600080fd5b806337a7b7d8116101665780635776409411610140578063577640941461025b578063604ef2e514610283578063628d24cd146102b1578063715018a61461032157600080fd5b806337a7b7d81461023857806344aac9a71461024057806349e9a2891461025357600080fd5b8063054816cc146101ae5780630c56ae3b146101ca5780630f4ef8a6146101f5578063153ee554146102085780631d3257e21461021d57806321f3640314610230575b600080fd5b6101b760085481565b6040519081526020015b60405180910390f35b6007546101dd906001600160a01b031681565b6040516001600160a01b0390911681526020016101c1565b6003546101dd906001600160a01b031681565b61021b610216366004611634565b610439565b005b61021b61022b36600461165f565b6104d0565b6101b76105e6565b61021b61073b565b61021b61024e366004611634565b610793565b6101b7610819565b61026e6102693660046116e5565b61088e565b604080519283526020830191909152016101c1565b60035461029b90600160c81b900464ffffffffff1681565b60405164ffffffffff90911681526020016101c1565b6102f56102bf3660046116e5565b6009602052600090815260409020546001600160701b0380821691600160701b810490911690600160e01b900463ffffffff1683565b604080516001600160701b03948516815293909216602084015263ffffffff16908201526060016101c1565b61021b610902565b61021b61033736600461171a565b610936565b6101b761271081565b6000546001600160a01b03166101dd565b610379610364366004611634565b60056020526000908152604090205460ff1681565b60405190151581526020016101c1565b6101b760045481565b6002546101dd906001600160a01b031681565b60035461029b90600160a01b900464ffffffffff1681565b61021b6103cb3660046116e5565b6109d3565b61021b6103de3660046117bf565b610b6b565b6006546101dd906001600160a01b031681565b61021b6104043660046117ef565b610c2d565b61021b610417366004611634565b610d07565b6101b762093a8081565b6001546101dd906001600160a01b031681565b6000546001600160a01b0316331461046c5760405162461bcd60e51b815260040161046390611816565b60405180910390fd5b600380546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935233917f5915dd0ceab51d6f9250fe2c8e9407fdc9107e17dc9b5ab0b0e5ff8db1859e1c91015b60405180910390a25050565b6000546001600160a01b031633146104fa5760405162461bcd60e51b815260040161046390611816565b60005b828110156105e057816005600086868581811061051c5761051c61184b565b90506020020160208101906105319190611634565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905583838281811061056b5761056b61184b565b90506020020160208101906105809190611634565b6001600160a01b0316336001600160a01b03167f3e04bad06656d11b5a65d510d72748a09e347ec2f41fe2ad195013d0c4f25cf2846040516105c6911515815260200190565b60405180910390a3806105d881611877565b9150506104fd565b50505050565b6003546040805163862a9f2f60e01b815290516000926001600160a01b03169163862a9f2f9160048083019260209291908290030181865afa158015610630573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106549190611892565b600360009054906101000a90046001600160a01b03166001600160a01b031663f5fdaba26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cb91906118ab565b6001600160a01b031663047fc9aa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072c9190611892565b61073691906118c8565b905090565b3360009081526005602052604090205460ff166107895760405162461bcd60e51b815260206004820152600c60248201526b085dda1a5d195b1a5cdd195960a21b6044820152606401610463565b610791610ef2565b565b6000546001600160a01b031633146107bd5760405162461bcd60e51b815260040161046390611816565b600280546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935233917fe5ea988bce75d719b93c6766991c2ec43296f472964e908e7c7585b9567eef2491016104c4565b6001546007546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561086a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107369190611892565b600080600061089c84610fe0565b600081815260096020908152604091829020825160608101845290546001600160701b038082168352600160701b82041692820192909252600160e01b90910463ffffffff16918101919091526004549192506108f891611000565b9250925050915091565b6000546001600160a01b0316331461092c5760405162461bcd60e51b815260040161046390611816565b61079160006110cf565b6000546001600160a01b031633146109605760405162461bcd60e51b815260040161046390611816565b600061096b83610fe0565b6000908152600960209081526040918290208451815492860151939095015163ffffffff16600160e01b026001600160e01b036001600160701b03948516600160701b026001600160e01b031990941694909616939093179190911793909316179091555050565b6000546001600160a01b031633146109fd5760405162461bcd60e51b815260040161046390611816565b600060096000610a0c42610fe0565b81526020808201929092526040908101600020815160608101835290546001600160701b038082168352600160701b82041693820193909352600160e01b90920463ffffffff16908201819052909150610a9c5760405162461bcd60e51b8152602060048201526011602482015270085d1a1a5cd5d9595ad4db985c1cda1bdd607a1b6044820152606401610463565b600354610ab8908290600160a01b900464ffffffffff1661111f565b610ac143611191565b610aea610ae56001610ad662093a80426118c8565b610ae091906118e0565b610fe0565b6111db565b6000610afe6001610ad662093a80426118c8565b9050610b09816111db565b60048054908490556000610b1d8486611000565b509050610b2981611276565b604080518381526020810187905233917fe2d585ca44df8b3a1162faf72c4db2ff738e95fcf1006995bd75d781b187fa27910160405180910390a25050505050565b6000546001600160a01b03163314610b955760405162461bcd60e51b815260040161046390611816565b612710821115610bd95760405162461bcd60e51b815260206004820152600f60248201526e657863656564204d41585f4249415360881b6044820152606401610463565b8015610be757610be7610ef2565b600880549083905560408051828152602081018590527f67f4724377be925ea349f77530d1018be9089fd01377d3a882fc804a9aefb0bf910160405180910390a1505050565b6000546001600160a01b03163314610c575760405162461bcd60e51b815260040161046390611816565b60035464ffffffffff600160c81b90910481169082168110610ca55760405162461bcd60e51b81526020600482015260076024820152662166757475726560c81b6044820152606401610463565b6003805464ffffffffff60c81b1916600160c81b64ffffffffff85811691820292909217909255604080519184168252602082019290925233917fbf5a0a0875eaa2b61c067a17ac1b69a307917fefec902ea7d469ff3082b6204091016104c4565b6000546001600160a01b03163314610d315760405162461bcd60e51b815260040161046390611816565b6001600160a01b038116610d965760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610463565b610d9f816110cf565b50565b6000836001600160a01b03163b11610de85760405162461bcd60e51b81526020600482015260096024820152680858dbdb9d1c9858dd60ba1b6044820152606401610463565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1790529151600092839290871691610e4491906118f7565b6000604051808303816000865af19150503d8060008114610e81576040519150601f19603f3d011682016040523d82523d6000602084013e610e86565b606091505b5091509150818015610eb0575080511580610eb0575080806020019051810190610eb09190611932565b610eeb5760405162461bcd60e51b815260206004820152600c60248201526b2173616665417070726f766560a01b6044820152606401610463565b5050505050565b600060096000610f0142610fe0565b81526020808201929092526040908101600020815160608101835290546001600160701b038082168352600160701b82041693820193909352600160e01b90920463ffffffff16908201819052909150610fa65760035460408051600160a01b90920464ffffffffff9081168352431660208301527f39f637ee8ed5afb0722c78c3202eb9485f5127e42c6e1f5e4c097483d375194c910160405180910390a1610fc2565b600354610fc2908290600160a01b900464ffffffffff1661111f565b610fcb43611191565b610d9f610ae56001610ad662093a80426118c8565b600062093a80610ff0818461194f565b610ffa9190611971565b92915050565b815160009081906001600160701b03161580611027575060208401516001600160701b0316155b15611037575060009050806110c8565b6008546000611048826127106118e0565b865161105d91906001600160701b0316611971565b9050600061106d836127106118c8565b87602001516001600160701b03166110859190611971565b9050600061109382846118c8565b9050806110a08489611971565b6110aa919061194f565b9550806110b78389611971565b6110c1919061194f565b9450505050505b9250929050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008061112e84600454611000565b9150915061113b82611276565b600061114f828564ffffffffff1643611393565b90507faee7b00ca0359ab0727fb54b350e15a1ed46fb12dc0d04ca9bb5f4e7c313249a8160405161118291815260200190565b60405180910390a15050505050565b60035464ffffffffff600160c81b909104811690821681106111b357816111b5565b805b600360146101000a81548164ffffffffff021916908364ffffffffff1602179055505050565b60405180606001604052806111ee610819565b6001600160701b031681526020016112046105e6565b6001600160701b03908116825263ffffffff43811660209384015260009485526009835260409485902084518154948601519590960151909116600160e01b026001600160e01b03948316600160701b026001600160e01b031990941695909216949094179190911791909116179055565b600654604080516322b8e72b60e21b8152905183926001600160a01b031691638ae39cac9160048083019260209291908290030181865afa1580156112bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e39190611892565b141561134d57600660009054906101000a90046001600160a01b03166001600160a01b0316636f4a2cd06040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561133957600080fd5b505af1158015610eeb573d6000803e3d6000fd5b600654604051635dc395a560e11b8152600481018390526001600160a01b039091169063bb872b4a90602401600060405180830381600087803b15801561133957600080fd5b6000806113bb8484600360199054906101000a900464ffffffffff1664ffffffffff1661147a565b9050806113cc576000915050611473565b60006113d88287611971565b9050801561146f576002546001546113fe916001600160a01b03918216911630846114c1565b60035460405163f59dfdfb60e01b8152600481018390526001600160a01b039091169063f59dfdfb906024016020604051808303816000875af1158015611449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146d9190611932565b505b9150505b9392505050565b6000818410158061148a57508284115b1561149757506000611473565b8183116114af576114a884846118e0565b9050611473565b6114b984836118e0565b949350505050565b6000846001600160a01b03163b116115075760405162461bcd60e51b81526020600482015260096024820152680858dbdb9d1c9858dd60ba1b6044820152606401610463565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161156b91906118f7565b6000604051808303816000865af19150503d80600081146115a8576040519150601f19603f3d011682016040523d82523d6000602084013e6115ad565b606091505b50915091508180156115d75750805115806115d75750808060200190518101906115d79190611932565b6116175760405162461bcd60e51b815260206004820152601160248201527021736166655472616e7366657246726f6d60781b6044820152606401610463565b505050505050565b6001600160a01b0381168114610d9f57600080fd5b60006020828403121561164657600080fd5b81356114738161161f565b8015158114610d9f57600080fd5b60008060006040848603121561167457600080fd5b833567ffffffffffffffff8082111561168c57600080fd5b818601915086601f8301126116a057600080fd5b8135818111156116af57600080fd5b8760208260051b85010111156116c457600080fd5b602092830195509350508401356116da81611651565b809150509250925092565b6000602082840312156116f757600080fd5b5035919050565b80356001600160701b038116811461171557600080fd5b919050565b600080828403608081121561172e57600080fd5b833592506060601f198201121561174457600080fd5b506040516060810181811067ffffffffffffffff8211171561177657634e487b7160e01b600052604160045260246000fd5b604052611785602085016116fe565b8152611793604085016116fe565b6020820152606084013563ffffffff811681146117af57600080fd5b6040820152919491935090915050565b600080604083850312156117d257600080fd5b8235915060208301356117e481611651565b809150509250929050565b60006020828403121561180157600080fd5b813564ffffffffff8116811461147357600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561188b5761188b611861565b5060010190565b6000602082840312156118a457600080fd5b5051919050565b6000602082840312156118bd57600080fd5b81516114738161161f565b600082198211156118db576118db611861565b500190565b6000828210156118f2576118f2611861565b500390565b6000825160005b8181101561191857602081860181015185830152016118fe565b81811115611927576000828501525b509190910192915050565b60006020828403121561194457600080fd5b815161147381611651565b60008261196c57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561198b5761198b611861565b50029056fea2646970667358221220ca307db0e7b75caac1eee5e22f686a0502399c18d5b9d14f54181f7b1dc7a09d64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c747f9d3e6b34596977e79f09a2ab122042673e100000000000000000000000061030d2d0106ee3b1251642b098f3da2b781b55600000000000000000000000026034cc54f92ca04400d84bc1b9e09a1d8ba8a11000000000000000000000000e86fb860e8fcc93e05db3d4386d4e20bc9e9f0570000000000000000000000000000000000000000000000002f86d3e1fe21dcee0000000000000000000000000000000000000000000000000000000000fc3b1800000000000000000000000000000000000000000000000000000000012225c0
-----Decoded View---------------
Arg [0] : _stakingPool (address): 0xc747F9D3E6B34596977e79F09a2aB122042673E1
Arg [1] : _stakingPoolManager (address): 0x61030D2D0106Ee3b1251642b098F3dA2b781B556
Arg [2] : _rewardManager (address): 0x26034cC54f92cA04400D84BC1B9E09A1D8Ba8A11
Arg [3] : _rewardSource (address): 0xe86Fb860e8FcC93E05db3D4386d4E20Bc9E9F057
Arg [4] : _rewardRatePerBlock (uint256): 3424657534246575342
Arg [5] : _lastRewardBlock (uint40): 16530200
Arg [6] : _rewardEndBlock (uint40): 19015104
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000c747f9d3e6b34596977e79f09a2ab122042673e1
Arg [1] : 00000000000000000000000061030d2d0106ee3b1251642b098f3da2b781b556
Arg [2] : 00000000000000000000000026034cc54f92ca04400d84bc1b9e09a1d8ba8a11
Arg [3] : 000000000000000000000000e86fb860e8fcc93e05db3d4386d4e20bc9e9f057
Arg [4] : 0000000000000000000000000000000000000000000000002f86d3e1fe21dcee
Arg [5] : 0000000000000000000000000000000000000000000000000000000000fc3b18
Arg [6] : 00000000000000000000000000000000000000000000000000000000012225c0
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.