Тестовые задания для Web3 Developer/Auditor
Тут я собрал тестовые задания по блокчейну на позицию разработчика/аудитора
Задания для девелоперов
Сделать простенький фарминг-контракт, который покрыт юнит тестами и задеплоен на тестовую сеть zksync
Что может контракт и как он работает:
1. Админ может пополнять на токен А
2. Любой пользователь может депозитить токен Б внутрь контракта
3. Каждую секунду всем пользователям раздается настраиваемое админом количество токенов А в пропорции от обьема вложенных денег в момент начисления
4. Пользователь может вывести все что вложил + его награды
можно не только деплоить на тестнет, но и на контейнерную ноду https://github.com/matter-labs/local-setup
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
Тестовое на позицию fullstack + solidity разраба: https://github.com/kairos-loan/typescript-sol-recruitement-test
И имплементация от чувака, которого, судя по всему, приняли на работу: https://github.com/baptiste-marchand/Full-Stack-Blockchain-test
Задания для Аудиторов
По ссылке можно посмотреть и решить 5 задач
https://docs.google.com/document/d/1QuIu3zM3fexDwpHMfW7p7sBi5OZOjGFx6j5uGzgUJF0/edit?usp=sharing
https://docs.google.com/forms/d/e/1FAIpQLSf-KWdSTKwqCrBVzdf22tEaAsEgLZwLTQMZaOdVw02O4Ht3Zw/viewform
Нужно разобраться в коде. Написать небольшое описание того, как работает код.
Также нужно выписать уязвимости, пофиксить их в коде.
Код можно найти тут.(https://gist.github.com/korepkorep/e929713a793ceeffc09e036da9b76db5#file-vesting)
Есть игра King of the Ether:
- контракт инициализируется с 1 ether на балансе;
- задача игры - застейкать эфира больше, чем остальные пользователи.
- каждый человек имеет право докинуть эфира на контракт.
- спустя 30 дней после создания контракта игра считается завершённой. И тот, кто больше всех застейкал эфира, получает в награду ещё один эфир.
- человек не имеет права вывести эфир пока игра не закончилась.
- когда игра закончилась, каждый человек может вызвать функцию withdraw чтобы забрать свой эфир.
Нужно написать контракт для этой игры, уязвимый к reentrancy, а так же написать атакующий контракт.
Нужно сравнить реализацию ERC20 токена со стандартом (https://eips.ethereum.org/EIPS/eip-20) и выписать отличия.
Код можно найти тут. (https://gist.github.com/korepkorep/e929713a793ceeffc09e036da9b76db5#file-vulnerable-erc20)
Данные контракты образуют сложную цепочку вызовов. Нужно разобраться в коде. (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колько контрактов деплоится? Какие?
Нужно разобраться в коде, (https://gist.github.com/korepkorep/64755dd8a31d28c5963624d64ff9d05c#file-airdrop) выписать ошибки и прислать контракт с фиксами.
Нужно разобраться, как запустить 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