ETH Price: $2,271.61 (-4.71%)

Contract

0x141fbCd2EFeb9e684578dca00BC2ab81Aa7E55d9
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Unstake190964452024-01-27 7:31:35223 days ago1706340695IN
0x141fbCd2...1Aa7E55d9
0 ETH0.0087996513.31597729
Unstake179466802023-08-19 5:16:11385 days ago1692422171IN
0x141fbCd2...1Aa7E55d9
0 ETH0.0004183613.48296467
Unstake179466772023-08-19 5:15:35385 days ago1692422135IN
0x141fbCd2...1Aa7E55d9
0 ETH0.0089726714.03744585
Unstake178818792023-08-10 3:42:11394 days ago1691638931IN
0x141fbCd2...1Aa7E55d9
0 ETH0.0091501114.37802788
Unstake178793232023-08-09 19:07:23394 days ago1691608043IN
0x141fbCd2...1Aa7E55d9
0 ETH0.019621729.3896049
Unstake178530112023-08-06 2:42:47398 days ago1691289767IN
0x141fbCd2...1Aa7E55d9
0 ETH0.0092516714
Unstake174657202023-06-12 18:22:47452 days ago1686594167IN
0x141fbCd2...1Aa7E55d9
0 ETH0.0005895519
Stake168496762023-03-17 19:42:59539 days ago1679082179IN
0x141fbCd2...1Aa7E55d9
0 ETH0.0130340122.93888441
Compound Reward164813832023-01-25 4:14:47591 days ago1674620087IN
0x141fbCd2...1Aa7E55d9
0 ETH0.0012453916.29718308
Claim Reward163678942023-01-09 7:57:35606 days ago1673251055IN
0x141fbCd2...1Aa7E55d9
0 ETH0.0016809317.59718198
Fetch Rewards162127542022-12-18 16:24:35628 days ago1671380675IN
0x141fbCd2...1Aa7E55d9
0 ETH0.006528715.27621296
Emergency End St...162127402022-12-18 16:21:47628 days ago1671380507IN
0x141fbCd2...1Aa7E55d9
0 ETH0.0046721513.018321
Claim Reward157411592022-10-13 19:04:11694 days ago1665687851IN
0x141fbCd2...1Aa7E55d9
0 ETH0.0067584170.75171137
Buy And Burn157378592022-10-13 7:59:47694 days ago1665647987IN
0x141fbCd2...1Aa7E55d9
0 ETH0.0036332113.77977098
Fetch Rewards157378542022-10-13 7:58:47694 days ago1665647927IN
0x141fbCd2...1Aa7E55d9
0 ETH0.0064977214.39279074
Stake157378512022-10-13 7:58:11694 days ago1665647891IN
0x141fbCd2...1Aa7E55d9
0 ETH0.0084024315.11550071
Fetch Rewards157010882022-10-08 4:49:59700 days ago1665204599IN
0x141fbCd2...1Aa7E55d9
0 ETH0.002271815.13942739
Buy And Burn157010852022-10-08 4:49:11700 days ago1665204551IN
0x141fbCd2...1Aa7E55d9
0 ETH0.001235634.68304421
Stake154389122022-08-30 6:51:47738 days ago1661842307IN
0x141fbCd2...1Aa7E55d9
0 ETH0.000335089.70209735
Stake154389122022-08-30 6:51:47738 days ago1661842307IN
0x141fbCd2...1Aa7E55d9
0 ETH0.004110357.23392454
Stake154083932022-08-25 9:43:30743 days ago1661420610IN
0x141fbCd2...1Aa7E55d9
0 ETH0.003931046.91834671
Stake154013402022-08-24 6:31:58745 days ago1661322718IN
0x141fbCd2...1Aa7E55d9
0 ETH0.002743994.78887961
Stake153492482022-08-16 0:42:39753 days ago1660610559IN
0x141fbCd2...1Aa7E55d9
0 ETH0.0004539913.14051421
Stake153492482022-08-16 0:42:39753 days ago1660610559IN
0x141fbCd2...1Aa7E55d9
0 ETH0.0062148810.93750811
Stake153491882022-08-16 0:28:47753 days ago1660609727IN
0x141fbCd2...1Aa7E55d9
0 ETH0.0067080311.80563225
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HDRNStaking

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 369 runs

Other Settings:
default evmVersion
File 1 of 4 : HdrnStaking.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.1;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

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;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

interface IHedron {
    function approve(address spender, uint256 amount) external returns (bool);

    function balanceOf(address account) external view returns (uint256);

    function totalSupply() external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);
}

interface ISwap {
    function convertEthToHedronDistribute() external returns (uint256);

    function convertEthToHedronBurn() external returns (uint256);
}

contract HDRNStaking is Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    ISwap public swap;
    uint256 internal LAUNCH_TIME = block.timestamp; // The time at which this staking contract launch on blockchain
    IHedron public hdrnToken;
    uint256 public totalHedronStaked;
    uint256 public accHedronRewardRate;
    uint256 public totalRewardTobeDistributed;
    uint256 public totalHedronBurned;
    uint256 public stakingPeriod = 2 days; // 2 day for beta then it will be changed to 369 days

    mapping(uint256 => StakeDepositData) public stakers;
    mapping(address => StakeDepositData[]) public stakes;
    mapping(uint256 => uint256) public dayToRatioMapping;

    struct StakeDepositData {
        uint256 stakeId;
        address wallet;
        uint256 amount;
        uint256 startDate;
        uint256 endDate;
        uint256 claimedRewards;
        uint256 rewardDebt;
        uint256 unstakedStatus;
        bool activeStaked;
    }

    StakeDepositData[] public stakersData;

    //Initialize the contract and set the Hedron token address
    constructor(address _hdrnToken, address _swapContractAddress) {
        require(
            _hdrnToken != address(0),
            "Hedron Token address cannot be zero"
        );
        require(
            _swapContractAddress != address(0),
            "Swap Token address cannot be zero"
        );
        hdrnToken = IHedron(_hdrnToken); // Hedron token address.
        swap = ISwap(_swapContractAddress);
    }

    receive() external payable {}

    event stakeAdded(
        uint256 stakeId,
        address wallet,
        uint256 amount,
        uint256 startDate,
        uint256 endDate
    );
    event stakeRemoved(
        uint256 stakeId,
        address wallet,
        uint256 totalAmountClaimed
    );
    event claimedReward(uint256 stakeId, address wallet, uint256 amountClaimed);
    event emergencyEndStaked(
        uint256 stakeId,
        address wallet,
        uint256 amountClaimed
    );
    event recompounded(
        uint256 stakeId,
        address wallet,
        uint256 amountRecompound
    );

    //Modifier to check if msg.sender has an active stake
    modifier hasStaked(uint256 stakeId) {
        require(
            msg.sender == stakers[stakeId].wallet,
            "Wrong wallet address, Only staker of this stake can perform this operation"
        );
        require(stakers[stakeId].activeStaked, "Stake is not active");
        _;
    }

    /* ======== USER FUNCTIONS ======== */

    /*
     *@notice To stake hedron
     *@param amount uint256, Amount of hedron in 9 decimal(GWEI)
     *@return uint(newStakeId)
     */
    function stake(uint256 amount) external nonReentrant returns (uint256) {
        require(amount > 0, "Amount should be greater than 0");
        require(
            IHedron(hdrnToken).allowance(msg.sender, address(this)) >= amount,
            "No allowance. Please grant hedron allowance"
        );
        require(
            IHedron(hdrnToken).balanceOf(msg.sender) >= amount,
            "Cannot stake more than the balance"
        );

        IHedron(hdrnToken).transferFrom(msg.sender, address(this), amount);

        uint256 newStakeId = stakersData.length;
        stakers[newStakeId] = StakeDepositData({
            stakeId: newStakeId,
            wallet: msg.sender,
            amount: amount,
            startDate: block.timestamp,
            endDate: block.timestamp + stakingPeriod,
            claimedRewards: 0,
            rewardDebt: amount.mul(accHedronRewardRate).div(1e9),
            unstakedStatus: 0, //0 -> default, 1 -> Unstaked, 2 -> Emergency end stake
            activeStaked: true
        });

        stakes[msg.sender].push(stakers[newStakeId]);
        stakersData.push(stakers[newStakeId]);

        assert(stakersData[newStakeId].wallet == msg.sender);
        totalHedronStaked = totalHedronStaked.add(amount);

        emit stakeAdded(
            newStakeId,
            msg.sender,
            amount,
            stakersData[newStakeId].startDate,
            stakersData[newStakeId].endDate
        );

        return newStakeId;
    }

    /*
     *@notice To unstake hedron once staking period is completed
     *@param stakeId uint256, Stake Id
     */
    function unstake(uint256 stakeId) external nonReentrant hasStaked(stakeId) {
        require(
            hasCompletedStakingPeriod(stakeId),
            "Staking period is not over"
        );

        uint256 reward = calculateRewards(stakeId);
        uint256 total_amount = stakers[stakeId].amount.add(reward);

        stakers[stakeId].activeStaked = false;
        stakers[stakeId].unstakedStatus = 1;
        stakersData[stakeId].activeStaked = false;
        stakersData[stakeId].unstakedStatus = 1;

        totalHedronStaked = totalHedronStaked.sub(stakers[stakeId].amount);
        totalRewardTobeDistributed = totalRewardTobeDistributed.sub(reward);

        IHedron(hdrnToken).transfer(stakers[stakeId].wallet, total_amount);
        emit stakeRemoved(stakeId, stakers[stakeId].wallet, total_amount);
    }

    /*
     *@notice To end the stake before the staking period is over. User will have to pay 50% of the staked  amount as penalty
     *@param stakeId uint256, Stake Id
     */
    function emergencyEndStake(uint256 stakeId)
        external
        nonReentrant
        hasStaked(stakeId)
    {
        require(
            !hasCompletedStakingPeriod(stakeId),
            "Staking period is over, You cannot Emergency End Stake now"
        );

        uint256 reward = calculateRewards(stakeId);
        uint256 rewardOfESS = stakers[stakeId].amount.div(2);
        uint256 total_amount = (rewardOfESS).add(reward);

        stakers[stakeId].activeStaked = false;
        stakers[stakeId].unstakedStatus = 2;
        stakersData[stakeId].activeStaked = false;
        stakersData[stakeId].unstakedStatus = 2;

        if (totalActiveStakes() != 0) {
            accHedronRewardRate = accHedronRewardRate.add(
                (rewardOfESS.mul(1e9)).div(totalActiveStakes())
            );
            totalRewardTobeDistributed = totalRewardTobeDistributed
                .add(rewardOfESS)
                .sub(reward);
        } else {
            totalRewardTobeDistributed = totalRewardTobeDistributed.sub(reward);
        }

        dayToRatioMapping[currentDay()] = accHedronRewardRate;
        totalHedronStaked = totalHedronStaked.sub(stakers[stakeId].amount);

        IHedron(hdrnToken).transfer(stakers[stakeId].wallet, total_amount);
        emit emergencyEndStaked(stakeId, stakers[stakeId].wallet, total_amount);
    }

    /*
     *@notice To fetch the reward from HSIM FeeCollector contract and convert them to equivalent hedron using Uniwap V3 protocol
     */
    function fetchRewards() external {
        uint256 hedronReceived = swap.convertEthToHedronDistribute();

        totalRewardTobeDistributed = totalRewardTobeDistributed.add(
            hedronReceived
        );
        accHedronRewardRate = accHedronRewardRate.add(
            hedronReceived.mul(1e9).div(totalActiveStakes())
        );
        dayToRatioMapping[currentDay()] = accHedronRewardRate;
    }

    /*
     *@notice To fetch the reward from HSIM FeeCollector contract and convert them to equivalent hedron using Uniwap V3 protocol and burn Hedron to zero address
     */
    function BuyAndBurn() external {
        uint256 hedronBurn = swap.convertEthToHedronBurn();

        totalHedronBurned = totalHedronBurned.add(hedronBurn);
    }

    /*
     *@notice To claim the reward. User can claim reward at any point of time before unstake or emergency end stake
     *@param stakeId uint256, Stake Id
     */
    function claimReward(uint256 stakeId)
        public
        nonReentrant
        hasStaked(stakeId)
    {
        uint256 reward = calculateRewards(stakeId);
        require(reward > 0, "No reward available to claim");

        stakers[stakeId].claimedRewards = stakers[stakeId].claimedRewards.add(
            reward
        );
        stakers[stakeId].rewardDebt = stakers[stakeId].rewardDebt.add(reward);
        totalRewardTobeDistributed = totalRewardTobeDistributed.sub(reward);

        IHedron(hdrnToken).transfer(stakers[stakeId].wallet, reward);
        emit claimedReward(stakeId, stakers[stakeId].wallet, reward);
    }

    /*
     *@notice To re-invest the reward in the current stake without resetting the staking period. User can compound reward at any point of time before unstake or emergency end stake
     *@param stakeId uint256, Stake Id
     */
    function CompoundReward(uint256 stakeId) external hasStaked(stakeId) {
        uint256 reward = calculateRewards(stakeId);
        require(reward > 0, "No reward available to compound");
        stakers[stakeId].claimedRewards = stakers[stakeId].claimedRewards.add(
            reward
        );
        stakers[stakeId].amount = stakers[stakeId].amount.add(reward);
        stakersData[stakeId].amount = stakersData[stakeId].amount.add(reward);
        totalHedronStaked = totalHedronStaked.add(reward);
        totalRewardTobeDistributed = totalRewardTobeDistributed.sub(reward);

        uint256 newDebt = calculateRewards(stakeId);
        stakers[stakeId].rewardDebt = stakers[stakeId].rewardDebt.add(newDebt);

        emit recompounded(stakeId, stakers[stakeId].wallet, reward);
    }

    /*
     *@notice To update staking period.
     *@param newStakingPeriodInDays uint256, No. of days
     */
    function updateStakingPeriod(uint256 newStakingPeriodInDays)
        external
        onlyOwner
    {
        require(
            newStakingPeriodInDays != stakingPeriod,
            "Add a different staking period"
        );

        stakingPeriod = newStakingPeriodInDays * 86400; //test this implementation
    }

    /*
     *@notice To update staking period.
     *@param newStakingPeriodInDays uint256, No. of days
     */

    function updateSwapAddress(address _newSwapAddress) external onlyOwner {
        require(_newSwapAddress != address(0), "Cannot add zero address");
        swap = ISwap(_newSwapAddress);
    }

    /*
     *@notice To get total active staked hedron amount at current time
     *@return uint(totalStakes)
     */
    function totalActiveStakes() public view returns (uint256) {
        uint256 totalStakes;

        for (uint256 i = 0; i < stakersData.length; i++) {
            if (stakersData[i].activeStaked) {
                if (!hasCompletedStakingPeriod(stakersData[i].stakeId)) {
                    totalStakes = totalStakes.add(stakersData[i].amount);
                }
            }
        }

        return totalStakes;
    }

    /*
     *@notice To get the current Day of the contract
     *@return uint256(currentDay)
     */
    function currentDay() public view returns (uint256) {
        return _currentDay();
    }

    /*
     *@notice To get all the stakes stake by a given wallet address
     *@param wallet address, Wallet address
     *@return StakeDepositData[]
     */
    function getStakes(address wallet)
        external
        view
        returns (StakeDepositData[] memory)
    {
        return stakes[wallet];
    }

    /*
     *@notice To calculate the reward for a given stake
     *@param stakeId uint256, Stake Id
     *@return uint256(reward)
     */
    function calculateRewards(uint256 stakeId) public view returns (uint256) {
        uint256 reward;
        StakeDepositData memory s = stakers[stakeId];
        require(s.activeStaked, "Stake is not active");

        if (hasCompletedStakingPeriod(stakeId)) {
            uint256 endDate = ((s.endDate - s.startDate).div(1 days)).add(
                (s.startDate - LAUNCH_TIME).div(1 days)
            );
            for (uint256 i = endDate; i >= 0; i--) {
                if (dayToRatioMapping[i] > 0) {
                    reward = s.amount.mul(dayToRatioMapping[i]).div(1e9).sub(
                        s.rewardDebt
                    );
                    break;
                }
            }
        } else {
            reward = s.amount.mul(accHedronRewardRate).div(1e9).sub(
                s.rewardDebt
            );
        }

        return reward;
    }

    /*
     *@notice Internal function to get the current Day of the contract
     *@return uint256(currentDay)
     */
    function _currentDay() internal view returns (uint256) {
        return (block.timestamp.sub(LAUNCH_TIME)).div(1 days);
    }

    /*
     *@notice To check if the staking period is over for a given stake
     *@param stakeId uint256, Stake Id
     *@return bool
     */
    function hasCompletedStakingPeriod(uint256 stakeId)
        internal
        view
        returns (bool)
    {
        if (block.timestamp >= stakers[stakeId].endDate) {
            return true;
        } else {
            return false;
        }
    }

    function claimDust() external onlyOwner {
        uint256 amount = getClaimAndDustAmount();
        require(amount > 0, "No dust available");

        IHedron(hdrnToken).transfer(msg.sender, amount);
    }

    function getClaimAndDustAmount() public view returns (uint256) {
        uint256 amount = IHedron(hdrnToken).balanceOf(address(this)).sub(
            totalHedronStaked.add(totalRewardTobeDistributed)
        );
        return amount;
    }
}

File 2 of 4 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 4 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^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() {
        _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 making 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;
    }
}

File 4 of 4 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 369
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_hdrnToken","type":"address"},{"internalType":"address","name":"_swapContractAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"stakeId","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountClaimed","type":"uint256"}],"name":"claimedReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"stakeId","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountClaimed","type":"uint256"}],"name":"emergencyEndStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"stakeId","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountRecompound","type":"uint256"}],"name":"recompounded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"stakeId","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startDate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endDate","type":"uint256"}],"name":"stakeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"stakeId","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalAmountClaimed","type":"uint256"}],"name":"stakeRemoved","type":"event"},{"inputs":[],"name":"BuyAndBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"CompoundReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accHedronRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"calculateRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDust","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dayToRatioMapping","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"emergencyEndStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fetchRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getClaimAndDustAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getStakes","outputs":[{"components":[{"internalType":"uint256","name":"stakeId","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startDate","type":"uint256"},{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"uint256","name":"claimedRewards","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"unstakedStatus","type":"uint256"},{"internalType":"bool","name":"activeStaked","type":"bool"}],"internalType":"struct HDRNStaking.StakeDepositData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hdrnToken","outputs":[{"internalType":"contract IHedron","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakers","outputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startDate","type":"uint256"},{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"uint256","name":"claimedRewards","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"unstakedStatus","type":"uint256"},{"internalType":"bool","name":"activeStaked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakersData","outputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startDate","type":"uint256"},{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"uint256","name":"claimedRewards","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"unstakedStatus","type":"uint256"},{"internalType":"bool","name":"activeStaked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakes","outputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startDate","type":"uint256"},{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"uint256","name":"claimedRewards","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"unstakedStatus","type":"uint256"},{"internalType":"bool","name":"activeStaked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swap","outputs":[{"internalType":"contract ISwap","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalActiveStakes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalHedronBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalHedronStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardTobeDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newStakingPeriodInDays","type":"uint256"}],"name":"updateStakingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newSwapAddress","type":"address"}],"name":"updateSwapAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052426003556202a3006009553480156200001c57600080fd5b5060405162002a7938038062002a798339810160408190526200003f91620001b7565b6200004a336200014a565b600180556001600160a01b038216620000b65760405162461bcd60e51b815260206004820152602360248201527f486564726f6e20546f6b656e20616464726573732063616e6e6f74206265207a60448201526265726f60e81b60648201526084015b60405180910390fd5b6001600160a01b038116620001185760405162461bcd60e51b815260206004820152602160248201527f5377617020546f6b656e20616464726573732063616e6e6f74206265207a65726044820152606f60f81b6064820152608401620000ad565b600480546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055620001ef565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620001b257600080fd5b919050565b60008060408385031215620001cb57600080fd5b620001d6836200019a565b9150620001e6602084016200019a565b90509250929050565b61287a80620001ff6000396000f3fe6080604052600436106101c65760003560e01c8063a02e9d80116100f7578063d803a94811610095578063ed21aa8911610064578063ed21aa8914610511578063f2fde38b14610526578063faf9e01814610546578063fd5e6dd11461056657600080fd5b8063d803a948146104bc578063df90ebe8146104d2578063dfdc782c146104e7578063eb8d0624146104fc57600080fd5b8063bb0eae1e116100d1578063bb0eae1e14610443578063c03d5b4714610459578063d215300f1461046f578063d3ea43501461049c57600080fd5b8063a02e9d80146103e3578063a694fc3a14610403578063ae169a501461042357600080fd5b80635cfc83d4116101645780638119c0651161013e5780638119c0651461034d57806385a9f4f1146103855780638da5cb5b146103a557806390a73918146103c357600080fd5b80635cfc83d4146102eb578063715018a61461030b5780637ba6f4581461032057600080fd5b80632e17de78116101a05780632e17de781461027e5780634771f401146102a0578063584b62a1146102b65780635c9302c9146102d657600080fd5b8063134108eb146101d25780631f079e01146101fb578063202210461461021057600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101e860075481565b6040519081526020015b60405180910390f35b34801561020757600080fd5b506101e86105d9565b34801561021c57600080fd5b5061023061022b36600461254a565b61069b565b60408051998a526001600160a01b0390981660208a0152968801959095526060870193909352608086019190915260a085015260c084015260e08301521515610100820152610120016101f2565b34801561028a57600080fd5b5061029e61029936600461254a565b610703565b005b3480156102ac57600080fd5b506101e860055481565b3480156102c257600080fd5b506102306102d136600461257a565b610a32565b3480156102e257600080fd5b506101e8610aa7565b3480156102f757600080fd5b5061029e61030636600461254a565b610ab6565b34801561031757600080fd5b5061029e610d11565b34801561032c57600080fd5b5061034061033b3660046125a4565b610d77565b6040516101f291906125bf565b34801561035957600080fd5b5060025461036d906001600160a01b031681565b6040516001600160a01b0390911681526020016101f2565b34801561039157600080fd5b5061029e6103a036600461254a565b610e50565b3480156103b157600080fd5b506000546001600160a01b031661036d565b3480156103cf57600080fd5b5061029e6103de36600461254a565b611230565b3480156103ef57600080fd5b5060045461036d906001600160a01b031681565b34801561040f57600080fd5b506101e861041e36600461254a565b6112ee565b34801561042f57600080fd5b5061029e61043e36600461254a565b6119ec565b34801561044f57600080fd5b506101e860085481565b34801561046557600080fd5b506101e860095481565b34801561047b57600080fd5b506101e861048a36600461254a565b600c6020526000908152604090205481565b3480156104a857600080fd5b506101e86104b736600461254a565b611c89565b3480156104c857600080fd5b506101e860065481565b3480156104de57600080fd5b5061029e611e42565b3480156104f357600080fd5b506101e8611f66565b34801561050857600080fd5b5061029e611ff6565b34801561051d57600080fd5b5061029e61207b565b34801561053257600080fd5b5061029e6105413660046125a4565b61213e565b34801561055257600080fd5b5061029e6105613660046125a4565b612209565b34801561057257600080fd5b5061023061058136600461254a565b600a6020526000908152604090208054600182015460028301546003840154600485015460058601546006870154600788015460089098015496976001600160a01b0390961696949593949293919290919060ff1689565b60008060005b600d5481101561069557600d81815481106105fc576105fc612662565b600091825260209091206008600990920201015460ff161561068357610645600d828154811061062e5761062e612662565b9060005260206000209060090201600001546122db565b61068357610680600d828154811061065f5761065f612662565b9060005260206000209060090201600201548361230890919063ffffffff16565b91505b8061068d8161268e565b9150506105df565b50919050565b600d81815481106106ab57600080fd5b60009182526020909120600990910201805460018201546002830154600384015460048501546005860154600687015460078801546008909801549698506001600160a01b0390951696939592949193909260ff1689565b60026001540361075a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260019081556000828152600a60205260409020015481906001600160a01b0316331461079a5760405162461bcd60e51b8152600401610751906126a7565b6000818152600a602052604090206008015460ff166107f15760405162461bcd60e51b81526020600482015260136024820152725374616b65206973206e6f742061637469766560681b6044820152606401610751565b6107fa826122db565b6108465760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e6720706572696f64206973206e6f74206f7665720000000000006044820152606401610751565b600061085183611c89565b6000848152600a6020526040812060020154919250906108719083612308565b6000858152600a6020526040812060088101805460ff191690556001600790910155600d80549293509091869081106108ac576108ac612662565b906000526020600020906009020160080160006101000a81548160ff0219169083151502179055506001600d85815481106108e9576108e9612662565b906000526020600020906009020160070181905550610929600a60008681526020019081526020016000206002015460055461236e90919063ffffffff16565b600555600754610939908361236e565b600755600480546000868152600a60205260409081902060010154905163a9059cbb60e01b81526001600160a01b039182169381019390935260248301849052169063a9059cbb906044016020604051808303816000875af11580156109a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c79190612717565b506000848152600a60209081526040918290206001015482518781526001600160a01b03909116918101919091529081018290527f9af9627af40320b6de9024b9adcfe0a1b0b2a9de8f281140a50521cd8663bcec9060600160405180910390a15050600180555050565b600b6020528160005260406000208181548110610a4e57600080fd5b60009182526020909120600990910201805460018201546002830154600384015460048501546005860154600687015460078801546008909801549699506001600160a01b039095169750929591949093919060ff1689565b6000610ab16123b0565b905090565b6000818152600a602052604090206001015481906001600160a01b03163314610af15760405162461bcd60e51b8152600401610751906126a7565b6000818152600a602052604090206008015460ff16610b485760405162461bcd60e51b81526020600482015260136024820152725374616b65206973206e6f742061637469766560681b6044820152606401610751565b6000610b5383611c89565b905060008111610ba55760405162461bcd60e51b815260206004820152601f60248201527f4e6f2072657761726420617661696c61626c6520746f20636f6d706f756e64006044820152606401610751565b6000838152600a6020526040902060050154610bc19082612308565b6000848152600a60205260409020600581019190915560020154610be59082612308565b6000848152600a6020526040902060020155600d8054610c3191839186908110610c1157610c11612662565b90600052602060002090600902016002015461230890919063ffffffff16565b600d8481548110610c4457610c44612662565b6000918252602090912060026009909202010155600554610c659082612308565b600555600754610c75908261236e565b6007556000610c8384611c89565b6000858152600a6020526040902060060154909150610ca29082612308565b6000858152600a6020908152604091829020600681019390935560019092015481518781526001600160a01b039091169281019290925281018390527fe8aac0b9c01a732a82911ff8cc42a71dc698921c2fc93b92736e11774cfb95f99060600160405180910390a150505050565b6000546001600160a01b03163314610d6b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610751565b610d7560006123ce565b565b6001600160a01b0381166000908152600b60209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610e45576000848152602090819020604080516101208101825260098602909201805483526001808201546001600160a01b0316848601526002820154928401929092526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e08401526008015460ff1615156101008301529083529092019101610daf565b505050509050919050565b600260015403610ea25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610751565b600260019081556000828152600a60205260409020015481906001600160a01b03163314610ee25760405162461bcd60e51b8152600401610751906126a7565b6000818152600a602052604090206008015460ff16610f395760405162461bcd60e51b81526020600482015260136024820152725374616b65206973206e6f742061637469766560681b6044820152606401610751565b610f42826122db565b15610fb55760405162461bcd60e51b815260206004820152603a60248201527f5374616b696e6720706572696f64206973206f7665722c20596f752063616e6e60448201527f6f7420456d657267656e637920456e64205374616b65206e6f770000000000006064820152608401610751565b6000610fc083611c89565b6000848152600a602052604081206002908101549293509091610fe29161241e565b90506000610ff08284612308565b6000868152600a6020526040812060088101805460ff191690556002600790910155600d805492935090918790811061102b5761102b612662565b906000526020600020906009020160080160006101000a81548160ff0219169083151502179055506002600d868154811061106857611068612662565b9060005260206000209060090201600701819055506110856105d9565b156110d9576110b56110ac6110986105d9565b6110a685633b9aca00612460565b9061241e565b60065490612308565b6006556007546110d19084906110cb9085612308565b9061236e565b6007556110ea565b6007546110e6908461236e565b6007555b600654600c60006110f9610aa7565b815260200190815260200160002081905550611136600a60008781526020019081526020016000206002015460055461236e90919063ffffffff16565b600555600480546000878152600a60205260409081902060010154905163a9059cbb60e01b81526001600160a01b039182169381019390935260248301849052169063a9059cbb906044016020604051808303816000875af11580156111a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c49190612717565b506000858152600a60209081526040918290206001015482518881526001600160a01b03909116918101919091529081018290527f2ec7c2a17d4a19e166b3147fa600551e01599e9cd2865cba3fd89bff43f9daaa9060600160405180910390a1505060018055505050565b6000546001600160a01b0316331461128a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610751565b60095481036112db5760405162461bcd60e51b815260206004820152601e60248201527f416464206120646966666572656e74207374616b696e6720706572696f6400006044820152606401610751565b6112e88162015180612739565b60095550565b60006002600154036113425760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610751565b6002600155816113945760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e742073686f756c642062652067726561746572207468616e2030006044820152606401610751565b60048054604051636eb1769f60e11b8152339281019290925230602483015283916001600160a01b039091169063dd62ed3e90604401602060405180830381865afa1580156113e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140b9190612758565b101561146d5760405162461bcd60e51b815260206004820152602b60248201527f4e6f20616c6c6f77616e63652e20506c65617365206772616e7420686564726f60448201526a6e20616c6c6f77616e636560a81b6064820152608401610751565b600480546040516370a0823160e01b8152339281019290925283916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156114ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114de9190612758565b10156115375760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f74207374616b65206d6f7265207468616e207468652062616c616e604482015261636560f01b6064820152608401610751565b600480546040516323b872dd60e01b81523392810192909252306024830152604482018490526001600160a01b0316906323b872dd906064016020604051808303816000875af115801561158f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b39190612717565b50600d546040805161012081018252828152336020820152908101849052426060820181905260095460808301916115eb9190612771565b815260200160008152602001611614633b9aca006110a66006548861246090919063ffffffff16565b81526020016000815260200160011515815250600a60008381526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080160006101000a81548160ff021916908315150217905550905050600b6000336001600160a01b03166001600160a01b03168152602001908152602001600020600a60008381526020019081526020016000209080600181540180825580915050600190039060005260206000209060090201600090919091909150600082015481600001556001820160009054906101000a90046001600160a01b03168160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506002820154816002015560038201548160030155600482015481600401556005820154816005015560068201548160060155600782015481600701556008820160009054906101000a900460ff168160080160006101000a81548160ff0219169083151502179055505050600d600a60008381526020019081526020016000209080600181540180825580915050600190039060005260206000209060090201600090919091909150600082015481600001556001820160009054906101000a90046001600160a01b03168160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506002820154816002015560038201548160030155600482015481600401556005820154816005015560068201548160060155600782015481600701556008820160009054906101000a900460ff168160080160006101000a81548160ff0219169083151502179055505050336001600160a01b0316600d82815481106118f7576118f7612662565b60009182526020909120600160099092020101546001600160a01b03161461192157611921612789565b60055461192e9084612308565b6005819055507f6110ca4982d41dab511e89b27b2514e6b7f05fe84f3b635297ba93264d88321d813385600d858154811061196b5761196b612662565b906000526020600020906009020160030154600d868154811061199057611990612662565b9060005260206000209060090201600401546040516119da9594939291909485526001600160a01b0393909316602085015260408401919091526060830152608082015260a00190565b60405180910390a16001805592915050565b600260015403611a3e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610751565b600260019081556000828152600a60205260409020015481906001600160a01b03163314611a7e5760405162461bcd60e51b8152600401610751906126a7565b6000818152600a602052604090206008015460ff16611ad55760405162461bcd60e51b81526020600482015260136024820152725374616b65206973206e6f742061637469766560681b6044820152606401610751565b6000611ae083611c89565b905060008111611b325760405162461bcd60e51b815260206004820152601c60248201527f4e6f2072657761726420617661696c61626c6520746f20636c61696d000000006044820152606401610751565b6000838152600a6020526040902060050154611b4e9082612308565b6000848152600a60205260409020600581019190915560060154611b729082612308565b6000848152600a6020526040902060060155600754611b91908261236e565b600755600480546000858152600a60205260409081902060010154905163a9059cbb60e01b81526001600160a01b039182169381019390935260248301849052169063a9059cbb906044016020604051808303816000875af1158015611bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1f9190612717565b506000838152600a60209081526040918290206001015482518681526001600160a01b03909116918101919091529081018290527fca29369147407cc8b537699ccd94d3b7188d06defde3ea92d5e851c69723e78d9060600160405180910390a150506001805550565b6000818152600a602090815260408083208151610120810183528154815260018201546001600160a01b0316938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015460ff1615156101008201819052829190611d505760405162461bcd60e51b81526020600482015260136024820152725374616b65206973206e6f742061637469766560681b6044820152606401610751565b611d59846122db565b15611e0f576000611d9d611d7c6201518060035485606001516110a6919061279f565b611d9762015180856060015186608001516110a6919061279f565b90612308565b9050805b6000818152600c602052604090205415611df657611def8360c001516110cb633b9aca006110a6600c600087815260200190815260200160002054886040015161246090919063ffffffff16565b9350611e08565b80611e00816127b6565b915050611da1565b5050611e3b565b611e388160c001516110cb633b9aca006110a6600654866040015161246090919063ffffffff16565b91505b5092915050565b6000546001600160a01b03163314611e9c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610751565b6000611ea6611f66565b905060008111611eec5760405162461bcd60e51b81526020600482015260116024820152704e6f206475737420617661696c61626c6560781b6044820152606401610751565b6004805460405163a9059cbb60e01b81523392810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f629190612717565b5050565b600080611ff0611f8360075460055461230890919063ffffffff16565b600480546040516370a0823160e01b815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611fcc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cb9190612758565b92915050565b6002546040805163ef6bba3760e01b815290516000926001600160a01b03169163ef6bba37916004808301926020929190829003018187875af1158015612041573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120659190612758565b6008549091506120759082612308565b60085550565b60025460408051631bee160f60e01b815290516000926001600160a01b031691631bee160f916004808301926020929190829003018187875af11580156120c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ea9190612758565b6007549091506120fa9082612308565b6007556121196110ac61210b6105d9565b6110a684633b9aca00612460565b6006819055600c600061212a610aa7565b815260208101919091526040016000205550565b6000546001600160a01b031633146121985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610751565b6001600160a01b0381166121fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610751565b612206816123ce565b50565b6000546001600160a01b031633146122635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610751565b6001600160a01b0381166122b95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420616464207a65726f20616464726573730000000000000000006044820152606401610751565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600a602052604081206004015442106122fb57506001919050565b506000919050565b919050565b6000806123158385612771565b9050838110156123675760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610751565b9392505050565b600061236783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124e2565b6000610ab1620151806110a66003544261236e90919063ffffffff16565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061236783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061251c565b60008260000361247257506000611ff0565b600061247e8385612739565b90508261248b85836127cd565b146123675760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610751565b600081848411156125065760405162461bcd60e51b815260040161075191906127ef565b506000612513848661279f565b95945050505050565b6000818361253d5760405162461bcd60e51b815260040161075191906127ef565b50600061251384866127cd565b60006020828403121561255c57600080fd5b5035919050565b80356001600160a01b038116811461230357600080fd5b6000806040838503121561258d57600080fd5b61259683612563565b946020939093013593505050565b6000602082840312156125b657600080fd5b61236782612563565b602080825282518282018190526000919060409081850190868401855b8281101561265557815180518552868101516001600160a01b0316878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0808201519086015260e080820151908601526101009081015115159085015261012090930192908501906001016125dc565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016126a0576126a0612678565b5060010190565b6020808252604a908201527f57726f6e672077616c6c657420616464726573732c204f6e6c79207374616b6560408201527f72206f662074686973207374616b652063616e20706572666f726d20746869736060820152691037b832b930ba34b7b760b11b608082015260a00190565b60006020828403121561272957600080fd5b8151801515811461236757600080fd5b600081600019048311821515161561275357612753612678565b500290565b60006020828403121561276a57600080fd5b5051919050565b6000821982111561278457612784612678565b500190565b634e487b7160e01b600052600160045260246000fd5b6000828210156127b1576127b1612678565b500390565b6000816127c5576127c5612678565b506000190190565b6000826127ea57634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b8181101561281c57858101830151858201604001528201612800565b8181111561282e576000604083870101525b50601f01601f191692909201604001939250505056fea2646970667358221220ea0a37e1cb116df8a222081aa1fb5237070442e1f11ba06c3f8fd4f058b63fe264736f6c634300080e00330000000000000000000000003819f64f282bf135d62168c1e513280daf905e060000000000000000000000007e18e0b856963f2c9c131c895154f7670d8eee6a

Deployed Bytecode

0x6080604052600436106101c65760003560e01c8063a02e9d80116100f7578063d803a94811610095578063ed21aa8911610064578063ed21aa8914610511578063f2fde38b14610526578063faf9e01814610546578063fd5e6dd11461056657600080fd5b8063d803a948146104bc578063df90ebe8146104d2578063dfdc782c146104e7578063eb8d0624146104fc57600080fd5b8063bb0eae1e116100d1578063bb0eae1e14610443578063c03d5b4714610459578063d215300f1461046f578063d3ea43501461049c57600080fd5b8063a02e9d80146103e3578063a694fc3a14610403578063ae169a501461042357600080fd5b80635cfc83d4116101645780638119c0651161013e5780638119c0651461034d57806385a9f4f1146103855780638da5cb5b146103a557806390a73918146103c357600080fd5b80635cfc83d4146102eb578063715018a61461030b5780637ba6f4581461032057600080fd5b80632e17de78116101a05780632e17de781461027e5780634771f401146102a0578063584b62a1146102b65780635c9302c9146102d657600080fd5b8063134108eb146101d25780631f079e01146101fb578063202210461461021057600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101e860075481565b6040519081526020015b60405180910390f35b34801561020757600080fd5b506101e86105d9565b34801561021c57600080fd5b5061023061022b36600461254a565b61069b565b60408051998a526001600160a01b0390981660208a0152968801959095526060870193909352608086019190915260a085015260c084015260e08301521515610100820152610120016101f2565b34801561028a57600080fd5b5061029e61029936600461254a565b610703565b005b3480156102ac57600080fd5b506101e860055481565b3480156102c257600080fd5b506102306102d136600461257a565b610a32565b3480156102e257600080fd5b506101e8610aa7565b3480156102f757600080fd5b5061029e61030636600461254a565b610ab6565b34801561031757600080fd5b5061029e610d11565b34801561032c57600080fd5b5061034061033b3660046125a4565b610d77565b6040516101f291906125bf565b34801561035957600080fd5b5060025461036d906001600160a01b031681565b6040516001600160a01b0390911681526020016101f2565b34801561039157600080fd5b5061029e6103a036600461254a565b610e50565b3480156103b157600080fd5b506000546001600160a01b031661036d565b3480156103cf57600080fd5b5061029e6103de36600461254a565b611230565b3480156103ef57600080fd5b5060045461036d906001600160a01b031681565b34801561040f57600080fd5b506101e861041e36600461254a565b6112ee565b34801561042f57600080fd5b5061029e61043e36600461254a565b6119ec565b34801561044f57600080fd5b506101e860085481565b34801561046557600080fd5b506101e860095481565b34801561047b57600080fd5b506101e861048a36600461254a565b600c6020526000908152604090205481565b3480156104a857600080fd5b506101e86104b736600461254a565b611c89565b3480156104c857600080fd5b506101e860065481565b3480156104de57600080fd5b5061029e611e42565b3480156104f357600080fd5b506101e8611f66565b34801561050857600080fd5b5061029e611ff6565b34801561051d57600080fd5b5061029e61207b565b34801561053257600080fd5b5061029e6105413660046125a4565b61213e565b34801561055257600080fd5b5061029e6105613660046125a4565b612209565b34801561057257600080fd5b5061023061058136600461254a565b600a6020526000908152604090208054600182015460028301546003840154600485015460058601546006870154600788015460089098015496976001600160a01b0390961696949593949293919290919060ff1689565b60008060005b600d5481101561069557600d81815481106105fc576105fc612662565b600091825260209091206008600990920201015460ff161561068357610645600d828154811061062e5761062e612662565b9060005260206000209060090201600001546122db565b61068357610680600d828154811061065f5761065f612662565b9060005260206000209060090201600201548361230890919063ffffffff16565b91505b8061068d8161268e565b9150506105df565b50919050565b600d81815481106106ab57600080fd5b60009182526020909120600990910201805460018201546002830154600384015460048501546005860154600687015460078801546008909801549698506001600160a01b0390951696939592949193909260ff1689565b60026001540361075a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260019081556000828152600a60205260409020015481906001600160a01b0316331461079a5760405162461bcd60e51b8152600401610751906126a7565b6000818152600a602052604090206008015460ff166107f15760405162461bcd60e51b81526020600482015260136024820152725374616b65206973206e6f742061637469766560681b6044820152606401610751565b6107fa826122db565b6108465760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e6720706572696f64206973206e6f74206f7665720000000000006044820152606401610751565b600061085183611c89565b6000848152600a6020526040812060020154919250906108719083612308565b6000858152600a6020526040812060088101805460ff191690556001600790910155600d80549293509091869081106108ac576108ac612662565b906000526020600020906009020160080160006101000a81548160ff0219169083151502179055506001600d85815481106108e9576108e9612662565b906000526020600020906009020160070181905550610929600a60008681526020019081526020016000206002015460055461236e90919063ffffffff16565b600555600754610939908361236e565b600755600480546000868152600a60205260409081902060010154905163a9059cbb60e01b81526001600160a01b039182169381019390935260248301849052169063a9059cbb906044016020604051808303816000875af11580156109a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c79190612717565b506000848152600a60209081526040918290206001015482518781526001600160a01b03909116918101919091529081018290527f9af9627af40320b6de9024b9adcfe0a1b0b2a9de8f281140a50521cd8663bcec9060600160405180910390a15050600180555050565b600b6020528160005260406000208181548110610a4e57600080fd5b60009182526020909120600990910201805460018201546002830154600384015460048501546005860154600687015460078801546008909801549699506001600160a01b039095169750929591949093919060ff1689565b6000610ab16123b0565b905090565b6000818152600a602052604090206001015481906001600160a01b03163314610af15760405162461bcd60e51b8152600401610751906126a7565b6000818152600a602052604090206008015460ff16610b485760405162461bcd60e51b81526020600482015260136024820152725374616b65206973206e6f742061637469766560681b6044820152606401610751565b6000610b5383611c89565b905060008111610ba55760405162461bcd60e51b815260206004820152601f60248201527f4e6f2072657761726420617661696c61626c6520746f20636f6d706f756e64006044820152606401610751565b6000838152600a6020526040902060050154610bc19082612308565b6000848152600a60205260409020600581019190915560020154610be59082612308565b6000848152600a6020526040902060020155600d8054610c3191839186908110610c1157610c11612662565b90600052602060002090600902016002015461230890919063ffffffff16565b600d8481548110610c4457610c44612662565b6000918252602090912060026009909202010155600554610c659082612308565b600555600754610c75908261236e565b6007556000610c8384611c89565b6000858152600a6020526040902060060154909150610ca29082612308565b6000858152600a6020908152604091829020600681019390935560019092015481518781526001600160a01b039091169281019290925281018390527fe8aac0b9c01a732a82911ff8cc42a71dc698921c2fc93b92736e11774cfb95f99060600160405180910390a150505050565b6000546001600160a01b03163314610d6b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610751565b610d7560006123ce565b565b6001600160a01b0381166000908152600b60209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610e45576000848152602090819020604080516101208101825260098602909201805483526001808201546001600160a01b0316848601526002820154928401929092526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e08401526008015460ff1615156101008301529083529092019101610daf565b505050509050919050565b600260015403610ea25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610751565b600260019081556000828152600a60205260409020015481906001600160a01b03163314610ee25760405162461bcd60e51b8152600401610751906126a7565b6000818152600a602052604090206008015460ff16610f395760405162461bcd60e51b81526020600482015260136024820152725374616b65206973206e6f742061637469766560681b6044820152606401610751565b610f42826122db565b15610fb55760405162461bcd60e51b815260206004820152603a60248201527f5374616b696e6720706572696f64206973206f7665722c20596f752063616e6e60448201527f6f7420456d657267656e637920456e64205374616b65206e6f770000000000006064820152608401610751565b6000610fc083611c89565b6000848152600a602052604081206002908101549293509091610fe29161241e565b90506000610ff08284612308565b6000868152600a6020526040812060088101805460ff191690556002600790910155600d805492935090918790811061102b5761102b612662565b906000526020600020906009020160080160006101000a81548160ff0219169083151502179055506002600d868154811061106857611068612662565b9060005260206000209060090201600701819055506110856105d9565b156110d9576110b56110ac6110986105d9565b6110a685633b9aca00612460565b9061241e565b60065490612308565b6006556007546110d19084906110cb9085612308565b9061236e565b6007556110ea565b6007546110e6908461236e565b6007555b600654600c60006110f9610aa7565b815260200190815260200160002081905550611136600a60008781526020019081526020016000206002015460055461236e90919063ffffffff16565b600555600480546000878152600a60205260409081902060010154905163a9059cbb60e01b81526001600160a01b039182169381019390935260248301849052169063a9059cbb906044016020604051808303816000875af11580156111a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c49190612717565b506000858152600a60209081526040918290206001015482518881526001600160a01b03909116918101919091529081018290527f2ec7c2a17d4a19e166b3147fa600551e01599e9cd2865cba3fd89bff43f9daaa9060600160405180910390a1505060018055505050565b6000546001600160a01b0316331461128a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610751565b60095481036112db5760405162461bcd60e51b815260206004820152601e60248201527f416464206120646966666572656e74207374616b696e6720706572696f6400006044820152606401610751565b6112e88162015180612739565b60095550565b60006002600154036113425760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610751565b6002600155816113945760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e742073686f756c642062652067726561746572207468616e2030006044820152606401610751565b60048054604051636eb1769f60e11b8152339281019290925230602483015283916001600160a01b039091169063dd62ed3e90604401602060405180830381865afa1580156113e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140b9190612758565b101561146d5760405162461bcd60e51b815260206004820152602b60248201527f4e6f20616c6c6f77616e63652e20506c65617365206772616e7420686564726f60448201526a6e20616c6c6f77616e636560a81b6064820152608401610751565b600480546040516370a0823160e01b8152339281019290925283916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156114ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114de9190612758565b10156115375760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f74207374616b65206d6f7265207468616e207468652062616c616e604482015261636560f01b6064820152608401610751565b600480546040516323b872dd60e01b81523392810192909252306024830152604482018490526001600160a01b0316906323b872dd906064016020604051808303816000875af115801561158f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b39190612717565b50600d546040805161012081018252828152336020820152908101849052426060820181905260095460808301916115eb9190612771565b815260200160008152602001611614633b9aca006110a66006548861246090919063ffffffff16565b81526020016000815260200160011515815250600a60008381526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080160006101000a81548160ff021916908315150217905550905050600b6000336001600160a01b03166001600160a01b03168152602001908152602001600020600a60008381526020019081526020016000209080600181540180825580915050600190039060005260206000209060090201600090919091909150600082015481600001556001820160009054906101000a90046001600160a01b03168160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506002820154816002015560038201548160030155600482015481600401556005820154816005015560068201548160060155600782015481600701556008820160009054906101000a900460ff168160080160006101000a81548160ff0219169083151502179055505050600d600a60008381526020019081526020016000209080600181540180825580915050600190039060005260206000209060090201600090919091909150600082015481600001556001820160009054906101000a90046001600160a01b03168160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506002820154816002015560038201548160030155600482015481600401556005820154816005015560068201548160060155600782015481600701556008820160009054906101000a900460ff168160080160006101000a81548160ff0219169083151502179055505050336001600160a01b0316600d82815481106118f7576118f7612662565b60009182526020909120600160099092020101546001600160a01b03161461192157611921612789565b60055461192e9084612308565b6005819055507f6110ca4982d41dab511e89b27b2514e6b7f05fe84f3b635297ba93264d88321d813385600d858154811061196b5761196b612662565b906000526020600020906009020160030154600d868154811061199057611990612662565b9060005260206000209060090201600401546040516119da9594939291909485526001600160a01b0393909316602085015260408401919091526060830152608082015260a00190565b60405180910390a16001805592915050565b600260015403611a3e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610751565b600260019081556000828152600a60205260409020015481906001600160a01b03163314611a7e5760405162461bcd60e51b8152600401610751906126a7565b6000818152600a602052604090206008015460ff16611ad55760405162461bcd60e51b81526020600482015260136024820152725374616b65206973206e6f742061637469766560681b6044820152606401610751565b6000611ae083611c89565b905060008111611b325760405162461bcd60e51b815260206004820152601c60248201527f4e6f2072657761726420617661696c61626c6520746f20636c61696d000000006044820152606401610751565b6000838152600a6020526040902060050154611b4e9082612308565b6000848152600a60205260409020600581019190915560060154611b729082612308565b6000848152600a6020526040902060060155600754611b91908261236e565b600755600480546000858152600a60205260409081902060010154905163a9059cbb60e01b81526001600160a01b039182169381019390935260248301849052169063a9059cbb906044016020604051808303816000875af1158015611bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1f9190612717565b506000838152600a60209081526040918290206001015482518681526001600160a01b03909116918101919091529081018290527fca29369147407cc8b537699ccd94d3b7188d06defde3ea92d5e851c69723e78d9060600160405180910390a150506001805550565b6000818152600a602090815260408083208151610120810183528154815260018201546001600160a01b0316938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015460ff1615156101008201819052829190611d505760405162461bcd60e51b81526020600482015260136024820152725374616b65206973206e6f742061637469766560681b6044820152606401610751565b611d59846122db565b15611e0f576000611d9d611d7c6201518060035485606001516110a6919061279f565b611d9762015180856060015186608001516110a6919061279f565b90612308565b9050805b6000818152600c602052604090205415611df657611def8360c001516110cb633b9aca006110a6600c600087815260200190815260200160002054886040015161246090919063ffffffff16565b9350611e08565b80611e00816127b6565b915050611da1565b5050611e3b565b611e388160c001516110cb633b9aca006110a6600654866040015161246090919063ffffffff16565b91505b5092915050565b6000546001600160a01b03163314611e9c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610751565b6000611ea6611f66565b905060008111611eec5760405162461bcd60e51b81526020600482015260116024820152704e6f206475737420617661696c61626c6560781b6044820152606401610751565b6004805460405163a9059cbb60e01b81523392810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f629190612717565b5050565b600080611ff0611f8360075460055461230890919063ffffffff16565b600480546040516370a0823160e01b815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611fcc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cb9190612758565b92915050565b6002546040805163ef6bba3760e01b815290516000926001600160a01b03169163ef6bba37916004808301926020929190829003018187875af1158015612041573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120659190612758565b6008549091506120759082612308565b60085550565b60025460408051631bee160f60e01b815290516000926001600160a01b031691631bee160f916004808301926020929190829003018187875af11580156120c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ea9190612758565b6007549091506120fa9082612308565b6007556121196110ac61210b6105d9565b6110a684633b9aca00612460565b6006819055600c600061212a610aa7565b815260208101919091526040016000205550565b6000546001600160a01b031633146121985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610751565b6001600160a01b0381166121fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610751565b612206816123ce565b50565b6000546001600160a01b031633146122635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610751565b6001600160a01b0381166122b95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420616464207a65726f20616464726573730000000000000000006044820152606401610751565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600a602052604081206004015442106122fb57506001919050565b506000919050565b919050565b6000806123158385612771565b9050838110156123675760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610751565b9392505050565b600061236783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124e2565b6000610ab1620151806110a66003544261236e90919063ffffffff16565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061236783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061251c565b60008260000361247257506000611ff0565b600061247e8385612739565b90508261248b85836127cd565b146123675760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610751565b600081848411156125065760405162461bcd60e51b815260040161075191906127ef565b506000612513848661279f565b95945050505050565b6000818361253d5760405162461bcd60e51b815260040161075191906127ef565b50600061251384866127cd565b60006020828403121561255c57600080fd5b5035919050565b80356001600160a01b038116811461230357600080fd5b6000806040838503121561258d57600080fd5b61259683612563565b946020939093013593505050565b6000602082840312156125b657600080fd5b61236782612563565b602080825282518282018190526000919060409081850190868401855b8281101561265557815180518552868101516001600160a01b0316878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0808201519086015260e080820151908601526101009081015115159085015261012090930192908501906001016125dc565b5091979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016126a0576126a0612678565b5060010190565b6020808252604a908201527f57726f6e672077616c6c657420616464726573732c204f6e6c79207374616b6560408201527f72206f662074686973207374616b652063616e20706572666f726d20746869736060820152691037b832b930ba34b7b760b11b608082015260a00190565b60006020828403121561272957600080fd5b8151801515811461236757600080fd5b600081600019048311821515161561275357612753612678565b500290565b60006020828403121561276a57600080fd5b5051919050565b6000821982111561278457612784612678565b500190565b634e487b7160e01b600052600160045260246000fd5b6000828210156127b1576127b1612678565b500390565b6000816127c5576127c5612678565b506000190190565b6000826127ea57634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b8181101561281c57858101830151858201604001528201612800565b8181111561282e576000604083870101525b50601f01601f191692909201604001939250505056fea2646970667358221220ea0a37e1cb116df8a222081aa1fb5237070442e1f11ba06c3f8fd4f058b63fe264736f6c634300080e0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000003819f64f282bf135d62168c1e513280daf905e060000000000000000000000007e18e0b856963f2c9c131c895154f7670d8eee6a

-----Decoded View---------------
Arg [0] : _hdrnToken (address): 0x3819f64f282bf135d62168C1e513280dAF905e06
Arg [1] : _swapContractAddress (address): 0x7E18e0b856963f2C9c131C895154f7670d8EeE6A

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003819f64f282bf135d62168c1e513280daf905e06
Arg [1] : 0000000000000000000000007e18e0b856963f2c9c131c895154f7670d8eee6a


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.