Про внешние контракты в Foundry
И еще один момент для проведения тестов. Мне сегодня попался контракт для аудита, в котором был внешний контракт токена, т.е. уже задеплоенный в mainnet.
Требовалось сделать форк mainnet к себе в рабочую среду и уже оттуда проводить тесты.
Для форка потребуется зарегистрировать на Alchemy или Infura и получить специальную ссылку, которую позже записать в .env файл, например, под переменной ETH_RPC_URL.
Но сейчас не об этом.
В общем, у меня была переменная:
IMainToken internal _token;
которая в SetUp функции определялась внешним контрактом:
_token = IMainToken (0x84385v475473...);
и импортировалась из файла интерфейса:
import { IMainToken} from "./utils/IMainToken.sol";
И вот для доступа к этому внешнему контракту и требовался форк. Но можно сделать и без него только с локальной сетью.
Нужно просто скопировать задеплоенный контракт, сохранить его в папке проекта и затем импортировать:
import { MainToken} from "./utils/MainToken.sol";
далее можно через
ptoken = new MainToken();
создать объект и работать с ним.
Однако, если в связанных с IMainToken других файлах есть обращения к токену, то они могут выкидывать ошибку при попытке провести тест. Поэтому потребуется немного доработать:
Оставить оба импорта:
import { MainToken} from "./utils/MainToken.sol";
import { IMainToken} from "./utils/IMainToken.sol";
Затем создать новый контракт токена:
ptoken = new MainToken();
и уже к к токену в файле определить созданный контракт:
_token = address(ptoken);
Тогда все будет работать. Проверил на двух проектах. Надеюсь и вам поможет.
#foundry
Post #622
410
- 👍 2