Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Sponsored
Latest 25 from a total of 106 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
|---|---|---|---|---|---|---|---|---|---|
| Process | 12305332 | 756 days 1 hr ago | IN | 0 ETH | 0.02255712 | ||||
| Process | 11741332 | 842 days 21 hrs ago | IN | 0 ETH | 0.02255712 | ||||
| Process | 11741331 | 842 days 21 hrs ago | IN | 0 ETH | 0.02255712 | ||||
| Process | 11695769 | 849 days 22 hrs ago | IN | 0 ETH | 0.02255712 | ||||
| Process | 11695768 | 849 days 22 hrs ago | IN | 0 ETH | 0.02255712 | ||||
| Process | 11650180 | 856 days 22 hrs ago | IN | 0 ETH | 0.02255712 | ||||
| Process | 11650070 | 856 days 22 hrs ago | IN | 0 ETH | 0.02255712 | ||||
| Process | 11104839 | 940 days 15 hrs ago | IN | 0 ETH | 0.03013249 | ||||
| Process | 11102937 | 940 days 22 hrs ago | IN | 0 ETH | 0.02255712 | ||||
| Process | 11102674 | 940 days 23 hrs ago | IN | 0 ETH | 0.02255712 | ||||
| Process | 11035911 | 951 days 4 hrs ago | IN | 0 ETH | 0.0064774 | ||||
| Process | 10611233 | 1016 days 16 hrs ago | IN | 0 ETH | 0.01355755 | ||||
| Process | 10467271 | 1038 days 22 hrs ago | IN | 0 ETH | 0.00226804 | ||||
| Process | 10422049 | 1045 days 22 hrs ago | IN | 0 ETH | 0.00226804 | ||||
| Process | 10376706 | 1052 days 23 hrs ago | IN | 0 ETH | 0.00226804 | ||||
| Process | 10331669 | 1059 days 22 hrs ago | IN | 0 ETH | 0.00226804 | ||||
| Process | 10286461 | 1066 days 22 hrs ago | IN | 0 ETH | 0.00226804 | ||||
| Process | 10241054 | 1073 days 23 hrs ago | IN | 0 ETH | 0.00226804 | ||||
| Process | 10195973 | 1080 days 23 hrs ago | IN | 0 ETH | 0.00226804 | ||||
| Process | 10151001 | 1087 days 22 hrs ago | IN | 0 ETH | 0.00226804 | ||||
| Process | 10105939 | 1094 days 23 hrs ago | IN | 0 ETH | 0.00278001 | ||||
| Process | 10060940 | 1101 days 23 hrs ago | IN | 0 ETH | 0.00277879 | ||||
| Process | 10015789 | 1108 days 23 hrs ago | IN | 0 ETH | 0.00226804 | ||||
| Process | 9970610 | 1115 days 23 hrs ago | IN | 0 ETH | 0.00226804 | ||||
| Process | 9925400 | 1122 days 23 hrs ago | IN | 0 ETH | 0.00381055 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ZCFees
Compiler Version
v0.4.25+commit.59dbf8f1
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.
[ 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.