57 lines
2.0 KiB
Solidity
57 lines
2.0 KiB
Solidity
|
// SPDX-License-Identifier: UNLICENSED
|
||
|
pragma solidity ^0.8.17;
|
||
|
|
||
|
import { ITokenFactory } from "../interfaces/ITokenFactory.sol";
|
||
|
import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
|
||
|
|
||
|
/**
|
||
|
* @title BaseTokenFactory contract
|
||
|
* @author 0x-r4bbit
|
||
|
*
|
||
|
* This contract provides shared functionality across token factory contracts
|
||
|
* that are used to create instances of `OwnerToken` and `MasterToken`.
|
||
|
* This includes a custom modifiers as well as a function to set the token deployer
|
||
|
* address that is needed for it.
|
||
|
*
|
||
|
* @dev Other factory contract inherit from this contract.
|
||
|
*/
|
||
|
abstract contract BaseTokenFactory is ITokenFactory, Ownable {
|
||
|
error BaseTokenFactory_InvalidTokenDeployerAddress();
|
||
|
error BaseTokenFactory_NotAuthorized();
|
||
|
error BaseTokenFactory_InvalidTokenMetadata();
|
||
|
|
||
|
event TokenDeployerAddressChange(address indexed);
|
||
|
|
||
|
/// @dev The address of the token deployer contract.
|
||
|
address public tokenDeployer;
|
||
|
|
||
|
modifier onlyTokenDeployer() {
|
||
|
if (msg.sender != tokenDeployer) {
|
||
|
revert BaseTokenFactory_NotAuthorized();
|
||
|
}
|
||
|
_;
|
||
|
}
|
||
|
|
||
|
modifier onlyValidTokenMetadata(string calldata name, string calldata symbol, string calldata baseURI) {
|
||
|
if (bytes(name).length == 0 || bytes(symbol).length == 0 || bytes(baseURI).length == 0) {
|
||
|
revert BaseTokenFactory_InvalidTokenMetadata();
|
||
|
}
|
||
|
_;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @notice Sets the token deployer address.
|
||
|
* @dev Only the owner can call this function.
|
||
|
* @dev Reverts if provided address is a zero address.
|
||
|
* @dev Emits a {TokenDeployerAddressChange} event.
|
||
|
* @param _tokenDeployer The address of the token deployer contract.
|
||
|
*/
|
||
|
function setTokenDeployerAddress(address _tokenDeployer) external onlyOwner {
|
||
|
if (_tokenDeployer == address(0)) {
|
||
|
revert BaseTokenFactory_InvalidTokenDeployerAddress();
|
||
|
}
|
||
|
tokenDeployer = _tokenDeployer;
|
||
|
emit TokenDeployerAddressChange(tokenDeployer);
|
||
|
}
|
||
|
}
|