// SPDX-License-Identifier: MIT pragma solidity 0.8.19; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; abstract contract MallBase is Ownable { address public verifier; // Address to receive transaction fee address public feeToAddress; uint256 public immutable _CACHED_CHAIN_ID; address public immutable _CACHED_THIS; mapping(address token => bool status) public erc20Supported; event AddERC20Suppout(address erc20); event RemoveERC20Suppout(address erc20); event VerifierUpdated(address indexed verifier); event FeeToAddressUpdated(address indexed feeToAddress); constructor(address _currency, address _feeToAddress, address _verifier) { _CACHED_CHAIN_ID = block.chainid; _CACHED_THIS = address(this); verifier = _verifier; erc20Supported[_currency] = true; feeToAddress = _feeToAddress; } function addERC20Support(address erc20) external onlyOwner { require(erc20 != address(0), "ERC20 address can not be zero"); erc20Supported[erc20] = true; emit AddERC20Suppout(erc20); } function removeERC20Support(address erc20) external onlyOwner { erc20Supported[erc20] = false; emit RemoveERC20Suppout(erc20); } /** * @dev update verifier address */ function updateVerifier(address _verifier) external onlyOwner { require(_verifier != address(0), "address can not be zero"); verifier = _verifier; emit VerifierUpdated(_verifier); } function setFeeToAddress(address _feeToAddress) external onlyOwner { require( _feeToAddress != address(0), "fee received address can not be zero" ); feeToAddress = _feeToAddress; emit FeeToAddressUpdated(_feeToAddress); } }