Solidity. Смарт контракты и аудит – Telegram
Solidity. Смарт контракты и аудит
2.62K subscribers
246 photos
7 videos
18 files
547 links
Обучение Solidity. Уроки, аудит, разбор кода и популярных сервисов
Download Telegram
Что такое книги заявок (ордеров)?

В постах про АММ несколько раз упоминались книги ордеров, и сегодня хотел бы сказать пару слов о них.

Итак, термин "книга заявок" означает электронный список заявок на покупку и продажу конкретной ценной бумаги или финансового инструмента, организованный по ценовому уровню.

В книге заявок указывается количество акций, выставленных на продажу или предлагаемых по каждой цене. В нем также указываются участники рынка, стоящие за ордерами на покупку и продажу, хотя некоторые из них предпочитают оставаться анонимными. Эти списки помогают трейдерам, а также повышают прозрачность рынка, поскольку предоставляют ценную торговую информацию.

Книги заявок используются почти на каждой бирже для размещения заявок на различные активы, такие как акции, облигации и валюты - даже криптовалюты, такие как биткойн. Эти ордера могут быть как ручными, так и электронными. Хотя в целом они содержат одну и ту же информацию, в зависимости от источника она может немного отличаться.

Книга заявок динамична, то есть она постоянно обновляется в режиме реального времени в течение дня. Такие биржи, как Nasdaq, называют ее "непрерывной книгой". Ордера, которые предполагают исполнение только при открытии или закрытии рынка, хранятся отдельно. Они известны как "книга открытия (ордеров)" и "книга закрытия (ордеров)" соответственно.

Например, при открытии рынка Nasdaq книги открытия и непрерывные книги объединяются, чтобы создать единую цену открытия. То же самое происходит при закрытии рынка, когда книга закрытия и непрерывная книга консолидируются для создания единой цены закрытия.

Как читают книги заявок?

Обычно книга заявок состоит из трех частей: заявок на покупку, заявок на продажу и истории заявок.

Ордера на покупку содержат информацию о покупателях и их заявки.

Ордера на продажу похожи на ордера на покупку, но вместо этого включают все предложения (или цены спроса) или то, сколько люди готовы продать.

История рыночных ордеров показывает все сделки, которые были совершены в прошлом.

В верхней части книги вы найдете самые высокие цены покупки и самые низкие цены продажи. Они указывают на преобладающий рынок и цену, по которой должен быть исполнен ордер. К книге часто прилагается свечной график, который предоставляет полезную информацию о текущем и прошлом состоянии рынка.

Книга ордеров помогает трейдерам принимать более обоснованные торговые решения. Они могут увидеть, какие брокерские компании покупают или продают акции, и определить, кто движет рынком - розничные инвесторы или институциональные. Книга заявок также показывает дисбаланс заявок, который может дать подсказку о направлении движения акций в краткосрочной перспективе.

Некоторые нюансы с книгами

Хотя книга заявок призвана обеспечить прозрачность для участников рынка, есть некоторые детали, которые не включены в список. К ним относятся "темные пулы". Это группы скрытых ордеров, которые хранятся у крупных игроков, не желающих, чтобы их торговые намерения были известны другим.

Без "темных пулов" биржи столкнулись бы со значительным обесцениванием цен. Когда информация о крупной сделке крупного учреждения становится достоянием общественности до ее совершения, это обычно приводит к падению цены на ценную бумагу. Но если информация о сделке становится известна после ее совершения, влияние на рынок может значительно снизиться.

Наличие "темных пулов" в определенной степени снижает полезность книги заявок, поскольку нет возможности узнать, отражают ли заявки, показанные в книге, реальный спрос и предложение на акции.

Пример типичной книги, вы можете увидеть на скрине выше.

Вообще, это достаточно сложная тема финансового рынка бирж, но нам нужно будет делать обще информационные посты, чтобы вы могли ухватить суть того, что делают современные смарт контракты в сфере DeFi.

#orderbook
👍2
Востребованный Solidity разработчик и DeFi

Участвуя в различных конкурсах по аудиту протоколов, я стал замечать кардинальное усиление современных протоколов в финансовых и биржевых продуктах. Если раньше было очень много проектов связанных с обменом, продажей и игрой NFT, а также простые контракты с покупкой/продажей токенов (они же и мемтокены, и алькоины, и т.д.), то сейчас уже протоколы внедряют сложные деривативные и опционные торги, сложные ликвидации позиций и продуманные механики рестейкинга.

EigenLayer, Uniswap Staker, Renzo, Ethena, Venus, Morpho - это одни из топовых DeFi протоколов, которые выходили на аудиты за последние полгода и привлекали к себе много внимания. Даже сейчас Euler собирается запустить свой конкурс на $ 1 250 000!!! И почему-то мне кажется, что многие протоколы позже возьмут его контракты на форк и будут внедрять в свою базу.

Современному Solidity разработчику уже не достаточно иметь навыков написания простых контрактов токенов / NFT и уметь загружать их в разные сети (коих развелось сейчас...). Необходимо понимать и уметь разбираться в архитектуре и механизмах DeFi протоколов, таких как: стейкинг и рестейкинг, ликвидации и награды,  деривативы и опционы, perpetual futures и многое другое. При этом также, в случае необходимости, разбираться с подключением своего контракта к нужному DeFi протоколу!

Это огромная область знаний, на которую уйдет не один час обучения!

На канале мы потихоньку начали разбирать DeFi протоколы, недавно прошли и Uniswap V2 и скоро будем продвигаться дальше. Я хочу вместе с вами еще раз просмотреть контракты популярных контрактов и разобраться в суть их функционирования. Это будет сложно и долго, но мы справимся.

Практически за два года ведения канала, я ни разу не повторился с темами (не было репостов или повторов) и выпускал новые посты практически каждый день. Теперь же моей целью является собрать здесь всю самую "мясную" инфу по DeFi.

Это будет очень интересное полугодие!

#defi
👍15🔥7🌭3
Канал разбора конкурсных отчетов

Кстати, я продолжаю вести закрытый канал, где мы разбираем баги с конкурсных аудитов. В день выкладываю по два небольших разбора, иногда делаю посты по нюансам в безопасности СК, на которые стоит обращать внимание, задачки, а также иногда "заходим" в небольшой конкурс и рассматриваем его в течение нескольких дней.

Сейчас уже разобрали более 100 различных уязвимостей и 3 конкурсных протокола. Дальше будем смотреть на проблемы с defil протоколами и сетями l2.

Если хотите прокачать свои навыки в поиске багов и начать чуть лучше разбираться в безопасности протоколов, то приглашаю присоединиться к нам.

Доступ в группу идет по месячной оплате в 1000 рублей, чтобы в ней оставались только те, кому интересная и актуальна тема.

Буду рад новым участникам!

#security
👍5🔥1
Алгоритм стейкинга в Sushiswap MasterChef и Synthetix. Часть 1

Алгоритмы сnейкинга в MasterChef и Synthetix распределяют фиксированный пул вознаграждений между пользователями в соответствии с их взвешенными по времени вкладами в пул. Для того чтобы сэкономить на газе, алгоритмы используют кумулятивный счетчик вознаграждений на уровне токенов и откладывают распределение вознаграждений.


Представьте, что у нас есть фиксированный пул из 100 000 токенов REWARD, который мы хотим справедливо распределить между пользователями в период от блока 1 по 100 блок.

Например, на момент конкретного блока стейкинг у пользователей был следующим:

| Name | Amount Staked | % of Pool |
| :-——-- | :------———-----: | --——-----: |
| Alice | 100 | 25 |
| Bob | 100 | 25 |
| Chad | 200 | 50 |

Тогда токены Rewards распределятся следующим образом:

| Name | Amount Staked | % of Pool | Rewards distribited |
| :-——-- | :----————-----: | --——-----: | ---———--------------: |
| Alice | 100 | 25 | 250 |
| Bob | 100 | 25 | 250 |
| Chad | 200 | 50 | 500 |


P.S. Токен Reward и токен стейкинга (тот же WETH или USDT) могут быть разными или одними и теми же в разных случаях. Для ясности, мы будет называть их именно Reward и просто Token.

Прежде чем рассказывать дальше о том, как же идет подсчет токенов для распределения, необходимо сказать, что отправлять транзакцию каждый блок для распределения вознаграждения вообще непрактично.

Обычно для авто запросов в блокчейн используют ботов (программы, которые могут в заданный момент отправлять транзакцию). Однако это хреновое решение.

Как минимум, потому что нет достаточно надежного способа обеспечить включение транзакций в каждый блок. Если бот пропустит один блок, то пользователи получат меньшее вознаграждение, чем ожидают.

Эта стратегия также повлечет за собой большие транзакционные сборы.

Отказавшись от этой системы, мы можем создавать «догоняющие» вознаграждения за блоки, в которых вознаграждения не были распределены.

Предположим, мы храним переменную в lastUpdateBlockNumber, которая отслеживает последний раз, когда выдавалось вознаграждение. Мы могли бы вычислять количество блоков с момента последнего вознаграждения как

block.number - lastUpdateBlockNumber;


Другими словами, мы можем пропустить несколько блоков, в которых мы распределяем вознаграждение, и «догнать» их, когда мы действительно делаем это.

Но даже при этом способе, у нас до сих пор нет хорошего способа распределить награды, которые мы только что сминтили, между всеми стейкерами в соответствии с их процентной долей.

Кроме того, мы не знаем, были ли балансы токенов постоянными в течение предыдущего интервала, с момента последнего распределения вознаграждения.

Например, что если Чад знал, что мы собираемся измерить остатки на блоке 100, и сделал большой депозит на блоке 99, чтобы получить большую долю вознаграждения?

Эту проблему оказалось легко решить. Как? Узнает в следующем посте цикла.

#Sushiswap #MasterChef #staking
👍2🔥1
Алгоритм стейкинга в Sushiswap MasterChef и Synthetix. Часть 2

Решением проблемы из предыдущего поста является простое утверждение: нет транзакций, нет изменения балансов.

Вместо того чтобы заставлять оффчейн бота проводить транзакции каждые 20 блоков или что-то типа того, мы можем просто ждать, пока пользователь начнет взаимодействует с контрактом через функции изменения состояния, такие как deposit() или withdraw().

В промежутках между вызовами этих функций мы можем быть уверены, что ничей баланс не изменился.

Например, если между блоком 10 и блоком 15 у Алисы было 50% стейкинга и у Боба - 50%, то мы можем выдать 5 000 REWARD (5 блоков умножить на 1 000) и дать каждому из них по 50%.

У Чада или Боба нет возможности «вскочить» и увеличить свой баланс, потому что когда они вызовут функцию deposit(), то вызовут распределение вознаграждения. А функция распределения вознаграждения запрограммирована так, чтобы не учитывать их недавний депозит.

Посмотрите на график на скрине выше, показывающий изменения баланса с течением времени.

Единственный способ, чтобы эти изменения произошли - это вызвать транзакцию со смарт-контрактом.

Однако это решение не масштабируется.

#Sushiswap #MasterChef #staking
👍4
Алгоритм стейкинга в Sushiswap MasterChef и Synthetix. Часть 3

В дополнение к предыдущему посту.

Распределять каждому стейкеру его REWARD каждый раз, когда кто-то вызывает deposit() или withdraw(), будет очень дорого, если стейкеров десятки. Трансфер токена ERC20 стоит недешево, а делать это десятки раз в цикле - непомерно дорого.

Для того чтобы сделать стейкинг эффективнее, можно придумать систему, когда пользователи получают свое вознаграждение, только тогда, когда вызывают функции изменения состояния.

Для тех, кто не требует вознаграждения, оно откладывается. Вознаграждения остаются в контракте и ждут, когда они будут востребованы.

Это избавит нас от необходимости делать кучу переводов ERC 20.

Из этого следует:

- мы можем обновлять только переменные аккаунта, связанные с адресом, инициирующим транзакцию;
- мы можем обновлять только одну глобальную переменную, которая отслеживает увеличение распределения вознаграждения для всех остальных, не обновляя каждый аккаунт по отдельности;

Кроме всего прочего, вместо того чтобы отслеживать начисление вознаграждения на счетах, мы отслеживаем прибыль от одного поставленного токена.

Предположим, мы можем точно отследить, сколько один токен накопил вознаграждения «с начала времен» (когда контракт начал распределять вознаграждения).

Если это так, то отследить, сколько вознаграждения накопил аккаунт, можно просто умножив его баланс на то, сколько Rewards он накопил с начала времени.

Если звучит запутано, но просто нужно прочитать медленнее и вдуматься в общую схему.

Предположим, мы знаем, что токен с начала времени до текущего момента, собрал 12 Rewards. Поэтому если Алиса сделала депозит в 100 токенов, то ей причитается 1 200 Rewards.

Это все равно что сказать: «Доллар, который вы положили на счет в нашем банке, заработал 0,40 доллара в виде процентов с момента открытия банка. Если вы открыли счет, когда мы открыли банк, и с тех пор не пополняли и не снимали деньги, то вы заработали 40%».

Это приводит нас к двум вопросам:

1. Как отследить начисление вознаграждения за один токен с начала времени?

2. Что, если Алиса не делала депозит с начала времени, а только недавно пополнила счет?

Об этом в следующем посте.

#Sushiswap #MasterChef #staking
👍31
Алгоритм стейкинга в Sushiswap MasterChef и Synthetix. Часть 4

Как же мы отслеживаем начисление вознаграждения за один токен с самого начала?

Поскольку в каждом блоке выдается фиксированное количество вознаграждений (1 000 в нашем примере), чем больше стейкеров, тем меньшую долю от фиксированного вознаграждения в 1 000 токенов они получат. Не имеет значения, сколько людей делают депозит, важно только общее количество токенов, поставленных на контракт.

Рассмотрим следующий пример:

| Block        | Rewards issued/block | Supply of staked tokens | Reward token/block|
| :-——————---- | :----———————-------: | --——-———————----------: | ---———----------: |
| block 1-5 | 1000 | 100 | 10 |
| block 6-13 | 1000 | 200 | 5 |
| block 14-15 | 1000 | 100 | 10 |
| block 16-20 | 1000 | 500 | 2 |



На скрине приведена наглядная таблица. Красная линия - это количество поставленных токенов. Фиолетовая линия - размер вознаграждения, начисляемого за один токен в данном блоке. Блоки перемещаются вправо по оси x. Обратная зависимость между этими двумя переменными должна быть очевидна.

#Sushiswap #MasterChef #staking
👍2
Алгоритм стейкинга в Sushiswap MasterChef и Synthetix. Часть 5

Каждый раз, когда происходит транзакция, изменяющая состояние, мы смотрим, сколько прошло блоков, умножаем это на вознаграждение за блок, а затем делим на общее количество поставленных средств. Это и есть сумма вознаграждения, накопленная токеном за этот промежуток времени.

Затем мы добавляем это значение в глобальный аккумулятор, который в начале был равен нулю. Если мы будем повторять этот процесс каждый раз, когда вызывается транзакция, мы узнаем, сколько один токен накопил вознаграждений с начала времени.


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

А вот таблица с теми же значениями:

| Block       | Rewards issued/block | Supply of staked tokens | Reward token/block |Number of blocks in interval | Rewards issued in interval | Accum. reward/token |
| :-——------- | :----————----------: | --——------------------: | ---———-----------: |---———---------------------: |---———--------------------: |---———-------------: |
| block 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| block 1-5 | 1000 | 100 | 10 | 5 | 50 | 50 |
| block 6-13 | 1000 | 200 | 5 | 8 | 40 | 90 |
| block 14-15 | 1000 | 100 | 10 | 2 | 20 | 110 |
| block 16-20 | 1000 | 500 | 2 | 5 | 10 | 120 |



То есть за один токен, поставленный на протяжении всего нашего сюжета, было накоплено 120 вознаграждений.

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

#Sushiswap #MasterChef #staking
P.S. На телефонах таблицы ужасно отображаются, и я не знаю, как их удобнее сделать, если не скринить, как png. Если кто знает, как форматировать их в более читаемый вид на телефонах, маякните в комментариях.
Скрины таблиц из 4 и 5 части постов
Алгоритм стейкинга в Sushiswap MasterChef и Synthetix. Часть 6

В последний месяц наблюдаю забавную тенденцию на канале: количество участников постоянно меняется в пределах 6:-6, т.е. приходят несколько человек, потом несколько уходят после новых постов. Сложилось такое ощущение, что многие заходят на канал в поисках чего-то простого по изучению Solidity, потом видят посты по расчеты в DeFi и такие: "Да ну нахер..." и уходят.

За все время существования канала, я старался никогда не повторяться с темами и постоянно выкладывать что-то новое. Ну, и к сегодняшнему моменту мы добрались до достаточно сложных тем.

Тем не менее, я подумаю, как можно сделать посты более "дружелюбными" для новичков и может выделить разборы DeFi в отдельный бесплатный канал.

А пока что, на этой неделе мы закончим читать статью про Sushiswap MasterChef и Synthetix, и для начала разберем небольшой пример, чтобы вспомнить посты с прошлой недели.

Мы снова выдаем по 1 000 Rewards за блок. За 20 блоков будет выдано 20 000 вознаграждений.

Вот что делают Алиса и Боб:

- Алиса сделала депозит 100 жетонов с блока 1 по блок 20.
- В блоке 10 Боб делает депозит 100 жетонов.
- В блоке 20 Алиса должна получить 75 % от всех вознаграждений, выданных до этого момента, или 15 000 вознаграждений.

Визуально доля пула ставок на блок будет выглядеть как на скрине выше.

С блока 1 по блок 10 награда за токен в блоке составляла 10 (1 000 ÷ 100). За этот интервал в 10 блоков каждый токен накапливал 100 Rewards (10 вознаграждений за токен в блоке x 10 блоков).

Но когда Боб пополнил счет в блоке 10, награда за токен в блоке уменьшилась до 5 (1 000 ÷ 200). За следующий интервал в 10 блоков (блоки с 11 по 20) каждый токен накопил 50 Rewards.

Таким образом, общая стоимость, накопленная токеном с блока 1 по блок 10, равна 100, а стоимость, накопленная с 11 по 20, равна 50. Таким образом, общая стоимость накопленного токена равна 100 + 50 = 150.

Поскольку Алиса положила на счет 100 токенов, а каждый токен накопил 150 вознаграждений, ей будет выдано 15 000 вознаграждений, что действительно составляет 75 % от общего количества выданных вознаграждений.

Но что, если ни кто не делал депозиты с самого начала?

Очевидный исключительный случай в приведенном выше примере заключается в том, что если бы Боб потребовал вознаграждение, то он также получил бы 15 000, потому что его ставка в блоке 20 равна 100, как и у Алисы.

Чтобы решить эту проблему, мы хотим, чтобы аккумулятор начинал считать для Боба только в тот момент, когда Боб сделал депозит.

Интуитивное решение состоит в том, чтобы хранить номер блока, в котором Боб сделал депозит, и скорректировать его позже.

Однако еще проще рассчитать сумму вознаграждений, которую он получил бы при пополнении счета в блоке 10, а затем сразу же потребовал вознаграждение. Например, в блоке 10 накопленное вознаграждение за токен составляло 100. Поскольку Боб положил на счет 100 жетонов, теоретически он мог бы сразу получить 10 000 Rewards.

Для того, чтобы этого не произошло, у нас есть переменная для Боба, которую мы называем «долг награды» (“reward debt”).

В тот момент, когда он вносит депозит, мы устанавливаем reward debt равным балансу депозита, умноженному на накопитель вознаграждения за токены. Это не позволит ему сразу же получить награду, поскольку в этот момент причитающееся ему вознаграждение будет равно нулю (текущее вознаграждение минус долг вознаграждения).

Мы создали для Боба отдельную переменную под названием «долг вознаграждения» и присвоили ей эту гипотетическую сумму вознаграждения. В блоке 10 накопленное вознаграждение за токен составляло 100, и депозит Боба был 100, поэтому его долг по вознаграждению составляет 10 000.

Если Боб потребует вознаграждение в блоке 20, мы вычтем вознаграждение в 15 000 из суммы долга в 10 000. Боб сможет получить только 5 000 Rewards в блоке 20.

Это может быть слегка сложно читать, поэтому рекомендую смотреть на скрины выше и размечать движение токенов, чтобы понимать суть работы вознаграждений.

Дальше мы поговорим про MasterChef.

#Sushiswap #MasterChef #staking
3🔥3
Алгоритм стейкинга в Sushiswap MasterChef и Synthetix. Часть 7

Различия между Synthetix и MasterChef

Synthetix и MasterChef используют один и тот же механизм для накопления вознаграждения за токен в зависимости от суммы ставки. Основное отличие заключается в том, что вместо отслеживания задолженности по вознаграждению Synthetix хранит снимок накопителя вознаграждения, когда пользователь в последний раз взаимодействовал с контрактом. Разница между текущим значением аккумулятора вознаграждения и снимком используется для расчета вознаграждения на счет пользователя.

Эта разница добавляется в маппинг rewards для каждого пользователя и накапливается там до тех пор, пока пользователь не вызовет getRewards(). Эти дополнительные расчеты делают алгоритм Synthetix менее эффективным.

Остальные различия довольно незначительны:

- В MasterChef есть deposit() и withdraw().
- В Synthetix есть stake(), withdraw() и getReward().
- В MasterChef в качестве единицы времени используются блоки.
- Synthetix использует метку времени.
- MasterChef минтит вознаграждения для себя, как описано в предыдущих разделах.
- Synthetix предполагает, что администратор уже перевел вознаграждение на контракт, и не минтит вознаграждения.
- MasterChef распределяет вознаграждения от настраиваемого startBlock до lastRewardBlock.
- Synthetix жестко закодирован на распределение вознаграждений в течение недели после того, как администратор запустит часы. Synthetix будет распределять не весь баланс вознаграждений в контракте, а сумму, указанную администратором.
- MasterChef переводит вознаграждение пользователю каждый раз, когда он вызывает функцию deposit() или withdraw() с ненулевой суммой.
- Synthetix накапливает причитающееся пользователю вознаграждение в связке под названием rewards, но не передает его пользователю до тех пор, пока он явно не вызовет getRewards().
- MasterChef поддерживает несколько пулов в рамках одного контракта и делит вознаграждения по весу пула.
- В Synthetix есть только один пул

Заинтересованный читатель может ознакомиться с кодом для SushiSwap MasterChef Staking.

#Sushiswap #MasterChef #staking
Алгоритм стейкинга в Sushiswap MasterChef и Synthetix. Часть 9

На графике ниже показана подпрограмма бухгалтерского учета Synthetix, которая вызывается во время операций deposit(), withdraw() или getRewards(). В частности, это делается перед обновлением баланса при пополнении или снятии средств или при распределении вознаграждений.

На приведенном ниже графике lastUpdateTime - это время последнего вызова одной из трех функций пользователем. В приведенном ниже примере пользователь, получающий вознаграждение, - это не тот же самый пользователь, который ранее взаимодействовал с контрактом. Маркер ' означает значение переменной после завершения подпрограммы.

Ознакомиться с кодом Syntetix вы можете тут.

#Sushiswap #MasterChef #staking
Отдельный канал для Defi разборов

За неделю я получил некоторую обратную связь от участников канала и решил, что все таки будет лучше выделить DeFi темы на отдельный канал. Посты там будут выходить по мере перевода зарубежных статей и самих разборов контрактов различных протоколов, один два раза в неделю. Канал бесплатный и открытый для всех.

Тут же останутся более простые темы про Solidity, EIP и EVM, как я и писал - более "дружелюбные" для начинающих. Небольшие посты для более легкого просмотра.

Канал будет открыт, когда напишу еще несколько разборов.

Ах, да, статьи скорее там будут писаться через Телеграф, чтобы было удобнее вставлять картинки в середину текста.

Ну, вот пока так. Буду рад услышать ваши идеи и рекомендации.

#defi #chanel
👍9🔥21
С чего начать погружение в Solidity и web3

Пока я готовлю отдельный ресурс, где будет разбирать defi темы более детально, хочу написать пару постов для новичков в предверии следующего модуля курса.

Я регулярно отслеживаю новые курсы и школы по обучению Solidity и изучаю темы, которые там даются ученикам с самого нуля. И довольно часто я такой: "Да зачем это дают в начале?" или "С чего вообще решили мешать эти темы" и многие других вопросов по программе. Но больше всего напрягают заголовки, типа "Напишите свой токен на втором уроке!". Да, блин, какой токен, если ученик не понимает на кой хрен там используют маппинг для балансов или uint8 для decimals?!

Я понимаю, что достаточно много курсов "от разработчиков для разработчиков", но не все же приходят в web3 с техническими знаниями.

Хочу дать несколько советов в формате "забейте на..." тем, кто только собирается начать свой путь в разработке смарт контрактов. Вполне можете использовать это как роудмап.

1. Забейте на javanoscript, python и другие языки. Да, сам Solidity очень похож на js, но вовсе не обязательно знать другой язык, чтобы начать учиться разработке смарт контрактов.

Вообще, JS так или иначе нужно будет научиться понимать, если хотите "связывать" свой смарт контракт с веб сайтом. Так что если вы планируете стать полноценный фуллстек web3 разработчиком, то лучше начните свое обучение с JS, потом изучите TypeScript и React / Vue (можно также добавить css и фреймворки с ним связанные). На это уйдет года 2-3. Я имею ввиду не на изучение только синтаксиса языка, но, скорее, на некоторую практику.

После этого, да, изучение Solidity пойдет намного легче.

Также следует уточнить, что сейчас Solidity самодостаточный язык для разработки: вы можете как написать сами смарт контракты для них, так и провести тесты, так и аудировать их. Другими словами получить 3 разных профессии, зная только Solidity.

2. Забейте на информацию по устройству и работе EVM. В этой теме можно копаться больше года и постоянно изучать новую информацию. Одно лишь но: чем больше вы погружаетесь в работу EVM, тем больше откладываете изучение Solidity.

На первых этапах вам вовсе необязательно знать, что такое газ, как его сэкономить, или различия в консенсусах. Это как: вам не нужно знать устройство электрики во всем вашем доме, чтобы прикрутить розетку.

Так или иначе вы будете погружаться в EVM по мере своего обучения Solidity. И проще по крупицам получать новую информацию, чем потонуть в ней с самого начала.

3. Забейте на современные редакторы кода и плагины для них. Для первых шагов с Solidity вас достаточно прекрасного онлайн редактора кода Remix IDE.

Он хорош как минимум по двум причинам: во-первых, все визуально настроено и вы можете вызывать функции из своего контракта прямо из Ремикса (и не нужно писать тесты, как это делается в обычном редакторе кода для проверки работоспособности контракта), а во-вторых, вы научитесь работать с ошибками и смотреть в терминал, ту штуку, которая отображает ход выполнения вызовов в функциях.

4. Начните с изучения синтаксиса Solidity.

Смарт контракты в блокчейне нельзя редактировать после загрузки в сеть. И каждая ошибка будет стоить вам ваших денег. Бездумно скопировав чужой код токена или nft, может принести вам куда больше проблем, чем вы можете представить.

Каждый элемент языка, каждый тип данных или область видимости функций играет важную роль в безопасности вашего контракта. Вы должны ясно понимать, что и как использовать! Именно поэтому весь первый модуль мы учим типы данных и составные части смарт контрактов.

Не просто просматривайте ролики на Ютуб, а именно практикуйтесь в редакторе Ремикс.

По сути, вы можете взять программу первого модуля и использовать ее как свои первые шаги.

И только когда поймете, что разбираетесь в синтаксисе достаточно уверенно, то переходите к изучению простейших стандартов токенов, типа ERC20 или ERC721.

Надеюсь эти советы помогут вам не зарываться в куче информации, а сразу приступить к изучению базовых элементов.

#start
5🔥3👍1
Solidity, Rust, Ton и другие языки

Еще вопрос был про языки для блокчейна: что учить и нужно ли?

Сразу скажу, что 100% правильного ответа тут быть не может, поэтому скажу лишь со стороны своего опыта и наблюдения за ситуацией.

Solidity язык основных и самых популярных сетей блокчейна: Ethereum и его L2 и L0 сетей. Пока что они занимают львиную долю рынка и ближайшие пару лет так или иначе будут оставаться основными сетями для разработчиков.

Rust привлекает к себе внимание не только с некоторыми взлетами другой сети - Solana, но и благодаря другим разработчикам, которые пишут разнообразные программы для взаимодействия и тестирования смарт контрактов, например, тот же Foundry.

Также этой зимой / весной были несколько конкурсных аудитов на этом языке, что также показывает интерес к Rust.

Не могу сказать, что знание Rust поможет вам проще найти работу в web3, но у вас всегда будет вариант вернуться в web2. Как язык Rust прекрасен!

Ton для меня пока темная лошадка. С одной стороны интерес сообщества к нему есть, с другой - к нему скорее пока "присматриваются". Да, некоторые компании переписывают свои проекты для поддержки этой сети, но я не слышал пока громких протоколов на TON.

Да и сам Телеграм только делает заявление об интеграции сети к себе в приложение, но явных шагов я не вижу (хотя тут могу и ошибаться).

Huff и Go? Скорее нишевые языки. Не могу сказать, что вижу особый интерес блокчейна к ним. Да, встречал пару протоколов на них, но ничего большего.

По итогу могу сказать вот что: если хотите заниматься разработкой смарт контрактов и погружаться в defi, то лучше выбрать Solidity. Если интересен сам вопрос кодинга и бек разработки с возможностью написания контрактов, то Rust будет хорошим выбором. Если хотите рискнуть и пойти за трендом на TON, то можно попробовать и его. С другим языками я бы пока не начинал, там как-то вообще не понятно.

Будет интересно услышать ваше мнение в комментариях. Что думаете по современным языкам?

#languages
👍5
Сколько нужно учить Solidity?

На следующей неделе у меня неожиданно появилась возможность немного передохнуть от работы и ведения нескольких групп и съездить в небольшое путешествие. Так что канал на неделю уходит также в отпуск. А потом, начнем все проходить новые темы с новыми силами!

А пока, несколько слов о том, сколько нужно учить Solidity.

Сам язык учится достаточно быстро: за месяц можно охватить его основные элементы и научиться писать простые смарт контракты. Но вот дальше...

У всех путь начинается с простых токенов и nft, с которых мы узнаем, что есть некоторые стандарты, типа ERC20, ERC721. Учимся дальше и узнаем, что таких стандартов, уже больше 6 000.

Выдыхаем, когда понимаем, что нужно знать всего пару десятков основных: ERC712, ERC1155, ERC4626 и т.д. Пытаемся разобраться с ними, читаем документацию, смотрим видео, разбираем примеры.

После внимаем в популярные паттерны в смарт контрактах, например, голосование, временная блокировка, ролевая система и другие. Учимся оперировать ими.

Неожиданно узнаем, что все, что мы писали "дырявое" и вопросы безопасности - это вообще краеугольный камень всего блокчейна. Разбираем популярные уязвимости и атаки, узнаем про CTF и разгадываем их загадки.

Теперь мы более менее понимаем, что к чему и готовы идти дальше. Смотрим как взаимодействовать с другими популярными протоколами, типа Chainlink и Uniswap. Пишем свой первый обменник.

Появляется уверенность в собственных силах, мы достаточно крутые и теперь хотим попробовать оптимизировать наш контракт по газу и заглядываем в assembly. Сквозь пот и слезы, теперь вызов в нашей функции экономит 20 газа, мы кое-как научились.

Теперь мы хотим убедиться, что все работает как надо и погружаемся в тестирование контрактов. Учим основы Foundry, разбираемся с фазз и инвариант тестированием, а позже узнаем про формальную верификацию. WFT! Этому нет конца и края, но мы упорные! И уже слегка упоротые...

Мы нашли несколько интеграционных ошибок в нашем протоколе и хотим разобраться с кодом defi протокола. Лезем в источник Compound и теряемся на неделю...

С мыслями "Да, пофиг уже" погружаемся в код и токеномику других популярных DeFi протоколов.

Думаете мы стали сеньором? Угу, уверенный мид!

И как вы теперь думаете, сколько на все это потребуется времени?

Я вот лично вообще хз - уже второй год и я все еще учусь чему-то новому каждый день.

В мире Solidity и web3 нет определенного количества знаний, которые можно получить и дальше "сидеть сложа лапки". Это непрерывный процесс обучения.

Подумайте, готовы ли вы потратить более двух лет на получение новой хорошей профессии?

#solidity
🔥22👍4👏2