Слогер Создать блог
Разработка

Как интегрировать Python с Node API RustChain: разбор на реальных запросах

RustChain — блокчейн, где майнинг-награды зависят от возраста железа. У его ноды — обычный HTTPS JSON API. Показываем, как с ним работать из Python, и разбираем подводные камни.

RustChain — блокчейн, где майнинг-награды зависят от древности железа: чем старше компьютер, тем больше монет он приносит. У ноды — простой HTTPS JSON API, так что интеграция с любого языка — это просто HTTP-запросы. Покажу на Python, на реальных ответах, без моков.

Первое, обо что спотыкаются все: нода живёт по адресу https://50.28.86.131 и использует самоподписанный TLS-сертификат. Обычный urllib или requests такую ноду отвергнут. Для локального теста можно отключить проверку, но в проде закрепите сертификат.

import json, ssl, urllib.request BASE = "https://50.28.86.131" ctx = ssl.create_default_context() ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE # только для теста def get(path, params=None): url = BASE + path if params: url += "?" + "&".join(f"{k}={urllib.parse.quote(str(v))}" for k, v in params.items()) req = urllib.request.Request(url, headers={"User-Agent": "my-integration/0.1"}) with urllib.request.urlopen(req, timeout=20, context=ctx) as r: return json.loads(r.read().decode()) print(get("/health")) {"backup_age_hours": 18.18, "db_rw": true, "ok": true, "tip_age_slots": 0, "uptime_s": 77012, "version": "2.2.1-rip200"}

Что смотреть в ответе

db_rw: true — база доступна на запись, tip_age_slots: 0 — цепочка свежая. Если хоть одно не так, лучше подождать и повторить, чем строить интеграцию на устаревших данных.

Чтение состояния

Два эндпоинта закрывают почти все задачи — /epoch и /wallet/balance. Первый отдаёт общую картину сети:

{"blocks_per_epoch": 144, "enrolled_miners": 10, "epoch": 264, "epoch_pot": 1.5, "slot": 38022, "total_supply_rtc": 8388608}

Второй — баланс по miner_id:

print(get("/wallet/balance", {"miner_id": "Ivan-houzhiwen"})) # {"amount_i64": 45000000, "amount_rtc": 45.0, "miner_id": "Ivan-houzhiwen"}
ПолеЧто это
amount_i64Целое число во внутренних единицах — микро-RTC
amount_rtcЧеловекочитаемое значение, то же, но в RTC

Арифметику делайте только с целым полем, а форматируйте в самом конце. Плавающие балансы — как начинаются бухгалтерские баги.

Ловушка с нулём

Запрос несуществующего кошелька не возвращает ошибку. Вот реальный пример:

print(get("/wallet/balance", {"miner_id": "definitely-not-a-real-miner-xyz"})) # HTTP 200 -> {"amount_i64": 0, "amount_rtc": 0.0, "miner_id": "definitely-not-a-real-miner-xyz"}

HTTP 200, нулевой баланс. Если ваша интеграция считает ноль «валидным пустым аккаунтом», вы не отличите «у кошелька нет средств» от «такого кошелька никогда не существовало». Добавьте слой валидации: проверяйте miner_id по реестру, которому доверяете, прежде чем верить нулю. Это классический баг — успешный статус, но неверный эффект. Аудит API-клиентов обычно вылавливает такое.

Переводы

Переводы идут через /wallet/transfer/signed с подписью Ed25519. Полезная нагрузка выглядит так:

transfer = { "from_address": "RTCaaaa...", "to_address": "RTCbbbb...", "amount_rtc": 1.5, "nonce": 12345, "memo": "", "public_key": ed25519_pubkey_hex, "signature": ed25519_sig_hex, "chain_id": "rustchain-mainnet-v2", } # POST json=transfer в BASE + "/wallet/transfer/signed"

Три детали решают всё:

  1. Адреса — строки RTC..., а не miner_id и не адреса других сетей.
  2. Nonce защищает от повторов. Никогда не используйте один и тот же nonce дважды — храните последний использованный для каждого кошелька.
  3. chain_id не даёт переиспользовать подпись в другой сети. Для mainnet это ровно rustchain-mainnet-v2.

Правила подписи описаны в docs/API.md репозитория. Используйте их каноническую сериализацию, а не свой JSON — иначе подпись не пройдёт проверку.

Минимальный продакшн-клиент

Соберём всё вместе: ретраи, обработка ошибок, единая точка входа.

class RustChainClient: def __init__(self, base=BASE, retries=3): self.base, self.retries = base, retries self.ctx = ssl.create_default_context() self.ctx.check_hostname = False self.ctx.verify_mode = ssl.CERT_NONE def get(self, path, params=None): last = None for i in range(self.retries): try: return get(path, params) except Exception as e: last = e raise last def post(self, path, body): # аналогично, но с POST pass

Типичные ошибки

  • Отключать проверку сертификата в проде — обязательно закрепите сертификат.
  • Считать нулевой баланс за «пустой аккаунт» без доп. проверки.
  • Переиспользовать nonce.
  • Округлять amount_rtc при вычислениях — работайте с i64.
  • Не проверять /health перед операциями.

Вывод

Интеграция с RustChain — это базовые HTTP-запросы. Сложность не в самом API, а в мелочах: самоподписанный TLS, нулевые балансы несуществующих кошельков, аккуратность с nonce и подписью. Соберите тонкий слой-обёртку один раз — и дальше работайте как с обычной базой данных.

По материалам: blockchain. Текст переработан редакцией Слогера.

← На главную

Рекламное место — Конец поста
Реклама · Слогер

Комментарии (1)

Войдите, чтобы комментировать.

Виктор 20.09.2026 19:14 ▲ 0
371246
Разработка

Почему сеньор чувствует плохой код, а джун — нет: как превратить интуицию в правила

Разбор ситуации с dev.to: джун спросил наставника, откуда тот знал, что код неправильный, — и ответа не последовало. Что стоит за этим «чутьём» и как передать его другому человеку.

Слогер 08.10.2026 ▲ 0
Образование

Как исследователю стать заметным в мире: разбор открытой науки, Horizon Europe и площадок без рецензий

Япония вошла в Horizon Europe — крупнейшую исследовательскую программу ЕС. Разбираем, что это меняет для отдельного учёного: обязательства по открытой науке, площадки без рецензий и репозитории, которые связывают одно с другим.

Слогер 08.10.2026 ▲ 0
AI

Почему AI-агент не может получить деньги за работу: разбор агентских бирж труда

Инфраструктура для агентской работы уже построена — биржи, каталоги, расчёты в стейблкоинах. Ломается всё на последнем шаге: как исполнитель без кошелька и банковского счёта получает оплату.

Слогер 08.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru
Образование

Рабочее место школьника: как оборудовать его дома, чтобы уроки делались

Свет, посадка, хранение и гаджеты — четыре вещи, которые решают, будет ли ребёнок заниматься за столом или начнёт искать повод встать. Ниже — порядок обустройства и список того, что можно не покупать.

Sloger 07.10.2026 ▲ 0
AI

Анализ тендерной документации: как читать ТЗ и проект контракта за минуты, а не за вечер

Пять файлов, ТЗ на несколько мегабайт и день до окончания подачи. Знакомая картина для всех, кто участвует в тендерах. Написали в блоге, как разбирать тендерную документацию быстро и не пропустить главное: — где искать сроки, обеспечение, оплату, штрафы и гарантию (подсказка: почти всё в проекте контракта, а не в ТЗ); — почему технологии в ИТ-закупках почти никогда не пишут в названии; — как ИИ-разбор в Fluxs выписывает условия с дословными цитатами и сверяет их с документом; — зачем отдельный список вопросов для запроса разъяснений. Решение об участии остаётся за человеком. ИИ просто экономит вечер над ТЗ. https://fluxs.ru/blog/analiz-tendernoj-dokumentacii

Слогер 07.10.2026 ▲ 1
Fluxs lenta
Реклама · fluxs.ru
Разработка

Как ревьюить pull request и не отпугнуть контрибьютора: ярлык против разбора

Комментарий «похоже, это писал ИИ» и разбор диффа по существу занимают одинаковое время. Только в одном случае автор уходит молча, а проблема остаётся висеть ещё семь месяцев.

Слогер 07.10.2026 ▲ 0
Карьера

Как оформить портфолио фрилансера: разбор кейсов, контакта и каналов поиска клиентов

Портфолио — это интерфейс со своим сценарием: читатель ищет доказательства, что ваш опыт подходит его задаче. Разбираю, что писать в кейсах, как показать границы своей работы и где искать заказчиков.

Слогер 07.10.2026 ▲ 0
Карьера

Как отвечать на собеседовании: почему STAR-шаблона мало и что проверять в своём ответе

Четыре раздела STAR могут быть заполнены идеально — и всё равно не давать слушателю доказательств вашей работы. Разбираем, как проверить историю до интервью и какие вопросы задать самому себе.

Слогер 07.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru
Разработка

Почему разработчики перестают писать код: разбор новой роли и что делать команде

Спецификации на человеческом языке, тест-сценарии и агент, который пишет реализацию. Что это меняет в работе одного разработчика и почему командные процессы не успели за этим.

Слогер 06.10.2026 ▲ 0