Foundry с 0. Часть 33
Раз уж в прошлом посты мы познакомились с протоколом Morpho, то сейчас можно разобрать еще один их репо, в котором показано как работать с оракулами Chainlink и писать тесты для них.
Вот ссылка на сам репо.
https://github.com/morpho-org/morpho-blue-oracles
Кратко описывая работу контракта можно сказать, что это реализация создана исключительно для работы сервиса Morpho и просто так использовать его в своем протоколе не получится.
Контракт наследует от интерфейса IOracle, подключает служебные библиотеки, а также использует Chainlink Data Feed для получения актуальных цен на токены.
В контракте всего одна функция и конструктор, в который передаются адреса контрактов Chainlink, с который мы хотим получить информацию.
Функции price() просто возвращает немного измененную цену на токен. Тут происходят преобразования суммы (scale) для последующей работы с ней в основном контракте Morpho.
Теперь разберем файл теста.
https://github.com/morpho-org/morpho-blue-oracles/blob/main/test/ChainlinkOracleTest.sol
Здесь подключаются необходимые библиотеки и указываются адреса необходимых контрактов Chainlink, расположенных в основной сети.
Далее в функции setUp() мы создаем подключение и делаем форк сети:
ETH_RPC_URL - переменная среды, в которую нам нужно определить нашу rpc ссылку и сохранить в файле .env.
Далее можно писать функции для тестирования:
В целом, все довольно просто.
Вы также можете создать специальный скрипт для деплоя в разные сети и указать адреса контрактов Chainlink там. Пример этого вы можете найти в позапрошлом посте.
#foundry #lesson33
Раз уж в прошлом посты мы познакомились с протоколом Morpho, то сейчас можно разобрать еще один их репо, в котором показано как работать с оракулами Chainlink и писать тесты для них.
Вот ссылка на сам репо.
https://github.com/morpho-org/morpho-blue-oracles
Кратко описывая работу контракта можно сказать, что это реализация создана исключительно для работы сервиса Morpho и просто так использовать его в своем протоколе не получится.
Контракт наследует от интерфейса IOracle, подключает служебные библиотеки, а также использует Chainlink Data Feed для получения актуальных цен на токены.
В контракте всего одна функция и конструктор, в который передаются адреса контрактов Chainlink, с который мы хотим получить информацию.
Функции price() просто возвращает немного измененную цену на токен. Тут происходят преобразования суммы (scale) для последующей работы с ней в основном контракте Morpho.
Теперь разберем файл теста.
https://github.com/morpho-org/morpho-blue-oracles/blob/main/test/ChainlinkOracleTest.sol
Здесь подключаются необходимые библиотеки и указываются адреса необходимых контрактов Chainlink, расположенных в основной сети.
Далее в функции setUp() мы создаем подключение и делаем форк сети:
function setUp() public {
vm.createSelectFork(vm.envString("ETH_RPC_URL"));
} ETH_RPC_URL - переменная среды, в которую нам нужно определить нашу rpc ссылку и сохранить в файле .env.
Далее можно писать функции для тестирования:
function testOracleWbtcUsdc() public {
ChainlinkOracle oracle = new ChainlinkOracle(vaultZero, wBtcBtcFeed, btcUsdFeed, usdcUsdFeed, feedZero, 1, 8, 6);
(, int256 firstBaseAnswer,,,) = wBtcBtcFeed.latestRoundData();
(, int256 secondBaseAnswer,,,) = btcUsdFeed.latestRoundData();
(, int256 quoteAnswer,,,) = usdcUsdFeed.latestRoundData();
assertEq(
oracle.price(),
(uint256(firstBaseAnswer) * uint256(secondBaseAnswer) * 10 ** (36 + 8 + 6 - 8 - 8 - 8))
/ uint256(quoteAnswer)
);
}В целом, все довольно просто.
Вы также можете создать специальный скрипт для деплоя в разные сети и указать адреса контрактов Chainlink там. Пример этого вы можете найти в позапрошлом посте.
#foundry #lesson33
👍2❤1
Foundry с 0. Часть 34
Разбирая темы написания тестов с использованием различных паттернов, сервисов и сторонних программ, я пришел к выводу, что, в целом, алгоритм действий очень похож.
Сначала вы определяете для себя, на каких сетях хотите проводить тесты своего протокола, затем описываете набор сторонних контрактов и сервисов, и в завершении все это подключаете в свои тесты через setUp() и скрипты.
В прошлом посте был небольшой пример работы с оракулами Chainlink, и хочу сказать, что с DeFi платформами примерно тоже самое: нашли контракт, подключили, сделали форк и проводите тесты.
Кстати сказать, что компания Immunefi ранее в 2023 выпустила прекрасный набор POC-шаблонов, в которых вы можете подсмотреть как писать тесты для:
1. Флешзайма с Uniswap (V2 и V3), Aave, Balancer, Euler;
2. Манипуляции ценой с использованием dex платформ;
3. Реентранси;
Ссылка на их репо: https://github.com/immunefi-team/forge-poc-templates/tree/main
Даже если не использовать их шаблоны напрямую, можно подсмотреть, как это реализовано и постараться сделать у себя также или лучше.
С мостами дела обстоят несколько сложнее, так как некоторые расчеты происходят вне сети (оффчейн). В тестах за оффчейн операции часто отвечает javanoscript, а в остальном написание ничем не отличается от уже пройденных нами.
Вы можете сами убедиться в этом, прочитав эту статьи с примерами по тестам мостов:
1. Setting Up A Bridge With Foundry
https://medium.com/immunefi/setting-up-a-bridge-with-foundry-c0d807a3998
Вообще, насколько я понял, самое трудное при работе с проектом, на котором уже были написаны много тестов, это разобраться в архитектуре и понять замысел разработчиков.
Из своего опыта знаю, что на разбор контрактов помощников (Handler, Helper, Utils) действующего проекта, может уйти столько же времени, как и на аудит хорошего контракта.
Кстати, замечал не раз, что у разработчиков есть привычка называть функцию теста тем, что он тестирует (это определенно правильно), но нет привычки писать комментарии к служебным функция в тестах. Например, они сделали настройку определенного состояния контракта на момент теста, но забыли описать, зачем это было сделано. И при том, что тест будет пройден, уязвимость в самом коде остается.
В общем, делайте как можно больше комментариев к своим тестам, служебным функциям и состояниям контракта на момент теста.
#foundry #lesson34
Разбирая темы написания тестов с использованием различных паттернов, сервисов и сторонних программ, я пришел к выводу, что, в целом, алгоритм действий очень похож.
Сначала вы определяете для себя, на каких сетях хотите проводить тесты своего протокола, затем описываете набор сторонних контрактов и сервисов, и в завершении все это подключаете в свои тесты через setUp() и скрипты.
В прошлом посте был небольшой пример работы с оракулами Chainlink, и хочу сказать, что с DeFi платформами примерно тоже самое: нашли контракт, подключили, сделали форк и проводите тесты.
Кстати сказать, что компания Immunefi ранее в 2023 выпустила прекрасный набор POC-шаблонов, в которых вы можете подсмотреть как писать тесты для:
1. Флешзайма с Uniswap (V2 и V3), Aave, Balancer, Euler;
2. Манипуляции ценой с использованием dex платформ;
3. Реентранси;
Ссылка на их репо: https://github.com/immunefi-team/forge-poc-templates/tree/main
Даже если не использовать их шаблоны напрямую, можно подсмотреть, как это реализовано и постараться сделать у себя также или лучше.
С мостами дела обстоят несколько сложнее, так как некоторые расчеты происходят вне сети (оффчейн). В тестах за оффчейн операции часто отвечает javanoscript, а в остальном написание ничем не отличается от уже пройденных нами.
Вы можете сами убедиться в этом, прочитав эту статьи с примерами по тестам мостов:
1. Setting Up A Bridge With Foundry
https://medium.com/immunefi/setting-up-a-bridge-with-foundry-c0d807a3998
Вообще, насколько я понял, самое трудное при работе с проектом, на котором уже были написаны много тестов, это разобраться в архитектуре и понять замысел разработчиков.
Из своего опыта знаю, что на разбор контрактов помощников (Handler, Helper, Utils) действующего проекта, может уйти столько же времени, как и на аудит хорошего контракта.
Кстати, замечал не раз, что у разработчиков есть привычка называть функцию теста тем, что он тестирует (это определенно правильно), но нет привычки писать комментарии к служебным функция в тестах. Например, они сделали настройку определенного состояния контракта на момент теста, но забыли описать, зачем это было сделано. И при том, что тест будет пройден, уязвимость в самом коде остается.
В общем, делайте как можно больше комментариев к своим тестам, служебным функциям и состояниям контракта на момент теста.
#foundry #lesson34
👍2❤1🤩1
Foundry с 0. Часть 35
Сегодня хочу коснуться темы дебаггинга в Foundry.
Я сам далеко не спец в детальных проходах по опкодам и пошаговому исследованию состояний памяти и хранилища, да и обучающих видео, достойных ссылок, я не нашел, поэтому будет лишь представление команд и описание их результатов.
Для того чтобы хорошо разбираться в дебаггинге нужно хорошо понимать несколько вещей:
1. Как работает EVM "под капотом";
2. Как работают опкоды;
3. Уметь писать код на assembly, хотя бы на базовом уровне;
4. Понимать как работает стек в Solidity;
5. Понимать как работает memory;
У меня есть "провисания" в знаниях в некоторых темах, которые я регулярно отслеживаю и доучиваю, но все равно иногда сложно "дойти до сути".
В первоначальном знакомстве со всем этим может помочь прекрасное видео от Ильи, где он разбирает байткод и показывает некоторые опкоды.
https://youtu.be/pz8NeV6bo3E
Но вернемся к дебаггингу в Foundry.
Как я понял из комментариев разработчиков, сейчас дебаггинг еще на начальном уровне и у команды большие планы на него. И сейчас эта опция скорее в формате "просмотра начинки".
Итак, допустим, что у нас есть некоторая функция в тестах, работу которой мы хотим разобрать.
Открываем наш терминал и прописываем команду:
например:
Наш терминал, как бы разделится на 4 части с 4 разными окошками.
Вверху будут окошко опкодов и стека, а внизу - актуальный код контракта или его функция и отображение memory.
Вы также можете встретить цветовое обозначение в одном из этих окошек:
1. Красный - то, что записывается текущим опкодом,
2. Зеленый - то, что записалось предыдущим опкодом,
3. Голубой - то, что читается текущим опкодом
Навигация по значения в каждом окошке совершается с помощью клавиш на клавиатуре. Ниже окна дебаггера будет их обозначение, также его можно посмотреть тут:
https://book.getfoundry.sh/forge/debugger
В процессе своего обучения и работы с конкурсными аудитами, я не часто встречался лицом к лицу с дебаггингом (кода или транзакций, не важно), поэтому если у вас есть хорошие видео на эту тему, я с удовольствием их посмотрю и поделюсь на канале.
Приятного обучения!
#foundry #lesson35
Сегодня хочу коснуться темы дебаггинга в Foundry.
Я сам далеко не спец в детальных проходах по опкодам и пошаговому исследованию состояний памяти и хранилища, да и обучающих видео, достойных ссылок, я не нашел, поэтому будет лишь представление команд и описание их результатов.
Для того чтобы хорошо разбираться в дебаггинге нужно хорошо понимать несколько вещей:
1. Как работает EVM "под капотом";
2. Как работают опкоды;
3. Уметь писать код на assembly, хотя бы на базовом уровне;
4. Понимать как работает стек в Solidity;
5. Понимать как работает memory;
У меня есть "провисания" в знаниях в некоторых темах, которые я регулярно отслеживаю и доучиваю, но все равно иногда сложно "дойти до сути".
В первоначальном знакомстве со всем этим может помочь прекрасное видео от Ильи, где он разбирает байткод и показывает некоторые опкоды.
https://youtu.be/pz8NeV6bo3E
Но вернемся к дебаггингу в Foundry.
Как я понял из комментариев разработчиков, сейчас дебаггинг еще на начальном уровне и у команды большие планы на него. И сейчас эта опция скорее в формате "просмотра начинки".
Итак, допустим, что у нас есть некоторая функция в тестах, работу которой мы хотим разобрать.
Открываем наш терминал и прописываем команду:
forge test --debug FUNC
например:
forge test --debug "testSomething()"
Наш терминал, как бы разделится на 4 части с 4 разными окошками.
Вверху будут окошко опкодов и стека, а внизу - актуальный код контракта или его функция и отображение memory.
Вы также можете встретить цветовое обозначение в одном из этих окошек:
1. Красный - то, что записывается текущим опкодом,
2. Зеленый - то, что записалось предыдущим опкодом,
3. Голубой - то, что читается текущим опкодом
Навигация по значения в каждом окошке совершается с помощью клавиш на клавиатуре. Ниже окна дебаггера будет их обозначение, также его можно посмотреть тут:
https://book.getfoundry.sh/forge/debugger
В процессе своего обучения и работы с конкурсными аудитами, я не часто встречался лицом к лицу с дебаггингом (кода или транзакций, не важно), поэтому если у вас есть хорошие видео на эту тему, я с удовольствием их посмотрю и поделюсь на канале.
Приятного обучения!
#foundry #lesson35
👍2❤1🤩1
Foundry с 0. Часть 36
Ребята, крепитесь, остались последние три поста по Foundry и дальше будем выбирать новую тему или делать общие посты по Solidity и аудиту, а пока...
Короткий пост по написанию тестов для контрактов на yul.
Как вы можете знать, или догадываться, контракты могут быть написаны не только на Solidity, но и чисто на yul, т.е. низкоуровневом языке.
За все время работы со смарт контрактами мне ни разу не встречались подобные проекты.
Ну, разве что в аудите ZK Sync был служебный контракт Bootloader...
Так вот, проводить тесты для таких проектов все же надо, но как это сделать?
Один из участников канала (спасибо @dmitryq) поделился ссылкой на репо, который позволяет в удобном формате подготовить yul контракт.
В этом репо вы можете найти сам пример подготовки теста:
https://github.com/crystalbit/foundry-yul-boilerplate
А в этом контракты помощники для деплоя:
https://github.com/crystalbit/deploy-yul
В целом там все достаточно понятно и просто. Вам потребуется импортировать несколько дополнительных контрактов в файл теста:
import "deploy-yul/BytecodeDeployer.sol";
import "deploy-yul/YulDeployer.sol";
И подготовить необходимые контракты вашего протокола:
Если вы проходили все предыдущие посты из цикла Foundry с 0, то данный процесс работы не составит для вас труда.
#foundry #lesson36
Ребята, крепитесь, остались последние три поста по Foundry и дальше будем выбирать новую тему или делать общие посты по Solidity и аудиту, а пока...
Короткий пост по написанию тестов для контрактов на yul.
Как вы можете знать, или догадываться, контракты могут быть написаны не только на Solidity, но и чисто на yul, т.е. низкоуровневом языке.
За все время работы со смарт контрактами мне ни разу не встречались подобные проекты.
Ну, разве что в аудите ZK Sync был служебный контракт Bootloader...
Так вот, проводить тесты для таких проектов все же надо, но как это сделать?
Один из участников канала (спасибо @dmitryq) поделился ссылкой на репо, который позволяет в удобном формате подготовить yul контракт.
В этом репо вы можете найти сам пример подготовки теста:
https://github.com/crystalbit/foundry-yul-boilerplate
А в этом контракты помощники для деплоя:
https://github.com/crystalbit/deploy-yul
В целом там все достаточно понятно и просто. Вам потребуется импортировать несколько дополнительных контрактов в файл теста:
import "deploy-yul/BytecodeDeployer.sol";
import "deploy-yul/YulDeployer.sol";
И подготовить необходимые контракты вашего протокола:
YulDeployer yulDeployer = new YulDeployer();
BytecodeDeployer bytecodeDeployer = new BytecodeDeployer();
address basic;
address basicBytecode;
function setUp() external {
basic = yulDeployer.deployContract("Basic");
basicBytecode = bytecodeDeployer.deployContract("Basic");
}
Если вы проходили все предыдущие посты из цикла Foundry с 0, то данный процесс работы не составит для вас труда.
#foundry #lesson36
❤3👍1🤩1
Foundry с 0. Часть 37
Когда я разбирался с документацией Foundry, то видел там раздел по написанию тестов для подписей стандарта EIP712.
Долгое время все никак не получалось подступиться к ним, и вот пришло время разобраться в этой теме.
Вот сама ссылка на документацию:
https://book.getfoundry.sh/tutorials/testing-eip712
А сейчас мы быстро пробежимся по коду.
Итак, для написания тестов в данном случае мы будем работать с токеном ERC20 от компании Solmate, так как там уже по умолчанию идет функция permit().
https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol
Нам также потребуются еще два контракта: это MockToken, который будет наследовать от ERC20 и SigUtils, который поможет правильно работать с подписями.
Наш токен предельно простой:
SigUtils чуть более длинный:
Все просто: мы создали структуру подписи подобную ERC20 permit() и две функции для хеширования структуры подписи и цельных данных.
И теперь мы готовы писать тесты для нашего токена.
Для начала нам потребуется в настройках развернуть контракты MyToken и SigUtils, создать приватные ключи и на их основе сгенерировать адреса пользователей, так как сами подписи нужно создавать с использованием приватного ключа.
После этого можно написать первый тест для функции permit():
Тут мы создаем структуры с помощью контракта SigUtils, хешируем и подписываем с помощью приватного ключа, затем уже вызываем функцию permit() и делаем проверки на nonce и allowance.
В файле примере, который вы найдете в конце поста, можно посмотреть тесты на: срок действия подписи, невалидного signer и nonce, а также на signature replay.
Когда я разбирался с документацией Foundry, то видел там раздел по написанию тестов для подписей стандарта EIP712.
Долгое время все никак не получалось подступиться к ним, и вот пришло время разобраться в этой теме.
Вот сама ссылка на документацию:
https://book.getfoundry.sh/tutorials/testing-eip712
А сейчас мы быстро пробежимся по коду.
Итак, для написания тестов в данном случае мы будем работать с токеном ERC20 от компании Solmate, так как там уже по умолчанию идет функция permit().
https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol
Нам также потребуются еще два контракта: это MockToken, который будет наследовать от ERC20 и SigUtils, который поможет правильно работать с подписями.
Наш токен предельно простой:
contract MyToken is ERC20 {
address public owner;
constructor(address newOwner) ERC20("token", "MTK", 18) {}
function mint(address user, uint256 amount) public {
_mint(user, amount);
}
}SigUtils чуть более длинный:
contract SigUtils {
bytes32 internal DOMAIN_SEPARATOR;
constructor(bytes32 _DOMAIN_SEPARATOR) {
DOMAIN_SEPARATOR = _DOMAIN_SEPARATOR;
}
// keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
struct Permit {
address owner;
address spender;
uint256 value;
uint256 nonce;
uint256 deadline;
}
function getStructHash(Permit memory _permit)
internal
pure
returns (bytes32)
{
return
keccak256(
abi.encode(
PERMIT_TYPEHASH,
_permit.owner,
_permit.spender,
_permit.value,
_permit.nonce,
_permit.deadline
)
);
}
function getTypedDataHash(Permit memory _permit)
public
view
returns (bytes32)
{
return
keccak256(
abi.encodePacked(
"\x19\x01",
DOMAIN_SEPARATOR,
getStructHash(_permit)
)
);
}
}Все просто: мы создали структуру подписи подобную ERC20 permit() и две функции для хеширования структуры подписи и цельных данных.
И теперь мы готовы писать тесты для нашего токена.
Для начала нам потребуется в настройках развернуть контракты MyToken и SigUtils, создать приватные ключи и на их основе сгенерировать адреса пользователей, так как сами подписи нужно создавать с использованием приватного ключа.
function setUp() public {
token = new MyToken(address(this));
sigUtils = new SigUtils(token.DOMAIN_SEPARATOR());
ownerPrivateKey = 0xA11CE;
spenderPrivateKey = 0xB0B;
owner = vm.addr(ownerPrivateKey);
spender = vm.addr(spenderPrivateKey);
token.mint(owner, 1e18);
}После этого можно написать первый тест для функции permit():
function test_Permit() public {
SigUtils.Permit memory permit = SigUtils.Permit({
owner: owner,
spender: spender,
value: 1e18,
nonce: 0,
deadline: 1 days
});
bytes32 digest = sigUtils.getTypedDataHash(permit);
(uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerPrivateKey, digest);
token.permit(
permit.owner,
permit.spender,
permit.value,
permit.deadline,
v,
r,
s
);
assertEq(token.allowance(owner, spender), 1e18);
assertEq(token.nonces(owner), 1);
}Тут мы создаем структуры с помощью контракта SigUtils, хешируем и подписываем с помощью приватного ключа, затем уже вызываем функцию permit() и делаем проверки на nonce и allowance.
В файле примере, который вы найдете в конце поста, можно посмотреть тесты на: срок действия подписи, невалидного signer и nonce, а также на signature replay.
👍3❤2
Также в документации можно найти и другой пример работы с подписями (depositWithPermit), но на деле там все тоже самое с использованием нашего контракта помощника SigUtils.
Надеюсь, тестирование подписей стало теперь чуть проще для вас.
А тут вы найдете все тесты для нашего ERC20 и его функции permit().
#foundry #lesson37
Надеюсь, тестирование подписей стало теперь чуть проще для вас.
А тут вы найдете все тесты для нашего ERC20 и его функции permit().
#foundry #lesson37
👍2❤1🤩1
Foundry с 0. Часть 38
Некоторым итогом проверки знаний на любых курсах или обучающих программах должно выступать тестирование или другое профессиональное задание.
Думаю, в случае с нашими обучающими постами нужно сделать примерно тоже самое, чтобы вы могли проверить свои навыки и знания в Foundry.
И для этого я предлагаю вам разобрать нашумевший взлом протокола Kyberswap!
Его уже называют чуть ли не новым и инновационным видом взлома, для подготовки которого необходимо было все очень точно просчитать, и который не смогло бы найти большинство современных аудиторов, включая самых профессиональных!
Понимаю, для многих это может стать настоящим вызовом, поэтому для начала прочитайте несколько полезных статей по этому хаку:
1. KyberSwap Hack Explained
2. A Deep Dive Into the KyberSwap Hack
3. KyberSwap - REKT
А уже после постарайтесь разобраться с контрактами и тестами из этого репо:
https://github.com/paco0x/kyber-exploit-example
Если поймете, за что отвечает каждая функция и что она выполняет, то, поздравляю, вы стали разбираться в Foundry на хорошем уровне!
Итак, за дело! Приятного обучения!
#foundry #lesson38
Некоторым итогом проверки знаний на любых курсах или обучающих программах должно выступать тестирование или другое профессиональное задание.
Думаю, в случае с нашими обучающими постами нужно сделать примерно тоже самое, чтобы вы могли проверить свои навыки и знания в Foundry.
И для этого я предлагаю вам разобрать нашумевший взлом протокола Kyberswap!
Его уже называют чуть ли не новым и инновационным видом взлома, для подготовки которого необходимо было все очень точно просчитать, и который не смогло бы найти большинство современных аудиторов, включая самых профессиональных!
Понимаю, для многих это может стать настоящим вызовом, поэтому для начала прочитайте несколько полезных статей по этому хаку:
1. KyberSwap Hack Explained
2. A Deep Dive Into the KyberSwap Hack
3. KyberSwap - REKT
А уже после постарайтесь разобраться с контрактами и тестами из этого репо:
https://github.com/paco0x/kyber-exploit-example
Если поймете, за что отвечает каждая функция и что она выполняет, то, поздравляю, вы стали разбираться в Foundry на хорошем уровне!
Итак, за дело! Приятного обучения!
#foundry #lesson38
👍2❤1🔥1🤩1
Foundry c 0. Полный цикл постов
Мы с пользой потратили практически два месяца на полный курс по написанию тестов для смарт контрактов и теперь самое время сделать быструю навигацию по постам.
Надеюсь вам он не только понравился, но и оказался очень полезным и своевременным!
Буду рад репостам и комментариям!
P.S. Да, осталась еще пара более сложных тем, которые я буду добавлять по мере нахождения полезного материала и разборов!
Введение
Foundry с 0. Часть 0. Установка
Foundry с 0. Часть 1. Из чего состоит Foundry?
Foundry с 0. Часть 2. Cast команды (1)
Foundry с 0. Часть 3. Cast команды (2)
Foundry с 0. Часть 4. Cast команды (3)
Foundry с 0. Часть 5. Chisel
Foundry с 0. Часть 6. Конфигурация Foundry
Foundry с 0. Часть 7. Библиотеки
Foundry с 0. Часть 8. Старт проекта
Foundry с 0. Часть 9. Виды тестов
Foundry с 0. Часть 10. Ресурсы
Базовая практика
Foundry с 0. Часть 11. Простые тесты
Foundry с 0. Часть 12. Разные assert
Foundry с 0. Часть 13. Fail тесты
Foundry с 0. Часть 14. Читкоды и prank()
Foundry с 0. Часть 15. Организация файлов
Foundry с 0. Часть 16. Консоль и логирование
Foundry с 0. Часть 17. Покрытие тестами
Foundry с 0. Часть 18. Hardhat и Foundry
Первые шаги
Foundry с 0. Часть 19. Деплой контрактов
Foundry с 0. Часть 20. Работа с токенами
Foundry с 0. Часть 21. Работа со временем
Foundry с 0. Часть 22. Форк тесты
Продвинутые тесты
Foundry с 0. Часть 23. FFI тесты
Foundry с 0. Часть 24. Фазз тесты
Foundry с 0. Часть 25. Другие команды
Foundry с 0. Часть 26. Мутационные тесты
Foundry с 0. Часть 27. Инвариант тесты. Общее
Foundry с 0. Часть 28. Инвариант тесты. WETH
Foundry с 0. Часть 29. Инвариант тесты. Handler
Foundry с 0. Часть 30. Инвариант тесты. Actors
Паттерны и примеры
Foundry с 0. Часть 31. Работа с разными сетями
Foundry с 0. Часть 32. Паттерн с функциями в тестах
Foundry с 0. Часть 33. Работа с оракулами
Foundry с 0. Часть 34. Биржи, мосты и прокси
Foundry с 0. Часть 35. Дебаггинг
Foundry с 0. Часть 36. Работа с yul в тестах
Foundry с 0. Часть 37. Работа с подписями EIP712
Финальный практикум
Foundry с 0. Часть 38. Финальный практикум
38 обучающих постов! Самому не верится проделанной работе за все это время! Вероятно, у меня получился самый полный разбор тестов на Foundry в ру сегменте.
Приятного обучения!
#foundry #summary
Мы с пользой потратили практически два месяца на полный курс по написанию тестов для смарт контрактов и теперь самое время сделать быструю навигацию по постам.
Надеюсь вам он не только понравился, но и оказался очень полезным и своевременным!
Буду рад репостам и комментариям!
P.S. Да, осталась еще пара более сложных тем, которые я буду добавлять по мере нахождения полезного материала и разборов!
Введение
Foundry с 0. Часть 0. Установка
Foundry с 0. Часть 1. Из чего состоит Foundry?
Foundry с 0. Часть 2. Cast команды (1)
Foundry с 0. Часть 3. Cast команды (2)
Foundry с 0. Часть 4. Cast команды (3)
Foundry с 0. Часть 5. Chisel
Foundry с 0. Часть 6. Конфигурация Foundry
Foundry с 0. Часть 7. Библиотеки
Foundry с 0. Часть 8. Старт проекта
Foundry с 0. Часть 9. Виды тестов
Foundry с 0. Часть 10. Ресурсы
Базовая практика
Foundry с 0. Часть 11. Простые тесты
Foundry с 0. Часть 12. Разные assert
Foundry с 0. Часть 13. Fail тесты
Foundry с 0. Часть 14. Читкоды и prank()
Foundry с 0. Часть 15. Организация файлов
Foundry с 0. Часть 16. Консоль и логирование
Foundry с 0. Часть 17. Покрытие тестами
Foundry с 0. Часть 18. Hardhat и Foundry
Первые шаги
Foundry с 0. Часть 19. Деплой контрактов
Foundry с 0. Часть 20. Работа с токенами
Foundry с 0. Часть 21. Работа со временем
Foundry с 0. Часть 22. Форк тесты
Продвинутые тесты
Foundry с 0. Часть 23. FFI тесты
Foundry с 0. Часть 24. Фазз тесты
Foundry с 0. Часть 25. Другие команды
Foundry с 0. Часть 26. Мутационные тесты
Foundry с 0. Часть 27. Инвариант тесты. Общее
Foundry с 0. Часть 28. Инвариант тесты. WETH
Foundry с 0. Часть 29. Инвариант тесты. Handler
Foundry с 0. Часть 30. Инвариант тесты. Actors
Паттерны и примеры
Foundry с 0. Часть 31. Работа с разными сетями
Foundry с 0. Часть 32. Паттерн с функциями в тестах
Foundry с 0. Часть 33. Работа с оракулами
Foundry с 0. Часть 34. Биржи, мосты и прокси
Foundry с 0. Часть 35. Дебаггинг
Foundry с 0. Часть 36. Работа с yul в тестах
Foundry с 0. Часть 37. Работа с подписями EIP712
Финальный практикум
Foundry с 0. Часть 38. Финальный практикум
38 обучающих постов! Самому не верится проделанной работе за все это время! Вероятно, у меня получился самый полный разбор тестов на Foundry в ру сегменте.
Приятного обучения!
#foundry #summary
🔥39❤3🤩3👍1
Foundry с 0. Часть 39
Только закончил с постами про Foundry и думал взять небольшой перерыв от него, как позавчера вышло видео от Патрика Коллинса, в котором он рассказывает о новом способе хранения информации о приватных ключах для деплоя и проведения тестов с вашими смарт контрактами. Уверен, это важная тема и ее нужно осветить в нашем цикле.
Если раньше мы создавали специальные .env файлы, куда мы записывали rpc ссылки и приватные ключи, то сейчас это можно делать более безопасным способом.
P.S. Напомню, что .env файлы обязательно нужно ставить в gitignore, чтобы случайно не загрузить конфиденциальную информацию в публичные репо. Из-за этого уже некоторые протоколы имели проблемы со взломами...
Теперь приватные ключи можно хранить в специальном зашифрованном файле под паролем на вашем компьютере. Весь процесс занимает всего пару минут.
Открываем наш терминал и прописываем команду:
cast wallet import defautKey --interactive
Там появится поле:
Enter private key
куда следует ввести наш приватный ключ, например:
0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
P.S. Это ключ от первого аккаунта в Anvil, можете потренироваться сами.
Далее вводим пароль для нашего файла:
Enter password
В итоге в терминале появится адрес, типа:
0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
Его нужно записать для дальнейшего использования.
Теперь мы можем проверить, сохранился ли файл и имеем ли мы к нему доступ. Сделать это можно с помощью команды:
cast wallet list
А сейчас немного практики. Если раньше при деплое контрактов с помощью скрипта мы выполняли команду:
forge noscript noscriptPath --rpc-url $URL --private-key $KEY
то теперь она другая:
forge noscript noscriptPath --rpc-url $URL --account defaultKey --sender addressKey --broadcast
где addressKey - это как раз тот адрес, который мы сохраняли после создания файла приватного ключа.
В терминале снова появится строка, в которой нам нужно ввести пароль:
Enter keystore password
только после этого будет выполнен деплой!
Обращу ваше внимание, что для большей безопасности, создание файла с приватным ключом нужно выполнять в терминале или командной строке, а не в терминале редактора кода, который сохраняет все ваши вводы в терминал и может отправить информацию в частную компанию, типа Микрософт.
Сам файл с приватным ключом можно посмотреть в корневой папке Foundry с помощью команд:
cd .foundry/keystore
cat defaultKey
тут будет хранится зашифрованная версия приватного ключа по стандарту EIP-2335.
Заботьтесь о своей безопасности в сети!
#foundry #lesson39
Только закончил с постами про Foundry и думал взять небольшой перерыв от него, как позавчера вышло видео от Патрика Коллинса, в котором он рассказывает о новом способе хранения информации о приватных ключах для деплоя и проведения тестов с вашими смарт контрактами. Уверен, это важная тема и ее нужно осветить в нашем цикле.
Если раньше мы создавали специальные .env файлы, куда мы записывали rpc ссылки и приватные ключи, то сейчас это можно делать более безопасным способом.
P.S. Напомню, что .env файлы обязательно нужно ставить в gitignore, чтобы случайно не загрузить конфиденциальную информацию в публичные репо. Из-за этого уже некоторые протоколы имели проблемы со взломами...
Теперь приватные ключи можно хранить в специальном зашифрованном файле под паролем на вашем компьютере. Весь процесс занимает всего пару минут.
Открываем наш терминал и прописываем команду:
cast wallet import defautKey --interactive
Там появится поле:
Enter private key
куда следует ввести наш приватный ключ, например:
0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
P.S. Это ключ от первого аккаунта в Anvil, можете потренироваться сами.
Далее вводим пароль для нашего файла:
Enter password
В итоге в терминале появится адрес, типа:
0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
Его нужно записать для дальнейшего использования.
Теперь мы можем проверить, сохранился ли файл и имеем ли мы к нему доступ. Сделать это можно с помощью команды:
cast wallet list
А сейчас немного практики. Если раньше при деплое контрактов с помощью скрипта мы выполняли команду:
forge noscript noscriptPath --rpc-url $URL --private-key $KEY
то теперь она другая:
forge noscript noscriptPath --rpc-url $URL --account defaultKey --sender addressKey --broadcast
где addressKey - это как раз тот адрес, который мы сохраняли после создания файла приватного ключа.
В терминале снова появится строка, в которой нам нужно ввести пароль:
Enter keystore password
только после этого будет выполнен деплой!
Обращу ваше внимание, что для большей безопасности, создание файла с приватным ключом нужно выполнять в терминале или командной строке, а не в терминале редактора кода, который сохраняет все ваши вводы в терминал и может отправить информацию в частную компанию, типа Микрософт.
Сам файл с приватным ключом можно посмотреть в корневой папке Foundry с помощью команд:
cd .foundry/keystore
cat defaultKey
тут будет хранится зашифрованная версия приватного ключа по стандарту EIP-2335.
Заботьтесь о своей безопасности в сети!
#foundry #lesson39
🔥7👍1
Solidity Tip
Порой встречал это в конкурсных аудитах, но только сейчас осознал это как отдельный инструмент работы с маппингами.
В функциях возможно определить локальный маппинг, но с указанием на storage data location (не уверен, как это точно перевести).
Такой способ работы со вложенными маппингами поможет вам сократить расход газа в операциях.
#solidity #mapping #tip
Порой встречал это в конкурсных аудитах, но только сейчас осознал это как отдельный инструмент работы с маппингами.
В функциях возможно определить локальный маппинг, но с указанием на storage data location (не уверен, как это точно перевести).
Такой способ работы со вложенными маппингами поможет вам сократить расход газа в операциях.
#solidity #mapping #tip
👍9
Игры с байткодом
Байткод контрактов обычно начинается с 6080604052, который генерируется за счет операции mstore(0x40,0x80). Но возможен и такой вариант:
Попробуйте выполнить операцию mstore(0x40,returndatasize()) в самом начале. Ваш байткод будет начинаться с 3d604052!
Пример кода можно увидеть на скрине выше.
P.S. По слухам, это может помешать верификации на Etherscan, так что пробуйте с осторожностью.
#bytecode #tip
Байткод контрактов обычно начинается с 6080604052, который генерируется за счет операции mstore(0x40,0x80). Но возможен и такой вариант:
Попробуйте выполнить операцию mstore(0x40,returndatasize()) в самом начале. Ваш байткод будет начинаться с 3d604052!
Пример кода можно увидеть на скрине выше.
P.S. По слухам, это может помешать верификации на Etherscan, так что пробуйте с осторожностью.
#bytecode #tip
❤1👍1
Работа с оракулами Chainlink
Увидел в твиттере пост gmhacker.eth, который поделился ссылкой на репо LiquidityProtocol.
Примечательно то, как они прописали события исполнения кода в зависимости от работы оракула:
1. Когда система получает данные о цене от Chainlink;
2. Когда система получает данные от другого оракула;
3. Когда оба оракула не заслуживают доверия;
4. Использование другого оракула, когда Chainlink заморожен;
5. Использование Chainlink, когда нет доверия другому оракулу;
На мой взгляд, действительно интересный подход к разнообразным кейсам при работе с оракулами, достойный для примера.
Рекомендую всем обратиться к первоисточнику и изучить контракт!
https://github.com/liquity/dev/blob/main/packages/contracts/contracts/PriceFeed.sol
А как вы работаете с оракулами?
#oracle #chainlink
Увидел в твиттере пост gmhacker.eth, который поделился ссылкой на репо LiquidityProtocol.
Примечательно то, как они прописали события исполнения кода в зависимости от работы оракула:
1. Когда система получает данные о цене от Chainlink;
2. Когда система получает данные от другого оракула;
3. Когда оба оракула не заслуживают доверия;
4. Использование другого оракула, когда Chainlink заморожен;
5. Использование Chainlink, когда нет доверия другому оракулу;
На мой взгляд, действительно интересный подход к разнообразным кейсам при работе с оракулами, достойный для примера.
Рекомендую всем обратиться к первоисточнику и изучить контракт!
https://github.com/liquity/dev/blob/main/packages/contracts/contracts/PriceFeed.sol
А как вы работаете с оракулами?
#oracle #chainlink
Проблемы с Древом Меркла
Ранее в этом году я выкладывал небольшой пост со ссылкой на ветку в Твиттере, в которой разбиралась уязвимость Древа Меркла в библиотеке от Open Zeppelin.
Чуть позже в одном из чатов видел дискуссию о комментарии в этом же контракте:
You should avoid using leaf values that are 64 bytes long prior to hashing, or use a hash function other than keccak256 for hashing leaves.
И вот только сейчас встретил статью, которая помогла многие вещи поставить на место. В ней рассказывается об second preimage attack и почему разработчики должны избегать хеширования листьев древа в 64 байта. Более того, в статье показываются способы, как избежать этой проблемы.
Сначала я хотел написать краткий пост с основными тезисами из статьи, но понял, что будет проще ее всю загнать в переводчик (для тех, кто не знает английский язык) и просмотреть лично, так как там много скринов и описаний, которые будет сложно понять в отрыве от самой статьи.
Поэтому рекомендую каждому ее прочитать от и до:
https://www.rareskills.io/post/merkle-tree-second-preimage-attack
Ну, а если вы, как и я, зададитесь вопросом, почему это SECOND preimage attack, а где же FIRST, то вот эта статья поможет ответить на вопрос.
Надеюсь, вопросов по Древу Меркла у вас стало теперь меньше.
#merkletree #merkle
Ранее в этом году я выкладывал небольшой пост со ссылкой на ветку в Твиттере, в которой разбиралась уязвимость Древа Меркла в библиотеке от Open Zeppelin.
Чуть позже в одном из чатов видел дискуссию о комментарии в этом же контракте:
You should avoid using leaf values that are 64 bytes long prior to hashing, or use a hash function other than keccak256 for hashing leaves.
И вот только сейчас встретил статью, которая помогла многие вещи поставить на место. В ней рассказывается об second preimage attack и почему разработчики должны избегать хеширования листьев древа в 64 байта. Более того, в статье показываются способы, как избежать этой проблемы.
Сначала я хотел написать краткий пост с основными тезисами из статьи, но понял, что будет проще ее всю загнать в переводчик (для тех, кто не знает английский язык) и просмотреть лично, так как там много скринов и описаний, которые будет сложно понять в отрыве от самой статьи.
Поэтому рекомендую каждому ее прочитать от и до:
https://www.rareskills.io/post/merkle-tree-second-preimage-attack
Ну, а если вы, как и я, зададитесь вопросом, почему это SECOND preimage attack, а где же FIRST, то вот эта статья поможет ответить на вопрос.
Надеюсь, вопросов по Древу Меркла у вас стало теперь меньше.
#merkletree #merkle
🔥4❤1
Подключение WSL для Windows
В последнее время у меня появилась необходимость работы с некоторыми программами, которые не работают на Windows и требуются либо Mac, либо Linux. Поэтому я решил попробовать установить WSL на свой компьютер, описать процесс и возникшие сложности.
Подсистема Windows для Linux (WSL) позволяет разработчикам запускать среду GNU/Linux с большинством программ командной строки, служебных программ и приложений непосредственно в Windows без каких-либо изменений и необходимости использовать традиционную виртуальную машину или двойную загрузку.
Простыми словами - это виртуалка Linux на Windows. Вот тут можно узнать об этом чуть больше:
https://learn.microsoft.com/ru-ru/windows/wsl/about
А по этому описанию мы и будем производить установку:
https://learn.microsoft.com/ru-ru/windows/wsl/install
Вообще, все должно происходить просто и быстро, но у меня уже на первых шагах появились некоторые трудности.
При попытке выполнить команду wsl --install в терминале, у меня возникла ошибка 0xc004000d. Немного погуглив, я нашел ее решение.
Вам нужно зайти в панель управление в Windows (обратите внимание, не Параметры, а именно Панель управления), дальше идем в раздел Программы и кликаем на пункт Включение и отключение компонентов Windows. Появится новое окошко и там нужно поставить флажок на пункте Подсистема Windows для Linux. Затем перезагружаем компьютер.
Теперь можно выполнить необходимую команду.
Но и тут могут возникнуть трудности. Терминал вам может показать список вообще всех доступных команд, вместо того чтобы начать установку. В этом случае необходимо чуть модифицировать команду до:
wsl --install -d Ubuntu 2
После этого возможна еще одна перезагрузка компьютера или же откроется окно Ubuntu и система попросит вас придумать имя и пароль.
Теперь в нашем терминале будет доступен еще один вид Ubuntu. Его можно найти, если нажать на небольшую стрелочку "вниз" рядом со вкладкой терминала.
Дальше можно настроить совместимость нашего редактора кода - VS Code.
Запускаем редактор, открываем раздел плаггинов и ищем Remote Development от Microsoft. Это пакет из 4 приложений, так что устанавливаем их все.
После установки плаггина в левом нижнем углу редактора появится синяя кнопка со стрелками в разные стороны. Если кликнуть по ней, то откроется окошко, где в параметрах можно выбрать подключение к WSL.
Вероятнее всего, после запуска вашего редактора кода в WSL, вам потребуется переустановить плаггины для работы с Solidity.
Как я понял, WLS установит вам на компьютер чистую Linux систему, другими словами у вас не будет доступа к своим папкам на Windows и нужно будет необходимые файлы и папки переносить вручную.
Рекомендую в терминале создать отдельную папку Development / Audits, чтобы самому не потеряться позже.
Это делается с помощью команд:
mkdir Audits
cd Audits/
Также, есть вероятность, что потребуется заново установить и настроить git, python, Node.js, npm, yarn и другие программы, которыми вы пользовались на Windows.
Хочу обратить ваше внимание на то, что есть две версии WSL и WSL2.
Не могу сейчас сказать, в чем там разница, но в моем случае возникали проблемы при обновлении Node.js и npm с первой версией WSL.
Также уточню, что вам желательно иметь уже некий опыт работы с Linux системами, иначе настройка всех пакетов в WSL может вызвать у вас большие трудности.
#wsl
В последнее время у меня появилась необходимость работы с некоторыми программами, которые не работают на Windows и требуются либо Mac, либо Linux. Поэтому я решил попробовать установить WSL на свой компьютер, описать процесс и возникшие сложности.
Подсистема Windows для Linux (WSL) позволяет разработчикам запускать среду GNU/Linux с большинством программ командной строки, служебных программ и приложений непосредственно в Windows без каких-либо изменений и необходимости использовать традиционную виртуальную машину или двойную загрузку.
Простыми словами - это виртуалка Linux на Windows. Вот тут можно узнать об этом чуть больше:
https://learn.microsoft.com/ru-ru/windows/wsl/about
А по этому описанию мы и будем производить установку:
https://learn.microsoft.com/ru-ru/windows/wsl/install
Вообще, все должно происходить просто и быстро, но у меня уже на первых шагах появились некоторые трудности.
При попытке выполнить команду wsl --install в терминале, у меня возникла ошибка 0xc004000d. Немного погуглив, я нашел ее решение.
Вам нужно зайти в панель управление в Windows (обратите внимание, не Параметры, а именно Панель управления), дальше идем в раздел Программы и кликаем на пункт Включение и отключение компонентов Windows. Появится новое окошко и там нужно поставить флажок на пункте Подсистема Windows для Linux. Затем перезагружаем компьютер.
Теперь можно выполнить необходимую команду.
Но и тут могут возникнуть трудности. Терминал вам может показать список вообще всех доступных команд, вместо того чтобы начать установку. В этом случае необходимо чуть модифицировать команду до:
wsl --install -d Ubuntu 2
После этого возможна еще одна перезагрузка компьютера или же откроется окно Ubuntu и система попросит вас придумать имя и пароль.
Теперь в нашем терминале будет доступен еще один вид Ubuntu. Его можно найти, если нажать на небольшую стрелочку "вниз" рядом со вкладкой терминала.
Дальше можно настроить совместимость нашего редактора кода - VS Code.
Запускаем редактор, открываем раздел плаггинов и ищем Remote Development от Microsoft. Это пакет из 4 приложений, так что устанавливаем их все.
После установки плаггина в левом нижнем углу редактора появится синяя кнопка со стрелками в разные стороны. Если кликнуть по ней, то откроется окошко, где в параметрах можно выбрать подключение к WSL.
Вероятнее всего, после запуска вашего редактора кода в WSL, вам потребуется переустановить плаггины для работы с Solidity.
Как я понял, WLS установит вам на компьютер чистую Linux систему, другими словами у вас не будет доступа к своим папкам на Windows и нужно будет необходимые файлы и папки переносить вручную.
Рекомендую в терминале создать отдельную папку Development / Audits, чтобы самому не потеряться позже.
Это делается с помощью команд:
mkdir Audits
cd Audits/
Также, есть вероятность, что потребуется заново установить и настроить git, python, Node.js, npm, yarn и другие программы, которыми вы пользовались на Windows.
Хочу обратить ваше внимание на то, что есть две версии WSL и WSL2.
Не могу сейчас сказать, в чем там разница, но в моем случае возникали проблемы при обновлении Node.js и npm с первой версией WSL.
Также уточню, что вам желательно иметь уже некий опыт работы с Linux системами, иначе настройка всех пакетов в WSL может вызвать у вас большие трудности.
#wsl
👍1
Курс по безопасности от Патрика Коллинса
Если вы не в курсе, то Патрик Коллинс (тот кто создал 32 часовой курс по Solidity и 27 часовой по Foundry), планирует запустить платформу для обучения всем необходимым навыкам по web3 - Cyfrin Updraft.
На данный момент доступ получают только по предварительной записи в порядке очереди. Но...
Они решили открыть один курс для общего доступа без всяких кодов.
Этот курс по Безопасности и аудиту. Рассчитан на 27 часов. Как я понял, сейчас это "звездный" курс для привлечения внимания от популярных деятелей в сфере аудита: Tincho, Owen Thrum, Andi Li, Johny Time, Pashov и других.
Каждый урок занимает 5 - 15 минут. Можно проходить в своем темпе. Уверен, это достойное занятие для себя до конца года.
Пройти курс можно тут:
https://updraft.cyfrin.io/courses/security
Будет интересно узнать ваше мнение об этом.
#updraft
Если вы не в курсе, то Патрик Коллинс (тот кто создал 32 часовой курс по Solidity и 27 часовой по Foundry), планирует запустить платформу для обучения всем необходимым навыкам по web3 - Cyfrin Updraft.
На данный момент доступ получают только по предварительной записи в порядке очереди. Но...
Они решили открыть один курс для общего доступа без всяких кодов.
Этот курс по Безопасности и аудиту. Рассчитан на 27 часов. Как я понял, сейчас это "звездный" курс для привлечения внимания от популярных деятелей в сфере аудита: Tincho, Owen Thrum, Andi Li, Johny Time, Pashov и других.
Каждый урок занимает 5 - 15 минут. Можно проходить в своем темпе. Уверен, это достойное занятие для себя до конца года.
Пройти курс можно тут:
https://updraft.cyfrin.io/courses/security
Будет интересно узнать ваше мнение об этом.
#updraft
🔥11👍1
Тесты с хуками для V4
Небольшой пост - заметка.
Как вы знаете в Uniswap V4 появились так называемые хуки.
И недавно компания начала работать с тестовой сетью Conduit, с помощью которой можно попробовать поработать с хуками и посмотреть как они исполняются.
Я сам еще не экспериментировал с "песочницей", поэтому просто оставляю ссылку на документацию:
https://docs.uniswapfoundation.org/overview/conduit-testnet
Мало ли кому будет интересно поразбирать хуки на новогодних праздниках.
#v4 #unswap #hooks
Небольшой пост - заметка.
Как вы знаете в Uniswap V4 появились так называемые хуки.
И недавно компания начала работать с тестовой сетью Conduit, с помощью которой можно попробовать поработать с хуками и посмотреть как они исполняются.
Я сам еще не экспериментировал с "песочницей", поэтому просто оставляю ссылку на документацию:
https://docs.uniswapfoundation.org/overview/conduit-testnet
Мало ли кому будет интересно поразбирать хуки на новогодних праздниках.
#v4 #unswap #hooks
👍1
Ethereum Yellow Paper Course
Как мы знаем, одним из основополагающих документов блокчейна Эфириум является его Yellow Papers. Будем честны, мало кто из разработчиков осиливает его, да и вообще читал "от и до" хотя бы раз.
А тут на Ютуб недавно наткнулся на небольшой трехчасовой курс по этим Желтым страницам. Да, он на английском языке, но и сам документ также на английском. Думаю, многим он будет полезен и придется кстати.
Тут еще хочу уточнить, что данный курс, по моему мнению, нужно смотреть после первого знакомства с Solidity и ваших первых простых смарт контрактов. Так, да, можно, конечно, просмотреть курс, но он мало что будет понятно в аспекте работы с кодом.
До Нового года осталось только две недели, и, по сути, неделя, когда мы еще готовы работать и учиться. Не теряйте это время даром!
Посмотрите небольшой курс в свободное время:
https://youtu.be/e84V1MxRlYs
Полчаса в день и к концу недели вы справитесь с ним!
#yellowpapers #yellow #course
Как мы знаем, одним из основополагающих документов блокчейна Эфириум является его Yellow Papers. Будем честны, мало кто из разработчиков осиливает его, да и вообще читал "от и до" хотя бы раз.
А тут на Ютуб недавно наткнулся на небольшой трехчасовой курс по этим Желтым страницам. Да, он на английском языке, но и сам документ также на английском. Думаю, многим он будет полезен и придется кстати.
Тут еще хочу уточнить, что данный курс, по моему мнению, нужно смотреть после первого знакомства с Solidity и ваших первых простых смарт контрактов. Так, да, можно, конечно, просмотреть курс, но он мало что будет понятно в аспекте работы с кодом.
До Нового года осталось только две недели, и, по сути, неделя, когда мы еще готовы работать и учиться. Не теряйте это время даром!
Посмотрите небольшой курс в свободное время:
https://youtu.be/e84V1MxRlYs
Полчаса в день и к концу недели вы справитесь с ним!
#yellowpapers #yellow #course
👍9❤1
С нуля до PRO в ZK
Пока идет распродажа предыдущих модулей курса, делюсь подборкой материалов от крутого аудитора Hickup.
Да, ее выложили еще до того аудита-миллионика, но все руки никак не доходили просмотреть. Здесь Hickup выложил свой путь, по которому он учился этой технологии.
Надо сказать, что он аудитор опытный и материал соответственно тоже, поэтому гайд подойдет скорее для тех, кто уже хорошо знаком с роллапами и L2 сетями, т.е. для продвинутых пользователей.
Если же вы совсем новичок, но очень хотите изучить эту тему, то начните с канала Ильи, в частности посмотрите те уроки, в которых говорится про роллапы и zero knowledge.
А уже потом обратитесь к подборке Hickup:
https://sunrise-clerk-234.notion.site/Hickup-s-ZK-Journey-affa9ce9cdf44a33b3549c37f908521a
Вообще здорово, что крутые разработчики и аудиторы за рубежом делятся своими подборками и помогают новичкам с "фильтрацией" достойных ресурсов и материалов.
#zk #hickup
Пока идет распродажа предыдущих модулей курса, делюсь подборкой материалов от крутого аудитора Hickup.
Да, ее выложили еще до того аудита-миллионика, но все руки никак не доходили просмотреть. Здесь Hickup выложил свой путь, по которому он учился этой технологии.
Надо сказать, что он аудитор опытный и материал соответственно тоже, поэтому гайд подойдет скорее для тех, кто уже хорошо знаком с роллапами и L2 сетями, т.е. для продвинутых пользователей.
Если же вы совсем новичок, но очень хотите изучить эту тему, то начните с канала Ильи, в частности посмотрите те уроки, в которых говорится про роллапы и zero knowledge.
А уже потом обратитесь к подборке Hickup:
https://sunrise-clerk-234.notion.site/Hickup-s-ZK-Journey-affa9ce9cdf44a33b3549c37f908521a
Вообще здорово, что крутые разработчики и аудиторы за рубежом делятся своими подборками и помогают новичкам с "фильтрацией" достойных ресурсов и материалов.
#zk #hickup
❤3
Foundry Cheatsheet от MiloTruck
Если вы не в курсе, MiloTruck стал лучшим аудитором на площадке code4rena в этом году, заработав на конкурсах 160К!
Как я понял из обсуждений в Твиттере, он для себя сделал небольшой файл-помощник по работе с Foundry, где в удобном формате расписал популярные команды и сниппеты кода для более быстрого написания тестов.
Мне, как человеку, который последние пару месяцев прям задрачивал с написание тестов и вообще этой темой, очень зашел этот Cheatsheet.
Вы можете открыть его в отдельном окошке и подглядывать при написании своих тестов:
https://milotruck.github.io/blog/Foundry-Cheatsheet/
P.S. Вы также можете скопировать его к себе, постепенно дополняя или обновляя информацию в нем.
#foundry #test #cheatsheet
Если вы не в курсе, MiloTruck стал лучшим аудитором на площадке code4rena в этом году, заработав на конкурсах 160К!
Как я понял из обсуждений в Твиттере, он для себя сделал небольшой файл-помощник по работе с Foundry, где в удобном формате расписал популярные команды и сниппеты кода для более быстрого написания тестов.
Мне, как человеку, который последние пару месяцев прям задрачивал с написание тестов и вообще этой темой, очень зашел этот Cheatsheet.
Вы можете открыть его в отдельном окошке и подглядывать при написании своих тестов:
https://milotruck.github.io/blog/Foundry-Cheatsheet/
P.S. Вы также можете скопировать его к себе, постепенно дополняя или обновляя информацию в нем.
#foundry #test #cheatsheet
❤🔥7👍2
Где следить за новостями?
Сегодня хочу поделиться своими ресурсами, которые позволяют мне следить за последними новостями в сфере разработки, тестировани, да и в целом, миром крипты (за исключением котировок, торгов, аирдропов и остальной ереси).
Начнем с наших Телеграм каналов, где вы можете задавать вопросы и общаться:
1. Ethereum Ru
2. Solidity DEV (Ethereum)
3. DEV: Рубиновые тона: ЧАТ
4. Learn solidity audit - для аудиторов
Каналы на английском языке:
1. Solodit | Auditors
2. Daily Security Web3
3. DEFI Scam Check
4. Kotya security
5. Rektoff
6. rekt.news Newsflash
7. Web3 Security as a Business
Дискорд каналы:
1. Code4rena
2. Cyfrin (от Патрика Коллинса)
3. Guardian Audits (от Owne Thum)
4. Immunefi
5. Secureum
6. Open Sence
В Дискорд каналах можно не только следить за новыми конкурсными аудитами и общаться с другими пользователями, но и получать ссылки на крутые обучающие статьи, задавать вопросы по тестам и коду, а также следить за стримами, куда приглашают видных деятелей сферы. Всем рекомендую скачать и присоединиться к этим серверам.
Ну, и, конечно, Твиттер! Так сложилось, что сообщество разработчиков и аудиторов собралось в Твиттере и все самые последние новости проходят сначала там, а уже потом разлетаются по Телеграм каналам, дискордам и другим сетям. Каждому современному web3 специалисту нужно быть там.
Для начала мой канал:
1. RightNowIn
Не спрашивайте, почему такое название... Так сложилось исторически...
И другие каналы:
1. Akshay Srivastav
2. Vlad B.
3. Dimitar Tsvetanov
4. Koolex
5. DadeKuma
6. MiloTruck
7. Alex the Entreprenerd
8. btk
9. Kristian Apostolov
10. HE1M
11. 0xladboy
12. HickupHH3
13. Chinmay Farkya
14. 0x52
15. bytes032.xyz
16. Faith
17. patrickd
18. zzykxx
19. Trust
20. afeli.eth
21. WINTΞR
22. philogy
23. WATCHPUG
24. 0xrudra
25. Samrat Gupta
26. Christoph Michel
27. Officer's Notes
28. samczsun
29. Gerard Persoon
30. peakbolt
Компании
1. Chainlink
2. Trail of Bits
3. OpenZeppelin
4. Uniswap Labs
5. Hardhat
6. Code4rena
7. Alchemy | The web3 developer platform
8. Etherscan
9. Immunefi
10. rekt
11. Paradigm CTF
12. QuillAudits
13. RareSkills
Если у вас есть кто-то еще на примете, буду рад увидеть рекомендации в комментариях!
#twitter #discord #telegram
Сегодня хочу поделиться своими ресурсами, которые позволяют мне следить за последними новостями в сфере разработки, тестировани, да и в целом, миром крипты (за исключением котировок, торгов, аирдропов и остальной ереси).
Начнем с наших Телеграм каналов, где вы можете задавать вопросы и общаться:
1. Ethereum Ru
2. Solidity DEV (Ethereum)
3. DEV: Рубиновые тона: ЧАТ
4. Learn solidity audit - для аудиторов
Каналы на английском языке:
1. Solodit | Auditors
2. Daily Security Web3
3. DEFI Scam Check
4. Kotya security
5. Rektoff
6. rekt.news Newsflash
7. Web3 Security as a Business
Дискорд каналы:
1. Code4rena
2. Cyfrin (от Патрика Коллинса)
3. Guardian Audits (от Owne Thum)
4. Immunefi
5. Secureum
6. Open Sence
В Дискорд каналах можно не только следить за новыми конкурсными аудитами и общаться с другими пользователями, но и получать ссылки на крутые обучающие статьи, задавать вопросы по тестам и коду, а также следить за стримами, куда приглашают видных деятелей сферы. Всем рекомендую скачать и присоединиться к этим серверам.
Ну, и, конечно, Твиттер! Так сложилось, что сообщество разработчиков и аудиторов собралось в Твиттере и все самые последние новости проходят сначала там, а уже потом разлетаются по Телеграм каналам, дискордам и другим сетям. Каждому современному web3 специалисту нужно быть там.
Для начала мой канал:
1. RightNowIn
Не спрашивайте, почему такое название... Так сложилось исторически...
И другие каналы:
1. Akshay Srivastav
2. Vlad B.
3. Dimitar Tsvetanov
4. Koolex
5. DadeKuma
6. MiloTruck
7. Alex the Entreprenerd
8. btk
9. Kristian Apostolov
10. HE1M
11. 0xladboy
12. HickupHH3
13. Chinmay Farkya
14. 0x52
15. bytes032.xyz
16. Faith
17. patrickd
18. zzykxx
19. Trust
20. afeli.eth
21. WINTΞR
22. philogy
23. WATCHPUG
24. 0xrudra
25. Samrat Gupta
26. Christoph Michel
27. Officer's Notes
28. samczsun
29. Gerard Persoon
30. peakbolt
Компании
1. Chainlink
2. Trail of Bits
3. OpenZeppelin
4. Uniswap Labs
5. Hardhat
6. Code4rena
7. Alchemy | The web3 developer platform
8. Etherscan
9. Immunefi
10. rekt
11. Paradigm CTF
12. QuillAudits
13. RareSkills
Если у вас есть кто-то еще на примете, буду рад увидеть рекомендации в комментариях!
#twitter #discord #telegram
👍15❤1
Последний пост этого года
С понедельника я ухожу в отпуск на две недели, поэтому время немного порефлексировать о прошедшем годе.
Если говорить кратко:
1. На канале вышло более 970 постов;
2. За год количество участников +800!
3. Был запущен наш мини курс для начинающих;
4. Проведены 3 модуля курса;
5. Модуль 4 выйдет уже в следующем месяце;
6. Написан крутой цикл из 39 постов по Foundry;
7. Я изучил несколько дополнительных программ для проведения тестов;
8. Принял участие в 10+ конкурсных аудитах (полноценно и 30+ изучая код);
9. Нашел 5 high и 15 med в конкурсах;
10. Провел 4 соло аудита, в которых нашел 10 high и 30+ med проблем;
11. Дал 15 консультаций о том, как начать карьеру в web3;
12. Прошел отбор и стажировался в Pessimistic;
Это был год огромной ежедневной работы и обучения. И, что самое главное, еще учиться и учиться в следующем году.
Вообще, у мои планы входит:
По курсу и модулям:
1. Провести 4 модуль курса;
2. Если будет достаточное количество желающих, провести и 5 модуль.
3. Если будет достаточное количество желающих, повторить курс с 1 модуля;
По Телеграм каналу:
1. Написать цикл постов про опкоды и assembly;
2. Написать цикл постов про математику в Defi;
По аудиту и конкурсам:
1. Больше времени уделять конкурсным аудитам;
2. Пробиться в топ 50 на code4rena за год;
3. Провести 10+ соло аудитов;
По проектам:
1. Запустить, наконец, проект по тестам на зарубежный рынок;
За год я понял, что web3 - это не определенный набор программ и языков, выучив которые вы сможете свободно работать в любой компании, а скорее процесс движения вместе со всей сферой.
Если хотите вступить на этот путь, будьте готовы постоянно учиться. И учится много!
Вообще, на определенном этапе вы сами поймете, чем хотите заниматься больше:
1. Писать смарт контракты и различные протоколы;
2. Проводить аудит и стать белым хакером;
3. Уйти в тестирование;
4. Разбирать взломы и отслеживать транзакции в разных сетях;
5. Заниматься узлами и стать валидатором;
Все это направления, которые каждый выбирает для себя после первых уроков с EVM и Solidity.
Сложно? Да. Интересно? Еще бы! Прибыльно? Определенно!
Однажды мы сделали правильный выбор!
Желаю вам всем успехов в профессиональной среде в новом году!
С Наступающим!
#last2023
С понедельника я ухожу в отпуск на две недели, поэтому время немного порефлексировать о прошедшем годе.
Если говорить кратко:
1. На канале вышло более 970 постов;
2. За год количество участников +800!
3. Был запущен наш мини курс для начинающих;
4. Проведены 3 модуля курса;
5. Модуль 4 выйдет уже в следующем месяце;
6. Написан крутой цикл из 39 постов по Foundry;
7. Я изучил несколько дополнительных программ для проведения тестов;
8. Принял участие в 10+ конкурсных аудитах (полноценно и 30+ изучая код);
9. Нашел 5 high и 15 med в конкурсах;
10. Провел 4 соло аудита, в которых нашел 10 high и 30+ med проблем;
11. Дал 15 консультаций о том, как начать карьеру в web3;
12. Прошел отбор и стажировался в Pessimistic;
Это был год огромной ежедневной работы и обучения. И, что самое главное, еще учиться и учиться в следующем году.
Вообще, у мои планы входит:
По курсу и модулям:
1. Провести 4 модуль курса;
2. Если будет достаточное количество желающих, провести и 5 модуль.
3. Если будет достаточное количество желающих, повторить курс с 1 модуля;
По Телеграм каналу:
1. Написать цикл постов про опкоды и assembly;
2. Написать цикл постов про математику в Defi;
По аудиту и конкурсам:
1. Больше времени уделять конкурсным аудитам;
2. Пробиться в топ 50 на code4rena за год;
3. Провести 10+ соло аудитов;
По проектам:
1. Запустить, наконец, проект по тестам на зарубежный рынок;
За год я понял, что web3 - это не определенный набор программ и языков, выучив которые вы сможете свободно работать в любой компании, а скорее процесс движения вместе со всей сферой.
Если хотите вступить на этот путь, будьте готовы постоянно учиться. И учится много!
Вообще, на определенном этапе вы сами поймете, чем хотите заниматься больше:
1. Писать смарт контракты и различные протоколы;
2. Проводить аудит и стать белым хакером;
3. Уйти в тестирование;
4. Разбирать взломы и отслеживать транзакции в разных сетях;
5. Заниматься узлами и стать валидатором;
Все это направления, которые каждый выбирает для себя после первых уроков с EVM и Solidity.
Сложно? Да. Интересно? Еще бы! Прибыльно? Определенно!
Однажды мы сделали правильный выбор!
Желаю вам всем успехов в профессиональной среде в новом году!
С Наступающим!
#last2023
🔥34❤7👍6❤🔥1