
Ratht - это бинарная структура статического анализа EVM, предназначенная для работы над развернутыми интеллектуальными контрактами. Поттрыжка принимает evm-байтовые строки, использует чувствительный к потоку анализ для восстановления исходного графика потока управления, поднимает график потока управления в форму SSA/Infinite Register, а также оптимизирует SSA-удаление судов, обменов, толчков и всплесков. Преобразование из машины стека в форму SSA удаляет 60%+ из всех инструкций EVM и представляет собой гораздо более дружелюбный интерфейс тем, кто хочет прочитать умные контракты, с которыми они взаимодействуют.
python3 rattle-cli.py --input inputs/kingofether/KingOfTheEtherThrone.bin -OСоздаст такой выходной сигнал машины, как это:

Функции восстанавливаются и разделены. Кроме того, функциональные аргументы, местоположения памяти и местоположения хранения восстанавливаются.
Погремушка работает на шестнадцатеричной строке контракта времени.
Если вы запускаете погремушку по контракту, вы можете компилировать с прочностью, используйте вариант --bin-runtime и сбросить заголовок:
$ solc --bin-runtime KingOfTheEtherThrone.sol 2> /dev/null | tail -n1 > contract.bin Чтобы установить зависимости Python, запустите эти команды:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtЧтобы установить Graphviz, запустите следующую команду:
Linux:
sudo apt-get graphvismacOS:
brew install graphvizЕсли вы получите синтаксисную ошибку как это:
File "rattle-cli.py" , line 16
def main () -> None :
^
SyntaxError : invalid syntaxВы, вероятно, бегали погремушку с Python2 вместо Python3.
Более подробную информацию о дизайне и функциях погремушки см. В моей презентации Recon Montreal, которая здесь аннотируется.
Погремушка лицензирована и распространяется по лицензии AGPLV3. Свяжитесь с нами, если вы ищете исключение из терминов.