Latest 25 from a total of 90 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Process Idle Rew... | 21992306 | 216 days ago | IN | 0 FRAX | 0.00054946 | ||||
| Process Idle Rew... | 21653906 | 223 days ago | IN | 0 FRAX | 0.00021382 | ||||
| Process Idle Rew... | 21603506 | 225 days ago | IN | 0 FRAX | 0.00013637 | ||||
| Process Idle Rew... | 21401906 | 229 days ago | IN | 0 FRAX | 0.0002427 | ||||
| Process Idle Rew... | 21337106 | 231 days ago | IN | 0 FRAX | 0.00068086 | ||||
| Process Idle Rew... | 20242706 | 256 days ago | IN | 0 FRAX | 0.00009732 | ||||
| Process Idle Rew... | 19976306 | 262 days ago | IN | 0 FRAX | 0.00008458 | ||||
| Process Idle Rew... | 19947506 | 263 days ago | IN | 0 FRAX | 0.00008892 | ||||
| Process Idle Rew... | 19666707 | 269 days ago | IN | 0 FRAX | 0.00009298 | ||||
| Process Idle Rew... | 19637906 | 270 days ago | IN | 0 FRAX | 0.00009732 | ||||
| Process Idle Rew... | 19623507 | 270 days ago | IN | 0 FRAX | 0.00009168 | ||||
| Process Idle Rew... | 19393106 | 276 days ago | IN | 0 FRAX | 0.00009756 | ||||
| Process Idle Rew... | 19357106 | 277 days ago | IN | 0 FRAX | 0.00013625 | ||||
| Process Idle Rew... | 19047506 | 284 days ago | IN | 0 FRAX | 0.00016168 | ||||
| Process Idle Rew... | 18989906 | 285 days ago | IN | 0 FRAX | 0.00009735 | ||||
| Process Idle Rew... | 18737906 | 291 days ago | IN | 0 FRAX | 0.00014056 | ||||
| Process Idle Rew... | 18428306 | 298 days ago | IN | 0 FRAX | 0.00016168 | ||||
| Process Idle Rew... | 17715447 | 315 days ago | IN | 0 FRAX | 0.00009302 | ||||
| Process Idle Rew... | 17549847 | 318 days ago | IN | 0 FRAX | 0.00008896 | ||||
| Process Idle Rew... | 17521047 | 319 days ago | IN | 0 FRAX | 0.00020365 | ||||
| Process Idle Rew... | 17240248 | 326 days ago | IN | 0 FRAX | 0.00009304 | ||||
| Process Idle Rew... | 16930646 | 333 days ago | IN | 0 FRAX | 0.00014058 | ||||
| Process Idle Rew... | 16606647 | 340 days ago | IN | 0 FRAX | 0.00009737 | ||||
| Process Idle Rew... | 16498647 | 343 days ago | IN | 0 FRAX | 0.00009593 | ||||
| Process Idle Rew... | 16095446 | 352 days ago | IN | 0 FRAX | 0.00009739 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | ||||
|---|---|---|---|---|---|---|---|
| 21992306 | 216 days ago | 0 FRAX | |||||
| 21653906 | 223 days ago | 0 FRAX | |||||
| 21603506 | 225 days ago | 0 FRAX | |||||
| 21401906 | 229 days ago | 0 FRAX | |||||
| 21337106 | 231 days ago | 0 FRAX | |||||
| 21337106 | 231 days ago | 0 FRAX | |||||
| 20242706 | 256 days ago | 0 FRAX | |||||
| 19976306 | 262 days ago | 0 FRAX | |||||
| 19947506 | 263 days ago | 0 FRAX | |||||
| 19666707 | 269 days ago | 0 FRAX | |||||
| 19637906 | 270 days ago | 0 FRAX | |||||
| 19623507 | 270 days ago | 0 FRAX | |||||
| 19393106 | 276 days ago | 0 FRAX | |||||
| 19357106 | 277 days ago | 0 FRAX | |||||
| 19357106 | 277 days ago | 0 FRAX | |||||
| 19047506 | 284 days ago | 0 FRAX | |||||
| 19047506 | 284 days ago | 0 FRAX | |||||
| 18989906 | 285 days ago | 0 FRAX | |||||
| 18737906 | 291 days ago | 0 FRAX | |||||
| 18737906 | 291 days ago | 0 FRAX | |||||
| 18428306 | 298 days ago | 0 FRAX | |||||
| 18428306 | 298 days ago | 0 FRAX | |||||
| 17715447 | 315 days ago | 0 FRAX | |||||
| 17549847 | 318 days ago | 0 FRAX | |||||
| 17521047 | 319 days ago | 0 FRAX |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BoosterHelper
Compiler Version
v0.8.11+commit.d7f03943
Optimization Enabled:
Yes with 800 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.11;
import { IERC20 } from "@openzeppelin/contracts-0.8/token/ERC20/IERC20.sol";
import { SafeERC20 } from "@openzeppelin/contracts-0.8/token/ERC20/utils/SafeERC20.sol";
import { IBooster } from "../interfaces/IBooster.sol";
import { IRewardStaking } from "../interfaces/IRewardStaking.sol";
interface IBaseRewardPool {
function lastTimeRewardApplicable() external view returns (uint256);
function periodFinish() external view returns (uint256);
function queuedRewards() external view returns (uint256);
function extraRewards(uint256) external view returns (address);
function extraRewardsLength() external view returns (uint256);
}
/**
* @title BoosterHelper
* @author AuraFinance
* @notice Invokes booster.earmarkRewards for multiple pools.
* @dev Allows anyone to call `earmarkRewards` via the booster.
*/
contract BoosterHelper {
using SafeERC20 for IERC20;
struct PoolInfo {
uint256 pid;
address lptoken;
address token;
address gauge;
address crvRewards;
address stash;
bool shutdown;
}
IBooster public immutable booster;
address public immutable crv;
/**
* @param _booster Booster.sol, e.g. 0xF403C135812408BFbE8713b5A23a04b3D48AAE31
* @param _crv Crv e.g. 0xba100000625a3754423978a60c9317c58a424e3D
*/
constructor(address _booster, address _crv) {
booster = IBooster(_booster);
crv = _crv;
}
/**
* @notice Invoke earmarkRewards for each pool id.
* @param _pids Array of pool ids
* @return amount of crv received as incentive
*/
function earmarkRewards(uint256[] memory _pids) external returns (uint256) {
uint256 len = _pids.length;
require(len > 0, "!pids");
for (uint256 i = 0; i < len; i++) {
require(booster.earmarkRewards(_pids[i]), "!earmark reward");
}
// Return all incentives to the sender
uint256 crvBal = IERC20(crv).balanceOf(address(this));
IERC20(crv).safeTransfer(msg.sender, crvBal);
return crvBal;
}
/**
* @notice Invoke processIdleRewards for each pool id.
* @param _pids Array of pool ids
*/
function processIdleRewards(uint256[] memory _pids) external {
uint256 len = _pids.length;
require(len > 0, "!pids");
for (uint256 i = 0; i < len; i++) {
IBooster.PoolInfo memory poolInfo = booster.poolInfo(_pids[i]);
IRewardStaking baseRewardPool = IRewardStaking(poolInfo.crvRewards);
baseRewardPool.processIdleRewards();
}
}
/**
* @notice Invoke processIdleRewards for each pool address.
* It is useful to process base pools and virtual pools.
* @param _pools Array of pool addresses
*/
function processIdleRewardsByAddress(address[] memory _pools) external {
uint256 len = _pools.length;
require(len > 0, "!pools");
for (uint256 i = 0; i < len; i++) {
IRewardStaking baseRewardPool = IRewardStaking(_pools[i]);
baseRewardPool.processIdleRewards();
}
}
// ----------------------------------------------------------------
// External Views
// ----------------------------------------------------------------
/**
* @dev Loop through the booster pools and retrieve expired pools.
* @param start The start pid to look up
* @param daysToExpiration Number of days before period ends to be considred expired.
* @return expired poolIds.
*/
function getExpiredPools(uint256 start, uint256 daysToExpiration) external view returns (PoolInfo[] memory) {
uint256 end = booster.poolLength();
PoolInfo[] memory pids = new PoolInfo[](end - start);
uint256 idx = 0;
for (uint256 i = start; i < end; i++) {
IBooster.PoolInfo memory poolInfo = booster.poolInfo(i);
if (_isExpiredWithoutQueuedRewards(poolInfo, daysToExpiration)) {
pids[idx++] = PoolInfo({
pid: i,
lptoken: poolInfo.lptoken,
token: poolInfo.token,
gauge: poolInfo.gauge,
crvRewards: poolInfo.crvRewards,
stash: poolInfo.stash,
shutdown: poolInfo.shutdown
});
}
}
return _sliceArray(pids, idx);
}
/**
* @dev Loop through the booster pools and retrieve the expired pools with idle rewards.
* @param start The start pid
* @return idle poolIds.
*/
function getIdlePoolIds(uint256 start) external view returns (uint256[] memory) {
uint256 end = booster.poolLength();
uint256[] memory pids = new uint256[](end - start);
uint256 idx = 0;
for (uint256 i = start; i < end; i++) {
if (_isExpiredWithQueuedRewards(i)) {
pids[idx++] = i;
}
}
return _sliceArray(pids, idx);
}
/**
* @dev Loop through the booster pools (base and virtual) and retrieve the expired ones with idle rewards.
* @param start The start pid
* @return idle pool addresses.
*/
function getIdleBaseAndVirtualPools(uint256 start) external view returns (address[] memory) {
uint256 end = booster.poolLength();
// Create array with extra room for virtual pools
address[] memory idlePools = new address[]((end - start) * 2);
uint256 idx = 0;
for (uint256 i = start; i < end; i++) {
IBooster.PoolInfo memory poolInfo = booster.poolInfo(i);
address[] memory virtualRewardPools = _getVirtualRewardPools(poolInfo.crvRewards);
uint256 virtualRewardPoolsLength = virtualRewardPools.length;
for (uint256 j = 0; j < virtualRewardPoolsLength; j++) {
address virtualRewardPool = virtualRewardPools[j];
if (_isExpiredWithQueuedRewards(virtualRewardPool)) {
idlePools[idx++] = virtualRewardPool;
}
}
// Evaluate base reward pools
if (_isExpiredWithQueuedRewards(poolInfo.crvRewards)) {
idlePools[idx++] = poolInfo.crvRewards;
}
}
return _sliceArray(idlePools, idx);
}
// ----------------------------------------------------------------
// Internal
// ----------------------------------------------------------------
/// @dev evaluates if a given pool (by pid) is expired or about to expired if daysToExpiration > 0
function _isExpiredWithoutQueuedRewards(IBooster.PoolInfo memory poolInfo, uint256 daysToExpiration)
internal
view
returns (bool)
{
// Ignore shutdown pools early
if (poolInfo.shutdown) return false;
IBaseRewardPool baseRewardPool = IBaseRewardPool(poolInfo.crvRewards);
if (baseRewardPool.queuedRewards() > 0) return false;
// If it is expired return the value
uint256 periodFinish = baseRewardPool.periodFinish();
if (block.timestamp > periodFinish) return true;
//If it is not expired yet, evaluate if it is about to expire
uint256 lastTimeRewardApplicable = baseRewardPool.lastTimeRewardApplicable();
uint256 daysToNextEarmark = (periodFinish - lastTimeRewardApplicable) / 86400;
return daysToNextEarmark <= daysToExpiration;
}
/// @dev evaluates if a given pool (by pid) is expired with queued rewards.
function _isExpiredWithQueuedRewards(uint256 pid) internal view returns (bool) {
IBooster.PoolInfo memory poolInfo = booster.poolInfo(pid);
// Ignore shutdown pools early
if (poolInfo.shutdown) return false;
return _isExpiredWithQueuedRewards(poolInfo.crvRewards);
}
/// @dev evaluates if a given pool (by address) is expired with queued rewards.
function _isExpiredWithQueuedRewards(address crvRewards) internal view returns (bool) {
IBaseRewardPool baseRewardPool = IBaseRewardPool(crvRewards);
if (baseRewardPool.queuedRewards() == 0) return false;
return (block.timestamp > baseRewardPool.periodFinish());
}
/// @dev gets all virtual pools linked to a base reward pool.
function _getVirtualRewardPools(address crvRewards) internal view returns (address[] memory) {
IBaseRewardPool baseRewardPool = IBaseRewardPool(crvRewards);
uint256 extraRewardsLength = baseRewardPool.extraRewardsLength();
address[] memory virtualBalanceRewardPools = new address[](extraRewardsLength);
for (uint256 i = 0; i < extraRewardsLength; i++) {
virtualBalanceRewardPools[i] = baseRewardPool.extraRewards(i);
}
return virtualBalanceRewardPools;
}
function _sliceArray(PoolInfo[] memory _arr, uint256 length) internal pure returns (PoolInfo[] memory) {
PoolInfo[] memory arr = new PoolInfo[](length);
for (uint256 i = 0; i < length; i++) {
arr[i] = _arr[i];
}
return arr;
}
function _sliceArray(uint256[] memory _arr, uint256 length) internal pure returns (uint256[] memory) {
uint256[] memory arr = new uint256[](length);
for (uint256 i = 0; i < length; i++) {
arr[i] = _arr[i];
}
return arr;
}
function _sliceArray(address[] memory _arr, uint256 length) internal pure returns (address[] memory) {
address[] memory arr = new address[](length);
for (uint256 i = 0; i < length; i++) {
arr[i] = _arr[i];
}
return arr;
}
}// 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 (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
import "../../../utils/Address.sol";
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
// Return data is optional
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.11;
interface IBooster {
struct FeeDistro {
address distro;
address rewards;
bool active;
}
function feeTokens(address _token) external returns (FeeDistro memory);
function earmarkFees(address _feeToken) external returns (bool);
struct PoolInfo {
address lptoken;
address token;
address gauge;
address crvRewards;
address stash;
bool shutdown;
}
function earmarkRewards(uint256 _pid) external returns (bool);
function poolLength() external view returns (uint256);
function lockRewards() external view returns (address);
function poolInfo(uint256 _pid) external view returns (PoolInfo memory poolInfo);
function distributeL2Fees(uint256 _amount) external;
function lockIncentive() external view returns (uint256);
function stakerIncentive() external view returns (uint256);
function earmarkIncentive() external view returns (uint256);
function platformFee() external view returns (uint256);
function FEE_DENOMINATOR() external view returns (uint256);
function voteGaugeWeight(address[] calldata _gauge, uint256[] calldata _weight) external returns (bool);
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.11;
interface IRewardStaking {
function getReward(address _account, bool _claimExtras) external;
function getReward(address _account) external;
function getReward(address _account, address _token) external;
function stakeFor(address, uint256) external;
function processIdleRewards() external;
}{
"metadata": {
"bytecodeHash": "none"
},
"optimizer": {
"enabled": true,
"runs": 800
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_booster","type":"address"},{"internalType":"address","name":"_crv","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"booster","outputs":[{"internalType":"contract IBooster","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"crv","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_pids","type":"uint256[]"}],"name":"earmarkRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"daysToExpiration","type":"uint256"}],"name":"getExpiredPools","outputs":[{"components":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"lptoken","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"gauge","type":"address"},{"internalType":"address","name":"crvRewards","type":"address"},{"internalType":"address","name":"stash","type":"address"},{"internalType":"bool","name":"shutdown","type":"bool"}],"internalType":"struct BoosterHelper.PoolInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"}],"name":"getIdleBaseAndVirtualPools","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"}],"name":"getIdlePoolIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_pids","type":"uint256[]"}],"name":"processIdleRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pools","type":"address[]"}],"name":"processIdleRewardsByAddress","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c06040523480156200001157600080fd5b5060405162001c3938038062001c39833981016040819052620000349162000069565b6001600160a01b039182166080521660a052620000a1565b80516001600160a01b03811681146200006457600080fd5b919050565b600080604083850312156200007d57600080fd5b62000088836200004c565b915062000098602084016200004c565b90509250929050565b60805160a051611b2d6200010c6000396000818160ef0152818161092201526109a401526000818161014101528181610293015281816103d60152818161050b015281816106a301528181610803015281816109d801528181610ada0152610c860152611b2d6000f3fe608060405234801561001057600080fd5b50600436106100875760003560e01c80636f9a7fe01161005b5780636f9a7fe014610129578063c6def0761461013c578063ecb1c09214610163578063f27596791461018457600080fd5b8062b46b401461008c57806332031bb2146100a157806364a61d62146100ca5780636a4874a1146100ea575b600080fd5b61009f61009a366004611681565b6101a4565b005b6100b46100af366004611715565b61028d565b6040516100c1919061172e565b60405180910390f35b6100dd6100d8366004611772565b6103d0565b6040516100c19190611794565b6101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c1565b61009f61013736600461182c565b61065d565b6101117f000000000000000000000000000000000000000000000000000000000000000081565b61017661017136600461182c565b6107bc565b6040519081526020016100c1565b610197610192366004611715565b6109d2565b6040516100c191906118b2565b8051806101f85760405162461bcd60e51b815260206004820152600660248201527f21706f6f6c73000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60005b81811015610288576000838281518110610217576102176118f3565b60200260200101519050806001600160a01b0316633e8b83e36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561025c57600080fd5b505af1158015610270573d6000803e3d6000fd5b505050505080806102809061191f565b9150506101fb565b505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663081e3eda6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610313919061193a565b905060006103218483611953565b67ffffffffffffffff811115610339576103396115fe565b604051908082528060200260200182016040528015610362578160200160208202803683370190505b5090506000845b838110156103bc5761037a81610c63565b156103aa5780838361038b8161191f565b94508151811061039d5761039d6118f3565b6020026020010181815250505b806103b48161191f565b915050610369565b506103c78282610d13565b95945050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663081e3eda6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610432573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610456919061193a565b905060006104648583611953565b67ffffffffffffffff81111561047c5761047c6115fe565b6040519080825280602002602001820160405280156104e357816020015b6040805160e08101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820152825260001990920191018161049a5790505b5090506000855b8381101561064657604051631526fe2760e01b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631526fe279060240160c060405180830381865afa15801561055a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057e919061197f565b905061058a8188610db8565b15610633576040518060e0016040528083815260200182600001516001600160a01b0316815260200182602001516001600160a01b0316815260200182604001516001600160a01b0316815260200182606001516001600160a01b0316815260200182608001516001600160a01b031681526020018260a0015115158152508484806106159061191f565b955081518110610627576106276118f3565b60200260200101819052505b508061063e8161191f565b9150506104ea565b506106518282610f50565b93505050505b92915050565b8051806106945760405162461bcd60e51b8152602060048201526005602482015264217069647360d81b60448201526064016101ef565b60005b818110156102885760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631526fe278584815181106106e2576106e26118f3565b60200260200101516040518263ffffffff1660e01b815260040161070891815260200190565b60c060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610749919061197f565b9050600081606001519050806001600160a01b0316633e8b83e36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561078f57600080fd5b505af11580156107a3573d6000803e3d6000fd5b50505050505080806107b49061191f565b915050610697565b8051600090806107f65760405162461bcd60e51b8152602060048201526005602482015264217069647360d81b60448201526064016101ef565b60005b81811015610909577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cc956f3f858381518110610842576108426118f3565b60200260200101516040518263ffffffff1660e01b815260040161086891815260200190565b6020604051808303816000875af1158015610887573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ab9190611a28565b6108f75760405162461bcd60e51b815260206004820152600f60248201527f216561726d61726b20726577617264000000000000000000000000000000000060448201526064016101ef565b806109018161191f565b9150506107f9565b506040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610971573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610995919061193a565b90506109cb6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361102c565b9392505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663081e3eda6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a58919061193a565b90506000610a668483611953565b610a71906002611a43565b67ffffffffffffffff811115610a8957610a896115fe565b604051908082528060200260200182016040528015610ab2578160200160208202803683370190505b5090506000845b83811015610c5857604051631526fe2760e01b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631526fe279060240160c060405180830381865afa158015610b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4d919061197f565b90506000610b5e8260600151611093565b805190915060005b81811015610bec576000838281518110610b8257610b826118f3565b60200260200101519050610b9581611200565b15610bd957808888610ba68161191f565b995081518110610bb857610bb86118f3565b60200260200101906001600160a01b031690816001600160a01b0316815250505b5080610be48161191f565b915050610b66565b50610bfa8360600151611200565b15610c425760608301518686610c0f8161191f565b975081518110610c2157610c216118f3565b60200260200101906001600160a01b031690816001600160a01b0316815250505b5050508080610c509061191f565b915050610ab9565b506103c782826112e0565b604051631526fe2760e01b81526004810182905260009081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631526fe279060240160c060405180830381865afa158015610ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf1919061197f565b90508060a0015115610d065750600092915050565b6109cb8160600151611200565b606060008267ffffffffffffffff811115610d3057610d306115fe565b604051908082528060200260200182016040528015610d59578160200160208202803683370190505b50905060005b83811015610db057848181518110610d7957610d796118f3565b6020026020010151828281518110610d9357610d936118f3565b602090810291909101015280610da88161191f565b915050610d5f565b509392505050565b60008260a0015115610dcc57506000610657565b6000836060015190506000816001600160a01b03166363d38c3b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e39919061193a565b1115610e49576000915050610657565b6000816001600160a01b031663ebe2b12b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ead919061193a565b905080421115610ec257600192505050610657565b6000826001600160a01b03166380faa57d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f26919061193a565b9050600062015180610f388385611953565b610f429190611a62565b909510159695505050505050565b606060008267ffffffffffffffff811115610f6d57610f6d6115fe565b604051908082528060200260200182016040528015610fd457816020015b6040805160e08101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c08201528252600019909201910181610f8b5790505b50905060005b83811015610db057848181518110610ff457610ff46118f3565b602002602001015182828151811061100e5761100e6118f3565b602002602001018190525080806110249061191f565b915050610fda565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b17905261028890849061138a565b606060008290506000816001600160a01b031663d55a23f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fe919061193a565b905060008167ffffffffffffffff81111561111b5761111b6115fe565b604051908082528060200260200182016040528015611144578160200160208202803683370190505b50905060005b828110156111f757604051632061aa2360e11b8152600481018290526001600160a01b038516906340c3544690602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb9190611a84565b8282815181106111cd576111cd6118f3565b6001600160a01b0390921660209283029190910190910152806111ef8161191f565b91505061114a565b50949350505050565b600080829050806001600160a01b03166363d38c3b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611244573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611268919061193a565b6112755750600092915050565b806001600160a01b031663ebe2b12b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d7919061193a565b42119392505050565b606060008267ffffffffffffffff8111156112fd576112fd6115fe565b604051908082528060200260200182016040528015611326578160200160208202803683370190505b50905060005b83811015610db057848181518110611346576113466118f3565b6020026020010151828281518110611360576113606118f3565b6001600160a01b0390921660209283029190910190910152806113828161191f565b91505061132c565b60006113df826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661146f9092919063ffffffff16565b80519091501561028857808060200190518101906113fd9190611a28565b6102885760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101ef565b606061147e8484600085611486565b949350505050565b6060824710156114fe5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101ef565b843b61154c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ef565b600080866001600160a01b031685876040516115689190611ad1565b60006040518083038185875af1925050503d80600081146115a5576040519150601f19603f3d011682016040523d82523d6000602084013e6115aa565b606091505b50915091506115ba8282866115c5565b979650505050505050565b606083156115d45750816109cb565b8251156115e45782518084602001fd5b8160405162461bcd60e51b81526004016101ef9190611aed565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561163d5761163d6115fe565b604052919050565b600067ffffffffffffffff82111561165f5761165f6115fe565b5060051b60200190565b6001600160a01b038116811461167e57600080fd5b50565b6000602080838503121561169457600080fd5b823567ffffffffffffffff8111156116ab57600080fd5b8301601f810185136116bc57600080fd5b80356116cf6116ca82611645565b611614565b81815260059190911b820183019083810190878311156116ee57600080fd5b928401925b828410156115ba57833561170681611669565b825292840192908401906116f3565b60006020828403121561172757600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156117665783518352928401929184019160010161174a565b50909695505050505050565b6000806040838503121561178557600080fd5b50508035926020909101359150565b602080825282518282018190526000919060409081850190868401855b8281101561181f57815180518552868101516001600160a01b03908116888701528682015181168787015260608083015182169087015260808083015182169087015260a0808301519091169086015260c09081015115159085015260e090930192908501906001016117b1565b5091979650505050505050565b6000602080838503121561183f57600080fd5b823567ffffffffffffffff81111561185657600080fd5b8301601f8101851361186757600080fd5b80356118756116ca82611645565b81815260059190911b8201830190838101908783111561189457600080fd5b928401925b828410156115ba57833582529284019290840190611899565b6020808252825182820181905260009190848201906040850190845b818110156117665783516001600160a01b0316835292840192918401916001016118ce565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561193357611933611909565b5060010190565b60006020828403121561194c57600080fd5b5051919050565b60008282101561196557611965611909565b500390565b8051801515811461197a57600080fd5b919050565b600060c0828403121561199157600080fd5b60405160c0810181811067ffffffffffffffff821117156119b4576119b46115fe565b60405282516119c281611669565b815260208301516119d281611669565b602082015260408301516119e581611669565b604082015260608301516119f881611669565b60608201526080830151611a0b81611669565b6080820152611a1c60a0840161196a565b60a08201529392505050565b600060208284031215611a3a57600080fd5b6109cb8261196a565b6000816000190483118215151615611a5d57611a5d611909565b500290565b600082611a7f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611a9657600080fd5b81516109cb81611669565b60005b83811015611abc578181015183820152602001611aa4565b83811115611acb576000848401525b50505050565b60008251611ae3818460208701611aa1565b9190910192915050565b6020815260008251806020840152611b0c816040850160208701611aa1565b601f01601f1916919091016040019291505056fea164736f6c634300080b000a00000000000000000000000098ef32edd24e2c92525e59afc4475c1242a301840000000000000000000000002fc7447f6cf71f9aa9e7ff8814b37e55b268ec91
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100875760003560e01c80636f9a7fe01161005b5780636f9a7fe014610129578063c6def0761461013c578063ecb1c09214610163578063f27596791461018457600080fd5b8062b46b401461008c57806332031bb2146100a157806364a61d62146100ca5780636a4874a1146100ea575b600080fd5b61009f61009a366004611681565b6101a4565b005b6100b46100af366004611715565b61028d565b6040516100c1919061172e565b60405180910390f35b6100dd6100d8366004611772565b6103d0565b6040516100c19190611794565b6101117f0000000000000000000000002fc7447f6cf71f9aa9e7ff8814b37e55b268ec9181565b6040516001600160a01b0390911681526020016100c1565b61009f61013736600461182c565b61065d565b6101117f00000000000000000000000098ef32edd24e2c92525e59afc4475c1242a3018481565b61017661017136600461182c565b6107bc565b6040519081526020016100c1565b610197610192366004611715565b6109d2565b6040516100c191906118b2565b8051806101f85760405162461bcd60e51b815260206004820152600660248201527f21706f6f6c73000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60005b81811015610288576000838281518110610217576102176118f3565b60200260200101519050806001600160a01b0316633e8b83e36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561025c57600080fd5b505af1158015610270573d6000803e3d6000fd5b505050505080806102809061191f565b9150506101fb565b505050565b606060007f00000000000000000000000098ef32edd24e2c92525e59afc4475c1242a301846001600160a01b031663081e3eda6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610313919061193a565b905060006103218483611953565b67ffffffffffffffff811115610339576103396115fe565b604051908082528060200260200182016040528015610362578160200160208202803683370190505b5090506000845b838110156103bc5761037a81610c63565b156103aa5780838361038b8161191f565b94508151811061039d5761039d6118f3565b6020026020010181815250505b806103b48161191f565b915050610369565b506103c78282610d13565b95945050505050565b606060007f00000000000000000000000098ef32edd24e2c92525e59afc4475c1242a301846001600160a01b031663081e3eda6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610432573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610456919061193a565b905060006104648583611953565b67ffffffffffffffff81111561047c5761047c6115fe565b6040519080825280602002602001820160405280156104e357816020015b6040805160e08101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820152825260001990920191018161049a5790505b5090506000855b8381101561064657604051631526fe2760e01b8152600481018290526000907f00000000000000000000000098ef32edd24e2c92525e59afc4475c1242a301846001600160a01b031690631526fe279060240160c060405180830381865afa15801561055a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057e919061197f565b905061058a8188610db8565b15610633576040518060e0016040528083815260200182600001516001600160a01b0316815260200182602001516001600160a01b0316815260200182604001516001600160a01b0316815260200182606001516001600160a01b0316815260200182608001516001600160a01b031681526020018260a0015115158152508484806106159061191f565b955081518110610627576106276118f3565b60200260200101819052505b508061063e8161191f565b9150506104ea565b506106518282610f50565b93505050505b92915050565b8051806106945760405162461bcd60e51b8152602060048201526005602482015264217069647360d81b60448201526064016101ef565b60005b818110156102885760007f00000000000000000000000098ef32edd24e2c92525e59afc4475c1242a301846001600160a01b0316631526fe278584815181106106e2576106e26118f3565b60200260200101516040518263ffffffff1660e01b815260040161070891815260200190565b60c060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610749919061197f565b9050600081606001519050806001600160a01b0316633e8b83e36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561078f57600080fd5b505af11580156107a3573d6000803e3d6000fd5b50505050505080806107b49061191f565b915050610697565b8051600090806107f65760405162461bcd60e51b8152602060048201526005602482015264217069647360d81b60448201526064016101ef565b60005b81811015610909577f00000000000000000000000098ef32edd24e2c92525e59afc4475c1242a301846001600160a01b031663cc956f3f858381518110610842576108426118f3565b60200260200101516040518263ffffffff1660e01b815260040161086891815260200190565b6020604051808303816000875af1158015610887573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ab9190611a28565b6108f75760405162461bcd60e51b815260206004820152600f60248201527f216561726d61726b20726577617264000000000000000000000000000000000060448201526064016101ef565b806109018161191f565b9150506107f9565b506040516370a0823160e01b81523060048201526000907f0000000000000000000000002fc7447f6cf71f9aa9e7ff8814b37e55b268ec916001600160a01b0316906370a0823190602401602060405180830381865afa158015610971573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610995919061193a565b90506109cb6001600160a01b037f0000000000000000000000002fc7447f6cf71f9aa9e7ff8814b37e55b268ec9116338361102c565b9392505050565b606060007f00000000000000000000000098ef32edd24e2c92525e59afc4475c1242a301846001600160a01b031663081e3eda6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a58919061193a565b90506000610a668483611953565b610a71906002611a43565b67ffffffffffffffff811115610a8957610a896115fe565b604051908082528060200260200182016040528015610ab2578160200160208202803683370190505b5090506000845b83811015610c5857604051631526fe2760e01b8152600481018290526000907f00000000000000000000000098ef32edd24e2c92525e59afc4475c1242a301846001600160a01b031690631526fe279060240160c060405180830381865afa158015610b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4d919061197f565b90506000610b5e8260600151611093565b805190915060005b81811015610bec576000838281518110610b8257610b826118f3565b60200260200101519050610b9581611200565b15610bd957808888610ba68161191f565b995081518110610bb857610bb86118f3565b60200260200101906001600160a01b031690816001600160a01b0316815250505b5080610be48161191f565b915050610b66565b50610bfa8360600151611200565b15610c425760608301518686610c0f8161191f565b975081518110610c2157610c216118f3565b60200260200101906001600160a01b031690816001600160a01b0316815250505b5050508080610c509061191f565b915050610ab9565b506103c782826112e0565b604051631526fe2760e01b81526004810182905260009081906001600160a01b037f00000000000000000000000098ef32edd24e2c92525e59afc4475c1242a301841690631526fe279060240160c060405180830381865afa158015610ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf1919061197f565b90508060a0015115610d065750600092915050565b6109cb8160600151611200565b606060008267ffffffffffffffff811115610d3057610d306115fe565b604051908082528060200260200182016040528015610d59578160200160208202803683370190505b50905060005b83811015610db057848181518110610d7957610d796118f3565b6020026020010151828281518110610d9357610d936118f3565b602090810291909101015280610da88161191f565b915050610d5f565b509392505050565b60008260a0015115610dcc57506000610657565b6000836060015190506000816001600160a01b03166363d38c3b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e39919061193a565b1115610e49576000915050610657565b6000816001600160a01b031663ebe2b12b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ead919061193a565b905080421115610ec257600192505050610657565b6000826001600160a01b03166380faa57d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f26919061193a565b9050600062015180610f388385611953565b610f429190611a62565b909510159695505050505050565b606060008267ffffffffffffffff811115610f6d57610f6d6115fe565b604051908082528060200260200182016040528015610fd457816020015b6040805160e08101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c08201528252600019909201910181610f8b5790505b50905060005b83811015610db057848181518110610ff457610ff46118f3565b602002602001015182828151811061100e5761100e6118f3565b602002602001018190525080806110249061191f565b915050610fda565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b17905261028890849061138a565b606060008290506000816001600160a01b031663d55a23f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fe919061193a565b905060008167ffffffffffffffff81111561111b5761111b6115fe565b604051908082528060200260200182016040528015611144578160200160208202803683370190505b50905060005b828110156111f757604051632061aa2360e11b8152600481018290526001600160a01b038516906340c3544690602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb9190611a84565b8282815181106111cd576111cd6118f3565b6001600160a01b0390921660209283029190910190910152806111ef8161191f565b91505061114a565b50949350505050565b600080829050806001600160a01b03166363d38c3b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611244573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611268919061193a565b6112755750600092915050565b806001600160a01b031663ebe2b12b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d7919061193a565b42119392505050565b606060008267ffffffffffffffff8111156112fd576112fd6115fe565b604051908082528060200260200182016040528015611326578160200160208202803683370190505b50905060005b83811015610db057848181518110611346576113466118f3565b6020026020010151828281518110611360576113606118f3565b6001600160a01b0390921660209283029190910190910152806113828161191f565b91505061132c565b60006113df826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661146f9092919063ffffffff16565b80519091501561028857808060200190518101906113fd9190611a28565b6102885760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101ef565b606061147e8484600085611486565b949350505050565b6060824710156114fe5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101ef565b843b61154c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ef565b600080866001600160a01b031685876040516115689190611ad1565b60006040518083038185875af1925050503d80600081146115a5576040519150601f19603f3d011682016040523d82523d6000602084013e6115aa565b606091505b50915091506115ba8282866115c5565b979650505050505050565b606083156115d45750816109cb565b8251156115e45782518084602001fd5b8160405162461bcd60e51b81526004016101ef9190611aed565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561163d5761163d6115fe565b604052919050565b600067ffffffffffffffff82111561165f5761165f6115fe565b5060051b60200190565b6001600160a01b038116811461167e57600080fd5b50565b6000602080838503121561169457600080fd5b823567ffffffffffffffff8111156116ab57600080fd5b8301601f810185136116bc57600080fd5b80356116cf6116ca82611645565b611614565b81815260059190911b820183019083810190878311156116ee57600080fd5b928401925b828410156115ba57833561170681611669565b825292840192908401906116f3565b60006020828403121561172757600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156117665783518352928401929184019160010161174a565b50909695505050505050565b6000806040838503121561178557600080fd5b50508035926020909101359150565b602080825282518282018190526000919060409081850190868401855b8281101561181f57815180518552868101516001600160a01b03908116888701528682015181168787015260608083015182169087015260808083015182169087015260a0808301519091169086015260c09081015115159085015260e090930192908501906001016117b1565b5091979650505050505050565b6000602080838503121561183f57600080fd5b823567ffffffffffffffff81111561185657600080fd5b8301601f8101851361186757600080fd5b80356118756116ca82611645565b81815260059190911b8201830190838101908783111561189457600080fd5b928401925b828410156115ba57833582529284019290840190611899565b6020808252825182820181905260009190848201906040850190845b818110156117665783516001600160a01b0316835292840192918401916001016118ce565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561193357611933611909565b5060010190565b60006020828403121561194c57600080fd5b5051919050565b60008282101561196557611965611909565b500390565b8051801515811461197a57600080fd5b919050565b600060c0828403121561199157600080fd5b60405160c0810181811067ffffffffffffffff821117156119b4576119b46115fe565b60405282516119c281611669565b815260208301516119d281611669565b602082015260408301516119e581611669565b604082015260608301516119f881611669565b60608201526080830151611a0b81611669565b6080820152611a1c60a0840161196a565b60a08201529392505050565b600060208284031215611a3a57600080fd5b6109cb8261196a565b6000816000190483118215151615611a5d57611a5d611909565b500290565b600082611a7f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611a9657600080fd5b81516109cb81611669565b60005b83811015611abc578181015183820152602001611aa4565b83811115611acb576000848401525b50505050565b60008251611ae3818460208701611aa1565b9190910192915050565b6020815260008251806020840152611b0c816040850160208701611aa1565b601f01601f1916919091016040019291505056fea164736f6c634300080b000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000098ef32edd24e2c92525e59afc4475c1242a301840000000000000000000000002fc7447f6cf71f9aa9e7ff8814b37e55b268ec91
-----Decoded View---------------
Arg [0] : _booster (address): 0x98Ef32edd24e2c92525E59afc4475C1242a30184
Arg [1] : _crv (address): 0x2FC7447F6cF71f9aa9E7FF8814B37E55b268Ec91
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000098ef32edd24e2c92525e59afc4475c1242a30184
Arg [1] : 0000000000000000000000002fc7447f6cf71f9aa9e7ff8814b37e55b268ec91
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in FRAX
0
Multichain Portfolio | 35 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.