ETH Price: $1,817.90 (+0.29%)
Gas: 30 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Sponsored

Transaction Hash
Method
Block
From
To
Value
Process123053322021-04-24 21:15:15756 days 1 hr ago1619298915IN
0x9D79C6...fe9E0DcC
0 ETH0.0225571248
Process117413322021-01-28 1:19:38842 days 21 hrs ago1611796778IN
0x9D79C6...fe9E0DcC
0 ETH0.0225571248
Process117413312021-01-28 1:19:32842 days 21 hrs ago1611796772IN
0x9D79C6...fe9E0DcC
0 ETH0.0225571248
Process116957692021-01-21 1:09:16849 days 22 hrs ago1611191356IN
0x9D79C6...fe9E0DcC
0 ETH0.0225571248
Process116957682021-01-21 1:09:15849 days 22 hrs ago1611191355IN
0x9D79C6...fe9E0DcC
0 ETH0.0225571248
Process116501802021-01-14 1:05:21856 days 22 hrs ago1610586321IN
0x9D79C6...fe9E0DcC
0 ETH0.0225571248
Process116500702021-01-14 0:40:20856 days 22 hrs ago1610584820IN
0x9D79C6...fe9E0DcC
0 ETH0.0225571248
Process111048392020-10-22 8:09:17940 days 15 hrs ago1603354157IN
0x9D79C6...fe9E0DcC
0 ETH0.0301324931.00000145
Process111029372020-10-22 1:06:29940 days 22 hrs ago1603328789IN
0x9D79C6...fe9E0DcC
0 ETH0.0225571248
Process111026742020-10-22 0:07:07940 days 23 hrs ago1603325227IN
0x9D79C6...fe9E0DcC
0 ETH0.0225571248
Process110359112020-10-11 18:37:28951 days 4 hrs ago1602441448IN
0x9D79C6...fe9E0DcC
0 ETH0.006477424
Process106112332020-08-07 6:57:551016 days 16 hrs ago1596783475IN
0x9D79C6...fe9E0DcC
0 ETH0.0135575558
Process104672712020-07-16 0:16:111038 days 22 hrs ago1594858571IN
0x9D79C6...fe9E0DcC
0 ETH0.0022680424
Process104220492020-07-09 0:16:011045 days 22 hrs ago1594253761IN
0x9D79C6...fe9E0DcC
0 ETH0.0022680424
Process103767062020-07-02 0:05:091052 days 23 hrs ago1593648309IN
0x9D79C6...fe9E0DcC
0 ETH0.0022680424
Process103316692020-06-25 0:11:151059 days 22 hrs ago1593043875IN
0x9D79C6...fe9E0DcC
0 ETH0.0022680424
Process102864612020-06-18 0:33:241066 days 22 hrs ago1592440404IN
0x9D79C6...fe9E0DcC
0 ETH0.0022680424
Process102410542020-06-11 0:07:521073 days 23 hrs ago1591834072IN
0x9D79C6...fe9E0DcC
0 ETH0.0022680424
Process101959732020-06-04 0:04:311080 days 23 hrs ago1591229071IN
0x9D79C6...fe9E0DcC
0 ETH0.0022680424
Process101510012020-05-28 0:14:241087 days 22 hrs ago1590624864IN
0x9D79C6...fe9E0DcC
0 ETH0.0022680424
Process101059392020-05-21 0:05:161094 days 23 hrs ago1590019516IN
0x9D79C6...fe9E0DcC
0 ETH0.0027800124
Process100609402020-05-14 0:05:011101 days 23 hrs ago1589414701IN
0x9D79C6...fe9E0DcC
0 ETH0.0027787924
Process100157892020-05-07 0:04:551108 days 23 hrs ago1588809895IN
0x9D79C6...fe9E0DcC
0 ETH0.0022680424
Process99706102020-04-30 0:04:491115 days 23 hrs ago1588205089IN
0x9D79C6...fe9E0DcC
0 ETH0.0022680424
Process99254002020-04-23 0:05:061122 days 23 hrs ago1587600306IN
0x9D79C6...fe9E0DcC
0 ETH0.0038105524
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:
ZCFees

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-10-09
*/

pragma solidity ^0.4.24;

// File: contracts/PeriodUtil.sol

/**
 * @title PeriodUtil
 * 
 * Interface used for Period calculation to allow better automated testing of Fees Contract
 *
 * (c) Philip Louw / Zero Carbon Project 2018. The MIT Licence.
 */
contract PeriodUtil {
    /**
    * @dev calculates the Period index for the given timestamp
    * @return Period count since EPOCH
    * @param timestamp The time in seconds since EPOCH (blocktime)
    */
    function getPeriodIdx(uint256 timestamp) public pure returns (uint256);
    
    /**
    * @dev Timestamp of the period start
    * @return Time in seconds since EPOCH of the Period Start
    * @param periodIdx Period Index to find the start timestamp of
    */
    function getPeriodStartTimestamp(uint256 periodIdx) public pure returns (uint256);

    /**
    * @dev Returns the Cycle count of the given Periods. A set of time creates a cycle, eg. If period is weeks the cycle can be years.
    * @return The Cycle Index
    * @param timestamp The time in seconds since EPOCH (blocktime)
    */
    function getPeriodCycle(uint256 timestamp) public pure returns (uint256);

    /**
    * @dev Amount of Tokens per time unit since the start of the given periodIdx
    * @return Tokens per Time Unit from the given periodIdx start till now
    * @param tokens Total amount of tokens from periodIdx start till now (blocktime)
    * @param periodIdx Period IDX to use for time start
    */
    function getRatePerTimeUnits(uint256 tokens, uint256 periodIdx) public view returns (uint256);

    /**
    * @dev Amount of time units in each Period, for exampe if units is hour and period is week it will be 168
    * @return Amount of time units per period
    */
    function getUnitsPerPeriod() public pure returns (uint256);
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * See https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address _who) public view returns (uint256);
  function transfer(address _to, uint256 _value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

// File: contracts/ERC20Burnable.sol

/**
 * @title BurnableToken
 * 
 * Interface for Basic ERC20 interactions and allowing burning  of tokens
 *
 * (c) Philip Louw / Zero Carbon Project 2018. The MIT Licence.
 */
contract ERC20Burnable is ERC20Basic {

    function burn(uint256 _value) public;
}

// File: openzeppelin-solidity/contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
    // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (_a == 0) {
      return 0;
    }

    c = _a * _b;
    assert(c / _a == _b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 _a, uint256 _b) internal pure returns (uint256) {
    // assert(_b > 0); // Solidity automatically throws when dividing by 0
    // uint256 c = _a / _b;
    // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold
    return _a / _b;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 _a, uint256 _b) internal pure returns (uint256) {
    assert(_b <= _a);
    return _a - _b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
    c = _a + _b;
    assert(c >= _a);
    return c;
  }
}

// File: contracts/ZCFees.sol

/**
 * @title ZCFees
 * 
 * Used to process transaction
 *
 * (c) Philip Louw / Zero Carbon Project 2018. The MIT Licence.
 */
contract ZCFees {

    using SafeMath for uint256;

    struct PaymentHistory {
        // If set 
        bool paid;
        // Payment to Fees
        uint256 fees;
        // Payment to Reward
        uint256 reward;
        // End of period token balance
        uint256 endBalance;
    }

    uint256 public totalRewards;
    uint256 public totalFees;

    mapping (uint256 => PaymentHistory) payments;
    address public tokenAddress;
    PeriodUtil public periodUtil;
    // Last week that has been executed
    uint256 public lastPeriodExecIdx;
    // Last Year that has been processed
    uint256 public lastPeriodCycleExecIdx;
    // Amount of time in seconds grase processing time
    uint256 grasePeriod;

    // Wallet for Fees payments
    address public feesWallet;
    // Wallet for Reward payments
    address public rewardWallet;
    
    // Fees 1 : % tokens taken per week
    uint256 internal constant FEES1_PER = 10;
    // Fees 1 : Max token payout per week
    uint256 internal constant FEES1_MAX_AMOUNT = 400000 * (10**18);
    // Fees 2 : % tokens taken per week
    uint256 internal constant FEES2_PER = 10;
    // Fees 2 : Max token payout per week
    uint256 internal constant FEES2_MAX_AMOUNT = 800000 * (10**18);
    // Min Amount of Fees to pay out per week
    uint256 internal constant FEES_TOKEN_MIN_AMOUNT = 24000 * (10**18);
    // Min Percentage Prev Week to pay out per week
    uint256 internal constant FEES_TOKEN_MIN_PERPREV = 95;
    // Rewards Percentage of Period Received
    uint256 internal constant REWARD_PER = 70;
    // % Amount of remaining tokens to burn at end of year
    uint256 internal constant BURN_PER = 25;
    
    /**
     * @param _tokenAdr The Address of the Token
     * @param _periodUtilAdr The Address of the PeriodUtil
     * @param _grasePeriod The time in seconds you allowed to process payments before avg is calculated into next period(s)
     * @param _feesWallet Where the fees are sent in tokens
     * @param _rewardWallet Where the rewards are sent in tokens
     */
    constructor (address _tokenAdr, address _periodUtilAdr, uint256 _grasePeriod, address _feesWallet, address _rewardWallet) public {
        assert(_tokenAdr != address(0));
        assert(_feesWallet != address(0));
        assert(_rewardWallet != address(0));
        assert(_periodUtilAdr != address(0));
        tokenAddress = _tokenAdr;
        feesWallet = _feesWallet;
        rewardWallet = _rewardWallet;
        periodUtil = PeriodUtil(_periodUtilAdr);

        grasePeriod = _grasePeriod;
        assert(grasePeriod > 0);
        // GrasePeriod must be less than period
        uint256 va1 = periodUtil.getPeriodStartTimestamp(1);
        uint256 va2 = periodUtil.getPeriodStartTimestamp(0);
        assert(grasePeriod < (va1 - va2));

        // Set the previous period values;
        lastPeriodExecIdx = getWeekIdx() - 1;
        lastPeriodCycleExecIdx = getYearIdx();
        PaymentHistory storage prevPayment = payments[lastPeriodExecIdx];
        prevPayment.fees = 0;
        prevPayment.reward = 0;
        prevPayment.paid = true;
        prevPayment.endBalance = 0;
    }

    /**
     * @dev Call when Fees processing needs to happen. Can only be called by the contract Owner
     */
    function process() public {
        uint256 currPeriodIdx = getWeekIdx();

        // Has the previous period been calculated?
        if (lastPeriodExecIdx == (currPeriodIdx - 1)) {
            // Nothing to do previous week has Already been processed
            return;
        }

        if ((currPeriodIdx - lastPeriodExecIdx) == 2) {
            paymentOnTime(currPeriodIdx);
            // End Of Year Payment
            if (lastPeriodCycleExecIdx < getYearIdx()) {
                processEndOfYear(currPeriodIdx - 1);
            }
        }
        else {
            uint256 availableTokens = currentBalance();
            // Missed Full Period! Very Bad!
            PaymentHistory memory lastExecPeriod = payments[lastPeriodExecIdx];
            uint256 tokensReceived = availableTokens.sub(lastExecPeriod.endBalance);
            // Average amount of tokens received per hour till now
            uint256 tokenHourlyRate = periodUtil.getRatePerTimeUnits(tokensReceived, lastPeriodExecIdx + 1);

            PaymentHistory memory prePeriod;

            for (uint256 calcPeriodIdx = lastPeriodExecIdx + 1; calcPeriodIdx < currPeriodIdx; calcPeriodIdx++) {
                prePeriod = payments[calcPeriodIdx - 1];
                uint256 periodTokenReceived = periodUtil.getUnitsPerPeriod().mul(tokenHourlyRate);
                makePayments(prePeriod, payments[calcPeriodIdx], periodTokenReceived, prePeriod.endBalance.add(periodTokenReceived), calcPeriodIdx);

                if (periodUtil.getPeriodCycle(periodUtil.getPeriodStartTimestamp(calcPeriodIdx + 1)) > lastPeriodCycleExecIdx) {
                    processEndOfYear(calcPeriodIdx);
                }
            }
        }

        assert(payments[currPeriodIdx - 1].paid);
        lastPeriodExecIdx = currPeriodIdx - 1;
    }

    /**
     * @dev Internal function to process end of year Clearance
     * @param yearEndPeriodCycle The Last Period Idx (Week Idx) of the year
     */
    function processEndOfYear(uint256 yearEndPeriodCycle) internal {
        PaymentHistory storage lastYearPeriod = payments[yearEndPeriodCycle];
        uint256 availableTokens = currentBalance();
        uint256 tokensToClear = min256(availableTokens,lastYearPeriod.endBalance);

        // Burn some of tokens
        uint256 tokensToBurn = tokensToClear.mul(BURN_PER).div(100);
        ERC20Burnable(tokenAddress).burn(tokensToBurn);

        uint256 tokensToFeesWallet = tokensToClear.sub(tokensToBurn);
        totalFees = totalFees.add(tokensToFeesWallet);
        assert(ERC20Burnable(tokenAddress).transfer(feesWallet, tokensToFeesWallet));
        lastPeriodCycleExecIdx = lastPeriodCycleExecIdx + 1;
        lastYearPeriod.endBalance = 0;

        emit YearEndClearance(lastPeriodCycleExecIdx, tokensToFeesWallet, tokensToBurn);
    }

    /**
     * @dev Called when Payments are call within a week of last payment
     * @param currPeriodIdx Current Period Idx (Week)
     */
    function paymentOnTime(uint256 currPeriodIdx) internal {
    
        uint256 availableTokens = currentBalance();
        PaymentHistory memory prePeriod = payments[currPeriodIdx - 2];

        uint256 tokensRecvInPeriod = availableTokens.sub(prePeriod.endBalance);

        if (tokensRecvInPeriod <= 0) {
            tokensRecvInPeriod = 0;
        }
        else if ((now - periodUtil.getPeriodStartTimestamp(currPeriodIdx)) > grasePeriod) {
            tokensRecvInPeriod = periodUtil.getRatePerTimeUnits(tokensRecvInPeriod, currPeriodIdx - 1).mul(periodUtil.getUnitsPerPeriod());
            if (tokensRecvInPeriod <= 0) {
                tokensRecvInPeriod = 0;
            }
            assert(availableTokens >= tokensRecvInPeriod);
        }   

        makePayments(prePeriod, payments[currPeriodIdx - 1], tokensRecvInPeriod, prePeriod.endBalance + tokensRecvInPeriod, currPeriodIdx - 1);
    }

    /**
    * @dev Process a payment period
    * @param prevPayment Previous periods payment records
    * @param currPayment Current periods payment records to be updated
    * @param tokensRaised Tokens received for the period
    * @param availableTokens Contract available balance including the tokens received for the period
    */
    function makePayments(PaymentHistory memory prevPayment, PaymentHistory storage currPayment, uint256 tokensRaised, uint256 availableTokens, uint256 weekIdx) internal {

        assert(prevPayment.paid);
        assert(!currPayment.paid);
        assert(availableTokens >= tokensRaised);

        // Fees 1 Payment
        uint256 fees1Pay = tokensRaised == 0 ? 0 : tokensRaised.mul(FEES1_PER).div(100);
        if (fees1Pay >= FEES1_MAX_AMOUNT) {
            fees1Pay = FEES1_MAX_AMOUNT;
        }
        // Fees 2 Payment
        uint256 fees2Pay = tokensRaised == 0 ? 0 : tokensRaised.mul(FEES2_PER).div(100);
        if (fees2Pay >= FEES2_MAX_AMOUNT) {
            fees2Pay = FEES2_MAX_AMOUNT;
        }

        uint256 feesPay = fees1Pay.add(fees2Pay);
        if (feesPay >= availableTokens) {
            feesPay = availableTokens;
        } else {
            // Calculates the Min percentage of previous month to pay
            uint256 prevFees95 = prevPayment.fees.mul(FEES_TOKEN_MIN_PERPREV).div(100);
            // Minimum amount of fees that is required
            uint256 minFeesPay = max256(FEES_TOKEN_MIN_AMOUNT, prevFees95);
            feesPay = max256(feesPay, minFeesPay);
            feesPay = min256(feesPay, availableTokens);
        }

        // Rewards Payout
        uint256 rewardPay = 0;
        if (feesPay < tokensRaised) {
            // There is money left for reward pool
            rewardPay = tokensRaised.mul(REWARD_PER).div(100);
            rewardPay = min256(rewardPay, availableTokens.sub(feesPay));
        }

        currPayment.fees = feesPay;
        currPayment.reward = rewardPay;

        totalFees = totalFees.add(feesPay);
        totalRewards = totalRewards.add(rewardPay);

        assert(ERC20Burnable(tokenAddress).transfer(rewardWallet, rewardPay));
        assert(ERC20Burnable(tokenAddress).transfer(feesWallet, feesPay));

        currPayment.endBalance = availableTokens - feesPay - rewardPay;
        currPayment.paid = true;

        emit Payment(weekIdx, rewardPay, feesPay);
    }

    /**
    * @dev Event when payment was made
    * @param weekIdx Week Idx since EPOCH for payment
    * @param rewardPay Amount of tokens paid to the reward pool
    * @param feesPay Amount of tokens paid in fees
    */
    event Payment(uint256 weekIdx, uint256 rewardPay, uint256 feesPay);

    /**
    * @dev Event when year end clearance happens
    * @param yearIdx Year the clearance happend for
    * @param feesPay Amount of tokens paid in fees
    * @param burned Amount of tokens burned
    */
    event YearEndClearance(uint256 yearIdx, uint256 feesPay, uint256 burned);


    /**
    * @dev Returns the token balance of the Fees contract
    */
    function currentBalance() internal view returns (uint256) {
        return ERC20Burnable(tokenAddress).balanceOf(address(this));
    }

    /**
    * @dev Returns the amount of weeks since EPOCH
    * @return Week count since EPOCH
    */
    function getWeekIdx() public view returns (uint256) {
        return periodUtil.getPeriodIdx(now);
    }

    /**
    * @dev Returns the Year
    */
    function getYearIdx() public view returns (uint256) {
        return periodUtil.getPeriodCycle(now);
    }

    /**
    * @dev Returns true if the week has been processed and paid out
    * @param weekIdx Weeks since EPOCH
    * @return true if week has been paid out
    */
    function weekProcessed(uint256 weekIdx) public view returns (bool) {
        return payments[weekIdx].paid;
    }

    /**
    * @dev Returns the amounts paid out for the given week
    * @param weekIdx Weeks since EPOCH
    */
    function paymentForWeek(uint256 weekIdx) public view returns (uint256 fees, uint256 reward) {
        PaymentHistory storage history = payments[weekIdx];
        fees = history.fees;
        reward = history.reward;
    }

    function max256(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function min256(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"totalRewards","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getWeekIdx","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalFees","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"weekIdx","type":"uint256"}],"name":"weekProcessed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastPeriodCycleExecIdx","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"periodUtil","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feesWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastPeriodExecIdx","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"process","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"weekIdx","type":"uint256"}],"name":"paymentForWeek","outputs":[{"name":"fees","type":"uint256"},{"name":"reward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getYearIdx","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_tokenAdr","type":"address"},{"name":"_periodUtilAdr","type":"address"},{"name":"_grasePeriod","type":"uint256"},{"name":"_feesWallet","type":"address"},{"name":"_rewardWallet","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"weekIdx","type":"uint256"},{"indexed":false,"name":"rewardPay","type":"uint256"},{"indexed":false,"name":"feesPay","type":"uint256"}],"name":"Payment","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"yearIdx","type":"uint256"},{"indexed":false,"name":"feesPay","type":"uint256"},{"indexed":false,"name":"burned","type":"uint256"}],"name":"YearEndClearance","type":"event"}]

60806040523480156200001157600080fd5b5060405160a0806200143b833981016040908152815160208301519183015160608401516080909401519193909160008080600160a060020a03881615156200005657fe5b600160a060020a03851615156200006957fe5b600160a060020a03841615156200007c57fe5b600160a060020a03871615156200008f57fe5b60038054600160a060020a03808b16600160a060020a031992831617909255600880548884169083161790556009805487841690831617905560048054928a1692909116919091179055600786905560008611620000e957fe5b60048054604080517f872887c200000000000000000000000000000000000000000000000000000000815260019381019390935251600160a060020a039091169163872887c29160248083019260209291908290030181600087803b1580156200015257600080fd5b505af115801562000167573d6000803e3d6000fd5b505050506040513d60208110156200017e57600080fd5b505160048054604080517f872887c200000000000000000000000000000000000000000000000000000000815260009381018490529051939650600160a060020a039091169263872887c292602480840193602093929083900390910190829087803b158015620001ee57600080fd5b505af115801562000203573d6000803e3d6000fd5b505050506040513d60208110156200021a57600080fd5b5051600754909250828403116200022d57fe5b6001620002426401000000006200029b810204565b036005556200025964010000000062000338810204565b6006555050600554600090815260026020819052604082206001808201849055918101839055805460ff191690911781556003015550620003a2945050505050565b60048054604080517f747ad1c1000000000000000000000000000000000000000000000000000000008152429381019390935251600092600160a060020a039092169163747ad1c191602480830192602092919082900301818787803b1580156200030557600080fd5b505af11580156200031a573d6000803e3d6000fd5b505050506040513d60208110156200033157600080fd5b5051905090565b60048054604080517fe45fc71f000000000000000000000000000000000000000000000000000000008152429381019390935251600092600160a060020a039092169163e45fc71f91602480830192602092919082900301818787803b1580156200030557600080fd5b61108980620003b26000396000f3006080604052600436106100ab5763ffffffff60e060020a6000350416630e15561a81146100b05780631042ca73146100d757806313114a9d146100ec5780633239d232146101015780633740a42f1461012d57806375166a42146101425780637e44d2cc146101735780639c9f2292146101885780639d76ea581461019d578063c33fb877146101b2578063d14e1784146101c9578063fb75b2c7146101fa578063fd8097591461020f575b600080fd5b3480156100bc57600080fd5b506100c5610224565b60408051918252519081900360200190f35b3480156100e357600080fd5b506100c561022a565b3480156100f857600080fd5b506100c56102c4565b34801561010d57600080fd5b506101196004356102ca565b604080519115158252519081900360200190f35b34801561013957600080fd5b506100c56102df565b34801561014e57600080fd5b506101576102e5565b60408051600160a060020a039092168252519081900360200190f35b34801561017f57600080fd5b506101576102f4565b34801561019457600080fd5b506100c5610303565b3480156101a957600080fd5b50610157610309565b3480156101be57600080fd5b506101c7610318565b005b3480156101d557600080fd5b506101e1600435610709565b6040805192835260208301919091528051918290030190f35b34801561020657600080fd5b50610157610726565b34801561021b57600080fd5b506100c5610735565b60005481565b60048054604080517f747ad1c1000000000000000000000000000000000000000000000000000000008152429381019390935251600092600160a060020a039092169163747ad1c191602480830192602092919082900301818787803b15801561029357600080fd5b505af11580156102a7573d6000803e3d6000fd5b505050506040513d60208110156102bd57600080fd5b5051905090565b60015481565b60009081526002602052604090205460ff1690565b60065481565b600454600160a060020a031681565b600854600160a060020a031681565b60055481565b600354600160a060020a031681565b600080610323611032565b60008061032e611032565b60008061033961022a565b975060018803600554141561034d576106ff565b600554880360021415610385576103638861079e565b61036b610735565b600654101561038057610380600189036109fa565b6106d7565b61038d610bf3565b6005546000908152600260208181526040928390208351608081018552815460ff16151581526001820154928101929092529182015492810192909252600301546060820181905291985096506103eb90889063ffffffff610c5816565b60048054600554604080517f51ffd9e70000000000000000000000000000000000000000000000000000000081529384018590526001909101602484015251929750600160a060020a0316916351ffd9e7916044808201926020929091908290030181600087803b15801561045f57600080fd5b505af1158015610473573d6000803e3d6000fd5b505050506040513d602081101561048957600080fd5b505160055490945060010191505b878210156106d757600019820160009081526002602081815260408084208151608081018352815460ff161515815260018201548185015293810154848301526003015460608401526004805482517f703a6beb000000000000000000000000000000000000000000000000000000008152925194985061057e958a95600160a060020a039092169463703a6beb94808501949193929083900390910190829087803b15801561054657600080fd5b505af115801561055a573d6000803e3d6000fd5b505050506040513d602081101561057057600080fd5b50519063ffffffff610c6f16565b600083815260026020526040902060608501519192506105b39185919084906105ad908263ffffffff610c9816565b86610ca5565b60065460048054604080517f872887c2000000000000000000000000000000000000000000000000000000008152600187019381019390935251600160a060020a039091169163e45fc71f91839163872887c29160248083019260209291908290030181600087803b15801561062857600080fd5b505af115801561063c573d6000803e3d6000fd5b505050506040513d602081101561065257600080fd5b50516040805160e060020a63ffffffff851602815260048101929092525160248083019260209291908290030181600087803b15801561069157600080fd5b505af11580156106a5573d6000803e3d6000fd5b505050506040513d60208110156106bb57600080fd5b505111156106cc576106cc826109fa565b600190910190610497565b600019880160009081526002602052604090205460ff1615156106f657fe5b60001988016005555b5050505050505050565b600090815260026020819052604090912060018101549101549091565b600954600160a060020a031681565b60048054604080517fe45fc71f000000000000000000000000000000000000000000000000000000008152429381019390935251600092600160a060020a039092169163e45fc71f91602480830192602092919082900301818787803b15801561029357600080fd5b60006107a8611032565b60006107b2610bf3565b60011985016000908152600260208181526040928390208351608081018552815460ff161515815260018201549281019290925291820154928101929092526003015460608201819052919450925061081290849063ffffffff610c5816565b905060008111610824575060006109c9565b60075460048054604080517f872887c200000000000000000000000000000000000000000000000000000000815292830188905251600160a060020a039091169163872887c29160248083019260209291908290030181600087803b15801561088c57600080fd5b505af11580156108a0573d6000803e3d6000fd5b505050506040513d60208110156108b657600080fd5b5051420311156109c9576109b1600460009054906101000a9004600160a060020a0316600160a060020a031663703a6beb6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561091657600080fd5b505af115801561092a573d6000803e3d6000fd5b505050506040513d602081101561094057600080fd5b505160048054604080517f51ffd9e70000000000000000000000000000000000000000000000000000000081529283018690526000198901602484015251600160a060020a03909116916351ffd9e79160448083019260209291908290030181600087803b15801561054657600080fd5b9050600081116109bf575060005b808310156109c957fe5b6109f48260026000600188038152602001908152602001600020838486606001510160018903610ca5565b50505050565b600081815260026020526040812090808080610a14610bf3565b9350610a24848660030154610ff5565b9250610a486064610a3c85601963ffffffff610c6f16565b9063ffffffff61100d16565b600354604080517f42966c68000000000000000000000000000000000000000000000000000000008152600481018490529051929450600160a060020a03909116916342966c689160248082019260009290919082900301818387803b158015610ab157600080fd5b505af1158015610ac5573d6000803e3d6000fd5b50505050610adc8284610c5890919063ffffffff16565b600154909150610af2908263ffffffff610c9816565b600155600354600854604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b505050506040513d6020811015610b9157600080fd5b50511515610b9b57fe5b60068054600101815560006003870155546040805191825260208201839052818101849052517fb2e1760722dd273e80779eafb236d2266742245f734ad37054676c774ff10ab89181900360600190a1505050505050565b600354604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600092600160a060020a0316916370a0823191602480830192602092919082900301818787803b15801561029357600080fd5b600082821115610c6457fe5b508082035b92915050565b6000821515610c8057506000610c69565b50818102818382811515610c9057fe5b0414610c6957fe5b81810182811015610c6957fe5b6000806000806000808a600001511515610cbb57fe5b895460ff1615610cc757fe5b88881015610cd157fe5b8815610cf257610ced6064610a3c8b600a63ffffffff610c6f16565b610cf5565b60005b95506954b40b1f852bda0000008610610d16576954b40b1f852bda00000095505b8815610d3757610d326064610a3c8b600a63ffffffff610c6f16565b610d3a565b60005b945069a968163f0a57b40000008510610d5b5769a968163f0a57b400000094505b610d6b868663ffffffff610c9816565b9350878410610d7c57879350610dca565b610d996064610a3c605f8e60200151610c6f90919063ffffffff16565b9250610daf6905150ae84a8cdf00000084611022565b9150610dbb8483611022565b9350610dc78489610ff5565b93505b50600088841015610e0957610deb6064610a3c8b604663ffffffff610c6f16565b9050610e0681610e018a8763ffffffff610c5816565b610ff5565b90505b6001808b0185905560028b0182905554610e29908563ffffffff610c9816565b600155600054610e3f908263ffffffff610c9816565b6000908155600354600954604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152602481018690529051919092169263a9059cbb92604480820193602093909283900390910190829087803b158015610eb857600080fd5b505af1158015610ecc573d6000803e3d6000fd5b505050506040513d6020811015610ee257600080fd5b50511515610eec57fe5b600354600854604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152602481018890529051919092169163a9059cbb9160448083019260209291908290030181600087803b158015610f5e57600080fd5b505af1158015610f72573d6000803e3d6000fd5b505050506040513d6020811015610f8857600080fd5b50511515610f9257fe5b83880381900360038b0155895460ff19166001178a55604080518881526020810183905280820186905290517ff7d93633da3b67c426318795718ea5281ab25439b8e6654d9c866bddee771ad69181900360600190a15050505050505050505050565b60008183106110045781611006565b825b9392505050565b6000818381151561101a57fe5b049392505050565b6000818310156110045781611006565b60806040519081016040528060001515815260200160008152602001600081526020016000815250905600a165627a7a72305820003fba9f4df6f5f556fa83e827ea023f7f13569515e6080559604e182d0045be00290000000000000000000000006737fe98389ffb356f64ebb726aa1a92390d94fb0000000000000000000000002bcf5193687d9abd60128f4f7307054431d724a10000000000000000000000000000000000000000000000000000000000000e100000000000000000000000008054f4a0bf50f550a02d9d0b7a53f083e689068b000000000000000000000000200dcdd8bf9d8429569281c9c46bd120c53ddba4

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

0000000000000000000000006737fe98389ffb356f64ebb726aa1a92390d94fb0000000000000000000000002bcf5193687d9abd60128f4f7307054431d724a10000000000000000000000000000000000000000000000000000000000000e100000000000000000000000008054f4a0bf50f550a02d9d0b7a53f083e689068b000000000000000000000000200dcdd8bf9d8429569281c9c46bd120c53ddba4

-----Decoded View---------------
Arg [0] : _tokenAdr (address): 0x6737fE98389Ffb356F64ebB726aA1a92390D94Fb
Arg [1] : _periodUtilAdr (address): 0x2BCF5193687d9aBd60128f4F7307054431D724A1
Arg [2] : _grasePeriod (uint256): 3600
Arg [3] : _feesWallet (address): 0x8054f4A0Bf50f550A02d9d0B7a53F083E689068b
Arg [4] : _rewardWallet (address): 0x200Dcdd8bf9D8429569281c9C46bD120C53dDBa4

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000006737fe98389ffb356f64ebb726aa1a92390d94fb
Arg [1] : 0000000000000000000000002bcf5193687d9abd60128f4f7307054431d724a1
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000e10
Arg [3] : 0000000000000000000000008054f4a0bf50f550a02d9d0b7a53f083e689068b
Arg [4] : 000000000000000000000000200dcdd8bf9d8429569281c9c46bd120c53ddba4


Swarm Source

bzzr://003fba9f4df6f5f556fa83e827ea023f7f13569515e6080559604e182d0045be

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.