RSC_TierGate

Description:

ERC20 token contract with Factory capabilities. Standard implementation for fungible tokens on Ethereum.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

{{
  "language": "Solidity",
  "sources": {
    "src/RSC_TierGate.sol": {
      "content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

import {Ownable} from "./utils/Ownable.sol";
import {IERC20} from "./interfaces/IERC20.sol";
import {IERC721} from "./interfaces/IERC721.sol";

contract RSC_TierGate is Ownable {
    address public reactToken;
    address public nftContract;
    uint256 public reactMinBalance; // in wei

    mapping(address => bool) public premiumUsers;

    event TierChecked(address indexed account, uint256 tier);
    event ReactTokenSet(address indexed token, uint256 minBalance);
    event NftContractSet(address indexed nft);
    event PremiumGranted(address indexed account);

    function setReactToken(address _reactToken, uint256 _minBalance) external onlyOwner {
        reactToken = _reactToken;
        reactMinBalance = _minBalance;
        emit ReactTokenSet(_reactToken, _minBalance);
    }

    function setNft(address _nftContract) external onlyOwner {
        nftContract = _nftContract;
        emit NftContractSet(_nftContract);
    }

    function grantPremium(address account) external onlyOwner {
        premiumUsers[account] = true;
        emit PremiumGranted(account);
    }

    function revokePremium(address account) external onlyOwner {
        premiumUsers[account] = false;
    }

    function checkTier(address account) external view returns (uint256) {
        uint256 tier = 0; // Free by default

        if (premiumUsers[account]) return 1;

        if (reactToken != address(0)) {
            if (IERC20(reactToken).balanceOf(account) >= reactMinBalance) return 1;
        }
        if (nftContract != address(0)) {
            if (IERC721(nftContract).balanceOf(account) > 0) return 1;
        }
        return tier;
    }
}

"
    },
    "src/utils/Ownable.sol": {
      "content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

/// @title Minimal Ownable utility
abstract contract Ownable {
    error NotOwner();

    address public owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        owner = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }

    modifier onlyOwner() {
        if (msg.sender != owner) revert NotOwner();
        _;
    }

    function transferOwnership(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Owner=zero");
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}


"
    },
    "src/interfaces/IERC20.sol": {
      "content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
"
    },
    "src/interfaces/IERC721.sol": {
      "content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

interface IERC721 {
    function balanceOf(address owner) external view returns (uint256);
}


"
    }
  },
  "settings": {
    "remappings": [
      "forge-std/=lib/forge-std/src/",
      "reactive-lib/=lib/reactive-lib/src/"
    ],
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "metadata": {
      "useLiteralContent": false,
      "bytecodeHash": "ipfs",
      "appendCBOR": true
    },
    "outputSelection": {
      "*": {
        "*": [
          "evm.bytecode",
          "evm.deployedBytecode",
          "devdoc",
          "userdoc",
          "metadata",
          "abi"
        ]
      }
    },
    "evmVersion": "cancun",
    "viaIR": true
  }
}}

Tags:
ERC20, Token, Factory|addr:0xa90c0adf5562c499ef9e04bf226b96e18bada805|verified:true|block:23452053|tx:0x7a44dccf811ff19762457daf13dbd06cf8fe44c854cc9f2c28d0cfacc250d20b|first_check:1758966637

Submitted on: 2025-09-27 11:50:38

Comments

Log in to comment.

No comments yet.