def execute(self,<EOL>tx_sender_private_key: str,<EOL>tx_gas: Optional[int] = None,<EOL>tx_gas_price: Optional[int] = None,<EOL>tx_nonce: Optional[int] = None,<EOL>block_identifier='<STR_LIT>') -> Tuple[bytes, Dict[str, any]]:
tx_gas_price = tx_gas_price or self.gas_price  <EOL>tx_gas = tx_gas or (self.safe_tx_gas + self.data_gas) * <NUM_LIT:2><EOL>tx_sender_address = Account.privateKeyToAccount(tx_sender_private_key).address<EOL>tx_parameters = {<EOL>'<STR_LIT>': tx_sender_address,<EOL>'<STR_LIT>': tx_gas,<EOL>'<STR_LIT>': tx_gas_price,<EOL>}<EOL>if tx_nonce is not None:<EOL><INDENT>tx_parameters['<STR_LIT>'] = tx_nonce<EOL><DEDENT>self.tx = self.w3_tx.buildTransaction(tx_parameters)<EOL>self.tx_hash = self.ethereum_client.send_unsigned_transaction(self.tx,<EOL>private_key=tx_sender_private_key,<EOL>retry=True,<EOL>block_identifier=block_identifier)<EOL>return self.tx_hash, self.tx<EOL>
Send multisig tx to the Safe
:param tx_sender_private_key: Sender private key
:param tx_gas: Gas for the external tx. If not, `(safe_tx_gas + data_gas) * 2` will be used
:param tx_gas_price: Gas price of the external tx. If not, `gas_price` will be used
:param tx_nonce: Force nonce for `tx_sender`
:param block_identifier: `latest` or `pending`
:return: Tuple(tx_hash, tx)
:raises: InvalidMultisigTx: If user tx cannot go through the Safe