June 24, 2023

Тестовые задания для Web3 Developer/Auditor

Тут я собрал тестовые задания по блокчейну на позицию разработчика/аудитора

Задания для девелоперов

1 Задача

Сделать простенький фарминг-контракт, который покрыт юнит тестами и задеплоен на тестовую сеть zksync
Что может контракт и как он работает:
1. Админ может пополнять на токен А
2. Любой пользователь может депозитить токен Б внутрь контракта
3. Каждую секунду всем пользователям раздается настраиваемое админом количество токенов А в пропорции от обьема вложенных денег в момент начисления
4. Пользователь может вывести все что вложил + его награды

можно не только деплоить на тестнет, но и на контейнерную ноду https://github.com/matter-labs/local-setup

2 Задача

The goal of this task is to create a Solidity contract that interacts with the Uniswap V3 protocol. The contract should be able to receive any pool of liquidity and perform the following actions:

1 Add liquidity to the pool.
2 Distribute the liquidity across three different positions:
A. Position A: Set the tick-upper below the current tick.
B. Position B: Set the tick-upper above the current tick and the tick-lower below the current tick.
C. Position C: Set the tick-lower above the current tick.
3 Withdraw liquidity from all three positions when required.
4 Implement a function to query the status of each position, including the amount of liquidity and the current ticks.
5 Implement proper access control and security measures to prevent unauthorized actions on the contract.
6 Write unit tests to ensure that the contract functions correctly and handles edge cases.
7 Deploy the contract on polygon

Framework, languages, and versions:
1 Solidity: Version 0.8.x
2 Hardhat: Version 2.x (for development and testing)
3 ethers.js: Version 5.x (for contract interaction)
4 React: Version 17.x (for frontend interface) If any
5 Node.js: Version 16.x

Задача 3

Тестовое на позицию fullstack + solidity разраба: https://github.com/kairos-loan/typescript-sol-recruitement-test

И имплементация от чувака, которого, судя по всему, приняли на работу: https://github.com/baptiste-marchand/Full-Stack-Blockchain-test

Задания для Аудиторов

Сборка задач от MixBytes

По ссылке можно посмотреть и решить 5 задач

https://docs.google.com/document/d/1QuIu3zM3fexDwpHMfW7p7sBi5OZOjGFx6j5uGzgUJF0/edit?usp=sharing

Тест Smart Contract Security Engineer Questionnaire

https://docs.google.com/forms/d/e/1FAIpQLSf-KWdSTKwqCrBVzdf22tEaAsEgLZwLTQMZaOdVw02O4Ht3Zw/viewform

Задача Vesting

Нужно разобраться в коде. Написать небольшое описание того, как работает код.
Также нужно выписать уязвимости, пофиксить их в коде.
Код можно найти тут.(https://gist.github.com/korepkorep/e929713a793ceeffc09e036da9b76db5#file-vesting)

Задача King of the Ether

Есть игра King of the Ether:
- контракт инициализируется с 1 ether на балансе;
- задача игры - застейкать эфира больше, чем остальные пользователи.
- каждый человек имеет право докинуть эфира на контракт.
- спустя 30 дней после создания контракта игра считается завершённой. И тот, кто больше всех застейкал эфира, получает в награду ещё один эфир.
- человек не имеет права вывести эфир пока игра не закончилась.
- когда игра закончилась, каждый человек может вызвать функцию withdraw чтобы забрать свой эфир.

Нужно написать контракт для этой игры, уязвимый к reentrancy, а так же написать атакующий контракт.

Задача Vulnerable ERC20

Нужно сравнить реализацию ERC20 токена со стандартом (https://eips.ethereum.org/EIPS/eip-20) и выписать отличия.

Код можно найти тут. (https://gist.github.com/korepkorep/e929713a793ceeffc09e036da9b76db5#file-vulnerable-erc20)

Задача Delegate call

Данные контракты образуют сложную цепочку вызовов. Нужно разобраться в коде. (https://gist.github.com/korepkorep/64755dd8a31d28c5963624d64ff9d05c#file-delegate-call) И ответить на вопросы:

0. Какой контракт является точкой входа?
1. Где в коде вызывается функция onERC721Received из Vault? Нужно выписать цепочку вызовов
2. Чему равны address(this) и msg.sender при вызове Controller.transferAssetToVault?
3. Вернет ли require revert в modifier whenAssetDepositAllowed (контракт Vault ) или нет? Почему?
4. Правильно ли отработает modifier onlyDelegatecall из контракта Controller? Почему?
5. Cколько контрактов деплоится? Какие?

Задача Airdrop

Нужно разобраться в коде, (https://gist.github.com/korepkorep/64755dd8a31d28c5963624d64ff9d05c#file-airdrop) выписать ошибки и прислать контракт с фиксами.

Задача NFT

Нужно разобраться, как запустить slither (https://github.com/crytic/slither) на данном контракте, (https://gist.github.com/korepkorep/64755dd8a31d28c5963624d64ff9d05c#file-nft) и провалидировать вхождения всех уровней критичности, кроме informational. Все те, которые подтвердите, выписать.

Важно: вхождения для контрактов OpenZeppelin валидировать не нужно!

Для запуска slither можно использовать следующую команду(не исключайте контракты OpenZeppelin через флаги, так как некоторые вхождения могут не отобразиться):
slither . --solc-disable-warnings --exclude-informationa

Автор: https://t.me/one_eyes

Если для вас было интересно и полезно можете подписаться)