More Info
Private Name Tags
ContractCreator:
Latest 25 from a total of 48,277 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Unstake | 78360529 | 25 hrs ago | IN | 0 FTM | 0.00903799 | ||||
Unstake | 78306510 | 43 hrs ago | IN | 0 FTM | 0.01549197 | ||||
Unstake | 78293191 | 47 hrs ago | IN | 0 FTM | 0.01347912 | ||||
Unstake | 78253628 | 2 days ago | IN | 0 FTM | 0.00336065 | ||||
Unstake | 78213732 | 3 days ago | IN | 0 FTM | 0.0034963 | ||||
Unstake | 78201340 | 3 days ago | IN | 0 FTM | 0.00405026 | ||||
Unstake | 78186289 | 3 days ago | IN | 0 FTM | 0.004921 | ||||
Unstake | 78159737 | 3 days ago | IN | 0 FTM | 0.00749822 | ||||
Unstake | 78037174 | 6 days ago | IN | 0 FTM | 0.00808944 | ||||
Unstake | 77996139 | 6 days ago | IN | 0 FTM | 0.00886764 | ||||
Unstake | 77915940 | 7 days ago | IN | 0 FTM | 0.01112918 | ||||
Unstake | 77913868 | 7 days ago | IN | 0 FTM | 0.01250471 | ||||
Unstake | 77780101 | 9 days ago | IN | 0 FTM | 0.02101567 | ||||
Unstake | 77742307 | 9 days ago | IN | 0 FTM | 0.06058044 | ||||
Unstake | 77651034 | 10 days ago | IN | 0 FTM | 0.01083084 | ||||
Unstake | 77646000 | 10 days ago | IN | 0 FTM | 0.01550156 | ||||
Unstake | 77570544 | 11 days ago | IN | 0 FTM | 0.00927487 | ||||
Unstake | 77531952 | 12 days ago | IN | 0 FTM | 0.00854518 | ||||
Unstake | 77526181 | 12 days ago | IN | 0 FTM | 0.00830321 | ||||
Unstake | 77468019 | 13 days ago | IN | 0 FTM | 0.00706594 | ||||
Unstake | 77339644 | 14 days ago | IN | 0 FTM | 0.00158039 | ||||
Unstake | 77313689 | 15 days ago | IN | 0 FTM | 0.00267976 | ||||
Unstake | 77283217 | 15 days ago | IN | 0 FTM | 0.00249933 | ||||
Unstake | 77250982 | 16 days ago | IN | 0 FTM | 0.00201972 | ||||
Unstake | 77245740 | 16 days ago | IN | 0 FTM | 0.00173044 |
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
20188518 | 884 days ago | Contract Creation | 0 FTM |
Loading...
Loading
Contract Name:
FantohmStaking
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2021-10-27 */ // SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } } interface IERC20 { function decimals() external view returns (uint8); /** * @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); } 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 in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(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"); // solhint-disable-next-line avoid-low-level-calls (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.3._ */ 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.3._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } function addressToString(address _address) internal pure returns(string memory) { bytes32 _bytes = bytes32(uint256(_address)); bytes memory HEX = "0123456789abcdef"; bytes memory _addr = new bytes(42); _addr[0] = '0'; _addr[1] = 'x'; for(uint256 i = 0; i < 20; i++) { _addr[2+i*2] = HEX[uint8(_bytes[i + 12] >> 4)]; _addr[3+i*2] = HEX[uint8(_bytes[i + 12] & 0x0f)]; } return string(_addr); } } library SafeERC20 { using SafeMath for uint256; 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' // solhint-disable-next-line max-line-length 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).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _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 // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } interface IOwnable { function manager() external view returns (address); function renounceManagement() external; function pushManagement( address newOwner_ ) external; function pullManagement() external; } contract Ownable is IOwnable { address internal _owner; address internal _newOwner; event OwnershipPushed(address indexed previousOwner, address indexed newOwner); event OwnershipPulled(address indexed previousOwner, address indexed newOwner); constructor () { _owner = msg.sender; emit OwnershipPushed( address(0), _owner ); } function manager() public view override returns (address) { return _owner; } modifier onlyManager() { require( _owner == msg.sender, "Ownable: caller is not the owner" ); _; } function renounceManagement() public virtual override onlyManager() { emit OwnershipPushed( _owner, address(0) ); _owner = address(0); } function pushManagement( address newOwner_ ) public virtual override onlyManager() { require( newOwner_ != address(0), "Ownable: new owner is the zero address"); emit OwnershipPushed( _owner, newOwner_ ); _newOwner = newOwner_; } function pullManagement() public virtual override { require( msg.sender == _newOwner, "Ownable: must be new owner to pull"); emit OwnershipPulled( _owner, _newOwner ); _owner = _newOwner; } } interface IsOHM { function rebase( uint256 ohmProfit_, uint epoch_) external returns (uint256); function circulatingSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function gonsForBalance( uint amount ) external view returns ( uint ); function balanceForGons( uint gons ) external view returns ( uint ); function index() external view returns ( uint ); } interface IWarmup { function retrieve( address staker_, uint amount_ ) external; } interface IDistributor { function distribute() external returns ( bool ); } contract FantohmStaking is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; address public immutable OHM; address public immutable sOHM; struct Epoch { uint length; uint number; uint endBlock; uint distribute; } Epoch public epoch; address public distributor; address public locker; uint public totalBonus; address public warmupContract; uint public warmupPeriod; constructor ( address _OHM, address _sOHM, uint _epochLength, uint _firstEpochNumber, uint _firstEpochBlock ) { require( _OHM != address(0) ); OHM = _OHM; require( _sOHM != address(0) ); sOHM = _sOHM; epoch = Epoch({ length: _epochLength, number: _firstEpochNumber, endBlock: _firstEpochBlock, distribute: 0 }); } struct Claim { uint deposit; uint gons; uint expiry; bool lock; // prevents malicious delays } mapping( address => Claim ) public warmupInfo; /** @notice stake OHM to enter warmup @param _amount uint @return bool */ function stake( uint _amount, address _recipient ) external returns ( bool ) { rebase(); IERC20( OHM ).safeTransferFrom( msg.sender, address(this), _amount ); Claim memory info = warmupInfo[ _recipient ]; require( !info.lock, "Deposits for account are locked" ); warmupInfo[ _recipient ] = Claim ({ deposit: info.deposit.add( _amount ), gons: info.gons.add( IsOHM( sOHM ).gonsForBalance( _amount ) ), expiry: epoch.number.add( warmupPeriod ), lock: false }); IERC20( sOHM ).safeTransfer( warmupContract, _amount ); return true; } /** @notice retrieve sOHM from warmup @param _recipient address */ function claim ( address _recipient ) public { Claim memory info = warmupInfo[ _recipient ]; if ( epoch.number >= info.expiry && info.expiry != 0 ) { delete warmupInfo[ _recipient ]; IWarmup( warmupContract ).retrieve( _recipient, IsOHM( sOHM ).balanceForGons( info.gons ) ); } } /** @notice forfeit sOHM in warmup and retrieve OHM */ function forfeit() external { Claim memory info = warmupInfo[ msg.sender ]; delete warmupInfo[ msg.sender ]; IWarmup( warmupContract ).retrieve( address(this), IsOHM( sOHM ).balanceForGons( info.gons ) ); IERC20( OHM ).safeTransfer( msg.sender, info.deposit ); } /** @notice prevent new deposits to address (protection from malicious activity) */ function toggleDepositLock() external { warmupInfo[ msg.sender ].lock = !warmupInfo[ msg.sender ].lock; } /** @notice redeem sOHM for OHM @param _amount uint @param _trigger bool */ function unstake( uint _amount, bool _trigger ) external { if ( _trigger ) { rebase(); } IERC20( sOHM ).safeTransferFrom( msg.sender, address(this), _amount ); IERC20( OHM ).safeTransfer( msg.sender, _amount ); } /** @notice returns the sOHM index, which tracks rebase growth @return uint */ function index() public view returns ( uint ) { return IsOHM( sOHM ).index(); } /** @notice trigger rebase if epoch over */ function rebase() public { if( epoch.endBlock <= block.number ) { IsOHM( sOHM ).rebase( epoch.distribute, epoch.number ); epoch.endBlock = epoch.endBlock.add( epoch.length ); epoch.number++; if ( distributor != address(0) ) { IDistributor( distributor ).distribute(); } uint balance = contractBalance(); uint staked = IsOHM( sOHM ).circulatingSupply(); if( balance <= staked ) { epoch.distribute = 0; } else { epoch.distribute = balance.sub( staked ); } } } /** @notice returns contract OHM holdings, including bonuses provided @return uint */ function contractBalance() public view returns ( uint ) { return IERC20( OHM ).balanceOf( address(this) ).add( totalBonus ); } /** @notice provide bonus to locked staking contract @param _amount uint */ function giveLockBonus( uint _amount ) external { require( msg.sender == locker ); totalBonus = totalBonus.add( _amount ); IERC20( sOHM ).safeTransfer( locker, _amount ); } /** @notice reclaim bonus from locked staking contract @param _amount uint */ function returnLockBonus( uint _amount ) external { require( msg.sender == locker ); totalBonus = totalBonus.sub( _amount ); IERC20( sOHM ).safeTransferFrom( locker, address(this), _amount ); } enum CONTRACTS { DISTRIBUTOR, WARMUP, LOCKER } /** @notice sets the contract address for LP staking @param _contract address */ function setContract( CONTRACTS _contract, address _address ) external onlyManager() { if( _contract == CONTRACTS.DISTRIBUTOR ) { // 0 distributor = _address; } else if ( _contract == CONTRACTS.WARMUP ) { // 1 require( warmupContract == address( 0 ), "Warmup cannot be set more than once" ); warmupContract = _address; } else if ( _contract == CONTRACTS.LOCKER ) { // 2 require( locker == address(0), "Locker cannot be set more than once" ); locker = _address; } } /** * @notice set warmup period for new stakers * @param _warmupPeriod uint */ function setWarmup( uint _warmupPeriod ) external onlyManager() { warmupPeriod = _warmupPeriod; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_OHM","type":"address"},{"internalType":"address","name":"_sOHM","type":"address"},{"internalType":"uint256","name":"_epochLength","type":"uint256"},{"internalType":"uint256","name":"_firstEpochNumber","type":"uint256"},{"internalType":"uint256","name":"_firstEpochBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPushed","type":"event"},{"inputs":[],"name":"OHM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epoch","outputs":[{"internalType":"uint256","name":"length","type":"uint256"},{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"distribute","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forfeit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"giveLockBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"index","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"locker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pullManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"pushManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"returnLockBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sOHM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum FantohmStaking.CONTRACTS","name":"_contract","type":"uint8"},{"internalType":"address","name":"_address","type":"address"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_warmupPeriod","type":"uint256"}],"name":"setWarmup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"stake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleDepositLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_trigger","type":"bool"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"warmupContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"warmupInfo","outputs":[{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"uint256","name":"gons","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"lock","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"warmupPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c060405234801561001057600080fd5b506040516119d13803806119d1833981810160405260a081101561003357600080fd5b50805160208201516040808401516060850151608090950151600080546001600160a01b031916331780825593519596949592949391926001600160a01b0392909216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a36001600160a01b0385166100af57600080fd5b6001600160601b0319606086901b166080526001600160a01b0384166100d457600080fd5b6001600160601b0319606094851b1660a0526040805160808101825284815260208101849052908101829052600094018490526002929092556003556004556005555060805160601c60a05160601c61184b6101866000398061040b52806104d052806105c952806106aa5280610a0f5280610b1b5280610dc25280610e535280610fae528061117552806112bd5250806109195280610cd25280610df75280610e20528061125c525061184b6000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80638f077b83116100de578063bfe1092811610097578063deac361a11610071578063deac361a1461039e578063ed4acaa8146103a6578063f3d86e4a146103ae578063f62ae76a146103b657610173565b8063bfe1092814610371578063c9f464ff14610379578063d7b96d4e1461039657610173565b80638f077b83146102fe578063900cf0cf146103065780639ebea88c14610334578063a6c41fec14610359578063a8dd07dc14610361578063af14052c1461036957610173565b8063481c6a7511610130578063481c6a75146102295780635a96ac0a146102315780636746f4c2146102395780637acb775714610287578063865e6fd3146102c75780638b7afe2e146102f657610173565b806303c2367014610178578063089208d814610197578063150799251461019f5780631e83409a146101c35780632986c0e5146101e957806346f68ee914610203575b600080fd5b6101956004803603602081101561018e57600080fd5b50356103d3565b005b610195610437565b6101a76104ce565b604080516001600160a01b039092168252519081900360200190f35b610195600480360360208110156101d957600080fd5b50356001600160a01b03166104f2565b6101f16106a6565b60408051918252519081900360200190f35b6101956004803603602081101561021957600080fd5b50356001600160a01b0316610732565b6101a761081f565b61019561082e565b61025f6004803603602081101561024f57600080fd5b50356001600160a01b03166108d8565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b6102b36004803603604081101561029d57600080fd5b50803590602001356001600160a01b0316610902565b604080519115158252519081900360200190f35b610195600480360360408110156102dd57600080fd5b50803560ff1690602001356001600160a01b0316610b4e565b6101f1610cc8565b610195610d74565b61030e610d98565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6101956004803603604081101561034a57600080fd5b50803590602001351515610da7565b6101a7610e1e565b6101f1610e42565b610195610e48565b6101a7611056565b6101956004803603602081101561038f57600080fd5b5035611065565b6101a76110b7565b6101f16110c6565b6101a76110cc565b6101956110db565b610195600480360360208110156103cc57600080fd5b5035611285565b6007546001600160a01b031633146103ea57600080fd5b6008546103f790826112e7565b600855600754610434906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683611348565b50565b6000546001600160a01b03163314610484576040805162461bcd60e51b815260206004820181905260248201526000805160206117cc833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6104fa611713565b506001600160a01b0381166000908152600b6020908152604091829020825160808101845281548152600182015492810192909252600281015492820183905260039081015460ff16151560608301525490911180159061055e5750604081015115155b156106a2576001600160a01b038083166000908152600b602090815260408083208381556001810184905560028101939093556003909201805460ff19169055600954848201518351637965d56d60e01b8152600481019190915292519084169363c3a2a6659387937f000000000000000000000000000000000000000000000000000000000000000090921692637965d56d92602480840193919291829003018186803b15801561060f57600080fd5b505afa158015610623573d6000803e3d6000fd5b505050506040513d602081101561063957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b15801561068957600080fd5b505af115801561069d573d6000803e3d6000fd5b505050505b5050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632986c0e56040518163ffffffff1660e01b815260040160206040518083038186803b15801561070157600080fd5b505afa158015610715573d6000803e3d6000fd5b505050506040513d602081101561072b57600080fd5b5051905090565b6000546001600160a01b0316331461077f576040805162461bcd60e51b815260206004820181905260248201526000805160206117cc833981519152604482015290519081900360640190fd5b6001600160a01b0381166107c45760405162461bcd60e51b81526004018080602001828103825260268152602001806117616026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b6001546001600160a01b031633146108775760405162461bcd60e51b81526004018080602001828103825260228152602001806117aa6022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600b6020526000908152604090208054600182015460028301546003909301549192909160ff1684565b600061090c610e48565b6109416001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308661139f565b610949611713565b506001600160a01b0382166000908152600b602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460ff1615801560608301526109ec576040805162461bcd60e51b815260206004820152601f60248201527f4465706f7369747320666f72206163636f756e7420617265206c6f636b656400604482015290519081900360640190fd5b604080516080810190915281518190610a0590876112e7565b8152602001610aa87f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631bd39674886040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a7157600080fd5b505afa158015610a85573d6000803e3d6000fd5b505050506040513d6020811015610a9b57600080fd5b50516020850151906112e7565b8152600a54600354602090920191610abf916112e7565b8152600060209182018190526001600160a01b038681168252600b8352604091829020845181559284015160018401559083015160028301556060909201516003909101805460ff1916911515919091179055600954610b44917f00000000000000000000000000000000000000000000000000000000000000008116911686611348565b5060019392505050565b6000546001600160a01b03163314610b9b576040805162461bcd60e51b815260206004820181905260248201526000805160206117cc833981519152604482015290519081900360640190fd5b6000826002811115610ba957fe5b1415610bcf57600680546001600160a01b0319166001600160a01b0383161790556106a2565b6001826002811115610bdd57fe5b1415610c4b576009546001600160a01b031615610c2b5760405162461bcd60e51b81526004018080602001828103825260238152602001806117876023913960400191505060405180910390fd5b600980546001600160a01b0319166001600160a01b0383161790556106a2565b6002826002811115610c5957fe5b14156106a2576007546001600160a01b031615610ca75760405162461bcd60e51b815260040180806020018281038252602381526020018061173e6023913960400191505060405180910390fd5b600780546001600160a01b0383166001600160a01b03199091161790555050565b6000610d6f6008547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610d3d57600080fd5b505afa158015610d51573d6000803e3d6000fd5b505050506040513d6020811015610d6757600080fd5b5051906112e7565b905090565b336000908152600b60205260409020600301805460ff19811660ff90911615179055565b60025460035460045460055484565b8015610db557610db5610e48565b610dea6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308561139f565b6106a26001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163384611348565b7f000000000000000000000000000000000000000000000000000000000000000081565b60085481565b6004544310611054577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663058ecdb46002600301546002600101546040518363ffffffff1660e01b81526004018083815260200182815260200192505050602060405180830381600087803b158015610ec957600080fd5b505af1158015610edd573d6000803e3d6000fd5b505050506040513d6020811015610ef357600080fd5b5050600254600454610f04916112e7565b6004556003805460010190556006546001600160a01b031615610f9e57600660009054906101000a90046001600160a01b03166001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7157600080fd5b505af1158015610f85573d6000803e3d6000fd5b505050506040513d6020811015610f9b57600080fd5b50505b6000610fa8610cc8565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639358928b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561100557600080fd5b505afa158015611019573d6000803e3d6000fd5b505050506040513d602081101561102f57600080fd5b505190508082116110445760006005556106a2565b61104e82826113ff565b60055550505b565b6006546001600160a01b031681565b6000546001600160a01b031633146110b2576040805162461bcd60e51b815260206004820181905260248201526000805160206117cc833981519152604482015290519081900360640190fd5b600a55565b6007546001600160a01b031681565b600a5481565b6009546001600160a01b031681565b6110e3611713565b50336000818152600b602081815260408084208151608081018352815481526001820180548286019081526002840180548487015260038501805460ff8116151560608701529a8a5297875293889055908790559590915560ff1990951690925560095492518251637965d56d60e01b8152600481019190915291516001600160a01b039384169363c3a2a6659330937f000000000000000000000000000000000000000000000000000000000000000090921692637965d56d92602480840193919291829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b15801561123557600080fd5b505af1158015611249573d6000803e3d6000fd5b5050825161043492506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691503390611348565b6007546001600160a01b0316331461129c57600080fd5b6008546112a990826113ff565b600855600754610434906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116308461139f565b600082820183811015611341576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261139a908490611441565b505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526113f9908590611441565b50505050565b600061134183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114f2565b6060611496826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115899092919063ffffffff16565b80519091501561139a578080602001905160208110156114b557600080fd5b505161139a5760405162461bcd60e51b815260040180806020018281038252602a8152602001806117ec602a913960400191505060405180910390fd5b600081848411156115815760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561154657818101518382015260200161152e565b50505050905090810190601f1680156115735780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b606061159884846000856115a0565b949350505050565b60606115ab8561170d565b6115fc576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061163b5780518252601f19909201916020918201910161161c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461169d576040519150601f19603f3d011682016040523d82523d6000602084013e6116a2565b606091505b509150915081156116b65791506115989050565b8051156116c65780518082602001fd5b60405162461bcd60e51b815260206004820181815286516024840152865187939192839260440191908501908083836000831561154657818101518382015260200161152e565b3b151590565b6040518060800160405280600081526020016000815260200160008152602001600015158152509056fe4c6f636b65722063616e6e6f7420626520736574206d6f7265207468616e206f6e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735761726d75702063616e6e6f7420626520736574206d6f7265207468616e206f6e63654f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212206a7a2ee0317be96f184d65c2d58463c6bb051512fac3848928b025347efdfa6c64736f6c63430007050033000000000000000000000000fa1fbb8ef55a4855e5688c0ee13ac3f2024862860000000000000000000000005e983ff70de345de15dbdcf0529640f14446cdfa000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001340a87
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c80638f077b83116100de578063bfe1092811610097578063deac361a11610071578063deac361a1461039e578063ed4acaa8146103a6578063f3d86e4a146103ae578063f62ae76a146103b657610173565b8063bfe1092814610371578063c9f464ff14610379578063d7b96d4e1461039657610173565b80638f077b83146102fe578063900cf0cf146103065780639ebea88c14610334578063a6c41fec14610359578063a8dd07dc14610361578063af14052c1461036957610173565b8063481c6a7511610130578063481c6a75146102295780635a96ac0a146102315780636746f4c2146102395780637acb775714610287578063865e6fd3146102c75780638b7afe2e146102f657610173565b806303c2367014610178578063089208d814610197578063150799251461019f5780631e83409a146101c35780632986c0e5146101e957806346f68ee914610203575b600080fd5b6101956004803603602081101561018e57600080fd5b50356103d3565b005b610195610437565b6101a76104ce565b604080516001600160a01b039092168252519081900360200190f35b610195600480360360208110156101d957600080fd5b50356001600160a01b03166104f2565b6101f16106a6565b60408051918252519081900360200190f35b6101956004803603602081101561021957600080fd5b50356001600160a01b0316610732565b6101a761081f565b61019561082e565b61025f6004803603602081101561024f57600080fd5b50356001600160a01b03166108d8565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b6102b36004803603604081101561029d57600080fd5b50803590602001356001600160a01b0316610902565b604080519115158252519081900360200190f35b610195600480360360408110156102dd57600080fd5b50803560ff1690602001356001600160a01b0316610b4e565b6101f1610cc8565b610195610d74565b61030e610d98565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6101956004803603604081101561034a57600080fd5b50803590602001351515610da7565b6101a7610e1e565b6101f1610e42565b610195610e48565b6101a7611056565b6101956004803603602081101561038f57600080fd5b5035611065565b6101a76110b7565b6101f16110c6565b6101a76110cc565b6101956110db565b610195600480360360208110156103cc57600080fd5b5035611285565b6007546001600160a01b031633146103ea57600080fd5b6008546103f790826112e7565b600855600754610434906001600160a01b037f0000000000000000000000005e983ff70de345de15dbdcf0529640f14446cdfa8116911683611348565b50565b6000546001600160a01b03163314610484576040805162461bcd60e51b815260206004820181905260248201526000805160206117cc833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b7f0000000000000000000000005e983ff70de345de15dbdcf0529640f14446cdfa81565b6104fa611713565b506001600160a01b0381166000908152600b6020908152604091829020825160808101845281548152600182015492810192909252600281015492820183905260039081015460ff16151560608301525490911180159061055e5750604081015115155b156106a2576001600160a01b038083166000908152600b602090815260408083208381556001810184905560028101939093556003909201805460ff19169055600954848201518351637965d56d60e01b8152600481019190915292519084169363c3a2a6659387937f0000000000000000000000005e983ff70de345de15dbdcf0529640f14446cdfa90921692637965d56d92602480840193919291829003018186803b15801561060f57600080fd5b505afa158015610623573d6000803e3d6000fd5b505050506040513d602081101561063957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b15801561068957600080fd5b505af115801561069d573d6000803e3d6000fd5b505050505b5050565b60007f0000000000000000000000005e983ff70de345de15dbdcf0529640f14446cdfa6001600160a01b0316632986c0e56040518163ffffffff1660e01b815260040160206040518083038186803b15801561070157600080fd5b505afa158015610715573d6000803e3d6000fd5b505050506040513d602081101561072b57600080fd5b5051905090565b6000546001600160a01b0316331461077f576040805162461bcd60e51b815260206004820181905260248201526000805160206117cc833981519152604482015290519081900360640190fd5b6001600160a01b0381166107c45760405162461bcd60e51b81526004018080602001828103825260268152602001806117616026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b6001546001600160a01b031633146108775760405162461bcd60e51b81526004018080602001828103825260228152602001806117aa6022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600b6020526000908152604090208054600182015460028301546003909301549192909160ff1684565b600061090c610e48565b6109416001600160a01b037f000000000000000000000000fa1fbb8ef55a4855e5688c0ee13ac3f2024862861633308661139f565b610949611713565b506001600160a01b0382166000908152600b602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460ff1615801560608301526109ec576040805162461bcd60e51b815260206004820152601f60248201527f4465706f7369747320666f72206163636f756e7420617265206c6f636b656400604482015290519081900360640190fd5b604080516080810190915281518190610a0590876112e7565b8152602001610aa87f0000000000000000000000005e983ff70de345de15dbdcf0529640f14446cdfa6001600160a01b0316631bd39674886040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a7157600080fd5b505afa158015610a85573d6000803e3d6000fd5b505050506040513d6020811015610a9b57600080fd5b50516020850151906112e7565b8152600a54600354602090920191610abf916112e7565b8152600060209182018190526001600160a01b038681168252600b8352604091829020845181559284015160018401559083015160028301556060909201516003909101805460ff1916911515919091179055600954610b44917f0000000000000000000000005e983ff70de345de15dbdcf0529640f14446cdfa8116911686611348565b5060019392505050565b6000546001600160a01b03163314610b9b576040805162461bcd60e51b815260206004820181905260248201526000805160206117cc833981519152604482015290519081900360640190fd5b6000826002811115610ba957fe5b1415610bcf57600680546001600160a01b0319166001600160a01b0383161790556106a2565b6001826002811115610bdd57fe5b1415610c4b576009546001600160a01b031615610c2b5760405162461bcd60e51b81526004018080602001828103825260238152602001806117876023913960400191505060405180910390fd5b600980546001600160a01b0319166001600160a01b0383161790556106a2565b6002826002811115610c5957fe5b14156106a2576007546001600160a01b031615610ca75760405162461bcd60e51b815260040180806020018281038252602381526020018061173e6023913960400191505060405180910390fd5b600780546001600160a01b0383166001600160a01b03199091161790555050565b6000610d6f6008547f000000000000000000000000fa1fbb8ef55a4855e5688c0ee13ac3f2024862866001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610d3d57600080fd5b505afa158015610d51573d6000803e3d6000fd5b505050506040513d6020811015610d6757600080fd5b5051906112e7565b905090565b336000908152600b60205260409020600301805460ff19811660ff90911615179055565b60025460035460045460055484565b8015610db557610db5610e48565b610dea6001600160a01b037f0000000000000000000000005e983ff70de345de15dbdcf0529640f14446cdfa1633308561139f565b6106a26001600160a01b037f000000000000000000000000fa1fbb8ef55a4855e5688c0ee13ac3f202486286163384611348565b7f000000000000000000000000fa1fbb8ef55a4855e5688c0ee13ac3f20248628681565b60085481565b6004544310611054577f0000000000000000000000005e983ff70de345de15dbdcf0529640f14446cdfa6001600160a01b031663058ecdb46002600301546002600101546040518363ffffffff1660e01b81526004018083815260200182815260200192505050602060405180830381600087803b158015610ec957600080fd5b505af1158015610edd573d6000803e3d6000fd5b505050506040513d6020811015610ef357600080fd5b5050600254600454610f04916112e7565b6004556003805460010190556006546001600160a01b031615610f9e57600660009054906101000a90046001600160a01b03166001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f7157600080fd5b505af1158015610f85573d6000803e3d6000fd5b505050506040513d6020811015610f9b57600080fd5b50505b6000610fa8610cc8565b905060007f0000000000000000000000005e983ff70de345de15dbdcf0529640f14446cdfa6001600160a01b0316639358928b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561100557600080fd5b505afa158015611019573d6000803e3d6000fd5b505050506040513d602081101561102f57600080fd5b505190508082116110445760006005556106a2565b61104e82826113ff565b60055550505b565b6006546001600160a01b031681565b6000546001600160a01b031633146110b2576040805162461bcd60e51b815260206004820181905260248201526000805160206117cc833981519152604482015290519081900360640190fd5b600a55565b6007546001600160a01b031681565b600a5481565b6009546001600160a01b031681565b6110e3611713565b50336000818152600b602081815260408084208151608081018352815481526001820180548286019081526002840180548487015260038501805460ff8116151560608701529a8a5297875293889055908790559590915560ff1990951690925560095492518251637965d56d60e01b8152600481019190915291516001600160a01b039384169363c3a2a6659330937f0000000000000000000000005e983ff70de345de15dbdcf0529640f14446cdfa90921692637965d56d92602480840193919291829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b15801561123557600080fd5b505af1158015611249573d6000803e3d6000fd5b5050825161043492506001600160a01b037f000000000000000000000000fa1fbb8ef55a4855e5688c0ee13ac3f2024862861691503390611348565b6007546001600160a01b0316331461129c57600080fd5b6008546112a990826113ff565b600855600754610434906001600160a01b037f0000000000000000000000005e983ff70de345de15dbdcf0529640f14446cdfa81169116308461139f565b600082820183811015611341576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261139a908490611441565b505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526113f9908590611441565b50505050565b600061134183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114f2565b6060611496826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115899092919063ffffffff16565b80519091501561139a578080602001905160208110156114b557600080fd5b505161139a5760405162461bcd60e51b815260040180806020018281038252602a8152602001806117ec602a913960400191505060405180910390fd5b600081848411156115815760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561154657818101518382015260200161152e565b50505050905090810190601f1680156115735780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b606061159884846000856115a0565b949350505050565b60606115ab8561170d565b6115fc576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061163b5780518252601f19909201916020918201910161161c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461169d576040519150601f19603f3d011682016040523d82523d6000602084013e6116a2565b606091505b509150915081156116b65791506115989050565b8051156116c65780518082602001fd5b60405162461bcd60e51b815260206004820181815286516024840152865187939192839260440191908501908083836000831561154657818101518382015260200161152e565b3b151590565b6040518060800160405280600081526020016000815260200160008152602001600015158152509056fe4c6f636b65722063616e6e6f7420626520736574206d6f7265207468616e206f6e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735761726d75702063616e6e6f7420626520736574206d6f7265207468616e206f6e63654f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212206a7a2ee0317be96f184d65c2d58463c6bb051512fac3848928b025347efdfa6c64736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000fa1fbb8ef55a4855e5688c0ee13ac3f2024862860000000000000000000000005e983ff70de345de15dbdcf0529640f14446cdfa000000000000000000000000000000000000000000000000000000000000708000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001340a87
-----Decoded View---------------
Arg [0] : _OHM (address): 0xfa1FBb8Ef55A4855E5688C0eE13aC3f202486286
Arg [1] : _sOHM (address): 0x5E983ff70DE345de15DbDCf0529640F14446cDfa
Arg [2] : _epochLength (uint256): 28800
Arg [3] : _firstEpochNumber (uint256): 0
Arg [4] : _firstEpochBlock (uint256): 20187783
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000fa1fbb8ef55a4855e5688c0ee13ac3f202486286
Arg [1] : 0000000000000000000000005e983ff70de345de15dbdcf0529640f14446cdfa
Arg [2] : 0000000000000000000000000000000000000000000000000000000000007080
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000001340a87
Deployed Bytecode Sourcemap
20937:6207:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25634:204;;;;;;;;;;;;;;;;-1:-1:-1;25634:204:0;;:::i;:::-;;19638:159;;;:::i;21084:29::-;;;:::i;:::-;;;;-1:-1:-1;;;;;21084:29:0;;;;;;;;;;;;;;22962:337;;;;;;;;;;;;;;;;-1:-1:-1;22962:337:0;-1:-1:-1;;;;;22962:337:0;;:::i;24422:93::-;;;:::i;:::-;;;;;;;;;;;;;;;;19805:261;;;;;;;;;;;;;;;;-1:-1:-1;19805:261:0;-1:-1:-1;;;;;19805:261:0;;:::i;19411:90::-;;;:::i;20074:221::-;;;:::i;22042:45::-;;;;;;;;;;;;;;;;-1:-1:-1;22042:45:0;-1:-1:-1;;;;;22042:45:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22208:650;;;;;;;;;;;;;;;;-1:-1:-1;22208:650:0;;;;;;-1:-1:-1;;;;;22208:650:0;;:::i;:::-;;;;;;;;;;;;;;;;;;26350:570;;;;;;;;;;;;;;;;-1:-1:-1;26350:570:0;;;;;;;;-1:-1:-1;;;;;26350:570:0;;:::i;25381:140::-;;;:::i;23799:119::-;;;:::i;21243:18::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24040:266;;;;;;;;;;;;;;;;-1:-1:-1;24040:266:0;;;;;;;;;:::i;21049:28::-;;;:::i;21333:22::-;;;:::i;24587:671::-;;;:::i;21270:26::-;;;:::i;27030:111::-;;;;;;;;;;;;;;;;-1:-1:-1;27030:111:0;;:::i;21305:21::-;;;:::i;21400:24::-;;;:::i;21364:29::-;;;:::i;23382:305::-;;;:::i;25953:225::-;;;;;;;;;;;;;;;;-1:-1:-1;25953:225:0;;:::i;25634:204::-;25716:6;;-1:-1:-1;;;;;25716:6:0;25702:10;:20;25693:31;;;;;;25748:10;;:25;;25764:7;25748:14;:25::i;:::-;25735:10;:38;25813:6;;25784:46;;-1:-1:-1;;;;;25792:4:0;25784:27;;;25813:6;25821:7;25784:27;:46::i;:::-;25634:204;:::o;19638:159::-;19552:6;;-1:-1:-1;;;;;19552:6:0;19562:10;19552:20;19543:67;;;;;-1:-1:-1;;;19543:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19543:67:0;;;;;;;;;;;;;;;19755:1:::1;19739:6:::0;;19722:37:::1;::::0;-1:-1:-1;;;;;19739:6:0;;::::1;::::0;19722:37:::1;::::0;19755:1;;19722:37:::1;19787:1;19770:19:::0;;-1:-1:-1;;;;;;19770:19:0::1;::::0;;19638:159::o;21084:29::-;;;:::o;22962:337::-;23018:17;;:::i;:::-;-1:-1:-1;;;;;;23038:24:0;;;;;;:10;:24;;;;;;;;;23018:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23078:12;23018:44;;-1:-1:-1;23078:27:0;;;:47;;-1:-1:-1;23109:11:0;;;;:16;;23078:47;23073:219;;;-1:-1:-1;;;;;23150:24:0;;;;;;;:10;:24;;;;;;;;23143:31;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23143:31:0;;;23198:14;;23267:9;;;;23237:41;;-1:-1:-1;;;23237:41:0;;;;;;;;;;;23198:14;;;;23189:34;;23162:10;;23244:4;23237:28;;;;;;:41;;;;;23150:24;;23237:41;;;;;;:28;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23237:41:0;23189:91;;;-1:-1:-1;;;;;;23189:91:0;;;;;;;-1:-1:-1;;;;;23189:91:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23189:91:0;;;;;;;-1:-1:-1;23189:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23073:219;22962:337;;:::o;24422:93::-;24461:4;24493;-1:-1:-1;;;;;24486:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24486:21:0;;-1:-1:-1;24422:93:0;:::o;19805:261::-;19552:6;;-1:-1:-1;;;;;19552:6:0;19562:10;19552:20;19543:67;;;;;-1:-1:-1;;;19543:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19543:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19908:23:0;::::1;19899:75;;;;-1:-1:-1::0;;;19899:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20007:6;::::0;;19990:36:::1;::::0;-1:-1:-1;;;;;19990:36:0;;::::1;::::0;20007:6;::::1;::::0;19990:36:::1;::::0;::::1;20037:9;:21:::0;;-1:-1:-1;;;;;;20037:21:0::1;-1:-1:-1::0;;;;;20037:21:0;;;::::1;::::0;;;::::1;::::0;;19805:261::o;19411:90::-;19460:7;19487:6;-1:-1:-1;;;;;19487:6:0;19411:90;:::o;20074:221::-;20158:9;;-1:-1:-1;;;;;20158:9:0;20144:10;:23;20135:71;;;;-1:-1:-1;;;20135:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20247:9;;;20239:6;;20222:36;;-1:-1:-1;;;;;20247:9:0;;;;20239:6;;;;20222:36;;;20278:9;;;20269:18;;-1:-1:-1;;;;;;20269:18:0;-1:-1:-1;;;;;20278:9:0;;;20269:18;;;;;;20074:221::o;22042:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22208:650::-;22278:4;22296:8;:6;:8::i;:::-;22317:68;-1:-1:-1;;;;;22325:3:0;22317:30;22349:10;22369:4;22376:7;22317:30;:68::i;:::-;22398:17;;:::i;:::-;-1:-1:-1;;;;;;22418:24:0;;;;;;:10;:24;;;;;;;;;22398:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22453:56;;;;;-1:-1:-1;;;22453:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22549:212;;;;;;;;;22576:12;;22549:212;;22576:27;;22594:7;22576:16;:27::i;:::-;22549:212;;;;22620:56;22642:4;-1:-1:-1;;;;;22635:28:0;;22665:7;22635:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22635:39:0;;22620:9;;;;:13;:56::i;:::-;22549:212;;22713:12;;22695;;22549:212;;;;;22695:32;;:16;:32::i;:::-;22549:212;;22744:5;22549:212;;;;;;;-1:-1:-1;;;;;22522:24:0;;;;;:10;:24;;;;;;;:239;;;;;;;;22549:212;22522:239;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22522:239:0;;;;;;;;;;22803:14;;22774:54;;22782:4;22774:27;;;22803:14;22819:7;22774:27;:54::i;:::-;-1:-1:-1;22846:4:0;;22208:650;-1:-1:-1;;;22208:650:0:o;26350:570::-;19552:6;;-1:-1:-1;;;;;19552:6:0;19562:10;19552:20;19543:67;;;;;-1:-1:-1;;;19543:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19543:67:0;;;;;;;;;;;;;;;26463:21:::1;26450:9;:34;;;;;;;;;26446:467;;;26507:11;:22:::0;;-1:-1:-1;;;;;;26507:22:0::1;-1:-1:-1::0;;;;;26507:22:0;::::1;;::::0;;26446:467:::1;;;26565:16;26552:9;:29;;;;;;;;;26547:366;;;26613:14;::::0;-1:-1:-1;;;;;26613:14:0::1;:30:::0;26604:80:::1;;;;-1:-1:-1::0;;;26604:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26699:14;:25:::0;;-1:-1:-1;;;;;;26699:25:0::1;-1:-1:-1::0;;;;;26699:25:0;::::1;;::::0;;26547:366:::1;;;26760:16;26747:9;:29;;;;;;;;;26742:171;;;26808:6;::::0;-1:-1:-1;;;;;26808:6:0::1;:20:::0;26799:70:::1;;;;-1:-1:-1::0;;;26799:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26884:6;:17:::0;;-1:-1:-1;;;;;26884:17:0;::::1;-1:-1:-1::0;;;;;;26884:17:0;;::::1;;::::0;;26350:570;;:::o;25381:140::-;25430:4;25455:58;25501:10;;25463:3;-1:-1:-1;;;;;25455:23:0;;25488:4;25455:40;;;;;;;;;;;;;-1:-1:-1;;;;;25455:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25455:40:0;;:44;:58::i;:::-;25448:65;;25381:140;:::o;23799:119::-;23893:10;23881:24;;;;:10;:24;;;;;:29;;;;-1:-1:-1;;23848:62:0;;23881:29;;;;23880:30;23848:62;;;23799:119::o;21243:18::-;;;;;;;;;;:::o;24040:266::-;24113:8;24108:51;;;24139:8;:6;:8::i;:::-;24169:69;-1:-1:-1;;;;;24177:4:0;24169:31;24202:10;24222:4;24229:7;24169:31;:69::i;:::-;24249:49;-1:-1:-1;;;;;24257:3:0;24249:26;24277:10;24289:7;24249:26;:49::i;21049:28::-;;;:::o;21333:22::-;;;;:::o;24587:671::-;24627:14;;24645:12;-1:-1:-1;24623:628:0;;24684:4;-1:-1:-1;;;;;24677:20:0;;24699:5;:16;;;24717:5;:12;;;24677:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24785:5:0;:12;24765:14;;:34;;:18;:34::i;:::-;24748:14;:51;24814:12;:14;;:12;:14;;;24850:11;;-1:-1:-1;;;;;24850:11:0;:25;24845:108;;24911:11;;;;;;;;;-1:-1:-1;;;;;24911:11:0;-1:-1:-1;;;;;24897:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24845:108:0;24969:12;24984:17;:15;:17::i;:::-;24969:32;;25016:11;25037:4;-1:-1:-1;;;;;25030:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25030:33:0;;-1:-1:-1;25084:17:0;;;25080:160;;25142:1;25123:16;:20;25080:160;;;25203:21;:7;25216:6;25203:11;:21::i;:::-;25184:16;:40;24623:628;;;24587:671::o;21270:26::-;;;-1:-1:-1;;;;;21270:26:0;;:::o;27030:111::-;19552:6;;-1:-1:-1;;;;;19552:6:0;19562:10;19552:20;19543:67;;;;;-1:-1:-1;;;19543:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19543:67:0;;;;;;;;;;;;;;;27105:12:::1;:28:::0;27030:111::o;21305:21::-;;;-1:-1:-1;;;;;21305:21:0;;:::o;21400:24::-;;;;:::o;21364:29::-;;;-1:-1:-1;;;;;21364:29:0;;:::o;23382:305::-;23421:17;;:::i;:::-;-1:-1:-1;23453:10:0;23441:24;;;;:10;:24;;;;;;;;23421:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23483:24;;;;;;23476:31;;;;;;;;;;;;-1:-1:-1;;23476:31:0;;;;;;23529:14;;23601:9;;23571:41;;-1:-1:-1;;;23571:41:0;;;;;;;;;;;-1:-1:-1;;;;;23529:14:0;;;;23520:34;;23564:4;;23578;23571:28;;;;;;:41;;;;;23441:24;;23571:41;;;;;;:28;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23571:41:0;23520:94;;;-1:-1:-1;;;;;;23520:94:0;;;;;;;-1:-1:-1;;;;;23520:94:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23520:94:0;;;;;;;-1:-1:-1;23520:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23665:12:0;;23625:54;;-1:-1:-1;;;;;;23633:3:0;23625:26;;-1:-1:-1;23653:10:0;;23625:26;:54::i;25953:225::-;26037:6;;-1:-1:-1;;;;;26037:6:0;26023:10;:20;26014:31;;;;;;26069:10;;:25;;26085:7;26069:14;:25::i;:::-;26056:10;:38;26138:6;;26105:65;;-1:-1:-1;;;;;26113:4:0;26105:31;;;26138:6;26154:4;26161:7;26105:31;:65::i;336:181::-;394:7;426:5;;;450:6;;;;442:46;;;;;-1:-1:-1;;;442:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;508:1;336:181;-1:-1:-1;;;336:181:0:o;15713:177::-;15823:58;;;-1:-1:-1;;;;;15823:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15823:58:0;-1:-1:-1;;;15823:58:0;;;15796:86;;15816:5;;15796:19;:86::i;:::-;15713:177;;;:::o;15898:205::-;16026:68;;;-1:-1:-1;;;;;16026:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16026:68:0;-1:-1:-1;;;16026:68:0;;;15999:96;;16019:5;;15999:19;:96::i;:::-;15898:205;;;;:::o;800:136::-;858:7;885:43;889:1;892;885:43;;;;;;;;;;;;;;;;;:3;:43::i;18018:761::-;18442:23;18468:69;18496:4;18468:69;;;;;;;;;;;;;;;;;18476:5;-1:-1:-1;;;;;18468:27:0;;;:69;;;;;:::i;:::-;18552:17;;18442:95;;-1:-1:-1;18552:21:0;18548:224;;18694:10;18683:30;;;;;;;;;;;;;;;-1:-1:-1;18683:30:0;18675:85;;;;-1:-1:-1;;;18675:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1239:192;1325:7;1361:12;1353:6;;;;1345:29;;;;-1:-1:-1;;;1345:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1397:5:0;;;1239:192::o;9772:196::-;9875:12;9907:53;9930:6;9938:4;9944:1;9947:12;9907:22;:53::i;:::-;9900:60;9772:196;-1:-1:-1;;;;9772:196:0:o;11363:979::-;11493:12;11526:18;11537:6;11526:10;:18::i;:::-;11518:60;;;;;-1:-1:-1;;;11518:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11652:12;11666:23;11693:6;-1:-1:-1;;;;;11693:11:0;11713:8;11724:4;11693:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11693:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11651:78;;;;11744:7;11740:595;;;11775:10;-1:-1:-1;11768:17:0;;-1:-1:-1;11768:17:0;11740:595;11889:17;;:21;11885:439;;12152:10;12146:17;12213:15;12200:10;12196:2;12192:19;12185:44;12100:148;12288:20;;-1:-1:-1;;;12288:20:0;;;;;;;;;;;;;;;;;12295:12;;12288:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6852:422;7219:20;7258:8;;;6852:422::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://6a7a2ee0317be96f184d65c2d58463c6bb051512fac3848928b025347efdfa6c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.