def deploy_proxy_factory_contract(self, deployer_account=None, deployer_private_key=None) -> str:
assert deployer_account or deployer_private_key<EOL>deployer_address = deployer_account or self.ethereum_client.private_key_to_address(deployer_private_key)<EOL>proxy_factory_contract = get_proxy_factory_contract(self.w3)<EOL>tx = proxy_factory_contract.constructor().buildTransaction({'<STR_LIT>': deployer_address})<EOL>tx_hash = self.ethereum_client.send_unsigned_transaction(tx, private_key=deployer_private_key,<EOL>public_key=deployer_account)<EOL>tx_receipt = self.ethereum_client.get_transaction_receipt(tx_hash, timeout=<NUM_LIT>)<EOL>assert tx_receipt.status<EOL>contract_address = tx_receipt.contractAddress<EOL>logger.info("<STR_LIT>", contract_address, deployer_address)<EOL>return contract_address<EOL>
Deploy proxy factory contract. Takes deployer_account (if unlocked in the node) or the deployer private key
:param deployer_account: Unlocked ethereum account
:param deployer_private_key: Private key of an ethereum account
:return: deployed contract address