57 lines
1.7 KiB
Solidity

// 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);
}
}