Source Code
Overview
GLMR Balance
GLMR Value
$0.00View more zero value Internal Transactions in Advanced View mode
Cross-Chain Transactions
Loading...
Loading
Contract Name:
RewarderBeacon
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/proxy/beacon/IBeacon.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "../interfaces/IRewardRegistry.sol";
/**
* @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their
* implementation contract, which is where they will delegate all function calls.
*
* An ROLE_BEACON_MANAGER is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.
*/
contract RewarderBeacon is IBeacon {
address public REWARD_REGISTRY;
// current revision index
uint256 public currentRevision;
// index of newest revision
uint256 public latestRevision;
// array of implementations
address[] public revisionImplementation;
// revision index for specific rewarder (if revision == 0 => current revision used)
mapping(address => uint256) public rewarderRevision;
// index of max revision for rewarder
mapping(address => uint256) public rewarderMaxRevision;
// Beacon manager role
bytes32 internal constant ROLE_BEACON_MANAGER = keccak256("ROLE_BEACON_MANAGER");
/**
* @dev Emitted when new implementation revision added.
*/
event NewRevision(address indexed implementation);
/**
* @dev Emitted when current revision updated.
*/
event NewCurrentRevision(address indexed implementation);
/**
* @dev Emitted when rewarder current revision updated.
*/
event NewRewarderRevision(address indexed rewarder, address indexed implementation);
modifier auth(bytes32 role) {
require(IRewardRegistry(REWARD_REGISTRY).hasRole(role, msg.sender), "REWARDER_BEACON: UNAUTHOROZED");
_;
}
/**
* @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the
* beacon.
*/
constructor(address implementation_, address _rewardRegistry) {
_setImplementation(implementation_);
currentRevision = latestRevision;
REWARD_REGISTRY = _rewardRegistry;
}
/**
* @dev Returns the current implementation address.
*/
function implementation() public view virtual override returns (address) {
if (rewarderRevision[msg.sender] != 0) {
return revisionImplementation[rewarderRevision[msg.sender] - 1];
}
return revisionImplementation[currentRevision - 1];
}
/**
* @dev Set rewarder revision to `_revision`
*/
function setRewarderRevision(address _rewarder, uint256 _revision) external auth(ROLE_BEACON_MANAGER) {
require(
(rewarderRevision[_rewarder] == 0 && _revision > rewarderMaxRevision[_rewarder] && _revision <= latestRevision) ||
(rewarderRevision[_rewarder] > 0 && _revision == 0),
"REWARDER_BEACON: INCORRECT_REVISION"
);
rewarderRevision[_rewarder] = _revision;
if (_revision == 0) {
_revision = currentRevision;
}
else {
rewarderMaxRevision[_rewarder] = _revision;
}
emit NewRewarderRevision(_rewarder, revisionImplementation[_revision - 1]);
}
/**
* @dev Update current revision
*/
function setCurrentRevision(uint256 _newCurrentRevision) external auth(ROLE_BEACON_MANAGER) {
require(_newCurrentRevision > currentRevision && _newCurrentRevision <= latestRevision, "REWARDER_BEACON: INCORRECT_REVISION");
currentRevision = _newCurrentRevision;
emit NewCurrentRevision(revisionImplementation[_newCurrentRevision - 1]);
}
/**
* @dev Add new revision of implementation to beacon.
*
* Emits an {Upgraded} event.
*
* Requirements:
*
* - msg.sender must be the owner of the contract.
* - `newImplementation` must be a contract.
*/
function addImplementation(address newImplementation) public auth(ROLE_BEACON_MANAGER) {
_setImplementation(newImplementation);
emit NewRevision(newImplementation);
}
/**
* @dev Sets the implementation contract address for this beacon
*
* Requirements:
*
* - `newImplementation` must be a contract.
*/
function _setImplementation(address newImplementation) private {
require(Address.isContract(newImplementation), "REWARDER_BEACON: implementation is not a contract");
latestRevision += 1;
revisionImplementation.push(newImplementation);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import "./IRewarder.sol";
interface IRewardRegistry {
// Events
event PoolAdded(address indexed poolAddress, address indexed rewarder);
// Functions
function initialize() external;
function isTrutedUpdater(address _account) external view returns (bool);
function isOperator(address _account) external view returns (bool);
function addPool(address poolAddress, IRewarder rewarder) external;
function pausePool(uint256 poolId) external;
function unpausePool(uint256 poolId) external;
function setPoolRewarder(uint256 poolId, IRewarder rewarder) external;
function setPoolPositionManager(address poolAddress, uint256 positionManagerId, address vaultAddress) external;
function addPositionManager(string memory positionManager) external;
function getPositionManager(uint256 positionManagerId) external view returns (string memory);
function getPoolRewarder(uint256 poolId) external view returns (IRewarder);
function getPoolAddress(uint256 poolId) external view returns (address);
function getPoolId(address poolAddress) external view returns (uint256);
function isPoolPaused(uint256 poolId) external view returns (bool);
function getPoolCount() external view returns (uint256);
function getPositionManagerCount() external view returns (uint256);
function getPoolPMVaultByAddress(address poolAddress, uint256 positionManagerId) external view returns (address);
function getPoolPMVaultById(uint256 poolId, uint256 positionManagerId) external view returns (address);
function hasRole(bytes32 role, address account) external view returns (bool);
function ADMIN_ROLE() external pure returns (bytes32);
function OPERATOR_ROLE() external pure returns (bytes32);
function TRUSTED_UPDATER_ROLE() external pure returns (bytes32);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @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
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 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 functionCallWithValue(target, data, 0, "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");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, 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) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, 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) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or 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 {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// 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
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)
pragma solidity ^0.8.0;
/**
* @dev This is the interface that {BeaconProxy} expects of its beacon.
*/
interface IBeacon {
/**
* @dev Must return an address that can be used as a delegate call target.
*
* {BeaconProxy} will check that this address is a contract.
*/
function implementation() external view returns (address);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
interface IRewarder {
function initialize(address _registry) external;
function addRewardInfo(
IERC20 token,
bool _isNative,
uint32 _startTimestamp,
uint32 _endTimestamp,
uint256 _rewardPerSec
) external payable;
function getRoundedTimestamp(uint32 timestamp) external view returns (uint32);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @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);
/**
* @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 `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, 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 `from` to `to` 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 from,
address to,
uint256 amount
) external returns (bool);
}{
"optimizer": {
"enabled": false,
"runs": 200
},
"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":"implementation_","type":"address"},{"internalType":"address","name":"_rewardRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"NewCurrentRevision","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"NewRevision","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rewarder","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"NewRewarderRevision","type":"event"},{"inputs":[],"name":"REWARD_REGISTRY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"addImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentRevision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRevision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"revisionImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewarderMaxRevision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewarderRevision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCurrentRevision","type":"uint256"}],"name":"setCurrentRevision","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewarder","type":"address"},{"internalType":"uint256","name":"_revision","type":"uint256"}],"name":"setRewarderRevision","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b506040516200139538038062001395833981810160405281019062000037919062000200565b62000048826200009960201b60201c565b600254600181905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000364565b620000af816200017360201b62000a6b1760201c565b620000f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000e890620002ce565b60405180910390fd5b60016002600082825462000106919062000329565b925050819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001c8826200019b565b9050919050565b620001da81620001bb565b8114620001e657600080fd5b50565b600081519050620001fa81620001cf565b92915050565b600080604083850312156200021a576200021962000196565b5b60006200022a85828601620001e9565b92505060206200023d85828601620001e9565b9150509250929050565b600082825260208201905092915050565b7f52455741524445525f424541434f4e3a20696d706c656d656e746174696f6e2060008201527f6973206e6f74206120636f6e7472616374000000000000000000000000000000602082015250565b6000620002b660318362000247565b9150620002c38262000258565b604082019050919050565b60006020820190508181036000830152620002e981620002a7565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200033682620002f0565b91506200034383620002f0565b92508282019050808211156200035e576200035d620002fa565b5b92915050565b61102180620003746000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063ad46d5f311610066578063ad46d5f314610149578063b3830a6714610165578063bcc0073814610183578063c16faebe146101b3578063c6e2a400146101e35761009e565b8063078b97fe146100a35780632e659aa6146100c15780635637c85e146100dd5780635c60da1b146100fb57806362dd5b2c14610119575b600080fd5b6100ab6101ff565b6040516100b89190610b6f565b60405180910390f35b6100db60048036038101906100d69190610c19565b610205565b005b6100e5610575565b6040516100f29190610b6f565b60405180910390f35b61010361057b565b6040516101109190610c68565b60405180910390f35b610133600480360381019061012e9190610c83565b6106a6565b6040516101409190610c68565b60405180910390f35b610163600480360381019061015e9190610c83565b6106e5565b005b61016d6108cb565b60405161017a9190610c68565b60405180910390f35b61019d60048036038101906101989190610cb0565b6108ef565b6040516101aa9190610b6f565b60405180910390f35b6101cd60048036038101906101c89190610cb0565b610907565b6040516101da9190610b6f565b60405180910390f35b6101fd60048036038101906101f89190610cb0565b61091f565b005b60015481565b7f9336eb28e461adb6ba7e620f5006a6952a65a21a4db92c2edb104bf7f1c38c6360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b8152600401610281929190610cf6565b602060405180830381865afa15801561029e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102c29190610d57565b610301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f890610de1565b60405180910390fd5b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414801561038e5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482115b801561039c57506002548211155b806103f257506000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180156103f15750600082145b5b610431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042890610e73565b60405180910390fd5b81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600082036104875760015491506104cc565b81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60036001836104db9190610ec2565b815481106104ec576104eb610ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f92f37cc5bb696741e66686dc609768037ece5f7cc8dcb2f4a811fa8e9f46fac260405160405180910390a3505050565b60025481565b600080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146106545760036001600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106119190610ec2565b8154811061062257610621610ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506106a3565b6003600180546106649190610ec2565b8154811061067557610674610ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b90565b600381815481106106b657600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f9336eb28e461adb6ba7e620f5006a6952a65a21a4db92c2edb104bf7f1c38c6360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b8152600401610761929190610cf6565b602060405180830381865afa15801561077e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a29190610d57565b6107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d890610de1565b60405180910390fd5b600154821180156107f457506002548211155b610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a90610e73565b60405180910390fd5b8160018190555060036001836108499190610ec2565b8154811061085a57610859610ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1a8dd38a3306ba324b59cdd94317161d6d760814796c8e2fbeafa96bf734b0b960405160405180910390a25050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60056020528060005260406000206000915090505481565b60046020528060005260406000206000915090505481565b7f9336eb28e461adb6ba7e620f5006a6952a65a21a4db92c2edb104bf7f1c38c6360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b815260040161099b929190610cf6565b602060405180830381865afa1580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190610d57565b610a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1290610de1565b60405180910390fd5b610a2482610a8e565b8173ffffffffffffffffffffffffffffffffffffffff167f9da3a12664246b3a91b1e92c39d7a591ab70c5c32805d4f5dc580c09a7d3bae360405160405180910390a25050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b610a9781610a6b565b610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd90610f97565b60405180910390fd5b600160026000828254610ae99190610fb7565b925050819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000819050919050565b610b6981610b56565b82525050565b6000602082019050610b846000830184610b60565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610bba82610b8f565b9050919050565b610bca81610baf565b8114610bd557600080fd5b50565b600081359050610be781610bc1565b92915050565b610bf681610b56565b8114610c0157600080fd5b50565b600081359050610c1381610bed565b92915050565b60008060408385031215610c3057610c2f610b8a565b5b6000610c3e85828601610bd8565b9250506020610c4f85828601610c04565b9150509250929050565b610c6281610baf565b82525050565b6000602082019050610c7d6000830184610c59565b92915050565b600060208284031215610c9957610c98610b8a565b5b6000610ca784828501610c04565b91505092915050565b600060208284031215610cc657610cc5610b8a565b5b6000610cd484828501610bd8565b91505092915050565b6000819050919050565b610cf081610cdd565b82525050565b6000604082019050610d0b6000830185610ce7565b610d186020830184610c59565b9392505050565b60008115159050919050565b610d3481610d1f565b8114610d3f57600080fd5b50565b600081519050610d5181610d2b565b92915050565b600060208284031215610d6d57610d6c610b8a565b5b6000610d7b84828501610d42565b91505092915050565b600082825260208201905092915050565b7f52455741524445525f424541434f4e3a20554e415554484f524f5a4544000000600082015250565b6000610dcb601d83610d84565b9150610dd682610d95565b602082019050919050565b60006020820190508181036000830152610dfa81610dbe565b9050919050565b7f52455741524445525f424541434f4e3a20494e434f52524543545f524556495360008201527f494f4e0000000000000000000000000000000000000000000000000000000000602082015250565b6000610e5d602383610d84565b9150610e6882610e01565b604082019050919050565b60006020820190508181036000830152610e8c81610e50565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610ecd82610b56565b9150610ed883610b56565b9250828203905081811115610ef057610eef610e93565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f52455741524445525f424541434f4e3a20696d706c656d656e746174696f6e2060008201527f6973206e6f74206120636f6e7472616374000000000000000000000000000000602082015250565b6000610f81603183610d84565b9150610f8c82610f25565b604082019050919050565b60006020820190508181036000830152610fb081610f74565b9050919050565b6000610fc282610b56565b9150610fcd83610b56565b9250828201905080821115610fe557610fe4610e93565b5b9291505056fea2646970667358221220aaa05642b1dbfcd9b84e30c63f47a516beab137f8c3439c4a0819222810c1f3164736f6c6343000811003300000000000000000000000058a0453948f49f818ca7570990a9deaadc6e14160000000000000000000000000e4caef48de8fec07b7dfeae8d73848aaa8be0cb
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063ad46d5f311610066578063ad46d5f314610149578063b3830a6714610165578063bcc0073814610183578063c16faebe146101b3578063c6e2a400146101e35761009e565b8063078b97fe146100a35780632e659aa6146100c15780635637c85e146100dd5780635c60da1b146100fb57806362dd5b2c14610119575b600080fd5b6100ab6101ff565b6040516100b89190610b6f565b60405180910390f35b6100db60048036038101906100d69190610c19565b610205565b005b6100e5610575565b6040516100f29190610b6f565b60405180910390f35b61010361057b565b6040516101109190610c68565b60405180910390f35b610133600480360381019061012e9190610c83565b6106a6565b6040516101409190610c68565b60405180910390f35b610163600480360381019061015e9190610c83565b6106e5565b005b61016d6108cb565b60405161017a9190610c68565b60405180910390f35b61019d60048036038101906101989190610cb0565b6108ef565b6040516101aa9190610b6f565b60405180910390f35b6101cd60048036038101906101c89190610cb0565b610907565b6040516101da9190610b6f565b60405180910390f35b6101fd60048036038101906101f89190610cb0565b61091f565b005b60015481565b7f9336eb28e461adb6ba7e620f5006a6952a65a21a4db92c2edb104bf7f1c38c6360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b8152600401610281929190610cf6565b602060405180830381865afa15801561029e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102c29190610d57565b610301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102f890610de1565b60405180910390fd5b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414801561038e5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482115b801561039c57506002548211155b806103f257506000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180156103f15750600082145b5b610431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042890610e73565b60405180910390fd5b81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600082036104875760015491506104cc565b81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60036001836104db9190610ec2565b815481106104ec576104eb610ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f92f37cc5bb696741e66686dc609768037ece5f7cc8dcb2f4a811fa8e9f46fac260405160405180910390a3505050565b60025481565b600080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146106545760036001600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106119190610ec2565b8154811061062257610621610ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506106a3565b6003600180546106649190610ec2565b8154811061067557610674610ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b90565b600381815481106106b657600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f9336eb28e461adb6ba7e620f5006a6952a65a21a4db92c2edb104bf7f1c38c6360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b8152600401610761929190610cf6565b602060405180830381865afa15801561077e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a29190610d57565b6107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d890610de1565b60405180910390fd5b600154821180156107f457506002548211155b610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a90610e73565b60405180910390fd5b8160018190555060036001836108499190610ec2565b8154811061085a57610859610ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1a8dd38a3306ba324b59cdd94317161d6d760814796c8e2fbeafa96bf734b0b960405160405180910390a25050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60056020528060005260406000206000915090505481565b60046020528060005260406000206000915090505481565b7f9336eb28e461adb6ba7e620f5006a6952a65a21a4db92c2edb104bf7f1c38c6360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b815260040161099b929190610cf6565b602060405180830381865afa1580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190610d57565b610a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1290610de1565b60405180910390fd5b610a2482610a8e565b8173ffffffffffffffffffffffffffffffffffffffff167f9da3a12664246b3a91b1e92c39d7a591ab70c5c32805d4f5dc580c09a7d3bae360405160405180910390a25050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b610a9781610a6b565b610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd90610f97565b60405180910390fd5b600160026000828254610ae99190610fb7565b925050819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000819050919050565b610b6981610b56565b82525050565b6000602082019050610b846000830184610b60565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610bba82610b8f565b9050919050565b610bca81610baf565b8114610bd557600080fd5b50565b600081359050610be781610bc1565b92915050565b610bf681610b56565b8114610c0157600080fd5b50565b600081359050610c1381610bed565b92915050565b60008060408385031215610c3057610c2f610b8a565b5b6000610c3e85828601610bd8565b9250506020610c4f85828601610c04565b9150509250929050565b610c6281610baf565b82525050565b6000602082019050610c7d6000830184610c59565b92915050565b600060208284031215610c9957610c98610b8a565b5b6000610ca784828501610c04565b91505092915050565b600060208284031215610cc657610cc5610b8a565b5b6000610cd484828501610bd8565b91505092915050565b6000819050919050565b610cf081610cdd565b82525050565b6000604082019050610d0b6000830185610ce7565b610d186020830184610c59565b9392505050565b60008115159050919050565b610d3481610d1f565b8114610d3f57600080fd5b50565b600081519050610d5181610d2b565b92915050565b600060208284031215610d6d57610d6c610b8a565b5b6000610d7b84828501610d42565b91505092915050565b600082825260208201905092915050565b7f52455741524445525f424541434f4e3a20554e415554484f524f5a4544000000600082015250565b6000610dcb601d83610d84565b9150610dd682610d95565b602082019050919050565b60006020820190508181036000830152610dfa81610dbe565b9050919050565b7f52455741524445525f424541434f4e3a20494e434f52524543545f524556495360008201527f494f4e0000000000000000000000000000000000000000000000000000000000602082015250565b6000610e5d602383610d84565b9150610e6882610e01565b604082019050919050565b60006020820190508181036000830152610e8c81610e50565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610ecd82610b56565b9150610ed883610b56565b9250828203905081811115610ef057610eef610e93565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f52455741524445525f424541434f4e3a20696d706c656d656e746174696f6e2060008201527f6973206e6f74206120636f6e7472616374000000000000000000000000000000602082015250565b6000610f81603183610d84565b9150610f8c82610f25565b604082019050919050565b60006020820190508181036000830152610fb081610f74565b9050919050565b6000610fc282610b56565b9150610fcd83610b56565b9250828201905080821115610fe557610fe4610e93565b5b9291505056fea2646970667358221220aaa05642b1dbfcd9b84e30c63f47a516beab137f8c3439c4a0819222810c1f3164736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000058a0453948f49f818ca7570990a9deaadc6e14160000000000000000000000000e4caef48de8fec07b7dfeae8d73848aaa8be0cb
-----Decoded View---------------
Arg [0] : implementation_ (address): 0x58a0453948f49f818Ca7570990A9DeAADC6E1416
Arg [1] : _rewardRegistry (address): 0x0e4cAEf48De8FEc07b7dfeae8D73848Aaa8be0cB
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000058a0453948f49f818ca7570990a9deaadc6e1416
Arg [1] : 0000000000000000000000000e4caef48de8fec07b7dfeae8d73848aaa8be0cb
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in GLMR
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.