More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 567 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 19563225 | 167 days ago | IN | 0 ETH | 0.00288715 | ||||
Claim | 19058491 | 237 days ago | IN | 0 ETH | 0.00096271 | ||||
Claim | 18687750 | 289 days ago | IN | 0 ETH | 0.0040685 | ||||
Claim | 18660951 | 293 days ago | IN | 0 ETH | 0.00179172 | ||||
Claim | 18615491 | 300 days ago | IN | 0 ETH | 0.00405766 | ||||
Claim | 18536497 | 311 days ago | IN | 0 ETH | 0.00457883 | ||||
Claim | 18475128 | 319 days ago | IN | 0 ETH | 0.00120313 | ||||
Claim | 18428442 | 326 days ago | IN | 0 ETH | 0.00621628 | ||||
Claim | 18366662 | 334 days ago | IN | 0 ETH | 0.00052441 | ||||
Claim | 18350673 | 337 days ago | IN | 0 ETH | 0.00046822 | ||||
Claim | 18309960 | 342 days ago | IN | 0 ETH | 0.0004556 | ||||
Claim | 18279895 | 347 days ago | IN | 0 ETH | 0.00059238 | ||||
Claim | 18279893 | 347 days ago | IN | 0 ETH | 0.00078681 | ||||
Claim | 18256194 | 350 days ago | IN | 0 ETH | 0.0006975 | ||||
Claim | 18195267 | 358 days ago | IN | 0 ETH | 0.00063621 | ||||
Claim | 18106963 | 371 days ago | IN | 0 ETH | 0.00149669 | ||||
Claim | 18024925 | 382 days ago | IN | 0 ETH | 0.00198289 | ||||
Claim | 18024854 | 382 days ago | IN | 0 ETH | 0.00212476 | ||||
Claim | 17973345 | 389 days ago | IN | 0 ETH | 0.00341869 | ||||
Claim | 17944887 | 393 days ago | IN | 0 ETH | 0.00219951 | ||||
Claim | 17909039 | 398 days ago | IN | 0 ETH | 0.00154393 | ||||
Claim | 17815064 | 412 days ago | IN | 0 ETH | 0.00469312 | ||||
Claim | 17807652 | 413 days ago | IN | 0 ETH | 0.00206102 | ||||
Claim | 17553018 | 448 days ago | IN | 0 ETH | 0.00167223 | ||||
Claim | 17414119 | 468 days ago | IN | 0 ETH | 0.00300685 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Rewards
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
Yes with 9999 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.7.6; pragma experimental ABIEncoderV2; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/math/SafeMath.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./interfaces/IKernel.sol"; contract Rewards is Ownable { using SafeMath for uint256; uint256 constant decimals = 10 ** 18; struct Pull { address source; uint256 startTs; uint256 endTs; uint256 totalDuration; uint256 totalAmount; } Pull public pullFeature; bool public disabled; uint256 public lastPullTs; uint256 public balanceBefore; uint256 public currentMultiplier; mapping(address => uint256) public userMultiplier; mapping(address => uint256) public owed; IKernel public kernel; IERC20 public rewardToken; event Claim(address indexed user, uint256 amount); constructor(address _owner, address _token, address _kernel) { require(_token != address(0), "reward token must not be 0x0"); require(_kernel != address(0), "kernel address must not be 0x0"); transferOwnership(_owner); rewardToken = IERC20(_token); kernel = IKernel(_kernel); } // registerUserAction is called by the Kernel every time the user does a deposit or withdrawal in order to // account for the changes in reward that the user should get // it updates the amount owed to the user without transferring the funds function registerUserAction(address user) public { require(msg.sender == address(kernel), 'only callable by kernel'); _calculateOwed(user); } // claim calculates the currently owed reward and transfers the funds to the user function claim() public returns (uint256){ _calculateOwed(msg.sender); uint256 amount = owed[msg.sender]; require(amount > 0, "nothing to claim"); owed[msg.sender] = 0; rewardToken.transfer(msg.sender, amount); // acknowledge the amount that was transferred to the user ackFunds(); emit Claim(msg.sender, amount); return amount; } // ackFunds checks the difference between the last known balance of `token` and the current one // if it goes up, the multiplier is re-calculated // if it goes down, it only updates the known balance function ackFunds() public { uint256 balanceNow = rewardToken.balanceOf(address(this)); if (balanceNow == 0 || balanceNow <= balanceBefore) { balanceBefore = balanceNow; return; } uint256 totalStakedLeag = kernel.leagStaked(); // if there's no leag staked, it doesn't make sense to ackFunds because there's nobody to distribute them to // and the calculation would fail anyways due to division by 0 if (totalStakedLeag == 0) { return; } uint256 diff = balanceNow.sub(balanceBefore); uint256 multiplier = currentMultiplier.add(diff.mul(decimals).div(totalStakedLeag)); balanceBefore = balanceNow; currentMultiplier = multiplier; } // setupPullToken is used to setup the rewards system; only callable by contract owner // set source to address(0) to disable the functionality function setupPullToken(address source, uint256 startTs, uint256 endTs, uint256 amount) public { require(msg.sender == owner(), "!owner"); require(!disabled, "contract is disabled"); if (pullFeature.source != address(0)) { require(source == address(0), "contract is already set up, source must be 0x0"); disabled = true; } else { require(source != address(0), "contract is not setup, source must be != 0x0"); } if (source == address(0)) { require(startTs == 0, "disable contract: startTs must be 0"); require(endTs == 0, "disable contract: endTs must be 0"); require(amount == 0, "disable contract: amount must be 0"); } else { require(endTs > startTs, "setup contract: endTs must be greater than startTs"); require(amount > 0, "setup contract: amount must be greater than 0"); } pullFeature.source = source; pullFeature.startTs = startTs; pullFeature.endTs = endTs; pullFeature.totalDuration = endTs.sub(startTs); pullFeature.totalAmount = amount; if (lastPullTs < startTs) { lastPullTs = startTs; } } // setKernel sets the address of the LeagueDao Kernel into the state variable function setKernel(address _kernel) public { require(_kernel != address(0), 'kernel address must not be 0x0'); require(msg.sender == owner(), '!owner'); kernel = IKernel(_kernel); } // _pullToken calculates the amount based on the time passed since the last pull relative // to the total amount of time that the pull functionality is active and executes a transferFrom from the // address supplied as `pullTokenFrom`, if enabled function _pullToken() internal { if ( pullFeature.source == address(0) || block.timestamp < pullFeature.startTs ) { return; } uint256 timestampCap = pullFeature.endTs; if (block.timestamp < pullFeature.endTs) { timestampCap = block.timestamp; } if (lastPullTs >= timestampCap) { return; } uint256 timeSinceLastPull = timestampCap.sub(lastPullTs); uint256 shareToPull = timeSinceLastPull.mul(decimals).div(pullFeature.totalDuration); uint256 amountToPull = pullFeature.totalAmount.mul(shareToPull).div(decimals); lastPullTs = block.timestamp; rewardToken.transferFrom(pullFeature.source, address(this), amountToPull); } // _calculateOwed calculates and updates the total amount that is owed to an user and updates the user's multiplier // to the current value // it automatically attempts to pull the token from the source and acknowledge the funds function _calculateOwed(address user) internal { _pullToken(); ackFunds(); uint256 reward = _userPendingReward(user); owed[user] = owed[user].add(reward); userMultiplier[user] = currentMultiplier; } // _userPendingReward calculates the reward that should be based on the current multiplier / anything that's not included in the `owed[user]` value // it does not represent the entire reward that's due to the user unless added on top of `owed[user]` function _userPendingReward(address user) internal view returns (uint256) { uint256 multiplier = currentMultiplier.sub(userMultiplier[user]); return kernel.balanceOf(user).mul(multiplier).div(decimals); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.7.6; pragma experimental ABIEncoderV2; import "../libraries/LibKernelStorage.sol"; interface IKernel { // deposit allows a user to add more leag to his staked balance function deposit(uint256 amount) external; // withdraw allows a user to withdraw funds if the balance is not locked function withdraw(uint256 amount) external; // lock a user's currently staked balance until timestamp & add the bonus to his voting power function lock(uint256 timestamp) external; // delegate allows a user to delegate his voting power to another user function delegate(address to) external; // stopDelegate allows a user to take back the delegated voting power function stopDelegate() external; // lock the balance of a proposal creator until the voting ends; only callable by DAO function lockCreatorBalance(address user, uint256 timestamp) external; // balanceOf returns the current LEAG balance of a user (bonus not included) function balanceOf(address user) external view returns (uint256); // balanceAtTs returns the amount of LEAG that the user currently staked (bonus NOT included) function balanceAtTs(address user, uint256 timestamp) external view returns (uint256); // stakeAtTs returns the Stake object of the user that was valid at `timestamp` function stakeAtTs(address user, uint256 timestamp) external view returns (LibKernelStorage.Stake memory); // votingPower returns the voting power (bonus included) + delegated voting power for a user at the current block function votingPower(address user) external view returns (uint256); // votingPowerAtTs returns the voting power (bonus included) + delegated voting power for a user at a point in time function votingPowerAtTs(address user, uint256 timestamp) external view returns (uint256); // leagStaked returns the total raw amount of LEAG staked at the current block function leagStaked() external view returns (uint256); // leagStakedAtTs returns the total raw amount of LEAG users have deposited into the contract // it does not include any bonus function leagStakedAtTs(uint256 timestamp) external view returns (uint256); // delegatedPower returns the total voting power that a user received from other users function delegatedPower(address user) external view returns (uint256); // delegatedPowerAtTs returns the total voting power that a user received from other users at a point in time function delegatedPowerAtTs(address user, uint256 timestamp) external view returns (uint256); // multiplierAtTs calculates the multiplier at a given timestamp based on the user's stake a the given timestamp // it includes the decay mechanism function multiplierAtTs(address user, uint256 timestamp) external view returns (uint256); // userLockedUntil returns the timestamp until the user's balance is locked function userLockedUntil(address user) external view returns (uint256); // userDidDelegate returns the address to which a user delegated their voting power; address(0) if not delegated function userDelegatedTo(address user) external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.7.6; pragma experimental ABIEncoderV2; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../interfaces/IRewards.sol"; library LibKernelStorage { bytes32 constant STORAGE_POSITION = keccak256("com.enterdao.kernel.storage"); struct Checkpoint { uint256 timestamp; uint256 amount; } struct Stake { uint256 timestamp; uint256 amount; uint256 expiryTimestamp; address delegatedTo; } struct Storage { bool initialized; // mapping of user address to history of Stake objects // every user action creates a new object in the history mapping(address => Stake[]) userStakeHistory; // array of leag staked Checkpoint // deposits/withdrawals create a new object in the history (max one per block) Checkpoint[] leagStakedHistory; // mapping of user address to history of delegated power // every delegate/stopDelegate call create a new checkpoint (max one per block) mapping(address => Checkpoint[]) delegatedPowerHistory; IERC20 leag; IRewards rewards; } function kernelStorage() internal pure returns (Storage storage ds) { bytes32 position = STORAGE_POSITION; assembly { ds.slot := position } } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.7.6; pragma experimental ABIEncoderV2; interface IRewards { function registerUserAction(address user) external; }
{ "optimizer": { "enabled": true, "runs": 9999 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_kernel","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"ackFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"balanceBefore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kernel","outputs":[{"internalType":"contract IKernel","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPullTs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"owed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pullFeature","outputs":[{"internalType":"address","name":"source","type":"address"},{"internalType":"uint256","name":"startTs","type":"uint256"},{"internalType":"uint256","name":"endTs","type":"uint256"},{"internalType":"uint256","name":"totalDuration","type":"uint256"},{"internalType":"uint256","name":"totalAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"registerUserAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_kernel","type":"address"}],"name":"setKernel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"source","type":"address"},{"internalType":"uint256","name":"startTs","type":"uint256"},{"internalType":"uint256","name":"endTs","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setupPullToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200193e3803806200193e83398101604081905262000034916200024c565b60006200004062000112565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350916000805160206200191e833981519152908290a3506001600160a01b038216620000ab5760405162461bcd60e51b8152600401620000a290620002cc565b60405180910390fd5b6001600160a01b038116620000d45760405162461bcd60e51b8152600401620000a29062000295565b620000df8362000116565b600d80546001600160a01b039384166001600160a01b031991821617909155600c80549290931691161790555062000303565b3390565b6200012062000112565b6001600160a01b03166200013362000220565b6001600160a01b0316146200018f576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620001d65760405162461bcd60e51b8152600401808060200182810382526026815260200180620018f86026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216916000805160206200191e83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b80516001600160a01b03811681146200024757600080fd5b919050565b60008060006060848603121562000261578283fd5b6200026c846200022f565b92506200027c602085016200022f565b91506200028c604085016200022f565b90509250925092565b6020808252601e908201527f6b65726e656c2061646472657373206d757374206e6f74206265203078300000604082015260600190565b6020808252601c908201527f72657761726420746f6b656e206d757374206e6f742062652030783000000000604082015260600190565b6115e580620003136000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806394b5798a116100b2578063d4aae0c411610081578063ee07080511610066578063ee070805146101fd578063f2fde38b14610212578063f7c618c1146102255761011b565b8063d4aae0c4146101e2578063df18e047146101ea5761011b565b806394b5798a146101ac578063acfd9325146101b4578063b1a03b6b146101bc578063cc81203c146101cf5761011b565b80636fbaaa1e116100ee5780636fbaaa1e14610174578063715018a61461017c57806377b28482146101845780638da5cb5b146101975761011b565b8063100223bb146101205780634831976c1461013e5780634e71d92d1461015757806366a7d8211461015f575b600080fd5b61012861022d565b604051610135919061155f565b60405180910390f35b610146610233565b60405161013595949392919061117b565b61012861025e565b61017261016d366004611079565b6103b7565b005b6101286103fa565b610172610400565b610172610192366004611093565b6104fd565b61019f610752565b6040516101359190611103565b61012861076e565b610172610774565b6101286101ca366004611079565b61093c565b6101726101dd366004611079565b61094e565b61019f610a1a565b6101286101f8366004611079565b610a36565b610205610a48565b60405161013591906111b6565b610172610220366004611079565b610a51565b61019f610bbe565b60075481565b60015460025460035460045460055473ffffffffffffffffffffffffffffffffffffffff9094169385565b600061026933610bda565b336000908152600b60205260409020548061029f5760405162461bcd60e51b81526004016102969061130f565b60405180910390fd5b336000818152600b602052604080822091909155600d5490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169163a9059cbb9161030991908590600401611124565b602060405180830381600087803b15801561032357600080fd5b505af1158015610337573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035b91906110cb565b50610364610774565b3373ffffffffffffffffffffffffffffffffffffffff167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4826040516103aa919061155f565b60405180910390a2905090565b600c5473ffffffffffffffffffffffffffffffffffffffff1633146103ee5760405162461bcd60e51b815260040161029690611494565b6103f781610bda565b50565b60095481565b610408610c67565b73ffffffffffffffffffffffffffffffffffffffff16610426610752565b73ffffffffffffffffffffffffffffffffffffffff161461048e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b610505610752565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461054f5760405162461bcd60e51b815260040161029690611528565b60065460ff16156105725760405162461bcd60e51b815260040161029690611346565b60015473ffffffffffffffffffffffffffffffffffffffff16156105f45773ffffffffffffffffffffffffffffffffffffffff8416156105c45760405162461bcd60e51b815260040161029690611255565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610627565b73ffffffffffffffffffffffffffffffffffffffff84166106275760405162461bcd60e51b8152600401610296906112b2565b73ffffffffffffffffffffffffffffffffffffffff84166106a15782156106605760405162461bcd60e51b815260040161029690611437565b811561067e5760405162461bcd60e51b8152600401610296906114cb565b801561069c5760405162461bcd60e51b81526004016102969061137d565b6106e0565b8282116106c05760405162461bcd60e51b8152600401610296906113da565b600081116106e05760405162461bcd60e51b8152600401610296906111f8565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055600283905560038290556107348284610c6b565b600455600581905560075483111561074c5760078390555b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60085481565b600d546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a08231906107cb903090600401611103565b60206040518083038186803b1580156107e357600080fd5b505afa1580156107f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081b91906110eb565b905080158061082c57506008548111155b156108395760085561093a565b600c54604080517fdf18b423000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163df18b423916004808301926020929190829003018186803b1580156108a457600080fd5b505afa1580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc91906110eb565b9050806108ea57505061093a565b600061090160085484610c6b90919063ffffffff16565b9050600061092d6109248461091e85670de0b6b3a7640000610ccd565b90610d2d565b60095490610d94565b6008949094555050506009555b565b600a6020526000908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff81166109815760405162461bcd60e51b8152600401610296906111c1565b610989610752565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109d35760405162461bcd60e51b815260040161029690611528565b600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600c5473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020526000908152604090205481565b60065460ff1681565b610a59610c67565b73ffffffffffffffffffffffffffffffffffffffff16610a77610752565b73ffffffffffffffffffffffffffffffffffffffff1614610adf576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b315760405162461bcd60e51b81526004018080602001828103825260268152602001806115696026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600d5473ffffffffffffffffffffffffffffffffffffffff1681565b610be2610dee565b610bea610774565b6000610bf582610f56565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b6020526040902054909150610c289082610d94565b73ffffffffffffffffffffffffffffffffffffffff9092166000908152600b6020908152604080832094909455600954600a9091529290209190915550565b3390565b600082821115610cc2576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b600082610cdc57506000610cc7565b82820282848281610ce957fe5b0414610d265760405162461bcd60e51b815260040180806020018281038252602181526020018061158f6021913960400191505060405180910390fd5b9392505050565b6000808211610d83576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610d8c57fe5b049392505050565b600082820183811015610d26576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60015473ffffffffffffffffffffffffffffffffffffffff161580610e14575060025442105b15610e1e5761093a565b60035442811115610e2c5750425b8060075410610e3b575061093a565b6000610e5260075483610c6b90919063ffffffff16565b600454909150600090610e719061091e84670de0b6b3a7640000610ccd565b90506000610e99670de0b6b3a764000061091e84600160040154610ccd90919063ffffffff16565b42600755600d546001546040517f23b872dd00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff918216926323b872dd92610efd9216903090869060040161114a565b602060405180830381600087803b158015610f1757600080fd5b505af1158015610f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4f91906110cb565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600a60205260408120546009548291610f8b9190610c6b565b600c546040517f70a0823100000000000000000000000000000000000000000000000000000000815291925061104c91670de0b6b3a76400009161091e91859173ffffffffffffffffffffffffffffffffffffffff16906370a0823190610ff6908a90600401611103565b60206040518083038186803b15801561100e57600080fd5b505afa158015611022573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104691906110eb565b90610ccd565b9150505b919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461105057600080fd5b60006020828403121561108a578081fd5b610d2682611055565b600080600080608085870312156110a8578283fd5b6110b185611055565b966020860135965060408601359560600135945092505050565b6000602082840312156110dc578081fd5b81518015158114610d26578182fd5b6000602082840312156110fc578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff959095168552602085019390935260408401919091526060830152608082015260a00190565b901515815260200190565b6020808252601e908201527f6b65726e656c2061646472657373206d757374206e6f74206265203078300000604082015260600190565b6020808252602d908201527f736574757020636f6e74726163743a20616d6f756e74206d757374206265206760408201527f726561746572207468616e203000000000000000000000000000000000000000606082015260800190565b6020808252602e908201527f636f6e747261637420697320616c7265616479207365742075702c20736f757260408201527f6365206d75737420626520307830000000000000000000000000000000000000606082015260800190565b6020808252602c908201527f636f6e7472616374206973206e6f742073657475702c20736f75726365206d7560408201527f737420626520213d203078300000000000000000000000000000000000000000606082015260800190565b60208082526010908201527f6e6f7468696e6720746f20636c61696d00000000000000000000000000000000604082015260600190565b60208082526014908201527f636f6e74726163742069732064697361626c6564000000000000000000000000604082015260600190565b60208082526022908201527f64697361626c6520636f6e74726163743a20616d6f756e74206d75737420626560408201527f2030000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526032908201527f736574757020636f6e74726163743a20656e645473206d75737420626520677260408201527f6561746572207468616e20737461727454730000000000000000000000000000606082015260800190565b60208082526023908201527f64697361626c6520636f6e74726163743a2073746172745473206d757374206260408201527f6520300000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526017908201527f6f6e6c792063616c6c61626c65206279206b65726e656c000000000000000000604082015260600190565b60208082526021908201527f64697361626c6520636f6e74726163743a20656e645473206d7573742062652060408201527f3000000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526006908201527f216f776e65720000000000000000000000000000000000000000000000000000604082015260600190565b9081526020019056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220741fcd14ddfb74b8fb3eb06a53551dfb34ea5ce60719f386c0a50029d762d23b64736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000000000000000000005fbd8ae80e26d82922f69aa51a99737dcd748f120000000000000000000000007b39917f9562c8bc83c7a6c2950ff571375d505d00000000000000000000000067f60da0f409ab8427e8a408efc4b137d0bd4e7b
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061011b5760003560e01c806394b5798a116100b2578063d4aae0c411610081578063ee07080511610066578063ee070805146101fd578063f2fde38b14610212578063f7c618c1146102255761011b565b8063d4aae0c4146101e2578063df18e047146101ea5761011b565b806394b5798a146101ac578063acfd9325146101b4578063b1a03b6b146101bc578063cc81203c146101cf5761011b565b80636fbaaa1e116100ee5780636fbaaa1e14610174578063715018a61461017c57806377b28482146101845780638da5cb5b146101975761011b565b8063100223bb146101205780634831976c1461013e5780634e71d92d1461015757806366a7d8211461015f575b600080fd5b61012861022d565b604051610135919061155f565b60405180910390f35b610146610233565b60405161013595949392919061117b565b61012861025e565b61017261016d366004611079565b6103b7565b005b6101286103fa565b610172610400565b610172610192366004611093565b6104fd565b61019f610752565b6040516101359190611103565b61012861076e565b610172610774565b6101286101ca366004611079565b61093c565b6101726101dd366004611079565b61094e565b61019f610a1a565b6101286101f8366004611079565b610a36565b610205610a48565b60405161013591906111b6565b610172610220366004611079565b610a51565b61019f610bbe565b60075481565b60015460025460035460045460055473ffffffffffffffffffffffffffffffffffffffff9094169385565b600061026933610bda565b336000908152600b60205260409020548061029f5760405162461bcd60e51b81526004016102969061130f565b60405180910390fd5b336000818152600b602052604080822091909155600d5490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169163a9059cbb9161030991908590600401611124565b602060405180830381600087803b15801561032357600080fd5b505af1158015610337573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035b91906110cb565b50610364610774565b3373ffffffffffffffffffffffffffffffffffffffff167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4826040516103aa919061155f565b60405180910390a2905090565b600c5473ffffffffffffffffffffffffffffffffffffffff1633146103ee5760405162461bcd60e51b815260040161029690611494565b6103f781610bda565b50565b60095481565b610408610c67565b73ffffffffffffffffffffffffffffffffffffffff16610426610752565b73ffffffffffffffffffffffffffffffffffffffff161461048e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b610505610752565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461054f5760405162461bcd60e51b815260040161029690611528565b60065460ff16156105725760405162461bcd60e51b815260040161029690611346565b60015473ffffffffffffffffffffffffffffffffffffffff16156105f45773ffffffffffffffffffffffffffffffffffffffff8416156105c45760405162461bcd60e51b815260040161029690611255565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610627565b73ffffffffffffffffffffffffffffffffffffffff84166106275760405162461bcd60e51b8152600401610296906112b2565b73ffffffffffffffffffffffffffffffffffffffff84166106a15782156106605760405162461bcd60e51b815260040161029690611437565b811561067e5760405162461bcd60e51b8152600401610296906114cb565b801561069c5760405162461bcd60e51b81526004016102969061137d565b6106e0565b8282116106c05760405162461bcd60e51b8152600401610296906113da565b600081116106e05760405162461bcd60e51b8152600401610296906111f8565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055600283905560038290556107348284610c6b565b600455600581905560075483111561074c5760078390555b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60085481565b600d546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906370a08231906107cb903090600401611103565b60206040518083038186803b1580156107e357600080fd5b505afa1580156107f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081b91906110eb565b905080158061082c57506008548111155b156108395760085561093a565b600c54604080517fdf18b423000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163df18b423916004808301926020929190829003018186803b1580156108a457600080fd5b505afa1580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc91906110eb565b9050806108ea57505061093a565b600061090160085484610c6b90919063ffffffff16565b9050600061092d6109248461091e85670de0b6b3a7640000610ccd565b90610d2d565b60095490610d94565b6008949094555050506009555b565b600a6020526000908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff81166109815760405162461bcd60e51b8152600401610296906111c1565b610989610752565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109d35760405162461bcd60e51b815260040161029690611528565b600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600c5473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020526000908152604090205481565b60065460ff1681565b610a59610c67565b73ffffffffffffffffffffffffffffffffffffffff16610a77610752565b73ffffffffffffffffffffffffffffffffffffffff1614610adf576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b315760405162461bcd60e51b81526004018080602001828103825260268152602001806115696026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600d5473ffffffffffffffffffffffffffffffffffffffff1681565b610be2610dee565b610bea610774565b6000610bf582610f56565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b6020526040902054909150610c289082610d94565b73ffffffffffffffffffffffffffffffffffffffff9092166000908152600b6020908152604080832094909455600954600a9091529290209190915550565b3390565b600082821115610cc2576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b600082610cdc57506000610cc7565b82820282848281610ce957fe5b0414610d265760405162461bcd60e51b815260040180806020018281038252602181526020018061158f6021913960400191505060405180910390fd5b9392505050565b6000808211610d83576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610d8c57fe5b049392505050565b600082820183811015610d26576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60015473ffffffffffffffffffffffffffffffffffffffff161580610e14575060025442105b15610e1e5761093a565b60035442811115610e2c5750425b8060075410610e3b575061093a565b6000610e5260075483610c6b90919063ffffffff16565b600454909150600090610e719061091e84670de0b6b3a7640000610ccd565b90506000610e99670de0b6b3a764000061091e84600160040154610ccd90919063ffffffff16565b42600755600d546001546040517f23b872dd00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff918216926323b872dd92610efd9216903090869060040161114a565b602060405180830381600087803b158015610f1757600080fd5b505af1158015610f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4f91906110cb565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600a60205260408120546009548291610f8b9190610c6b565b600c546040517f70a0823100000000000000000000000000000000000000000000000000000000815291925061104c91670de0b6b3a76400009161091e91859173ffffffffffffffffffffffffffffffffffffffff16906370a0823190610ff6908a90600401611103565b60206040518083038186803b15801561100e57600080fd5b505afa158015611022573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104691906110eb565b90610ccd565b9150505b919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461105057600080fd5b60006020828403121561108a578081fd5b610d2682611055565b600080600080608085870312156110a8578283fd5b6110b185611055565b966020860135965060408601359560600135945092505050565b6000602082840312156110dc578081fd5b81518015158114610d26578182fd5b6000602082840312156110fc578081fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff959095168552602085019390935260408401919091526060830152608082015260a00190565b901515815260200190565b6020808252601e908201527f6b65726e656c2061646472657373206d757374206e6f74206265203078300000604082015260600190565b6020808252602d908201527f736574757020636f6e74726163743a20616d6f756e74206d757374206265206760408201527f726561746572207468616e203000000000000000000000000000000000000000606082015260800190565b6020808252602e908201527f636f6e747261637420697320616c7265616479207365742075702c20736f757260408201527f6365206d75737420626520307830000000000000000000000000000000000000606082015260800190565b6020808252602c908201527f636f6e7472616374206973206e6f742073657475702c20736f75726365206d7560408201527f737420626520213d203078300000000000000000000000000000000000000000606082015260800190565b60208082526010908201527f6e6f7468696e6720746f20636c61696d00000000000000000000000000000000604082015260600190565b60208082526014908201527f636f6e74726163742069732064697361626c6564000000000000000000000000604082015260600190565b60208082526022908201527f64697361626c6520636f6e74726163743a20616d6f756e74206d75737420626560408201527f2030000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526032908201527f736574757020636f6e74726163743a20656e645473206d75737420626520677260408201527f6561746572207468616e20737461727454730000000000000000000000000000606082015260800190565b60208082526023908201527f64697361626c6520636f6e74726163743a2073746172745473206d757374206260408201527f6520300000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526017908201527f6f6e6c792063616c6c61626c65206279206b65726e656c000000000000000000604082015260600190565b60208082526021908201527f64697361626c6520636f6e74726163743a20656e645473206d7573742062652060408201527f3000000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526006908201527f216f776e65720000000000000000000000000000000000000000000000000000604082015260600190565b9081526020019056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220741fcd14ddfb74b8fb3eb06a53551dfb34ea5ce60719f386c0a50029d762d23b64736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005fbd8ae80e26d82922f69aa51a99737dcd748f120000000000000000000000007b39917f9562c8bc83c7a6c2950ff571375d505d00000000000000000000000067f60da0f409ab8427e8a408efc4b137d0bd4e7b
-----Decoded View---------------
Arg [0] : _owner (address): 0x5FBd8AE80e26D82922f69aa51A99737dCd748f12
Arg [1] : _token (address): 0x7b39917f9562C8Bc83c7a6c2950FF571375D505D
Arg [2] : _kernel (address): 0x67F60dA0F409AB8427e8a408efc4B137D0BD4e7B
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000005fbd8ae80e26d82922f69aa51a99737dcd748f12
Arg [1] : 0000000000000000000000007b39917f9562c8bc83c7a6c2950ff571375d505d
Arg [2] : 00000000000000000000000067f60da0f409ab8427e8a408efc4b137d0bd4e7b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.