Вопрос или проблема
В настоящее время я использую Windows 10 с, я полагаю, WSL1.
- Конфигурация системы: Ubuntu [ Версия: 22.04.3]
- Версия Mythril: [ Версия: 0.24.8 ]
- Версия Numpy: [ Версия: 2.2.1]
- Версия Python: [ Версия: 3.10.12]
Когда я ввожу эту команду:
myth analyze
Я получаю следующее предупреждение:
/home/slither/mythril/complete/0.4.11/0x0a2b7fd09f82b221f4704dc2501eb4c12cce346d.sol
Сообщение об ошибке /home/slither/mythril-env/lib/python3.10/site-packages/numpy/_core/getlimits.py:551:
UserWarning: Подпись b'\x00\xd0\xcc\xcc\xcc\xcc\xcc\xcc\xfb\xbf\x00\x00\x00\x00\x00\x00' для <class 'numpy.longdouble'> не соответствует никакому известному типу: возврат к функции проверки типа.
Это предупреждение указывает на поврежденную поддержку для dtype! machar = _get_machar(dtype)***
Я спросил у ChatGPT, и ответ был: Предупреждение, которое вы видите, связано с проблемой совместимости между NumPy и поддержкой плавающих чисел вашей системы, в частности для типа longdouble. Это предупреждение не является критическим и, вероятно, не повлияет на функциональность.
Я пытался найти больше информации, и ответ был: WSL 1 не совместим с Mythril. Я установил WSL 2, но он не устанавливается на моем ПК. Как я могу решить это предупреждение?
Ответ или решение
Ваша ситуация связана с предупреждением, которое появляется при использовании Mythril, анализаторе безопасности для смарт-контрактов на Ethereum, в среде Windows Subsystem for Linux (WSL) с использованием Ubuntu. Конкретная ошибка касается несовместимости NumPy
с вашей системой в отношении числового типа данных longdouble
. Давайте разберем, что это значит и как с этим справиться, используя подход TEA.
Теория (Theory)
NumPy
— это пакет для языка Python, предоставляющий поддержку многомерных массивов и различных математических функций для работы с ними. Одной из возможностей NumPy является работа с различными числовыми типами данных, включая float
, double
и longdouble
. Тип longdouble
в NumPy предназначен для хранения чисел с более высокой точностью, чем стандартный double
, и зависит от реализации компилятором и системой.
Предупреждение, которое вы получаете, связано с тем, что система не может найти подходящее соответствие для сигнатуры типа longdouble
в используемой вами конфигурации ОС и архитектуре. Это часто происходит в окружениях, где поддержка типа longdouble
не реализована на аппаратном уровне или несовместима с библиотеками интерпретатора Python на данной платформе, что, как правило, не критично, но предупреждение может быть назойливым.
Пример (Example)
Ваша текущая ситуация включает использование Windows 10 с WSL1, и при запуске команды myth analyze
вы получаете следующее предупреждение:
Error message occured /home/slither/mythril-env/lib/python3.10/site-packages/numpy/_core/getlimits.py:551:
UserWarning: Signature b'\x00\xd0\xcc\xcc\xcc\xcc\xcc\xcc\xfb\xbf\x00\x00\x00\x00\x00\x00' for <class 'numpy.longdouble'> does not match any known type: falling back to type probe function. This warnings indicates broken support for the dtype! machar = _get_machar(dtype)***
Данное предупреждение указывает на то, что тип данных longdouble
не поддерживается, и используется запасной метод для определения машино-специфичных характеристик этого типа. В ответах, которые вы нашли в интернете, отмечается, что WSL1 имеет ограничения, из-за чего некоторые функции и библиотеки могут работать некорректно.
Применение (Application)
Чтобы минимизировать влияние этого предупреждения и продолжить работу с Mythril эффективно, рассмотрите следующие шаги:
-
Переход на WSL2: WSL2 использует полную виртуализацию и обладает более совместимой средой для Unix-подобных приложений, предлагая более высокую производительность и улучшенную поддержку системных функций. Если вы сталкиваетесь с проблемами установки WSL2, проверьте следующее:
- Обновите Windows 10 до последней версии, поскольку WSL2 требует обновленных компонентов ОС.
- Убедитесь, что виртуализация включена в BIOS вашего компьютера.
- Следуйте официальным инструкциям Microsoft для установки и настройки WSL2.
-
Работа в Обход: Если обновление до WSL2 невозможно, а предупреждение не влияет на функциональность приложений, оставьте его без внимания. Это предупреждение носит образовательный характер и не должно влиять на работу Mythril.
-
Локальная Установка: Рассмотрите возможность установки всей необходимой среды разработки напрямую на Linux, чтобы избегать проблем, связанных с WSL. Использование непосредственно Ubuntu на выделенном устройстве может ликвидировать многие проблемы совместимости.
-
Обновление Пакетов: Убедитесь, что все используемые пакеты (Python, NumPy, Mythril и т.д.) обновлены до последних версий. Это может включать в себя использование
pip
для обновления Python-пакетов:pip install --upgrade mythril numpy
-
Оптимизация Среды: Настройте виртуальное окружение Python для изоляции библиотек, чтобы избежать конфликтов. Используйте
venv
илиvirtualenv
:python -m venv myenv source myenv/bin/activate
Заключение
Данная проблема с ошибочным сообщением о типе longdouble
не должна существенно влиять на вашу работу с Mythril. Однако переход на WSL2 или использование нативной установки Ubuntu может улучшить общую производительность и устранить множество неудобств. Если переустановка или обновление среды вызвало сложности, проконсультируйтесь с официальной документацией или сообществами разработчиков, такими как Stack Overflow или Ubuntu Forums, для уточнения деталей конфигурации и решения возможных проблем.