gnosis/safe/safe_creation_tx.py
def _build_contract_creation_tx_with_valid_signature(self, tx_dict: Dict[str, None], s: int) -> Transaction:
        """
        Use pyethereum `Transaction` to generate valid tx using a random signature
        :param tx_dict: Web3 tx dictionary
        :param s: Signature s value
        :return: PyEthereum creation tx for the proxy contract
        """
        zero_address = HexBytes('0x' + '0' * 40)
        f_address = HexBytes('0x' + 'f' * 40)
        nonce = tx_dict['nonce']
        gas_price = tx_dict['gasPrice']
        gas = tx_dict['gas']
        to = tx_dict.get('to', b'')  # Contract creation should always have `to` empty
        value = tx_dict['value']
        data = tx_dict['data']
        for _ in range(100):
            try:
                v, r = self.find_valid_random_signature(s)
                contract_creation_tx = Transaction(nonce, gas_price, gas, to, value, HexBytes(data), v=v, r=r, s=s)
                sender_address = contract_creation_tx.sender
                contract_address = contract_creation_tx.creates
                if sender_address in (zero_address, f_address) or contract_address in (zero_address, f_address):
                    raise InvalidTransaction
                return contract_creation_tx
            except InvalidTransaction:
                pass
        raise ValueError('Valid signature not found with s=%d', s)
def _build_contract_creation_tx_with_valid_signature(self, tx_dict: Dict[str, None], s: int) -> Transaction:
        """
        Use pyethereum `Transaction` to generate valid tx using a random signature
        :param tx_dict: Web3 tx dictionary
        :param s: Signature s value
        :return: PyEthereum creation tx for the proxy contract
        """
        zero_address = HexBytes('0x' + '0' * 40)
        f_address = HexBytes('0x' + 'f' * 40)
        nonce = tx_dict['nonce']
        gas_price = tx_dict['gasPrice']
        gas = tx_dict['gas']
        to = tx_dict.get('to', b'')  # Contract creation should always have `to` empty
        value = tx_dict['value']
        data = tx_dict['data']
        for _ in range(100):
            try:
                v, r = self.find_valid_random_signature(s)
                contract_creation_tx = Transaction(nonce, gas_price, gas, to, value, HexBytes(data), v=v, r=r, s=s)
                sender_address = contract_creation_tx.sender
                contract_address = contract_creation_tx.creates
                if sender_address in (zero_address, f_address) or contract_address in (zero_address, f_address):
                    raise InvalidTransaction
                return contract_creation_tx
            except InvalidTransaction:
                pass
        raise ValueError('Valid signature not found with s=%d', s)
Use pyethereum `Transaction` to generate valid tx using a random signature
        :param tx_dict: Web3 tx dictionary
        :param s: Signature s value
        :return: PyEthereum creation tx for the proxy contract