Latest 25 from a total of 24,934 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 23842790 | 98 days ago | IN | 0 ETH | 0.00091961 | ||||
| Withdraw | 23061620 | 207 days ago | IN | 0 ETH | 0.00004833 | ||||
| Withdraw | 22860663 | 235 days ago | IN | 0 ETH | 0.00055263 | ||||
| Withdraw | 22336276 | 308 days ago | IN | 0 ETH | 0.0001599 | ||||
| Withdraw | 21627789 | 407 days ago | IN | 0 ETH | 0.00096629 | ||||
| Withdraw | 21503914 | 425 days ago | IN | 0 ETH | 0.0007407 | ||||
| Withdraw | 21464107 | 430 days ago | IN | 0 ETH | 0.00090248 | ||||
| Withdraw | 21462706 | 430 days ago | IN | 0 ETH | 0.00127052 | ||||
| Withdraw | 21420116 | 436 days ago | IN | 0 ETH | 0.00269416 | ||||
| Withdraw | 21334640 | 448 days ago | IN | 0 ETH | 0.00382502 | ||||
| Withdraw | 21222663 | 464 days ago | IN | 0 ETH | 0.00381973 | ||||
| Withdraw | 21211109 | 466 days ago | IN | 0 ETH | 0.00334558 | ||||
| Withdraw | 21005069 | 494 days ago | IN | 0 ETH | 0.00109452 | ||||
| Withdraw | 20952547 | 502 days ago | IN | 0 ETH | 0.00197372 | ||||
| Withdraw | 20521553 | 562 days ago | IN | 0 ETH | 0.00050294 | ||||
| Withdraw | 20404190 | 578 days ago | IN | 0 ETH | 0.00033672 | ||||
| Withdraw | 20252444 | 599 days ago | IN | 0 ETH | 0.00056151 | ||||
| Withdraw | 20141960 | 615 days ago | IN | 0 ETH | 0.00083445 | ||||
| Withdraw | 19764117 | 668 days ago | IN | 0 ETH | 0.0015036 | ||||
| Withdraw | 19717182 | 674 days ago | IN | 0 ETH | 0.00165687 | ||||
| Withdraw | 19704722 | 676 days ago | IN | 0 ETH | 0.00335927 | ||||
| Withdraw | 19691768 | 678 days ago | IN | 0 ETH | 0.00288369 | ||||
| Withdraw | 19619348 | 688 days ago | IN | 0 ETH | 0.0154776 | ||||
| Withdraw | 19499004 | 705 days ago | IN | 0 ETH | 0.00428815 | ||||
| Withdraw | 19481659 | 707 days ago | IN | 0 ETH | 0.00476911 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 10403248 | 2062 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
KyberStaking
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-07-06
*/
// File: contracts/sol6/IERC20.sol
pragma solidity 0.6.6;
interface IERC20 {
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
function approve(address _spender, uint256 _value) external returns (bool success);
function transfer(address _to, uint256 _value) external returns (bool success);
function transferFrom(
address _from,
address _to,
uint256 _value
) external returns (bool success);
function allowance(address _owner, address _spender) external view returns (uint256 remaining);
function balanceOf(address _owner) external view returns (uint256 balance);
function decimals() external view returns (uint8 digits);
function totalSupply() external view returns (uint256 supply);
}
// to support backward compatible contract name -- so function signature remains same
abstract contract ERC20 is IERC20 {
}
// File: contracts/sol6/utils/zeppelin/ReentrancyGuard.sol
pragma solidity 0.6.6;
/**
* @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].
*/
contract ReentrancyGuard {
bool private _notEntered;
constructor () internal {
// Storing an initial 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 percetange 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.
_notEntered = true;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and make it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_notEntered, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_notEntered = false;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_notEntered = true;
}
}
// File: contracts/sol6/Dao/IEpochUtils.sol
pragma solidity 0.6.6;
interface IEpochUtils {
function epochPeriodInSeconds() external view returns (uint256);
function firstEpochStartTimestamp() external view returns (uint256);
function getCurrentEpochNumber() external view returns (uint256);
function getEpochNumber(uint256 timestamp) external view returns (uint256);
}
// File: contracts/sol6/Dao/IKyberStaking.sol
pragma solidity 0.6.6;
interface IKyberStaking is IEpochUtils {
event Delegated(
address indexed staker,
address indexed representative,
uint256 indexed epoch,
bool isDelegated
);
event Deposited(uint256 curEpoch, address indexed staker, uint256 amount);
event Withdraw(uint256 indexed curEpoch, address indexed staker, uint256 amount);
function initAndReturnStakerDataForCurrentEpoch(address staker)
external
returns (
uint256 stake,
uint256 delegatedStake,
address representative
);
function deposit(uint256 amount) external;
function delegate(address dAddr) external;
function withdraw(uint256 amount) external;
/**
* @notice return combine data (stake, delegatedStake, representative) of a staker
* @dev allow to get staker data up to current epoch + 1
*/
function getStakerData(address staker, uint256 epoch)
external
view
returns (
uint256 stake,
uint256 delegatedStake,
address representative
);
function getLatestStakerData(address staker)
external
view
returns (
uint256 stake,
uint256 delegatedStake,
address representative
);
/**
* @notice return raw data of a staker for an epoch
* WARN: should be used only for initialized data
* if data has not been initialized, it will return all 0
* pool master shouldn't use this function to compute/distribute rewards of pool members
*/
function getStakerRawData(address staker, uint256 epoch)
external
view
returns (
uint256 stake,
uint256 delegatedStake,
address representative
);
}
// File: contracts/sol6/IKyberDao.sol
pragma solidity 0.6.6;
interface IKyberDao is IEpochUtils {
event Voted(address indexed staker, uint indexed epoch, uint indexed campaignID, uint option);
function getLatestNetworkFeeDataWithCache()
external
returns (uint256 feeInBps, uint256 expiryTimestamp);
function getLatestBRRDataWithCache()
external
returns (
uint256 burnInBps,
uint256 rewardInBps,
uint256 rebateInBps,
uint256 epoch,
uint256 expiryTimestamp
);
function handleWithdrawal(address staker, uint256 penaltyAmount) external;
function vote(uint256 campaignID, uint256 option) external;
function getLatestNetworkFeeData()
external
view
returns (uint256 feeInBps, uint256 expiryTimestamp);
function shouldBurnRewardForEpoch(uint256 epoch) external view returns (bool);
/**
* @dev return staker's reward percentage in precision for a past epoch only
* fee handler should call this function when a staker wants to claim reward
* return 0 if staker has no votes or stakes
*/
function getPastEpochRewardPercentageInPrecision(address staker, uint256 epoch)
external
view
returns (uint256);
/**
* @dev return staker's reward percentage in precision for the current epoch
* reward percentage is not finalized until the current epoch is ended
*/
function getCurrentEpochRewardPercentageInPrecision(address staker)
external
view
returns (uint256);
}
// File: contracts/sol6/utils/zeppelin/SafeMath.sol
pragma solidity 0.6.6;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, 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) {
// Solidity only automatically asserts when dividing by 0
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;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
}
// File: contracts/sol6/Dao/EpochUtils.sol
pragma solidity 0.6.6;
contract EpochUtils is IEpochUtils {
using SafeMath for uint256;
uint256 public override epochPeriodInSeconds;
uint256 public override firstEpochStartTimestamp;
function getCurrentEpochNumber() public view override returns (uint256) {
return getEpochNumber(now);
}
function getEpochNumber(uint256 timestamp) public view override returns (uint256) {
if (timestamp < firstEpochStartTimestamp || epochPeriodInSeconds == 0) {
return 0;
}
// ((timestamp - firstEpochStartTimestamp) / epochPeriodInSeconds) + 1;
return ((timestamp.sub(firstEpochStartTimestamp)).div(epochPeriodInSeconds)).add(1);
}
}
// File: contracts/sol6/Dao/KyberStaking.sol
pragma solidity 0.6.6;
/**
* @notice This contract is using SafeMath for uint, which is inherited from EpochUtils
* Some events are moved to interface, easier for public uses
* Staking contract will be deployed by KyberDao's contract
*/
contract KyberStaking is IKyberStaking, EpochUtils, ReentrancyGuard {
struct StakerData {
uint256 stake;
uint256 delegatedStake;
address representative;
}
IERC20 public immutable kncToken;
IKyberDao public immutable kyberDao;
// staker data per epoch, including stake, delegated stake and representative
mapping(uint256 => mapping(address => StakerData)) internal stakerPerEpochData;
// latest data of a staker, including stake, delegated stake, representative
mapping(address => StakerData) internal stakerLatestData;
// true/false: if data has been initialized at an epoch for a staker
mapping(uint256 => mapping(address => bool)) internal hasInited;
// event is fired if something is wrong with withdrawal
// even though the withdrawal is still successful
event WithdrawDataUpdateFailed(uint256 curEpoch, address staker, uint256 amount);
constructor(
IERC20 _kncToken,
uint256 _epochPeriod,
uint256 _startTimestamp,
IKyberDao _kyberDao
) public {
require(_epochPeriod > 0, "ctor: epoch period is 0");
require(_startTimestamp >= now, "ctor: start in the past");
require(_kncToken != IERC20(0), "ctor: kncToken 0");
require(_kyberDao != IKyberDao(0), "ctor: kyberDao 0");
epochPeriodInSeconds = _epochPeriod;
firstEpochStartTimestamp = _startTimestamp;
kncToken = _kncToken;
kyberDao = _kyberDao;
}
/**
* @dev calls to set delegation for msg.sender, will take effect from the next epoch
* @param newRepresentative address to delegate to
*/
function delegate(address newRepresentative) external override {
require(newRepresentative != address(0), "delegate: representative 0");
address staker = msg.sender;
uint256 curEpoch = getCurrentEpochNumber();
initDataIfNeeded(staker, curEpoch);
address curRepresentative = stakerPerEpochData[curEpoch + 1][staker].representative;
// nothing changes here
if (newRepresentative == curRepresentative) {
return;
}
uint256 updatedStake = stakerPerEpochData[curEpoch + 1][staker].stake;
// reduce delegatedStake for curRepresentative if needed
if (curRepresentative != staker) {
initDataIfNeeded(curRepresentative, curEpoch);
stakerPerEpochData[curEpoch + 1][curRepresentative].delegatedStake =
stakerPerEpochData[curEpoch + 1][curRepresentative].delegatedStake.sub(updatedStake);
stakerLatestData[curRepresentative].delegatedStake =
stakerLatestData[curRepresentative].delegatedStake.sub(updatedStake);
emit Delegated(staker, curRepresentative, curEpoch, false);
}
stakerLatestData[staker].representative = newRepresentative;
stakerPerEpochData[curEpoch + 1][staker].representative = newRepresentative;
// ignore if staker is delegating back to himself
if (newRepresentative != staker) {
initDataIfNeeded(newRepresentative, curEpoch);
stakerPerEpochData[curEpoch + 1][newRepresentative].delegatedStake =
stakerPerEpochData[curEpoch + 1][newRepresentative].delegatedStake.add(updatedStake);
stakerLatestData[newRepresentative].delegatedStake =
stakerLatestData[newRepresentative].delegatedStake.add(updatedStake);
emit Delegated(staker, newRepresentative, curEpoch, true);
}
}
/**
* @dev call to stake more KNC for msg.sender
* @param amount amount of KNC to stake
*/
function deposit(uint256 amount) external override {
require(amount > 0, "deposit: amount is 0");
uint256 curEpoch = getCurrentEpochNumber();
address staker = msg.sender;
// collect KNC token from staker
require(
kncToken.transferFrom(staker, address(this), amount),
"deposit: can not get token"
);
initDataIfNeeded(staker, curEpoch);
stakerPerEpochData[curEpoch + 1][staker].stake =
stakerPerEpochData[curEpoch + 1][staker].stake.add(amount);
stakerLatestData[staker].stake =
stakerLatestData[staker].stake.add(amount);
// increase delegated stake for address that staker has delegated to (if it is not staker)
address representative = stakerPerEpochData[curEpoch + 1][staker].representative;
if (representative != staker) {
initDataIfNeeded(representative, curEpoch);
stakerPerEpochData[curEpoch + 1][representative].delegatedStake =
stakerPerEpochData[curEpoch + 1][representative].delegatedStake.add(amount);
stakerLatestData[representative].delegatedStake =
stakerLatestData[representative].delegatedStake.add(amount);
}
emit Deposited(curEpoch, staker, amount);
}
/**
* @dev call to withdraw KNC from staking, it could affect reward when calling KyberDao handleWithdrawal
* @param amount amount of KNC to withdraw
*/
function withdraw(uint256 amount) external override nonReentrant {
require(amount > 0, "withdraw: amount is 0");
uint256 curEpoch = getCurrentEpochNumber();
address staker = msg.sender;
require(
stakerLatestData[staker].stake >= amount,
"withdraw: latest amount staked < withdrawal amount"
);
(bool success, ) = address(this).call(
abi.encodeWithSignature(
"handleWithdrawal(address,uint256,uint256)",
staker,
amount,
curEpoch
)
);
if (!success) {
// Note: should catch this event to check if something went wrong
emit WithdrawDataUpdateFailed(curEpoch, staker, amount);
}
stakerLatestData[staker].stake = stakerLatestData[staker].stake.sub(amount);
// transfer KNC back to staker
require(kncToken.transfer(staker, amount), "withdraw: can not transfer knc");
emit Withdraw(curEpoch, staker, amount);
}
/**
* @dev initialize data if needed, then return staker's data for current epoch
* @dev for safe, only allow calling this func from KyberDao address
* @param staker - staker's address to initialize and get data for
*/
function initAndReturnStakerDataForCurrentEpoch(address staker)
external
override
returns (
uint256 stake,
uint256 delegatedStake,
address representative
)
{
require(
msg.sender == address(kyberDao),
"initAndReturnData: only kyberDao"
);
uint256 curEpoch = getCurrentEpochNumber();
initDataIfNeeded(staker, curEpoch);
StakerData memory stakerData = stakerPerEpochData[curEpoch][staker];
stake = stakerData.stake;
delegatedStake = stakerData.delegatedStake;
representative = stakerData.representative;
}
/**
* @notice return raw data of a staker for an epoch
* WARN: should be used only for initialized data
* if data has not been initialized, it will return all 0
* pool master shouldn't use this function to compute/distribute rewards of pool members
* @dev in KyberDao contract, if staker wants to claim reward for past epoch,
* we must know the staker's data for that epoch
* if the data has not been initialized, it means staker hasn't done any action -> no reward
*/
function getStakerRawData(address staker, uint256 epoch)
external
view
override
returns (
uint256 stake,
uint256 delegatedStake,
address representative
)
{
StakerData memory stakerData = stakerPerEpochData[epoch][staker];
stake = stakerData.stake;
delegatedStake = stakerData.delegatedStake;
representative = stakerData.representative;
}
/**
* @dev allow to get data up to current epoch + 1
*/
function getStake(address staker, uint256 epoch) external view returns (uint256) {
uint256 curEpoch = getCurrentEpochNumber();
if (epoch > curEpoch + 1) {
return 0;
}
uint256 i = epoch;
while (true) {
if (hasInited[i][staker]) {
return stakerPerEpochData[i][staker].stake;
}
if (i == 0) {
break;
}
i--;
}
return 0;
}
/**
* @dev allow to get data up to current epoch + 1
*/
function getDelegatedStake(address staker, uint256 epoch) external view returns (uint256) {
uint256 curEpoch = getCurrentEpochNumber();
if (epoch > curEpoch + 1) {
return 0;
}
uint256 i = epoch;
while (true) {
if (hasInited[i][staker]) {
return stakerPerEpochData[i][staker].delegatedStake;
}
if (i == 0) {
break;
}
i--;
}
return 0;
}
/**
* @dev allow to get data up to current epoch + 1
*/
function getRepresentative(address staker, uint256 epoch) external view returns (address) {
uint256 curEpoch = getCurrentEpochNumber();
if (epoch > curEpoch + 1) {
return address(0);
}
uint256 i = epoch;
while (true) {
if (hasInited[i][staker]) {
return stakerPerEpochData[i][staker].representative;
}
if (i == 0) {
break;
}
i--;
}
// not delegated to anyone, default to yourself
return staker;
}
/**
* @notice return combine data (stake, delegatedStake, representative) of a staker
* @dev allow to get staker data up to current epoch + 1
*/
function getStakerData(address staker, uint256 epoch)
external view override
returns (
uint256 stake,
uint256 delegatedStake,
address representative
)
{
stake = 0;
delegatedStake = 0;
representative = address(0);
uint256 curEpoch = getCurrentEpochNumber();
if (epoch > curEpoch + 1) {
return (stake, delegatedStake, representative);
}
uint256 i = epoch;
while (true) {
if (hasInited[i][staker]) {
stake = stakerPerEpochData[i][staker].stake;
delegatedStake = stakerPerEpochData[i][staker].delegatedStake;
representative = stakerPerEpochData[i][staker].representative;
return (stake, delegatedStake, representative);
}
if (i == 0) {
break;
}
i--;
}
// not delegated to anyone, default to yourself
representative = staker;
}
function getLatestRepresentative(address staker) external view returns (address) {
return
stakerLatestData[staker].representative == address(0)
? staker
: stakerLatestData[staker].representative;
}
function getLatestDelegatedStake(address staker) external view returns (uint256) {
return stakerLatestData[staker].delegatedStake;
}
function getLatestStakeBalance(address staker) external view returns (uint256) {
return stakerLatestData[staker].stake;
}
function getLatestStakerData(address staker)
external view override
returns (
uint256 stake,
uint256 delegatedStake,
address representative
)
{
stake = stakerLatestData[staker].stake;
delegatedStake = stakerLatestData[staker].delegatedStake;
representative = stakerLatestData[staker].representative == address(0)
? staker
: stakerLatestData[staker].representative;
}
/**
* @dev separate logics from withdraw, so staker can withdraw as long as amount <= staker's deposit amount
calling this function from withdraw function, ignore reverting
* @param staker staker that is withdrawing
* @param amount amount to withdraw
* @param curEpoch current epoch
*/
function handleWithdrawal(
address staker,
uint256 amount,
uint256 curEpoch
) external {
require(msg.sender == address(this), "only staking contract");
initDataIfNeeded(staker, curEpoch);
// Note: update latest stake will be done after this function
// update staker's data for next epoch
stakerPerEpochData[curEpoch + 1][staker].stake =
stakerPerEpochData[curEpoch + 1][staker].stake.sub(amount);
address representative = stakerPerEpochData[curEpoch][staker].representative;
uint256 curStake = stakerPerEpochData[curEpoch][staker].stake;
uint256 lStakeBal = stakerLatestData[staker].stake.sub(amount);
uint256 newStake = curStake.min(lStakeBal);
uint256 reduceAmount = curStake.sub(newStake); // newStake is always <= curStake
if (reduceAmount > 0) {
if (representative != staker) {
initDataIfNeeded(representative, curEpoch);
// staker has delegated to representative, withdraw will affect representative's delegated stakes
stakerPerEpochData[curEpoch][representative].delegatedStake =
stakerPerEpochData[curEpoch][representative].delegatedStake.sub(reduceAmount);
}
stakerPerEpochData[curEpoch][staker].stake = newStake;
// call KyberDao to reduce reward, if staker has delegated, then pass his representative
if (address(kyberDao) != address(0)) {
// don't revert if KyberDao revert so data will be updated correctly
(bool success, ) = address(kyberDao).call(
abi.encodeWithSignature(
"handleWithdrawal(address,uint256)",
representative,
reduceAmount
)
);
if (!success) {
emit WithdrawDataUpdateFailed(curEpoch, staker, amount);
}
}
}
representative = stakerPerEpochData[curEpoch + 1][staker].representative;
if (representative != staker) {
initDataIfNeeded(representative, curEpoch);
stakerPerEpochData[curEpoch + 1][representative].delegatedStake =
stakerPerEpochData[curEpoch + 1][representative].delegatedStake.sub(amount);
stakerLatestData[representative].delegatedStake =
stakerLatestData[representative].delegatedStake.sub(amount);
}
}
/**
* @dev initialize data if it has not been initialized yet
* @param staker staker's address to initialize
* @param epoch should be current epoch
*/
function initDataIfNeeded(address staker, uint256 epoch) internal {
address representative = stakerLatestData[staker].representative;
if (representative == address(0)) {
// not delegate to anyone, consider as delegate to yourself
stakerLatestData[staker].representative = staker;
representative = staker;
}
uint256 ldStake = stakerLatestData[staker].delegatedStake;
uint256 lStakeBal = stakerLatestData[staker].stake;
if (!hasInited[epoch][staker]) {
hasInited[epoch][staker] = true;
StakerData storage stakerData = stakerPerEpochData[epoch][staker];
stakerData.representative = representative;
stakerData.delegatedStake = ldStake;
stakerData.stake = lStakeBal;
}
// whenever stakers deposit/withdraw/delegate, the current and next epoch data need to be updated
// as the result, we will also initialize data for staker at the next epoch
if (!hasInited[epoch + 1][staker]) {
hasInited[epoch + 1][staker] = true;
StakerData storage nextEpochStakerData = stakerPerEpochData[epoch + 1][staker];
nextEpochStakerData.representative = representative;
nextEpochStakerData.delegatedStake = ldStake;
nextEpochStakerData.stake = lStakeBal;
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC20","name":"_kncToken","type":"address"},{"internalType":"uint256","name":"_epochPeriod","type":"uint256"},{"internalType":"uint256","name":"_startTimestamp","type":"uint256"},{"internalType":"contract IKyberDao","name":"_kyberDao","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"address","name":"representative","type":"address"},{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isDelegated","type":"bool"}],"name":"Delegated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"curEpoch","type":"uint256"},{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"curEpoch","type":"uint256"},{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"curEpoch","type":"uint256"},{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawDataUpdateFailed","type":"event"},{"inputs":[{"internalType":"address","name":"newRepresentative","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"epochPeriodInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstEpochStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentEpochNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"getDelegatedStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getEpochNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getLatestDelegatedStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getLatestRepresentative","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getLatestStakeBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getLatestStakerData","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"delegatedStake","type":"uint256"},{"internalType":"address","name":"representative","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"getRepresentative","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"getStakerData","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"delegatedStake","type":"uint256"},{"internalType":"address","name":"representative","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"getStakerRawData","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"delegatedStake","type":"uint256"},{"internalType":"address","name":"representative","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"curEpoch","type":"uint256"}],"name":"handleWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"initAndReturnStakerDataForCurrentEpoch","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"delegatedStake","type":"uint256"},{"internalType":"address","name":"representative","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"kncToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kyberDao","outputs":[{"internalType":"contract IKyberDao","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c060405234801561001057600080fd5b50604051611da6380380611da68339818101604052608081101561003357600080fd5b508051602082015160408301516060909301516002805460ff1916600117905591929091826100a9576040805162461bcd60e51b815260206004820152601760248201527f63746f723a2065706f636820706572696f642069732030000000000000000000604482015290519081900360640190fd5b428210156100fe576040805162461bcd60e51b815260206004820152601760248201527f63746f723a20737461727420696e207468652070617374000000000000000000604482015290519081900360640190fd5b6001600160a01b03841661014c576040805162461bcd60e51b815260206004820152601060248201526f063746f723a206b6e63546f6b656e20360841b604482015290519081900360640190fd5b6001600160a01b03811661019a576040805162461bcd60e51b815260206004820152601060248201526f063746f723a206b7962657244616f20360841b604482015290519081900360640190fd5b6000929092556001556001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c611ba86101fe6000398061095d5280610f125280610f87528061154d525080610786528061117552806112c65250611ba86000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063711bbfd9116100ad578063c70d7b6c11610071578063c70d7b6c1461036b578063cfd4766314610373578063d42b72541461039f578063d46684b2146103c5578063f63e7811146103f15761012c565b8063711bbfd9146102c2578063811c7fe2146102f4578063901ab5b2146102fc578063b6b55f2514610328578063b7a13c4c146103455761012c565b80634408d2ba116100f45780634408d2ba146102245780634d8f51051461022c5780635c19a95c146102505780635ee5b4771461027657806360e4f2e01461029c5761012c565b8063072b77f11461013157806316554d62146101695780631c552f00146101bc5780632e1a7d4d146101d957806342ce39cb146101f8575b600080fd5b6101576004803603602081101561014757600080fd5b50356001600160a01b03166103f9565b60408051918252519081900360200190f35b6101956004803603604081101561017f57600080fd5b506001600160a01b038135169060200135610418565b6040805193845260208401929092526001600160a01b031682820152519081900360600190f35b610157600480360360208110156101d257600080fd5b503561047c565b6101f6600480360360208110156101ef57600080fd5b50356104d9565b005b6101956004803603604081101561020e57600080fd5b506001600160a01b03813516906020013561089e565b61015761094b565b61023461095b565b604080516001600160a01b039092168252519081900360200190f35b6101f66004803603602081101561026657600080fd5b50356001600160a01b031661097f565b6102346004803603602081101561028c57600080fd5b50356001600160a01b0316610c95565b610195600480360360208110156102b257600080fd5b50356001600160a01b0316610ce1565b6101f6600480360360608110156102d857600080fd5b506001600160a01b038135169060208101359060400135610d3f565b610234611173565b6102346004803603604081101561031257600080fd5b506001600160a01b038135169060200135611197565b6101f66004803603602081101561033e57600080fd5b5035611233565b6101956004803603602081101561035b57600080fd5b50356001600160a01b031661153e565b610157611635565b6101576004803603604081101561038957600080fd5b506001600160a01b03813516906020013561163b565b610157600480360360208110156103b557600080fd5b50356001600160a01b03166116d4565b610157600480360360408110156103db57600080fd5b506001600160a01b0381351690602001356116f2565b610157611783565b6001600160a01b0381166000908152600460205260409020545b919050565b6000806000610425611b16565b5050506000918252506003602090815260408083206001600160a01b039485168452825291829020825160608101845281548082526001830154938201849052600290920154909416939092018390529092909190565b600060015482108061048e5750600054155b1561049b57506000610413565b6104d360016104c76000546104bb6001548761178990919063ffffffff16565b9063ffffffff6117d216565b9063ffffffff61181416565b92915050565b60025460ff16610530576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002805460ff191690558061058c576040805162461bcd60e51b815260206004820152601560248201527f77697468647261773a20616d6f756e7420697320300000000000000000000000604482015290519081900360640190fd5b600061059661094b565b33600081815260046020526040902054919250908311156105e85760405162461bcd60e51b8152600401808060200182810382526032815260200180611b416032913960400191505060405180910390fd5b604080516001600160a01b038316602482015260448101859052606480820185905282518083039091018152608490910182526020810180516001600160e01b031663711bbfd960e01b17815291518151600093309392918291908083835b602083106106665780518252601f199092019160209182019101610647565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146106c8576040519150601f19603f3d011682016040523d82523d6000602084013e6106cd565b606091505b505090508061071f57604080518481526001600160a01b038416602082015280820186905290517fa412eef5316d3cbf9e2b4ba3d1cf3e482b40dc8946fd919b7f5053450fa621fb9181900360600190a15b6001600160a01b038216600090815260046020526040902054610748908563ffffffff61178916565b6001600160a01b03808416600081815260046020818152604080842096909655855163a9059cbb60e01b8152918201939093526024810189905293517f00000000000000000000000000000000000000000000000000000000000000009093169363a9059cbb936044808301949391928390030190829087803b1580156107ce57600080fd5b505af11580156107e2573d6000803e3d6000fd5b505050506040513d60208110156107f857600080fd5b505161084b576040805162461bcd60e51b815260206004820152601e60248201527f77697468647261773a2063616e206e6f74207472616e73666572206b6e630000604482015290519081900360640190fd5b6040805185815290516001600160a01b0384169185917f9da6493a92039daf47d1f2d7a782299c5994c6323eb1e972f69c432089ec52bf9181900360200190a350506002805460ff191660011790555050565b60008080806108ab61094b565b9050806001018511156108be5750610944565b845b60008181526005602090815260408083206001600160a01b038b16845290915290205460ff161561092b5760009081526003602090815260408083206001600160a01b038a811685529252909120805460018201546002909201549096509094501691506109449050565b806109355761093e565b600019016108c0565b86925050505b9250925092565b60006109564261047c565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0381166109da576040805162461bcd60e51b815260206004820152601a60248201527f64656c65676174653a20726570726573656e7461746976652030000000000000604482015290519081900360640190fd5b3360006109e561094b565b90506109f1828261186e565b6001810160009081526003602090815260408083206001600160a01b0380871685529252909120600201548116908416811415610a3057505050610c92565b6001820160009081526003602090815260408083206001600160a01b03808816808652919093529220549190831614610b4757610a6d828461186e565b600180840160009081526003602090815260408083206001600160a01b038716845290915290200154610aa6908263ffffffff61178916565b600180850160009081526003602090815260408083206001600160a01b0388168452825280832084019490945560049052919091200154610aed908263ffffffff61178916565b6001600160a01b0380841660008181526004602090815260408083206001019590955584519182529351879492938916927ffbb976ae5268347766b726bd1edba29af0fe16f9c505fbd3b9a10cb6d00cfa3d928290030190a45b6001600160a01b03808516600081815260046020908152604080832060029081018054968c166001600160a01b0319978816811790915560018a0185526003845282852086865290935292209091018054909316811790925514610c8d57610baf858461186e565b600180840160009081526003602090815260408083206001600160a01b038a16845290915290200154610be8908263ffffffff61181416565b600180850160009081526003602090815260408083206001600160a01b038b168452825280832084019490945560049052919091200154610c2f908263ffffffff61181416565b6001600160a01b0380871660008181526004602090815260409182902060019081019590955581519485529051879492938916927ffbb976ae5268347766b726bd1edba29af0fe16f9c505fbd3b9a10cb6d00cfa3d92908290030190a45b505050505b50565b6001600160a01b0381811660009081526004602052604081206002015490911615610cdd576001600160a01b03808316600090815260046020526040902060020154166104d3565b5090565b6001600160a01b0380821660009081526004602052604081208054600182015460029092015490939192911615610d35576001600160a01b0380851660009081526004602052604090206002015416610d37565b835b929491935050565b333014610d93576040805162461bcd60e51b815260206004820152601560248201527f6f6e6c79207374616b696e6720636f6e74726163740000000000000000000000604482015290519081900360640190fd5b610d9d838261186e565b6001810160009081526003602090815260408083206001600160a01b0387168452909152902054610dd4908363ffffffff61178916565b6001820160009081526003602081815260408084206001600160a01b03808a16808752918452828620969096558685529282528084208385528252808420600281015493855254600490925283205491909316929190610e3a908663ffffffff61178916565b90506000610e4e838363ffffffff611a0416565b90506000610e62848363ffffffff61178916565b9050801561108c57876001600160a01b0316856001600160a01b031614610eea57610e8d858761186e565b60008681526003602090815260408083206001600160a01b0389168452909152902060010154610ec3908263ffffffff61178916565b60008781526003602090815260408083206001600160a01b038a1684529091529020600101555b60008681526003602090815260408083206001600160a01b03808d16855292529091208390557f0000000000000000000000000000000000000000000000000000000000000000161561108c57604080516001600160a01b038781166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663e2346d7160e01b178152925182516000947f000000000000000000000000000000000000000000000000000000000000000093909316939282918083835b60208310610fd15780518252601f199092019160209182019101610fb2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611033576040519150601f19603f3d011682016040523d82523d6000602084013e611038565b606091505b505090508061108a57604080518881526001600160a01b038b1660208201528082018a905290517fa412eef5316d3cbf9e2b4ba3d1cf3e482b40dc8946fd919b7f5053450fa621fb9181900360600190a15b505b6001860160009081526003602090815260408083206001600160a01b03808d16808652919093529220600201541695508514611169576110cc858761186e565b600180870160009081526003602090815260408083206001600160a01b038a16845290915290200154611105908863ffffffff61178916565b600180880160009081526003602090815260408083206001600160a01b038b16845282528083208401949094556004905291909120015461114c908863ffffffff61178916565b6001600160a01b0386166000908152600460205260409020600101555b5050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806111a261094b565b9050806001018311156111b95760009150506104d3565b825b60008181526005602090815260408083206001600160a01b038916845290915290205460ff16156112175760009081526003602090815260408083206001600160a01b0380891685529252909120600201541691506104d39050565b806112215761122a565b600019016111bb565b50929392505050565b60008111611288576040805162461bcd60e51b815260206004820152601460248201527f6465706f7369743a20616d6f756e742069732030000000000000000000000000604482015290519081900360640190fd5b600061129261094b565b604080516323b872dd60e01b8152336004820181905230602483015260448201869052915192935090916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916323b872dd9160648083019260209291908290030181600087803b15801561130e57600080fd5b505af1158015611322573d6000803e3d6000fd5b505050506040513d602081101561133857600080fd5b505161138b576040805162461bcd60e51b815260206004820152601a60248201527f6465706f7369743a2063616e206e6f742067657420746f6b656e000000000000604482015290519081900360640190fd5b611395818361186e565b6001820160009081526003602090815260408083206001600160a01b03851684529091529020546113cc908463ffffffff61181416565b6001830160009081526003602090815260408083206001600160a01b038616845282528083209390935560049052205461140c908463ffffffff61181416565b6001600160a01b038083166000818152600460209081526040808320959095556001870182526003815284822083835290529290922060020154169081146114f557611458818461186e565b600180840160009081526003602090815260408083206001600160a01b038616845290915290200154611491908563ffffffff61181416565b600180850160009081526003602090815260408083206001600160a01b03871684528252808320840194909455600490529190912001546114d8908563ffffffff61181416565b6001600160a01b0382166000908152600460205260409020600101555b604080518481526020810186905281516001600160a01b038516927f1599c0fcf897af5babc2bfcf707f5dc050f841b044d97c3251ecec35b9abf80b928290030190a250505050565b60008080336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115bf576040805162461bcd60e51b815260206004820181905260248201527f696e6974416e6452657475726e446174613a206f6e6c79206b7962657244616f604482015290519081900360640190fd5b60006115c961094b565b90506115d5858261186e565b6115dd611b16565b5060009081526003602090815260408083206001600160a01b03978816845282529182902082516060810184528154808252600183015493820184905260029092015490971696909201869052909590949350915050565b60015481565b60008061164661094b565b90508060010183111561165d5760009150506104d3565b825b60008181526005602090815260408083206001600160a01b038916845290915290205460ff16156116b65760009081526003602090815260408083206001600160a01b038816845290915290205491506104d39050565b806116c0576116c9565b6000190161165f565b506000949350505050565b6001600160a01b031660009081526004602052604090206001015490565b6000806116fd61094b565b9050806001018311156117145760009150506104d3565b825b60008181526005602090815260408083206001600160a01b038916845290915290205460ff16156117705760009081526003602090815260408083206001600160a01b038816845290915290206001015491506104d39050565b8061177a576116c9565b60001901611716565b60005481565b60006117cb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a1a565b9392505050565b60006117cb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ab1565b6000828201838110156117cb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0380831660009081526004602052604090206002015416806118c057506001600160a01b038216600081815260046020526040902060020180546001600160a01b0319169091179055815b6001600160a01b03831660008181526004602090815260408083206001810154905487855260058452828520958552949092529091205490919060ff1661196c5760008481526005602090815260408083206001600160a01b038981168086529184528285208054600160ff199091168117909155898652600385528386209286529190935292206002810180546001600160a01b031916928716929092179091559081018390558190555b6001840160009081526005602090815260408083206001600160a01b038916845290915290205460ff16610c8d57600193840160008181526005602090815260408083206001600160a01b03998a16808552908352818420805460ff19168a17905593835260038252808320938352929052206002810180546001600160a01b03191694909616939093179094559181019190915555565b6000818310611a1357816117cb565b5090919050565b60008184841115611aa95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a6e578181015183820152602001611a56565b50505050905090810190601f168015611a9b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183611b005760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611a6e578181015183820152602001611a56565b506000838581611b0c57fe5b0495945050505050565b6040518060600160405280600081526020016000815260200160006001600160a01b03168152509056fe77697468647261773a206c617465737420616d6f756e74207374616b6564203c207769746864726177616c20616d6f756e74a2646970667358221220e226a6302b84b358849f5b5e0f541d9614dcdad0cedb6d983293d343b124399564736f6c63430006060033000000000000000000000000dd974d5c2e2928dea5f71b9825b8b646686bd2000000000000000000000000000000000000000000000000000000000000127500000000000000000000000000000000000000000000000000000000005f0d599b00000000000000000000000049bdd8854481005bba4acebabf6e06cd5f6312e9
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063711bbfd9116100ad578063c70d7b6c11610071578063c70d7b6c1461036b578063cfd4766314610373578063d42b72541461039f578063d46684b2146103c5578063f63e7811146103f15761012c565b8063711bbfd9146102c2578063811c7fe2146102f4578063901ab5b2146102fc578063b6b55f2514610328578063b7a13c4c146103455761012c565b80634408d2ba116100f45780634408d2ba146102245780634d8f51051461022c5780635c19a95c146102505780635ee5b4771461027657806360e4f2e01461029c5761012c565b8063072b77f11461013157806316554d62146101695780631c552f00146101bc5780632e1a7d4d146101d957806342ce39cb146101f8575b600080fd5b6101576004803603602081101561014757600080fd5b50356001600160a01b03166103f9565b60408051918252519081900360200190f35b6101956004803603604081101561017f57600080fd5b506001600160a01b038135169060200135610418565b6040805193845260208401929092526001600160a01b031682820152519081900360600190f35b610157600480360360208110156101d257600080fd5b503561047c565b6101f6600480360360208110156101ef57600080fd5b50356104d9565b005b6101956004803603604081101561020e57600080fd5b506001600160a01b03813516906020013561089e565b61015761094b565b61023461095b565b604080516001600160a01b039092168252519081900360200190f35b6101f66004803603602081101561026657600080fd5b50356001600160a01b031661097f565b6102346004803603602081101561028c57600080fd5b50356001600160a01b0316610c95565b610195600480360360208110156102b257600080fd5b50356001600160a01b0316610ce1565b6101f6600480360360608110156102d857600080fd5b506001600160a01b038135169060208101359060400135610d3f565b610234611173565b6102346004803603604081101561031257600080fd5b506001600160a01b038135169060200135611197565b6101f66004803603602081101561033e57600080fd5b5035611233565b6101956004803603602081101561035b57600080fd5b50356001600160a01b031661153e565b610157611635565b6101576004803603604081101561038957600080fd5b506001600160a01b03813516906020013561163b565b610157600480360360208110156103b557600080fd5b50356001600160a01b03166116d4565b610157600480360360408110156103db57600080fd5b506001600160a01b0381351690602001356116f2565b610157611783565b6001600160a01b0381166000908152600460205260409020545b919050565b6000806000610425611b16565b5050506000918252506003602090815260408083206001600160a01b039485168452825291829020825160608101845281548082526001830154938201849052600290920154909416939092018390529092909190565b600060015482108061048e5750600054155b1561049b57506000610413565b6104d360016104c76000546104bb6001548761178990919063ffffffff16565b9063ffffffff6117d216565b9063ffffffff61181416565b92915050565b60025460ff16610530576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002805460ff191690558061058c576040805162461bcd60e51b815260206004820152601560248201527f77697468647261773a20616d6f756e7420697320300000000000000000000000604482015290519081900360640190fd5b600061059661094b565b33600081815260046020526040902054919250908311156105e85760405162461bcd60e51b8152600401808060200182810382526032815260200180611b416032913960400191505060405180910390fd5b604080516001600160a01b038316602482015260448101859052606480820185905282518083039091018152608490910182526020810180516001600160e01b031663711bbfd960e01b17815291518151600093309392918291908083835b602083106106665780518252601f199092019160209182019101610647565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146106c8576040519150601f19603f3d011682016040523d82523d6000602084013e6106cd565b606091505b505090508061071f57604080518481526001600160a01b038416602082015280820186905290517fa412eef5316d3cbf9e2b4ba3d1cf3e482b40dc8946fd919b7f5053450fa621fb9181900360600190a15b6001600160a01b038216600090815260046020526040902054610748908563ffffffff61178916565b6001600160a01b03808416600081815260046020818152604080842096909655855163a9059cbb60e01b8152918201939093526024810189905293517f000000000000000000000000dd974d5c2e2928dea5f71b9825b8b646686bd2009093169363a9059cbb936044808301949391928390030190829087803b1580156107ce57600080fd5b505af11580156107e2573d6000803e3d6000fd5b505050506040513d60208110156107f857600080fd5b505161084b576040805162461bcd60e51b815260206004820152601e60248201527f77697468647261773a2063616e206e6f74207472616e73666572206b6e630000604482015290519081900360640190fd5b6040805185815290516001600160a01b0384169185917f9da6493a92039daf47d1f2d7a782299c5994c6323eb1e972f69c432089ec52bf9181900360200190a350506002805460ff191660011790555050565b60008080806108ab61094b565b9050806001018511156108be5750610944565b845b60008181526005602090815260408083206001600160a01b038b16845290915290205460ff161561092b5760009081526003602090815260408083206001600160a01b038a811685529252909120805460018201546002909201549096509094501691506109449050565b806109355761093e565b600019016108c0565b86925050505b9250925092565b60006109564261047c565b905090565b7f00000000000000000000000049bdd8854481005bba4acebabf6e06cd5f6312e981565b6001600160a01b0381166109da576040805162461bcd60e51b815260206004820152601a60248201527f64656c65676174653a20726570726573656e7461746976652030000000000000604482015290519081900360640190fd5b3360006109e561094b565b90506109f1828261186e565b6001810160009081526003602090815260408083206001600160a01b0380871685529252909120600201548116908416811415610a3057505050610c92565b6001820160009081526003602090815260408083206001600160a01b03808816808652919093529220549190831614610b4757610a6d828461186e565b600180840160009081526003602090815260408083206001600160a01b038716845290915290200154610aa6908263ffffffff61178916565b600180850160009081526003602090815260408083206001600160a01b0388168452825280832084019490945560049052919091200154610aed908263ffffffff61178916565b6001600160a01b0380841660008181526004602090815260408083206001019590955584519182529351879492938916927ffbb976ae5268347766b726bd1edba29af0fe16f9c505fbd3b9a10cb6d00cfa3d928290030190a45b6001600160a01b03808516600081815260046020908152604080832060029081018054968c166001600160a01b0319978816811790915560018a0185526003845282852086865290935292209091018054909316811790925514610c8d57610baf858461186e565b600180840160009081526003602090815260408083206001600160a01b038a16845290915290200154610be8908263ffffffff61181416565b600180850160009081526003602090815260408083206001600160a01b038b168452825280832084019490945560049052919091200154610c2f908263ffffffff61181416565b6001600160a01b0380871660008181526004602090815260409182902060019081019590955581519485529051879492938916927ffbb976ae5268347766b726bd1edba29af0fe16f9c505fbd3b9a10cb6d00cfa3d92908290030190a45b505050505b50565b6001600160a01b0381811660009081526004602052604081206002015490911615610cdd576001600160a01b03808316600090815260046020526040902060020154166104d3565b5090565b6001600160a01b0380821660009081526004602052604081208054600182015460029092015490939192911615610d35576001600160a01b0380851660009081526004602052604090206002015416610d37565b835b929491935050565b333014610d93576040805162461bcd60e51b815260206004820152601560248201527f6f6e6c79207374616b696e6720636f6e74726163740000000000000000000000604482015290519081900360640190fd5b610d9d838261186e565b6001810160009081526003602090815260408083206001600160a01b0387168452909152902054610dd4908363ffffffff61178916565b6001820160009081526003602081815260408084206001600160a01b03808a16808752918452828620969096558685529282528084208385528252808420600281015493855254600490925283205491909316929190610e3a908663ffffffff61178916565b90506000610e4e838363ffffffff611a0416565b90506000610e62848363ffffffff61178916565b9050801561108c57876001600160a01b0316856001600160a01b031614610eea57610e8d858761186e565b60008681526003602090815260408083206001600160a01b0389168452909152902060010154610ec3908263ffffffff61178916565b60008781526003602090815260408083206001600160a01b038a1684529091529020600101555b60008681526003602090815260408083206001600160a01b03808d16855292529091208390557f00000000000000000000000049bdd8854481005bba4acebabf6e06cd5f6312e9161561108c57604080516001600160a01b038781166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663e2346d7160e01b178152925182516000947f00000000000000000000000049bdd8854481005bba4acebabf6e06cd5f6312e993909316939282918083835b60208310610fd15780518252601f199092019160209182019101610fb2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611033576040519150601f19603f3d011682016040523d82523d6000602084013e611038565b606091505b505090508061108a57604080518881526001600160a01b038b1660208201528082018a905290517fa412eef5316d3cbf9e2b4ba3d1cf3e482b40dc8946fd919b7f5053450fa621fb9181900360600190a15b505b6001860160009081526003602090815260408083206001600160a01b03808d16808652919093529220600201541695508514611169576110cc858761186e565b600180870160009081526003602090815260408083206001600160a01b038a16845290915290200154611105908863ffffffff61178916565b600180880160009081526003602090815260408083206001600160a01b038b16845282528083208401949094556004905291909120015461114c908863ffffffff61178916565b6001600160a01b0386166000908152600460205260409020600101555b5050505050505050565b7f000000000000000000000000dd974d5c2e2928dea5f71b9825b8b646686bd20081565b6000806111a261094b565b9050806001018311156111b95760009150506104d3565b825b60008181526005602090815260408083206001600160a01b038916845290915290205460ff16156112175760009081526003602090815260408083206001600160a01b0380891685529252909120600201541691506104d39050565b806112215761122a565b600019016111bb565b50929392505050565b60008111611288576040805162461bcd60e51b815260206004820152601460248201527f6465706f7369743a20616d6f756e742069732030000000000000000000000000604482015290519081900360640190fd5b600061129261094b565b604080516323b872dd60e01b8152336004820181905230602483015260448201869052915192935090916001600160a01b037f000000000000000000000000dd974d5c2e2928dea5f71b9825b8b646686bd20016916323b872dd9160648083019260209291908290030181600087803b15801561130e57600080fd5b505af1158015611322573d6000803e3d6000fd5b505050506040513d602081101561133857600080fd5b505161138b576040805162461bcd60e51b815260206004820152601a60248201527f6465706f7369743a2063616e206e6f742067657420746f6b656e000000000000604482015290519081900360640190fd5b611395818361186e565b6001820160009081526003602090815260408083206001600160a01b03851684529091529020546113cc908463ffffffff61181416565b6001830160009081526003602090815260408083206001600160a01b038616845282528083209390935560049052205461140c908463ffffffff61181416565b6001600160a01b038083166000818152600460209081526040808320959095556001870182526003815284822083835290529290922060020154169081146114f557611458818461186e565b600180840160009081526003602090815260408083206001600160a01b038616845290915290200154611491908563ffffffff61181416565b600180850160009081526003602090815260408083206001600160a01b03871684528252808320840194909455600490529190912001546114d8908563ffffffff61181416565b6001600160a01b0382166000908152600460205260409020600101555b604080518481526020810186905281516001600160a01b038516927f1599c0fcf897af5babc2bfcf707f5dc050f841b044d97c3251ecec35b9abf80b928290030190a250505050565b60008080336001600160a01b037f00000000000000000000000049bdd8854481005bba4acebabf6e06cd5f6312e916146115bf576040805162461bcd60e51b815260206004820181905260248201527f696e6974416e6452657475726e446174613a206f6e6c79206b7962657244616f604482015290519081900360640190fd5b60006115c961094b565b90506115d5858261186e565b6115dd611b16565b5060009081526003602090815260408083206001600160a01b03978816845282529182902082516060810184528154808252600183015493820184905260029092015490971696909201869052909590949350915050565b60015481565b60008061164661094b565b90508060010183111561165d5760009150506104d3565b825b60008181526005602090815260408083206001600160a01b038916845290915290205460ff16156116b65760009081526003602090815260408083206001600160a01b038816845290915290205491506104d39050565b806116c0576116c9565b6000190161165f565b506000949350505050565b6001600160a01b031660009081526004602052604090206001015490565b6000806116fd61094b565b9050806001018311156117145760009150506104d3565b825b60008181526005602090815260408083206001600160a01b038916845290915290205460ff16156117705760009081526003602090815260408083206001600160a01b038816845290915290206001015491506104d39050565b8061177a576116c9565b60001901611716565b60005481565b60006117cb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a1a565b9392505050565b60006117cb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ab1565b6000828201838110156117cb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0380831660009081526004602052604090206002015416806118c057506001600160a01b038216600081815260046020526040902060020180546001600160a01b0319169091179055815b6001600160a01b03831660008181526004602090815260408083206001810154905487855260058452828520958552949092529091205490919060ff1661196c5760008481526005602090815260408083206001600160a01b038981168086529184528285208054600160ff199091168117909155898652600385528386209286529190935292206002810180546001600160a01b031916928716929092179091559081018390558190555b6001840160009081526005602090815260408083206001600160a01b038916845290915290205460ff16610c8d57600193840160008181526005602090815260408083206001600160a01b03998a16808552908352818420805460ff19168a17905593835260038252808320938352929052206002810180546001600160a01b03191694909616939093179094559181019190915555565b6000818310611a1357816117cb565b5090919050565b60008184841115611aa95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611a6e578181015183820152602001611a56565b50505050905090810190601f168015611a9b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183611b005760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611a6e578181015183820152602001611a56565b506000838581611b0c57fe5b0495945050505050565b6040518060600160405280600081526020016000815260200160006001600160a01b03168152509056fe77697468647261773a206c617465737420616d6f756e74207374616b6564203c207769746864726177616c20616d6f756e74a2646970667358221220e226a6302b84b358849f5b5e0f541d9614dcdad0cedb6d983293d343b124399564736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000dd974d5c2e2928dea5f71b9825b8b646686bd2000000000000000000000000000000000000000000000000000000000000127500000000000000000000000000000000000000000000000000000000005F0D599B00000000000000000000000049bdd8854481005bBa4aCEbaBF6e06cD5F6312e9
-----Decoded View---------------
Arg [0] : _kncToken (address): 0xdd974D5C2e2928deA5F71b9825b8b646686BD200
Arg [1] : _epochPeriod (uint256): 1209600
Arg [2] : _startTimestamp (uint256): 1594710427
Arg [3] : _kyberDao (address): 0x49bdd8854481005bBa4aCEbaBF6e06cD5F6312e9
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000dd974d5c2e2928dea5f71b9825b8b646686bd200
Arg [1] : 0000000000000000000000000000000000000000000000000000000000127500
Arg [2] : 000000000000000000000000000000000000000000000000000000005F0D599B
Arg [3] : 00000000000000000000000049bdd8854481005bBa4aCEbaBF6e06cD5F6312e9
Deployed Bytecode Sourcemap
13923:17001:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13923:17001:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;25756:135:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25756:135:0;-1:-1:-1;;;;;25756:135:0;;:::i;:::-;;;;;;;;;;;;;;;;21785:467;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;21785:467:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;21785:467:0;;;;;;;;;;;;;;13204:381;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13204:381:0;;:::i;19192:1079::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19192:1079:0;;:::i;:::-;;24266:1062;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;24266:1062:0;;;;;;;;:::i;13079:117::-;;;:::i;14161:35::-;;;:::i;:::-;;;;-1:-1:-1;;;;;14161:35:0;;;;;;;;;;;;;;15619:1930;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15619:1930:0;-1:-1:-1;;;;;15619:1930:0;;:::i;25336:258::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25336:258:0;-1:-1:-1;;;;;25336:258:0;;:::i;25899:503::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25899:503:0;-1:-1:-1;;;;;25899:503:0;;:::i;26740:2581::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;26740:2581:0;;;;;;;;;;;;;:::i;14122:32::-;;;:::i;23505:585::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;23505:585:0;;;;;;;;:::i;17671:1337::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17671:1337:0;;:::i;20527:689::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20527:689:0;-1:-1:-1;;;;;20527:689:0;;:::i;13022:48::-;;;:::i;22333:496::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;22333:496:0;;;;;;;;:::i;25602:146::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25602:146:0;-1:-1:-1;;;;;25602:146:0;;:::i;22910:514::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;22910:514:0;;;;;;;;:::i;12971:44::-;;;:::i;25756:135::-;-1:-1:-1;;;;;25853:24:0;;25826:7;25853:24;;;:16;:24;;;;;:30;25756:135;;;;:::o;21785:467::-;21924:13;21952:22;21989;22039:28;;:::i;:::-;-1:-1:-1;;;22070:25:0;;;;-1:-1:-1;22070:18:0;:25;;;;;;;;-1:-1:-1;;;;;22070:33:0;;;;;;;;;;;22039:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21785:467::o;13204:381::-;13277:7;13313:24;;13301:9;:36;:65;;;-1:-1:-1;13341:20:0;;:25;13301:65;13297:106;;;-1:-1:-1;13390:1:0;13383:8;;13297:106;13501:76;13575:1;13502:67;13548:20;;13503:39;13517:24;;13503:9;:13;;:39;;;;:::i;:::-;13502:45;:67;:45;:67;:::i;:::-;13501:73;:76;:73;:76;:::i;:::-;13494:83;13204:381;-1:-1:-1;;13204:381:0:o;19192:1079::-;2848:11;;;;2840:55;;;;;-1:-1:-1;;;2840:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2973:11;:19;;-1:-1:-1;;2973:19:0;;;19276:10;19268:44:::1;;;::::0;;-1:-1:-1;;;19268:44:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;19325:16;19344:23;:21;:23::i;:::-;19395:10;19378:14;19440:24:::0;;;:16:::1;:24;::::0;;;;:30;19325:42;;-1:-1:-1;19395:10:0;19440:40;-1:-1:-1;19440:40:0::1;19418:140;;;;-1:-1:-1::0;;;19418:140:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19623:177;::::0;;-1:-1:-1;;;;;19623:177:0;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;19623:177:0;;;;;;::::1;25:18:-1::0;::::1;61:17:::0;;-1:-1;;;;;182:15:::1;-1:-1:::0;;;179:29:::1;160:49:::0;;19590:221:0;;;;19572:12:::1;::::0;19598:4:::1;::::0;19623:177;19590:221;;;25:18:-1;19590:221:0;;25:18:-1;36:153:::1;66:2;61:3;58:11;36:153;;176:10:::0;;164:23;;-1:-1;;139:12;;;;98:2:::1;89:12:::0;;::::1;::::0;114::::1;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;19590:221:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;19571:240:0;;;19827:7;19822:175;;19935:50;::::0;;;;;-1:-1:-1;;;;;19935:50:0;::::1;;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;;;;;;::::1;19822:175;-1:-1:-1::0;;;;;20042:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:30;:42:::1;::::0;20077:6;20042:42:::1;:34;:42;:::i;:::-;-1:-1:-1::0;;;;;20009:24:0;;::::1;;::::0;;;:16:::1;:24;::::0;;;;;;;:75;;;;20145:33;;-1:-1:-1;;;20145:33:0;;;;::::1;::::0;;;;;;;;;;;;:8:::1;:17:::0;;::::1;::::0;::::1;::::0;:33;;;;;20009:24;20145:33;;;;;;;;;:17;:33;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20145:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20145:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20145:33:0;20137:76:::1;;;::::0;;-1:-1:-1;;;20137:76:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;20229:34;::::0;;;;;;;-1:-1:-1;;;;;20229:34:0;::::1;::::0;20238:8;;20229:34:::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;3153:11:0;:18;;-1:-1:-1;;3153:18:0;3167:4;3153:18;;;-1:-1:-1;;19192:1079:0:o;24266:1062::-;24384:13;;;;24607:23;:21;:23::i;:::-;24588:42;;24653:8;24664:1;24653:12;24645:5;:20;24641:99;;;-1:-1:-1;24682:46:0;;24641:99;24762:5;24778:452;24810:12;;;;:9;:12;;;;;;;;-1:-1:-1;;;;;24810:20:0;;;;;;;;;;;;24806:329;;;24859:21;;;;:18;:21;;;;;;;;-1:-1:-1;;;;;24859:29:0;;;;;;;;;;:35;;24930:44;;;;25010;;;;;24859:35;;-1:-1:-1;24930:44:0;;-1:-1:-1;25010:44:0;;-1:-1:-1;25073:46:0;;-1:-1:-1;25073:46:0;24806:329;25153:6;25149:52;;25180:5;;25149:52;-1:-1:-1;;25215:3:0;24778:452;;;25314:6;25297:23;;24266:1062;;;;;;;;:::o;13079:117::-;13142:7;13169:19;13184:3;13169:14;:19::i;:::-;13162:26;;13079:117;:::o;14161:35::-;;;:::o;15619:1930::-;-1:-1:-1;;;;;15701:31:0;;15693:70;;;;;-1:-1:-1;;;15693:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15791:10;15774:14;15831:23;:21;:23::i;:::-;15812:42;;15867:34;15884:6;15892:8;15867:16;:34::i;:::-;15972:1;15961:12;;15914:25;15942:32;;;:18;:32;;;;;;;;-1:-1:-1;;;;;15942:40:0;;;;;;;;;;:55;;;;;;16045:38;;;;16041:77;;;16100:7;;;;;16041:77;16183:1;16172:12;;16130:20;16153:32;;;:18;:32;;;;;;;;-1:-1:-1;;;;;16153:40:0;;;;;;;;;;;;:46;;16282:27;;;;16278:520;;16326:45;16343:17;16362:8;16326:16;:45::i;:::-;16504:1;16493:12;;;16474:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;16474:51:0;;;;;;;;;:66;;:84;;16545:12;16474:84;:70;:84;:::i;:::-;16418:1;16407:12;;;16388:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;16388:51:0;;;;;;;;;:66;;:170;;;;16643:16;:35;;;;;;:50;;:68;;16698:12;16643:68;:54;:68;:::i;:::-;-1:-1:-1;;;;;16573:35:0;;;;;;;:16;:35;;;;;;;;:50;;:138;;;;16733:53;;;;;;;16770:8;;16573:35;;16733:53;;;;;;;;;;;16278:520;-1:-1:-1;;;;;16810:24:0;;;;;;;:16;:24;;;;;;;;:39;;;;:59;;;;;-1:-1:-1;;;;;;16810:59:0;;;;;;;;;16899:12;;16880:32;;:18;:32;;;;;:40;;;;;;;;:55;;;:75;;;;;;;;;;17031:27;17027:515;;17075:45;17092:17;17111:8;17075:16;:45::i;:::-;17251:1;17240:12;;;17221:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;17221:51:0;;;;;;;;;:66;;:84;;17292:12;17221:84;:70;:84;:::i;:::-;17165:1;17154:12;;;17135:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;17135:51:0;;;;;;;;;:66;;:170;;;;17390:16;:35;;;;;;:50;;:68;;17445:12;17390:68;:54;:68;:::i;:::-;-1:-1:-1;;;;;17320:35:0;;;;;;;:16;:35;;;;;;;;;:50;;;;:138;;;;17478:52;;;;;;;17515:8;;17320:35;;17478:52;;;;;;;;;;;;17027:515;15619:1930;;;;;;:::o;25336:258::-;-1:-1:-1;;;;;25448:24:0;;;25408:7;25448:24;;;:16;:24;;;;;:39;;;25408:7;;25448:39;:53;:138;;-1:-1:-1;;;;;25547:24:0;;;;;;;:16;:24;;;;;:39;;;;25448:138;;;-1:-1:-1;25521:6:0;25336:258::o;25899:503::-;-1:-1:-1;;;;;26131:24:0;;;26008:13;26131:24;;;:16;:24;;;;;:30;;26189:39;;;;26256;;;;;26131:30;;26189:39;;26008:13;26256:39;:53;:138;;-1:-1:-1;;;;;26355:24:0;;;;;;;:16;:24;;;;;:39;;;;26256:138;;;26329:6;26256:138;25899:503;;;;-1:-1:-1;;25899:503:0:o;26740:2581::-;26878:10;26900:4;26878:27;26870:61;;;;;-1:-1:-1;;;26870:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26942:34;26959:6;26967:8;26942:16;:34::i;:::-;27198:1;27187:12;;27168:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;27168:40:0;;;;;;;;;:46;:58;;27219:6;27168:58;:50;:58;:::i;:::-;27136:1;27125:12;;27106:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;27106:40:0;;;;;;;;;;;;:120;;;;27264:28;;;;;;;;;:36;;;;;;;;:51;;;;27345:36;;;:42;27418:16;:24;;;;;:30;27264:51;;;;;27345:42;27106:32;27418:42;;27453:6;27418:42;:34;:42;:::i;:::-;27398:62;-1:-1:-1;27471:16:0;27490:23;:8;27398:62;27490:23;:12;:23;:::i;:::-;27471:42;-1:-1:-1;27524:20:0;27547:22;:8;27471:42;27547:22;:12;:22;:::i;:::-;27524:45;-1:-1:-1;27620:16:0;;27616:1192;;27675:6;-1:-1:-1;;;;;27657:24:0;:14;-1:-1:-1;;;;;27657:24:0;;27653:401;;27702:42;27719:14;27735:8;27702:16;:42::i;:::-;27961:28;;;;:18;:28;;;;;;;;-1:-1:-1;;;;;27961:44:0;;;;;;;;;:59;;;:77;;28025:12;27961:77;:63;:77;:::i;:::-;27878:28;;;;:18;:28;;;;;;;;-1:-1:-1;;;;;27878:44:0;;;;;;;;;:59;;:160;27653:401;28068:28;;;;:18;:28;;;;;;;;-1:-1:-1;;;;;28068:36:0;;;;;;;;;;:53;;;28250:8;28242:31;;28238:559;;28444:188;;;-1:-1:-1;;;;;28444:188:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;28444:188:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;28399:252:0;;;;28381:12;;28407:8;28399:22;;;;;28444:188;28399:252;;;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;28399:252:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;28380:271:0;;;28675:7;28670:112;;28712:50;;;;;;-1:-1:-1;;;;;28712:50:0;;;;;;;;;;;;;;;;;;;;;;;28670:112;28238:559;;28865:1;28854:12;;28835:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;28835:40:0;;;;;;;;;;;;:55;;;;;-1:-1:-1;28905:24:0;;28901:413;;28946:42;28963:14;28979:8;28946:16;:42::i;:::-;29116:1;29105:12;;;29086:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;29086:48:0;;;;;;;;;:63;;:75;;29154:6;29086:75;:67;:75;:::i;:::-;29033:1;29022:12;;;29003:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;29003:48:0;;;;;;;;;:63;;:158;;;;29243:16;:32;;;;;;:47;;:59;;29295:6;29243:59;:51;:59;:::i;:::-;-1:-1:-1;;;;;29176:32:0;;;;;;:16;:32;;;;;:47;;:126;28901:413;26740:2581;;;;;;;;:::o;14122:32::-;;;:::o;23505:585::-;23586:7;23606:16;23625:23;:21;:23::i;:::-;23606:42;;23671:8;23682:1;23671:12;23663:5;:20;23659:70;;;23715:1;23700:17;;;;;23659:70;23751:5;23767:235;23799:12;;;;:9;:12;;;;;;;;-1:-1:-1;;;;;23799:20:0;;;;;;;;;;;;23795:112;;;23847:21;;;;:18;:21;;;;;;;;-1:-1:-1;;;;;23847:29:0;;;;;;;;;;:44;;;;;-1:-1:-1;23840:51:0;;-1:-1:-1;23840:51:0;23795:112;23925:6;23921:52;;23952:5;;23921:52;-1:-1:-1;;23987:3:0;23767:235;;;-1:-1:-1;24076:6:0;;23505:585;-1:-1:-1;;;23505:585:0:o;17671:1337::-;17750:1;17741:6;:10;17733:43;;;;;-1:-1:-1;;;17733:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17789:16;17808:23;:21;:23::i;:::-;17946:52;;;-1:-1:-1;;;17946:52:0;;17859:10;17946:52;;;;;;17984:4;17946:52;;;;;;;;;;;;17789:42;;-1:-1:-1;17859:10:0;;-1:-1:-1;;;;;17946:8:0;:21;;;;:52;;;;;;;;;;;;;;17842:14;17946:21;:52;;;2:2:-1;;;;27:1;24;17:12;2:2;17946:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17946:52:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17946:52:0;17924:128;;;;;-1:-1:-1;;;17924:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18065:34;18082:6;18090:8;18065:16;:34::i;:::-;18204:1;18193:12;;18174:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;18174:40:0;;;;;;;;;:46;:58;;18225:6;18174:58;:50;:58;:::i;:::-;18142:1;18131:12;;18112:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;18112:40:0;;;;;;;;;:120;;;;18289:16;:24;;;:30;:42;;18324:6;18289:42;:34;:42;:::i;:::-;-1:-1:-1;;;;;18243:24:0;;;;;;;:16;:24;;;;;;;;:88;;;;18499:1;18488:12;;18469:32;;:18;:32;;;;;:40;;;;;;;;;:55;;;;;18539:24;;18535:413;;18580:42;18597:14;18613:8;18580:16;:42::i;:::-;18750:1;18739:12;;;18720:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;18720:48:0;;;;;;;;;:63;;:75;;18788:6;18720:75;:67;:75;:::i;:::-;18667:1;18656:12;;;18637:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;18637:48:0;;;;;;;;;:63;;:158;;;;18877:16;:32;;;;;;:47;;:59;;18929:6;18877:59;:51;:59;:::i;:::-;-1:-1:-1;;;;;18810:32:0;;;;;;:16;:32;;;;;:47;;:126;18535:413;18965:35;;;;;;;;;;;;;;-1:-1:-1;;;;;18965:35:0;;;;;;;;;;;17671:1337;;;;:::o;20527:689::-;20659:13;;;20796:10;-1:-1:-1;;;;;20818:8:0;20796:31;;20774:113;;;;;-1:-1:-1;;;20774:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20900:16;20919:23;:21;:23::i;:::-;20900:42;;20953:34;20970:6;20978:8;20953:16;:34::i;:::-;21000:28;;:::i;:::-;-1:-1:-1;21031:28:0;;;;:18;:28;;;;;;;;-1:-1:-1;;;;;21031:36:0;;;;;;;;;;;21000:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20527:689:0;-1:-1:-1;;20527:689:0:o;13022:48::-;;;;:::o;22333:496::-;22405:7;22425:16;22444:23;:21;:23::i;:::-;22425:42;;22490:8;22501:1;22490:12;22482:5;:20;22478:61;;;22526:1;22519:8;;;;;22478:61;22561:5;22577:226;22609:12;;;;:9;:12;;;;;;;;-1:-1:-1;;;;;22609:20:0;;;;;;;;;;;;22605:103;;;22657:21;;;;:18;:21;;;;;;;;-1:-1:-1;;;;;22657:29:0;;;;;;;;;:35;;-1:-1:-1;22650:42:0;;-1:-1:-1;22650:42:0;22605:103;22726:6;22722:52;;22753:5;;22722:52;-1:-1:-1;;22788:3:0;22577:226;;;-1:-1:-1;22820:1:0;;22333:496;-1:-1:-1;;;;22333:496:0:o;25602:146::-;-1:-1:-1;;;;;25701:24:0;25674:7;25701:24;;;:16;:24;;;;;:39;;;;25602:146::o;22910:514::-;22991:7;23011:16;23030:23;:21;:23::i;:::-;23011:42;;23076:8;23087:1;23076:12;23068:5;:20;23064:61;;;23112:1;23105:8;;;;;23064:61;23147:5;23163:235;23195:12;;;;:9;:12;;;;;;;;-1:-1:-1;;;;;23195:20:0;;;;;;;;;;;;23191:112;;;23243:21;;;;:18;:21;;;;;;;;-1:-1:-1;;;;;23243:29:0;;;;;;;;;:44;;;;-1:-1:-1;23236:51:0;;-1:-1:-1;23236:51:0;23191:112;23321:6;23317:52;;23348:5;;23317:52;-1:-1:-1;;23383:3:0;23163:235;;12971:44;;;;:::o;8621:136::-;8679:7;8706:43;8710:1;8713;8706:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;8699:50;8621:136;-1:-1:-1;;;8621:136:0:o;10434:132::-;10492:7;10519:39;10523:1;10526;10519:39;;;;;;;;;;;;;;;;;:3;:39::i;8165:181::-;8223:7;8255:5;;;8279:6;;;;8271:46;;;;;-1:-1:-1;;;8271:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;29509:1412;-1:-1:-1;;;;;29611:24:0;;;29586:22;29611:24;;;:16;:24;;;;;:39;;;;29665:28;29661:220;;-1:-1:-1;;;;;;29783:24:0;;;;;;:16;:24;;;;;:39;;:48;;-1:-1:-1;;;;;;29783:48:0;;;;;;29825:6;29661:220;-1:-1:-1;;;;;29911:24:0;;29893:15;29911:24;;;:16;:24;;;;;;;;:39;;;;29981:30;;30029:16;;;:9;:16;;;;;:24;;;;;;;;;;;29911:39;;29981:30;30029:24;;30024:319;;30070:16;;;;:9;:16;;;;;;;;-1:-1:-1;;;;;30070:24:0;;;;;;;;;;;;:31;;30097:4;-1:-1:-1;;30070:31:0;;;;;;;;30148:25;;;:18;:25;;;;;:33;;;;;;;;;30196:25;;;:42;;-1:-1:-1;;;;;;30196:42:0;;;;;;;;;;;30253:25;;;:35;;;30303:28;;;30024:319;30570:1;30562:9;;30552:20;;;;:9;:20;;;;;;;;-1:-1:-1;;;;;30552:28:0;;;;;;;;;;;;30547:367;;30628:4;30607:9;;;30597:20;;;;:9;:20;;;;;;;;-1:-1:-1;;;;;30597:28:0;;;;;;;;;;;;:35;;-1:-1:-1;;30597:35:0;;;;;30688:29;;;:18;:29;;;;;:37;;;;;;;30740:34;;;:51;;-1:-1:-1;;;;;;30740:51:0;;;;;;;;;;;;30806:34;;;:44;;;;30865:37;29509:1412::o;12705:106::-;12763:7;12794:1;12790;:5;:13;;12802:1;12790:13;;;-1:-1:-1;12798:1:0;;12705:106;-1:-1:-1;12705:106:0:o;9052:192::-;9138:7;9174:12;9166:6;;;;9158:29;;;;-1:-1:-1;;;9158:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9158:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9210:5:0;;;9052:192::o;11054:345::-;11140:7;11242:12;11235:5;11227:28;;;;-1:-1:-1;;;11227:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;11227:28:0;;11266:9;11282:1;11278;:5;;;;;;;11054:345;-1:-1:-1;;;;;11054:345:0:o;13923:17001::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13923:17001:0;;;;;:::o
Swarm Source
ipfs://e226a6302b84b358849f5b5e0f541d9614dcdad0cedb6d983293d343b1243995
Loading...
Loading
Loading...
Loading
OVERVIEW
Kyber's staking contract.Net Worth in USD
$98,113.79
Net Worth in ETH
48.47429
Token Allocations
KNC
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.137183 | 715,203.676 | $98,113.79 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.