# Как воссоздавать контракты на примере Akropolisio
## 1. Найти исходные коды
Для начала надо найти исходники проекта. Они могут быть на гитхабе, оффициальном сайте или в статьях-ресерчах. Если их там нет, можно взять исходники из etherscan.
## 2. Определить фреймворк
Чаще всего в проектах можно встретить один из следующих фреймворков:
- truffle
- hardhat
## 3. Установить зависимости
```
npm i
```
или
```
yarn
```
## 4. Компиляция проекта
Далее нам нужно скомпилировать проект в байткод.
В truffle:
```
npx truffle compile
```
При компиляции могут возникать следующие ошибки:
1. Не хвататет модуля-зависимости (например @openzeppelin/upgrades/Initializable.sol). Решение: установить модуль через npm/yarn
2. Ошибка в модуле, который не важен для воссоздания уязвимости. Решение: Удалить модуль или закомментировать код
3. Не хватает файлов в проекте (например не находит Safemath.sol). Решение: найти файл с таким именем на github или в google - вероятно это публичная библиотека. Другое решение: посмотреть прошлые коммиты в репозитории, возможно файл потреялся при каких то изменениях.
## 5. Деплой проекта
При деплое надо учесть несколько вещей:
- Порядок деплоя контрактов (они могут зависеть друг от друга)
- Сеть на которую происходит деплой
- Кошелёк с которого будет происходить деплой
- RPC провайдер (infura, alchemy, etc)
Параметры могут быть захардкожены или передаваться как аргументы командной строки, переменные окружения или значения из .env
Здесь будет полезен grep (или ripgrep), для рекурсивного поиска нужных перменных по папкам.
Чаще всего скрипты для деплоя находятся в ./scripts/