Skip to content

Releases: piratecash/corsa

v0.42-alpha

30 Apr 10:22
a07dad5

Choose a tag to compare

What's New in v0.42-alpha

Direct Messages Can Now Be Deleted at Message and Conversation Level

This release adds full delete control flow for direct messages. Individual messages can now be deleted, and entire conversations can also be cleared through the new conversation-delete path.

This gives the messaging layer a much more complete lifecycle: not just send, receive, and track, but also explicitly remove content when the user or operator decides it should no longer remain in the conversation history.

Desktop Gets a File Manager Tab

The desktop application now includes a dedicated file manager tab for working with transfers and related file activity from a clearer, more task-focused surface.

This makes file-oriented workflows easier to browse and reason about than treating everything as a side effect inside chat views alone.

File Transfer Becomes More Flexible and More Observable

File transfer continues to mature in several directions at once. Dedicated transfer concurrency caps have been removed, newer peers remain eligible for file routes, and the transfer/routing stack keeps improving how it selects and explains file paths.

Together with the earlier route-explanation and self-authenticating file-command work, this makes file delivery less rigid, more diagnosable, and better able to take advantage of viable peers instead of excluding them too aggressively.

Better Signals Around Node and Download State

RPC now exposes a PIP-0001 node status endpoint. PIP-0001, "Masternode Messenger Service Integration", defines a staged path for making Corsa service availability part of PirateCash masternode operation, and this endpoint gives that effort a clearer node-status surface for health and integration checks.

On the desktop side, completed file downloads can now trigger a sound notification, which gives the user a more immediate signal that a transfer has finished without needing to watch the UI constantly.


Что нового в v0.42-alpha

Direct messages теперь можно удалять и на уровне сообщения, и на уровне диалога

В этом релизе появился полный delete control flow для direct messages. Теперь можно удалять отдельные сообщения, а также полностью очищать целые conversation через новый conversation-delete path.

Это делает messaging layer заметно более завершённым: теперь он не только отправляет, принимает и отслеживает сообщения, но и позволяет явно убирать контент, когда пользователь или оператор решает, что он больше не должен оставаться в истории диалога.

В Desktop появилась вкладка file manager

Desktop-приложение теперь включает отдельную вкладку file manager для работы с transfer'ами и связанной файловой активностью через более ясную и task-focused поверхность.

Это делает file-oriented workflows заметно удобнее для просмотра и понимания, чем когда всё воспринимается только как побочный эффект внутри chat views.

File transfer стал гибче и наблюдаемее

File transfer продолжает заметно взрослеть сразу в нескольких направлениях. Убраны отдельные concurrency caps для transfers, более новые peers остаются допустимыми кандидатами для file routes, а сам transfer/routing stack продолжает улучшать выбор и объяснение путей доставки файла.

Вместе с прежними улучшениями вроде route explanation и self-authenticating file commands это делает доставку файлов менее жёсткой, более диагностируемой и лучше использующей пригодных peers вместо слишком агрессивного их исключения.

Улучшены сигналы о состоянии ноды и завершении загрузки

В RPC появился PIP-0001 node status endpoint. PIP-0001, "Masternode Messenger Service Integration", задаёт поэтапный путь, по которому доступность сервиса Corsa становится частью работы masternodes PirateCash, а новый endpoint даёт этому направлению более явную node-status поверхность для health и integration checks.

Со стороны desktop завершение file download теперь может сопровождаться звуковым уведомлением, что даёт пользователю более быстрый сигнал о завершении transfer'а без необходимости постоянно следить за интерфейсом.

v0.41-alpha

27 Apr 04:27
9840e79

Choose a tag to compare

What's New in v0.41-alpha

Routing v2 Rollout Becomes a Single Coherent Step

The routing stack now moves much further toward capability-aware announce v2 propagation.

The work includes the routes_update delta protocol, persisted and snapshotted peer capabilities for announce decisions, stricter legacy connect-time sync behavior, TTL refresh for unchanged learned routes, and a broader cleanup of routing integration into more focused pieces. Taken together, this makes route propagation more explicit, more incremental, and better aligned with what each peer can actually understand.

File Transfer Routing and Authenticity Improve Together

File transfer got two substantial upgrades. First, file routes are now ranked more deliberately and the system exposes explainFileRoute diagnostics so operators can understand why a particular path was chosen. Second, file_command frames are now self-authenticating, which hardens the file-transfer control path against ambiguity and spoofing-style mistakes.

In practice, file delivery should be easier to reason about when debugging and safer when commands are relayed across the network.

Better Operator Ergonomics for CLI and Desktop Console

The desktop console now supports command-history navigation, which makes repeated diagnostics and iterative command use much more comfortable.

On the CLI side, corsa-cli can now read RPC credentials from the environment, and the Docker runtime image bundles corsa-cli directly for easier in-container diagnostics.

Safer Default Dial Behavior

The node now skips persisted private peers during auto-dial instead of treating them as normal dial candidates.

This reduces wasted connection attempts and helps the node avoid spending effort on stale or non-routable private endpoints that should not participate in normal automatic dialing.


Что нового в v0.41-alpha

Routing v2 оформляется в один связный шаг

Routing stack заметно продвинулся в сторону capability-aware announce v2 propagation.

Сюда входят routes_update delta protocol, персистентность и snapshot'ы peer capabilities для announce-решений, более строгий legacy connect-time sync, TTL refresh для неизменившихся learned routes и более чистое разделение routing integration на сфокусированные части. Вместе это делает распространение маршрутов более явным, более incremental и лучше согласованным с тем, что каждый peer реально умеет понимать.

File transfer одновременно стал умнее по маршрутам и строже по аутентичности

File transfer получил два заметных улучшения. Во-первых, file routes теперь ранжируются более осмысленно, а система отдаёт diagnostics через explainFileRoute, чтобы оператор мог понять, почему был выбран тот или иной путь. Во-вторых, file_command frames теперь являются self-authenticating, что делает control path file transfer более защищённым от неоднозначности и ошибок в духе spoofing.

На практике это делает доставку файлов проще для отладки и безопаснее при relay-передаче команд через сеть.

Более удобная работа оператора через CLI и desktop console

Desktop console теперь поддерживает навигацию по истории команд, поэтому повторяющиеся diagnostics и итеративная работа с командами стали заметно удобнее.

Со стороны CLI, corsa-cli теперь умеет читать RPC credentials из environment, а Docker runtime image сразу включает corsa-cli, что упрощает диагностику прямо внутри контейнера.

Более безопасное поведение auto-dial по умолчанию

Нода теперь пропускает persisted private peers во время auto-dial, а не рассматривает их как обычных dial candidates.

Это уменьшает число бесполезных попыток подключения и помогает ноде не тратить усилия на stale или non-routable private endpoints, которые не должны участвовать в обычном автоматическом дозвоне.

v0.40-alpha

23 Apr 04:36
b78faa9

Choose a tag to compare

What's New in v0.40-alpha

Service State Is Split Across Domain Mutexes

This release continues the lock-contention cleanup inside node.Service by splitting the old shared service state across domain-specific mutexes and documenting a canonical lock ordering contract.

The practical effect is that unrelated readers and writers are much less likely to serialize each other just because they happen to share the same broad service lock. This gives the node a stronger foundation for staying responsive under reconnect storms and other concurrency-heavy workloads.

Sync Inbound Writes Now Respect Caller Context

NetCore sync inbound writes now honor the caller's context.Context instead of only waiting out the full internal flush timeout.

That means request-scoped timeouts, fanout cancellations, and shutdown cancellation can now interrupt an in-flight inbound sync send promptly, rather than forcing the caller to sit through the whole sync-write budget even after the work is no longer useful.

Inbound Routing Key Resolution No Longer Risks Recursive peerMu Read Locking

The inbound routing path now avoids a recursive peerMu.RLock pattern during routing-key resolution.

This removes another stall class from inbound routing and makes the node safer under concurrent inbound traffic, especially when routing decisions and connection-state lookups are happening at the same time.


Что нового в v0.40-alpha

Service state разделён по domain mutexes

В этом релизе продолжается работа по снижению lock contention внутри node.Service: старое общее service state теперь заметно сильнее разделено по domain-specific mutexes, а для них задокументирован канонический контракт lock ordering.

Практический эффект в том, что несвязанные readers и writers теперь гораздо реже сериализуют друг друга только потому, что раньше делили один широкий service lock. Это даёт ноде более прочную основу для сохранения отзывчивости во время reconnect storms и других concurrency-heavy сценариев.

Sync inbound writes теперь уважают caller context

Sync inbound writes в NetCore теперь учитывают context.Context вызывающей стороны, а не просто ждут полный внутренний flush timeout.

Это значит, что request-scoped timeouts, отмена fanout-операций и shutdown cancellation теперь могут быстрее прерывать in-flight inbound sync send, вместо того чтобы заставлять caller'а досиживать весь sync-write budget даже тогда, когда работа уже потеряла смысл.

Inbound routing key resolution больше не рискует recursive peerMu read-lock

Inbound routing path теперь избегает recursive peerMu.RLock паттерна во время routing-key resolution.

Это убирает ещё один класс stall'ов из inbound routing и делает ноду безопаснее при конкурентном входящем трафике, особенно когда routing decisions и connection-state lookups происходят одновременно.

v0.39-alpha

22 Apr 09:27
71a50e4

Choose a tag to compare

What's New in v0.39-alpha

Hot RPC Reads Are Now Decoupled From Core Locks

This release moves the hottest local RPC read paths onto primed atomic snapshots. Commands such as fetch_network_stats, fetch_peer_health, and get_peers now read prebuilt snapshots instead of competing directly for s.mu and cm.mu on the request path.

In practice, this makes Desktop and other local consumers more resilient during reconnect storms and heavy node churn. Even when writers are busy, the UI can keep reading the last good snapshot instead of stalling behind lock contention.

Faster Route Announcement and Withdrawal Fanout

Routing fanout has been parallelized in several places: route announcements fan out more efficiently, inbound full sync work is moved off the critical path, and disconnect-triggered withdrawals now propagate in parallel as well.

The result is a routing layer that reacts faster to topology changes and does less serial waiting when multiple peers need to be updated at once.

Queue-State Persistence Moves to an Async Debounced Writer

Queue-state persistence is now handled by an asynchronous debounced persister instead of writing synchronously on hot mutation paths. Multiple quick updates can collapse into a smaller number of disk writes while shutdown still performs a final flush.

This reduces write amplification and removes more disk I/O from peer lifecycle, relay, and routing-sensitive paths, which helps keep runtime behavior smoother under bursty activity.

Inbound Peer Announcement Uses Observed IP Plus Hello/Default Port

Inbound peers are now announced using the observed remote IP together with the peer's declared hello port or the default port when appropriate, instead of relying on less trustworthy combinations.

This improves the quality of propagated peer addresses and makes peer exchange more likely to distribute endpoints that other nodes can actually dial successfully.


Что нового в v0.39-alpha

Hot RPC reads теперь отвязаны от core locks

В этом релизе самые горячие local RPC read-paths переведены на primed atomic snapshots. Команды вроде fetch_network_stats, fetch_peer_health и get_peers теперь читают заранее собранные snapshots, а не конкурируют напрямую за s.mu и cm.mu на самом request path.

На практике это делает Desktop и другие локальные consumers заметно устойчивее во время reconnect storms и сильного churn внутри ноды. Даже когда writers заняты, UI может продолжать читать последний корректный snapshot вместо того, чтобы зависать на lock contention.

Более быстрый fanout route announcements и withdrawals

Routing fanout был распараллелен в нескольких местах: route announcements расходятся эффективнее, inbound full sync вынесен с критического пути, а withdrawals при disconnect теперь тоже распространяются параллельно.

В результате routing layer быстрее реагирует на изменения топологии и меньше страдает от последовательного ожидания, когда сразу несколько peers нужно обновить одновременно.

Queue-state persistence перенесена на async debounced writer

Сохранение queue state теперь выполняется асинхронным debounced persister'ом вместо синхронной записи на горячих mutation paths. Несколько быстрых обновлений могут схлопываться в меньшее число disk writes, при этом на shutdown всё равно выполняется финальный flush.

Это уменьшает write amplification и убирает дополнительный disk I/O из peer lifecycle, relay и routing-чувствительных путей, помогая системе вести себя плавнее при bursty-активности.

Inbound peer announce теперь использует observed IP плюс hello/default port

Inbound peers теперь анонсируются с использованием реально наблюдаемого remote IP и порта, объявленного peer'ом в hello, либо default port там, где это уместно, вместо менее надёжных комбинаций.

Это повышает качество распространяемых peer addresses и делает peer exchange более склонным раздавать endpoints, к которым другие ноды действительно смогут успешно подключиться.

v0.38-alpha

21 Apr 13:07
b02c6fd

Choose a tag to compare

What's New in v0.38-alpha

Self-Identity Handshakes Are Now Rejected Everywhere

This release closes an important self-loopback class of failures. The node now rejects self-identity handshakes across all dial paths, not just simple address-level self-detection cases. If a remote hello or welcome carries the local node's own Ed25519 identity, the session is treated as a self-connection and is stopped before it can churn through retries or pollute peer state.

This makes the node more resilient against NAT reflection, peer-exchange echoes, fallback-port aliases, and other scenarios where the transport address may look different while the peer identity is actually our own.

Advertise Convergence Now Uses Passive Observed-IP Learning

Advertise-address convergence has been softened from an eager reject-and-correct model into a more passive observed-IP learning path. Instead of leaning on observed-address-mismatch as a normal runtime correction mechanism, the node now treats legacy mismatch notices as weak hints and converges more conservatively based on observed-IP evidence.

That reduces unnecessary handshake disruption while still moving the node toward a truthful self-advertise address over time. It also prepares the protocol for cleaner post-legacy behavior as older mismatch-driven flows are phased out.

Calmer UI and Status Updates During Failure Storms

The event-driven status path now suppresses no-op publication storms for aggregate status and version policy updates, while still republishing on heartbeat so lossy subscribers cannot remain stale forever.

In practice, this keeps Desktop and other ebus consumers much calmer during reconnect and failure storms, reduces avoidable UI freezes, and preserves liveness signals through fresh heartbeat timestamps instead of noisy duplicate state traffic.

More Precise peer-banned Scope and Recovery

The peer-banned protocol is now applied with clearer scoping and more durable recovery behavior. Per-peer bans and IP-wide blacklists are persisted separately, notice delivery stays on the managed live connection path, and successful outbound authentication now clears only the scopes that the handshake can legitimately prove are healthy again.

This helps stop retry storms without over-suppressing healthy sibling peers behind the same IP, and it makes ban recovery more symmetrical and trustworthy after the remote side starts accepting us again.


Что нового в v0.38-alpha

Self-identity handshake теперь отклоняется везде

В этом релизе закрыт важный класс self-loopback сбоев. Теперь нода отклоняет self-identity handshake на всех dial paths, а не только в простых случаях address-level self-detection. Если удалённый hello или welcome несёт собственную Ed25519 identity локальной ноды, сессия трактуется как self-connection и останавливается до того, как она успеет уйти в retry churn или загрязнить peer state.

Это делает ноду устойчивее к NAT reflection, peer-exchange echoes, fallback-port aliases и другим сценариям, где transport address может выглядеть иначе, хотя peer identity на самом деле наша собственная.

Advertise convergence теперь использует passive observed-IP learning

Логика converge для advertise-address стала мягче: вместо eager reject-and-correct модели она перешла к более пассивному observed-IP learning path. Вместо того чтобы полагаться на observed-address-mismatch как на обычный runtime-механизм коррекции, нода теперь рассматривает legacy mismatch notices как слабые подсказки и сходится осторожнее, опираясь на observed-IP evidence.

Это уменьшает лишние handshake-срывы, но при этом всё равно со временем ведёт ноду к правдивому self-advertise address. Заодно это подготавливает протокол к более чистому post-legacy поведению по мере ухода старых mismatch-driven flows.

Более спокойные UI и status updates во время failure storms

Event-driven путь статуса теперь подавляет no-op publication storms для aggregate status и version policy, но при этом продолжает делать heartbeat-republish, чтобы lossy subscribers не оставались устаревшими навсегда.

На практике Desktop и другие ebus-consumers ведут себя заметно спокойнее во время reconnect и failure storms, снижается количество лишних UI-freeze, а сигналы живости сохраняются через свежие heartbeat timestamps вместо шумного дублирования состояния.

Более точный scope и recovery для peer-banned

Протокол peer-banned теперь применяется с более чётким scope и более надёжным recovery-поведением. Per-peer bans и IP-wide blacklists сохраняются раздельно, доставка notices остаётся на managed live connection path, а успешная исходящая аутентификация очищает только те scope, здоровье которых handshake действительно может подтвердить.

Это помогает останавливать retry storms, не подавляя лишний раз здоровых sibling peers за одним и тем же IP, и делает восстановление после повторного допуска со стороны удалённого узла более симметричным и надёжным.

v0.37-alpha

20 Apr 19:05
f028771

Choose a tag to compare

What's New in v0.37-alpha

Live Node State Now Flows Through an Internal Event Bus

This release introduces an internal asynchronous topic bus (ebus) and moves node-state propagation onto that live event stream. Peer health, slot state, routing reachability, aggregate network status, version policy, traffic, capture lifecycle, contacts, and identities can now flow through one shared in-process path instead of depending on ad hoc ownership and heavier polling updates.

For Desktop, console, and SDK consumers, this creates a cleaner real-time state model. A new NodeStatusMonitor seeds from ProbeNode and then keeps status current from live deltas, which reduces drift between initial snapshots and ongoing runtime changes and gives UI/runtime components a more consistent view of the node.

Stricter Advertise-Address Truth and Convergence

Handshake processing is now much stricter about whether a peer's advertised listening address matches the address actually observed on the connection. The node distinguishes valid matches, non-listener and legacy-direct cases, local/private exceptions, and real world mismatches, and it can reject incorrect public advertises with a machine-readable connection_notice carrying the observed address hint.

This improves trust in advertised peer endpoints, helps peers converge toward a truthful self-advertise address over time, and reduces the chance that stale or incorrect public addresses remain treated as safely announceable across inbound and outbound paths.

Stronger Foundations for Diagnostics and Stability

Alongside the two major runtime changes, the codebase also received a broad testing refactor based on generated mocks and expanded integration coverage around routing, capture, RPC, and node-state flows.

That work is mostly internal, but it matters: the new event-driven status path and advertise-convergence rules now land with much stronger regression coverage than before, which should make follow-up iterations safer.


Что нового в v0.37-alpha

Live-состояние ноды теперь идёт через внутреннюю event bus

В этом релизе появилась внутренняя асинхронная topic bus (ebus), и распространение node state переведено на этот live event stream. Peer health, slot state, routing reachability, aggregate network status, version policy, traffic, capture lifecycle, contacts и identities теперь проходят через один общий in-process путь вместо разрозненного владения состоянием и более тяжёлых polling-обновлений.

Для Desktop, console и SDK это создаёт более чистую модель real-time состояния. Новый NodeStatusMonitor сначала получает seed через ProbeNode, а затем поддерживает статус актуальным через live deltas, что уменьшает расхождение между стартовым snapshot и дальнейшими runtime-изменениями и даёт UI/runtime-компонентам более согласованное представление о ноде.

Более строгая truth/convergence логика для advertise-address

Обработка handshake теперь заметно строже относится к тому, совпадает ли advertised listening address пира с адресом, реально наблюдаемым на соединении. Нода различает корректные совпадения, случаи non-listener и legacy-direct, local/private exceptions и настоящие world mismatch-сценарии, а при некорректном публичном advertise может отклонять соединение с machine-readable connection_notice, содержащим observed-address hint.

Это повышает доверие к advertised peer endpoints, помогает peers со временем сходиться к правдивому self-advertise address и уменьшает вероятность того, что stale или неверные публичные адреса будут и дальше считаться безопасно announceable на inbound и outbound путях.

Более прочная база для diagnostics и стабильности

Параллельно с двумя основными runtime-изменениями кодовая база получила широкую тестовую миграцию на generated mocks и расширенное integration coverage вокруг routing, capture, RPC и потоков node state.

Это в основном внутренняя работа, но она важна: новый event-driven путь статуса и advertise-convergence правила теперь приходят с заметно более сильной regression coverage, что должно сделать следующие итерации безопаснее.

v0.36-alpha

18 Apr 10:28
7cd14f6

Choose a tag to compare

What's New in v0.36-alpha

Smoother Desktop Message Composer

The desktop DM composer now behaves more like a modern chat input: it auto-focuses when you move into message entry and it auto-resizes as the text grows.

This makes desktop messaging feel faster and less cramped, especially when switching between contacts or composing longer multi-line messages.

New getActiveConnections Observability Command

RPC now exposes a getActiveConnections command for inspecting all currently live peer sessions. Unlike slot-oriented views, this command is connection-oriented and reports the active TCP sockets that have completed the handshake, including direction, peer identity, network classification, connection ID, health state, and related slot state when available.

That gives operators and tooling a clearer picture of what the node is actually holding open right now, which is especially useful when debugging multi-session peers, live connection churn, or mismatches between connection-manager slots and real sockets.

Desktop Peer View No Longer Freezes During Probe Cycles

The desktop peer-health path now narrows lock scope during ProbeNode, preventing the UI from blocking behind heavier peer-state reads.

In practice, this makes the desktop peers view feel more responsive under load and reduces the chance of noticeable freezes while the application is polling node state.


Что нового в v0.36-alpha

Более плавный desktop composer для сообщений

Desktop DM composer теперь ведёт себя ближе к современному chat input: он автоматически получает фокус, когда пользователь переходит к вводу сообщения, и автоматически увеличивает свою высоту по мере роста текста.

Это делает messaging в desktop быстрее и менее тесным, особенно при переключении между контактами и наборе более длинных multi-line сообщений.

Новая observability-команда getActiveConnections

В RPC появилась команда getActiveConnections для просмотра всех текущих живых peer sessions. В отличие от slot-oriented представлений, эта команда ориентирована именно на соединения и показывает активные TCP-сокеты, которые уже прошли handshake, включая направление, peer identity, классификацию сети, connection ID, health state и связанное состояние slot'а, если оно есть.

Это даёт операторам и инструментам более ясную картину того, какие соединения нода реально держит открытыми прямо сейчас, что особенно полезно при отладке multi-session peers, live connection churn и расхождений между connection-manager slots и реальными сокетами.

Desktop peer view больше не зависает во время ProbeNode

В desktop peer-health path был сужен lock scope во время ProbeNode, поэтому UI больше не блокируется из-за более тяжёлых чтений peer state.

На практике peers view стал отзывчивее под нагрузкой, а вероятность заметных подвисаний во время очередного polling node state уменьшилась.

v0.35-alpha

17 Apr 10:46
f5a5b38

Choose a tag to compare

What's New in v0.35-alpha

NetCore Migration Consolidated Into a Single Network Boundary

A large part of this release is one architectural change delivered across many commits: the ongoing NetCore migration. NetCore has now been extracted into its own package, connection handling has moved further toward ConnID-first APIs, and more inbound and outbound paths now go through a shared Network boundary instead of ad hoc socket access.

In practice, this makes connection lifecycle management more coherent, reduces leakage of low-level connection state across the node layer, and gives routing, dispatch, auth, ping, and session teardown a safer and more uniform execution model.

Built-In Peer Traffic Capture

Corsa can now record live peer wire traffic without relying on external sniffers. The new built-in capture flow supports recording by connection ID, by remote IP, or globally, and it exposes start/stop controls through RPC and the desktop console.

Capture state is also surfaced back into diagnostics and peer views, which makes it much easier to inspect malformed traffic, unexpected protocol behavior, or difficult-to-reproduce peer issues directly from the node itself.

Peer Upgrade Detection and Incompatible-Peer Lockout

This release adds a node-owned version policy that watches peer version signals, detects when the network is effectively telling you to upgrade, and applies durable lockout behavior for confirmed incompatible peers.

That improves operator visibility into version-related connectivity problems and helps the node avoid repeatedly cycling through peers that are already known to be incompatible. As part of the same work, relay delivery receipts were kept compatible so legitimate transit receipts from newer peers are forwarded instead of being misclassified.

Leaner Route Announcement Traffic

Route announcement handling has been tightened with canonical per-peer announce snapshots, delta computation, and explicit per-peer announce state tracking. The goal is to reduce redundant announce traffic while keeping resync behavior predictable after reconnects and topology changes.

This makes route propagation less noisy and gives the routing layer a clearer foundation for future incremental announce modes without changing the core correctness rules around withdrawals and origin ownership.

Safer RPC Startup Defaults

The RPC server no longer starts when authentication credentials are not configured. Instead of exposing or competing for an RPC port in partially configured environments, the node now keeps RPC disabled until both username and password are explicitly set.

This is a safer default for local and multi-instance setups and reduces accidental exposure of an unauthenticated control plane.


Что нового в v0.35-alpha

NetCore migration сведена к единой сетевой границе

Значительная часть этого релиза на самом деле является одним архитектурным изменением, просто доставленным серией коммитов: продолжающейся NetCore migration. NetCore теперь вынесен в отдельный пакет, работа с соединениями заметно сильнее смещена к ConnID-first API, а большее число inbound и outbound путей проходит через общую границу Network, а не через разрозненный прямой доступ к сокетам.

На практике это делает lifecycle соединений более целостным, уменьшает утечки low-level connection state в node layer и даёт routing, dispatch, auth, ping и session teardown более безопасную и единообразную модель выполнения.

Встроенный peer traffic capture

Corsa теперь умеет записывать live wire traffic peers без внешних sniffers. Новый встроенный capture flow поддерживает запись по connection ID, по remote IP и глобально, а управление запуском и остановкой доступно через RPC и desktop console.

Состояние capture также возвращается обратно в diagnostics и peer views, поэтому malformed traffic, неожиданное протокольное поведение и трудно воспроизводимые проблемы с peers стало заметно проще исследовать прямо из самой ноды.

Детектирование необходимости апгрейда и lockout несовместимых peers

В релизе появилась node-owned version policy, которая отслеживает версионные сигналы от peers, определяет ситуации, когда сеть фактически подсказывает, что узел пора обновить, и применяет устойчивый lockout для подтверждённо несовместимых peers.

Это улучшает наблюдаемость проблем связности, связанных с версиями, и помогает ноде не крутиться повторно вокруг peers, про которых уже известно, что они несовместимы. В рамках той же работы сохранена совместимость relay delivery receipts, поэтому легитимные transit receipts от более новых peers теперь форвардятся, а не ошибочно классифицируются.

Более экономный route announcement traffic

Обработка route announcements стала строже за счёт канонических per-peer announce snapshots, вычисления delta и явного отслеживания per-peer announce state. Цель этих изменений — уменьшить избыточный announce traffic и при этом сохранить предсказуемый resync после reconnect и изменений топологии.

В результате распространение маршрутов становится менее шумным и получает более чистый фундамент для будущих incremental announce modes без изменения базовых правил корректности вокруг withdrawals и origin ownership.

Более безопасные RPC-defaults при старте

RPC server теперь не запускается, если не настроены auth credentials. Вместо того чтобы открывать или занимать RPC port в частично настроенной среде, нода держит RPC выключенным до тех пор, пока явно не заданы и username, и password.

Это более безопасный default для локальных и multi-instance сценариев и снижает риск случайной экспозиции неаутентифицированной control plane.

v0.34-alpha

13 Apr 22:24
55e7842

Choose a tag to compare

What's New in v0.34-alpha

Unified Network Health Across Node and Desktop

This release introduces a single aggregate network-health model inside the node and makes Desktop consume that shared snapshot instead of recomputing its own status locally. The result is more consistent reporting of healthy, limited, warning, reconnecting, and offline states, along with clearer counts for usable peers, connected peers, and pending messages.

In practice, the network status shown in Desktop now matches the node's own policy decisions much more closely, which reduces drift between what the UI says and how the node actually behaves.

Smarter Peer Exchange in Steady State

Peer exchange is now driven by aggregate network status. When the node is still recovering or has too few usable peers, it actively requests more addresses during sync. Once the node is already healthy, it stops reissuing get_peers on every reconnect and relies on normal peer-announcement gossip instead.

This makes steady-state behavior quieter and more intentional while still preserving fast recovery when connectivity is weak. Compatibility coverage was also expanded to keep mixed-version peer exchange stable on the wire.

Safer Connection Lifecycle and Outbound Writes

Outbound peer-session writes are now routed through the same NetCore single-writer discipline used to protect managed connection I/O, and transitional connection bookkeeping has been collapsed into a unified connection registry.

These changes reduce the chance of inconsistent socket state, keep connection teardown more coherent, and make routing, relay, ping, and file-transfer paths more predictable under reconnects and slow-peer conditions.

Cleaner RPC Semantics Across Transports

The RPC command table now stays transport-neutral, and desktop-specific semantic overrides have been removed. Desktop UI, desktop console, and external RPC callers now rely more cleanly on the same command definitions and availability rules.

That means fewer semantic forks between local and remote command paths, simpler maintenance, and a more dependable contract for tooling built on top of the RPC layer.


Что нового в v0.34-alpha

Единая модель состояния сети для node и Desktop

В этом релизе внутри ноды появилась единая aggregate-модель состояния сети, а Desktop теперь использует этот общий snapshot вместо локального пересчёта статуса. В результате состояния healthy, limited, warning, reconnecting и offline отображаются более последовательно, а счётчики usable peers, connected peers и pending messages стали понятнее и точнее.

На практике это уменьшает расхождение между тем, что показывает UI, и тем, какие решения реально принимает нода.

Более умный peer exchange в steady state

Peer exchange теперь управляется aggregate network status. Когда нода ещё восстанавливается или у неё слишком мало usable peers, во время sync она активно запрашивает новые адреса. Когда сеть уже здорова, нода перестаёт повторно отправлять get_peers на каждом reconnect и опирается на обычный gossip через peer announcements.

Это делает steady-state поведение тише и осмысленнее, но при этом сохраняет быстрый recovery при слабой связности. Дополнительно был расширен compatibility coverage, чтобы mixed-version peer exchange оставался wire-compatible.

Более безопасный lifecycle соединений и outbound writes

Запись в outbound peer sessions теперь проходит через ту же дисциплину NetCore single-writer, которая уже защищает managed connection I/O, а переходное состояние соединений сведено в единый connection registry.

Эти изменения уменьшают вероятность несогласованного socket state, делают teardown соединений более целостным и повышают предсказуемость routing, relay, ping и file transfer в условиях reconnect и slow-peer сценариев.

Более чистая RPC-семантика между transport paths

RPC CommandTable теперь остаётся transport-neutral, а desktop-specific semantic overrides удалены. Desktop UI, desktop console и внешние RPC-клиенты теперь заметно чище опираются на одни и те же определения команд и правила их доступности.

Это уменьшает количество semantic forks между локальным и удалённым путями вызова, упрощает сопровождение и делает RPC-контракт надёжнее для инструментов, которые строятся поверх него.

v0.33-alpha

12 Apr 13:06
ee1572e

Choose a tag to compare

What's New in v0.33-alpha

Better Bootstrap Seeding on Startup

This release improves how a node finds its first useful peers. Corsa now ships with generated chain-parameter seed lists and primes them through the normal add_peer flow during startup instead of relying only on previously persisted state or manual bootstrap configuration.

In practice, this makes fresh starts more reliable and gives the network a stronger baseline path toward initial connectivity, especially when a node does not yet have a good local peer set.

Safer and Smarter Peer Exchange

Peer discovery is now more conservative about what it shares and how it reacts to announcements. Persisted private IPv4 peers are no longer advertised through peer exchange, which reduces accidental leakage of local or non-routable addresses into the wider mesh.

At the same time, announce_peer is now treated as advisory gossip rather than something that should immediately dominate peer state. The peer-selection logic also adds a bias toward fresher candidates, helping the node converge more quickly on currently useful peers instead of overcommitting to stale announcements.

Clearer Desktop Network Health Warnings

The desktop app now excludes reconnecting peers from its aggregate network warning state. Previously, a peer that was already in the process of reconnecting could still contribute to a broader warning that made the network look more unhealthy than it really was.

This change makes the peers view and connection status feel calmer and more accurate during transient recovery periods.

More Accurate File-Transfer Sender Progress

File-transfer sender progress is now tracked by the highest served offset rather than by a less precise intermediate notion of progress. This improves the correctness of persisted transfer snapshots and better reflects what data has actually been served to the receiver.

The result is more trustworthy sender-side progress reporting and stronger recovery behavior when transfers are resumed from saved state.

Smarter File-Datagram Route Selection

File-command delivery now makes better choices when multiple relay paths are available. After confirming that a next-hop can actually carry file transfer traffic, the router prefers the shortest available route, and when multiple candidates have the same hop count it now breaks ties in favor of the peer that has been connected longer.

Stalled peers are also excluded from file-command routing decisions, which helps avoid wasting retries on connections that still exist in state but are no longer healthy enough to carry file traffic.


Что нового в v0.33-alpha

Улучшенный bootstrap seeding при старте

В этом релизе улучшено то, как нода находит первых полезных peers. Теперь Corsa поставляется с сгенерированными seed-списками в chain params и при старте добавляет их через обычный flow add_peer, а не полагается только на ранее сохранённое состояние или ручную bootstrap-конфигурацию.

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

Более безопасный и умный peer exchange

Peer discovery стал осторожнее в том, что именно он распространяет, и в том, как он реагирует на анонсы. Persisted private IPv4 peers больше не публикуются через peer exchange, что уменьшает риск случайной утечки локальных или non-routable адресов в более широкую mesh-сеть.

Одновременно с этим announce_peer теперь трактуется как advisory gossip, а не как сигнал, который должен немедленно доминировать над peer state. Логика выбора peers также получила bias в сторону более свежих кандидатов, поэтому нода быстрее сходится к реально полезным на данный момент узлам и меньше переоценивает stale announcements.

Более точные desktop-предупреждения о состоянии сети

Desktop-приложение теперь исключает reconnecting peers из aggregate network warning. Раньше peer, который уже находился в процессе переподключения, всё ещё мог усиливать общее предупреждение и создавать ощущение, что состояние сети хуже, чем есть на самом деле.

После этого изменения peers view и общий connection status выглядят спокойнее и точнее в короткие периоды восстановления соединений.

Более точный sender progress в file transfer

Прогресс отправителя в file transfer теперь рассчитывается по максимальному уже обслуженному offset, а не по менее точному промежуточному представлению прогресса. Это улучшает корректность persisted transfer snapshots и лучше отражает, какой объём данных действительно был отдан получателю.

В итоге sender-side progress reporting становится надёжнее, а восстановление передач из сохранённого состояния работает увереннее.

Более умный выбор маршрута для file datagram

Доставка file-command теперь лучше выбирает путь, когда доступно несколько relay-маршрутов. После проверки того, что next-hop действительно поддерживает file transfer, роутер предпочитает самый короткий доступный маршрут, а если у нескольких кандидатов одинаковый hop count, tie-break теперь идёт в пользу peer'а, который подключён дольше.

Зависшие peers также исключаются из решений по маршрутизации file-command, что помогает не тратить retry на соединения, которые ещё присутствуют в состоянии, но уже недостаточно здоровы для передачи file traffic.