Source Code
Latest 25 from a total of 25 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 67181881 | 541 days ago | IN | 1 MNT | 0.00221322 | ||||
| Transfer | 62910387 | 640 days ago | IN | 16 MNT | 0.09084024 | ||||
| Claim | 61488458 | 673 days ago | IN | 0 MNT | 0.01653945 | ||||
| Claim | 61488447 | 673 days ago | IN | 0 MNT | 0.01629918 | ||||
| Claim | 61488445 | 673 days ago | IN | 0 MNT | 0.01564524 | ||||
| Claim | 61488429 | 673 days ago | IN | 0 MNT | 0.01600318 | ||||
| Claim | 61484951 | 673 days ago | IN | 0 MNT | 0.02073468 | ||||
| Claim | 61484948 | 673 days ago | IN | 0 MNT | 0.01995214 | ||||
| Claim | 61483780 | 673 days ago | IN | 0 MNT | 0.67009894 | ||||
| Claim | 61483768 | 673 days ago | IN | 0 MNT | 0.63112407 | ||||
| Claim | 61479343 | 673 days ago | IN | 0 MNT | 0.63266538 | ||||
| Claim | 61478794 | 673 days ago | IN | 0 MNT | 0.62764696 | ||||
| Claim | 61478790 | 673 days ago | IN | 0 MNT | 0.01581815 | ||||
| Claim | 61478774 | 673 days ago | IN | 0 MNT | 0.6298394 | ||||
| Claim | 61478757 | 673 days ago | IN | 0 MNT | 0.615934 | ||||
| Claim | 61471806 | 673 days ago | IN | 0 MNT | 0.63643909 | ||||
| Claim | 61451191 | 674 days ago | IN | 0 MNT | 0.42918898 | ||||
| Claim | 61450501 | 674 days ago | IN | 0 MNT | 0.01882941 | ||||
| Claim | 61448484 | 674 days ago | IN | 0 MNT | 0.43017506 | ||||
| Claim | 61447880 | 674 days ago | IN | 0 MNT | 0.43680101 | ||||
| Claim | 61446973 | 674 days ago | IN | 0 MNT | 0.43212163 | ||||
| Claim | 61446553 | 674 days ago | IN | 0 MNT | 0.64222711 | ||||
| Claim | 61446227 | 674 days ago | IN | 0 MNT | 0.63838882 | ||||
| Claim | 61445729 | 674 days ago | IN | 0 MNT | 0.63820545 | ||||
| Claim | 61445246 | 674 days ago | IN | 0 MNT | 0.63405296 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 66008177 | 568 days ago | 1,811,090.05 MNT | ||||
| 58421986 | 695 days ago | 43.04 MNT | ||||
| 58421886 | 695 days ago | 20.65 MNT | ||||
| 58421807 | 695 days ago | 20.65 MNT | ||||
| 58420708 | 696 days ago | 78.62 MNT | ||||
| 58420511 | 696 days ago | 52.22 MNT | ||||
| 58419499 | 696 days ago | 20.08 MNT | ||||
| 58419345 | 696 days ago | 26.62 MNT | ||||
| 58419126 | 696 days ago | 42.46 MNT | ||||
| 58418691 | 696 days ago | 23.52 MNT | ||||
| 58418670 | 696 days ago | 83.72 MNT | ||||
| 58417975 | 696 days ago | 196.83 MNT | ||||
| 58417047 | 696 days ago | 214.05 MNT | ||||
| 58416266 | 696 days ago | 20.65 MNT | ||||
| 58416232 | 696 days ago | 16.06 MNT | ||||
| 58416217 | 696 days ago | 23.52 MNT | ||||
| 58416167 | 696 days ago | 20.65 MNT | ||||
| 58416136 | 696 days ago | 20.65 MNT | ||||
| 58416110 | 696 days ago | 20.65 MNT | ||||
| 58416008 | 696 days ago | 20.65 MNT | ||||
| 58415971 | 696 days ago | 20.65 MNT | ||||
| 58415916 | 696 days ago | 20.65 MNT | ||||
| 58415862 | 696 days ago | 20.08 MNT | ||||
| 58415804 | 696 days ago | 20.65 MNT | ||||
| 58415774 | 696 days ago | 20.08 MNT |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MJAirdrop
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
import "@openzeppelin/contracts/interfaces/IERC20.sol";
import '@solmate-utils/MerkleProofLib.sol';
import '@openzeppelin/contracts/access/Ownable.sol';
contract MJAirdrop is Ownable {
address[] public tokens;
bool public canClaim; // claim flag
bytes32[] public merkleRoots;
mapping(address => mapping(address => uint)) public claimed;
event MerkleRootChanged(bytes32[] merkleRoots);
event TokenChanged(address[] tokens);
event CanClaimChanged(bool canClaim);
event Claim(address indexed claimant, uint256 amount);
receive() external payable{}
fallback() external payable{}
function getBalance() public view returns (uint) {
return address(this).balance;
}
constructor(address[] memory _tokens, bytes32[] memory _merkleRoots) Ownable(msg.sender) {
tokens = _tokens;
merkleRoots = _merkleRoots;
}
function setCanClaim(bool _canClaim) external onlyOwner {
canClaim = _canClaim;
emit CanClaimChanged(_canClaim);
}
function setMerkleRoots(bytes32[] memory _merkleRoots) external onlyOwner {
merkleRoots = _merkleRoots;
emit MerkleRootChanged(_merkleRoots);
}
function setTokens(address[] memory _tokens) external onlyOwner {
tokens = _tokens;
emit TokenChanged(_tokens);
}
function claimRemainingTokens(address recevicer) external onlyOwner {
for (uint256 i = 0; i < tokens.length; i++) {
address tokenAddress = tokens[i];
if (tokenAddress == address(0)) {
uint256 mntBalance = address(this).balance;
if (mntBalance > 0) {
(bool success, ) = payable(recevicer).call{value: mntBalance}("");
require(success, "MJ: airdrop MNT call failed.");
}
} else {
uint256 tokenBalance = IERC20(tokenAddress).balanceOf(address(this));
if (tokenBalance > 0) {
IERC20(tokenAddress).transfer(recevicer, tokenBalance);
}
}
}
}
function claimTokenByAddress(address tokenAddress, address recevicer) external onlyOwner {
uint256 tokenBalance = IERC20(tokenAddress).balanceOf(address(this));
if (tokenBalance > 0) {
IERC20(tokenAddress).transfer(recevicer, tokenBalance);
}
}
function claimMNT(address recevicer) external onlyOwner {
uint256 mntBalance = address(this).balance;
if (mntBalance > 0) {
(bool success, ) = payable(recevicer).call{value: mntBalance}("");
require(success, "MJ: airdrop MNT call failed.");
}
}
function claim(
bytes32[] calldata proof,
uint256 index,
uint256 amount
) public {
require(canClaim, "MJ: Cannot claim.");
address tokenAddress = tokens[index];
require(claimed[msg.sender][tokenAddress] == 0, "MJ: Tokens already claimed.");
bytes32 leaf = keccak256(bytes.concat(keccak256(abi.encode(msg.sender, amount))));
bool valid = MerkleProofLib.verify(proof, merkleRoots[index], leaf);
require(valid, "MJ: Valid proof required.");
claimed[msg.sender][tokenAddress] = 1;
if (tokenAddress == address(0)) {
(bool success, ) = payable(msg.sender).call{value: amount}("");
require(success, "MJ: airdrop MNT call failed.");
} else {
IERC20(tokenAddress).transfer(msg.sender, amount);
}
}
function verify(
bytes32[] calldata proof,
address addr,
uint256 index,
uint256 amount
) public view returns (bool) {
bytes32 leaf = keccak256(bytes.concat(keccak256(abi.encode(addr, amount))));
return MerkleProofLib.verify(
proof,
merkleRoots[index],
leaf
);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
pragma solidity ^0.8.19;
import {Context} from "../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.
*
* The initial owner is set to the address provided by the deployer. 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;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(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 {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol)
pragma solidity ^0.8.19;
import {IERC20} from "../token/ERC20/IERC20.sol";// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.19;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @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);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.19;
/**
* @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 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) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;
/// @notice Gas optimized merkle proof verification library.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/MerkleProofLib.sol)
/// @author Modified from Solady (https://github.com/Vectorized/solady/blob/main/src/utils/MerkleProofLib.sol)
library MerkleProofLib {
function verify(
bytes32[] calldata proof,
bytes32 root,
bytes32 leaf
) internal pure returns (bool isValid) {
/// @solidity memory-safe-assembly
assembly {
if proof.length {
// Left shifting by 5 is like multiplying by 32.
let end := add(proof.offset, shl(5, proof.length))
// Initialize offset to the offset of the proof in calldata.
let offset := proof.offset
// Iterate over proof elements to compute root hash.
// prettier-ignore
for {} 1 {} {
// Slot where the leaf should be put in scratch space. If
// leaf > calldataload(offset): slot 32, otherwise: slot 0.
let leafSlot := shl(5, gt(leaf, calldataload(offset)))
// Store elements to hash contiguously in scratch space.
// The xor puts calldataload(offset) in whichever slot leaf
// is not occupying, so 0 if leafSlot is 32, and 32 otherwise.
mstore(leafSlot, leaf)
mstore(xor(leafSlot, 32), calldataload(offset))
// Reuse leaf to store the hash to reduce stack operations.
leaf := keccak256(0, 64) // Hash both slots of scratch space.
offset := add(offset, 32) // Shift 1 word per cycle.
// prettier-ignore
if iszero(lt(offset, end)) { break }
}
}
isValid := eq(leaf, root) // The proof is valid if the roots match.
}
}
}{
"evmVersion": "paris",
"libraries": {},
"metadata": {
"appendCBOR": true,
"bytecodeHash": "ipfs",
"useLiteralContent": false
},
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": [
"@openzeppelin/=lib/openzeppelin-contracts/",
"@solmate-utils/=lib/solmate/src/utils/",
"ERC721A/=lib/ERC721A/contracts/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"erc721a/=lib/ERC721A/contracts/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"solmate/=lib/solmate/src/",
"lib/forge-std:ds-test/=lib/forge-std/lib/ds-test/src/",
"lib/openzeppelin-contracts:ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/",
"lib/openzeppelin-contracts:erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"lib/openzeppelin-contracts:forge-std/=lib/openzeppelin-contracts/lib/forge-std/src/",
"lib/openzeppelin-contracts:openzeppelin/=lib/openzeppelin-contracts/contracts/",
"lib/solmate:ds-test/=lib/solmate/lib/ds-test/src/"
]
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"bytes32[]","name":"_merkleRoots","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"canClaim","type":"bool"}],"name":"CanClaimChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"claimant","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"merkleRoots","type":"bytes32[]"}],"name":"MerkleRootChanged","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":"tokens","type":"address[]"}],"name":"TokenChanged","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"canClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recevicer","type":"address"}],"name":"claimMNT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recevicer","type":"address"}],"name":"claimRemainingTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"recevicer","type":"address"}],"name":"claimTokenByAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"merkleRoots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_canClaim","type":"bool"}],"name":"setCanClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleRoots","type":"bytes32[]"}],"name":"setMerkleRoots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"setTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","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":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040523480156200001157600080fd5b506040516200149538038062001495833981016040819052620000349162000266565b33620000408162000075565b50815162000056906001906020850190620000c5565b5080516200006c9060039060208401906200012f565b50505062000344565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280548282559060005260206000209081019282156200011d579160200282015b828111156200011d57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620000e6565b506200012b9291506200016d565b5090565b8280548282559060005260206000209081019282156200011d579160200282015b828111156200011d57825182559160200191906001019062000150565b5b808211156200012b57600081556001016200016e565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620001c557620001c562000184565b604052919050565b60006001600160401b03821115620001e957620001e962000184565b5060051b60200190565b600082601f8301126200020557600080fd5b815160206200021e6200021883620001cd565b6200019a565b82815260059290921b840181019181810190868411156200023e57600080fd5b8286015b848110156200025b578051835291830191830162000242565b509695505050505050565b600080604083850312156200027a57600080fd5b82516001600160401b03808211156200029257600080fd5b818501915085601f830112620002a757600080fd5b81516020620002ba6200021883620001cd565b82815260059290921b84018101918181019089841115620002da57600080fd5b948201945b83861015620003115785516001600160a01b0381168114620003015760008081fd5b82529482019490820190620002df565b918801519196509093505050808211156200032b57600080fd5b506200033a85828601620001f3565b9150509250929050565b61114180620003546000396000f3fe6080604052600436106100ea5760003560e01c806371c5ecb111610084578063bc07aa6411610056578063bc07aa64146102a6578063c503101e146102c6578063d4a6da09146102e6578063f2fde38b1461030657005b806371c5ecb1146102285780637b9ed5b41461024857806385d4773c146102685780638da5cb5b1461028857005b8063625adaf2116100bd578063625adaf2146101a9578063682de12a146101c95780636dc7a627146101e9578063715018a61461021357005b806206a943146100f35780630c9cbf0e1461011357806312065fe01461015e5780634f64b2be1461017157005b366100f157005b005b3480156100ff57600080fd5b506100f161010e366004610cbd565b610326565b34801561011f57600080fd5b5061014b61012e366004610cbd565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561016a57600080fd5b504761014b565b34801561017d57600080fd5b5061019161018c366004610cf0565b61041b565b6040516001600160a01b039091168152602001610155565b3480156101b557600080fd5b506100f16101c4366004610d74565b610445565b3480156101d557600080fd5b506100f16101e4366004610e06565b61049b565b3480156101f557600080fd5b506002546102039060ff1681565b6040519015158152602001610155565b34801561021f57600080fd5b506100f161052a565b34801561023457600080fd5b5061014b610243366004610cf0565b61053e565b34801561025457600080fd5b506100f1610263366004610e06565b61055f565b34801561027457600080fd5b50610203610283366004610e74565b610724565b34801561029457600080fd5b506000546001600160a01b0316610191565b3480156102b257600080fd5b506100f16102c1366004610eda565b6107ae565b3480156102d257600080fd5b506100f16102e1366004610f6e565b6107f9565b3480156102f257600080fd5b506100f1610301366004610f8b565b610842565b34801561031257600080fd5b506100f1610321366004610e06565b610af7565b61032e610b35565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103999190610fdc565b905080156104165760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156103f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104149190610ff5565b505b505050565b6001818154811061042b57600080fd5b6000918252602090912001546001600160a01b0316905081565b61044d610b35565b8051610460906001906020840190610bec565b507f39ff53ea4fcab3519879ed0be9749d77949af7cee1bb3c88f098b83e6fdedd09816040516104909190611012565b60405180910390a150565b6104a3610b35565b478015610526576000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146104f7576040519150601f19603f3d011682016040523d82523d6000602084013e6104fc565b606091505b50509050806104165760405162461bcd60e51b815260040161051d9061105f565b60405180910390fd5b5050565b610532610b35565b61053c6000610b62565b565b6003818154811061054e57600080fd5b600091825260209091200154905081565b610567610b35565b60005b6001548110156105265760006001828154811061058957610589611096565b6000918252602090912001546001600160a01b031690508061062757478015610621576000846001600160a01b03168260405160006040518083038185875af1925050503d80600081146105f9576040519150601f19603f3d011682016040523d82523d6000602084013e6105fe565b606091505b505090508061061f5760405162461bcd60e51b815260040161051d9061105f565b505b50610711565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561066e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106929190610fdc565b9050801561070f5760405163a9059cbb60e01b81526001600160a01b0385811660048301526024820183905283169063a9059cbb906044016020604051808303816000875af11580156106e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070d9190610ff5565b505b505b508061071c816110ac565b91505061056a565b604080516001600160a01b0385166020820152908101829052600090819060600160408051601f19818403018152828252805160209182012090830152016040516020818303038152906040528051906020012090506107a387876003878154811061079257610792611096565b906000526020600020015484610bb2565b979650505050505050565b6107b6610b35565b80516107c9906003906020840190610c51565b507fbd14fde5b28795876bbc6ad07ea523a001da8eb291bb7aa1c063c181f7c22cf58160405161049091906110d3565b610801610b35565b6002805460ff19168215159081179091556040519081527f288bc2dc4daa42daed2dc8f75a041199ec3b44228839d53fcdcd655319c6ba2790602001610490565b60025460ff166108885760405162461bcd60e51b815260206004820152601160248201527026a51d1021b0b73737ba1031b630b4b69760791b604482015260640161051d565b60006001838154811061089d5761089d611096565b60009182526020808320909101543383526004825260408084206001600160a01b03909216808552919092529120549091501561091c5760405162461bcd60e51b815260206004820152601b60248201527f4d4a3a20546f6b656e7320616c726561647920636c61696d65642e0000000000604482015260640161051d565b6040805133602082015290810183905260009060600160408051601f1981840301815282825280516020918201209083015201604051602081830303815290604052805190602001209050600061099287876003888154811061098157610981611096565b906000526020600020015485610bb2565b9050806109e15760405162461bcd60e51b815260206004820152601960248201527f4d4a3a2056616c69642070726f6f662072657175697265642e00000000000000604482015260640161051d565b3360009081526004602090815260408083206001600160a01b038716808552925290912060019055610a7b57604051600090339086908381818185875af1925050503d8060008114610a4f576040519150601f19603f3d011682016040523d82523d6000602084013e610a54565b606091505b5050905080610a755760405162461bcd60e51b815260040161051d9061105f565b50610aee565b60405163a9059cbb60e01b8152336004820152602481018590526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aec9190610ff5565b505b50505050505050565b610aff610b35565b6001600160a01b038116610b2957604051631e4fbdf760e01b81526000600482015260240161051d565b610b3281610b62565b50565b6000546001600160a01b0316331461053c5760405163118cdaa760e01b815233600482015260240161051d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008315610be4578360051b8501855b803580851160051b94855260209485185260406000209301818110610bc25750505b501492915050565b828054828255906000526020600020908101928215610c41579160200282015b82811115610c4157825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610c0c565b50610c4d929150610c8c565b5090565b828054828255906000526020600020908101928215610c41579160200282015b82811115610c41578251825591602001919060010190610c71565b5b80821115610c4d5760008155600101610c8d565b80356001600160a01b0381168114610cb857600080fd5b919050565b60008060408385031215610cd057600080fd5b610cd983610ca1565b9150610ce760208401610ca1565b90509250929050565b600060208284031215610d0257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d4857610d48610d09565b604052919050565b600067ffffffffffffffff821115610d6a57610d6a610d09565b5060051b60200190565b60006020808385031215610d8757600080fd5b823567ffffffffffffffff811115610d9e57600080fd5b8301601f81018513610daf57600080fd5b8035610dc2610dbd82610d50565b610d1f565b81815260059190911b82018301908381019087831115610de157600080fd5b928401925b828410156107a357610df784610ca1565b82529284019290840190610de6565b600060208284031215610e1857600080fd5b610e2182610ca1565b9392505050565b60008083601f840112610e3a57600080fd5b50813567ffffffffffffffff811115610e5257600080fd5b6020830191508360208260051b8501011115610e6d57600080fd5b9250929050565b600080600080600060808688031215610e8c57600080fd5b853567ffffffffffffffff811115610ea357600080fd5b610eaf88828901610e28565b9096509450610ec2905060208701610ca1565b94979396509394604081013594506060013592915050565b60006020808385031215610eed57600080fd5b823567ffffffffffffffff811115610f0457600080fd5b8301601f81018513610f1557600080fd5b8035610f23610dbd82610d50565b81815260059190911b82018301908381019087831115610f4257600080fd5b928401925b828410156107a357833582529284019290840190610f47565b8015158114610b3257600080fd5b600060208284031215610f8057600080fd5b8135610e2181610f60565b60008060008060608587031215610fa157600080fd5b843567ffffffffffffffff811115610fb857600080fd5b610fc487828801610e28565b90989097506020870135966040013595509350505050565b600060208284031215610fee57600080fd5b5051919050565b60006020828403121561100757600080fd5b8151610e2181610f60565b6020808252825182820181905260009190848201906040850190845b818110156110535783516001600160a01b03168352928401929184019160010161102e565b50909695505050505050565b6020808252601c908201527f4d4a3a2061697264726f70204d4e542063616c6c206661696c65642e00000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600182016110cc57634e487b7160e01b600052601160045260246000fd5b5060010190565b6020808252825182820181905260009190848201906040850190845b81811015611053578351835292840192918401916001016110ef56fea2646970667358221220e0d01ce9d106ff1ecd1156fdff68de43ae8fa78728c8d8d724166f7ae677b43464736f6c634300081300330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106100ea5760003560e01c806371c5ecb111610084578063bc07aa6411610056578063bc07aa64146102a6578063c503101e146102c6578063d4a6da09146102e6578063f2fde38b1461030657005b806371c5ecb1146102285780637b9ed5b41461024857806385d4773c146102685780638da5cb5b1461028857005b8063625adaf2116100bd578063625adaf2146101a9578063682de12a146101c95780636dc7a627146101e9578063715018a61461021357005b806206a943146100f35780630c9cbf0e1461011357806312065fe01461015e5780634f64b2be1461017157005b366100f157005b005b3480156100ff57600080fd5b506100f161010e366004610cbd565b610326565b34801561011f57600080fd5b5061014b61012e366004610cbd565b600460209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561016a57600080fd5b504761014b565b34801561017d57600080fd5b5061019161018c366004610cf0565b61041b565b6040516001600160a01b039091168152602001610155565b3480156101b557600080fd5b506100f16101c4366004610d74565b610445565b3480156101d557600080fd5b506100f16101e4366004610e06565b61049b565b3480156101f557600080fd5b506002546102039060ff1681565b6040519015158152602001610155565b34801561021f57600080fd5b506100f161052a565b34801561023457600080fd5b5061014b610243366004610cf0565b61053e565b34801561025457600080fd5b506100f1610263366004610e06565b61055f565b34801561027457600080fd5b50610203610283366004610e74565b610724565b34801561029457600080fd5b506000546001600160a01b0316610191565b3480156102b257600080fd5b506100f16102c1366004610eda565b6107ae565b3480156102d257600080fd5b506100f16102e1366004610f6e565b6107f9565b3480156102f257600080fd5b506100f1610301366004610f8b565b610842565b34801561031257600080fd5b506100f1610321366004610e06565b610af7565b61032e610b35565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103999190610fdc565b905080156104165760405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156103f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104149190610ff5565b505b505050565b6001818154811061042b57600080fd5b6000918252602090912001546001600160a01b0316905081565b61044d610b35565b8051610460906001906020840190610bec565b507f39ff53ea4fcab3519879ed0be9749d77949af7cee1bb3c88f098b83e6fdedd09816040516104909190611012565b60405180910390a150565b6104a3610b35565b478015610526576000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146104f7576040519150601f19603f3d011682016040523d82523d6000602084013e6104fc565b606091505b50509050806104165760405162461bcd60e51b815260040161051d9061105f565b60405180910390fd5b5050565b610532610b35565b61053c6000610b62565b565b6003818154811061054e57600080fd5b600091825260209091200154905081565b610567610b35565b60005b6001548110156105265760006001828154811061058957610589611096565b6000918252602090912001546001600160a01b031690508061062757478015610621576000846001600160a01b03168260405160006040518083038185875af1925050503d80600081146105f9576040519150601f19603f3d011682016040523d82523d6000602084013e6105fe565b606091505b505090508061061f5760405162461bcd60e51b815260040161051d9061105f565b505b50610711565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561066e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106929190610fdc565b9050801561070f5760405163a9059cbb60e01b81526001600160a01b0385811660048301526024820183905283169063a9059cbb906044016020604051808303816000875af11580156106e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070d9190610ff5565b505b505b508061071c816110ac565b91505061056a565b604080516001600160a01b0385166020820152908101829052600090819060600160408051601f19818403018152828252805160209182012090830152016040516020818303038152906040528051906020012090506107a387876003878154811061079257610792611096565b906000526020600020015484610bb2565b979650505050505050565b6107b6610b35565b80516107c9906003906020840190610c51565b507fbd14fde5b28795876bbc6ad07ea523a001da8eb291bb7aa1c063c181f7c22cf58160405161049091906110d3565b610801610b35565b6002805460ff19168215159081179091556040519081527f288bc2dc4daa42daed2dc8f75a041199ec3b44228839d53fcdcd655319c6ba2790602001610490565b60025460ff166108885760405162461bcd60e51b815260206004820152601160248201527026a51d1021b0b73737ba1031b630b4b69760791b604482015260640161051d565b60006001838154811061089d5761089d611096565b60009182526020808320909101543383526004825260408084206001600160a01b03909216808552919092529120549091501561091c5760405162461bcd60e51b815260206004820152601b60248201527f4d4a3a20546f6b656e7320616c726561647920636c61696d65642e0000000000604482015260640161051d565b6040805133602082015290810183905260009060600160408051601f1981840301815282825280516020918201209083015201604051602081830303815290604052805190602001209050600061099287876003888154811061098157610981611096565b906000526020600020015485610bb2565b9050806109e15760405162461bcd60e51b815260206004820152601960248201527f4d4a3a2056616c69642070726f6f662072657175697265642e00000000000000604482015260640161051d565b3360009081526004602090815260408083206001600160a01b038716808552925290912060019055610a7b57604051600090339086908381818185875af1925050503d8060008114610a4f576040519150601f19603f3d011682016040523d82523d6000602084013e610a54565b606091505b5050905080610a755760405162461bcd60e51b815260040161051d9061105f565b50610aee565b60405163a9059cbb60e01b8152336004820152602481018590526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aec9190610ff5565b505b50505050505050565b610aff610b35565b6001600160a01b038116610b2957604051631e4fbdf760e01b81526000600482015260240161051d565b610b3281610b62565b50565b6000546001600160a01b0316331461053c5760405163118cdaa760e01b815233600482015260240161051d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008315610be4578360051b8501855b803580851160051b94855260209485185260406000209301818110610bc25750505b501492915050565b828054828255906000526020600020908101928215610c41579160200282015b82811115610c4157825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610c0c565b50610c4d929150610c8c565b5090565b828054828255906000526020600020908101928215610c41579160200282015b82811115610c41578251825591602001919060010190610c71565b5b80821115610c4d5760008155600101610c8d565b80356001600160a01b0381168114610cb857600080fd5b919050565b60008060408385031215610cd057600080fd5b610cd983610ca1565b9150610ce760208401610ca1565b90509250929050565b600060208284031215610d0257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d4857610d48610d09565b604052919050565b600067ffffffffffffffff821115610d6a57610d6a610d09565b5060051b60200190565b60006020808385031215610d8757600080fd5b823567ffffffffffffffff811115610d9e57600080fd5b8301601f81018513610daf57600080fd5b8035610dc2610dbd82610d50565b610d1f565b81815260059190911b82018301908381019087831115610de157600080fd5b928401925b828410156107a357610df784610ca1565b82529284019290840190610de6565b600060208284031215610e1857600080fd5b610e2182610ca1565b9392505050565b60008083601f840112610e3a57600080fd5b50813567ffffffffffffffff811115610e5257600080fd5b6020830191508360208260051b8501011115610e6d57600080fd5b9250929050565b600080600080600060808688031215610e8c57600080fd5b853567ffffffffffffffff811115610ea357600080fd5b610eaf88828901610e28565b9096509450610ec2905060208701610ca1565b94979396509394604081013594506060013592915050565b60006020808385031215610eed57600080fd5b823567ffffffffffffffff811115610f0457600080fd5b8301601f81018513610f1557600080fd5b8035610f23610dbd82610d50565b81815260059190911b82018301908381019087831115610f4257600080fd5b928401925b828410156107a357833582529284019290840190610f47565b8015158114610b3257600080fd5b600060208284031215610f8057600080fd5b8135610e2181610f60565b60008060008060608587031215610fa157600080fd5b843567ffffffffffffffff811115610fb857600080fd5b610fc487828801610e28565b90989097506020870135966040013595509350505050565b600060208284031215610fee57600080fd5b5051919050565b60006020828403121561100757600080fd5b8151610e2181610f60565b6020808252825182820181905260009190848201906040850190845b818110156110535783516001600160a01b03168352928401929184019160010161102e565b50909695505050505050565b6020808252601c908201527f4d4a3a2061697264726f70204d4e542063616c6c206661696c65642e00000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600182016110cc57634e487b7160e01b600052601160045260246000fd5b5060010190565b6020808252825182820181905260009190848201906040850190845b81811015611053578351835292840192918401916001016110ef56fea2646970667358221220e0d01ce9d106ff1ecd1156fdff68de43ae8fa78728c8d8d724166f7ae677b43464736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _tokens (address[]):
Arg [1] : _merkleRoots (bytes32[]):
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.