More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 370 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 19971683 | 247 days ago | IN | 0 ETH | 0.0007228 | ||||
Claim | 19879286 | 260 days ago | IN | 0 ETH | 0.00035882 | ||||
Claim | 19806218 | 270 days ago | IN | 0 ETH | 0.00044392 | ||||
Claim | 19748633 | 278 days ago | IN | 0 ETH | 0.00043651 | ||||
Claim | 19744428 | 279 days ago | IN | 0 ETH | 0.00039818 | ||||
Claim | 19736115 | 280 days ago | IN | 0 ETH | 0.00053462 | ||||
Claim | 19735304 | 280 days ago | IN | 0 ETH | 0.00059581 | ||||
Claim | 19735141 | 280 days ago | IN | 0 ETH | 0.00078584 | ||||
Claim | 19735139 | 280 days ago | IN | 0 ETH | 0.00060161 | ||||
Claim | 18854012 | 404 days ago | IN | 0 ETH | 0.00236653 | ||||
Claim | 18837972 | 406 days ago | IN | 0 ETH | 0.00195599 | ||||
Claim | 18837943 | 406 days ago | IN | 0 ETH | 0.00283188 | ||||
Claim | 18764982 | 416 days ago | IN | 0 ETH | 0.00338828 | ||||
Claim | 18755752 | 418 days ago | IN | 0 ETH | 0.00175873 | ||||
Claim | 18753336 | 418 days ago | IN | 0 ETH | 0.00179961 | ||||
Claim | 18705920 | 425 days ago | IN | 0 ETH | 0.00098172 | ||||
Claim | 18705920 | 425 days ago | IN | 0 ETH | 0.00301511 | ||||
Claim | 18695756 | 426 days ago | IN | 0 ETH | 0.00285682 | ||||
Claim | 18648705 | 433 days ago | IN | 0 ETH | 0.0019087 | ||||
Claim | 18623632 | 436 days ago | IN | 0 ETH | 0.00410389 | ||||
Claim | 18584091 | 442 days ago | IN | 0 ETH | 0.00292491 | ||||
Claim | 18582700 | 442 days ago | IN | 0 ETH | 0.00249133 | ||||
Claim | 18576632 | 443 days ago | IN | 0 ETH | 0.00263632 | ||||
Claim | 18561048 | 445 days ago | IN | 0 ETH | 0.00218983 | ||||
Claim | 18515992 | 451 days ago | IN | 0 ETH | 0.00308665 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
AngryDogeClaims
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.20; /// @notice Simple single owner authorization mixin. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Owned.sol) abstract contract Owned { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event OwnershipTransferred(address indexed user, address indexed newOwner); /*////////////////////////////////////////////////////////////// OWNERSHIP STORAGE //////////////////////////////////////////////////////////////*/ address public owner; modifier onlyOwner() virtual { require(msg.sender == owner, "UNAUTHORIZED"); _; } /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor(address _owner) { owner = _owner; emit OwnershipTransferred(address(0), _owner); } /*////////////////////////////////////////////////////////////// OWNERSHIP LOGIC //////////////////////////////////////////////////////////////*/ function transferOwnership(address newOwner) public virtual onlyOwner { owner = newOwner; emit OwnershipTransferred(msg.sender, newOwner); } } /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. abstract contract ERC20 { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); /*////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public immutable decimals; /*////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor( string memory _name, string memory _symbol, uint8 _decimals ) { name = _name; symbol = _symbol; decimals = _decimals; INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); } /*////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public virtual returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; balanceOf[from] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } /*////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { address recoveredAddress = ecrecover( keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256( abi.encode( keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ), owner, spender, value, nonces[owner]++, deadline ) ) ) ), v, r, s ); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view virtual returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256("1"), block.chainid, address(this) ) ); } /*////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 amount) internal virtual { totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { balanceOf[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { totalSupply -= amount; } emit Transfer(from, address(0), amount); } } /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol) /// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer. /// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller. library SafeTransferLib { /*////////////////////////////////////////////////////////////// ETH OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferETH(address to, uint256 amount) internal { bool success; /// @solidity memory-safe-assembly assembly { // Transfer the ETH and store if it succeeded or not. success := call(gas(), to, amount, 0, 0, 0, 0) } require(success, "ETH_TRANSFER_FAILED"); } /*////////////////////////////////////////////////////////////// ERC20 OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferFrom( ERC20 token, address from, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "from" argument. mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. mstore(add(freeMemoryPointer, 68), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 100 because the length of our calldata totals up like so: 4 + 32 * 3. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 100, 0, 32) ) } require(success, "TRANSFER_FROM_FAILED"); } function safeTransfer( ERC20 token, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) ) } require(success, "TRANSFER_FAILED"); } function safeApprove( ERC20 token, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) ) } require(success, "APPROVE_FAILED"); } } /// @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. } } } /** * @title ANFD claims * @author kphed (GitHub) / ppmoon69 (Twitter) */ contract AngryDogeClaims is Owned { using SafeTransferLib for ERC20; // ANFD token contract // https://etherscan.io/address/0x4f14cdbd815b79e9624121f564f24685c6b1211b ERC20 public constant ANFD = ERC20(0x4F14cDBd815B79E9624121f564f24685c6B1211b); // ANFD token claim amount (120k tokens per claim - ANFD has 18 decimals) uint256 public constant ANFD_CLAIM_AMOUNT = 120_000e18; // Merkle tree root for verifying claim eligibility bytes32 public immutable merkleRoot; // Mapping of claimer addresses and their claim status mapping(address => bool) public claimed; event Withdraw(address indexed withdrawer, uint256 withdrawAmount); event Claim(address indexed claimer); error EmptyMerkleRoot(); error InvalidOwnerAddress(); error EmptyProof(); error InvalidProof(); error AlreadyClaimed(); constructor(bytes32 _merkleRoot, address _owner) Owned(_owner) { if (_merkleRoot == bytes32(0)) revert EmptyMerkleRoot(); if (_owner == address(0)) revert InvalidOwnerAddress(); merkleRoot = _merkleRoot; } /** * @notice Withdraw ANFD tokens to the owner account. * @dev The `onlyOwner` modifier checks that `msg.sender` == `owner` */ function withdraw() external onlyOwner { // Store balance in a variable which will be emitted in the event uint256 withdrawAmount = ANFD.balanceOf(address(this)); // Transfer the contract's ANFD balance to the owner ANFD.safeTransfer(msg.sender, withdrawAmount); emit Withdraw(msg.sender, withdrawAmount); } /** * @notice Claim ANFD tokens * @param proof bytes32[] Merkle proof */ function claim(bytes32[] calldata proof) external { // Revert if proof is empty if (proof.length == 0) revert EmptyProof(); // Revert if the claimer has already claimed if (claimed[msg.sender]) revert AlreadyClaimed(); // Revert if the proof is invalid or if msg.sender is ineligible if ( // Verify the claimer's proof against the merkle root !MerkleProofLib.verify( proof, merkleRoot, // Compute the leaf using constituent data (i.e. msg.sender/claimer address) // https://github.com/OpenZeppelin/merkle-tree#validating-a-proof-in-solidity keccak256(bytes.concat(keccak256(abi.encode(msg.sender)))) ) ) revert InvalidProof(); // Set claimer's claim status to true to prevent double claiming claimed[msg.sender] = true; // Transfer ANFD tokens to the claimer (last to avoid reentrancy) ANFD.safeTransfer(msg.sender, ANFD_CLAIM_AMOUNT); emit Claim(msg.sender); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyClaimed","type":"error"},{"inputs":[],"name":"EmptyMerkleRoot","type":"error"},{"inputs":[],"name":"EmptyProof","type":"error"},{"inputs":[],"name":"InvalidOwnerAddress","type":"error"},{"inputs":[],"name":"InvalidProof","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"claimer","type":"address"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"withdrawer","type":"address"},{"indexed":false,"internalType":"uint256","name":"withdrawAmount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ANFD","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ANFD_CLAIM_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405234801562000010575f80fd5b5060405162000eb638038062000eb6833981810160405281019062000036919062000220565b80805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f801b82036200010d576040517f85ac2b9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000173576040517fd924e5f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160808181525050505062000265565b5f80fd5b5f819050919050565b6200019b8162000187565b8114620001a6575f80fd5b50565b5f81519050620001b98162000190565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620001ea82620001bf565b9050919050565b620001fc81620001de565b811462000207575f80fd5b50565b5f815190506200021a81620001f1565b92915050565b5f806040838503121562000239576200023862000183565b5b5f6200024885828601620001a9565b92505060206200025b858286016200020a565b9150509250929050565b608051610c31620002855f395f818161017601526104390152610c315ff3fe608060405234801561000f575f80fd5b5060043610610086575f3560e01c8063b391c50811610059578063b391c508146100ee578063c884ef831461010a578063cb1df1301461013a578063f2fde38b1461015857610086565b80632eb4a7ab1461008a5780633ccfd60b146100a85780638da5cb5b146100b2578063a015f4a8146100d0575b5f80fd5b610092610174565b60405161009f919061083a565b60405180910390f35b6100b0610198565b005b6100ba610344565b6040516100c79190610892565b60405180910390f35b6100d8610367565b6040516100e591906108c3565b60405180910390f35b61010860048036038101906101039190610945565b610375565b005b610124600480360381019061011f91906109ba565b6105c4565b60405161013191906109ff565b60405180910390f35b6101426105e1565b60405161014f9190610a73565b60405180910390f35b610172600480360381019061016d91906109ba565b6105f9565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021c90610ae6565b60405180910390fd5b5f734f14cdbd815b79e9624121f564f24685c6b1211b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016102739190610892565b602060405180830381865afa15801561028e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b29190610b2e565b90506102f33382734f14cdbd815b79e9624121f564f24685c6b1211b73ffffffffffffffffffffffffffffffffffffffff166107229092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648260405161033991906108c3565b60405180910390a250565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b691969368974c05b00000081565b5f82829050036103b1576040517f668fd6f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610432576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104aa82827f0000000000000000000000000000000000000000000000000000000000000000336040516020016104699190610892565b6040516020818303038152906040528051906020012060405160200161048f9190610b79565b604051602081830303815290604052805190602001206107cc565b6104e0576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061057d33691969368974c05b000000734f14cdbd815b79e9624121f564f24685c6b1211b73ffffffffffffffffffffffffffffffffffffffff166107229092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f0c7ef932d3b91976772937f18d5ef9b39a9930bef486b576c374f047c4b512dc60405160405180910390a25050565b6001602052805f5260405f205f915054906101000a900460ff1681565b734f14cdbd815b79e9624121f564f24685c6b1211b81565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067d90610ae6565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b5f6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015282602482015260205f6044835f895af13d15601f3d1160015f5114161716915050806107c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bd90610bdd565b60405180910390fd5b50505050565b5f8315610815578360051b8501855b600115610812578035841160051b8481528135602082185260405f20945060208201915082821061080c5750610812565b506107db565b50505b8282149050949350505050565b5f819050919050565b61083481610822565b82525050565b5f60208201905061084d5f83018461082b565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61087c82610853565b9050919050565b61088c81610872565b82525050565b5f6020820190506108a55f830184610883565b92915050565b5f819050919050565b6108bd816108ab565b82525050565b5f6020820190506108d65f8301846108b4565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112610905576109046108e4565b5b8235905067ffffffffffffffff811115610922576109216108e8565b5b60208301915083602082028301111561093e5761093d6108ec565b5b9250929050565b5f806020838503121561095b5761095a6108dc565b5b5f83013567ffffffffffffffff811115610978576109776108e0565b5b610984858286016108f0565b92509250509250929050565b61099981610872565b81146109a3575f80fd5b50565b5f813590506109b481610990565b92915050565b5f602082840312156109cf576109ce6108dc565b5b5f6109dc848285016109a6565b91505092915050565b5f8115159050919050565b6109f9816109e5565b82525050565b5f602082019050610a125f8301846109f0565b92915050565b5f819050919050565b5f610a3b610a36610a3184610853565b610a18565b610853565b9050919050565b5f610a4c82610a21565b9050919050565b5f610a5d82610a42565b9050919050565b610a6d81610a53565b82525050565b5f602082019050610a865f830184610a64565b92915050565b5f82825260208201905092915050565b7f554e415554484f52495a454400000000000000000000000000000000000000005f82015250565b5f610ad0600c83610a8c565b9150610adb82610a9c565b602082019050919050565b5f6020820190508181035f830152610afd81610ac4565b9050919050565b610b0d816108ab565b8114610b17575f80fd5b50565b5f81519050610b2881610b04565b92915050565b5f60208284031215610b4357610b426108dc565b5b5f610b5084828501610b1a565b91505092915050565b5f819050919050565b610b73610b6e82610822565b610b59565b82525050565b5f610b848284610b62565b60208201915081905092915050565b7f5452414e534645525f4641494c454400000000000000000000000000000000005f82015250565b5f610bc7600f83610a8c565b9150610bd282610b93565b602082019050919050565b5f6020820190508181035f830152610bf481610bbb565b905091905056fea2646970667358221220715852704c34ce760a955bfa218ee90f41d501a03e00c2c3df04cbc9daebeb1f64736f6c63430008140033ba3bbb0c37381d1de79f9c7efbb117cda807fbf830e68fc4eacb228421cfa78b0000000000000000000000000aaef7bbc21c627f14cad904e283e199ca2b72cc
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610086575f3560e01c8063b391c50811610059578063b391c508146100ee578063c884ef831461010a578063cb1df1301461013a578063f2fde38b1461015857610086565b80632eb4a7ab1461008a5780633ccfd60b146100a85780638da5cb5b146100b2578063a015f4a8146100d0575b5f80fd5b610092610174565b60405161009f919061083a565b60405180910390f35b6100b0610198565b005b6100ba610344565b6040516100c79190610892565b60405180910390f35b6100d8610367565b6040516100e591906108c3565b60405180910390f35b61010860048036038101906101039190610945565b610375565b005b610124600480360381019061011f91906109ba565b6105c4565b60405161013191906109ff565b60405180910390f35b6101426105e1565b60405161014f9190610a73565b60405180910390f35b610172600480360381019061016d91906109ba565b6105f9565b005b7fba3bbb0c37381d1de79f9c7efbb117cda807fbf830e68fc4eacb228421cfa78b81565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021c90610ae6565b60405180910390fd5b5f734f14cdbd815b79e9624121f564f24685c6b1211b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016102739190610892565b602060405180830381865afa15801561028e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b29190610b2e565b90506102f33382734f14cdbd815b79e9624121f564f24685c6b1211b73ffffffffffffffffffffffffffffffffffffffff166107229092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648260405161033991906108c3565b60405180910390a250565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b691969368974c05b00000081565b5f82829050036103b1576040517f668fd6f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610432576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104aa82827fba3bbb0c37381d1de79f9c7efbb117cda807fbf830e68fc4eacb228421cfa78b336040516020016104699190610892565b6040516020818303038152906040528051906020012060405160200161048f9190610b79565b604051602081830303815290604052805190602001206107cc565b6104e0576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061057d33691969368974c05b000000734f14cdbd815b79e9624121f564f24685c6b1211b73ffffffffffffffffffffffffffffffffffffffff166107229092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f0c7ef932d3b91976772937f18d5ef9b39a9930bef486b576c374f047c4b512dc60405160405180910390a25050565b6001602052805f5260405f205f915054906101000a900460ff1681565b734f14cdbd815b79e9624121f564f24685c6b1211b81565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067d90610ae6565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b5f6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015282602482015260205f6044835f895af13d15601f3d1160015f5114161716915050806107c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bd90610bdd565b60405180910390fd5b50505050565b5f8315610815578360051b8501855b600115610812578035841160051b8481528135602082185260405f20945060208201915082821061080c5750610812565b506107db565b50505b8282149050949350505050565b5f819050919050565b61083481610822565b82525050565b5f60208201905061084d5f83018461082b565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61087c82610853565b9050919050565b61088c81610872565b82525050565b5f6020820190506108a55f830184610883565b92915050565b5f819050919050565b6108bd816108ab565b82525050565b5f6020820190506108d65f8301846108b4565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112610905576109046108e4565b5b8235905067ffffffffffffffff811115610922576109216108e8565b5b60208301915083602082028301111561093e5761093d6108ec565b5b9250929050565b5f806020838503121561095b5761095a6108dc565b5b5f83013567ffffffffffffffff811115610978576109776108e0565b5b610984858286016108f0565b92509250509250929050565b61099981610872565b81146109a3575f80fd5b50565b5f813590506109b481610990565b92915050565b5f602082840312156109cf576109ce6108dc565b5b5f6109dc848285016109a6565b91505092915050565b5f8115159050919050565b6109f9816109e5565b82525050565b5f602082019050610a125f8301846109f0565b92915050565b5f819050919050565b5f610a3b610a36610a3184610853565b610a18565b610853565b9050919050565b5f610a4c82610a21565b9050919050565b5f610a5d82610a42565b9050919050565b610a6d81610a53565b82525050565b5f602082019050610a865f830184610a64565b92915050565b5f82825260208201905092915050565b7f554e415554484f52495a454400000000000000000000000000000000000000005f82015250565b5f610ad0600c83610a8c565b9150610adb82610a9c565b602082019050919050565b5f6020820190508181035f830152610afd81610ac4565b9050919050565b610b0d816108ab565b8114610b17575f80fd5b50565b5f81519050610b2881610b04565b92915050565b5f60208284031215610b4357610b426108dc565b5b5f610b5084828501610b1a565b91505092915050565b5f819050919050565b610b73610b6e82610822565b610b59565b82525050565b5f610b848284610b62565b60208201915081905092915050565b7f5452414e534645525f4641494c454400000000000000000000000000000000005f82015250565b5f610bc7600f83610a8c565b9150610bd282610b93565b602082019050919050565b5f6020820190508181035f830152610bf481610bbb565b905091905056fea2646970667358221220715852704c34ce760a955bfa218ee90f41d501a03e00c2c3df04cbc9daebeb1f64736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
ba3bbb0c37381d1de79f9c7efbb117cda807fbf830e68fc4eacb228421cfa78b0000000000000000000000000aaef7bbc21c627f14cad904e283e199ca2b72cc
-----Decoded View---------------
Arg [0] : _merkleRoot (bytes32): 0xba3bbb0c37381d1de79f9c7efbb117cda807fbf830e68fc4eacb228421cfa78b
Arg [1] : _owner (address): 0x0aAeF7BbC21c627f14caD904E283e199cA2b72cC
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : ba3bbb0c37381d1de79f9c7efbb117cda807fbf830e68fc4eacb228421cfa78b
Arg [1] : 0000000000000000000000000aaef7bbc21c627f14cad904e283e199ca2b72cc
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.