Forkchoice Ethereum Mainnet

Address Contract Verified

Address 0xb2a192bFF3fe6edBbb1f663624421b2C1144D900
Balance 0 ETH
Nonce 1
Code Size 5205 bytes
Indexed Transactions 0 (1 on-chain, 0.9% indexed)
External Etherscan · Sourcify

Contract Bytecode

5205 bytes
0x60806040526004361061007f5760003560e01c80638da5cb5b1161004e5780638da5cb5b1461011f578063a7ccabdf1461014a578063d56d229d14610173578063fea21ce51461019e57610086565b8063238ac9331461008b5780633ccfd60b146100b65780636c19e783146100cd5780638bbb9188146100f657610086565b3661008657005b600080fd5b34801561009757600080fd5b506100a06101db565b6040516100ad91906110b4565b60405180910390f35b3480156100c257600080fd5b506100cb610201565b005b3480156100d957600080fd5b506100f460048036038101906100ef9190610d3a565b6102f8565b005b34801561010257600080fd5b5061011d60048036038101906101189190610dde565b610401565b005b34801561012b57600080fd5b50610134610868565b60405161014191906110b4565b60405180910390f35b34801561015657600080fd5b50610171600480360381019061016c9190610d3a565b61088c565b005b34801561017f57600080fd5b50610188610995565b60405161019591906110b4565b60405180910390f35b3480156101aa57600080fd5b506101c560048036038101906101c09190610db5565b6109bb565b6040516101d29190611187565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461028f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028690611207565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156102f5573d6000803e3d6000fd5b50565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037d90611207565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5553331329228fbd4123164423717a4a7539f6dfa1c3279a923b98fd681a6c73816040516103f691906110b4565b60405180910390a150565b600086868660405160200161041893929190611077565b6040516020818303038152906040528051906020012090506000816040516020016104439190611051565b60405160208183030381529060405280519060200120905060006001828787876040516000815260200160405260405161048094939291906111a2565b6020604051602081039080840390855afa1580156104a2573d6000803e3d6000fd5b505050602060405103519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461053e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610535906111e7565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f42842e0eb38857a7775b4e7364b2775df7325074d088e7fb39590cd6281184ed60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16338d6040516024016105cf939291906110f8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610639919061103a565b6000604051808303816000865af19150503d8060008114610676576040519150601f19603f3d011682016040523d82523d6000602084013e61067b565b606091505b50509050806107c957600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff242432a01954b0e0efb67e72c9b3b8ed77690657780385b256ac9aba0e35f0b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16338d6001604051602401610716949392919061112f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610780919061103a565b6000604051808303816000865af19150503d80600081146107bd576040519150601f19603f3d011682016040523d82523d6000602084013e6107c2565b606091505b5050809150505b80610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080090611227565b60405180910390fd5b893373ffffffffffffffffffffffffffffffffffffffff167f9e80c048bc588b388047ffc6e8153e7c11aa34312de7ed62e1858ff3a44ddce88b8b4260405161085493929190611262565b60405180910390a350505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461091a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091190611207565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff2610996d245d9b77e4ff84c2174eea0b76fb44c422218404f66e28816d78fb98160405161098a91906110b4565b60405180910390a150565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f081812fc55e34fdc7cf5d8b5cf4e3621fa6423fde952ec6ab24afdc0d85c0b2e85604051602401610a2b9190611247565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610a95919061103a565b600060405180830381855afa9150503d8060008114610ad0576040519150601f19603f3d011682016040523d82523d6000602084013e610ad5565b606091505b5091509150818015610ae957506020815110155b15610b3f57600081806020019051810190610b049190610d63565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16149350505050610cb7565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe985e9c5c6636c6879256001057b28ccac7718ef0ac56553ff9b926452cab8a360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630604051602401610bcc9291906110cf565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610c36919061103a565b600060405180830381855afa9150503d8060008114610c71576040519150601f19603f3d011682016040523d82523d6000602084013e610c76565b606091505b508092508193505050818015610c8e57506020815110155b15610cb05780806020019051810190610ca79190610d8c565b92505050610cb7565b6000925050505b919050565b600081359050610ccb81611395565b92915050565b600081519050610ce0816113ac565b92915050565b600081519050610cf5816113c3565b92915050565b600081359050610d0a816113da565b92915050565b600081359050610d1f816113f1565b92915050565b600081359050610d3481611408565b92915050565b600060208284031215610d4c57600080fd5b6000610d5a84828501610cbc565b91505092915050565b600060208284031215610d7557600080fd5b6000610d8384828501610cd1565b91505092915050565b600060208284031215610d9e57600080fd5b6000610dac84828501610ce6565b91505092915050565b600060208284031215610dc757600080fd5b6000610dd584828501610d10565b91505092915050565b60008060008060008060c08789031215610df757600080fd5b6000610e0589828a01610d10565b9650506020610e1689828a01610d10565b9550506040610e2789828a01610d10565b9450506060610e3889828a01610d25565b9350506080610e4989828a01610cfb565b92505060a0610e5a89828a01610cfb565b9150509295509295509295565b610e70816112cb565b82525050565b610e7f816112ef565b82525050565b610e8e816112fb565b82525050565b610ea5610ea0826112fb565b611381565b82525050565b6000610eb682611299565b610ec081856112a4565b9350610ed081856020860161134e565b80840191505092915050565b610ee58161133c565b82525050565b6000610ef8601c836112c0565b91507f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000830152601c82019050919050565b6000610f386011836112af565b91507f496e76616c6964207369676e61747572650000000000000000000000000000006000830152602082019050919050565b6000610f786009836112af565b91507f4e6f74206f776e657200000000000000000000000000000000000000000000006000830152602082019050919050565b6000610fb86000836112af565b9150600082019050919050565b6000610fd26013836112af565b91507f4e4654207472616e73666572206661696c6564000000000000000000000000006000830152602082019050919050565b61100e81611325565b82525050565b61102561102082611325565b61138b565b82525050565b6110348161132f565b82525050565b60006110468284610eab565b915081905092915050565b600061105c82610eeb565b91506110688284610e94565b60208201915081905092915050565b60006110838286611014565b6020820191506110938285611014565b6020820191506110a38284611014565b602082019150819050949350505050565b60006020820190506110c96000830184610e67565b92915050565b60006040820190506110e46000830185610e67565b6110f16020830184610e67565b9392505050565b600060608201905061110d6000830186610e67565b61111a6020830185610e67565b6111276040830184611005565b949350505050565b600060a0820190506111446000830187610e67565b6111516020830186610e67565b61115e6040830185611005565b61116b6060830184610edc565b818103608083015261117c81610fab565b905095945050505050565b600060208201905061119c6000830184610e76565b92915050565b60006080820190506111b76000830187610e85565b6111c4602083018661102b565b6111d16040830185610e85565b6111de6060830184610e85565b95945050505050565b6000602082019050818103600083015261120081610f2b565b9050919050565b6000602082019050818103600083015261122081610f6b565b9050919050565b6000602082019050818103600083015261124081610fc5565b9050919050565b600060208201905061125c6000830184611005565b92915050565b60006060820190506112776000830186611005565b6112846020830185611005565b6112916040830184611005565b949350505050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006112d682611305565b9050919050565b60006112e882611305565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006113478261132f565b9050919050565b60005b8381101561136c578082015181840152602081019050611351565b8381111561137b576000848401525b50505050565b6000819050919050565b6000819050919050565b61139e816112cb565b81146113a957600080fd5b50565b6113b5816112dd565b81146113c057600080fd5b50565b6113cc816112ef565b81146113d757600080fd5b50565b6113e3816112fb565b81146113ee57600080fd5b50565b6113fa81611325565b811461140557600080fd5b50565b6114118161132f565b811461141c57600080fd5b5056fea26469706673582212206907b6eebba5037ab532cc4daf1a5b00372a6ad06282f21bb8b06157c2c2965764736f6c63430008000033

Verified Source Code Full Match

Compiler: v0.8.0+commit.c7dfd78e EVM: istanbul Optimization: No
PBLCTreasureMultiClaim.sol 154 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**
 * PBLC Treasure Contract - Modified for Multiple Claims
 * 
 * Allows unlimited claims of the same NFT type
 * Each claim still requires valid signature from admin
 * Players can collect multiple NFTs of same type from different locations
 */

contract PBLCTreasureMultiClaim {
    
    address public owner;
    address public signer;      // Address that signs claim requests
    address public nftContract; // Rarible or any ERC721/ERC1155 contract
    
    // Events
    event RewardClaimed(
        address indexed player,
        uint256 indexed tokenId,
        uint256 lat,
        uint256 lng,
        uint256 timestamp
    );
    
    event SignerUpdated(address newSigner);
    event NFTContractUpdated(address newNFTContract);
    
    modifier onlyOwner() {
        require(msg.sender == owner, "Not owner");
        _;
    }
    
    constructor(address _signer, address _nftContract) {
        owner = msg.sender;
        signer = _signer;
        nftContract = _nftContract;
    }
    
    /**
     * @notice Claim an NFT reward
     * @param tokenId The NFT token ID to claim
     * @param lat Latitude multiplied by 1e6 (for precision)
     * @param lng Longitude multiplied by 1e6 (for precision)
     * @param v Signature v value
     * @param r Signature r value
     * @param s Signature s value
     */
    function claimReward(
        uint256 tokenId,
        uint256 lat,
        uint256 lng,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        // Verify signature
        bytes32 messageHash = keccak256(abi.encodePacked(tokenId, lat, lng));
        bytes32 ethSignedMessageHash = keccak256(
            abi.encodePacked("\x19Ethereum Signed Message:\n32", messageHash)
        );
        
        address recoveredSigner = ecrecover(ethSignedMessageHash, v, r, s);
        require(recoveredSigner == signer, "Invalid signature");
        
        // Transfer NFT from admin to player
        // Works with ERC721 and ERC1155
        (bool success, ) = nftContract.call(
            abi.encodeWithSelector(
                bytes4(keccak256("safeTransferFrom(address,address,uint256)")),
                owner,
                msg.sender,
                tokenId
            )
        );
        
        if (!success) {
            // Try ERC1155 transfer
            (success, ) = nftContract.call(
                abi.encodeWithSelector(
                    bytes4(keccak256("safeTransferFrom(address,address,uint256,uint256,bytes)")),
                    owner,
                    msg.sender,
                    tokenId,
                    1,
                    ""
                )
            );
        }
        
        require(success, "NFT transfer failed");
        
        emit RewardClaimed(msg.sender, tokenId, lat, lng, block.timestamp);
    }
    
    /**
     * @notice Update the signer address
     */
    function setSigner(address _signer) external onlyOwner {
        signer = _signer;
        emit SignerUpdated(_signer);
    }
    
    /**
     * @notice Update the NFT contract address
     */
    function setNFTContract(address _nftContract) external onlyOwner {
        nftContract = _nftContract;
        emit NFTContractUpdated(_nftContract);
    }
    
    /**
     * @notice Check if admin has approved this contract to spend NFTs
     */
    function checkApproval(uint256 tokenId) external view returns (bool) {
        (bool success, bytes memory result) = nftContract.staticcall(
            abi.encodeWithSelector(
                bytes4(keccak256("getApproved(uint256)")),
                tokenId
            )
        );
        
        if (success && result.length >= 32) {
            address approved = abi.decode(result, (address));
            return approved == address(this);
        }
        
        // Try ERC1155 isApprovedForAll
        (success, result) = nftContract.staticcall(
            abi.encodeWithSelector(
                bytes4(keccak256("isApprovedForAll(address,address)")),
                owner,
                address(this)
            )
        );
        
        if (success && result.length >= 32) {
            return abi.decode(result, (bool));
        }
        
        return false;
    }
    
    /**
     * @notice Allow owner to withdraw any ETH accidentally sent
     */
    function withdraw() external onlyOwner {
        payable(owner).transfer(address(this).balance);
    }
    
    // Allow contract to receive ETH
    receive() external payable {}
}

Read Contract

checkApproval 0xfea21ce5 → bool
nftContract 0xd56d229d → address
owner 0x8da5cb5b → address
signer 0x238ac933 → address

Write Contract 4 functions

These functions modify contract state and require a wallet transaction to execute.

claimReward 0x8bbb9188
uint256 tokenId
uint256 lat
uint256 lng
uint8 v
bytes32 r
bytes32 s
setNFTContract 0xa7ccabdf
address _nftContract
setSigner 0x6c19e783
address _signer
withdraw 0x3ccfd60b
No parameters

Recent Transactions

This address has 1 on-chain transactions, but only 0.9% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →