Алгоритм стейкинга в Sushiswap MasterChef и Synthetix. Часть 4
Как же мы отслеживаем начисление вознаграждения за один токен с самого начала?
Поскольку в каждом блоке выдается фиксированное количество вознаграждений (1 000 в нашем примере), чем больше стейкеров, тем меньшую долю от фиксированного вознаграждения в 1 000 токенов они получат. Не имеет значения, сколько людей делают депозит, важно только общее количество токенов, поставленных на контракт.
Рассмотрим следующий пример:
На скрине приведена наглядная таблица. Красная линия - это количество поставленных токенов. Фиолетовая линия - размер вознаграждения, начисляемого за один токен в данном блоке. Блоки перемещаются вправо по оси x. Обратная зависимость между этими двумя переменными должна быть очевидна.
#Sushiswap #MasterChef #staking
Как же мы отслеживаем начисление вознаграждения за один токен с самого начала?
Поскольку в каждом блоке выдается фиксированное количество вознаграждений (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
Каждый раз, когда происходит транзакция, изменяющая состояние, мы смотрим, сколько прошло блоков, умножаем это на вознаграждение за блок, а затем делим на общее количество поставленных средств. Это и есть сумма вознаграждения, накопленная токеном за этот промежуток времени.
Затем мы добавляем это значение в глобальный аккумулятор, который в начале был равен нулю. Если мы будем повторять этот процесс каждый раз, когда вызывается транзакция, мы узнаем, сколько один токен накопил вознаграждений с начала времени.
На скрине вы можете видеть пример подобный графику из предыдущего поста с добавленным аккумулятором.
А вот таблица с теми же значениями:
То есть за один токен, поставленный на протяжении всего нашего сюжета, было накоплено 120 вознаграждений.
На следующей неделе поговорим уже более детально про сами контракты и приведем примеры.
#Sushiswap #MasterChef #staking
Каждый раз, когда происходит транзакция, изменяющая состояние, мы смотрим, сколько прошло блоков, умножаем это на вознаграждение за блок, а затем делим на общее количество поставленных средств. Это и есть сумма вознаграждения, накопленная токеном за этот промежуток времени.
Затем мы добавляем это значение в глобальный аккумулятор, который в начале был равен нулю. Если мы будем повторять этот процесс каждый раз, когда вызывается транзакция, мы узнаем, сколько один токен накопил вознаграждений с начала времени.
На скрине вы можете видеть пример подобный графику из предыдущего поста с добавленным аккумулятором.
А вот таблица с теми же значениями:
| 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. Если кто знает, как форматировать их в более читаемый вид на телефонах, маякните в комментариях.
Алгоритм стейкинга в 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
В последний месяц наблюдаю забавную тенденцию на канале: количество участников постоянно меняется в пределах 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
Различия между 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
На графике ниже показана подпрограмма бухгалтерского учета Synthetix, которая вызывается во время операций deposit(), withdraw() или getRewards(). В частности, это делается перед обновлением баланса при пополнении или снятии средств или при распределении вознаграждений.
На приведенном ниже графике lastUpdateTime - это время последнего вызова одной из трех функций пользователем. В приведенном ниже примере пользователь, получающий вознаграждение, - это не тот же самый пользователь, который ранее взаимодействовал с контрактом. Маркер ' означает значение переменной после завершения подпрограммы.
Ознакомиться с кодом Syntetix вы можете тут.
#Sushiswap #MasterChef #staking
Отдельный канал для Defi разборов
За неделю я получил некоторую обратную связь от участников канала и решил, что все таки будет лучше выделить DeFi темы на отдельный канал. Посты там будут выходить по мере перевода зарубежных статей и самих разборов контрактов различных протоколов, один два раза в неделю. Канал бесплатный и открытый для всех.
Тут же останутся более простые темы про Solidity, EIP и EVM, как я и писал - более "дружелюбные" для начинающих. Небольшие посты для более легкого просмотра.
Канал будет открыт, когда напишу еще несколько разборов.
Ах, да, статьи скорее там будут писаться через Телеграф, чтобы было удобнее вставлять картинки в середину текста.
Ну, вот пока так. Буду рад услышать ваши идеи и рекомендации.
#defi #chanel
За неделю я получил некоторую обратную связь от участников канала и решил, что все таки будет лучше выделить DeFi темы на отдельный канал. Посты там будут выходить по мере перевода зарубежных статей и самих разборов контрактов различных протоколов, один два раза в неделю. Канал бесплатный и открытый для всех.
Тут же останутся более простые темы про Solidity, EIP и EVM, как я и писал - более "дружелюбные" для начинающих. Небольшие посты для более легкого просмотра.
Канал будет открыт, когда напишу еще несколько разборов.
Ах, да, статьи скорее там будут писаться через Телеграф, чтобы было удобнее вставлять картинки в середину текста.
Ну, вот пока так. Буду рад услышать ваши идеи и рекомендации.
#defi #chanel
👍9🔥2❤1
С чего начать погружение в 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
Пока я готовлю отдельный ресурс, где будет разбирать 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
Еще вопрос был про языки для блокчейна: что учить и нужно ли?
Сразу скажу, что 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
На следующей неделе у меня неожиданно появилась возможность немного передохнуть от работы и ведения нескольких групп и съездить в небольшое путешествие. Так что канал на неделю уходит также в отпуск. А потом, начнем все проходить новые темы с новыми силами!
А пока, несколько слов о том, сколько нужно учить 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
Миша, спасибо!
Вчера весь день был в дороге и только вечером смог добраться до интернете и соц сетей. Захожу на канал и вижу странную цифру 1.7 участников. Я такой: "WTF?! Еще вчера было 1.5, что произошло? Откуда столько новых?!"
Первая мысль, что кто-то просто "раздувает" канал ботами, но захожу в список участников и вижу, что норм ребята.
Даже в чат писал, что происходит. И мне указали, что наш канал был упомянут в видео на Ютуб от Миши Ларченко.
Я был очень приятно удивлен! Миша, спасибо за доверие и рекомендацию!
Если кто-то из участников канала захочет посмотреть это видео - https://youtu.be/l_r_ALtrY9Y?feature=shared
Ну, и сам канал Миши. Он рассказывает о мире программирования, языках и лайфстай в целом - https://youtube.com/@larchanka?feature=shared
P.S. Первый раз, кто-то рассказывает о нашем канале вне Телеграма. Авось скоро и на РБК попадем))
Всем приятной недели, а я дальше в путь.
#wow
Вчера весь день был в дороге и только вечером смог добраться до интернете и соц сетей. Захожу на канал и вижу странную цифру 1.7 участников. Я такой: "WTF?! Еще вчера было 1.5, что произошло? Откуда столько новых?!"
Первая мысль, что кто-то просто "раздувает" канал ботами, но захожу в список участников и вижу, что норм ребята.
Даже в чат писал, что происходит. И мне указали, что наш канал был упомянут в видео на Ютуб от Миши Ларченко.
Я был очень приятно удивлен! Миша, спасибо за доверие и рекомендацию!
Если кто-то из участников канала захочет посмотреть это видео - https://youtu.be/l_r_ALtrY9Y?feature=shared
Ну, и сам канал Миши. Он рассказывает о мире программирования, языках и лайфстай в целом - https://youtube.com/@larchanka?feature=shared
P.S. Первый раз, кто-то рассказывает о нашем канале вне Телеграма. Авось скоро и на РБК попадем))
Всем приятной недели, а я дальше в путь.
#wow
🔥31👍9❤4
Возвращаемся к работе
Фух, наконец, я вернулся из небольшого отпуска с новыми силами и готов дальше делать разборы!
На канал пришло много новых участников, поэтому, думаю, мне стоит еще раз представиться и рассказать про текущие планы и особенности нашего канала.
Итак, меня зовут Влад. Этот канал я завел около 2 лет назад, 13 июля 2022 года, и изначально планировал учиться Solidity в группе единомышленников, которых пытался собрать на VC и Пикабу (угу, мое темное прошлое). Сам я пришел из web2 и был фуллстек программистом: php / js. Из-за событий того года много работы за рубежом "обломалось" и пришлось искать новые способы выхода на мировой рынок. Тогда я познакомился с криптой и захотел разобраться в ней на уровне кода. Канал завел скорее для отслеживания своего прогресса и мотивации к ежедневному обучению.
Постепенно сюда приходили новые участники, и теперь он стал одним из самых больших в ру сегменте.
Осенью того же года я заинтересовался вопросами безопасности смарт контрактов и стал активно изучать разные взломы и проходить популярные CTF задачи, типа Ethernaut. С прошлого года порой участвую в публичных конкурсах на площадках code4rena, cantina и codehawks. Провел несколько соло-аудитов.
Год назад я запустил небольшой курс по Solidity, состоящий из 4 модулей. Его прошли более 120 учеников!
Также я написал большой бесплатный курс по Foundry, который все могут изучить на данном канале: https://news.1rj.ru/str/solidityset/962 .
Этой весной был перезапуск курса по Solidity. И через пару недель стартует уже второй модуль обучения.
Весной этого года на канале мы начали погружение в defi и разбирали Uniswap V2, погружаясь в детали кода. Но я увидел, что очень малому кругу читателей интересная эта тема и решил выделить разбор defi в отдельный канал или что-то еще. Позже расскажу, как это будет в итоге.
Более того, у нас есть небольшой закрытый канал, где мы разбираем баги с аудиторских отчетов. Это может быть интересно более продвинутым разработчикам изучающим безопасность или желающим стартовать на конкурсных аудитах.
С недавнего времени я также работаю над зарубежным проектом, который поможет протоколам подготовиться к полноценному аудиту и избежать самых популярных уязвимостей. Он еще в бета стадии, и расскажу о нем позже.
Сейчас на канале мы будем говорить больше о Solidity, EVM и блокчейне в целом, более простым и понятным языком, который подойдет для начинающих свой путь.
Если у вас есть какие-либо предложения или советы по контенту, буду рад обсудить.
А так, возвращаемся к работе и планируем образовательное лето вместе!
Добро пожаловать!
#offtop
Фух, наконец, я вернулся из небольшого отпуска с новыми силами и готов дальше делать разборы!
На канал пришло много новых участников, поэтому, думаю, мне стоит еще раз представиться и рассказать про текущие планы и особенности нашего канала.
Итак, меня зовут Влад. Этот канал я завел около 2 лет назад, 13 июля 2022 года, и изначально планировал учиться Solidity в группе единомышленников, которых пытался собрать на VC и Пикабу (угу, мое темное прошлое). Сам я пришел из web2 и был фуллстек программистом: php / js. Из-за событий того года много работы за рубежом "обломалось" и пришлось искать новые способы выхода на мировой рынок. Тогда я познакомился с криптой и захотел разобраться в ней на уровне кода. Канал завел скорее для отслеживания своего прогресса и мотивации к ежедневному обучению.
Постепенно сюда приходили новые участники, и теперь он стал одним из самых больших в ру сегменте.
Осенью того же года я заинтересовался вопросами безопасности смарт контрактов и стал активно изучать разные взломы и проходить популярные CTF задачи, типа Ethernaut. С прошлого года порой участвую в публичных конкурсах на площадках code4rena, cantina и codehawks. Провел несколько соло-аудитов.
Год назад я запустил небольшой курс по Solidity, состоящий из 4 модулей. Его прошли более 120 учеников!
Также я написал большой бесплатный курс по Foundry, который все могут изучить на данном канале: https://news.1rj.ru/str/solidityset/962 .
Этой весной был перезапуск курса по Solidity. И через пару недель стартует уже второй модуль обучения.
Весной этого года на канале мы начали погружение в defi и разбирали Uniswap V2, погружаясь в детали кода. Но я увидел, что очень малому кругу читателей интересная эта тема и решил выделить разбор defi в отдельный канал или что-то еще. Позже расскажу, как это будет в итоге.
Более того, у нас есть небольшой закрытый канал, где мы разбираем баги с аудиторских отчетов. Это может быть интересно более продвинутым разработчикам изучающим безопасность или желающим стартовать на конкурсных аудитах.
С недавнего времени я также работаю над зарубежным проектом, который поможет протоколам подготовиться к полноценному аудиту и избежать самых популярных уязвимостей. Он еще в бета стадии, и расскажу о нем позже.
Сейчас на канале мы будем говорить больше о Solidity, EVM и блокчейне в целом, более простым и понятным языком, который подойдет для начинающих свой путь.
Если у вас есть какие-либо предложения или советы по контенту, буду рад обсудить.
А так, возвращаемся к работе и планируем образовательное лето вместе!
Добро пожаловать!
#offtop
👍29🔥4❤3
Какие проекты написать для портфолио?
В чате однажды был вопрос по этой теме, и сегодня хочу предложить вам несколько небольших проектов, которые можно реализовать для своей практики и позже показывать на на различных собеседованиях.
Сразу скажу, что эти примеры протоколов составлены на основе некоторых проектов, которые я встречал на конкурсных аудитах, поэтому в данном списке они будут располагаться в порядке возрастания сложности.
Думаю, если в чате или на канале есть кто-то, кто ведет найм в компанию, то вы могли бы дать дополнительные комментарии к примерам или добавить свои требования.
P.S. Проекты рекомендуется загружать на GitHub, так как это общепринятый ресурс для разработчиков, наполнение которого действительно может сыграть роль при найме.
Итак, проекты для портфолио:
1. Практический файл, где вы показываете, как работать со сложными типами данных и вводом\выводом информации с них. Там моно показать примеры со вложенными маппингами, многоуровневыми массивами, все это в комбинации с enum и struct.
Это может звучать легко, но на самом деле займет несколько часов / дней сфокусированной работы.
2. Контракты своего токена и NFT. Тут объяснения излишни. Просто стандартная ступень начальной практики.
3. Контракт airdrop, который будет разблокировать токены с разным промежутком времени в течение года-пяти с разным количеством токенов каждый раз. Например:
Сразу - 10% токенов;
3 месяца - 15%;
6 месяцев - 30%;
1 год - 5%;
3 года - 20%;
5 лет - остальное;
Зачем: показать, что вы можете работать с timelock и простой математикой в контрактах.
4. Контракт Vault на основе ERC4626, в для пользователя минтятся токены протокола в соотношение 0.75% от внесенных им стейблкойнов, и взамен печатается NFT для подтверждения депозита. Если пользователь забирает токены раньше, чем через полгода, то он теряет свои 0.25%, если позже - получает 0.05% дополнительно.
Зачем: показать, что вы умеете работать с несколькими стандартами, связывать их между собой, а также реализовывать расчеты со сложными процентами.
5. Стейкинг контракт, где одни пользователи делают депозит и получают нативные токены протокола, а другие могут брать займы \ флешзаймы под залог своих токенов. При невозврате займа, его токены переводятся с помощью Uniswap в другой токен и распределяются между депозиторами токена и самим протоколом в соотношении 90/10.
Зачем: показать, что вы можете работать с простыми defi системами и интегрировать протокол с Uniswap.
6. Proxy factory контракт, который может делать деплой Vault контрактов для пользователей. Функционал Vault контракта может обновляться government контрактом после голосования.
В Vault контракт пользователи могут вносить ETH/WETH и позже снимать USDT/USDC. Актуальная цена на снятие получается от оракулов TWAP и Chainlink.
Зачем: показать, что вы можете работать с прокси и оракулами.
7. Простой стейкинг контракт, который работает на L1 и любой другой L2 сети и позволяет пользователям переводить свои токены между ними. При этом за перевод протокол может взымать комиссию 1%.
Сам протокол управляется Gnosis Safe Wallet и с помощью голосования можно изменить процент комиссии.
Зачем: показать, что вы можете работать с Gnosis и понимаете работу разных сетей.
Хочу отметить, что не стоит в данных проектах искать финансовый смысл или идею для своего стартапа. Это исключительно проекты для практики и портфолио.
Также несколько рекомендаций при написании протоколов:
1. Используйте комментарии, лучше в natspec формате;
2. Если понимаете как, то можно использовать assembly вставки;
3. Будет здорово, если вы в комментариях напишите свои предположения по безопасности функции. Например, "в этой функции могут быть такие проблемы, которые при необходимости можно решить так..."
4. Также будет просто здорово, если сможете написать простые unit тесты на Foundry / Hardhat.
Это первый пост с предлагаемыми проектами для портфолио. Если вам зайдет, иногда могу предлагать новые идеи для ваших практических проектов.
#practice
В чате однажды был вопрос по этой теме, и сегодня хочу предложить вам несколько небольших проектов, которые можно реализовать для своей практики и позже показывать на на различных собеседованиях.
Сразу скажу, что эти примеры протоколов составлены на основе некоторых проектов, которые я встречал на конкурсных аудитах, поэтому в данном списке они будут располагаться в порядке возрастания сложности.
Думаю, если в чате или на канале есть кто-то, кто ведет найм в компанию, то вы могли бы дать дополнительные комментарии к примерам или добавить свои требования.
P.S. Проекты рекомендуется загружать на GitHub, так как это общепринятый ресурс для разработчиков, наполнение которого действительно может сыграть роль при найме.
Итак, проекты для портфолио:
1. Практический файл, где вы показываете, как работать со сложными типами данных и вводом\выводом информации с них. Там моно показать примеры со вложенными маппингами, многоуровневыми массивами, все это в комбинации с enum и struct.
Это может звучать легко, но на самом деле займет несколько часов / дней сфокусированной работы.
2. Контракты своего токена и NFT. Тут объяснения излишни. Просто стандартная ступень начальной практики.
3. Контракт airdrop, который будет разблокировать токены с разным промежутком времени в течение года-пяти с разным количеством токенов каждый раз. Например:
Сразу - 10% токенов;
3 месяца - 15%;
6 месяцев - 30%;
1 год - 5%;
3 года - 20%;
5 лет - остальное;
Зачем: показать, что вы можете работать с timelock и простой математикой в контрактах.
4. Контракт Vault на основе ERC4626, в для пользователя минтятся токены протокола в соотношение 0.75% от внесенных им стейблкойнов, и взамен печатается NFT для подтверждения депозита. Если пользователь забирает токены раньше, чем через полгода, то он теряет свои 0.25%, если позже - получает 0.05% дополнительно.
Зачем: показать, что вы умеете работать с несколькими стандартами, связывать их между собой, а также реализовывать расчеты со сложными процентами.
5. Стейкинг контракт, где одни пользователи делают депозит и получают нативные токены протокола, а другие могут брать займы \ флешзаймы под залог своих токенов. При невозврате займа, его токены переводятся с помощью Uniswap в другой токен и распределяются между депозиторами токена и самим протоколом в соотношении 90/10.
Зачем: показать, что вы можете работать с простыми defi системами и интегрировать протокол с Uniswap.
6. Proxy factory контракт, который может делать деплой Vault контрактов для пользователей. Функционал Vault контракта может обновляться government контрактом после голосования.
В Vault контракт пользователи могут вносить ETH/WETH и позже снимать USDT/USDC. Актуальная цена на снятие получается от оракулов TWAP и Chainlink.
Зачем: показать, что вы можете работать с прокси и оракулами.
7. Простой стейкинг контракт, который работает на L1 и любой другой L2 сети и позволяет пользователям переводить свои токены между ними. При этом за перевод протокол может взымать комиссию 1%.
Сам протокол управляется Gnosis Safe Wallet и с помощью голосования можно изменить процент комиссии.
Зачем: показать, что вы можете работать с Gnosis и понимаете работу разных сетей.
Хочу отметить, что не стоит в данных проектах искать финансовый смысл или идею для своего стартапа. Это исключительно проекты для практики и портфолио.
Также несколько рекомендаций при написании протоколов:
1. Используйте комментарии, лучше в natspec формате;
2. Если понимаете как, то можно использовать assembly вставки;
3. Будет здорово, если вы в комментариях напишите свои предположения по безопасности функции. Например, "в этой функции могут быть такие проблемы, которые при необходимости можно решить так..."
4. Также будет просто здорово, если сможете написать простые unit тесты на Foundry / Hardhat.
Это первый пост с предлагаемыми проектами для портфолио. Если вам зайдет, иногда могу предлагать новые идеи для ваших практических проектов.
#practice
❤22👍9🔥2😁1🤯1
Токен написать и косточкой не подавиться
Как и говорил ранее, переходим к более простым темам и вопросам на канале. И сегодня хотел бы поговорить про написание контрактов токенов, и почему это не так просто как кажется.
На различных курсах и видео обучениях показывают как написать свой токен чуть ли не на втором-третьем уроке, при этом буквально "пролетая" темы с типами данных, стандартами, безопасностью и т.д. И это позже принесет только проблемы молодому разработчику.
Да, создать свой токен и загрузить его в Эфир можно менее чем за пять минут: используя либо конструкторы, либо вообще скопировав чужой контракт. И если мы просто "балуемся" для своего удовольствия, то все ок. Но если реально работаем над проектом, то...
В самом популярном стандарте токенов, ERC20, всего 9 методов, 3 из который являются опциональными, и 2 события. При этом практически в каждом протоколе находятся уязвимости из-за неправильной реализации этого стандарта или некорректного использования существующего токена в своем протоколе.
Сейчас бы прикрепить сюда картинку Боромира из Властелина Колец с подписью: "Нельзя просто так взять и создать свой токен", но мы же серьезный канал)
Вообще, хорошо бы сначала разобраться в самом стандарте EIP и эталонных примерах реализации (например, Open Zeppelin), прежде чем приниматься за создание своего токена. Я бы даже сказал, что не стоит играться с токенами, пока не сможешь понять, за что отвечает каждая строка в контракте ERC20 от OZ.
После этого я бы рекомендовал посмотреть на текущие реализации популярных токенов, типа USDT/USDC/WETH и т.д.
После этого поискать популярные отличия уже созданных токенов от ERC20. Тот же лист weird ERC20 tokens может дать много пищи для размышлений и бессонных ночей.
Кроме того, нужно понимать, что токены (может за исключением мемкоинов), редко используются как отдельный контракт, а скорее в рамках различных протоколов: пулы, стейкинг, займы и т.д. А это еще отдельный вид изучения безопасности протокола!
В общем, не стоит полагаться на популярные видео, где учат создать токены за 15 минут. Это только отправная точка для дальнейшего изучения ERC20.
#erc20
Как и говорил ранее, переходим к более простым темам и вопросам на канале. И сегодня хотел бы поговорить про написание контрактов токенов, и почему это не так просто как кажется.
На различных курсах и видео обучениях показывают как написать свой токен чуть ли не на втором-третьем уроке, при этом буквально "пролетая" темы с типами данных, стандартами, безопасностью и т.д. И это позже принесет только проблемы молодому разработчику.
Да, создать свой токен и загрузить его в Эфир можно менее чем за пять минут: используя либо конструкторы, либо вообще скопировав чужой контракт. И если мы просто "балуемся" для своего удовольствия, то все ок. Но если реально работаем над проектом, то...
В самом популярном стандарте токенов, ERC20, всего 9 методов, 3 из который являются опциональными, и 2 события. При этом практически в каждом протоколе находятся уязвимости из-за неправильной реализации этого стандарта или некорректного использования существующего токена в своем протоколе.
Сейчас бы прикрепить сюда картинку Боромира из Властелина Колец с подписью: "Нельзя просто так взять и создать свой токен", но мы же серьезный канал)
Вообще, хорошо бы сначала разобраться в самом стандарте EIP и эталонных примерах реализации (например, Open Zeppelin), прежде чем приниматься за создание своего токена. Я бы даже сказал, что не стоит играться с токенами, пока не сможешь понять, за что отвечает каждая строка в контракте ERC20 от OZ.
После этого я бы рекомендовал посмотреть на текущие реализации популярных токенов, типа USDT/USDC/WETH и т.д.
После этого поискать популярные отличия уже созданных токенов от ERC20. Тот же лист weird ERC20 tokens может дать много пищи для размышлений и бессонных ночей.
Кроме того, нужно понимать, что токены (может за исключением мемкоинов), редко используются как отдельный контракт, а скорее в рамках различных протоколов: пулы, стейкинг, займы и т.д. А это еще отдельный вид изучения безопасности протокола!
В общем, не стоит полагаться на популярные видео, где учат создать токены за 15 минут. Это только отправная точка для дальнейшего изучения ERC20.
#erc20
👍14
Небольшой роадмап для начинающих
Перед стартом первого модуля в чате было предложение о том, чтобы написать небольшой роудмап для начинающих свой путь в разработке смарт контрактов. Думаю, сейчас он будет полезен для тех, кто хотел бы присоединиться ко второму модулю курса, пройдя базовые темы самостоятельно, или для тех, кто вообще хочет учиться сам.
Я уже писал про погружение в Solidity и высказывал свое мнение о популярных языках разработки, поэтому тут добавлю еще следующее.
Многие, исходя из сообщений в различных web3 группах, приходят в эту сферу с разными целями:
1. Научится создавать DAPP и писать смарт контракты;
2. Запустить свой проект / биржу;
3. Слышали про выплаты в конкурсных аудитах и хотят начать зарабатывать там;
4. Хотят запустить свою ноду и майнить крипту;
5. Интересуются блокчейном в целом и хотят научиться создавать свои сети;
6. Думают быстро разбогатеть на крипте, торгуя на бирже;
7. Планируют создать своего defi бота;
Я специально разделил темы пробелом, чтобы сделать акцент. Последние 4 либо мало связаны с Solidity, либо вообще далеки от него. Тут, к сожалению, подсказать по обучению много чего не смогу.
Для создания блокчейн сетей и создания ботов могут потребоваться и другие языки, например, Rust или Python (тут лучше копать в этом направлении). Биржевая торговля - вообще мимо этого канала. А про запуск своей ноды можете спросить в чате, есть куда более опытные участники, которые могут подсказать, с чего начать.
Поэтому, если вам интересны эти 4 темы - к сожалению, ничем помочь тут не смогу.
А вот для первых трех - вы попали по адресу на этот канал - можно предложить такую схему начального обучения.
1. Типы данных в Solidity. Это такие "кирпичики", из которых состоит сам язык. Без должного навыка и понимания их работы никакое обучение дальше не пойдет. Точнее, пойдет, но из-за большого количества нюансов вы совершите много ошибок, которые в конечном итоге приведут к потере ваших денег. Это действительно важная тема, хоть и кажется простой.
Обратите особое внимание на сложные типы данных: array, mapping, struct и enum. А также как они работают друг с другом.
2. Функции, области видимости и циклы. Когда закончите с типами данных, можно переходить к изучению функций. Начните с самых простых: прибавление / вычитание чисел, установка переменных, ввод данных и их вывод из вложенных маппингов и массивов структур и т.д.
3. Интерфейсы, библиотеки и наследования. Другая базовая тема для понимая работы смарт контрактов. Тут необходимо научиться строить связи между контрактами и разбивать код проекта логически, чтобы уменьшить его и сделать более читаемым.
4. Низкоуровневые вызовы: call, staticcall, delegatecall. Первое касание с опкодами EVM и одни и самых популярных методов, которые используют разработчики в своих прjтоколах. Если с call все более-менее понятно, то понимание работы delegatecall может занять у вас кучу времени. Тем не менее, его потратить стоит, чтобы не нарваться на проблемы в будущем..
5. И вот только после первых четырех пунктов можно приступать к изучению токенов и nft, а именно базовых стандартов ERC20 и ERC721. И тут нужно детально разбирать код контрактов популярных библиотек, типа Open Zeppelin, а также некоторые простые уже существующие токены: USDT, USDC, WETH и т.д. Будет хорошо, если вы сможете сказать, за что отвечает буквально каждая строка в их контрактах и к какому результату приведет выполнение той или иной функции.
6. Далее идут популярные паттерны: голосование, timelock, government, аукцион и DAO. По сути, на этих 5 архитектурных решениях строятся 90% всех протоколов.
7. После этого вы можете перейти к более сложным стандартам ERC, как например, ERC4626 - vaults, или ERC712 - подписи.
Изучение этих семи пунктов может занять у вас продолжительное время. Если хотите присоединиться ко второму модулю, то достаточно будет пройти первые 4 темы.
Как и всегда я очень рекомендую канал Ильи, где хорошо объясняются базовые темы по Solidity:
https://youtu.be/8A8-7Ks26yY?si=6BCsvfEl82TkHfR9
Перед стартом первого модуля в чате было предложение о том, чтобы написать небольшой роудмап для начинающих свой путь в разработке смарт контрактов. Думаю, сейчас он будет полезен для тех, кто хотел бы присоединиться ко второму модулю курса, пройдя базовые темы самостоятельно, или для тех, кто вообще хочет учиться сам.
Я уже писал про погружение в Solidity и высказывал свое мнение о популярных языках разработки, поэтому тут добавлю еще следующее.
Многие, исходя из сообщений в различных web3 группах, приходят в эту сферу с разными целями:
1. Научится создавать DAPP и писать смарт контракты;
2. Запустить свой проект / биржу;
3. Слышали про выплаты в конкурсных аудитах и хотят начать зарабатывать там;
4. Хотят запустить свою ноду и майнить крипту;
5. Интересуются блокчейном в целом и хотят научиться создавать свои сети;
6. Думают быстро разбогатеть на крипте, торгуя на бирже;
7. Планируют создать своего defi бота;
Я специально разделил темы пробелом, чтобы сделать акцент. Последние 4 либо мало связаны с Solidity, либо вообще далеки от него. Тут, к сожалению, подсказать по обучению много чего не смогу.
Для создания блокчейн сетей и создания ботов могут потребоваться и другие языки, например, Rust или Python (тут лучше копать в этом направлении). Биржевая торговля - вообще мимо этого канала. А про запуск своей ноды можете спросить в чате, есть куда более опытные участники, которые могут подсказать, с чего начать.
Поэтому, если вам интересны эти 4 темы - к сожалению, ничем помочь тут не смогу.
А вот для первых трех - вы попали по адресу на этот канал - можно предложить такую схему начального обучения.
1. Типы данных в Solidity. Это такие "кирпичики", из которых состоит сам язык. Без должного навыка и понимания их работы никакое обучение дальше не пойдет. Точнее, пойдет, но из-за большого количества нюансов вы совершите много ошибок, которые в конечном итоге приведут к потере ваших денег. Это действительно важная тема, хоть и кажется простой.
Обратите особое внимание на сложные типы данных: array, mapping, struct и enum. А также как они работают друг с другом.
2. Функции, области видимости и циклы. Когда закончите с типами данных, можно переходить к изучению функций. Начните с самых простых: прибавление / вычитание чисел, установка переменных, ввод данных и их вывод из вложенных маппингов и массивов структур и т.д.
3. Интерфейсы, библиотеки и наследования. Другая базовая тема для понимая работы смарт контрактов. Тут необходимо научиться строить связи между контрактами и разбивать код проекта логически, чтобы уменьшить его и сделать более читаемым.
4. Низкоуровневые вызовы: call, staticcall, delegatecall. Первое касание с опкодами EVM и одни и самых популярных методов, которые используют разработчики в своих прjтоколах. Если с call все более-менее понятно, то понимание работы delegatecall может занять у вас кучу времени. Тем не менее, его потратить стоит, чтобы не нарваться на проблемы в будущем..
5. И вот только после первых четырех пунктов можно приступать к изучению токенов и nft, а именно базовых стандартов ERC20 и ERC721. И тут нужно детально разбирать код контрактов популярных библиотек, типа Open Zeppelin, а также некоторые простые уже существующие токены: USDT, USDC, WETH и т.д. Будет хорошо, если вы сможете сказать, за что отвечает буквально каждая строка в их контрактах и к какому результату приведет выполнение той или иной функции.
6. Далее идут популярные паттерны: голосование, timelock, government, аукцион и DAO. По сути, на этих 5 архитектурных решениях строятся 90% всех протоколов.
7. После этого вы можете перейти к более сложным стандартам ERC, как например, ERC4626 - vaults, или ERC712 - подписи.
Изучение этих семи пунктов может занять у вас продолжительное время. Если хотите присоединиться ко второму модулю, то достаточно будет пройти первые 4 темы.
Как и всегда я очень рекомендую канал Ильи, где хорошо объясняются базовые темы по Solidity:
https://youtu.be/8A8-7Ks26yY?si=6BCsvfEl82TkHfR9
🔥13❤5👍4❤🔥1
а если у вас все ок с английским языком, то можете записаться на Updraft:
https://updraft.cyfrin.io/
Пост получился очень объемным, поэтому будет еще вторая часть про оставшиеся темы для погружения в Solidity.
#start #roadmap
https://updraft.cyfrin.io/
Пост получился очень объемным, поэтому будет еще вторая часть про оставшиеся темы для погружения в Solidity.
#start #roadmap
❤6
Немного ссылок и чуть больше о Solidity
Недавно в разговоре с учеником открыл для себя новый вопрос, на который никогда ранее не делал акцент в обучении или на этом канале.
"Научившись Solidity, я могу писать смарт контракты только для Эфира? А на другие блокчейны нужны свои языки?". И вроде вопрос для опытных разработчиков простой, но для начинающих может быть весьма актуальным. Поэтому хочу ответить на него тут.
Из википедии возьмем определение языка:
Solidity is a statically typed programming language designed for developing smart contracts that run on the Ethereum Virtual Machine (EVM) or compatible virtual machines.
Другими словами, он подходит для написания программ, которые работают на EVM (виртуальной машине Эфириума). На сайте chainlist вы можете найти весь список сетей, где может быть использован Solidity.
В целом, можно сказать, что выучив Solidity, вы сможете писать контракты для таких сетей как:
1. Optimism;
2. Arbitrum;
3. ZK Sync;
4. Polygon;
5. BNB Smart Chain;
6. Filecoin;
и многих многих других! Более того, буквально каждый месяц появляются новые сети, например, Blast или Base, которые привлекают к себе внимание и инвестиции.
На мой взгляд, Solidity разработчики будут достаточно востребованы в ближайшее время, с одним лишь условием: требования значительно возрастут! И чем раньше вы начнете учиться ему, тем быстрее сможете влиться в поток!
Также в чате ранее просили поделиться ссылками на некоторые ресурсы, которые я сам использовал и использую для своего обучение, и где слежу за новостями из мира web3.
Все мои ресурсы на английском языке, так как именно на нем можно найти самую актуальную информацию.
В целом, как и писал на канале до этого, что большинство интересных статей и Solidity hints я черпаю из Твиттера. По этой ссылке можно найти список пользователей, на которых я подписан:
Список Twitter
Далее пара каналов на Ютуб:
Smart Contract Programmer
Patrick Collins
patrickd
Owen Thurm
Мой любимый блог:
RareSkills tutorials
И пара ссылок, где можно найти обучающие курсы:
Updaraft free courses
Alchemy University
RareSkills bootcamp
Учиться никогда не поздно.
Если хотите порекомендовать свой ресурс для обучения, буду рад, если напишите об этом в комментариях.
#solidity #chains #links
Недавно в разговоре с учеником открыл для себя новый вопрос, на который никогда ранее не делал акцент в обучении или на этом канале.
"Научившись Solidity, я могу писать смарт контракты только для Эфира? А на другие блокчейны нужны свои языки?". И вроде вопрос для опытных разработчиков простой, но для начинающих может быть весьма актуальным. Поэтому хочу ответить на него тут.
Из википедии возьмем определение языка:
Solidity is a statically typed programming language designed for developing smart contracts that run on the Ethereum Virtual Machine (EVM) or compatible virtual machines.
Другими словами, он подходит для написания программ, которые работают на EVM (виртуальной машине Эфириума). На сайте chainlist вы можете найти весь список сетей, где может быть использован Solidity.
В целом, можно сказать, что выучив Solidity, вы сможете писать контракты для таких сетей как:
1. Optimism;
2. Arbitrum;
3. ZK Sync;
4. Polygon;
5. BNB Smart Chain;
6. Filecoin;
и многих многих других! Более того, буквально каждый месяц появляются новые сети, например, Blast или Base, которые привлекают к себе внимание и инвестиции.
На мой взгляд, Solidity разработчики будут достаточно востребованы в ближайшее время, с одним лишь условием: требования значительно возрастут! И чем раньше вы начнете учиться ему, тем быстрее сможете влиться в поток!
Также в чате ранее просили поделиться ссылками на некоторые ресурсы, которые я сам использовал и использую для своего обучение, и где слежу за новостями из мира web3.
Все мои ресурсы на английском языке, так как именно на нем можно найти самую актуальную информацию.
В целом, как и писал на канале до этого, что большинство интересных статей и Solidity hints я черпаю из Твиттера. По этой ссылке можно найти список пользователей, на которых я подписан:
Список Twitter
Далее пара каналов на Ютуб:
Smart Contract Programmer
Patrick Collins
patrickd
Owen Thurm
Мой любимый блог:
RareSkills tutorials
И пара ссылок, где можно найти обучающие курсы:
Updaraft free courses
Alchemy University
RareSkills bootcamp
Учиться никогда не поздно.
Если хотите порекомендовать свой ресурс для обучения, буду рад, если напишите об этом в комментариях.
#solidity #chains #links
🔥12👍2❤1