// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.20; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; import "../OrganizerEventPaymentSplitter.sol"; contract OrganizerPaymentFactoryContract is Ownable,AccessControl { bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE"); address[] admins; address[] public deployedContract; mapping (address => address) public contractForOrganizer; event NewContractDeployed(address); constructor(address initialOwner,address[] memory _admins) Ownable(initialOwner) { admins = _admins; for (uint256 i = 0; i < _admins.length; ++i) { _grantRole(ADMIN_ROLE, _admins[i]); } } modifier onlyAdmin() { require(msg.sender == owner() || hasRole(ADMIN_ROLE, msg.sender), "DOES_NOT_HAVE_ADMIN_ROLE"); _; } function deployOrganizerPaymentContract(address _organizerAddress, address[] memory payees,uint256[] memory shares_) external returns(address) { // Contract belongs to our factory... OrganizerEventPaymentSplitter theContract = new OrganizerEventPaymentSplitter(payees,shares_); deployedContract.push(address(theContract)); contractForOrganizer[_organizerAddress] = address(theContract); emit NewContractDeployed(address(theContract)); return address(theContract); } }