def deploy_master_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>safe_contract = self.get_contract()<EOL>tx = safe_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>master_safe = self.get_contract(contract_address)<EOL>tx = master_safe.functions.setup(<EOL>["<STR_LIT>", "<STR_LIT>"],<EOL><NUM_LIT:2>,             <EOL>NULL_ADDRESS,  <EOL>b'<STR_LIT>',           <EOL>NULL_ADDRESS,  <EOL><NUM_LIT:0>,             <EOL>NULL_ADDRESS   <EOL>).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>logger.info("<STR_LIT>", contract_address, deployer_address)<EOL>return contract_address<EOL>
Deploy master 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