Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 22,333 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Exit | 20225480 | 87 days ago | IN | 0 ETH | 0.00134469 | ||||
Exit | 19907026 | 132 days ago | IN | 0 ETH | 0.00076327 | ||||
Exit | 19876619 | 136 days ago | IN | 0 ETH | 0.0015284 | ||||
Withdraw | 19244458 | 224 days ago | IN | 0 ETH | 0.00134896 | ||||
Get Reward | 19244452 | 224 days ago | IN | 0 ETH | 0.00128205 | ||||
Exit | 17705571 | 440 days ago | IN | 0 ETH | 0.0017259 | ||||
Exit | 17694872 | 442 days ago | IN | 0 ETH | 0.00690527 | ||||
Exit | 17607328 | 454 days ago | IN | 0 ETH | 0.00207522 | ||||
Exit | 17595710 | 455 days ago | IN | 0 ETH | 0.00207272 | ||||
Exit | 17388243 | 485 days ago | IN | 0 ETH | 0.00589975 | ||||
Exit | 17249962 | 504 days ago | IN | 0 ETH | 0.00412853 | ||||
Exit | 17229038 | 507 days ago | IN | 0 ETH | 0.00564455 | ||||
Exit | 17111923 | 524 days ago | IN | 0 ETH | 0.00447207 | ||||
Exit | 16874956 | 557 days ago | IN | 0 ETH | 0.00143827 | ||||
Exit | 16793364 | 569 days ago | IN | 0 ETH | 0.00773061 | ||||
Exit | 16786447 | 570 days ago | IN | 0 ETH | 0.00545966 | ||||
Exit | 16745244 | 575 days ago | IN | 0 ETH | 0.00369144 | ||||
Exit | 16723073 | 578 days ago | IN | 0 ETH | 0.00228318 | ||||
Exit | 16668143 | 586 days ago | IN | 0 ETH | 0.00265777 | ||||
Exit | 16665978 | 587 days ago | IN | 0 ETH | 0.00242462 | ||||
Exit | 16632121 | 591 days ago | IN | 0 ETH | 0.00282915 | ||||
Exit | 16457202 | 616 days ago | IN | 0 ETH | 0.00208994 | ||||
Exit | 16422062 | 621 days ago | IN | 0 ETH | 0.00343124 | ||||
Exit | 16292307 | 639 days ago | IN | 0 ETH | 0.00233777 | ||||
Exit | 16266393 | 642 days ago | IN | 0 ETH | 0.00162755 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
12135902 | 1279 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
FeiStakingRewards
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.6.0; pragma experimental ABIEncoderV2; import "../external/StakingRewardsV2.sol"; /// @title A StakingRewards contract for earning TRIBE with staked FEI/TRIBE LP tokens /// @author Fei Protocol /// @notice deposited LP tokens will earn TRIBE over time at a linearly decreasing rate contract FeiStakingRewards is StakingRewardsV2 { constructor( address _distributor, address _tribe, address _pair, uint256 _duration ) public StakingRewardsV2(_distributor, _tribe, _pair, _duration) {} }
pragma solidity ^0.6.6; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import { Math } from "@openzeppelin/contracts/math/Math.sol"; import { SafeMath } from "@openzeppelin/contracts/math/SafeMath.sol"; import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; import { ReentrancyGuard } from "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; // Inheritance import { RewardsDistributionRecipient } from "./RewardsDistributionRecipient.sol"; // forked from https://github.com/SetProtocol/index-coop-contracts/blob/master/contracts/staking/StakingRewardsV2.sol // NOTE: V2 allows setting of rewardsDuration in constructor contract StakingRewardsV2 is RewardsDistributionRecipient, ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; /* ========== STATE VARIABLES ========== */ IERC20 public rewardsToken; IERC20 public stakingToken; uint256 public periodFinish = 0; uint256 public rewardRate = 0; uint256 public rewardsDuration; uint256 public lastUpdateTime; uint256 public rewardPerTokenStored; mapping(address => uint256) public userRewardPerTokenPaid; mapping(address => uint256) public rewards; uint256 private _totalSupply; mapping(address => uint256) private _balances; /* ========== CONSTRUCTOR ========== */ constructor( address _rewardsDistribution, address _rewardsToken, address _stakingToken, uint256 _rewardsDuration ) public { rewardsToken = IERC20(_rewardsToken); stakingToken = IERC20(_stakingToken); rewardsDistribution = _rewardsDistribution; rewardsDuration = _rewardsDuration; } /* ========== VIEWS ========== */ function totalSupply() external view returns (uint256) { return _totalSupply; } function balanceOf(address account) external view returns (uint256) { return _balances[account]; } function lastTimeRewardApplicable() public view returns (uint256) { return Math.min(block.timestamp, periodFinish); } function rewardPerToken() public view returns (uint256) { if (_totalSupply == 0) { return rewardPerTokenStored; } return rewardPerTokenStored.add( lastTimeRewardApplicable().sub(lastUpdateTime).mul(rewardRate).mul(1e18).div(_totalSupply) ); } function earned(address account) public view returns (uint256) { return _balances[account].mul(rewardPerToken().sub(userRewardPerTokenPaid[account])).div(1e18).add(rewards[account]); } function getRewardForDuration() external view returns (uint256) { return rewardRate.mul(rewardsDuration); } /* ========== MUTATIVE FUNCTIONS ========== */ function stake(uint256 amount) external nonReentrant updateReward(msg.sender) { require(amount > 0, "Cannot stake 0"); _totalSupply = _totalSupply.add(amount); _balances[msg.sender] = _balances[msg.sender].add(amount); stakingToken.safeTransferFrom(msg.sender, address(this), amount); emit Staked(msg.sender, amount); } function withdraw(uint256 amount) public nonReentrant updateReward(msg.sender) { require(amount > 0, "Cannot withdraw 0"); _totalSupply = _totalSupply.sub(amount); _balances[msg.sender] = _balances[msg.sender].sub(amount); stakingToken.safeTransfer(msg.sender, amount); emit Withdrawn(msg.sender, amount); } function getReward() public nonReentrant updateReward(msg.sender) { uint256 reward = rewards[msg.sender]; if (reward > 0) { rewards[msg.sender] = 0; rewardsToken.safeTransfer(msg.sender, reward); emit RewardPaid(msg.sender, reward); } } function exit() external { withdraw(_balances[msg.sender]); getReward(); } /* ========== RESTRICTED FUNCTIONS ========== */ function notifyRewardAmount(uint256 reward) external override onlyRewardsDistribution updateReward(address(0)) { if (block.timestamp >= periodFinish) { rewardRate = reward.div(rewardsDuration); } else { uint256 remaining = periodFinish.sub(block.timestamp); uint256 leftover = remaining.mul(rewardRate); rewardRate = reward.add(leftover).div(rewardsDuration); } // Ensure the provided reward amount is not more than the balance in the contract. // This keeps the reward rate in the right range, preventing overflows due to // very high values of rewardRate in the earned and rewardsPerToken functions; // Reward + leftover must be less than 2^256 / 10^18 to avoid overflow. uint balance = rewardsToken.balanceOf(address(this)); require(rewardRate <= balance.div(rewardsDuration), "Provided reward too high"); lastUpdateTime = block.timestamp; periodFinish = block.timestamp.add(rewardsDuration); emit RewardAdded(reward); } // Added to support recovering LP Rewards from other systems such as BAL to be distributed to holders function recoverERC20(address tokenAddress, address to, uint256 tokenAmount) external onlyRewardsDistribution { require(tokenAddress != address(stakingToken), "Cannot withdraw the staking token"); require(tokenAddress != address(rewardsToken), "Cannot withdraw the rewards token"); IERC20(tokenAddress).safeTransfer(to, tokenAmount); emit Recovered(tokenAddress, to, tokenAmount); } /* ========== MODIFIERS ========== */ modifier updateReward(address account) { rewardPerTokenStored = rewardPerToken(); lastUpdateTime = lastTimeRewardApplicable(); if (account != address(0)) { rewards[account] = earned(account); userRewardPerTokenPaid[account] = rewardPerTokenStored; } _; } /* ========== EVENTS ========== */ event RewardAdded(uint256 reward); event Staked(address indexed user, uint256 amount); event Withdrawn(address indexed user, uint256 amount); event RewardPaid(address indexed user, uint256 reward); event Recovered(address indexed tokenAddress, address indexed to, uint256 amount); }
pragma solidity ^0.6.6; abstract contract RewardsDistributionRecipient { address public rewardsDistribution; function notifyRewardAmount(uint256 reward) external virtual; modifier onlyRewardsDistribution() { require(msg.sender == rewardsDistribution, "Caller is not RewardsDistribution contract"); _; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @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) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @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) { 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, reverting 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. 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 mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * 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); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * 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); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. 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 mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "./IERC20.sol"; import "../../math/SafeMath.sol"; import "../../utils/Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using 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"); } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // 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); } /** * @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.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // 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); } } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
{ "metadata": { "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_distributor","type":"address"},{"internalType":"address","name":"_tribe","type":"address"},{"internalType":"address","name":"_pair","type":"address"},{"internalType":"uint256","name":"_duration","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRewardForDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsDistribution","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600455600060055534801561001a57600080fd5b50604051620013ec380380620013ec83398101604081905261003b916100a5565b60018055600280546001600160a01b03199081166001600160a01b0395861617909155600380548216938516939093179092556000805490921693909216929092179091556006556100f2565b80516001600160a01b038116811461009f57600080fd5b92915050565b600080600080608085870312156100ba578384fd5b6100c48686610088565b93506100d38660208701610088565b92506100e28660408701610088565b6060959095015193969295505050565b6112ea80620001026000396000f3fe608060405234801561001057600080fd5b50600436106101415760003560e01c806372f702f3116100b8578063c8f33c911161007c578063c8f33c9114610243578063cd3daf9d1461024b578063d1af0c7d14610253578063df136d651461025b578063e9fad8ee14610263578063ebe2b12b1461026b57610141565b806372f702f3146102055780637b0a47ee1461020d57806380faa57d146102155780638b8763471461021d578063a694fc3a1461023057610141565b80632e1a7d4d1161010a5780632e1a7d4d146101a7578063386a9525146101ba5780633c6b16ab146101c25780633d18b912146101d55780633fc6df6e146101dd57806370a08231146101f257610141565b80628cc262146101465780630700037d1461016f5780631171bda91461018257806318160ddd146101975780631c1f78eb1461019f575b600080fd5b610159610154366004610dd6565b610273565b6040516101669190611267565b60405180910390f35b61015961017d366004610dd6565b610309565b610195610190366004610dfd565b61031b565b005b610159610414565b61015961041b565b6101956101b5366004610e5d565b610439565b610159610587565b6101956101d0366004610e5d565b61058d565b610195610799565b6101e561089c565b6040516101669190610ea9565b610159610200366004610dd6565b6108ab565b6101e56108c6565b6101596108d5565b6101596108db565b61015961022b366004610dd6565b6108e9565b61019561023e366004610e5d565b6108fb565b610159610a3a565b610159610a40565b6101e5610a9a565b610159610aa9565b610195610aaf565b610159610ad2565b6001600160a01b0381166000908152600a6020908152604080832054600990925282205461030391906102f790670de0b6b3a7640000906102eb906102c6906102ba610a40565b9063ffffffff610ad816565b6001600160a01b0388166000908152600c60205260409020549063ffffffff610b0016565b9063ffffffff610b4116565b9063ffffffff610b7316565b92915050565b600a6020526000908152604090205481565b6000546001600160a01b0316331461034e5760405162461bcd60e51b81526004016103459061111a565b60405180910390fd5b6003546001600160a01b038481169116141561037c5760405162461bcd60e51b8152600401610345906111e5565b6002546001600160a01b03848116911614156103aa5760405162461bcd60e51b815260040161034590611226565b6103c46001600160a01b038416838363ffffffff610b9816565b816001600160a01b0316836001600160a01b03167ffff3b3844276f57024e0b42afec1a37f75db36511e43819a4f2a63ab7862b648836040516104079190611267565b60405180910390a3505050565b600b545b90565b6000610434600654600554610b0090919063ffffffff16565b905090565b6002600154141561045c5760405162461bcd60e51b8152600401610345906111ae565b60026001553361046a610a40565b6008556104756108db565b6007556001600160a01b038116156104bc5761049081610273565b6001600160a01b0382166000908152600a60209081526040808320939093556008546009909152919020555b600082116104dc5760405162461bcd60e51b815260040161034590611040565b600b546104ef908363ffffffff610ad816565b600b55336000908152600c6020526040902054610512908363ffffffff610ad816565b336000818152600c602052604090209190915560035461053e916001600160a01b039091169084610b98565b336001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040516105779190611267565b60405180910390a2505060018055565b60065481565b6000546001600160a01b031633146105b75760405162461bcd60e51b81526004016103459061111a565b60006105c1610a40565b6008556105cc6108db565b6007556001600160a01b03811615610613576105e781610273565b6001600160a01b0382166000908152600a60209081526040808320939093556008546009909152919020555b60045442106106385760065461063090839063ffffffff610b4116565b600555610687565b60045460009061064e904263ffffffff610ad816565b9050600061066760055483610b0090919063ffffffff16565b600654909150610681906102eb868463ffffffff610b7316565b60055550505b6002546040516370a0823160e01b81526000916001600160a01b0316906370a08231906106b8903090600401610ea9565b60206040518083038186803b1580156106d057600080fd5b505afa1580156106e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107089190610e75565b905061071f60065482610b4190919063ffffffff16565b60055411156107405760405162461bcd60e51b8152600401610345906110ac565b426007819055600654610759919063ffffffff610b7316565b6004556040517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9061078c908590611267565b60405180910390a1505050565b600260015414156107bc5760405162461bcd60e51b8152600401610345906111ae565b6002600155336107ca610a40565b6008556107d56108db565b6007556001600160a01b0381161561081c576107f081610273565b6001600160a01b0382166000908152600a60209081526040808320939093556008546009909152919020555b336000908152600a6020526040902054801561089457336000818152600a602052604081205560025461085b916001600160a01b039091169083610b98565b336001600160a01b03167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486826040516105779190611267565b505060018055565b6000546001600160a01b031681565b6001600160a01b03166000908152600c602052604090205490565b6003546001600160a01b031681565b60055481565b600061043442600454610bf3565b60096020526000908152604090205481565b6002600154141561091e5760405162461bcd60e51b8152600401610345906111ae565b60026001553361092c610a40565b6008556109376108db565b6007556001600160a01b0381161561097e5761095281610273565b6001600160a01b0382166000908152600a60209081526040808320939093556008546009909152919020555b6000821161099e5760405162461bcd60e51b815260040161034590610f2d565b600b546109b1908363ffffffff610b7316565b600b55336000908152600c60205260409020546109d4908363ffffffff610b7316565b336000818152600c6020526040902091909155600354610a01916001600160a01b03909116903085610c09565b336001600160a01b03167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d836040516105779190611267565b60075481565b6000600b5460001415610a565750600854610418565b610434610a8b600b546102eb670de0b6b3a7640000610a7f600554610a7f6007546102ba6108db565b9063ffffffff610b0016565b6008549063ffffffff610b7316565b6002546001600160a01b031681565b60085481565b336000908152600c6020526040902054610ac890610439565b610ad0610799565b565b60045481565b600082821115610afa5760405162461bcd60e51b815260040161034590610f8c565b50900390565b600082610b0f57506000610303565b82820282848281610b1c57fe5b0414610b3a5760405162461bcd60e51b81526004016103459061106b565b9392505050565b6000808211610b625760405162461bcd60e51b815260040161034590611009565b818381610b6b57fe5b049392505050565b600082820183811015610b3a5760405162461bcd60e51b815260040161034590610f55565b610bee8363a9059cbb60e01b8484604051602401610bb7929190610ee1565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610c30565b505050565b6000818310610c025781610b3a565b5090919050565b610c2a846323b872dd60e01b858585604051602401610bb793929190610ebd565b50505050565b6060610c85826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610cbf9092919063ffffffff16565b805190915015610bee5780806020019051810190610ca39190610e3d565b610bee5760405162461bcd60e51b815260040161034590611164565b6060610cce8484600085610cd6565b949350505050565b606082471015610cf85760405162461bcd60e51b815260040161034590610fc3565b610d0185610d97565b610d1d5760405162461bcd60e51b8152600401610345906110e3565b60006060866001600160a01b03168587604051610d3a9190610e8d565b60006040518083038185875af1925050503d8060008114610d77576040519150601f19603f3d011682016040523d82523d6000602084013e610d7c565b606091505b5091509150610d8c828286610d9d565b979650505050505050565b3b151590565b60608315610dac575081610b3a565b825115610dbc5782518084602001fd5b8160405162461bcd60e51b81526004016103459190610efa565b600060208284031215610de7578081fd5b81356001600160a01b0381168114610b3a578182fd5b600080600060608486031215610e11578182fd5b8335610e1c8161129c565b92506020840135610e2c8161129c565b929592945050506040919091013590565b600060208284031215610e4e578081fd5b81518015158114610b3a578182fd5b600060208284031215610e6e578081fd5b5035919050565b600060208284031215610e86578081fd5b5051919050565b60008251610e9f818460208701611270565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6000602082528251806020840152610f19816040850160208701611270565b601f01601f19169190910160400192915050565b6020808252600e908201526d043616e6e6f74207374616b6520360941b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b602080825260119082015270043616e6e6f74207769746864726177203607c1b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526018908201527f50726f76696465642072657761726420746f6f20686967680000000000000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f43616c6c6572206973206e6f742052657761726473446973747269627574696f6040820152691b8818dbdb9d1c9858dd60b21b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526021908201527f43616e6e6f7420776974686472617720746865207374616b696e6720746f6b656040820152603760f91b606082015260800190565b60208082526021908201527f43616e6e6f7420776974686472617720746865207265776172647320746f6b656040820152603760f91b606082015260800190565b90815260200190565b60005b8381101561128b578181015183820152602001611273565b83811115610c2a5750506000910152565b6001600160a01b03811681146112b157600080fd5b5056fea26469706673582212201e130e8e926b04fcbaa010e0868a99f9f4e646f2334d2c4b5faf0cd8aa27994d64736f6c63430006060033000000000000000000000000ef1a94af192a88859eaf3f3d8c1b9705542174c5000000000000000000000000c7283b66eb1eb5fb86327f08e1b5816b0720212b0000000000000000000000009928e4046d7c6513326ccea028cd3e7a91c7590a0000000000000000000000000000000000000000000000000000000000093a80
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101415760003560e01c806372f702f3116100b8578063c8f33c911161007c578063c8f33c9114610243578063cd3daf9d1461024b578063d1af0c7d14610253578063df136d651461025b578063e9fad8ee14610263578063ebe2b12b1461026b57610141565b806372f702f3146102055780637b0a47ee1461020d57806380faa57d146102155780638b8763471461021d578063a694fc3a1461023057610141565b80632e1a7d4d1161010a5780632e1a7d4d146101a7578063386a9525146101ba5780633c6b16ab146101c25780633d18b912146101d55780633fc6df6e146101dd57806370a08231146101f257610141565b80628cc262146101465780630700037d1461016f5780631171bda91461018257806318160ddd146101975780631c1f78eb1461019f575b600080fd5b610159610154366004610dd6565b610273565b6040516101669190611267565b60405180910390f35b61015961017d366004610dd6565b610309565b610195610190366004610dfd565b61031b565b005b610159610414565b61015961041b565b6101956101b5366004610e5d565b610439565b610159610587565b6101956101d0366004610e5d565b61058d565b610195610799565b6101e561089c565b6040516101669190610ea9565b610159610200366004610dd6565b6108ab565b6101e56108c6565b6101596108d5565b6101596108db565b61015961022b366004610dd6565b6108e9565b61019561023e366004610e5d565b6108fb565b610159610a3a565b610159610a40565b6101e5610a9a565b610159610aa9565b610195610aaf565b610159610ad2565b6001600160a01b0381166000908152600a6020908152604080832054600990925282205461030391906102f790670de0b6b3a7640000906102eb906102c6906102ba610a40565b9063ffffffff610ad816565b6001600160a01b0388166000908152600c60205260409020549063ffffffff610b0016565b9063ffffffff610b4116565b9063ffffffff610b7316565b92915050565b600a6020526000908152604090205481565b6000546001600160a01b0316331461034e5760405162461bcd60e51b81526004016103459061111a565b60405180910390fd5b6003546001600160a01b038481169116141561037c5760405162461bcd60e51b8152600401610345906111e5565b6002546001600160a01b03848116911614156103aa5760405162461bcd60e51b815260040161034590611226565b6103c46001600160a01b038416838363ffffffff610b9816565b816001600160a01b0316836001600160a01b03167ffff3b3844276f57024e0b42afec1a37f75db36511e43819a4f2a63ab7862b648836040516104079190611267565b60405180910390a3505050565b600b545b90565b6000610434600654600554610b0090919063ffffffff16565b905090565b6002600154141561045c5760405162461bcd60e51b8152600401610345906111ae565b60026001553361046a610a40565b6008556104756108db565b6007556001600160a01b038116156104bc5761049081610273565b6001600160a01b0382166000908152600a60209081526040808320939093556008546009909152919020555b600082116104dc5760405162461bcd60e51b815260040161034590611040565b600b546104ef908363ffffffff610ad816565b600b55336000908152600c6020526040902054610512908363ffffffff610ad816565b336000818152600c602052604090209190915560035461053e916001600160a01b039091169084610b98565b336001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040516105779190611267565b60405180910390a2505060018055565b60065481565b6000546001600160a01b031633146105b75760405162461bcd60e51b81526004016103459061111a565b60006105c1610a40565b6008556105cc6108db565b6007556001600160a01b03811615610613576105e781610273565b6001600160a01b0382166000908152600a60209081526040808320939093556008546009909152919020555b60045442106106385760065461063090839063ffffffff610b4116565b600555610687565b60045460009061064e904263ffffffff610ad816565b9050600061066760055483610b0090919063ffffffff16565b600654909150610681906102eb868463ffffffff610b7316565b60055550505b6002546040516370a0823160e01b81526000916001600160a01b0316906370a08231906106b8903090600401610ea9565b60206040518083038186803b1580156106d057600080fd5b505afa1580156106e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107089190610e75565b905061071f60065482610b4190919063ffffffff16565b60055411156107405760405162461bcd60e51b8152600401610345906110ac565b426007819055600654610759919063ffffffff610b7316565b6004556040517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9061078c908590611267565b60405180910390a1505050565b600260015414156107bc5760405162461bcd60e51b8152600401610345906111ae565b6002600155336107ca610a40565b6008556107d56108db565b6007556001600160a01b0381161561081c576107f081610273565b6001600160a01b0382166000908152600a60209081526040808320939093556008546009909152919020555b336000908152600a6020526040902054801561089457336000818152600a602052604081205560025461085b916001600160a01b039091169083610b98565b336001600160a01b03167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486826040516105779190611267565b505060018055565b6000546001600160a01b031681565b6001600160a01b03166000908152600c602052604090205490565b6003546001600160a01b031681565b60055481565b600061043442600454610bf3565b60096020526000908152604090205481565b6002600154141561091e5760405162461bcd60e51b8152600401610345906111ae565b60026001553361092c610a40565b6008556109376108db565b6007556001600160a01b0381161561097e5761095281610273565b6001600160a01b0382166000908152600a60209081526040808320939093556008546009909152919020555b6000821161099e5760405162461bcd60e51b815260040161034590610f2d565b600b546109b1908363ffffffff610b7316565b600b55336000908152600c60205260409020546109d4908363ffffffff610b7316565b336000818152600c6020526040902091909155600354610a01916001600160a01b03909116903085610c09565b336001600160a01b03167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d836040516105779190611267565b60075481565b6000600b5460001415610a565750600854610418565b610434610a8b600b546102eb670de0b6b3a7640000610a7f600554610a7f6007546102ba6108db565b9063ffffffff610b0016565b6008549063ffffffff610b7316565b6002546001600160a01b031681565b60085481565b336000908152600c6020526040902054610ac890610439565b610ad0610799565b565b60045481565b600082821115610afa5760405162461bcd60e51b815260040161034590610f8c565b50900390565b600082610b0f57506000610303565b82820282848281610b1c57fe5b0414610b3a5760405162461bcd60e51b81526004016103459061106b565b9392505050565b6000808211610b625760405162461bcd60e51b815260040161034590611009565b818381610b6b57fe5b049392505050565b600082820183811015610b3a5760405162461bcd60e51b815260040161034590610f55565b610bee8363a9059cbb60e01b8484604051602401610bb7929190610ee1565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610c30565b505050565b6000818310610c025781610b3a565b5090919050565b610c2a846323b872dd60e01b858585604051602401610bb793929190610ebd565b50505050565b6060610c85826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610cbf9092919063ffffffff16565b805190915015610bee5780806020019051810190610ca39190610e3d565b610bee5760405162461bcd60e51b815260040161034590611164565b6060610cce8484600085610cd6565b949350505050565b606082471015610cf85760405162461bcd60e51b815260040161034590610fc3565b610d0185610d97565b610d1d5760405162461bcd60e51b8152600401610345906110e3565b60006060866001600160a01b03168587604051610d3a9190610e8d565b60006040518083038185875af1925050503d8060008114610d77576040519150601f19603f3d011682016040523d82523d6000602084013e610d7c565b606091505b5091509150610d8c828286610d9d565b979650505050505050565b3b151590565b60608315610dac575081610b3a565b825115610dbc5782518084602001fd5b8160405162461bcd60e51b81526004016103459190610efa565b600060208284031215610de7578081fd5b81356001600160a01b0381168114610b3a578182fd5b600080600060608486031215610e11578182fd5b8335610e1c8161129c565b92506020840135610e2c8161129c565b929592945050506040919091013590565b600060208284031215610e4e578081fd5b81518015158114610b3a578182fd5b600060208284031215610e6e578081fd5b5035919050565b600060208284031215610e86578081fd5b5051919050565b60008251610e9f818460208701611270565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6000602082528251806020840152610f19816040850160208701611270565b601f01601f19169190910160400192915050565b6020808252600e908201526d043616e6e6f74207374616b6520360941b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252601a908201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604082015260600190565b602080825260119082015270043616e6e6f74207769746864726177203607c1b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526018908201527f50726f76696465642072657761726420746f6f20686967680000000000000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f43616c6c6572206973206e6f742052657761726473446973747269627574696f6040820152691b8818dbdb9d1c9858dd60b21b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526021908201527f43616e6e6f7420776974686472617720746865207374616b696e6720746f6b656040820152603760f91b606082015260800190565b60208082526021908201527f43616e6e6f7420776974686472617720746865207265776172647320746f6b656040820152603760f91b606082015260800190565b90815260200190565b60005b8381101561128b578181015183820152602001611273565b83811115610c2a5750506000910152565b6001600160a01b03811681146112b157600080fd5b5056fea26469706673582212201e130e8e926b04fcbaa010e0868a99f9f4e646f2334d2c4b5faf0cd8aa27994d64736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ef1a94af192a88859eaf3f3d8c1b9705542174c5000000000000000000000000c7283b66eb1eb5fb86327f08e1b5816b0720212b0000000000000000000000009928e4046d7c6513326ccea028cd3e7a91c7590a0000000000000000000000000000000000000000000000000000000000093a80
-----Decoded View---------------
Arg [0] : _distributor (address): 0xEf1a94AF192A88859EAF3F3D8C1B9705542174C5
Arg [1] : _tribe (address): 0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B
Arg [2] : _pair (address): 0x9928e4046d7c6513326cCeA028cD3e7a91c7590A
Arg [3] : _duration (uint256): 604800
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000ef1a94af192a88859eaf3f3d8c1b9705542174c5
Arg [1] : 000000000000000000000000c7283b66eb1eb5fb86327f08e1b5816b0720212b
Arg [2] : 0000000000000000000000009928e4046d7c6513326ccea028cd3e7a91c7590a
Arg [3] : 0000000000000000000000000000000000000000000000000000000000093a80
Deployed Bytecode Sourcemap
303:257:2:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;303:257:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;2437:196:1;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1182:42;;;;;;;;;:::i;5187:419::-;;;;;;;;;:::i;:::-;;1761:91;;;:::i;2639:119::-;;;:::i;3185:351::-;;;;;;;;;:::i;1006:30::-;;;:::i;4002:1073::-;;;;;;;;;:::i;3542:300::-;;;:::i;78:34:0:-;;;:::i;:::-;;;;;;;;1858:110:1;;;;;;;;;:::i;902:26::-;;;:::i;971:29::-;;;:::i;1974:129::-;;;:::i;1119:57::-;;;;;;;;;:::i;2816:363::-;;;;;;;;;:::i;1042:29::-;;;:::i;2109:322::-;;;:::i;870:26::-;;;:::i;1077:35::-;;;:::i;3848:94::-;;;:::i;934:31::-;;;:::i;2437:196::-;-1:-1:-1;;;;;2609:16:1;;2491:7;2609:16;;;:7;:16;;;;;;;;;2561:22;:31;;;;;;2517:109;;2609:16;2517:87;;2599:4;;2517:77;;2540:53;;:16;:14;:16::i;:::-;:20;:53;:20;:53;:::i;:::-;-1:-1:-1;;;;;2517:18:1;;;;;;:9;:18;;;;;;;:77;:22;:77;:::i;:::-;:81;:87;:81;:87;:::i;:::-;:91;:109;:91;:109;:::i;:::-;2510:116;2437:196;-1:-1:-1;;2437:196:1:o;1182:42::-;;;;;;;;;;;;;:::o;5187:419::-;253:19:0;;-1:-1:-1;;;;;253:19:0;239:10;:33;231:88;;;;-1:-1:-1;;;231:88:0;;;;;;;;;;;;;;;;;5339:12:1::1;::::0;-1:-1:-1;;;;;5315:37:1;;::::1;5339:12:::0;::::1;5315:37;;5307:83;;;;-1:-1:-1::0;;;5307:83:1::1;;;;;;;;;5432:12;::::0;-1:-1:-1;;;;;5408:37:1;;::::1;5432:12:::0;::::1;5408:37;;5400:83;;;;-1:-1:-1::0;;;5400:83:1::1;;;;;;;;;5494:50;-1:-1:-1::0;;;;;5494:33:1;::::1;5528:2:::0;5532:11;5494:50:::1;:33;:50;:::i;:::-;5583:2;-1:-1:-1::0;;;;;5559:40:1::1;5569:12;-1:-1:-1::0;;;;;5559:40:1::1;;5587:11;5559:40;;;;;;;;;;;;;;;5187:419:::0;;;:::o;1761:91::-;1833:12;;1761:91;;:::o;2639:119::-;2694:7;2720:31;2735:15;;2720:10;;:14;;:31;;;;:::i;:::-;2713:38;;2639:119;:::o;3185:351::-;1688:1:8;2277:7;;:19;;2269:63;;;;-1:-1:-1;;;2269:63:8;;;;;;;;;1688:1;2407:7;:18;3252:10:1::1;5727:16;:14;:16::i;:::-;5704:20;:39:::0;5770:26:::1;:24;:26::i;:::-;5753:14;:43:::0;-1:-1:-1;;;;;5810:21:1;::::1;::::0;5806:154:::1;;5866:15;5873:7;5866:6;:15::i;:::-;-1:-1:-1::0;;;;;5847:16:1;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;5929:20:::1;::::0;5895:22:::1;:31:::0;;;;;;:54;5806:154:::1;3291:1:::2;3282:6;:10;3274:40;;;;-1:-1:-1::0;;;3274:40:1::2;;;;;;;;;3339:12;::::0;:24:::2;::::0;3356:6;3339:24:::2;:16;:24;:::i;:::-;3324:12;:39:::0;3407:10:::2;3397:21;::::0;;;:9:::2;:21;::::0;;;;;:33:::2;::::0;3423:6;3397:33:::2;:25;:33;:::i;:::-;3383:10;3373:21;::::0;;;:9:::2;:21;::::0;;;;:57;;;;3440:12:::2;::::0;:45:::2;::::0;-1:-1:-1;;;;;3440:12:1;;::::2;::::0;3478:6;3440:25:::2;:45::i;:::-;3510:10;-1:-1:-1::0;;;;;3500:29:1::2;;3522:6;3500:29;;;;;;;;;;;;;;;-1:-1:-1::0;;1645:1:8;2580:22;;3185:351:1:o;1006:30::-;;;;:::o;4002:1073::-;253:19:0;;-1:-1:-1;;;;;253:19:0;239:10;:33;231:88;;;;-1:-1:-1;;;231:88:0;;;;;;;;;4109:1:1::1;5727:16;:14;:16::i;:::-;5704:20;:39:::0;5770:26:::1;:24;:26::i;:::-;5753:14;:43:::0;-1:-1:-1;;;;;5810:21:1;::::1;::::0;5806:154:::1;;5866:15;5873:7;5866:6;:15::i;:::-;-1:-1:-1::0;;;;;5847:16:1;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;5929:20:::1;::::0;5895:22:::1;:31:::0;;;;;;:54;5806:154:::1;4146:12:::2;;4127:15;:31;4123:312;;4198:15;::::0;4187:27:::2;::::0;:6;;:27:::2;:10;:27;:::i;:::-;4174:10;:40:::0;4123:312:::2;;;4265:12;::::0;4245:17:::2;::::0;4265:33:::2;::::0;4282:15:::2;4265:33;:16;:33;:::i;:::-;4245:53;;4312:16;4331:25;4345:10;;4331:9;:13;;:25;;;;:::i;:::-;4408:15;::::0;4312:44;;-1:-1:-1;4383:41:1::2;::::0;:20:::2;:6:::0;4312:44;4383:20:::2;:10;:20;:::i;:41::-;4370:10;:54:::0;-1:-1:-1;;4123:312:1::2;4804:12;::::0;:37:::2;::::0;-1:-1:-1;;;4804:37:1;;4789:12:::2;::::0;-1:-1:-1;;;;;4804:12:1::2;::::0;:22:::2;::::0;:37:::2;::::0;4835:4:::2;::::0;4804:37:::2;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;4804:37:1;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;4804:37:1;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;4804:37:1;;;;;;;;;4789:52;;4873:28;4885:15;;4873:7;:11;;:28;;;;:::i;:::-;4859:10;;:42;;4851:79;;;;-1:-1:-1::0;;;4851:79:1::2;;;;;;;;;4958:15;4941:14;:32:::0;;;5018:15:::2;::::0;4998:36:::2;::::0;4958:15;4998:36:::2;:19;:36;:::i;:::-;4983:12;:51:::0;5049:19:::2;::::0;::::2;::::0;::::2;::::0;5061:6;;5049:19:::2;;;;;;;;;;5969:1;329::0::1;4002:1073:1::0;:::o;3542:300::-;1688:1:8;2277:7;;:19;;2269:63;;;;-1:-1:-1;;;2269:63:8;;;;;;;;;1688:1;2407:7;:18;3596:10:1::1;5727:16;:14;:16::i;:::-;5704:20;:39:::0;5770:26:::1;:24;:26::i;:::-;5753:14;:43:::0;-1:-1:-1;;;;;5810:21:1;::::1;::::0;5806:154:::1;;5866:15;5873:7;5866:6;:15::i;:::-;-1:-1:-1::0;;;;;5847:16:1;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;5929:20:::1;::::0;5895:22:::1;:31:::0;;;;;;:54;5806:154:::1;3643:10:::2;3618:14;3635:19:::0;;;:7:::2;:19;::::0;;;;;3668:10;;3664:172:::2;;3702:10;3716:1;3694:19:::0;;;:7:::2;:19;::::0;;;;:23;3731:12:::2;::::0;:45:::2;::::0;-1:-1:-1;;;;;3731:12:1;;::::2;::::0;3769:6;3731:25:::2;:45::i;:::-;3806:10;-1:-1:-1::0;;;;;3795:30:1::2;;3818:6;3795:30;;;;;;;3664:172;-1:-1:-1::0;;1645:1:8;2580:22;;3542:300:1:o;78:34:0:-;;;-1:-1:-1;;;;;78:34:0;;:::o;1858:110:1:-;-1:-1:-1;;;;;1943:18:1;1917:7;1943:18;;;:9;:18;;;;;;;1858:110::o;902:26::-;;;-1:-1:-1;;;;;902:26:1;;:::o;971:29::-;;;;:::o;1974:129::-;2031:7;2057:39;2066:15;2083:12;;2057:8;:39::i;1119:57::-;;;;;;;;;;;;;:::o;2816:363::-;1688:1:8;2277:7;;:19;;2269:63;;;;-1:-1:-1;;;2269:63:8;;;;;;;;;1688:1;2407:7;:18;2882:10:1::1;5727:16;:14;:16::i;:::-;5704:20;:39:::0;5770:26:::1;:24;:26::i;:::-;5753:14;:43:::0;-1:-1:-1;;;;;5810:21:1;::::1;::::0;5806:154:::1;;5866:15;5873:7;5866:6;:15::i;:::-;-1:-1:-1::0;;;;;5847:16:1;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;5929:20:::1;::::0;5895:22:::1;:31:::0;;;;;;:54;5806:154:::1;2921:1:::2;2912:6;:10;2904:37;;;;-1:-1:-1::0;;;2904:37:1::2;;;;;;;;;2966:12;::::0;:24:::2;::::0;2983:6;2966:24:::2;:16;:24;:::i;:::-;2951:12;:39:::0;3034:10:::2;3024:21;::::0;;;:9:::2;:21;::::0;;;;;:33:::2;::::0;3050:6;3024:33:::2;:25;:33;:::i;:::-;3010:10;3000:21;::::0;;;:9:::2;:21;::::0;;;;:57;;;;3067:12:::2;::::0;:64:::2;::::0;-1:-1:-1;;;;;3067:12:1;;::::2;::::0;3117:4:::2;3124:6:::0;3067:29:::2;:64::i;:::-;3153:10;-1:-1:-1::0;;;;;3146:26:1::2;;3165:6;3146:26;;;;;;;1042:29:::0;;;;:::o;2109:322::-;2156:7;2179:12;;2195:1;2179:17;2175:75;;;-1:-1:-1;2219:20:1;;2212:27;;2175:75;2278:146;2320:90;2397:12;;2320:72;2387:4;2320:62;2371:10;;2320:46;2351:14;;2320:26;:24;:26::i;:46::-;:50;:62;:50;:62;:::i;:90::-;2278:20;;;:146;:24;:146;:::i;870:26::-;;;-1:-1:-1;;;;;870:26:1;;:::o;1077:35::-;;;;:::o;3848:94::-;3902:10;3892:21;;;;:9;:21;;;;;;3883:31;;:8;:31::i;:::-;3924:11;:9;:11::i;:::-;3848:94::o;934:31::-;;;;:::o;3136:155:4:-;3194:7;3226:1;3221;:6;;3213:49;;;;-1:-1:-1;;;3213:49:4;;;;;;;;;-1:-1:-1;3279:5:4;;;3136:155::o;3538:215::-;3596:7;3619:6;3615:20;;-1:-1:-1;3634:1:4;3627:8;;3615:20;3657:5;;;3661:1;3657;:5;:1;3680:5;;;;;:10;3672:56;;;;-1:-1:-1;;;3672:56:4;;;;;;;;;3745:1;3538:215;-1:-1:-1;;;3538:215:4:o;4217:150::-;4275:7;4306:1;4302;:5;4294:44;;;;-1:-1:-1;;;4294:44:4;;;;;;;;;4359:1;4355;:5;;;;;;;4217:150;-1:-1:-1;;;4217:150:4:o;2690:175::-;2748:7;2779:5;;;2802:6;;;;2794:46;;;;-1:-1:-1;;;2794:46:4;;;;;;;;704:175:6;786:86;806:5;836:23;;;861:2;865:5;813:58;;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;813:58:6;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;;813:58:6;;;179:29:-1;;;;160:49;;;786:19:6;:86::i;:::-;704:175;;;:::o;399:104:3:-;457:7;487:1;483;:5;:13;;495:1;483:13;;;-1:-1:-1;491:1:3;;476:20;-1:-1:-1;399:104:3:o;885:203:6:-;985:96;1005:5;1035:27;;;1064:4;1070:2;1074:5;1012:68;;;;;;;;;;;985:96;885:203;;;;:::o;2967:751::-;3386:23;3412:69;3440:4;3412:69;;;;;;;;;;;;;;;;;3420:5;-1:-1:-1;;;;;3412:27:6;;;:69;;;;;:::i;:::-;3495:17;;3386:95;;-1:-1:-1;3495:21:6;3491:221;;3635:10;3624:30;;;;;;;;;;;;;;3616:85;;;;-1:-1:-1;;;3616:85:6;;;;;;;;3581:193:7;3684:12;3715:52;3737:6;3745:4;3751:1;3754:12;3715:21;:52::i;:::-;3708:59;3581:193;-1:-1:-1;;;;3581:193:7:o;4608:523::-;4735:12;4792:5;4767:21;:30;;4759:81;;;;-1:-1:-1;;;4759:81:7;;;;;;;;;4858:18;4869:6;4858:10;:18::i;:::-;4850:60;;;;-1:-1:-1;;;4850:60:7;;;;;;;;;4981:12;4995:23;5022:6;-1:-1:-1;;;;;5022:11:7;5042:5;5050:4;5022:33;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;4980:75:7;;;;5072:52;5090:7;5099:10;5111:12;5072:17;:52::i;:::-;5065:59;4608:523;-1:-1:-1;;;;;;;4608:523:7:o;726:413::-;1086:20;1124:8;;;726:413::o;7091:725::-;7206:12;7234:7;7230:580;;;-1:-1:-1;7264:10:7;7257:17;;7230:580;7375:17;;:21;7371:429;;7633:10;7627:17;7693:15;7680:10;7676:2;7672:19;7665:44;7582:145;7772:12;7765:20;;-1:-1:-1;;;7765:20:7;;;;;;;;;555:241:-1;;659:2;647:9;638:7;634:23;630:32;627:2;;;-1:-1;;665:12;627:2;72:20;;-1:-1;;;;;16840:54;;17714:35;;17704:2;;-1:-1;;17753:12;803:491;;;;941:2;929:9;920:7;916:23;912:32;909:2;;;-1:-1;;947:12;909:2;85:6;72:20;97:33;124:5;97:33;;;999:63;-1:-1;1099:2;1138:22;;72:20;97:33;72:20;97:33;;;903:391;;1107:63;;-1:-1;;;1207:2;1246:22;;;;344:20;;903:391;1301:257;;1413:2;1401:9;1392:7;1388:23;1384:32;1381:2;;;-1:-1;;1419:12;1381:2;223:6;217:13;17860:5;16752:13;16745:21;17838:5;17835:32;17825:2;;-1:-1;;17871:12;1565:241;;1669:2;1657:9;1648:7;1644:23;1640:32;1637:2;;;-1:-1;;1675:12;1637:2;-1:-1;344:20;;1631:175;-1:-1;1631:175;1813:263;;1928:2;1916:9;1907:7;1903:23;1899:32;1896:2;;;-1:-1;;1934:12;1896:2;-1:-1;492:13;;1890:186;-1:-1;1890:186;8170:262;;2363:5;16093:12;2474:52;2519:6;2514:3;2507:4;2500:5;2496:16;2474:52;;;2538:16;;;;;8295:137;-1:-1;;8295:137;8439:213;-1:-1;;;;;16840:54;;;;2154:37;;8557:2;8542:18;;8528:124;8659:435;-1:-1;;;;;16840:54;;;2154:37;;16840:54;;;;8997:2;8982:18;;2154:37;9080:2;9065:18;;8121:37;;;;8833:2;8818:18;;8804:290;9101:324;-1:-1;;;;;16840:54;;;;2154:37;;9411:2;9396:18;;8121:37;9247:2;9232:18;;9218:207;9682:301;;9820:2;9841:17;9834:47;2874:5;16093:12;16532:6;9820:2;9809:9;9805:18;16520:19;2968:52;3013:6;16560:14;9809:9;16560:14;9820:2;2994:5;2990:16;2968:52;;;17634:7;17618:14;-1:-1;;17614:28;3032:39;;;;16560:14;3032:39;;9791:192;-1:-1;;9791:192;9990:407;10181:2;10195:47;;;3308:2;10166:18;;;16520:19;-1:-1;;;16560:14;;;3324:37;3380:12;;;10152:245;10404:407;10595:2;10609:47;;;3631:2;10580:18;;;16520:19;3667:29;16560:14;;;3647:50;3716:12;;;10566:245;10818:407;11009:2;11023:47;;;3967:2;10994:18;;;16520:19;4003:32;16560:14;;;3983:53;4055:12;;;10980:245;11232:407;11423:2;11437:47;;;4306:2;11408:18;;;16520:19;4342:34;16560:14;;;4322:55;-1:-1;;;4397:12;;;4390:30;4439:12;;;11394:245;11646:407;11837:2;11851:47;;;4690:2;11822:18;;;16520:19;4726:28;16560:14;;;4706:49;4774:12;;;11808:245;12060:407;12251:2;12265:47;;;5025:2;12236:18;;;16520:19;-1:-1;;;16560:14;;;5041:40;5100:12;;;12222:245;12474:407;12665:2;12679:47;;;5351:2;12650:18;;;16520:19;5387:34;16560:14;;;5367:55;-1:-1;;;5442:12;;;5435:25;5479:12;;;12636:245;12888:407;13079:2;13093:47;;;5730:2;13064:18;;;16520:19;5766:26;16560:14;;;5746:47;5812:12;;;13050:245;13302:407;13493:2;13507:47;;;6063:2;13478:18;;;16520:19;6099:31;16560:14;;;6079:52;6150:12;;;13464:245;13716:407;13907:2;13921:47;;;6401:2;13892:18;;;16520:19;6437:34;16560:14;;;6417:55;-1:-1;;;6492:12;;;6485:34;6538:12;;;13878:245;14130:407;14321:2;14335:47;;;6789:2;14306:18;;;16520:19;6825:34;16560:14;;;6805:55;-1:-1;;;6880:12;;;6873:34;6926:12;;;14292:245;14544:407;14735:2;14749:47;;;7177:2;14720:18;;;16520:19;7213:33;16560:14;;;7193:54;7266:12;;;14706:245;14958:407;15149:2;15163:47;;;7517:2;15134:18;;;16520:19;7553:34;16560:14;;;7533:55;-1:-1;;;7608:12;;;7601:25;7645:12;;;15120:245;15372:407;15563:2;15577:47;;;7896:2;15548:18;;;16520:19;7932:34;16560:14;;;7912:55;-1:-1;;;7987:12;;;7980:25;8024:12;;;15534:245;15786:213;8121:37;;;15904:2;15889:18;;15875:124;17274:268;17339:1;17346:101;17360:6;17357:1;17354:13;17346:101;;;17427:11;;;17421:18;17408:11;;;17401:39;17382:2;17375:10;17346:101;;;17462:6;17459:1;17456:13;17453:2;;;-1:-1;;17339:1;17509:16;;17502:27;17323:219;17655:117;-1:-1;;;;;16840:54;;17714:35;;17704:2;;17763:1;;17753:12;17704:2;17698:74;
Swarm Source
ipfs://1e130e8e926b04fcbaa010e0868a99f9f4e646f2334d2c4b5faf0cd8aa27994d
Loading...
Loading
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.