Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 207 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
___Withdraw Ethe... | 17668213 | 385 days ago | IN | 0 ETH | 0.00056579 | ||||
Merkle Claim Cit... | 16338172 | 572 days ago | IN | 0 ETH | 0.00271382 | ||||
Merkle Claim Cit... | 16334068 | 572 days ago | IN | 0 ETH | 0.00354927 | ||||
Merkle Claim Cit... | 16238820 | 586 days ago | IN | 0 ETH | 0.00476694 | ||||
Merkle Claim Cit... | 16228805 | 587 days ago | IN | 0 ETH | 0.00416302 | ||||
Merkle Claim Cit... | 16201230 | 591 days ago | IN | 0 ETH | 0.00375244 | ||||
Merkle Claim | 16201226 | 591 days ago | IN | 0.042 ETH | 0.01268386 | ||||
Merkle Claim | 16200907 | 591 days ago | IN | 0.0126 ETH | 0.00490112 | ||||
Merkle Claim | 16200817 | 591 days ago | IN | 0.0042 ETH | 0.00217839 | ||||
Merkle Claim | 16199605 | 591 days ago | IN | 0.0084 ETH | 0.00423336 | ||||
Merkle Claim | 16199253 | 591 days ago | IN | 0.0042 ETH | 0.00275902 | ||||
Merkle Claim | 16198711 | 591 days ago | IN | 0.0042 ETH | 0.00436935 | ||||
Merkle Claim | 16198498 | 591 days ago | IN | 0.042 ETH | 0.02070744 | ||||
Merkle Claim | 16198284 | 591 days ago | IN | 0.0168 ETH | 0.00689974 | ||||
Merkle Claim | 16196793 | 592 days ago | IN | 0.0504 ETH | 0.01688134 | ||||
Merkle Claim | 16196091 | 592 days ago | IN | 0.042 ETH | 0.01409378 | ||||
Merkle Claim | 16195986 | 592 days ago | IN | 0.0294 ETH | 0.00878917 | ||||
Merkle Claim | 16195842 | 592 days ago | IN | 0.0126 ETH | 0.00426576 | ||||
Merkle Claim | 16193761 | 592 days ago | IN | 0.0378 ETH | 0.01122074 | ||||
Merkle Claim | 16193193 | 592 days ago | IN | 0.0042 ETH | 0.00233235 | ||||
Merkle Claim | 16193030 | 592 days ago | IN | 0.0042 ETH | 0.00303925 | ||||
Merkle Claim | 16193014 | 592 days ago | IN | 0.0084 ETH | 0.00895044 | ||||
Merkle Claim | 16192984 | 592 days ago | IN | 0.0042 ETH | 0.00250985 | ||||
Merkle Claim | 16192914 | 592 days ago | IN | 0.0042 ETH | 0.0025125 | ||||
Merkle Claim | 16192876 | 592 days ago | IN | 0.0042 ETH | 0.00313943 |
Loading...
Loading
Contract Name:
Claimer
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 10000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ /** * @dev: @brougkr */ pragma solidity 0.8.17; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import {MerkleProof} from "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol"; import {ReentrancyGuard} from "@openzeppelin/contracts/security/ReentrancyGuard.sol"; contract Claimer is Ownable, ReentrancyGuard { /*-------------------*/ /* STRUCT */ /*-------------------*/ struct User { bool[] RegularClaim; bool[] CitizenClaim; } /*-------------------*/ /* STATE VARIABLES */ /*-------------------*/ uint private constant _ClaimCost = 0.0042 ether; address private constant _BRT_BURN = 0xcff43A597911a9457071d89d2b2AC3D5b1862b86; address private constant _GTMX = 0xE0D1Fa3fBd72db2eD179F80C0459B7dA93Fe4FE8; address private constant _CITIZENS = 0xbDdE08BD57e5C9fD563eE7aC61618CB2ECdc0ce0; address private constant _MOMENT = 0x0A1BBD57033F57E7B6743621b79fCB9Eb2CE3676; address private constant _BRT_MULTISIG = 0x93F01412C062C99C6ef105b1BAd93800B5635479; bytes32 public _RootCaminos = 0x78e8deb95256b6541d8ed458a6b552586c8e0a1285de694de8f66b95f70bfc35; bytes32 public _RootCitizens = 0x597ce7032f97f6a6c73163eceff668e14dd5b046801cf114bddfc136105051b9; /*-------------------*/ /* MAPPINGS */ /*-------------------*/ mapping(uint=>bool) public ClaimedCaminos; mapping(uint=>bool) public ClaimedCitizens; /*-------------------*/ /* EVENTS */ /*-------------------*/ event TokensClaimed(address Redeemer, uint[] TokenIDs); event CitizensClaimed(address Redeemer, uint[] CitizenTokenIDs, uint[] GTMXTokenIDs); /*-------------------*/ /* CONSTRUCTOR */ /*-------------------*/ constructor() { _transferOwnership(0xe06F5FAE754e81Bc050215fF89B03d9e9FF20700); } // `operator.brightmoments.eth` /*----------------------*/ /* EXTERNAL FUNCTIONS */ /*----------------------*/ /** * @dev Claims TokenID(s) With Merkle */ function MerkleClaim ( uint[] calldata TokenIDs, bytes32[][] calldata Proof ) external payable nonReentrant { require(Proof.length > 0 && TokenIDs.length > 0, "Claimer: Invalid Input"); require(Proof.length == TokenIDs.length, "Claimer: Arrays Must Match"); require(msg.value == _ClaimCost * TokenIDs.length, "Claimer: Invalid Message Value Sent"); bool[] memory Eligibles = ReadEligibilityMerkleCaminos(msg.sender, TokenIDs, Proof); for(uint Index; Index < TokenIDs.length; Index++) { require(Eligibles[Index], "Claimer: Invalid Merkle"); require(!ClaimedCaminos[TokenIDs[Index]], "Claimer: Caminos Already Claimed"); ClaimedCaminos[TokenIDs[Index]] = true; IERC721(_MOMENT).transferFrom(_BRT_MULTISIG, msg.sender, TokenIDs[Index]); } emit TokensClaimed(msg.sender, TokenIDs); } /** * @dev Claims TokenID(s) With Merkle */ function MerkleClaimCitizens ( uint[] calldata GTMXTokenIDs, uint[] calldata CitizenTokenIDs, bytes32[][] calldata Proof ) external nonReentrant { require(Proof.length > 0 && GTMXTokenIDs.length > 0 && CitizenTokenIDs.length > 0, "Claimer: Invalid Input"); require(GTMXTokenIDs.length == CitizenTokenIDs.length && CitizenTokenIDs.length == Proof.length, "Claimer: Arrays Must Match"); bool[] memory Eligibles = ReadEligibilityMerkleCitizens(GTMXTokenIDs, CitizenTokenIDs, Proof); for(uint Index; Index < GTMXTokenIDs.length; Index++) { require(IERC721(_GTMX).ownerOf(GTMXTokenIDs[Index]) == msg.sender, "User Does Not Hold GTMX"); IERC721(_GTMX).transferFrom(msg.sender, _BRT_BURN, GTMXTokenIDs[Index]); require(Eligibles[Index], "Claimer: Invalid Merkle"); require(!ClaimedCitizens[CitizenTokenIDs[Index]], "Claimer: Citizen Already Claimed"); ClaimedCitizens[CitizenTokenIDs[Index]] = true; IERC721(_CITIZENS).transferFrom(_BRT_MULTISIG, msg.sender, CitizenTokenIDs[Index]); } emit CitizensClaimed(msg.sender, CitizenTokenIDs, GTMXTokenIDs); } /*-------------------*/ /* OWNER FUNCTIONS */ /*-------------------*/ /** * @dev Changes Citizen Root */ function __ChangeCitizenRoot(bytes32 NewRoot) external onlyOwner { _RootCitizens = NewRoot; } /** * @dev Changes Caminos Root */ function __ChangeCaminosRoot(bytes32 NewRoot) external onlyOwner { _RootCaminos = NewRoot; } /** * @dev Withdraws All Ether From The Contract */ function ___WithdrawEther() external onlyOwner { payable(msg.sender).transfer(address(this).balance); } /** * @dev Withdraws Ether From Contract To Address With An Amount */ function ___WithdrawEtherToAddress(address payable Recipient, uint Amount) external onlyOwner { require(Amount > 0 && Amount <= address(this).balance, "Claimer: Invalid Amount"); (bool Success, ) = Recipient.call{value: Amount}(""); require(Success, "Claimer: Unable to Withdraw, Recipient May Have Reverted"); } /*------------------*/ /* VIEW FUNCTIONS */ /*------------------*/ /** * @dev Returns A Wallet's Merkle Eligibility */ function ReadEligibilityMerkleCaminos ( address Wallet, uint[] calldata TokenIDs, bytes32[][] calldata Proof ) public view returns (bool[] memory) { bool[] memory Eligibles = new bool[](TokenIDs.length); for(uint Index; Index < TokenIDs.length; Index++) { bytes32 Leaf = keccak256(abi.encodePacked(Wallet, TokenIDs[Index])); if(!ClaimedCaminos[TokenIDs[Index]]) { Eligibles[Index] = MerkleProof.verify(Proof[Index], _RootCaminos, Leaf); } } return Eligibles; } /** * @dev Returns A Wallet's Merkle Eligibility */ function ReadEligibilityMerkleCitizens ( uint[] calldata GTMXTokenIDs, uint[] calldata CitizenTokenIDs, bytes32[][] calldata Proof ) public view returns (bool[] memory) { bool[] memory Eligibles = new bool[](GTMXTokenIDs.length); for(uint Index; Index < GTMXTokenIDs.length; Index++) { bytes32 Leaf = keccak256(abi.encodePacked(GTMXTokenIDs[Index], CitizenTokenIDs[Index])); if(!ClaimedCitizens[CitizenTokenIDs[Index]]) { Eligibles[Index] = MerkleProof.verify(Proof[Index], _RootCitizens, Leaf); } } return Eligibles; } /** * @dev Returns Merkle Eligibilities */ function ReadEligibility ( address Wallet, uint[] calldata GTMXTokenIDs, uint[] calldata CitizenTokenIDs, uint[] calldata CaminosTokenIDs, bytes32[][] calldata CitizenProof, bytes32[][] calldata CaminosProof ) public view returns (User memory) { return User ( ReadEligibilityMerkleCaminos(Wallet, CaminosTokenIDs, CaminosProof), ReadEligibilityMerkleCitizens(GTMXTokenIDs, CitizenTokenIDs, CitizenProof) ); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @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 { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _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 { require(newOwner != address(0), "Ownable: new owner is the zero address"); _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 (last updated v4.8.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with 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 // OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Tree proofs. * * The tree and the proofs can be generated using our * https://github.com/OpenZeppelin/merkle-tree[JavaScript library]. * You will find a quickstart guide in the readme. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. * OpenZeppelin's JavaScript library generates merkle trees that are safe * against this attack out of the box. */ 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) { return processProof(proof, leaf) == root; } /** * @dev Calldata version of {verify} * * _Available since v4.7._ */ function verifyCalldata( bytes32[] calldata proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProofCalldata(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Calldata version of {processProof} * * _Available since v4.7._ */ function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. * * _Available since v4.7._ */ function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } /** * @dev Calldata version of {multiProofVerify} * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. * * _Available since v4.7._ */ function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false * respectively. * * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer). * * _Available since v4.7._ */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Calldata version of {processMultiProof}. * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. * * _Available since v4.7._ */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { /// @solidity memory-safe-assembly assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": true, "runs": 10000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Redeemer","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"CitizenTokenIDs","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"GTMXTokenIDs","type":"uint256[]"}],"name":"CitizensClaimed","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":"Redeemer","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"TokenIDs","type":"uint256[]"}],"name":"TokensClaimed","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ClaimedCaminos","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ClaimedCitizens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"TokenIDs","type":"uint256[]"},{"internalType":"bytes32[][]","name":"Proof","type":"bytes32[][]"}],"name":"MerkleClaim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"GTMXTokenIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"CitizenTokenIDs","type":"uint256[]"},{"internalType":"bytes32[][]","name":"Proof","type":"bytes32[][]"}],"name":"MerkleClaimCitizens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"Wallet","type":"address"},{"internalType":"uint256[]","name":"GTMXTokenIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"CitizenTokenIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"CaminosTokenIDs","type":"uint256[]"},{"internalType":"bytes32[][]","name":"CitizenProof","type":"bytes32[][]"},{"internalType":"bytes32[][]","name":"CaminosProof","type":"bytes32[][]"}],"name":"ReadEligibility","outputs":[{"components":[{"internalType":"bool[]","name":"RegularClaim","type":"bool[]"},{"internalType":"bool[]","name":"CitizenClaim","type":"bool[]"}],"internalType":"struct Claimer.User","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"Wallet","type":"address"},{"internalType":"uint256[]","name":"TokenIDs","type":"uint256[]"},{"internalType":"bytes32[][]","name":"Proof","type":"bytes32[][]"}],"name":"ReadEligibilityMerkleCaminos","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"GTMXTokenIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"CitizenTokenIDs","type":"uint256[]"},{"internalType":"bytes32[][]","name":"Proof","type":"bytes32[][]"}],"name":"ReadEligibilityMerkleCitizens","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_RootCaminos","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_RootCitizens","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"NewRoot","type":"bytes32"}],"name":"__ChangeCaminosRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"NewRoot","type":"bytes32"}],"name":"__ChangeCitizenRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"___WithdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"Recipient","type":"address"},{"internalType":"uint256","name":"Amount","type":"uint256"}],"name":"___WithdrawEtherToAddress","outputs":[],"stateMutability":"nonpayable","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":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040527f78e8deb95256b6541d8ed458a6b552586c8e0a1285de694de8f66b95f70bfc356002557f597ce7032f97f6a6c73163eceff668e14dd5b046801cf114bddfc136105051b960035534801561005857600080fd5b5061006233610088565b6001805561008373e06f5fae754e81bc050215ff89b03d9e9ff20700610088565b6100d8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611a81806100e76000396000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063e39f8c8d11610059578063e39f8c8d146102c6578063e9645003146102e6578063f2fde38b14610306578063fb1139691461032657600080fd5b80638da5cb5b14610221578063943f601314610256578063a038152c14610276578063dbdcaf7e146102a657600080fd5b80636cd33819116100c65780636cd3381914610189578063715018a6146101c9578063823f3829146101de5780638c682c83146101f457600080fd5b806309beb0c0146100f85780630c1a7a331461010f57806317d0ccea1461012f5780631bf6359714610165575b600080fd5b34801561010457600080fd5b5061010d610339565b005b34801561011b57600080fd5b5061010d61012a366004611419565b610370565b34801561013b57600080fd5b5061014f61014a3660046114e5565b6108a4565b60405161015c9190611629565b60405180910390f35b34801561017157600080fd5b5061017b60025481565b60405190815260200161015c565b34801561019557600080fd5b506101b96101a4366004611689565b60046020526000908152604090205460ff1681565b604051901515815260200161015c565b3480156101d557600080fd5b5061010d6108f5565b3480156101ea57600080fd5b5061017b60035481565b34801561020057600080fd5b5061021461020f3660046116a2565b610909565b60405161015c9190611725565b34801561022d57600080fd5b5060005460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161015c565b34801561026257600080fd5b50610214610271366004611419565b610aad565b34801561028257600080fd5b506101b9610291366004611689565b60056020526000908152604090205460ff1681565b3480156102b257600080fd5b5061010d6102c1366004611689565b610c43565b3480156102d257600080fd5b5061010d6102e1366004611689565b610c50565b3480156102f257600080fd5b5061010d61030136600461176b565b610c5d565b34801561031257600080fd5b5061010d610321366004611797565b610d9c565b61010d6103343660046117b4565b610e36565b610341611201565b60405133904780156108fc02916000818181858888f1935050505015801561036d573d6000803e3d6000fd5b50565b610378611268565b801580159061038657508415155b801561039157508215155b6103e25760405162461bcd60e51b815260206004820152601660248201527f436c61696d65723a20496e76616c696420496e7075740000000000000000000060448201526064015b60405180910390fd5b84831480156103f057508281145b61043c5760405162461bcd60e51b815260206004820152601a60248201527f436c61696d65723a20417272617973204d757374204d6174636800000000000060448201526064016103d9565b600061044c878787878787610aad565b905060005b86811015610852573373e0d1fa3fbd72db2ed179f80c0459b7da93fe4fe8636352211e8a8a8581811061048657610486611820565b905060200201356040518263ffffffff1660e01b81526004016104ab91815260200190565b602060405180830381865afa1580156104c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ec919061184f565b73ffffffffffffffffffffffffffffffffffffffff161461054f5760405162461bcd60e51b815260206004820152601760248201527f5573657220446f6573204e6f7420486f6c642047544d5800000000000000000060448201526064016103d9565b73e0d1fa3fbd72db2ed179f80c0459b7da93fe4fe86323b872dd3373cff43a597911a9457071d89d2b2ac3d5b1862b868b8b8681811061059157610591611820565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561060d57600080fd5b505af1158015610621573d6000803e3d6000fd5b5050505081818151811061063757610637611820565b602002602001015161068b5760405162461bcd60e51b815260206004820152601760248201527f436c61696d65723a20496e76616c6964204d65726b6c6500000000000000000060448201526064016103d9565b600560008787848181106106a1576106a1611820565b602090810292909201358352508101919091526040016000205460ff161561070b5760405162461bcd60e51b815260206004820181905260248201527f436c61696d65723a20436974697a656e20416c726561647920436c61696d656460448201526064016103d9565b60016005600088888581811061072357610723611820565b6020908102929092013583525081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905573bdde08bd57e5c9fd563ee7ac61618cb2ecdc0ce06323b872dd7393f01412c062c99c6ef105b1bad93800b5635479338989868181106107ab576107ab611820565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561082757600080fd5b505af115801561083b573d6000803e3d6000fd5b50505050808061084a9061189b565b915050610451565b507f23eeb92e3e6cd0bfe76c9a2dc003f80f26da3816bbd54e01363a3cdef23cb27e3386868a8a60405161088a95949392919061191e565b60405180910390a15061089c60018055565b505050505050565b604080518082019091526060808252602082015260405180604001604052806108d08e8a8a8888610909565b81526020016108e38d8d8d8d8b8b610aad565b90529c9b505050505050505050505050565b6108fd611201565b61090760006112c1565b565b606060008467ffffffffffffffff8111156109265761092661196d565b60405190808252806020026020018201604052801561094f578160200160208202803683370190505b50905060005b85811015610aa25760008888888481811061097257610972611820565b905060200201356040516020016109ba92919060609290921b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168252601482015260340190565b604051602081830303815290604052805190602001209050600460008989858181106109e8576109e8611820565b602090810292909201358352508101919091526040016000205460ff16610a8f57610a6c868684818110610a1e57610a1e611820565b9050602002810190610a30919061199c565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506002549150849050611336565b838381518110610a7e57610a7e611820565b911515602092830291909101909101525b5080610a9a8161189b565b915050610955565b509695505050505050565b606060008667ffffffffffffffff811115610aca57610aca61196d565b604051908082528060200260200182016040528015610af3578160200160208202803683370190505b50905060005b87811015610c37576000898983818110610b1557610b15611820565b90506020020135888884818110610b2e57610b2e611820565b90506020020135604051602001610b4f929190918252602082015260400190565b60405160208183030381529060405280519060200120905060056000898985818110610b7d57610b7d611820565b602090810292909201358352508101919091526040016000205460ff16610c2457610c01868684818110610bb357610bb3611820565b9050602002810190610bc5919061199c565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506003549150849050611336565b838381518110610c1357610c13611820565b911515602092830291909101909101525b5080610c2f8161189b565b915050610af9565b50979650505050505050565b610c4b611201565b600255565b610c58611201565b600355565b610c65611201565b600081118015610c755750478111155b610cc15760405162461bcd60e51b815260206004820152601760248201527f436c61696d65723a20496e76616c696420416d6f756e7400000000000000000060448201526064016103d9565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610d1b576040519150601f19603f3d011682016040523d82523d6000602084013e610d20565b606091505b5050905080610d975760405162461bcd60e51b815260206004820152603860248201527f436c61696d65723a20556e61626c6520746f2057697468647261772c2052656360448201527f697069656e74204d61792048617665205265766572746564000000000000000060648201526084016103d9565b505050565b610da4611201565b73ffffffffffffffffffffffffffffffffffffffff8116610e2d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103d9565b61036d816112c1565b610e3e611268565b8015801590610e4c57508215155b610e985760405162461bcd60e51b815260206004820152601660248201527f436c61696d65723a20496e76616c696420496e7075740000000000000000000060448201526064016103d9565b808314610ee75760405162461bcd60e51b815260206004820152601a60248201527f436c61696d65723a20417272617973204d757374204d6174636800000000000060448201526064016103d9565b610ef883660eebe0b40e8000611a04565b3414610f6c5760405162461bcd60e51b815260206004820152602360248201527f436c61696d65723a20496e76616c6964204d6573736167652056616c7565205360448201527f656e74000000000000000000000000000000000000000000000000000000000060648201526084016103d9565b6000610f7b3386868686610909565b905060005b848110156111b557818181518110610f9a57610f9a611820565b6020026020010151610fee5760405162461bcd60e51b815260206004820152601760248201527f436c61696d65723a20496e76616c6964204d65726b6c6500000000000000000060448201526064016103d9565b6004600087878481811061100457611004611820565b602090810292909201358352508101919091526040016000205460ff161561106e5760405162461bcd60e51b815260206004820181905260248201527f436c61696d65723a2043616d696e6f7320416c726561647920436c61696d656460448201526064016103d9565b60016004600088888581811061108657611086611820565b6020908102929092013583525081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055730a1bbd57033f57e7b6743621b79fcb9eb2ce36766323b872dd7393f01412c062c99c6ef105b1bad93800b56354793389898681811061110e5761110e611820565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561118a57600080fd5b505af115801561119e573d6000803e3d6000fd5b5050505080806111ad9061189b565b915050610f80565b507f2ed48368de79b173beedca1e8032871f3f17b79b90846860673ab50f234273e13386866040516111e993929190611a1b565b60405180910390a1506111fb60018055565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103d9565b6002600154036112ba5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103d9565b6002600155565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082611343858461134c565b14949350505050565b600081815b84518110156113915761137d8286838151811061137057611370611820565b602002602001015161139b565b9150806113898161189b565b915050611351565b5090505b92915050565b60008183106113b75760008281526020849052604090206113c6565b60008381526020839052604090205b9392505050565b60008083601f8401126113df57600080fd5b50813567ffffffffffffffff8111156113f757600080fd5b6020830191508360208260051b850101111561141257600080fd5b9250929050565b6000806000806000806060878903121561143257600080fd5b863567ffffffffffffffff8082111561144a57600080fd5b6114568a838b016113cd565b9098509650602089013591508082111561146f57600080fd5b61147b8a838b016113cd565b9096509450604089013591508082111561149457600080fd5b506114a189828a016113cd565b979a9699509497509295939492505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461036d57600080fd5b80356114e0816114b3565b919050565b600080600080600080600080600080600060c08c8e03121561150657600080fd5b61150f8c6114d5565b9a5067ffffffffffffffff8060208e0135111561152b57600080fd5b61153b8e60208f01358f016113cd565b909b50995060408d013581101561155157600080fd5b6115618e60408f01358f016113cd565b909950975060608d013581101561157757600080fd5b6115878e60608f01358f016113cd565b909750955060808d013581101561159d57600080fd5b6115ad8e60808f01358f016113cd565b909550935060a08d01358110156115c357600080fd5b506115d48d60a08e01358e016113cd565b81935080925050509295989b509295989b9093969950565b600081518084526020808501945080840160005b8381101561161e578151151587529582019590820190600101611600565b509495945050505050565b60208152600082516040602084015261164560608401826115ec565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084830301604085015261168082826115ec565b95945050505050565b60006020828403121561169b57600080fd5b5035919050565b6000806000806000606086880312156116ba57600080fd5b85356116c5816114b3565b9450602086013567ffffffffffffffff808211156116e257600080fd5b6116ee89838a016113cd565b9096509450604088013591508082111561170757600080fd5b50611714888289016113cd565b969995985093965092949392505050565b6020808252825182820181905260009190848201906040850190845b8181101561175f578351151583529284019291840191600101611741565b50909695505050505050565b6000806040838503121561177e57600080fd5b8235611789816114b3565b946020939093013593505050565b6000602082840312156117a957600080fd5b81356113c6816114b3565b600080600080604085870312156117ca57600080fd5b843567ffffffffffffffff808211156117e257600080fd5b6117ee888389016113cd565b9096509450602087013591508082111561180757600080fd5b50611814878288016113cd565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561186157600080fd5b81516113c6816114b3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118cc576118cc61186c565b5060010190565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561190557600080fd5b8260051b80836020870137939093016020019392505050565b73ffffffffffffffffffffffffffffffffffffffff8616815260606020820152600061194e6060830186886118d3565b82810360408401526119618185876118d3565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126119d157600080fd5b83018035915067ffffffffffffffff8211156119ec57600080fd5b6020019150600581901b360382131561141257600080fd5b80820281158282048414176113955761139561186c565b73ffffffffffffffffffffffffffffffffffffffff841681526040602082015260006116806040830184866118d356fea264697066735822122032afedd2079771a33c64fd2097241d1b04295b42e126f574f12746e88919989964736f6c63430008110033
Deployed Bytecode
0x6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063e39f8c8d11610059578063e39f8c8d146102c6578063e9645003146102e6578063f2fde38b14610306578063fb1139691461032657600080fd5b80638da5cb5b14610221578063943f601314610256578063a038152c14610276578063dbdcaf7e146102a657600080fd5b80636cd33819116100c65780636cd3381914610189578063715018a6146101c9578063823f3829146101de5780638c682c83146101f457600080fd5b806309beb0c0146100f85780630c1a7a331461010f57806317d0ccea1461012f5780631bf6359714610165575b600080fd5b34801561010457600080fd5b5061010d610339565b005b34801561011b57600080fd5b5061010d61012a366004611419565b610370565b34801561013b57600080fd5b5061014f61014a3660046114e5565b6108a4565b60405161015c9190611629565b60405180910390f35b34801561017157600080fd5b5061017b60025481565b60405190815260200161015c565b34801561019557600080fd5b506101b96101a4366004611689565b60046020526000908152604090205460ff1681565b604051901515815260200161015c565b3480156101d557600080fd5b5061010d6108f5565b3480156101ea57600080fd5b5061017b60035481565b34801561020057600080fd5b5061021461020f3660046116a2565b610909565b60405161015c9190611725565b34801561022d57600080fd5b5060005460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161015c565b34801561026257600080fd5b50610214610271366004611419565b610aad565b34801561028257600080fd5b506101b9610291366004611689565b60056020526000908152604090205460ff1681565b3480156102b257600080fd5b5061010d6102c1366004611689565b610c43565b3480156102d257600080fd5b5061010d6102e1366004611689565b610c50565b3480156102f257600080fd5b5061010d61030136600461176b565b610c5d565b34801561031257600080fd5b5061010d610321366004611797565b610d9c565b61010d6103343660046117b4565b610e36565b610341611201565b60405133904780156108fc02916000818181858888f1935050505015801561036d573d6000803e3d6000fd5b50565b610378611268565b801580159061038657508415155b801561039157508215155b6103e25760405162461bcd60e51b815260206004820152601660248201527f436c61696d65723a20496e76616c696420496e7075740000000000000000000060448201526064015b60405180910390fd5b84831480156103f057508281145b61043c5760405162461bcd60e51b815260206004820152601a60248201527f436c61696d65723a20417272617973204d757374204d6174636800000000000060448201526064016103d9565b600061044c878787878787610aad565b905060005b86811015610852573373e0d1fa3fbd72db2ed179f80c0459b7da93fe4fe8636352211e8a8a8581811061048657610486611820565b905060200201356040518263ffffffff1660e01b81526004016104ab91815260200190565b602060405180830381865afa1580156104c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ec919061184f565b73ffffffffffffffffffffffffffffffffffffffff161461054f5760405162461bcd60e51b815260206004820152601760248201527f5573657220446f6573204e6f7420486f6c642047544d5800000000000000000060448201526064016103d9565b73e0d1fa3fbd72db2ed179f80c0459b7da93fe4fe86323b872dd3373cff43a597911a9457071d89d2b2ac3d5b1862b868b8b8681811061059157610591611820565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561060d57600080fd5b505af1158015610621573d6000803e3d6000fd5b5050505081818151811061063757610637611820565b602002602001015161068b5760405162461bcd60e51b815260206004820152601760248201527f436c61696d65723a20496e76616c6964204d65726b6c6500000000000000000060448201526064016103d9565b600560008787848181106106a1576106a1611820565b602090810292909201358352508101919091526040016000205460ff161561070b5760405162461bcd60e51b815260206004820181905260248201527f436c61696d65723a20436974697a656e20416c726561647920436c61696d656460448201526064016103d9565b60016005600088888581811061072357610723611820565b6020908102929092013583525081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905573bdde08bd57e5c9fd563ee7ac61618cb2ecdc0ce06323b872dd7393f01412c062c99c6ef105b1bad93800b5635479338989868181106107ab576107ab611820565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561082757600080fd5b505af115801561083b573d6000803e3d6000fd5b50505050808061084a9061189b565b915050610451565b507f23eeb92e3e6cd0bfe76c9a2dc003f80f26da3816bbd54e01363a3cdef23cb27e3386868a8a60405161088a95949392919061191e565b60405180910390a15061089c60018055565b505050505050565b604080518082019091526060808252602082015260405180604001604052806108d08e8a8a8888610909565b81526020016108e38d8d8d8d8b8b610aad565b90529c9b505050505050505050505050565b6108fd611201565b61090760006112c1565b565b606060008467ffffffffffffffff8111156109265761092661196d565b60405190808252806020026020018201604052801561094f578160200160208202803683370190505b50905060005b85811015610aa25760008888888481811061097257610972611820565b905060200201356040516020016109ba92919060609290921b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168252601482015260340190565b604051602081830303815290604052805190602001209050600460008989858181106109e8576109e8611820565b602090810292909201358352508101919091526040016000205460ff16610a8f57610a6c868684818110610a1e57610a1e611820565b9050602002810190610a30919061199c565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506002549150849050611336565b838381518110610a7e57610a7e611820565b911515602092830291909101909101525b5080610a9a8161189b565b915050610955565b509695505050505050565b606060008667ffffffffffffffff811115610aca57610aca61196d565b604051908082528060200260200182016040528015610af3578160200160208202803683370190505b50905060005b87811015610c37576000898983818110610b1557610b15611820565b90506020020135888884818110610b2e57610b2e611820565b90506020020135604051602001610b4f929190918252602082015260400190565b60405160208183030381529060405280519060200120905060056000898985818110610b7d57610b7d611820565b602090810292909201358352508101919091526040016000205460ff16610c2457610c01868684818110610bb357610bb3611820565b9050602002810190610bc5919061199c565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506003549150849050611336565b838381518110610c1357610c13611820565b911515602092830291909101909101525b5080610c2f8161189b565b915050610af9565b50979650505050505050565b610c4b611201565b600255565b610c58611201565b600355565b610c65611201565b600081118015610c755750478111155b610cc15760405162461bcd60e51b815260206004820152601760248201527f436c61696d65723a20496e76616c696420416d6f756e7400000000000000000060448201526064016103d9565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610d1b576040519150601f19603f3d011682016040523d82523d6000602084013e610d20565b606091505b5050905080610d975760405162461bcd60e51b815260206004820152603860248201527f436c61696d65723a20556e61626c6520746f2057697468647261772c2052656360448201527f697069656e74204d61792048617665205265766572746564000000000000000060648201526084016103d9565b505050565b610da4611201565b73ffffffffffffffffffffffffffffffffffffffff8116610e2d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103d9565b61036d816112c1565b610e3e611268565b8015801590610e4c57508215155b610e985760405162461bcd60e51b815260206004820152601660248201527f436c61696d65723a20496e76616c696420496e7075740000000000000000000060448201526064016103d9565b808314610ee75760405162461bcd60e51b815260206004820152601a60248201527f436c61696d65723a20417272617973204d757374204d6174636800000000000060448201526064016103d9565b610ef883660eebe0b40e8000611a04565b3414610f6c5760405162461bcd60e51b815260206004820152602360248201527f436c61696d65723a20496e76616c6964204d6573736167652056616c7565205360448201527f656e74000000000000000000000000000000000000000000000000000000000060648201526084016103d9565b6000610f7b3386868686610909565b905060005b848110156111b557818181518110610f9a57610f9a611820565b6020026020010151610fee5760405162461bcd60e51b815260206004820152601760248201527f436c61696d65723a20496e76616c6964204d65726b6c6500000000000000000060448201526064016103d9565b6004600087878481811061100457611004611820565b602090810292909201358352508101919091526040016000205460ff161561106e5760405162461bcd60e51b815260206004820181905260248201527f436c61696d65723a2043616d696e6f7320416c726561647920436c61696d656460448201526064016103d9565b60016004600088888581811061108657611086611820565b6020908102929092013583525081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055730a1bbd57033f57e7b6743621b79fcb9eb2ce36766323b872dd7393f01412c062c99c6ef105b1bad93800b56354793389898681811061110e5761110e611820565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561118a57600080fd5b505af115801561119e573d6000803e3d6000fd5b5050505080806111ad9061189b565b915050610f80565b507f2ed48368de79b173beedca1e8032871f3f17b79b90846860673ab50f234273e13386866040516111e993929190611a1b565b60405180910390a1506111fb60018055565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103d9565b6002600154036112ba5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103d9565b6002600155565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082611343858461134c565b14949350505050565b600081815b84518110156113915761137d8286838151811061137057611370611820565b602002602001015161139b565b9150806113898161189b565b915050611351565b5090505b92915050565b60008183106113b75760008281526020849052604090206113c6565b60008381526020839052604090205b9392505050565b60008083601f8401126113df57600080fd5b50813567ffffffffffffffff8111156113f757600080fd5b6020830191508360208260051b850101111561141257600080fd5b9250929050565b6000806000806000806060878903121561143257600080fd5b863567ffffffffffffffff8082111561144a57600080fd5b6114568a838b016113cd565b9098509650602089013591508082111561146f57600080fd5b61147b8a838b016113cd565b9096509450604089013591508082111561149457600080fd5b506114a189828a016113cd565b979a9699509497509295939492505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461036d57600080fd5b80356114e0816114b3565b919050565b600080600080600080600080600080600060c08c8e03121561150657600080fd5b61150f8c6114d5565b9a5067ffffffffffffffff8060208e0135111561152b57600080fd5b61153b8e60208f01358f016113cd565b909b50995060408d013581101561155157600080fd5b6115618e60408f01358f016113cd565b909950975060608d013581101561157757600080fd5b6115878e60608f01358f016113cd565b909750955060808d013581101561159d57600080fd5b6115ad8e60808f01358f016113cd565b909550935060a08d01358110156115c357600080fd5b506115d48d60a08e01358e016113cd565b81935080925050509295989b509295989b9093969950565b600081518084526020808501945080840160005b8381101561161e578151151587529582019590820190600101611600565b509495945050505050565b60208152600082516040602084015261164560608401826115ec565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084830301604085015261168082826115ec565b95945050505050565b60006020828403121561169b57600080fd5b5035919050565b6000806000806000606086880312156116ba57600080fd5b85356116c5816114b3565b9450602086013567ffffffffffffffff808211156116e257600080fd5b6116ee89838a016113cd565b9096509450604088013591508082111561170757600080fd5b50611714888289016113cd565b969995985093965092949392505050565b6020808252825182820181905260009190848201906040850190845b8181101561175f578351151583529284019291840191600101611741565b50909695505050505050565b6000806040838503121561177e57600080fd5b8235611789816114b3565b946020939093013593505050565b6000602082840312156117a957600080fd5b81356113c6816114b3565b600080600080604085870312156117ca57600080fd5b843567ffffffffffffffff808211156117e257600080fd5b6117ee888389016113cd565b9096509450602087013591508082111561180757600080fd5b50611814878288016113cd565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561186157600080fd5b81516113c6816114b3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118cc576118cc61186c565b5060010190565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561190557600080fd5b8260051b80836020870137939093016020019392505050565b73ffffffffffffffffffffffffffffffffffffffff8616815260606020820152600061194e6060830186886118d3565b82810360408401526119618185876118d3565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126119d157600080fd5b83018035915067ffffffffffffffff8211156119ec57600080fd5b6020019150600581901b360382131561141257600080fd5b80820281158282048414176113955761139561186c565b73ffffffffffffffffffffffffffffffffffffffff841681526040602082015260006116806040830184866118d356fea264697066735822122032afedd2079771a33c64fd2097241d1b04295b42e126f574f12746e88919989964736f6c63430008110033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.