Что можешь рассказать про язык Solidity?
Solidity - это интерпретируемый язык?
Есть ли типизация в Solidity? Если есть, то какая? Если нету, то почему?
Для чего был разработан этот язык?
Что такое EVM?
Понимает ли EVM язык Solidity?
Как дебажить написанный код? Есть ли в языке console.log
?
Введение в смарт контракты
Что такое смарт-контракт?
Какие особенности есть у смарт-контрактов?
Можно ли модифицировать смарт-контракт после деплоя?
Где можно посмотреть код задеплоенного смарт-контракта?
Могут ли контракты взаимодействовать друг с другом?
Может ли контракт обращаться к API сторонних сервисов.
На каких языках пишутся смарт-контракты?
Что такое gas?
Кто и как платит газ?
Что будет если газ закончится в рамках транзакции?
В какие сети можно разворачивать смарт-контракты?
Что такое ABI?
Какие функции не попадут в ABI?
Что такое bytecode?
Как bytecode связан с ABI?
Структура контракта Solidity
Что содержит в себе смарт-контракт? Какая структура смарт-контракта?
Что такое pragma?
Какие виды лицензий бывают?
Что такое constructor()
? Является ли его объявление обязательным? Когда выполняется код внутри конструктора?
Что такое переменные состояния(state variables)? Что такое локальные переменные? В чем отличие?
Что такое constant и immutable? В чем разница? Для каких типов переменных применимы constant и immutable?
Что такое variable shadowing?
Для чего нужны события?
Может ли контракт читать события?
Может ли смарт-контракт удалять события?
Для чего нужны модификаторы?
Можно ли в одном файле создавать множество смарт-контрактов?
Что такое selfdestruct и как работает?
Что можешь рассказать про value types?
Booleans
Integers. Int. Uint.
Address
Массивы байтов с фиксированным размером(bytes1, …, bytesN).
Массив байт c динамическим размером(bytes).
Адресные литералы
Дробные и целочисленные литералы
Строковые литералы
Литералы Юникод
Шестнадцатеричные литералы
Типы функций
Что такое uint
и чем он отличается от uint8
, uint256
?
Чем отличаются uint
и int
?
Какие есть особенности у типа address?
Чем отличаются динамический массив и массив с фиксированной длиной?
Что такое Enum?
Как получить наименьшее и наибольшее значение из Enum?
Можно ли объявлять Enum за пределами контракта?
Что можешь рассказать про reference types?
Data location(storage, memory, calldata)
Массивы(динамические и с фиксированной длиной)
Структуры
Как получить длину массива?
Как добавлять данные в массив?
Как обойти массив?
Как удалить произвольный элемент из массива?
Что можешь рассказать про mapping types?
Могут ли mapping вкладываться друг в друга?
Как обойти mapping?
Что такое значение по умолчанию? Чему будут равны по умолчанию различные виды переменных?
Тернарный оператор. Составные операторы. Delete оператор.
Неявные и явные преобразования типов. В чем разница?
Можно ли объявить тип для undefined или null?
Units and global variables
Как использовать Ether units и Time units?
Что такое глобальная переменная block?
Что такое глобальная переменная msg?
Чем отличается tx.origin и msg.sender?
Для чего используется abi.encode и abi.decode?
В чем разница между abi.encode и abi.encodePacked? Есть ли какие-нибудь нюансы в выборе, что использовать?
В чем разница между encodeWithSignature и encodeWithSelector?
Как работает конкатенация строк и байтов?
Что ты знаешь про Error Handling(assert, require, revert)?
В чем разница между assert и revert?
Какие есть перегрузки для require и revert?
Как работает selfdestruct?
Выражения и структуры управления
Какие есть циклы в Solidity? Можно ли использовать ключевые слова break, continue, return?
Будет ли валиден следующий код для conditional statements выражения?
Зачем делать пропуск именования в определение аргументов функции?
// SPDX-License-Identifier: GPL-3.0
pragma solidity >= 0.4.22 < 0.9.0 ;
contract C {
// omitted name for parameter
function func (uint k , uint ) public pure returns (uint ) {
return k;
}
}
Как создать новый контракт через new?
Как создать контракт через create2?
Как работает деструктуризация присвоений и возврат нескольких значений?
Что такое checked/unchecked?
Как работать с try/catch?
Видимость и геттеры в контракте
Какие области видимости существуют у переменных состояния?
Какая область видимости у переменных состояния по умолчанию?
Какая область видимости не может быть назначена переменной состояния?
Можно ли считать переменную private
извне?
Какие области видимости существуют у функций контракта?
В чем разница между external и public?
В чем разница между internal и private?
Что такое геттер функции?
Как вернуть несколько значений из функции?
Что означают модификаторы view, pure, payable?
Зачем нужны специальные функции fallback и receive?
Что будет если отправить в контракт эфир где нет fallback/receive?
Как работает перегрузка функций?
Как реализовать наследование?
Что такое ключевые слова virtual и override?
Можно ли наследоваться от нескольких контрактов?
Как вызвать функцию родителя?
Как переопределить функцию в дочернем контракте?
Можно ли изменить видимость функции? Например с external на public?
Можно ли изменить с view на pure?
Что такое абстрактные контракты?
Что такое интерфейсы?
Для чего нужны интерфейсы в solidity?
В чем отличие интерфейсов от абстрактных контрактов?
Что такое библиотека?
Как подключить библиотеку?