🗣 вот и лайф
Написали скрипты, теперь можно и развеяться
Как вы проводите воскресенье? Ваши идеи на следующие видео, посты🙏
Написали скрипты, теперь можно и развеяться
Как вы проводите воскресенье? Ваши идеи на следующие видео, посты
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥3💅1
1. Получение баланса ETH
Этот скрипт подключается к Ethereum (через Infura/Alchemy), получает баланс кошелька и выводит его.
Библиотека: ethers-rs
cargo add ethersuse ethers::prelude::*;
use std::convert::TryFrom;
use tokio;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let provider = Provider::<Http>::try_from("https://mainnet.infura.io/v3/INFURA_KEY")?;
let address: Address = "0x742d35Cc6634C0532925a3b844Bc454e4438f44e".parse()?;
let balance = provider.get_balance(address, None).await?;
println!("Баланс: {} ETH", balance);
Ok(())
}
2. Отправка транзакции в Ethereum
скрипт отправляет ETH на указанный адрес.
СКРИПТ
use ethers::prelude::*;
use std::convert::TryFrom;
use tokio;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let provider = Provider::<Http>::try_from("https://mainnet.infura.io/v3/INFURA_KEY")?;
let wallet: LocalWallet = "PRIVATE_KEY".parse::<LocalWallet>()?.with_chain_id(1);
let client = SignerMiddleware::new(provider.clone(), wallet);
let to: Address = "0xRecipientAddressHere".parse()?;
let tx = TransactionRequest::new()
.to(to)
.value(ethers::utils::parse_ether(0.01)?) // 0.01 ETH
.gas_price(provider.get_gas_price().await?);
let pending_tx = client.send_transaction(tx, None).await?;
let tx_hash = pending_tx.tx_hash();
println!("Отправлено! Tx hash: {:?}", tx_hash);
Ok(())
}
3. Чтение данных из смарт-контракта (ERC-20 баланс)
Этот скрипт получает баланс токена ERC-20 у пользователя.
ethers-rs
USDT - 0xdAC17F958D2ee523a2206206994597C13D831ec7
СКРИПТ
use ethers::prelude::*;
use std::convert::TryFrom;
use tokio;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let provider = Provider::<Http>::try_from("https://mainnet.infura.io/v3/INFURA_KEY")?;
let erc20 = "0xdAC17F958D2ee523a2206206994597C13D831ec7".parse::<Address>()?;
let user = "0x742d35Cc6634C0532925a3b844Bc454e4438f44e".parse::<Address>()?;
let abi: Abi = serde_json::from_str(include_str!("erc20_abi.json"))?;
let contract = Contract::new(erc20, abi, provider.clone());
let balance: U256 = contract.method("balanceOf", user)?.call().await?;
println!("Баланс USDT: {} USDT", balance);
Ok(())
}
ВОТ ТАКОЕ НАЧАЛО??
КАК ВАМ РАСТ??
ИДЕИ??
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍4🤩2
разбираем где и как искать работу блокчейн-разработчикам
Контрибуть в 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