|
6 | 6 |
|
7 | 7 | ## Какие навыки даст задание? |
8 | 8 |
|
9 | | - Важно! Круто если получится воспроизвести фунционал контракта без подсматриваний в урок. |
10 | | - Либо итеративно: например, есть понимание как добавить функционал с получением цены -> также стало понятно как это проверить на контракте -> идешь и делаешь пока не получиться (при этом пользуясь докой solidity, chainlink и шпаргалками solidity-by-example если нужно). Это позволит хорошо закрепить материал. |
| 9 | +> Важно! Круто если получится воспроизвести функционал контракта без подсматриваний в урок. Либо итеративно: например, есть понимание как добавить функционал с получением цены -> также стало понятно как это проверить на контракте -> идешь и делаешь пока не получиться (при этом пользуясь докой solidity, chainlink и шпаргалками solidity-by-example если нужно). Это позволит хорошо закрепить материал. |
11 | 10 |
|
12 | 11 | 1. Понимание как работать с эфиром на контрактах: |
13 | | - - работа и с глобальной переменной `msg.value` |
14 | | - - отправка эфира через `transfer`, `send` и `call` |
15 | | - - работа с функциями `receive` и `fallback` |
| 12 | + - работа и с глобальной переменной `msg.value` |
| 13 | + - отправка эфира через `transfer`, `send` и `call` |
| 14 | + - работа с функциями `receive` и `fallback` |
16 | 15 | 2. Понимание как получить цену из оракла для нужной пары токенов; |
17 | 16 | 3. Как использовать библиотеки, как сделать свою библиотеку и использовать для определенного типа; |
18 | 17 | 4. Итерация по массиву, сброс массива; |
19 | | -5. Написание и использование кастомного модификатора; |
| 18 | +5. Написание и использование собственного модификатора; |
20 | 19 | 6. Написание кастомных ошибок вместо `require`; |
21 | 20 | 7. Небольшие оптимизации по газу. |
22 | 21 |
|
|
31 | 30 | 7. Как работать с числами с плавающей точкой в solidity? Что такое `decimals`? Для чего нужен `decimals` при расчете цен токенов? |
32 | 31 | 8. Зачем в функции `getPrice` при получении значения `answer` запятые перед и после значения? Как ты объяснишь запись `uint256(answer * 10000000000)`? |
33 | 32 | ```js |
34 | | - function getPrice() internal view returns (uint256) { |
35 | | - AggregatorV3Interface priceFeed = AggregatorV3Interface( |
36 | | - 0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e |
37 | | - ); |
38 | | - (, int256 answer, , , ) = priceFeed.latestRoundData(); |
39 | | - |
40 | | - return uint256(answer * 10000000000); |
41 | | - } |
| 33 | + function getPrice() internal view returns (uint256) { |
| 34 | + AggregatorV3Interface priceFeed = AggregatorV3Interface( |
| 35 | + 0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e |
| 36 | + ); |
| 37 | + (, int256 answer, , , ) = priceFeed.latestRoundData(); |
| 38 | + |
| 39 | + return uint256(answer * 10000000000); |
| 40 | + } |
42 | 41 | ``` |
43 | 42 | 9. Как сбросить все значения массива? |
44 | 43 | 10. Рассказать про три способа отправки эфира. Какой способ предпочтительный и почему? Как и зачем предавать данные в `call`? |
45 | 44 | 11. Посмотри код ниже, объясни что тут происходит. Что означает запись `address(this).balance`? |
46 | 45 | ```js |
47 | | - (bool callSuccess, ) = payable(msg.sender).call{value: address(this).balance}(""); |
48 | | - require(callSuccess, "Call failed"); |
| 46 | + (bool callSuccess, ) = payable(msg.sender).call{value: address(this).balance}(""); |
| 47 | + require(callSuccess, "Call failed"); |
49 | 48 | ``` |
50 | 49 | 12. Как написать кастомный модификатор? Может ли кастомный модификатор принимать аргументы? Можно ли писать код в модификаторе после `_;`? |
51 | 50 | 13. Для чего нужны `receive` и `fallback`? Когда их нужно использовать? Что будет если мы отправим эфир на контракт но там не будет этих функций? Как связаны `msg.data` и `fallback`? |
|
0 commit comments