Сейчас существует достаточно большое количество Cast команд для самых разных задач: от простых запросов о получении баланса токена до работы с calldata и шифрованием.
Думаю, для начала пройдемся по тем, что чаще всего используют в своей работе, а оставшиеся будем изучать уже по мере необходимости.
Итак, мы можем открыть терминал и ввести команду:
cast helpона покажет нам все доступные cast команды.
Тут стоит сделать отступление и уточнить, что для выполнения некоторых команд, нам потребуется специальная RPC ссылка для доступа к блокчейн сетям. Получить такую бесплатно можно на таких популярных проектах как Alchemy или Infura.
По сути, процесс получения ссылок у них похож: регистрируетесь на портале, ищите кнопку Get API key или похожую со словом API, и потом генерируется ваша индивидуальная ссылка для rpc запросов. Выглядит она примерно так:
https://mainnet.infura.io/v3/apiKey
apiKey - ваш уникальный api ключ, показывать который нежелательно никому.
Там же можно получить ссылку на различные сети: Ethereum, Optimism, Arbitrum и т.д.
Именно эту ссылку и нужно будет добавлять в конце наших cast команд.
Если вы работаете в редакторе кода, а не в обычном терминале, то есть возможность создать .env файл и поместить туда ссылки, создав для них специальные переменные среды, и уже их использовать в cast командах.
Для небольшой тренировки, попробуем сегодня выполнить несколько команд для получения информации о сети.
Chain команды
Итак, нам доступны три команды:
cast chain-id
cast chain
cast client
Первая выдаст нам номер блокчейна (например, для Эфириума - это 1, для Оптимизма - 10), вторая - название сети, третья - клиента, через который отправляются запросы (например, для Infura - клиент GETH).
Для того чтобы выполнить команду в консоли потребуется прописать:
cast chain-id --rpc-url linkгде вместо link - указать вашу ссылку rpc, которую мы получали выше.
Также, думаю, сегодня можно рассмотреть и команды для блоков.
Block команды
Всего на данный момент их шесть:
https://book.getfoundry.sh/reference/cast/block-commands
1. cast find-block
2. cast gas-price
3. cast block-number
4. cast basefee
5. cast block
6. cast age
Первая ищет блок, который был ближе всего к нужной дате, например
cast find-block 1609459200покажет блок, который был ближе всего к Новому Году 2021.
Обратите внимание, что время указывается в формате unix (количество секунд прошедшее с момента 1 января 1970 года).
Вторая команда показывает текущую стоимость газа в нужной сети, например:
cast gas-price --rpc-url linkТретья - последний на данный момент блок:
cast block-number --rpc-url linkЧетвертая - basefee блока (кто не знает, что это, то почитайте про Лондонское обновление):
cast base-fee blockNum --rpc-url linkblockNum - это номер блока, basefee которого нам нужно получить. Вместо числа - 1, 443, 2343242 - можно указать одно из теговых значений: earliest, finalized, safe, latest или pending. По умолчанию идет latest.
Пятая - получение информации о блоке, например:
cast block finalized --rpc-url linkТут также можно указывать номер блока числом или одним из тегов:
earliest, finalized, safe, latest или pending.
При этом можно получить не всю информацию о блоке, а только необходимое поле. Попробуйте выполнить предыдущую команду, чтобы понять, о чем я говорю.
Получить информацию о конкретном поле можно с помощью модификации команды, а именно добавления --field опции:
cast block latest -f hash --rpc-url linkНу, и шестая команда служит для получения timestamp блока:
cast age blockNum --rpc-url linkгде blockNum это номер блока или его теговое значение.
Дальше мы продолжим говорить о командах cast и разберем другие примеры.
Задание
1. Зарегистрироваться на Alchemy или Infura;
2. Получить rpc ссылку;
3. Попробовать несколько команд из поста;
4. Настроить .env файл для rpc ссылок;
#foundry #cast #block #chain #lesson2