账户
0x79...7d9b
0x79...7d9B

0x79...7d9B

$500
此合同的源代码已经过验证!
合同元数据
编译器
0.8.17+commit.8df45f5f
语言
Solidity
合同源代码
文件 1 的 1:NFTBurner.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface KateCoin {
    function mint(uint256 amount, address mintFor) external;
}

interface NftInterface {
    function getApproved(uint256 tokenId) external view returns (address);
    function ownerOf(uint256 tokenId) external view returns (address);
    function transferFrom(address from, address to, uint256 tokenId) external;
}

contract NFTBurner {
    address constant DEAD_ADDRESS = 0x000000000000000000000000000000000000dEaD;
    address public nftAddress;
    KateCoin public kateCoin;
    uint256 public interactedTimes = 0;
    uint256 public mintedAmount = 0;
    uint256 public rewardAmount = 10000000000000000000;
    address public owner;

    struct InteractionDetails {
        uint256 interactedTimes;
        uint256 mintedAmount;
    }

    mapping(address => InteractionDetails) public interactions;

    modifier onlyOwner() {
        require(msg.sender == owner, "Caller is not the owner");
        _;
    }

    constructor(KateCoin _kateCoin, address _nftAddress) {
        kateCoin = _kateCoin;
        nftAddress = _nftAddress;
        owner = msg.sender;
    }

    function setRewardAmount(uint256 _rewardAmount) external onlyOwner {
        rewardAmount = _rewardAmount;
    }

    function burnNFT(uint256 tokenId) external {
        NftInterface nft = NftInterface(nftAddress);

        nft.transferFrom(nft.ownerOf(tokenId), DEAD_ADDRESS, tokenId);

        interactedTimes += 1;
        mintedAmount += rewardAmount;
        if (!interactionExists(msg.sender)) {
            interactions[msg.sender] = InteractionDetails({
                interactedTimes: 0,
                mintedAmount: 0
            });
        }
        interactions[msg.sender].interactedTimes += 1;
        interactions[msg.sender].mintedAmount += rewardAmount;

        // Mint the reward tokens
        kateCoin.mint(rewardAmount, msg.sender);
    }

    function interactionExists(address user) internal view returns (bool) {
        return interactions[user].interactedTimes > 0;
    }

    function getValuesAndAddressValues(
        address inputAddress
    ) public view returns (uint256[] memory) {
        uint256[] memory result = new uint256[](4);
        result[0] = interactedTimes;
        result[1] = mintedAmount;
        result[2] = interactions[inputAddress].interactedTimes;
        result[3] = interactions[inputAddress].mintedAmount;
        return result;
    }
}
设置
{
  "compilationTarget": {
    "NFTBurner.sol": "NFTBurner"
  },
  "evmVersion": "london",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "remappings": []
}
ABI
[{"inputs":[{"internalType":"contract KateCoin","name":"_kateCoin","type":"address"},{"internalType":"address","name":"_nftAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burnNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"inputAddress","type":"address"}],"name":"getValuesAndAddressValues","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"interactedTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"interactions","outputs":[{"internalType":"uint256","name":"interactedTimes","type":"uint256"},{"internalType":"uint256","name":"mintedAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kateCoin","outputs":[{"internalType":"contract KateCoin","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardAmount","type":"uint256"}],"name":"setRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"}]