разберем пару софтов с использованием этой апи
1. Бот для отслеживания крупных транзакций (Whale Tracker 2.0)
Бот мониторит блокчейн Ethereum в реальном времени, отслеживая крупные транзакции (например, больше 1000 ETH). При обнаружении отправляет уведомление в Telegram или Discord.
пример кода на фильтр транзакций с большой суммой ETH
def filter_large_transactions(transactions):
global LAST_BLOCK
large_txs = []
for tx in transactions:
block_number = int(tx["blockNumber"])
if LAST_BLOCK and block_number <= LAST_BLOCK:
continue # Пропускаем уже обработанные транзакции
eth_value = int(tx["value"]) / 10**18 # Переводим в ETH
if eth_value >= ETH_THRESHOLD:
large_txs.append(tx)
if transactions:
LAST_BLOCK = int(transactions[0]["blockNumber"]) # Обновляем последний блок
return large_txs
2. Анализатор прибыли и убытков кошелька
🗒 Приложение анализирует историю транзакций кошелька и рассчитывает прибыль/убыток на основе покупки/продажи токенов и стоимости газа.
Основной анализатор прибыли и убытков
def analyze_pnl():
transactions = get_wallet_transactions()
total_income = 0
total_expense = 0
gas_fees = 0
for tx in transactions:
eth_value = int(tx["value"]) / 10**18 # ETH перевод из Wei
gas_cost = (int(tx["gasPrice"]) * int(tx["gasUsed"])) / 10**18 # Стоимость газа в ETH
timestamp = int(tx["timeStamp"])
date_str = datetime.utcfromtimestamp(timestamp).strftime('%d-%m-%Y')
# Получаем цену ETH на дату транзакции
eth_price = get_eth_price(date_str)
if not eth_price:
continue # Пропускаем, если цену не удалось получить
usd_value = eth_value * eth_price
gas_usd = gas_cost * eth_price
if tx["to"].lower() == ETH_ADDRESS.lower():
total_income += usd_value # Приход ETH
else:
total_expense += usd_value # Отправка ETH
gas_fees += gas_usd # Комиссия за газ
time.sleep(60) # Чтоб не перегружать API
# 🔥 Итоговая прибыль (PnL)
pnl = total_income - (total_expense + gas_fees)
print(f"💰 Приход: ${total_income:.2f}\\\\n📉 Расходы: ${total_expense:.2f}\\\\n⛽️ Комиссия за газ: ${gas_fees:.2f}\\\\n📊 Итоговый PnL: ${pnl:.2f}")
analyze_pnl()
3. Дашборд активности смарт-контракта
Веб-приложение, отображающее информацию о вызовах функций конкретного смарт-контракта, количестве пользователей и обороте токенов.
в результате каждый из этих скриптов можно интегрировать в бот и получать самую свежую инфу сразу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤1❤🔥1💅1
chain.link
Chainlink прежде всего для работы с оракулами - то есть для получения внешних данных в смарт-контрактах.
блокчейн - изолированная среда, он не может просто так получать данные с интернета - цены активов, мировые событие etc и ChainLink решает эту проблему
Пример 🔽
Оракулы для взаимодействия с реальным миром
Если нужно подтягивать данные с бирж, API погоды или спортивных событий, можем написать Python-скрипт, который отправляет данные в смарт-контракт через Chainlink.
пример
оракул на Python получает данные из внешнего API (например, цену BTC/USD с CoinGecko) и передает их в смарт-контракт через Chainlink Functions.
Solidity Контракт
contract OracleConsumer {
int256 public btcPrice;
address public oracle;
event PriceUpdated(int256 newPrice);
modifier onlyOracle() {
require(msg.sender == oracle, "Not authorized");
_;
}
constructor(address _oracle) {
oracle = _oracle; // Адрес оракула
}
function updatePrice(int256 _price) external onlyOracle {
btcPrice = _price;
emit PriceUpdated(_price);
}Пайтон скрипт
# Получение цены BTC/USD
def get_btc_price():
url = "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd"
response = requests.get(url)
data = response.json()
return int(data["bitcoin"]["usd"] * 10**8) # Конвертируем в формат int256
# Обновление цены в смарт-контракте
def update_smart_contract():
btc_price = get_btc_price()
print(f"Полученная цена BTC/USD: {btc_price / 10**8} USD")
# Формирование транзакции
tx = contract.functions.updatePrice(btc_price).build_transaction({
'from': ORACLE_ADDRESS,
'nonce': w3.eth.get_transaction_count(ORACLE_ADDRESS),
'gas': 100000,
'gasPrice': w3.to_wei('10', 'gwei')
})
Python-скрипт запрашивает цену BTC/USD с CoinGecko💰
> Формирует транзакцию и подписывает её.
> Отправляет данные в смарт-контракт.
> Контракт обновляет цену, и любое приложение в блокчейне может её использовать.
пример 2
Доступ к блокчейн-данным через Python🤩
скрипт показывает, как получить:
✅ Баланс адреса в ETH
✅ Историю транзакций
✅ Актуальную цену ETH/USD через Chainlink
# Получение баланса ETH
def get_eth_balance(address):
balance_wei = w3.eth.get_balance(address)
balance_eth = w3.from_wei(balance_wei, 'ether')
return balance_eth
# Получение актуальной цены ETH/USD через Chainlink
def get_eth_price():
contract = w3.eth.contract(address=CHAINLINK_FEED, abi=FEED_ABI)
latest_data = contract.functions.latestRoundData().call()
price = latest_data[1] / 10**8 # Chainlink возвращает цену с 8 знаками после запятой
return price
# Получение последних 10 транзакций с Etherscan API
def get_recent_transactions(address):
ETHERSCAN_API_KEY = "YOUR_ETHERSCAN_API_KEY"
url = f"https://api.etherscan.io/api?module=account&action=txlist&address={address}&startblock=0&endblock=99999999&sort=desc&apikey={ETHERSCAN_API_KEY}"
response = requests.get(url).json()
transactions = response["result"][:10] # Берем последние 10 транзакций
return transactions
в целом мегаПолезаня штука для получения данных из интернета, автоматически выполнять действия кросс-чейна и т.д
Расписываем подробнее?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9😍2🐳1💅1
база по солане
Для взаимодействия используем либу Solana.py
Подключение к Solana (Devnet/Testnet/Mainnet) ⬇️
> Генерация нового ключа и кошелька.
> Получение баланса кошелька.
> Отправка SOL с одного адреса на другой.
Разберем пару скриптов
from solana.rpc.api import Client
# Подключаемся к Solana Devnet (для тестирования)
client = Client("https://api.devnet.solana")
# работает ли соединение
print(client.is_connected())
Создаём новый кошелек Solana + Получаем его баланс + Запрос airdrop (только в Devnet) и Отправка 0.01 SOL на другой кошелек.
keypair = Keypair.generate()
public_key = keypair.public_key
private_key = base58.b58encode(keypair.secret()).decode() # Для сохранения
# Получаем баланс
def get_balance(pubkey):
balance = client.get_balance(pubkey)
return balance["result"]["value"]
# Запрашиваем airdrop (только в Devnet)
print("🚀 Запрашиваем airdrop 1 SOL...")
client.request_airdrop(public_key, 1_000_000_000)
time.sleep(20) # Нужно подождать подтверждения транзакции
# Отправка 0.01 SOL другому кошельку
receiver = PublicKey("8K4wR1vYyqM3Z9oeGypvVX5vKYJefT3gT9sAeZKqPmWv")
amount = 10_000_000 # 0.01 SOL в лампортах
txn = Transaction().add(
transfer({"from_pubkey": public_key, "to_pubkey": receiver, "lamports": amount})
)
print("📤 Отправляем 0.01 SOL...")
try:
txn_signature = client.send_transaction(txn, keypair, opts=TxOpts(skip_confirmation=False))
print(f"✅ Транзакция отправлена! Signature: {txn_signature['result']}")
except Exception as e:
print(f"❌ Ошибка: {e}")
Дальше хочу разобрать следующее
Работа со смарт-контрактами Solana
> Создание и управление токенами SPL
> Подключение и взаимодействие с Raydium и другими Solana Dex
> Работа с WebSockets
Неплохой вариант для оптимизации действий в Solana, учитывая МОЩЬ этой экосистемы
Разбираем Далее?
Please open Telegram to view this post
VIEW IN TELEGRAM
51🔥14❤🔥4🤩3
10 января на канале началась серия постов по web3 на Python
Вышло огромное количество материала - пересматриваем
Но нам не хватило практики, пора исправить это
Был рад перечню материала которую они предоставляют на обучении web3 Python, от азов ООП до интеракции с Solana
так вот
До 13 февраля действует скидон на обучение -15%, далее мы начинаем 3 месяца фул обучение
Сайт + Бонусы
Начинаем
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3❤2❤🔥1😍1
отправлять их мы будем через IDL
IDL (Interface Definition Language) JSON-файл, описывающий, какие методы есть в программе, какие аргументы они принимают, и какие аккаунты участвуют в транзакциях.🤩 На основе IDL создается объект программы, который предоставляет методы для взаимодействия с программой на Solana.
Если используем фреймворк Anchor для разработки программ на Solana, то IDL автоматически генерируется при компиляции программы.
from anchorpy import Idl, Program
from solana.rpc.api import Client
from solana.publickey import PublicKey
from solana.account import Account
import asyncio
# 1. Подключение к Solana RPC
client = Client("[https://api.devnet.solana.com](https://api.devnet.solana.com/)")
#2. Загрузка IDL
with open("idl.json", "r") as f:
idl = Idl.from_json(f.read())
#3. Создание объекта программы
program_id = PublicKey("ПрограммаПубличныйКлюч")
program = Program(idl, program_id, client)
#4. Подготовка данных
from_account = PublicKey("ПубличныйКлючОтправителя")
to_account = PublicKey("ПубличныйКлючПолучателя")
amount = 1_000_000 # 0.001 SOL
#5. Приватный ключ отправителя
private_key = bytes([...]) # Замените на ваш приватный ключ
signer = Account(private_key)
#6. Вызов метода программы
async def call_transfer():
tx = await program.rpc["transfer"](
amount,
accounts={
"from": from_account,
"to": to_account,
"system_program": PublicKey("11111111111111111111111111111111")
},
signers=[signer]
)
print("Транзакция отправлена:", tx)
#Запуск асинхронной функции
asyncio.run(call_transfer())
1. Формирование инструкции:
> Клиентский код на основе IDL формирует инструкцию для вызова метода программы
2. Создание транзакции:
> Инструкция добавляется в транзакцию.
3. Подпись транзакции:
> Транзакция подписывается отправителем.
4. Отправка транзакции:
> Транзакция отправляется в сеть Solana через RPC.
⌨️ Хотя Anchor автоматически генерирует IDL и клиентский код, нам всё равно нужно:
1. Настроить подключение к Solana:
> Указать, к какому RPC-узлу подключаться (например, Devnet или Mainnet)
2. Указать параметры вызова
> Передать аргументы метода (сумму перевода, etc).
> Указать аккаунты, которые участвуют в транзакции (отправитель и получатель).
> Подписать транзакцию Указать, кто подписывает транзакцию (отправитель).
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14🤩5❤🔥4
база - выполнения транзакций зависит от - загруженности сети, комиссии за транзакцию и правильной настройку кода.
разберем все
1. Использование более высокой комиссии
sender = Keypair() # Ваш кошелек
receiver = PublicKey("RECEIVER_PUBLIC_KEY") # Публичный ключ получателя
amount = 1000000 # Сумма в lamports (1 SOL = 1000000000 lamports)
# Создаем транзакцию с повышенной комиссией
txn = Transaction().add(transfer(TransferParams(
from_pubkey=sender.public_key,
to_pubkey=receiver,
lamports=amount
)))
# Указываем приоритет (добавляем комиссию)
txn.recent_blockhash = client.get_recent_blockhash()["result"]["value"]["blockhash"]
txn.fee_payer = sender.public_key
txn.sign(sender)
В этом примере вы можете увеличить комиссию, добавив больше lamports в поле lamports.
2. RPC УЗЛЫ
собственный RPC или быстрый сторонний RPC-провайдера (QuickNode например) может значительно ускорить отправку и подтверждение транзакций.
client = Client("тут_ссылка_на_rpc")3. Параллельная отправка транзакций
Если отправляете несколько транзакций - используем асинхронные запросы или многопоточность для ускорения процесса.
import asyncio
from solana.rpc.async_api import AsyncClient
async def send_transaction_async():
client = AsyncClient("https://api.mainnet-beta.solana.com")
# Ваш код для создания и отправки транзакции
await client.send_transaction(txn)
await client.close()
asyncio.run(send_transaction_async())
база
далее advanced lvl ))
4. Локальные блоки (слот leader)
Если вы запускаете свой валидатор, вы можете быть слот-лидером и включать свои транзакции в блоки быстрее.
5. Durable Nonce
В Solana есть механизм Durable Nonce, который позволяет избежать проблем с устаревшими nonce и ускорить обработку транзакций.😱 nonce - уникальное число, которое добавляется к данным для обеспечения их уникальности или для выполнения определенных условий
nonce_account = Keypair()
txn = Transaction().add(create_nonce_account(
from_pubkey=sender.public_key,
nonce_pubkey=nonce_account.public_key,
authority=sender.public_key,
lamports=1000000
))
+Убедитесь, что код не содержит задержек и использует последние версии библиотек для Solana.
мысли?
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥7🤩2🐳2🤔1😍1
Через три часа стартует наше обучение web3 автоматизации на пайтон у AIO Study
завтра цены на обучение повышаются, поэтому....
финальный бонусный промокод
жду вас
P.s всем кто регистрируется по моему бонусу - отпишите в поддержку @aio_supp от меня также будет бонуска вам
Готовы? (это будет легендарно)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🤩1😍1🐳1
начнем с jupiter
pip install requests solana (две либы для взаимодействия)
Подключение к Jupiter API
Jupiter предоставляет REST API для получения маршрутов обмена и выполнения свопов.
Основные эндпоинтс:
Маршруты обмена:
Выполнение свопа:
Маршрут обмена SOL/USDC
import requests
# Эндпоинт для получения маршрутов
url = "https://api.jup.ag/swap/v1/quote"
# Параметры запроса
params = {
"inputMint": "So11111111111111111111111111111111111111112", # SOL
"outputMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC
"amount": 1000000000, # 1 SOL (в lamports)
"slippageBps": 50, # Допустимое проскальзывание (0.5%)
}
# Отправляем запрос
response = requests.get(url, params=params)
# Проверяем ответ
if response.status_code == 200:
routes = response.json()
print("Available routes:", routes)
else:
print("Error:", response.status_code, response.text)
Выполняем своп (подписываем транзу)
from solana.rpc.api import Client
from solana.transaction import Transaction
from solana.keypair import Keypair
import base64
# Подключаемся к devnet
client = Client("https://api.devnet.solana.com")
# твой кошель
wallet = Keypair.from_secret_key(твой_приватник)
# Эндпоинт для выполнения свопа
swap_url = "https://api.jup.ag/swap/v1/swap"
# Данные для свопа
swap_data = {
"quoteResponse": routes, # Используем маршрут из предыдущего шага
"userPublicKey": str(wallet.public_key),
"wrapAndUnwrapSol": True, # Автоматически конвертировать SOL в wSOL и обратно
}
# Получаем транзакцию для свопа
swap_response = requests.post(swap_url, json=swap_data)
if swap_response.status_code == 200:
swap_transaction = swap_response.json()
print("Swap transaction:", swap_transaction)
# Декодируем транзакцию
raw_transaction = base64.b64decode(swap_transaction["swapTransaction"])
# Создаем объект транзакции
transaction = Transaction.deserialize(raw_transaction)
# Подписываем транзакцию
transaction.sign(wallet)
# Отправляем транзакцию
txid = client.send_transaction(transaction, wallet)
print("Transaction sent:", txid)
else:
print("Error:", swap_response.status_code, swap_response.text)
Получение списка всех токенов:
Получение информации о пулах ликвидности:
Получение истории транзакций:
разберем получение списка всех токенов
tokens_url = "https://api.jup.ag/tokens/v1/mints/all"
tokens_response = requests.get(tokens_url)
if tokens_response.status_code == 200:
tokens = tokens_response.json()
print("Available tokens:", tokens)
else:
print("Error:", tokens_response.status_code, tokens_response.text)
далее ещё больше движа с дексами, делаем? 🔥🔥
ваши идеи
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9🤩2🐳2👍1
создаем keyPair (пару из публичного и приватного ключей)
+ создаем приватный ключ из мнемонической фразы
pip install solana bip32utils mnemonic (либы для соланы и мнем-фразы)
1. Создаем KeyPair
from solana.keypair import Keypair
# создаем новый KeyPair
keypair = Keypair()
# публичный и приватный ключи
print("Public Key:", keypair.public_key)
print("Private Key:", keypair.secret_key)
2. Генерация Мнемонической Фразы (seed фраза)
from mnemonic import Mnemonic
# генерация мнемонической фразы
mnemo = Mnemonic("english")
mnemonic_phrase = mnemo.generate(strength=128) # 12 слов
print("Mnemonic Phrase:", mnemonic_phrase)
3. Деривация приватного ключа из мнемонической фразы
используя мнемоническую фразу, мы можем получить приватный ключ
используем стандарт BIP-39 (генерация seed из мнемонической фразы) и BIP-44 (деривация ключей).
import hashlib
import hmac
from bip32utils import BIP32Key
# преобразуем мнемоническую фразу в seed
seed = mnemo.to_seed(mnemonic_phrase)
# деривация приватного ключа по пути BIP-44
# путь для Solana: m/44'/501'/0'/0'
bip32_key = BIP32Key.fromEntropy(seed)
derived_key = bip32_key.ChildKey(44 + BIP32Key.HARDEN).ChildKey(501 + BIP32Key.HARDEN).ChildKey(0 + BIP32Key.HARDEN).ChildKey(0).ChildKey(0)
# приватный ключ (32 байта)
private_key = derived_key.PrivateKey()
print("Derived Private Key:", private_key.hex())
4. Создаем KeyPair из приватного ключа
когда у нас есть приватный ключ, мы можем создать KeyPair!
from solana.keypair import Keypair
# Преобразуем приватный ключ в KeyPair
keypair = Keypair.from_secret_key(private_key)
# публичный и приватный ключи
print("Public Key from Derived Private Key:", keypair.public_key)
print("Private Key from Derived Private Key:", keypair.secret_key.hex())
в результате:
😭 Генерируется 12 слов, которые можно использовать для восстановления кошелька.
Мнемоническая фраза преобразуется в seed с помощью алгоритма PBKDF2.
вот так это и работает
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4🤩2🎉1💘1
Какие подарки, пока учить солидити
Начнём с Базы:
т.к я люблю аудио формат обучения вот вам стартовый плейлист Solidity from Scratch
> плейлист
> плейлист
> плейлист
Ну так уже и быть, дропаю подарки
Скоро автор материала начинает курс обучения Solidity с Нуля
VARTCALL bootcamp.solidity.university
ДЕЛАЕМ ДЕЛАЕМ 💫💫
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤🔥2🤩1🍓1
Solana поддерживает два типа транзакций:
Legacy (старый формат) & Versioned Transactions (новый формат, поддерживающий дополнительные функции - Account Lookup Tables
Legacy поддерживает перевод SOL или SPL-токенов. + Использует старый формат сообщений (Message) (база)
Пример Legacy Транзакции
# отправка 0.1 SOL
transaction = Transaction().add(
transfer(
TransferParams(
from_pubkey=sender_wallet.public_key,
to_pubkey=recipient,
lamports=int(0.1 * 1e9), # 0.1 SOL в lamports
)
)
Versioned Transactions (VO) - новый формат транзакций, поддерживающий дополнительные функции: Account Lookup Tables (таблицы поиска аккаунтов).😠 Они позволяют уменьшить размер транзакций и увеличить пропускную способность сети.
Account Lookup Tables - таблицы, которые позволяют хранить ссылки на аккаунты, уменьшая размер транзакций (полезно для сложных операций - взаимодействие с DEX)
для V0 нам нужно использовать MessageV0 и VersionedTransaction
# подключаемся к devnet
client = Client("https://api.devnet.solana.com")
# кошелек отправителя
sender_wallet = Keypair.from_secret_key([YOUR_PRIVATE_KEY]) # Замените на ваш приватный ключ
# адрес получателя
recipient = PublicKey("RECIPIENT_PUBLIC_KEY_HERE")
# создаем инструкцию для перевода SOL
instruction = transfer(
TransferParams(
from_pubkey=sender_wallet.public_key,
to_pubkey=recipient,
lamports=int(0.1 * 1e9), # 0.1 SOL в lamports
)
)
# создаем MessageV0
message = MessageV0.try_compile(
payer=sender_wallet.public_key,
instructions=[instruction],
address_lookup_table_accounts=[], # Можно добавить таблицы поиска аккаунтов
recent_blockhash=client.get_recent_blockhash()["result"]["value"]["blockhash"],
)
# создаем VersionedTransaction
transaction = VersionedTransaction(message, [sender_wallet])
# отправляем транзакцию
txid = client.send_transaction(transaction)
print("Versioned Transaction sent:", txid)
Далее разбираем создание Lookup Table
# Создаем Account Lookup Table
lookup_table = PublicKey("LOOKUP_TABLE_PUBLIC_KEY_HERE")
# моздаем MessageV0 с использованием таблицы
message = MessageV0.try_compile(
payer=sender_wallet.public_key,
instructions=[instruction],
address_lookup_table_accounts=[lookup_table], # добавляем таблицу
recent_blockhash = client.get_recent_blockhash()["result"]["value"]["blockhash"],
)
# создаем VersionedTransaction
transaction = VersionedTransaction(message, [sender_wallet])
вот такая солана изнутри, более подробно расписываю в гайде
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5🤩2🐳1💘1
начнем с торгов на радиум, далее посмотрим памп-фан
через апишку будем мониторить цены и объем + покупка / продажа
pip install solana websockets requests
Мониторим цены
import requests
def get_price(token_address):
url = f"https://api.raydium.io/v1/token/{token_address}"
response = requests.get(url)
data = response.json()
return data.get("price")
url = f"https://api.raydium.io/v1/token/{token_address}"
response = requests.get(url)
data = response.json()
volume = data.get("volume")
if volume > threshold_volume:
return True
return Falsedef buy_token(wallet, token_address, amount):
# создание транзакции
transaction = Transaction().add(
transfer(TransferParams(
from_pubkey = wallet.public_key(),
to_pubkey = PublicKey(token_address),
lamports = amount)
)
# подпись и отправка транзакции
client.send_transaction(transaction, wallet)
⬇️ Автоматическая продажа
def sell_token(wallet, token_address, amount):
# аналогично покупке, но с продажей
transaction = Transaction().add(
transfer(TransferParams(
from_pubkey = wallet.public_key(),
to_pubkey = PublicKey(token_address),
lamports = amount)
)
client.send_transaction(transaction, wallet)
👁 все кратко, скрипт будет намного больше и подробнее, все пишу в статью по солане
Дайте актива, дропнем статью быстрее
+ В Скрипт можно добавить оправку пампов в тг и дискорд
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤🔥3🔥3💅1
пишем инструмент, анализирующий данные блокчейна
{ транзакции, смарт-контракты, токены + предоставляем пользователю статистику, графики и предупреждения }
pip install solana matplotlib requests нужные либы
> Подключаемся к паблик RPC Solana (с приватным будет больше скорость и безопасность
solana_client = Client("https://api.mainnet-beta.solana.com")> Получение данных о блокчейне
def get_blockchain_info():
# текущий слот
slot = solana_client.get_slot()
print(f"Текущий слот: {slot}")
# кол-во транзакций в последнем блоке
block = solana_client.get_block(slot)
if block and 'result' in block:
transactions = block['result']['transactions']
print(f"Количество транзакций в последнем блоке: {len(transactions)}")
else:
print("Не удалось получить данные о блоке.")
get_blockchain_info()
> Анализ транзакций
{ извлекаем инфу о количестве переданных $SOL и какие адреса участвовали }
def analyze_transactions(transactions):
total_sol_transferred = 0
participants = set()
for tx in transactions:
# извлекаем информацию о передаче SOL
if 'message' in tx and 'instructions' in tx['message']:
for instruction in tx['message']['instructions']:
if 'parsed' in instruction and instruction['parsed']['type'] == 'transfer':
lamports = int(instruction['parsed']['info']['lamports'])
sol_amount = lamports / 1e9 # Конвертируем lamports -> SOL
total_sol_transferred += sol_amount
participants.add(instruction['parsed']['info']['source'])
participants.add(instruction['parsed']['info']['destination'])
print(f"Общее количество переданных SOL: {total_sol_transferred}")
print(f"Уникальные участники: {len(participants)}")
# вызов функции анализа транзакций
block = solana_client.get_block(solana_client.get_slot())
if block and 'result' in block:
analyze_transactions(block['result']['transactions'])
> Визуализируем данные
def plot_transaction_history(blocks_to_analyze=10):
slots = []
transaction_counts = []
current_slot = solana_client.get_slot()
for i in range(blocks_to_analyze):
block = solana_client.get_block(current_slot - i)
if block and 'result' in block:
slots.append(current_slot - i)
transaction_counts.append(len(block['result']['transactions']))
plt.plot(slots, transaction_counts, marker='o')
plt.noscript("Количество транзакций в последних блоках")
plt.xlabel("Слот")
plt.ylabel("Количество транзакций")
plt.grid(True)
plt.show()
plot_transaction_history()
> Добавление предупреждений
{ если количество транзакций в блоке превышает определенный порог }
def check_for_high_activity(threshold=100):
block = solana_client.get_block(solana_client.get_slot())
if block and 'result' in block:
transaction_count = len(block['result']['transactions'])
if transaction_count > threshold:
print(f"Внимание! Высокая активность: {transaction_count} транзакций в последнем блоке.")
else:
print(f"Активность в норме: {transaction_count} транзакций.")
check_for_high_activity()
> Получать данные о последнем блоке
> Анализируем транзакции
> Визуализируем историю транзакций
> Предупреждаем о высокой активности
удобная визуализация Solana, далее можно сохранять все в базу, анализировать определенные токены и т.д ))
Ваши идеи на следующий МОЩНЫЙ разбор?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9💅3🤩1
pip install solana spl-token либы
Настройка клиента и ключей
# подключение к сети Solana (devnet)
client = Client("https://api.devnet.solana.com")
# приватный ключ (отправитель)
sender_keypair = Keypair.from_secret_key(bytes([...]))
# публичный ключ отправителя
sender_pubkey = sender_keypair.public_key
# публичный ключ получателя
receiver_pubkey = PublicKey("...")
# адрес SPL-токена (USDC -> devnet)
token_mint_pubkey = PublicKey("...")
# адрес ассоциированного аккаунта отправителя
sender_token_account = PublicKey("...")
receiver_token_account = PublicKey("...")
amount = 1000000 # 1 USDC, если у токена 6 знаков после запятой
# создание инструкции для передачи токенов
transfer_instruction = transfer_checked(
TransferCheckedParams(
program_id=TOKEN_PROGRAM_ID,
source=sender_token_account,
mint=token_mint_pubkey,
dest=receiver_token_account,
owner=sender_pubkey,
amount=amount,
decimals=6, # Количество знаков после запятой у токена
signers=[],
)
)
# Создание транзакции
transaction = Transaction().add(transfer_instruction)
Подпись + отправка
# подписание транзакции
transaction.sign(sender_keypair)
# отправка транзакции
txid = client.sendTransaction(transaction, sender_keypair, opts=TxOpts(skip_preflight=True))
# ожидание подтверждения транзакции
client.confirm_transaction(txid['result'])
print(f"Транзакция отправлена: {txid['result']}")
проверяем баланс пользователя (getTokenAccountBalance)
balance = client.getTokenAccountBalance(receiver_token_account)
print(f"Баланс получателя: {balance['result']['value']['amount']}")
🤩 P.S для работы с mainnet заменяемhttps://api.devnet.solana.comнаhttps://api.mainnet-beta.solana.com.
Кидайте свои идеи на МОЩНЫЙ разбор
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤🔥2🤩2
Либы
solana-py — для взаимодействия с Solana
websockets — для работы с WebSocket.
pip install solana websockets
Solana предоставляет WebSocket API для подписки на события в блокчейне
import asyncio
import websockets
async def connect_to_solana():
uri = "wss://api.mainnet-beta.solana.com" # WebSocket endpoint Solana
async with websockets.connect(uri) as websocket:
Подписка на события
subnoscription_request = {
"jsonrpc": "2.0",
"id": 1,
"method": "logsSubscribe",
"params": [
{"mentions": ["all"]}, # Подписываемся на все события
{"commitment": "confirmed"}
]
}
await websocket.send(json.dumps(subnoscription_request))
print("Подписались на события Solana")
# Получение данных в реальном времени
async for message in websocket:
print("Получено событие:", message)
asyncio.get_event_loop().run_until_complete(connect_to_solana())
Обработка событий
В зависимости от типа события (транзакция, смарт-контракт, изменение аккаунта), выполняем следующие действия.
import json
async def handle_event(event):
event_data = json.loads(event)
Пример обработки события
if "params" in event_data:
log_data = event_data["params"]["result"]["value"]
print("Лог:", log_data)
Фильтруем События (конкретный смарт-контракт || аккаунтов)
async def handle_event(event):
event_data = json.loads(event)
if "params" in event_data:
log_data = event_data["params"]["result"]["value"]
if "specific_account_id" in log_data: # Пример фильтрации по аккаунту
print("Событие для конкретного аккаунта:", log_data)
++ Для масштабирования применим использование очередей (RabbitMQ или Kafka) для обработки событий в параллельном режиме
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤1😍1🐳1
1-2 раза в неделю будем разбирать работу популярного софта под L1 L2 проекты 2021 - 2025
+ Для большего понимания буду дропать видосы на эту тему
Затея мощнейшая! Что добавите, кроме ваших реакций?
Please open Telegram to view this post
VIEW IN TELEGRAM
1😍15🔥8❤🔥3🍓2
кратко и пошагово разбираем процесс
Что требуется?
Node.js (для Metaplex CLI)
Python 3.7+ ⬇️
Solana CLI (для управления кошельком и сетями)
Либы ->
pip install solders anchorpy base58Создание NFT через Metaplex
a. Подготовка метаданных
файл metadata.json:
{
"name": "My NFT",
"symbol": "NFT",
"denoscription": "Описание",
"image": "https://ссылка_на_имаге/image.png",
"attributes": []
}b. Загрузка метаданных и минтинг NFT (Используем Metaplex CLI)
metaplex upload metadata.json -k ~/.config/solana/devnet.json
После загрузки получаем URI метаданных -> https://arweave.net/xyz
import json
from solders.keypair import Keypair
from solders.pubkey import Pubkey
from solana.rpc.api import Client
from spl.token.instructions import Token
from solana.rpc.types import TxOpts
from spl.token.constants import TOKEN_PROGRAM_ID
# подключаемся к Devnet
client = Client("https://api.devnet.solana.com")
# загрузка приватного ключа из файла
with open("/path/to/devnet.json", "r") as f:
secret_key = json.load(f)
# создание объекта Keypair из приватного ключа
payer = Keypair.from_bytes(bytes(secret_key[:32]))
# создание NFT (Mint Account)
token = Token.create_mint(
conn=client,
payer=payer,
mint_authority=payer.pubkey(),
decimals=0, # NFT имеет 0 десятичных знаков
program_id=TOKEN_PROGRAM_ID
)
# создаем ассоциированный аккаунт для хранения NFT
associated_account = token.create_associated_token_account(payer.pubkey())
# минтинг 1й NFT
token.mint_to(
dest=associated_account,
mint_authority=payer,
amount=1,
opts=TxOpts(skip_confirmation=False)
)
print(f"NFT создан! Mint Address: {token.pubkey}")
Добавление метаданных Metaplex (для привязки метаданных к NFT)
Пример через CLI:
metaplex create_nft \\
-k ~/.config/solana/devnet.json \\
--uri "https://arweave.net/xyz" \\
--name "My NFT"
после создания
Проверяем Solana кошелек
вот такая базовая инструкция по созданию нфт, как вам идея написать нашу??
Please open Telegram to view this post
VIEW IN TELEGRAM
😍6❤🔥3🔥2