Sonic Blaze Testnet

Contract Diff Checker

Contract Name:
GenesisWhitelist

Contract Source Code:

File 1 of 1 : GenesisWhitelist

//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
interface IERC20 {
	function balanceOf(address user) external view returns (uint256);
	function transferFrom(address from, address to, uint256 amount) external;
}
contract GenesisWhitelist {
	address public immutable xHUBBLE;

	uint256 public totalSubmissions = 0;

	mapping (address => uint256) public submissionCountByUser;
	mapping (uint256 => address) public tokenByIndex;
	mapping (address => address) public submitterByToken;
	mapping (address => bool) public isSubmitted;

	constructor (address _xhubble) {
		xHUBBLE = _xhubble;
	}

	function _submit(address token, address submitter) internal {
		require(!isSubmitted[token], "token is already submitted");
		require(IERC20(xHUBBLE).balanceOf(submitter) >= 42e18*(submissionCountByUser[submitter] + 1),"must have 42 xHUBBLE per submission");
		IERC20(token).transferFrom(submitter,address(this),1);

		totalSubmissions++;
		submissionCountByUser[submitter]++;

		tokenByIndex[totalSubmissions] = token;
		submitterByToken[token] = submitter;
		isSubmitted[token] = true;

	}

	function fetchSubmissions() public view returns (address[] memory) {
		address[] memory submissions = new address[](totalSubmissions);
		for (uint256 index = 1; index <= totalSubmissions;index++) {
			submissions[index-1] = tokenByIndex[index];
		}
		return submissions;
	}
    function fetchSubmitters() public view returns (address[] memory) {
		address[] memory submitters = new address[](totalSubmissions);
		for (uint256 index = 1; index <= totalSubmissions;index++) {
			submitters[index-1] = submitterByToken[tokenByIndex[index]];
		}
		return submitters;
	}

	function submit(address token) external {
		_submit(token, msg.sender);
	}

}

Please enter a contract address above to load the contract details and source code.

Context size (optional):