разбираем где и как искать работу блокчейн-разработчикам
Контрибуть в open-source
1⃣ Берем любой популярный web3 проект - Ethers.js, Hardhat, Foundry, Solidity, Ethereum, L2-решений2⃣ Заходим в issue, смотрим, какие задачи можно решить.3⃣ Читаем чужой код - понимаем, как работают крупные проекты.4⃣ Контрибь – попадаешь на радары.
Свой pet-проект и популяризация в Twitter/Reddit/Telegram
Блокчейн = код + медийка.
Твой GitHub + Twitter (X) + Telegram = твое резюме.
ПЛАН
Пилить DeFi-контракты, арбитражных ботов, NFT-дропы, L2-плагины. ⬇️
> Расписывать процесс разработки в тредах в Twitter / писать посты в Telegram.
> Делать видосы – записывай свой код с объяснением.
например
Я написал арбитражного бота на Python -> выложил GitHub + Telegram пост -> Кто-то увидел -> предложил контракт или работу🤬
DAO и комьюнити-хакатоны
Работодатели в крипте ищут людей внутри комьюнити.
Как попасть?
Gitcoin, ETHGlobal, Encode Club - хакатоны и гранты🤬 Arbitrum, Optimism, Polygon, zkSync - у всех есть гранты для разработчиков.
Участвуем в обсуждениях в Discord/Twitter/Telegram у топовых криптопроектов
Заходим в Lens, Farcaster, Warpcast - новые соцсети для крипторазработчиков🤳
Questbook - гранты, задания.
Cryptojobslist - площадка с вакансиями и фриланс-заказами в крипто.🐺 Ethlance - децентрализованная фриланс-биржа на Ethereum.
LaborX – платформа с крипто-оплатами в USDT, ETH etc.
Twitter + Discord = главные HR-платформы крипты
Подаёмся не через сайты, а через комьюнити.
Где искать?
CryptoJobsList, Remote3, Web3.career - доски вакансий🤫 Discord серверы Solana, Ethereum, zkSync, Polygon, Starknet - ИЩЕМ "we're hiring".
Вот так, больше кода, гайс, больше проектов, больше видимости
Разбираем тему далее?? ИДЕИИИ!!
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩19🐳6👍5🔥4💘2
🐈 Pet-project - личный (не коммерческий) проект, который ты создаешь для изучения технологий, прокачки навыков и создания портфолио.
разбираем такие проекты:
Создаем DApp, которое подключается к кошельку (MetaMask, WalletConnect) и показывает баланс токенов, стейкинг, доходность фарминга, транзакции и другие метрики💻
Технологии: TypeScript, Next.js, Ethers.js / Viem, The Graph💰 Фичи:
> Автоподключение к кошельку
> История транзакций
> Анализ доходности
> Поддержка нескольких сетей
⌚️ Бот, отслеживает новые NFT-аукционы на OpenSea / Blur и уведомляет пользователя о самых перспективных лотах.
Python (Web3.py), Solidity, OpenSea API, Telegram Bot API💪 Фичи:
> Подключение к NFT-маркетплейсам
> Оценка ликвидности коллекций
> Автоматическое размещение ставок
> Уведомления в Telegram
🤫 Чат, где можно отправлять сообщения и платить за них криптой.
Solidity, React, IPFS, WalletConnect
Фичи:
> Отправка сообщений через IPFS
> Оплата через smart-contract
> Поддержка ENS🪙
Создаем платформу для управления DAO с возможностью голосования и управления токенами.
Solidity (Governor контракт), React, Ethers.js, Hardhat☕️ Фичи:
> Поддержка голосования на основе токенов
> Гибкие правила голосования
> Подключение к Snapshot / Aragon
🤬 Маркетплейс для игровых NFT с возможностью P2P-торговли и ставок.🤣 Solidity (ERC-721 / ERC-1155), Next.js, IPFS, The Graph
Фичи:
> Выставление NFT на продажу
> On-chain аукционы
> Подключение к OpenSea
Изучение технологий - прокачиваем Solidity, Ethers.js, Web3.py, Hardhat, Foundry и другие инструменты🥤 💼 Создание портфолио - можно показать работодателю или инвесторам🤩 Развитие идеи - успешный pet-project можно превратить в стартап.
Проверка концепции - можем тестировать новые механики, например, новые модели токеномики🎉
Реализация пет-проектов - ключ к понимаю технологий, с которыми мы работаем
ПОРА ДЕЛАТЬ
Предлагаю реализовать один из таковых тут! Как вам? 🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16😍5🐳4❤2💘1
безумно рад популяризации блокчейна в нашем пространстве
Двигаемся далее, новые проекты, новый уровень, новые цели
Спасибо всем, кто присоединился к этому легендарному пути, Легенды!
Shoot For The Stars, Aim For The Moon 💫💫
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👍5💘5❤3🤩1😍1
разбираемся на практике - создаем проекты постепенно набирая обороты
как работать с web3.py и получать информацию из блокчейна?😑
Устанавливаем web3.py
> Подключаемся к публичному RPC-узлу (Infura или Alchemy)
> Получаем информацию о блоках, балансе кошельков и истории транзакций
отправляем транзакции и работаем с приватными ключами🙏
> Создаем и подписываем транзакцию с помощью web3.py
> Отправь тестовые ETH на Goerli или Sepolia
> Пробуем взаимодействовать с любым смарт-контрактом
🥊 читаем события из блокчейна и работаем с историей транзакций.
> Подключаемся к WebSocket-узлу Ethereum для реального времени
> Пишем Python-скрипт для мониторинга новых блоков и транзакций
> Фильтруем транзакции по адресу, токенам или конкретным контрактам
> Парсим события (logs) из смарт-контрактов (например, переводы токенов ERC-20)
Получаем информацию о ценах криптовалют с CEX и DEX✏️
> Подключаемся к API Binance, OKX, KuCoin (CEX)
> Получаем данные о ценах токенов и объёме торгов
> Подключаемся к Uniswap или 1inch API для получения цен на DEX
> Реализовываем мониторинг скачков цен и анализ спредов между биржами
Автоматическое отслеживание значительных изменений цен😭
> Подключиться к нескольким биржам (CEX + DEX)
> Реализовать логику уведомления при изменении цены > X% за Y секунд
> Реализовать Telegram-бота для отправки уведомлений
Добавить функционал, например: просмотр цены по запросу👊
СТАРТОВЫЙ ПАКЕТ ТАКОВ!!
Как вам?? ИДЕИ!?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥8❤🔥3💅2
часть №2, практика с нуля до софта
Подключаемся к смарт-контракту ERC-721 или ERC-1155
> Получаем данные о NFT (метаданные, владелец, историю транзакций)
> Отправляем NFT другому пользователю
> Читаем события (Transfer) из NFT-контрактов
ТУЛЗ👍
Web3.py – работа с Ethereum (чтение данных, транзакции)
IPFS / Pinata – хранение метаданных NFT
Etherscan API – получение истории транзакций
бот для автоматической торговли на Uniswap
> Подключаемся к Uniswap V3 (PancakeSwap или 1inch)
> Получаем ликвидность, цены и объемы
> Совершаем свопы между токенами
> Мониторим цены и автоматически исполненяем сделки
ТУЛЗ🤩
Web3.py – взаимодействие с контрактами
Uniswap V3 SDK / 1inch API – свопы и цены
AIOHTTP / Asyncio – асинхронные запросы
Ищем разницу цен и совершаем прибыльные сделки🎧
> Подключаемся к нескольким DEX и CEX
> Расчитываем спред между биржами
> Автоматически исполненяем арбитражные сделки
> Работаем с flash-loan (по желанию)
ТУЛЗ😱
CCXT - API для CEX (Binance, OKX, KuCoin)
Web3.py – подключение к DEX (Uniswap, PancakeSwap)
Pandas/Numpy – расчет спредов
Flashbots – для арбитража с flash-loans
Продвинутая тема для Web3-разработчиков
> Мониторинг мемпула и поиск выгодных транзакций
> Написание снайпер-бота для покупки новых токенов
> Фронтраннинг (опционально)
ТУЛЗ💃
Web3.py + Etherscan API – анализ транзакций
Infura / Alchemy – доступ к мемпулу
Flashbots – отправка приоритетных транзакций
Вот такой спикок софта у нас получился, практикуемся!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤🔥2👍2💘1
разберем, как писать софты из первой и второй части степ бай степ
> Подключение к блокчейну
> Отправка Транзакций
> Взаимодействие с DEX CEX биржами Rest API
> Взаимодействие со смарт-контрактами💩 все подробно расписал в моих python материалах на Teletype
teletype.in/@vartcall/+web-3-python-development
Бот для мониторинга резких движений цены (Асинхронность)
> Подключение к API бирж - используем ccxt для CEX и web3.py для DEX.😡
> Асинхронный мониторинг цен - используем asyncio, будем проверять цены с определенным интервалом.
> Логика уведомлений - если цена изменится больше чем на X% за Y секунд, отправляем уведомление.
> Telegram-бот - реализуем уведомления через aiogram.
пример
async def fetch_price():
"""Функция для получения цены с биржи"""
exchange = getattr(ccxt, EXCHANGE_ID)()
ticker = await exchange.fetch_ticker(PAIR)
await exchange.close()
return ticker['last']
async def monitor_prices():
"""Мониторинг резких изменений цен"""
prev_price = await fetch_price()
while True:
await asyncio.sleep(CHECK_INTERVAL)
current_price = await fetch_price()
price_change = ((current_price - prev_price) / prev_price) * 100
if abs(price_change) >= PRICE_CHANGE_THRESHOLD:
message = (f"⚠️ Цена {PAIR} изменилась на {price_change:.2f}%\\\\n"
f"Было: {prev_price}, стало: {current_price}")
await bot.send_message(chat_id=YOUR_CHAT_ID, text=message, parse_mode=ParseMode.MARKDOWN)
prev_price = current_price
DeFi-бот для свопов на DEX
> Подключаемся к Uniswap V3 / PancakeSwap / 1inch через web3.py и etherscan API🌈
> Получаем ликвидность, цены и объемы из смарт-контрактов DEX.
> Совершаем свопы между токенами, используя смарт-контракт DEX.
> Мониторим цены и автоматически исполнять сделки при заданных условиях.
пример
from web3 import Web3
import asyncio
import json
# настройки
INFURA_URL = "https://mainnet.infura.io/v3/INFURA_PROJECT_ID"
PRIVATE_KEY = "PRIVATE_KEY"
WALLET_ADDRESS = "WALLET_ADDRESS"
UNISWAP_ROUTER = "0xE592427A0AEce92De3Edee1F18E0157C05861564" # Uniswap V3 Router
TOKEN_IN = "0xdAC17F958D2ee523a2206206994597C13D831ec7" # USDT
TOKEN_OUT = "0xC02aaa39b223FE8D0A0e5C4F27eAD9083C756Cc2" # WETH
AMOUNT_IN = Web3.toWei(10, "ether") # Сколько токенов покупаем
SLIPPAGE = 0.5 # % проскальзывания
# подключение к Ethereum
w3 = Web3(Web3.HTTPProvider(INFURA_URL))
assert w3.isConnected(), "Ошибка подключения к сети Ethereum"
# загрузка ABI Uniswap
with open("UniswapV3RouterABI.json") as f:
router_abi = json.load(f)
router_contract = w3.eth.contract(address=UNISWAP_ROUTER, abi=router_abi)
def get_quote():
"""Получаем цену обмена через смарт-контракт"""
amount_out_min = int(AMOUNT_IN * (1 - SLIPPAGE / 100))
return amount_out_min
def swap():
"""Исполняем своп USDT -> WETH"""
nonce = w3.eth.get_transaction_count(WALLET_ADDRESS)
txn = router_contract.functions.exactInputSingle({
'tokenIn': TOKEN_IN,
'tokenOut': TOKEN_OUT,
'fee': 3000,
'recipient': WALLET_ADDRESS,
'deadline': w3.eth.get_block('latest')['timestamp'] + 60,
'amountIn': AMOUNT_IN,
'amountOutMinimum': get_quote(),
'sqrtPriceLimitX96': 0
}).build_transaction({
'from': WALLET_ADDRESS,
'gas': 200000,
'gasPrice': w3.toWei('50', 'gwei'),
'nonce': nonce
})
signed_txn = w3.eth.account.sign_transaction(txn, private_key=PRIVATE_KEY)
tx_hash = w3.eth.send_raw_transaction(signed_txn.rawTransaction)
return w3.toHex(tx_hash)
async def monitor_and_trade():
"""Мониторинг цен и автоторговля"""
while True:
price = get_quote()
print(f"Текущая цена: {price}")
if price < Web3.toWei(0.02, "ether"): # Критерий покупки
tx_hash = swap()
print(f"Своп выполнен! TX: {tx_hash}")
await asyncio.sleep(30)
ВОТ ТАКАЯ ПЕРВАЯ ЧАСТЬ!
Как вам ИДЕЯ, ЧТОБЫ ВСЕ ЭТИ МАТЕРИАЛЫ Я ДРОПНУЛ НА GITHUB??
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥21❤7😍3💘1
часть №2
разбираем пример софта из второй части наших идей
Арбитражный бот между DEX и CEX
критерии версий библиотек - requirements.txt
ccxt>=4.0.0
web3>=6.0.0
pandas>=2.0.0
numpy>=1.24.0
web3-flashbots>=2.0.0
pip install -r requirements.txt
пример кода
# подключениек CEX (ccxt)
cex_exchanges = {
"binance": ccxt.binance(),
"okx": ccxt.okx(),
"kucoin": ccxt.kucoin()
}
# функция для получения цен cex
def get_cex_prices(symbol):
prices = {}
for name, exchange in cex_exchanges.items():
try:
ticker = exchange.fetch_ticker(symbol)
prices[name] = ticker['last']
except Exception as e:
print(f"Ошибка получения цены с {name}: {e}")
return prices
# функция для получения цен с DEX (Uniswap V2)
def get_dex_price(pair_address):
try:
contract = w3.eth.contract(address=pair_address, abi=[
{"name": "getReserves", "outputs": [
{"name": "reserve0", "type": "uint112"},
{"name": "reserve1", "type": "uint112"}], "stateMutability": "view", "type": "function"}
])
reserves = contract.functions.getReserves().call()
price = reserves[1] / reserves[0]
# Примерный расчет цены
return price
except Exception as e:
print(f"Ошибка получения цены с DEX: {e}")
return None
# функция расчета спреда и поиск арбитражной возможности
def find_arbitrage(symbol, dex_address):
cex_prices = get_cex_prices(symbol)
dex_price = get_dex_price(dex_address)
if dex_price is None:
return None
for exchange, cex_price in cex_prices.items():
spread = ((cex_price - dex_price) / dex_price) * 100
print(f"Спред между {exchange} и DEX: {spread:.2f}%")
if spread > 1: # 1% порог арбитража
print(f"🔥 Возможность арбитража! Покупаем на DEX, продаем на {exchange}")
requirements.txt
web3>=6.0.0
requests>=2.28.0 # Для API Etherscan
flashbots>=2.0.0 # Интеракция с Flashbots
python-dotenv>=1.0.0 # Для API-ключей (Infura, Alchemy, Etherscan)
numpy>=1.24.0
pandas>=2.0.0
пример кода
def monitor_mempool():
print("🚀 Мониторинг мемпула...")
latest_block = w3.eth.block_number
while True:
new_block = w3.eth.block_number
if new_block > latest_block:
print(f"🔄 Новый блок: {new_block}")
pending_transactions = w3.eth.get_block('pending', full_transactions=True)
for tx in pending_transactions.transactions:
analyze_transaction(tx)
latest_block = new_block
time.sleep(1)
# функция анализа транзакций
def analyze_transaction(tx):
try:
to_address = tx["to"]
value = w3.from_wei(tx["value"], "ether")
gas_price = w3.from_wei(tx["gasPrice"], "gwei")
print(f"📌 Транзакция: {tx['hash'].hex()} | Получатель: {to_address} | Сумма: {value} ETH | Gas: {gas_price} Gwei")
except Exception as e:
print(f"Ошибка анализа транзакции: {e}")
🔫 Благодаря данном примеру - разобрались как эта технология работает изнутри, далее
> Фильтрация транзакций (только токены ERC-20)
> Авто-покупку новых токенов - снайпинг
> Фронтраннинг - опережение выгодных сделок
Поэтому для написания ПОЛНОЦЕННОГО софта, все наконец-то ОПУБЛИКУЮ НА GITHUB
ВАШИ ИДЕИ??
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤🔥3🤩2❤1
в честь такого прекрасного праздника у меня есть решение
конечно это доступ в Guide Dao
Благодаря этим легендам я намного быстрее вошел в блокчейн
Разобрался с JS/TS c нуля, взаимодействовал с Ethers.js и наконец писал свои дапки подключив React.
Также мне нравятся постоянные созвоны в Discord, где мы кодим, изучаем новое и общаемся с менторами и другими участниками дао!
Также недавно они добавили новый буткемп по AI-Agents
Результат - Дао развивается, проекты пишуться
Прямо сейчас в ДАО $LIBRA SALE -20% до 10 марта
И финальный бонус от меня -10% по промокоду
VARTCALLhttps://www.guidedao.xyz/
Скидки на сайте ДАО - Суммируются
Успевай порадовать свою музу
Please open Telegram to view this post
VIEW IN TELEGRAM
😍9🤩3👌3💅2🐳1
наши герои лета 2024 возращаются с новым марафоном!!
МИНИ-КУРС Прямо на этом канале!
10 МАРТА - 10 АПРЕЛЯ
🍻 Задачи месяца: Понимание JS & TS, знакомство с блокчейном, написание первых DApps
> Введение в JS & TS + Работа с API
> Разработка DApps + Взаимодействие со смарт-контрактами
> Взаимодействие с DeFi-протоколами
> NFT + Security
10 АПРЕЛЯ - 10 МАЯ
Автоматизация + Глубокая работа с DeFi/NFT
📸 Задачи месяца: Пишем автоматизированные боты, работаем с CEX и DEX, делаем DeFi-арбитраж, работать с NFT + AI
> Автоматизация Web3
> Арбитражные боты
> NFT + AI
> Глобальный проект + Итоги
7+ проектов в "портфолио"
Глубокое понимание JS, TS, Solidity, Web3🙄
> Навык написания ботов.
> Понимание DeFi, NFT, CEX & DEX.
план будет обновляться....
ВЫ ГОТОВЫ??? ЭТИ 2 МЕСЯЦА БУДУТ ЛЕГЕНДАРНЫ!!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥34❤6🐳6💘1
Node.js и npm
nodejs.org
Будем запускать JS/TS вне браузера через Node.js, npm - для управления пакетами
устанавливаем LTS версию, npm установится автоматически
проверка установки
node -v
npm -v
TypeScript
Добавим строгой типизации в наш код
npm install -g typenoscript
Проверка tsc -v
Подключение к блокчейну
используем библиотеку ethers.js
TypeScript
npm install --save-dev @types/node
JavaScript
npm install ethers
Пример json-файла со всеми перечисленными библиотеками и актуальными версиями
{
"name": "blockchain-project",
"version": "1.0.0",
"denoscription": "JS/TS blockchain development setup",
"noscripts": {
"start": "node index.js",
"build": "tsc"
},
"dependencies": {
"ethers": "^6.13.5",
"dotenv": "^16.0.3",
"@openzeppelin/contracts": "^4.9.0"
},
"devDependencies": {
"typenoscript": "^5.8",
"hardhat": "^2.22.19",
"eslint": "^8.35.0",
"prettier": "^3.0.0",
"@types/node": "^20.11.0"
},
"engines": {
"node": ">=18.17.1",
"npm": ">=9.0.0"
}
}Далее начинаем писать первые скрипты и работаем с API
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥3
🤵♂️ Материалы по стеку - БАЗА
JavaScript 🔽
javanoscript.info - документация
jschallenger.com - практика задач на js🤟 TypeScript
Semolina Code записал плейлист с нуля на эту тему
Что изучаем?
😈 Основы JS & TS { без этого никуда }
> Типы данных { string, number, boolean, object, array, null, undefined }
> Работа с let, const и область видимости
> Функции и async/await
> Promise, обработка ошибок { try/catch }
> Классы и ООП { class, constructor, extends }
> Работа с API { fetch, axios }
> Работа с файлами { fs в Node.js }✏️ Node.js и npm
> Умеем ставить зависимости { npm install ethers dotenv }
> Разбираться в package.json
> Запускать JS/TS-скрипты через node и tsc🥰 TypeScript
> Типизация { string, number, boolean, any, unknown, void, never }
> Интерфейсы и type
> readonly, optional { ? в интерфейсах }
> Generics { очень полезны при работе с блокчейн-данными }
> Работа с @types/* { например, @types/node }
Начинаем Работу с API
Стартанем с JS далее будем подключать TS
😎 WHY TS???
Строгая типизация - меньше ошибок в коде
Лучшая поддержка Web3-библиотек - { ethers.js, viem }
Упрощает работу с API - { точные типы данных }
Профессиональный стандарт - серьезные проекты используют TS 😎
СТАРТУЕМ { Подключение к API блокчейна }
переходим на infura.io регаемся и получаем API ключ
пример использования в коде
import { ethers } from "ethers";
// Подключаемся к Ethereum через Infura
const provider = new ethers.JsonRpcProvider(
"https://mainnet.infura.io/v3/КлючInfura"
);
// Функция для получения баланса кошелька
async function getBalance(address) {
try {
const balance = await provider.getBalance(address);
console.log(💰 Баланс: ${ethers.formatEther(balance)} ETH);
} catch (error) {
console.error("❌ Ошибка получения баланса:", error);
}
}
// Адрес кошелька
const walletAddress = "0xВашКошелек";
// Вызываем функцию
getBalance(walletAddress);node index.js
при проблемах с запуском - проверяем package.json
(мы получили этот файл при установке ethers.js)
{
"type": "module",
"dependencies": {
"ethers": "^6.13.5"
}
}Подписание транзакций { отправка ETH }
> Работа с ERC-20 токенами
> Подключение Metamask и “создание DApp”
> Деплой собственного смарт-контракта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤4🐳2🤩1💘1
В этом “гайде” разберем:
💰 Отправку обычных ETH-транзакций
> Добавление комиссии (gas) вручную
> Чтение истории транзакций
> Создание подписанных сообщений🫥 Используем ethers.js для взаимодействия с блокчейном и dotenv для хранения приватных данных
скрипт с кодом этого урока ниже
🔫 Инициализация Проекта
В папке проекта 🔽
Создаем index.js для нашего скрипта
.env файл для хранения приватных данных
npm init -y для удобного управления зависимостями проекта
import { ethers } from "ethers";
import * as dotenv from "dotenv";
dotenv.config();
const provider = new ethers.JsonRpcProvider(
https://sepolia.infura.io/v3/${process.env.INFURA_API_KEY}
);
// загружаем кошелек (приватный ключ + провайдер)
const wallet = new ethers.Wallet(process.env.PRIVATE_KEY, provider);
// Функция отправки ETH
async function sendETH(to, amount) {
try {
const tx = await wallet.sendTransaction({
to: to,
value: ethers.parseEther(amount), // Конвертируем ETH в wei
});
console.log(✅ Транзакция отправлена!);
console.log(📌 Hash: ${tx.hash});
} catch (error) {
console.error("❌ Ошибка:", error);
}
}
sendETH("0xПолучатель", "0.01");По умолчанию ethers.js сам выбирает gas price, мы можем задать его вручную:
добавляем к скрипту следующую фунцкию
async function sendETHWithGas(to, amount) {
try {
const gasPrice = await provider.getFeeData(); // текущая цена газа
const gasLimit = 21000; // минималка gas limit для обычных транзакций
const tx = await wallet.sendTransaction({
to: to,
value: ethers.parseEther(amount),
gasLimit: gasLimit,
maxPriorityFeePerGas: gasPrice.maxPriorityFeePerGas, // приоритет по комиссии
maxFeePerGas: gasPrice.maxFeePerGas, // задается общая комиссия
});
console.log(✅ Транзакция отправлена с кастомным gas!);
console.log(📌 Hash: ${tx.hash});
} catch (error) {
console.error("❌ Ошибка:", error);
}
}
sendETHWithGas("0xКошелек", "0.01");добавляем функцию в наш скрипт
async function getEthBalance(address) {
const balance = await provider.getBalance(address);
console.log(💰 Баланс ETH: ${ethers.formatEther(balance)} ETH);
}
getEthBalance("0xКошелек");Иногда нужно просто подписать данные (например, в DeFi, NFT или логине через блокчейн)
async function signMessage(message) {
const signature = await wallet.signMessage(message);
console.log(📝 Подписанное сообщение: ${signature});
}
signMessage("Я подтверждаю свою личность!");можно узнать, какие транзакции были отправлены или получены по адресу.
async function getTxHistory(address) {
try {
const startBlock = 0; // Ищем с нулевого блока
const endBlock = "latest"; // До последнего блока
const logs = await provider.getLogs({
fromBlock: startBlock,
toBlock: endBlock,
address: address,
});
if (logs.length === 0) {
console.log(❌ Нет найденных событий (logs) для ${address});
return;
}
console.log(📌 Найдено ${logs.length} событий:);
logs.forEach((log, index) => {
console.log(
📌 [${index + 1}] Hash: ${log.transactionHash} | Block: ${log.blockNumber}
);
});
} catch (error) {
console.error("❌ Ошибка при получении истории событий:", error);
}
}ЧТО ДОБАВИТЕ??
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8😍3❤🔥2💘1
зачем знать смарт-контракты??1⃣ Интеграция с Web3 - разработка ботов и софта, работающего с блокчейном (арбитражный бот, DEX-агрегатор).2⃣ Автоматизация финансов - создание контрактов для DeFi, лендинга, стейкинга, автоматических платежей.3⃣ Безопасность блокчейна - проверка и аудит смарт-контрактов (поиск уязвимостей, защита от взломов)4⃣ Доходы – Web3-разработчики зарабатывают $100k+ в год, а аудиторы контрактов $10k+ за проверку5⃣ Чтение ABI и взаимодействие с контрактами - анализируем чужие контракты, отправлять транзакции без UI и работаем напрямую с Etherscan, Infura, Alchemy.
ПОЭТОМУ СЕГОДНЯ РАЗБЕРЕМ!
Что такое ABI и зачем оно нада?📸
Как читать ABI, находить методы и отправлять транзакции через JS/TS
🤫 ABI (Application Binary Interface) - описание всех функций смарт-контракта, их аргументов и возвращаемых данных.
Без ABI мы не сможем вызвать методы контракта из кода
[
{
"constant": true,
"inputs": [{"name": "owner", "type": "address"}],
"name": "balanceOf",
"outputs": [{"name": "", "type": "uint256"}],
"type": "function"
}
]
😭 balanceOf(address) - возвращает баланс указанного адреса.
inputs: owner (address) - принимает адрес кошелька.
outputs: uint256 - возвращает баланс в токенах.
Находим контракт на Etherscan
Contract - Read/Write
Скачать ABI - "Contract ABI"
Вставить в код для работы с контрактом
Структра Проекта👮♂️
npm install ethers dotenv
index.js - основной скрипт
.env для приватных данных
скрипт
import { ethers } from "ethers";
import as dotenv from "dotenv";
dotenv.config();
const provider = new ethers.JsonRpcProvider(
https://mainnet.infura.io/v3/${process.env.INFURA_API_KEY}
);
// адрес контракта USDT
const contractAddress = "0xdAC17F958D2ee523a2206206994597C13D831ec7";
// ABI для ERC-20
const abi = [
"function balanceOf(address owner) view returns (uint256)",
"function transfer(address to, uint256 amount)",
];
// объект контракта
const contract = new ethers.Contract(contractAddress, abi, provider);
async function getBalance(address) {
const balance = await contract.balanceOf(address);
console.log(💰 Баланс: ${ethers.formatUnits(balance, 6)} USDT);
}
getBalance("0xКошелек");🔫 Как?
Подключаемся к Ethereum через Infura
Находим контракт USDT по адресу
Вызываем balanceOf() и получает баланс
пример №следующий
Как читать переменные из контракта (name, symbol, totalSupply) - $USDC
// адрес контракта USDC
const contractAddress = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48";
// ABI с нужными методами
const abi = [
"function name() view returns (string)",
"function symbol() view returns (string)",
"function totalSupply() view returns (uint256)"
];
const contract = new ethers.Contract(contractAddress, abi, provider);
async function getContractInfo() {
const name = await contract.name();
const symbol = await contract.symbol();
const totalSupply = await contract.totalSupply();
console.log(📌 Токен: ${name} (${symbol}));
console.log(💰 Всего выпущено: ${ethers.formatUnits(totalSupply, 6)} ${symbol});
}
getContractInfo();
пример №ФИНАЛ
const provider = new ethers.WebSocketProvider(
wss://mainnet.infura.io/ws/v3/${process.env.INFURA_API_KEY}
);
// адрес USDC
const contractAddress = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48";
// ABI с событием Transfer
const abi = [
"event Transfer(address indexed from, address indexed to, uint256 value)"
];
const contract = new ethers.Contract(contractAddress, abi, provider);
// Подписка на события Transfer
contract.on("Transfer", (from, to, value) => {
console.log(🔄 Перевод: от ${from} → к ${to} на сумму ${ethers.formatUnits(value, 6)} USDC);
});
console.log("📡 Ожидание новых переводов USDC...");
БАЗА ВЫДАНА!! РАЗБЕРЕМ ПОДРОБНЕЕ ABI???
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤6🐳4💘1
Если ты хочешь отслеживать крупные сделки, мемпул или события контрактов в блокчейне, нужно использовать WebSocket (wss://)
🤨 Компоненты
npm install ethers dotenv
dotenv (.env файл) служит для приватных данных
INFURA_API_KEY=НАШ_INFURA_API_KEY
ethers.js - подключение к блокчейну
скрипт
Подключаемся к WebSocket ноде:
import { ethers } from "ethers";
import as dotenv from "dotenv";
dotenv.config();
const provider = new ethers.WebSocketProvider(
wss://mainnet.infura.io/ws/v3/${process.env.INFURA_API_KEY}
);
console.log("📡 WebSocket подключен к Ethereum...");provider.on("block", (blockNumber) => {
console.log(📡 Новый блок: ${blockNumber});
});
// так мы "мониторим" активность в блокчейнеОтслеживаем входящие транзакции (mempool)
provider.on("pending", async (txHash) => {
try {
const tx = await provider.getTransaction(txHash);
if (tx) {
console.log(`🔄 Входящая транзакция: От ${tx.from} → Кому: ${tx.to} | Сумма: ${ethers.formatEther(tx.value)} ETH`);
}
} catch (error) {
console.error("Ошибка при получении транзакции:", error);
}
});Отслеживаем события контрактов (переводы токенов)
отслеживаем переводы $USDC (Transfer)
ABI для события Transfer:
const abi = [
"event Transfer(address indexed from, address indexed to, uint256 value)"
];
const contractAddress = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"; // USDC
const contract = new ethers.Contract(contractAddress, abi, provider);
contract.on("Transfer", (from, to, value) => {
console.log(🔄 Перевод USDC: От ${from} → Кому: ${to} | Сумма: ${ethers.formatUnits(value, 6)} USDC);
});
const myWallet = "0xКошелек";
contract.on("Transfer", (from, to, value) => {
if (to.toLowerCase() === myWallet.toLowerCase()) {
console.log(
✅ Ты получил ${ethers.formatUnits(value, 6)} USDC от ${from}
);
}
});
скрипт показываем переводы только на наш кошелек
Теперь мы мониторим все события в блокчейне в реальном времени!
😕 Эти знания помогут в последующем написании арбитражных ботов, фронт раннинга и создании WEB3 Приложений
ВАШИ ИДЕИ? Что ДАЛЕЕ!!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍11❤2🔥2🐳2
шо такое газ в Ethereum??
👊 Gas - плата за выполнение транзакций и смарт-контрактов.
Каждая операция в блокчейне требует вычислений - майнеры / валидаторы тратят ресурсы - мы платим за это gas
😮 Структура gas fees в EIP-1559
Раньше (до EIP-1559) в Ethereum комиссии работали как аукцион - кто поставил больше gasPrice, того транзакция проходила быстрее.🤫 После EIP-1559 (Лондонский хардфорк):
Нет аукциона, есть base fee (основная комиссия).
Если сеть загружена - base fee растет
Если сеть свободна - base fee падает
Дополнительно можно платить maxPriorityFeePerGas, чтобы ускорить транзакцию.
Если у нас:
gasLimit = 21,000 (стандарт для перевода ETH)
maxFeePerGas = 50 gwei
maxPriorityFeePerGas = 3 gwei💰 комиссия будет:
Готовы заплатить: 50 gwei за gas
Майнеры получат: 3 gwei (priority fee)
Базовая комиссия (base fee) определяется сетью
Итоговая стоимость = gasUsed * (baseFee + priorityFee)😊
скрипт получения данных газа
import { ethers } from "ethers";
import as dotenv from "dotenv";
dotenv.config();
const provider = new ethers.JsonRpcProvider(
https://mainnet.infura.io/v3/${process.env.INFURA_API_KEY}
);
async function getGasFees() {
const feeData = await provider.getFeeData();
const latestBlock = await provider.getBlock("latest"); // Получаем последний блок
// Если baseFeePerGas есть в блоке, используем его
const baseFee = latestBlock.baseFeePerGas ?? ethers.toBigInt(0);
const priorityFee = feeData.maxPriorityFeePerGas ?? ethers.toBigInt(0);
const maxFee = feeData.maxFeePerGas ?? ethers.toBigInt(0);
console.log("🔍 Получены данные о газе:", feeData);
console.log("🔍 Данные из последнего блока:", latestBlock);
console.log(⛽ Base Fee: ${ethers.formatUnits(baseFee, "gwei")} gwei);
console.log(
🚀 Priority Fee: ${ethers.formatUnits(priorityFee, "gwei")} gwei
);
console.log(📌 Max Fee Per Gas: ${ethers.formatUnits(maxFee, "gwei")} gwei);
}
getGasFees();💃 план:
Получает актуальные данные о газе с provider.getFeeData() и provider.getBlock("latest"):
Base Fee из последнего блока.
Priority Fee и Max Fee из feeData.
Выводит их в Gwei.
Если поставить слишком низкий gasLimit, транзакция зафейлится и сгорит комиссия!
Если поставить слишком высокий gasLimit, можно переплатить☺️
используем estimateGas(), который сам вычисляет лимит.
функция
async function estimateGasLimit(to, amount) {
const tx = {
to: to,
value: ethers.parseEther(amount),
};
const estimatedGas = await provider.estimateGas(tx);
console.log(📊 Предполагаемый gasLimit: ${estimatedGas.toString()});
}
estimateGasLimit("0xКошелек", "0.01");😣 Оценивает, сколько газа (gasLimit) потребуется для транзакции с помощью provider.estimateGas()
Выводит расчетный gasLimit для перевода 0.01 ETH.
Экономим деньги на комиссиях, выставляя оптимальные maxFeePerGas и maxPriorityFeePerGas.🍌 Рассчитываем gasLimit заранее через estimateGas(), чтобы транзакции не зафейлились.
Можно разрабатывать ботов, которые анализируют газ и отправляют транзакции в лучшее время.😄 Понимание, когда сеть загружена, помогает ловить моменты низких комиссий для выгодных сделок.
!!! Эти знания нужны для всех Web3-разработчиков: от трейдеров до создателей DeFi/NFT-приложений.
ВАШИ КОММЕНТАРИИ!!! ЧТО ДАЛЕЕЕ???
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍8❤🔥3🔥1💘1
📕 разберем оптимизацию, зависание, комиссии, EIP-1559 и сырые транзакции
скрипт к уроку ниже
ethers.js v6 библиотекаПозволяет подписывать транзакции без подключения к интернету, а отправлять их в сеть позже.🏆 Повышает безопасность - приватный ключ не хранится в онлайне
мини-план:
- создаем сырую транзакцию
- подписываем её приватником
🚶♀️ Как отправить подписанную транзакцию broadcastTransaction☕️ Raw Transaction - готовая подписанная транзакция, в виде Hex-кода, которую можно передавать в сеть без использования приватника на сервере.😐 в результате - если у нас есть подписанная транзакция, мы можем отправить ее в любой момент (например, при низкой комиссии)
+ можно повысить безопасность, подписывая транзакции на холодном кошельке (офлайн), а отправляя их из другого устройства.
🔫 Как избежать зависших транзакций?
Иногда транзакция зависает из-за слишком низкого gas fee
Можно повторно отправить ту же транзакцию, но с большей комиссией😱
p.s - Блокчейн видит новую транзакцию с тем же nonce и заменяет старую
зачем понимать??
☺️ Создание оптимизированных Web3-ботов, которые платят меньше комиссии.
Разработка офлайн-подписи для арбитражных и маркет-мейкинговых стратегий.
Безопасное хранение приватных ключей без необходимости их постоянного использования
далее, начинаем внедрять TS и пишем софт
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3🤩2