More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 238 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 13163860 | 1042 days ago | IN | 0 ETH | 0.0093277 | ||||
Claim | 13162953 | 1042 days ago | IN | 0 ETH | 0.01282265 | ||||
Claim | 13162951 | 1042 days ago | IN | 0 ETH | 0.00783152 | ||||
Claim | 13161780 | 1042 days ago | IN | 0 ETH | 0.00838057 | ||||
Claim | 13161780 | 1042 days ago | IN | 0 ETH | 0.01026157 | ||||
Claim | 13157017 | 1043 days ago | IN | 0 ETH | 0.0076185 | ||||
Claim | 13157013 | 1043 days ago | IN | 0 ETH | 0.00746632 | ||||
Claim | 13153892 | 1044 days ago | IN | 0 ETH | 0.00927069 | ||||
Claim | 13138371 | 1046 days ago | IN | 0 ETH | 0.00558516 | ||||
Claim | 13138367 | 1046 days ago | IN | 0 ETH | 0.01077707 | ||||
Claim | 13138365 | 1046 days ago | IN | 0 ETH | 0.00656283 | ||||
Claim | 13138190 | 1046 days ago | IN | 0 ETH | 0.00533239 | ||||
Claim | 13137299 | 1046 days ago | IN | 0 ETH | 0.00973265 | ||||
Claim | 13137297 | 1046 days ago | IN | 0 ETH | 0.0096869 | ||||
Claim | 13137115 | 1046 days ago | IN | 0 ETH | 0.00634277 | ||||
Claim | 13137115 | 1046 days ago | IN | 0 ETH | 0.01056244 | ||||
Claim | 13137066 | 1046 days ago | IN | 0 ETH | 0.00848784 | ||||
Claim | 13137052 | 1046 days ago | IN | 0 ETH | 0.00653009 | ||||
Claim | 13136968 | 1046 days ago | IN | 0 ETH | 0.01256255 | ||||
Claim | 13136951 | 1046 days ago | IN | 0 ETH | 0.00898567 | ||||
Claim | 13136951 | 1046 days ago | IN | 0 ETH | 0.0067158 | ||||
Claim | 13136900 | 1046 days ago | IN | 0 ETH | 0.00997166 | ||||
Claim | 13131563 | 1047 days ago | IN | 0 ETH | 0.00482917 | ||||
Claim | 13127701 | 1048 days ago | IN | 0 ETH | 0.00380935 | ||||
Claim | 13125612 | 1048 days ago | IN | 0 ETH | 0.00995874 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
RewardsAirdropWithLock
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: NONE pragma solidity ^0.8.0; import "./utils/MerkleProof.sol"; import "./utils/Ownable.sol"; import "./utils/SafeERC20.sol"; import "./interfaces/IERC20.sol"; import "./interfaces/IRewardsAirdropWithLock.sol"; /** * @title Ruler RewardsAirdropWithLock contract * @author crypto-pumpkin * This contract handles multiple rounds of airdrops. It also can (does not have to) enforce a lock up window for claiming. Meaning if the user claimed before the lock up ends, it will charge a penalty. */ contract RewardsAirdropWithLock is IRewardsAirdropWithLock, Ownable { using SafeERC20 for IERC20; address public override penaltyReceiver; uint256 public constant override claimWindow = 120 days; uint256 public constant BASE = 1e18; AirdropRound[] private airdropRounds; // roundsIndex => merkleIndex => mask mapping(uint256 => mapping(uint256 => uint256)) private claimedBitMaps; modifier onlyNotDisabled(uint256 _roundInd) { require(!airdropRounds[_roundInd].disabled, "RWL: Round disabled"); _; } constructor(address _penaltyReceiver) { penaltyReceiver = _penaltyReceiver; } function updatePaneltyReceiver(address _new) external override onlyOwner { require(_new != address(0), "RWL: penaltyReceiver is 0"); emit UpdatedPenaltyReceiver(penaltyReceiver, _new); penaltyReceiver = _new; } /** * @notice add an airdrop round * @param _token, the token to drop * @param _merkleRoot, the merkleRoot of the airdrop round * @param _lockWindow, the amount of time in secs that the rewards are locked, if claim before lock ends, a lockRate panelty is charged. 0 means no lock up period and _lockRate is ignored. * @param _lockRate, the lockRate to charge if claim before lock ends, 40% lock rate means u only get 60% of the amount if claimed before 1 month (the lock window) * @param _total, the total amount to be dropped */ function addAirdrop( address _token, bytes32 _merkleRoot, uint256 _lockWindow, uint256 _lockRate, uint256 _total ) external override onlyOwner returns (uint256) { require(_token != address(0), "RWL: token is 0"); require(_total > 0, "RWL: total is 0"); require(_merkleRoot.length > 0, "RWL: empty merkle"); IERC20(_token).safeTransferFrom(msg.sender, address(this), _total); airdropRounds.push(AirdropRound( _token, _merkleRoot, false, block.timestamp, _lockWindow, _lockRate, _total, 0 )); uint256 index = airdropRounds.length - 1; emit AddedAirdrop(index, _token, _total); return index; } function updateRoundStatus(uint256 _roundInd, bool _disabled) external override onlyOwner { emit UpdatedRoundStatus(_roundInd, airdropRounds[_roundInd].disabled, _disabled); airdropRounds[_roundInd].disabled = _disabled; } function claim( uint256 _roundInd, uint256 _merkleInd, address account, uint256 amount, bytes32[] calldata merkleProof ) external override onlyNotDisabled(_roundInd) { require(!isClaimed(_roundInd, _merkleInd), "RWL: Already claimed"); AirdropRound memory airdropRound = airdropRounds[_roundInd]; require(block.timestamp <= airdropRound.startTime + claimWindow, "RWL: Too late"); // Verify the merkle proof. bytes32 node = keccak256(abi.encodePacked(_merkleInd, account, amount)); require(MerkleProof.verify(merkleProof, airdropRound.merkleRoot, node), "RWL: Invalid proof"); // Mark it claimed and send the token. airdropRounds[_roundInd].totalClaimed = airdropRound.totalClaimed + amount; _setClaimed(_roundInd, _merkleInd); // calculate penalty if any uint256 claimableAmount = amount; if (block.timestamp < airdropRound.startTime + airdropRound.lockWindow) { uint256 penalty = airdropRound.lockRate * amount / BASE; IERC20(airdropRound.token).safeTransfer(penaltyReceiver, penalty); claimableAmount -= penalty; } IERC20(airdropRound.token).safeTransfer(account, claimableAmount); emit Claimed(_roundInd, _merkleInd, account, claimableAmount, amount); } // collect any token send by mistake, collect target after 120 days function collectDust(uint256[] calldata _roundInds) external onlyOwner { for (uint256 i = 0; i < _roundInds.length; i ++) { AirdropRound memory airdropRound = airdropRounds[_roundInds[i]]; require(block.timestamp > airdropRound.startTime + claimWindow || airdropRound.disabled, "RWL: Not ready"); airdropRounds[_roundInds[i]].disabled = true; uint256 toCollect = airdropRound.total - airdropRound.totalClaimed; IERC20(airdropRound.token).safeTransfer(owner(), toCollect); } } function isClaimed(uint256 _roundInd, uint256 _merkleInd) public view override returns (bool) { uint256 claimedWordIndex = _merkleInd / 256; uint256 claimedBitIndex = _merkleInd % 256; uint256 claimedWord = claimedBitMaps[_roundInd][claimedWordIndex]; uint256 mask = (1 << claimedBitIndex); return claimedWord & mask == mask; } function getAllAirdropRounds() external view override returns (AirdropRound[] memory) { return airdropRounds; } function getAirdropRoundsLength() external view override returns (uint256) { return airdropRounds.length; } function getAirdropRounds(uint256 _startInd, uint256 _endInd) external view override returns (AirdropRound[] memory) { AirdropRound[] memory roundsResults = new AirdropRound[](_endInd - _startInd); AirdropRound[] memory roundsCopy = airdropRounds; uint256 resultInd; for (uint256 i = _startInd; i < _endInd; i++) { roundsResults[resultInd] = roundsCopy[i]; resultInd++; } return roundsResults; } function _setClaimed(uint256 _roundInd, uint256 _merkleInd) private { uint256 claimedWordIndex = _merkleInd / 256; uint256 claimedBitIndex = _merkleInd % 256; claimedBitMaps[_roundInd][claimedWordIndex] = claimedBitMaps[_roundInd][claimedWordIndex] | (1 << claimedBitIndex); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle trees (hash trees), */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } // Check if the computed hash (root) is equal to the provided root return computedHash == root; } }
// SPDX-License-Identifier: None pragma solidity ^0.8.0; /** * @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. * @author crypto-pumpkin@github * * By initialization, the owner account will be the one that called initializeOwner. 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. */ contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev COVER: Initializes the contract setting the deployer as the initial owner. */ constructor () { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == msg.sender, "Ownable: caller is not the owner"); _; } /** * @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.8.0; import "../interfaces/IERC20.sol"; import "./Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender) - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
// SPDX-License-Identifier: No License pragma solidity ^0.8.0; /** * @title Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function balanceOf(address account) external view returns (uint256); function totalSupply() external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function increaseAllowance(address spender, uint256 addedValue) external returns (bool); function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; // Allows anyone to claim a token if they exist in a merkle root. interface IRewardsAirdropWithLock { event Claimed(uint256 roundInd, uint256 merkleInd, address account, uint256 claimedAmount, uint256 amount); event UpdatedPenaltyReceiver(address old, address _new); event UpdatedRoundStatus(uint256 roundInd, bool oldDisabled, bool _newDisabled); event AddedAirdrop(uint256 roundInd, address token, uint256 total); struct AirdropRound { address token; bytes32 merkleRoot; bool disabled; uint256 startTime; uint256 lockWindow; uint256 lockRate; uint256 total; uint256 totalClaimed; } function penaltyReceiver() external view returns (address); function claimWindow() external view returns (uint256); // Returns true if the index has been marked claimed. function isClaimed(uint256 _roundsIndex, uint256 index) external view returns (bool); // extra view function getAllAirdropRounds() external returns (AirdropRound[] memory); function getAirdropRounds(uint256 _startInd, uint256 _endInd) external returns (AirdropRound[] memory); function getAirdropRoundsLength() external returns (uint256); // Claim the given amount of the token to the given address. Reverts if the inputs are invalid. function claim( uint256 _roundsIndex, uint256 _merkleIndex, address account, uint256 amount, bytes32[] calldata merkleProof ) external; // Only owner function updatePaneltyReceiver(address _new) external; function addAirdrop( address _token, bytes32 _merkleRoot, uint256 _lockWindow, uint256 _lockRate, uint256 _total ) external returns (uint256); function updateRoundStatus(uint256 _roundInd, bool _disabled) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_penaltyReceiver","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"roundInd","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"AddedAirdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"roundInd","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"merkleInd","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"claimedAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"old","type":"address"},{"indexed":false,"internalType":"address","name":"_new","type":"address"}],"name":"UpdatedPenaltyReceiver","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"roundInd","type":"uint256"},{"indexed":false,"internalType":"bool","name":"oldDisabled","type":"bool"},{"indexed":false,"internalType":"bool","name":"_newDisabled","type":"bool"}],"name":"UpdatedRoundStatus","type":"event"},{"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"_lockWindow","type":"uint256"},{"internalType":"uint256","name":"_lockRate","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"}],"name":"addAirdrop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_roundInd","type":"uint256"},{"internalType":"uint256","name":"_merkleInd","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimWindow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_roundInds","type":"uint256[]"}],"name":"collectDust","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startInd","type":"uint256"},{"internalType":"uint256","name":"_endInd","type":"uint256"}],"name":"getAirdropRounds","outputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"bool","name":"disabled","type":"bool"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"lockWindow","type":"uint256"},{"internalType":"uint256","name":"lockRate","type":"uint256"},{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"totalClaimed","type":"uint256"}],"internalType":"struct IRewardsAirdropWithLock.AirdropRound[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAirdropRoundsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllAirdropRounds","outputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"bool","name":"disabled","type":"bool"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"lockWindow","type":"uint256"},{"internalType":"uint256","name":"lockRate","type":"uint256"},{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"totalClaimed","type":"uint256"}],"internalType":"struct IRewardsAirdropWithLock.AirdropRound[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_roundInd","type":"uint256"},{"internalType":"uint256","name":"_merkleInd","type":"uint256"}],"name":"isClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"penaltyReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"updatePaneltyReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_roundInd","type":"uint256"},{"internalType":"bool","name":"_disabled","type":"bool"}],"name":"updateRoundStatus","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051611a58380380611a5883398101604081905261002f9161009d565b600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600180546001600160a01b0319166001600160a01b03929092169190911790556100cb565b6000602082840312156100ae578081fd5b81516001600160a01b03811681146100c4578182fd5b9392505050565b61197e806100da6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063d4f0f3f41161008c578063ec342ad011610066578063ec342ad0146101a8578063ec694391146101b0578063f2fde38b146101c3578063f364c90c146101d6576100ea565b8063d4f0f3f414610185578063d9548a701461018d578063e1b7fd42146101a0576100ea565b80638da5cb5b116100c85780638da5cb5b1461014d5780639a543aa314610162578063bc07fd6a14610175578063c5d37ae11461017d576100ea565b80633785aaab146100ef57806350161424146101185780635d4df3bf14610138575b600080fd5b6101026100fd366004611364565b6101f6565b60405161010f91906114b1565b60405180910390f35b61012b610126366004611298565b6103a9565b60405161010f91906117e2565b61014b610146366004611385565b61063b565b005b61015561092f565b60405161010f9190611446565b61014b610170366004611277565b61093e565b61012b6109f7565b61012b6109fd565b610102610a04565b61014b61019b3660046112d9565b610abc565b610155610ca7565b61012b610cb6565b61014b6101be366004611335565b610cc2565b61014b6101d1366004611277565b610da6565b6101e96101e4366004611364565b610e51565b60405161010f9190611549565b606060006102048484611899565b67ffffffffffffffff81111561022a57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561026357816020015b6102506111c4565b8152602001906001900390816102485790505b50905060006002805480602002602001604051908101604052809291908181526020016000905b8282101561031557600084815260209081902060408051610100810182526008860290920180546001600160a01b0316835260018082015484860152600282015460ff161515928401929092526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152908352909201910161028a565b5050505090506000808690505b8581101561039e5782818151811061034a57634e487b7160e01b600052603260045260246000fd5b602002602001015184838151811061037257634e487b7160e01b600052603260045260246000fd5b60200260200101819052508180610388906118dc565b9250508080610396906118dc565b915050610322565b509195945050505050565b600080546001600160a01b031633146103dd5760405162461bcd60e51b81526004016103d49061165b565b60405180910390fd5b6001600160a01b0386166104035760405162461bcd60e51b81526004016103d49061171b565b600082116104235760405162461bcd60e51b81526004016103d4906115fb565b6104386001600160a01b038716333085610e9c565b60408051610100810182526001600160a01b0388811682526020820188815260009383018481524260608501908152608085018a815260a086018a815260c087018a815260e088018981526002805460018082018355828d529a517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace600890920291820180546001600160a01b03191691909b161790995596517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf89015594517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad08801805460ff191691151591909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad187015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2860155517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad3850155517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad4840155517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad590920191909155546105f49190611899565b90507f24a2604e36db419cb07543941ccc6ca60eb04391c4ccb6bb42f63990271143b2818885604051610629939291906117eb565b60405180910390a19695505050505050565b856002818154811061065d57634e487b7160e01b600052603260045260246000fd5b600091825260209091206002600890920201015460ff16156106915760405162461bcd60e51b81526004016103d4906117b5565b61069b8787610e51565b156106b85760405162461bcd60e51b81526004016103d490611587565b6000600288815481106106db57634e487b7160e01b600052603260045260246000fd5b60009182526020918290206040805161010081018252600890930290910180546001600160a01b03168352600181015493830193909352600283015460ff1615159082015260038201546060820181905260048301546080830152600583015460a0830152600683015460c083015260079092015460e0820152915061076590629e34009061184e565b4211156107845760405162461bcd60e51b81526004016103d49061178e565b600087878760405160200161079b9392919061141e565b6040516020818303038152906040528051906020012090506107f4858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505050602084015183610efa565b6108105760405162461bcd60e51b81526004016103d4906116b8565b858260e00151610820919061184e565b60028a8154811061084157634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600701819055506108608989610fb5565b6080820151606083015187916108759161184e565b4210156108ce576000670de0b6b3a7640000888560a00151610897919061187a565b6108a19190611866565b60015485519192506108c0916001600160a01b03908116911683610ffe565b6108ca8183611899565b9150505b82516108e4906001600160a01b03168983610ffe565b7fa189bd50040d146e005d64d0eb3ae648a95712a6c5633c1de9020a0c3f3f9d118a8a8a848b60405161091b959493929190611822565b60405180910390a150505050505050505050565b6000546001600160a01b031690565b6000546001600160a01b031633146109685760405162461bcd60e51b81526004016103d49061165b565b6001600160a01b03811661098e5760405162461bcd60e51b81526004016103d490611624565b6001546040517f35f890849a925a74f76aa2a169254af643ac09bcda8816f8b87c7f0be8048628916109cd916001600160a01b0390911690849061145a565b60405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b60025490565b629e340081565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015610ab357600084815260209081902060408051610100810182526008860290920180546001600160a01b0316835260018082015484860152600282015460ff161515928401929092526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e08301529083529092019101610a28565b50505050905090565b6000546001600160a01b03163314610ae65760405162461bcd60e51b81526004016103d49061165b565b60005b81811015610ca25760006002848484818110610b1557634e487b7160e01b600052603260045260246000fd5b9050602002013581548110610b3a57634e487b7160e01b600052603260045260246000fd5b60009182526020918290206040805161010081018252600890930290910180546001600160a01b03168352600181015493830193909352600283015460ff1615159082015260038201546060820181905260048301546080830152600583015460a0830152600683015460c083015260079092015460e08201529150610bc490629e34009061184e565b421180610bd2575080604001515b610bee5760405162461bcd60e51b81526004016103d490611690565b60016002858585818110610c1257634e487b7160e01b600052603260045260246000fd5b9050602002013581548110610c3757634e487b7160e01b600052603260045260246000fd5b60009182526020822060089190910201600201805460ff19169215159290921790915560e082015160c0830151610c6e9190611899565b9050610c8d610c7b61092f565b83516001600160a01b03169083610ffe565b50508080610c9a906118dc565b915050610ae9565b505050565b6001546001600160a01b031681565b670de0b6b3a764000081565b6000546001600160a01b03163314610cec5760405162461bcd60e51b81526004016103d49061165b565b7f49d4cb04d59f6c74e238c8fe7b2044e760a9b7a83cd6491a5b85a61a6c1f2d948260028481548110610d2f57634e487b7160e01b600052603260045260246000fd5b6000918252602090912060026008909202010154604051610d56929160ff1690859061180a565b60405180910390a18060028381548110610d8057634e487b7160e01b600052603260045260246000fd5b60009182526020909120600890910201600201805460ff19169115159190911790555050565b6000546001600160a01b03163314610dd05760405162461bcd60e51b81526004016103d49061165b565b6001600160a01b038116610df65760405162461bcd60e51b81526004016103d4906115b5565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080610e6061010084611866565b90506000610e70610100856118f7565b60009586526003602090815260408088209488529390529190942054600190911b908116149392505050565b610ef4846323b872dd60e01b858585604051602401610ebd93929190611474565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261101d565b50505050565b600081815b8551811015610faa576000868281518110610f2a57634e487b7160e01b600052603260045260246000fd5b60200260200101519050808311610f6b578281604051602001610f4e9291906113f4565b604051602081830303815290604052805190602001209250610f97565b8083604051602001610f7e9291906113f4565b6040516020818303038152906040528051906020012092505b5080610fa2816118dc565b915050610eff565b509092149392505050565b6000610fc361010083611866565b90506000610fd3610100846118f7565b6000948552600360209081526040808720948752939052919093208054600190921b90911790555050565b610ca28363a9059cbb60e01b8484604051602401610ebd929190611498565b6000611072826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110ac9092919063ffffffff16565b805190915015610ca257808060200190518101906110909190611319565b610ca25760405162461bcd60e51b81526004016103d490611744565b60606110bb84846000856110c3565b949350505050565b60606110ce85611186565b6110ea5760405162461bcd60e51b81526004016103d4906116e4565b600080866001600160a01b031685876040516111069190611402565b60006040518083038185875af1925050503d8060008114611143576040519150601f19603f3d011682016040523d82523d6000602084013e611148565b606091505b5091509150811561115c5791506110bb9050565b80511561116c5780518082602001fd5b8360405162461bcd60e51b81526004016103d49190611554565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906111ba57508115155b925050505b919050565b60405180610100016040528060006001600160a01b031681526020016000801916815260200160001515815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356001600160a01b03811681146111bf57600080fd5b60008083601f84011261123f578182fd5b50813567ffffffffffffffff811115611256578182fd5b602083019150836020808302850101111561127057600080fd5b9250929050565b600060208284031215611288578081fd5b61129182611217565b9392505050565b600080600080600060a086880312156112af578081fd5b6112b886611217565b97602087013597506040870135966060810135965060800135945092505050565b600080602083850312156112eb578182fd5b823567ffffffffffffffff811115611301578283fd5b61130d8582860161122e565b90969095509350505050565b60006020828403121561132a578081fd5b815161129181611937565b60008060408385031215611347578182fd5b82359150602083013561135981611937565b809150509250929050565b60008060408385031215611376578182fd5b50508035926020909101359150565b60008060008060008060a0878903121561139d578081fd5b86359550602087013594506113b460408801611217565b935060608701359250608087013567ffffffffffffffff8111156113d6578182fd5b6113e289828a0161122e565b979a9699509497509295939492505050565b918252602082015260400190565b600082516114148184602087016118b0565b9190910192915050565b92835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b8281101561153c57815180516001600160a01b03168552868101518786015285810151151586860152606080820151908601526080808201519086015260a0808201519086015260c0808201519086015260e0908101519085015261010090930192908501906001016114ce565b5091979650505050505050565b901515815260200190565b60006020825282518060208401526115738160408501602087016118b0565b601f01601f19169190910160400192915050565b6020808252601490820152731495d30e88105b1c9958591e4818db185a5b595960621b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600f908201526e052574c3a20746f74616c206973203608c1b604082015260600190565b60208082526019908201527f52574c3a2070656e616c74795265636569766572206973203000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600e908201526d52574c3a204e6f7420726561647960901b604082015260600190565b602080825260129082015271292ba61d1024b73b30b634b210383937b7b360711b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252600f908201526e052574c3a20746f6b656e206973203608c1b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252600d908201526c52574c3a20546f6f206c61746560981b604082015260600190565b6020808252601390820152721495d30e88149bdd5b9908191a5cd8589b1959606a1b604082015260600190565b90815260200190565b9283526001600160a01b03919091166020830152604082015260600190565b92835290151560208301521515604082015260600190565b94855260208501939093526001600160a01b039190911660408401526060830152608082015260a00190565b600082198211156118615761186161190b565b500190565b60008261187557611875611921565b500490565b60008160001904831182151516156118945761189461190b565b500290565b6000828210156118ab576118ab61190b565b500390565b60005b838110156118cb5781810151838201526020016118b3565b83811115610ef45750506000910152565b60006000198214156118f0576118f061190b565b5060010190565b60008261190657611906611921565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b801515811461194557600080fd5b5056fea264697066735822122005c54d4289d61124d44013b0bc080ada679141d0e537794750300e3a13d802cc64736f6c634300080000330000000000000000000000006bef09f99bf6d92d6486889bdd8a374af151461d
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063d4f0f3f41161008c578063ec342ad011610066578063ec342ad0146101a8578063ec694391146101b0578063f2fde38b146101c3578063f364c90c146101d6576100ea565b8063d4f0f3f414610185578063d9548a701461018d578063e1b7fd42146101a0576100ea565b80638da5cb5b116100c85780638da5cb5b1461014d5780639a543aa314610162578063bc07fd6a14610175578063c5d37ae11461017d576100ea565b80633785aaab146100ef57806350161424146101185780635d4df3bf14610138575b600080fd5b6101026100fd366004611364565b6101f6565b60405161010f91906114b1565b60405180910390f35b61012b610126366004611298565b6103a9565b60405161010f91906117e2565b61014b610146366004611385565b61063b565b005b61015561092f565b60405161010f9190611446565b61014b610170366004611277565b61093e565b61012b6109f7565b61012b6109fd565b610102610a04565b61014b61019b3660046112d9565b610abc565b610155610ca7565b61012b610cb6565b61014b6101be366004611335565b610cc2565b61014b6101d1366004611277565b610da6565b6101e96101e4366004611364565b610e51565b60405161010f9190611549565b606060006102048484611899565b67ffffffffffffffff81111561022a57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561026357816020015b6102506111c4565b8152602001906001900390816102485790505b50905060006002805480602002602001604051908101604052809291908181526020016000905b8282101561031557600084815260209081902060408051610100810182526008860290920180546001600160a01b0316835260018082015484860152600282015460ff161515928401929092526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152908352909201910161028a565b5050505090506000808690505b8581101561039e5782818151811061034a57634e487b7160e01b600052603260045260246000fd5b602002602001015184838151811061037257634e487b7160e01b600052603260045260246000fd5b60200260200101819052508180610388906118dc565b9250508080610396906118dc565b915050610322565b509195945050505050565b600080546001600160a01b031633146103dd5760405162461bcd60e51b81526004016103d49061165b565b60405180910390fd5b6001600160a01b0386166104035760405162461bcd60e51b81526004016103d49061171b565b600082116104235760405162461bcd60e51b81526004016103d4906115fb565b6104386001600160a01b038716333085610e9c565b60408051610100810182526001600160a01b0388811682526020820188815260009383018481524260608501908152608085018a815260a086018a815260c087018a815260e088018981526002805460018082018355828d529a517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace600890920291820180546001600160a01b03191691909b161790995596517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf89015594517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad08801805460ff191691151591909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad187015590517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2860155517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad3850155517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad4840155517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad590920191909155546105f49190611899565b90507f24a2604e36db419cb07543941ccc6ca60eb04391c4ccb6bb42f63990271143b2818885604051610629939291906117eb565b60405180910390a19695505050505050565b856002818154811061065d57634e487b7160e01b600052603260045260246000fd5b600091825260209091206002600890920201015460ff16156106915760405162461bcd60e51b81526004016103d4906117b5565b61069b8787610e51565b156106b85760405162461bcd60e51b81526004016103d490611587565b6000600288815481106106db57634e487b7160e01b600052603260045260246000fd5b60009182526020918290206040805161010081018252600890930290910180546001600160a01b03168352600181015493830193909352600283015460ff1615159082015260038201546060820181905260048301546080830152600583015460a0830152600683015460c083015260079092015460e0820152915061076590629e34009061184e565b4211156107845760405162461bcd60e51b81526004016103d49061178e565b600087878760405160200161079b9392919061141e565b6040516020818303038152906040528051906020012090506107f4858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505050602084015183610efa565b6108105760405162461bcd60e51b81526004016103d4906116b8565b858260e00151610820919061184e565b60028a8154811061084157634e487b7160e01b600052603260045260246000fd5b9060005260206000209060080201600701819055506108608989610fb5565b6080820151606083015187916108759161184e565b4210156108ce576000670de0b6b3a7640000888560a00151610897919061187a565b6108a19190611866565b60015485519192506108c0916001600160a01b03908116911683610ffe565b6108ca8183611899565b9150505b82516108e4906001600160a01b03168983610ffe565b7fa189bd50040d146e005d64d0eb3ae648a95712a6c5633c1de9020a0c3f3f9d118a8a8a848b60405161091b959493929190611822565b60405180910390a150505050505050505050565b6000546001600160a01b031690565b6000546001600160a01b031633146109685760405162461bcd60e51b81526004016103d49061165b565b6001600160a01b03811661098e5760405162461bcd60e51b81526004016103d490611624565b6001546040517f35f890849a925a74f76aa2a169254af643ac09bcda8816f8b87c7f0be8048628916109cd916001600160a01b0390911690849061145a565b60405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b60025490565b629e340081565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015610ab357600084815260209081902060408051610100810182526008860290920180546001600160a01b0316835260018082015484860152600282015460ff161515928401929092526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e08301529083529092019101610a28565b50505050905090565b6000546001600160a01b03163314610ae65760405162461bcd60e51b81526004016103d49061165b565b60005b81811015610ca25760006002848484818110610b1557634e487b7160e01b600052603260045260246000fd5b9050602002013581548110610b3a57634e487b7160e01b600052603260045260246000fd5b60009182526020918290206040805161010081018252600890930290910180546001600160a01b03168352600181015493830193909352600283015460ff1615159082015260038201546060820181905260048301546080830152600583015460a0830152600683015460c083015260079092015460e08201529150610bc490629e34009061184e565b421180610bd2575080604001515b610bee5760405162461bcd60e51b81526004016103d490611690565b60016002858585818110610c1257634e487b7160e01b600052603260045260246000fd5b9050602002013581548110610c3757634e487b7160e01b600052603260045260246000fd5b60009182526020822060089190910201600201805460ff19169215159290921790915560e082015160c0830151610c6e9190611899565b9050610c8d610c7b61092f565b83516001600160a01b03169083610ffe565b50508080610c9a906118dc565b915050610ae9565b505050565b6001546001600160a01b031681565b670de0b6b3a764000081565b6000546001600160a01b03163314610cec5760405162461bcd60e51b81526004016103d49061165b565b7f49d4cb04d59f6c74e238c8fe7b2044e760a9b7a83cd6491a5b85a61a6c1f2d948260028481548110610d2f57634e487b7160e01b600052603260045260246000fd5b6000918252602090912060026008909202010154604051610d56929160ff1690859061180a565b60405180910390a18060028381548110610d8057634e487b7160e01b600052603260045260246000fd5b60009182526020909120600890910201600201805460ff19169115159190911790555050565b6000546001600160a01b03163314610dd05760405162461bcd60e51b81526004016103d49061165b565b6001600160a01b038116610df65760405162461bcd60e51b81526004016103d4906115b5565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080610e6061010084611866565b90506000610e70610100856118f7565b60009586526003602090815260408088209488529390529190942054600190911b908116149392505050565b610ef4846323b872dd60e01b858585604051602401610ebd93929190611474565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261101d565b50505050565b600081815b8551811015610faa576000868281518110610f2a57634e487b7160e01b600052603260045260246000fd5b60200260200101519050808311610f6b578281604051602001610f4e9291906113f4565b604051602081830303815290604052805190602001209250610f97565b8083604051602001610f7e9291906113f4565b6040516020818303038152906040528051906020012092505b5080610fa2816118dc565b915050610eff565b509092149392505050565b6000610fc361010083611866565b90506000610fd3610100846118f7565b6000948552600360209081526040808720948752939052919093208054600190921b90911790555050565b610ca28363a9059cbb60e01b8484604051602401610ebd929190611498565b6000611072826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110ac9092919063ffffffff16565b805190915015610ca257808060200190518101906110909190611319565b610ca25760405162461bcd60e51b81526004016103d490611744565b60606110bb84846000856110c3565b949350505050565b60606110ce85611186565b6110ea5760405162461bcd60e51b81526004016103d4906116e4565b600080866001600160a01b031685876040516111069190611402565b60006040518083038185875af1925050503d8060008114611143576040519150601f19603f3d011682016040523d82523d6000602084013e611148565b606091505b5091509150811561115c5791506110bb9050565b80511561116c5780518082602001fd5b8360405162461bcd60e51b81526004016103d49190611554565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906111ba57508115155b925050505b919050565b60405180610100016040528060006001600160a01b031681526020016000801916815260200160001515815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356001600160a01b03811681146111bf57600080fd5b60008083601f84011261123f578182fd5b50813567ffffffffffffffff811115611256578182fd5b602083019150836020808302850101111561127057600080fd5b9250929050565b600060208284031215611288578081fd5b61129182611217565b9392505050565b600080600080600060a086880312156112af578081fd5b6112b886611217565b97602087013597506040870135966060810135965060800135945092505050565b600080602083850312156112eb578182fd5b823567ffffffffffffffff811115611301578283fd5b61130d8582860161122e565b90969095509350505050565b60006020828403121561132a578081fd5b815161129181611937565b60008060408385031215611347578182fd5b82359150602083013561135981611937565b809150509250929050565b60008060408385031215611376578182fd5b50508035926020909101359150565b60008060008060008060a0878903121561139d578081fd5b86359550602087013594506113b460408801611217565b935060608701359250608087013567ffffffffffffffff8111156113d6578182fd5b6113e289828a0161122e565b979a9699509497509295939492505050565b918252602082015260400190565b600082516114148184602087016118b0565b9190910192915050565b92835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b8281101561153c57815180516001600160a01b03168552868101518786015285810151151586860152606080820151908601526080808201519086015260a0808201519086015260c0808201519086015260e0908101519085015261010090930192908501906001016114ce565b5091979650505050505050565b901515815260200190565b60006020825282518060208401526115738160408501602087016118b0565b601f01601f19169190910160400192915050565b6020808252601490820152731495d30e88105b1c9958591e4818db185a5b595960621b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600f908201526e052574c3a20746f74616c206973203608c1b604082015260600190565b60208082526019908201527f52574c3a2070656e616c74795265636569766572206973203000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600e908201526d52574c3a204e6f7420726561647960901b604082015260600190565b602080825260129082015271292ba61d1024b73b30b634b210383937b7b360711b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252600f908201526e052574c3a20746f6b656e206973203608c1b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252600d908201526c52574c3a20546f6f206c61746560981b604082015260600190565b6020808252601390820152721495d30e88149bdd5b9908191a5cd8589b1959606a1b604082015260600190565b90815260200190565b9283526001600160a01b03919091166020830152604082015260600190565b92835290151560208301521515604082015260600190565b94855260208501939093526001600160a01b039190911660408401526060830152608082015260a00190565b600082198211156118615761186161190b565b500190565b60008261187557611875611921565b500490565b60008160001904831182151516156118945761189461190b565b500290565b6000828210156118ab576118ab61190b565b500390565b60005b838110156118cb5781810151838201526020016118b3565b83811115610ef45750506000910152565b60006000198214156118f0576118f061190b565b5060010190565b60008261190657611906611921565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b801515811461194557600080fd5b5056fea264697066735822122005c54d4289d61124d44013b0bc080ada679141d0e537794750300e3a13d802cc64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006bef09f99bf6d92d6486889bdd8a374af151461d
-----Decoded View---------------
Arg [0] : _penaltyReceiver (address): 0x6BeF09F99Bf6d92d6486889Bdd8A374af151461D
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000006bef09f99bf6d92d6486889bdd8a374af151461d
Loading...
Loading
Loading...
Loading
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.