Web3 разработчик
257 subscribers
17 photos
2 videos
49 links
Ethereum, DeFi, nodes infrastructure, open source
Download Telegram
On-chain governance
 
Что такое гавернанс, спросите вы?
 
Это система, как "акционеры" (держатели токенов) DAO вносят изменения. Например, протокол, который берет комиссию за операции. Размер этой комиссии может определять "собрание акционеров", вынося вопрос на голосование.
 
В моем текущем проекте используется реализация от OpenZeppelin, основные компоненты:
 
Governor. Главная точка входа. Что с ним можно делать:
– Предложить изменение: Governor.propose() – например, изменить комиссию протокола. Предложить может участник, имеющий минимальный баланс токенов на счету (кастомизируется).
– После того, как предложение внесено, должно пройти votingDelay времени (чтобы все узнали о планируемом голосовании) и далее votingPeriod времени будет идти голосование.
– Если предложение набрало голоса для принятия (по кол-ву токенов, кастомизируется при деплое), то оно считается принятым.
– Думаете, можно дальше сразу его применить? А вот и нет. Сначала нужно сделать Governor.schedule() (запланировать к выполнению), далее через определенный период выполнить Governor.execute().
 
Задержку помогает сделать контракт Timelock:
– Timelock.schedule() планирует изменение через не меньше чем Timelock.getMinDelay().
– После того как время прошло, можно сделать Timelock.execute(). В нашем случае schedule, execute вызывает Governor, но это настраивается.
 
Есть еще механизм – мультисиг кошелек для реализации повседневных изменений разработчиками.
 
Это связка контрактов Multisig-DevTimelock. Например, разработчики запланировали какую-то фичу.
1. Создается предложение (proposal) на изменение (например, хотим опубликовать смарт-контракт).
2. 3 из 5 подписывают.
3. Далее изменение планируется DevTimelock.schedule() (только Multisig может вызвать) и через заданное время может быть выполнено через DevTimelock.execute(). У всех контрактов прописано в правах, что изменения может делать только DevTimelock.
 
А адрес Multisig для DevTimelock меняется через Governance и Timelock. То есть имеем два уровня иерархии – акционеры компании могут назначить свою группу разработчиков (multisig) для управления организацией.
 
Как-то так. Думал, будет коротенький пост, но тема сложная. Как разобрался – кайфанул сам.

Web3-разработчик
🔥4👍1
Вебхуки ннада?
 
Писал некоторое время назад про вебхуки о блокчейн событиях от Alchemy. Мы в @yokifinance в свое время написали этот функционал сами, тк не любим завязываться на внешние уникальные решения.
 
На этой неделе решили выложить в опенсорс. Забирайте!
https://github.com/yokifinance/web3hooks
 
Есть API, чтобы добавить контракт для прослушивания. Указываете ChainId, contractAddress, webhookURL и наслаждаетесь.
 
Написано на Go, API TypeScript NestJs, БД Postgres. Никаких внешних сервисов, полностью self-hosted, есть docker-compose. ПРы велкам, как говорится.
 
Web3 разработчик
1👍7🔥21
Выкатка на новую сеть
 
В январе выкатывались (почти получилось) на новую L1 Соник. Очень похоже на то, как обживаешься в новом только что построенном доме. Какие были сложности:
 
– Свой газ токен S (не совпадает с ETH), что потребовало пересчета кое-где в приложении.
– Нужные нам DeFi проекты выкатывались неравномерно. Нужен был AAVE – полтора месяца назад был инициирован governance proposal, но еще не завершились все этапы голосования.
– Нужен был лендинг маркет Silo – выкатился быстро, но оказалось, что из рынков только S-stS, а не USDC (на текущий момент уже есть). Также, новая версия V2 и с ней небольшие, но изменения интерфейса контрактов.
– Кросс-chain решение Axelar, на которое завязан наш governance, сказали, что выпустятся через несколько месяцев.
 
Был чатик с представителями проектов, где можно было задать вопрос любой команде.

Итого: в целом рабочий процесс, все очень дружелюбны и хотят помочь, но лучше уточнять критичные детали заранее – без чего вы сможете жить, а без чего нет.
👍3
Эирдропы
 
Сейчас буду говорить про эирдропы для обычных юзеров.
Не очень люблю мелкую моторику в крипте, мне лично больше по душе HODL. Но решил первый раз попробовать на Сонике. Они выкатили Sonic Points, где можно заработать поинты, от просто холда активов до разных действий с ними в приложениях.
 
Забриджил WETH на Соник через промежуточную конвертацию в USDC, тк WETH -> WETH требовал 1-2% комсы. Далее застейкал WETH в Silo Finance с нулевым APR, за стейк обещают Соник поинты. Получается, ходлю WETH, но в лендинг маркете и зарабатываю поинты.
 
Можно было пойти дальше, и взять S под залог WETH и далее застейкать (ставка по займу на сегодня 3.1%, а вознаграждение за стейкинг 5.87%), но кто его знает, не поменяются ли завтра ставки местами, а платить реальные деньги сейчас за шанс получить поинты потом – ну такое.
 
Если не забуду – через полгодика отпишу, пришел ли приятный бонус или нет.
 
А вы в эирдропах участвуете? Что-нибудь заработали?
👍2
Кто-нибудь зарабатывает на комиссиях, предоставляя ликвидность на дексах?
Если да и есть желание помочь — стукнитесь плз в контакты @web3dev_notes_bot Делаю MVP бота для ликвидити провайдеров, хочу пару кастдев вопросов в тексте задать
👍2
Свой продукт
 
Сейчас будет немного необычный (и длинный 🙂) пост. И сразу дисклеймер – это исключительно субъективное мнение и не рецепт успеха.
 
Хочу запустить успешный продукт. Это то, чего у меня в жизни еще не было.
 
Был опыт двух не взлетевших стартапов – продукт сделали, упоролись, а потом никто не пользуется. Был успешный опыт студии заказной разработке, когда мы с партнерами раскачали компанию до более $1M годовой выручки, но вот опыта успешного продукта пока нет.
 
Наверное, я не очень хорош в придумывании идей. Даже, скорее, в том, чтобы увидеть потребность. Из опыта неуспешных стартапов я вывел для себя, что главное – иметь решение, которое закрывает некоторую проблему пользователя. Идеально, если с этой проблемой знаком сам (“делать продукт для себя”).
 
Два моих микропродукта получили некоторый трекшен. Первый – это расширение для Dune. Совсем микро, при примерно 60ти установках пользовались, я думаю, человек 20-30.
Второй (хронологически первый) – это чат нашей локалки на основе IRC, который я делал еще в середине 2000х (как давно это было!). Тогдашние IRC клиенты были топорные, я сделал свой, добавил поддержку смайлов, доску объявлений  – им пользовалось некоторое время 100-150 человек каждый день. Руководство сети за это подогнало мне около 300 МБ интернета (да, тогда они были платные). В общем, это история для олдов 🙂
 
Сейчас есть четкое понимание – чтобы запустить продукт, надо запускать продукты. Билдить, шиппить, нарабатывать опыт решения болей пользователей, быстрого кодинга, продвижения. Не получится первый раз – взлетит на второй, третий, десятый и тд. Самое наивное – это сидеть на диване и мечтать, что однажды придет классная идея и куча юзеров. Это то же, что и мечтать пожать лежа 150, если до этого не притрагивался к штанге. Вот у Левелса 5% проектов только взлетели.
 
Поэтому решил периодически делать небольшие продукты в веб3/крипте, в режиме инди мейкинга, и первый буду релизить на следующей неделе – последние десять дней тружусь над ним фул-тайм. Не знаю, как часто будут релизы, ведь надо делать это в перерывах между зарабатыванием на жизнь.
 
Детали будут на следующей неделе, но если вы предоставляете ликвидность в пулы Uniswap V3 и вам интересно – напишите, дам доступ перед публичным запуском. Продвижение думаю делать через Твиттер, буду просить о репостах всех кого знаю, телеграмм чаты, возможно Reddit – если пропустят.
 
Вот такие дела, считайте это прогревом и пожелайте удачи 🙂
👍10🔥4
Media is too big
VIEW IN TELEGRAM
Релиз
 
Выкатил обещанный продукт – @PoolPilotBot
Это телеграмм бот, который будет (надеюсь) полезен провайдерам ликвидности. Основная функция бота сейчас – оповещать о том, что позиция вышла из диапазона / зашла в него. Насколько вижу, это инструмент скорее для ХОДЛеров, которые сильно не следят за рынком и поэтому редко проверяют свои позиции.
 
Посмотрим, будет ли какой-то отклик аудитории, будет ли кто-то использовать на постоянной основе. Если да, то можно расширять на другие пулы/сети/дексы.
 
Технические детали напишу позже.
 
Пост в твиттере, поддержите, пожалуйста, лайком/репостом, у кого есть возможность.
🔥7
Под капотом PoolPilotBot

Проект делал чуть больше 2х недель. Кайфанул. Обещал написать про технологии. Коротко:
- turborepo для организации репозитория.
- railway для хостинга, деплой занял примерно 5 минут – указываешь репо и погнали. Здорово, что у railway есть пробный период – дают 5 долларов – этого хватает на месяц.
- БД - supabase, бесплатный тариф, и до ограничений еще очень далеко.
- очередь для отправки сообщений – pgmq, там же в supabase, очень просто и кайфово сделано. Если подытожить, то на хостинг/инфру я потратил почти ноль времени, никаких VPS, настроек докеров, и проч.
- телеграмм библиотека – конечно же grammy.
- JSON RPC – Alchemy.
- TypeScript, NodeJs.
- Cursor как среда разработки – купил платный план. Что-то осмысленное, конечно, не тянет, но при рефакторинге помогает "вынести вот это в константы туда и переведи на русский" как пример. Или “вот веб-страница, спарси адреса деплойментсов и переведи в константы” – справляется на ура
 
Если есть вопросы – чем могу помогу.

@web3dev_notes
🔥6👍3
Добрый пиар

Новая рубрика – делюсь каналами про крипту, кого читаю.

Сегодня расскажу про канал Криптологическая экспедиция. Дима пишет про крипто разработку под Эфир, фишки Солидити и немного про оффсайт ивенты. Пишет не часто, но по делу. Рекомендую к подписке!
1👍4
SPAM

Чят, от имени бота обратной связи канала пришел спам тем, кто мне писал когда-то. На фото скрин со второго акка, также отписал подписчик.

Я пока не понимаю, как так получилось, бот был создан через @LivegramBot, запрошу их ТП.

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

Есть у кого-то мысли, как это возможно?
Web3 разработчик
SPAM Чят, от имени бота обратной связи канала пришел спам тем, кто мне писал когда-то. На фото скрин со второго акка, также отписал подписчик. Я пока не понимаю, как так получилось, бот был создан через @LivegramBot, запрошу их ТП. На всякий случай, ничего…
Проблема спама найдена

И это Livegram, который без спроса отправил сообщения тем, кто с ним общался.
Нашел новость на каком-то китайском сайте, это не только у нас такое.

В итоге Livegram был выброшен на помойку просто указал свой ТГ для контакта.

Желаю всем поменьше спамеров и продуктивной рабочей недели 🚀
👍4
Если работаете с расчетами цен, делайте это…
 
Два раза в день, спина не будет болеть.
 
Понял, что когда пишу расчеты цен, у меня очень много времени занимает, смотря на переменную/функцию типа price/usdPrice/ethPrice, понять, какой тут base и quote токен.
 
Сегодня озарило – использовать везде нотацию price_base_quote (слово price в начале, далее base токен, quote токен в конце), например:
 
price_eth_usd – цена eth в usd
price_usdс_eth – цена usdc в eth
getPriceToken0Eth – получить цену token0 в eth.
 
Сегодня работал и просто кайфанул, мозг разгрузился.
 
Надеюсь, и вам жизнь облегчит 🫶
👍6
Web3 разработчик
Если работаете с расчетами цен, делайте это…   Два раза в день, спина не будет болеть.   Понял, что когда пишу расчеты цен, у меня очень много времени занимает, смотря на переменную/функцию типа price/usdPrice/ethPrice, понять, какой тут base и quote токен.…
3 дня использую и кайфую.

Еще вывел удобную мнемонику price_x_y = amount_y / amount_x (второе делим на первое).

Также, не нужно думать, как вычислять цены через промежуточные, например price_x_y = price_x_a × price_a_b × price_b_y – соседние рядом стоящие переменные “схлапываются”, остается только то что в начале (`x`) и конце (`y`).

Не высшая математика, но позволяет делать меньше ошибок.
Искусственный интеллект
 
Давайте расскажу, как использую ИИ в работе. Только конкретика - что делаю в Cursor:
 
– Написать простую утилитку с четко формализуемой логикой – "вот CSV файл с адресами токенов, залезь в блокчейн и скачай их имя и decimals".
– SQL запросы для простой аналитики по таблице – "вот таблица с юзерами и датой регистрации, напиши запрос, чтобы показать количество зареганых юзеров по месяцам".
– Код не работает/глючит/еще что-то – "дай идеи, почему …". Да, половина идей может быть полной ерундой, но какие-то очень полезны.
– Написать бойлерплейт – "вот таблица, сделай структуры данных под нее".
– Написать простой алгоритм – "отсортируй этот массив по полю А, если его нет то по Б, иначе С".
– Сохранить в константы кода адреса деплойментов - "вот веб-страница (указываю УРЛ), скачай адреса контрактов и сохрани в константы". Cursor лезет в интернет и скачивает!
– При рефакторинге мультиязычного приложения – "переведи эти строки на русский и сохрани в переменные".
– Быстро преобразовать данные со скрина – "вот тебе два скрина с данными, посчитай между ними разницу в процентах".
 
Что самое впечатляющее – я обленился настолько, что даю задания через скриншоты – "вот скриншот таблицы из БД, сделай структуру данных в TypeScript" – и он меня почти всегда понимает.
 
ИИ – однозначно классный рычаг. Не заменяя программиста, помогает делать "черновую" работу.
👍11
Приватники текстом в .env файлах
 
Каюсь, делал это до недавнего времени. Даже видел, как лежат в открытом виде приватники от $100K кошельков в .env. Думаю, не надо объяснять, почему это опасно – простой сканер .env файлов может вытащить немалые деньги. А скамеров хватает.
 
Наконец, нашел час и разобрался. Оказывается, все есть в ethers. Идея – зашифровать приватник паролем и хранить его в env в зашифрованном виде. Приложение при запуске читает зашифрованный приватник и дешифрует паролем. Я пароль разместил в таблицу в БД – т.к. вероятность одновременной утечки БД и .env файла мала.
 
Итак, сначала шифруем приватник. Пароль выбираете сами.


 
const wallet = new ethers.Wallet("PRIVATE_KEY");
const encryptedWalletString = await wallet.encrypt('PASSWORD');
console.log(encryptedWalletString);
 

 
Зашифрованный приватник выглядит так (в начале адрес кошеля, что удобно - сразу понятно от какого):


 
{"address":"32f04*****","id":"f0596bf7-**","version":3,"Crypto":{"cipher":"aes-128-ctr","cipherparams":{"iv":"***"},"ciphertext":"*****","kdf":"scrypt","kdfparams":{"salt":"***","n":131072,"dklen":32,"p":1,"r":8},"mac":"***"}}

 
Это вставляете в .env. В БД записываете пароль.
 
Далее в приложении расшифровываете:
 

const encrypted = process.env.WALLET_ENCRYPTED!;
const password = …. // load password from the DB
 
const wallet = (await ethers.Wallet.fromEncryptedJson(encrypted, password)).connect(
      new ethers.JsonRpcProvider(process.env.RPC_URL),
    );

 
Просто как 1-2-3! Наслаждаемся тем, что сильно улучшили свою безопасность.

А как ваши приложения хранят приватники?
👍7
Вот и лето прошло пришло
 
Давно не писал, а есть о чем рассказать:
 
Работаю в команде AI вайб-трединг бота SQDGN. Команда пушка, продукт тоже. Видение – персонализированный бот-помощник, который будет помогать ритейлу инвестировать выживать в суровом мире скамов и автотрейдингов. Данные из sqd.ai, децентрализованного "озера данных".
 
Опубликовали в опенсорс сервисы, чтобы вытаскивать данные по свопам/ценам на дексах, и трансферам / холдерам (все EVM, пока Mainnet/Base). Как Dune на минималках, только self-hosted и бесплатно. Данные пишем в Clickhouse.
 
Освоил Clickhouse (ex-Yandex) для обработки больших данных. Первый месяц хочется выбросить ноут в окно, потом начинаешь получать удовольствие 🙂 В планах написать практическую статью для быстрого старта в Clickhouse для тех, кто работал с OLTP базами. Если интересно, ставь огонь.
 
Всем хорошего крипто-лета!
🔥18👍1