10918 Commits

Author SHA1 Message Date
Jędrzej Stuczyński b6eb391e85 bugfix: clippy issues (#6876) 2026-06-12 11:10:06 +01:00
Jędrzej Stuczyński 931ec03b28 feat: expose node's chain address on self-described API (#6815)
* feat: expose nym-nodes' on-chain address on v2 auxiliary endpoint

* moved swagger page outside the v1 route

* fixed swagger endpoint for nym-api

* post rebasing fixes

* remove redundant impl OfflineSigner for Arc<DirectSecp256k1HdWallet>
2026-06-12 10:36:27 +01:00
Jędrzej Stuczyński 8a93bce32f feat: additional mixnet improvements and metrics (#6874)
* wip

* batch processing of forward packets

* tmp: additional metrics for remote node

* fixed incorrect prometheus metric registration

* unified runtime metrics

* unify mixnet client metrics

* packet forwarding cleanup

* add batching for emptying the delay queue

* cleanup client io loop

* feat(nym-node): reap idle mixnet connections (ingress + egress)

Close mixnet connections that sit with no traffic past a configurable idle period (mixnet.debug.connection_idle_timeout, default 5min, 0 disables) to bound lingering tokio tasks/sockets.

Ingress handle_stream is read-only, so a silently-gone peer (NAT drop, crash without FIN, half-open) never triggers FIN/RST and the task would block on .next() forever; a new idle select arm closes it (the post-loop replay flush still runs, so nothing is stranded). Egress run_io_loop gets the symmetric arm keyed on last_send; on close EvictOnDrop clears the cache entry and the next packet transparently reconnects.

Adds a cumulative nym_node_network_idle_closed_ingress_mixnet_connections counter; egress reaping is observed via the existing active-egress gauge plus an exit_reason=idle_timeout log.

* downgrade sysinfo

* refactor(nym-node): split PacketForwarder into router + delay-queue tasks

Split the single PacketForwarder task into two concurrently-scheduled tasks connected by a bounded handoff channel, so intake and delayed-release no longer block each other.

PacketRouter (router.rs) is the intake task: sole consumer of the ingress channel, it applies the routing filter and either forwards zero/already-elapsed-delay packets directly or hands delayed ones to the delay task. Its per-packet work is sub-µs, so new packets no longer wait behind delayed-release processing (collapses the ForwarderQueue tail).

DelayForwarder (delay.rs) owns the NonExhaustiveDelayQueue exclusively (it can't be shared by reference). Its run loop services BOTH branches on every wakeup - draining pending inserts first to bring the queue current, then flushing everything now due - so the biased select can't let releases and inserts starve each other, and a freshly-arrived-but-already-due packet releases in the same pass (marginally improving DelayQueueOverrun).

The mixnet client is shared as Arc<C>; handoff-channel overflow is dropped as an egress drop rather than blocking, keeping intake decoupled from release.

* feat(nym-node): bound egress flush with a write timeout

Cap how long a single egress batch flush may block on a congested peer socket (mixnet.debug.connection_write_timeout, default 500ms, 0 disables), so a slow peer can no longer back this connection's egress queue up into the multi-second range - the root of the EgressQueue and SocketWrite tails.

A single timeout is treated as transient congestion: the un-fed tail of the batch is abandoned but the connection is retained. This is sound because NoiseStream::poll_write encrypts and buffers each frame synchronously, so a cancelled flush leaves the noise transport nonce-consistent and a later flush resumes the byte stream in order - so a momentary spike costs no re-handshake. Only MAX_CONSECUTIVE_WRITE_TIMEOUTS (3) timeouts in a row, i.e. a persistently congested peer, tears the connection down (it reconnects on the next packet); a successful flush resets the counter.

Buffer-size tuning (maximum_connection_buffer_size) deliberately left for live data.

* revert PacketForwarder split in favour of a single task that clears both channels on wake
2026-06-12 10:31:54 +01:00
import this 56846fee77 fix gw landing page (#6873)
* fix landing page image

* use better url
2026-06-10 16:32:12 +02:00
Jędrzej Stuczyński 52949f825a chore: add retries for retrieving chain data (#6847)
* chore: add retries for retrieving chain data

* added retry backoff
2026-06-10 09:54:36 +01:00
Jędrzej Stuczyński 2705330595 feat: introduce node families contract query for Config retrieval (#6870) 2026-06-10 09:54:13 +01:00
benedetta davico fa842ceb4f Merge pull request #6871 from nymtech/master 2026-06-09 18:17:22 +02:00
Jędrzej Stuczyński 3730260cf0 feat(nym-node): mixnet packet latency instrumentation (#6852)
- PacketTrace stopwatch + generic Traced<T> carrier threaded receive -> socket-write
- TraceStage enum owns each stage's metric name/help/buckets; observations go straight
  to the global nym-metrics registry under a uniform mixnet_packet_* family
- stages: Unwrap, ReplayCheck (incl. deferral), ForwarderQueue, DelayQueue,
  DelayQueueOverrun (lateness beyond target release), EgressQueue, SocketWrite, Total
- node-side 1-in-N sampling via MixnetDebug.egress_trace_sample_rate (default 100, 0 disables)
2026-06-09 16:22:14 +01:00
benedetta davico 6bf48de7ba Merge pull request #6869 from nymtech/release/2026.11-xynomizithra
merge release/2026.11 xynomizithra to master
2026-06-09 16:25:10 +02:00
benedettadavico 799dfd59bb Merge branch 'release/2026.11-xynomizithra' into develop 2026-06-09 16:24:28 +02:00
Jędrzej Stuczyński f944348216 bugfix: restore and fix node throughput tester (#6849) 2026-06-09 15:19:37 +01:00
Merve 26955dd74b [DOCs/operators]: Release notes for v2026.11-xynomizithra (#6866)
* test identity

* docs: add changelog for v2026.11-xynomizithra

* operators tools and updates

* add automated stats

* add hosting domains

* add ts sdk to changelog

* fix lang flow

---------

Co-authored-by: serinko <97586125+serinko@users.noreply.github.com>
Co-authored-by: mfahampshire <maxhampshire@pm.me>
2026-06-09 16:14:01 +02:00
mfahampshire 7c890ea0c5 TS SDK docs (#6840)
* First sweep packages + some minor tweaking

* Second sweep

* Regenerate lockfile + package.json mods

* Regenerate lockfile again

* Fix CI

* Fix CI again

* All building properly

* unblock

* Tweak examples

* Comments + readme + fix rotten unit test

* First pass docs

* Big pass

* Massive pass on new docs

* Update integrations.md w mobile

* Partial overhaul review

* new playground + big pass

* new fix lychee err

* IPR notice tweak
2026-06-09 13:31:08 +00:00
benedetta davico 1bc5169691 Remove TODO comments for contract addresses nym-binaries-v2026.11-xynomizithra 2026-06-09 15:07:03 +02:00
benedettadavico a900656ec8 add NF contract address 2026-06-09 15:04:40 +02:00
import this 4fcec99cc2 feat: automated bond (#6860)
* initialise bonding automation

* initialise autobond flow

* docs for autobond

* tweak docs and add scraped stats

* resolve issues

* fix issues

* add extra command advice

* fix rabbitai suggestions

* fix rabbitai suggestions
2026-06-09 14:48:53 +02:00
Tommy Verrall 8ce06dbc0e Merge pull request #6867 from nymtech/wallet/bump-for-release
Wallet version bumps
2026-06-09 10:51:54 +02:00
Tommy Verrall b866be4fcf Wallet version Bumps
- Update the wallet to the latest version
nym-wallet-v1.2.21
2026-06-09 09:54:35 +02:00
Tommy Verrall 37bd66236a Merge pull request #6865 from nymtech/fix/wallet-ux-improvements
Fix wallet minor UX improvements
2026-06-09 09:48:24 +02:00
Tommy Verrall 906a93719f Fix CI Ubuntu 2026-06-08 20:02:37 +02:00
Tommy Verrall 54779175f1 Fix CI linting 2026-06-08 19:19:59 +02:00
Tommy Verrall 6f5e831127 PR comments
- Account loading now dedupes in-flight requests per network instead of sharing one global promise across all networks.
- Regression tests cover same-network reuse and cross-network isolation.
2026-06-08 19:10:36 +02:00
Tommy Verrall 13d48b4bb6 Another round of fixes
- Transaction success is now checked through a shared helper that validates hash, gas usage, and response payloads, not hash presence alone.
- Node settings error helper renamed to match its broader scope.
- Balance refresh now owns the loading flag so nested balance and vesting fetches do not race each other.
- Unbond modal removes the non-null assertion on compounded rewards.
2026-06-08 19:06:13 +02:00
Tommy Verrall 7374ceae6f More fixes
- Unbond totals no longer default malformed amounts to zero; a warning appears when exact totals cannot be calculated.
- Hostname updates no longer treat an empty transaction hash as success.
- Sign-in navigation is gated on successful account load with regression tests.
2026-06-08 18:56:07 +02:00
Tommy Verrall 500200db45 Resolve eslint and prettier issues on balance load changes 2026-06-08 18:26:33 +02:00
Tommy Verrall b9cd2aa12e Fixes
- Account loading is deduplicated so sign-in no longer fires two concurrent network switches.
- Main window boot relies on the network effect only; rust state init no longer double-loads the account.
- NYM price cache clears on sign-out.
2026-06-08 18:23:19 +02:00
Tommy Verrall 002bb3b0f8 UX fixes window geometry, balance load UX, hostname fees, unbond summary
- Wallet no longer forces fullscreen on launch - auth and main windows keep the same size and position when switching.
- Sign-in and balance loading feel smoother, with less layout jump on the home screen.
- Saving a node hostname shows the transaction fee upfront, warns when funds are low, and surfaces clear errors on failure.
- Operator unbond confirmation shows pledge plus compounded operator rewards (delegator stake stays separate).
2026-06-08 18:20:15 +02:00
Tommy Verrall fcab100ec7 Merge pull request #6864 from nymtech/chore/delegation-visibility-touch-ups
Show unbonded delegations in wallet delegation list
2026-06-08 17:33:16 +02:00
benedettadavico 34709e76a1 update changelog 2026-06-08 16:30:10 +02:00
Tommy Verrall f7fbf942f9 PR comments
- Fix addressing concern around unbonding
- Amend existing tests to reflect this
2026-06-08 13:20:15 +02:00
Tommy Verrall d609d30f3a Formatting fixes 2026-06-08 12:47:01 +02:00
Tommy Verrall 2c1b5f59a3 Last fixes
- Pending Delegate events with registry-miss identity keep explorer navigation; unbonded label limited to pending Undelegate rows (`isPendingUndelegateWithRegistryMiss`, `formatPendingDelegationLinkLabel`).
- Tests in `delegationIdentity.test.ts`.
2026-06-08 12:38:09 +02:00
Tommy Verrall c52fc0c9af Last round of fixes
- Align `get_pending_delegation_events` with active delegation identity resolution: `get_node_information` + `delegation_node_identity` synthetic fallback on registry miss.
- Stop hiding pending delegation rows in `shouldHideDelegationFromList` when bonded-registry identity lookup missed.
2026-06-08 12:29:19 +02:00
benedetta davico 153645dabf Merge pull request #6863 from nymtech/bugfig/nf-reinvite-expired-members
bugfix: allow re-inviting expired members
2026-06-08 12:25:17 +02:00
Tommy Verrall 959a986e2c PR review comments
- Add `historical_node_identity` to `DelegationWithEverything` and populate via `lookup_historical_node_identity` in `delegate.rs` so search works after unbond.
- `searchDelegations` searches `historical_node_identity` and guards null/empty `node_identity` with optional chaining.
- Acceptance tests: historical identity search, bonded-unbonding vs synthetic branch semantics, empty-identity search safety.
- Fix linting
2026-06-08 12:23:00 +02:00
Tommy Verrall 9ff2ec249d Show unbonded delegations in wallet delegation list
- In `delegate.rs`, add `delegation_node_identity` and `delegation_mixnode_is_unbonding` so missing node details emit `unbonded:{mix_id}` with `mixnode_is_unbonding: true` instead of an empty `node_identity`.
- Add `delegationListVisibility.ts` (`shouldHideDelegationFromList`, `filterVisibleDelegations`, `searchDelegations`) and wire `DelegationList.tsx` to the shared helpers.
- Update `useSortDelegations.tsx` to pin fully unbonded delegations to the top via `isFullyUnbondedDelegation`.
- In `UndelegateModal.tsx`, display `Node unbonded (mix N)` instead of raw `unbonded:{mix_id}` on the confirm screen.
- Add jest tests
- Add Rust unit test
2026-06-08 12:00:00 +02:00
Jędrzej Stuczyński c85fb161d4 feat: allow re-inviting a node whose family invitation has expired
InviteToFamily previously rejected any second invitation for a (family, node)
pair with PendingInvitationAlreadyExists, even once the existing invitation had
expired and was left inert in the pending map. Now a still-valid invitation still
blocks a duplicate, but an expired one is archived under the new terminal status
FamilyInvitationStatus::Expired and superseded by the fresh invitation.

Regenerated the contract JSON schema and updated the openspec capability.
2026-06-08 10:45:30 +01:00
Jędrzej Stuczyński e27cf142f9 fix: pin ed25519-zebra to 4.0.3 in contracts workspace
cosmwasm-crypto 2.2.2 targets ed25519-zebra 4.0.3 (default-features = false) and
uses its `batch` module, but the lockfile had resolved to 4.2.0, which gates
`batch` behind the `alloc` feature. That left cosmwasm-crypto - and therefore the
whole contracts workspace - failing to compile. Pin back to 4.0.3 so it builds.
2026-06-08 10:45:22 +01:00
Bogdan-Ștefan Neacşu a9bf1954bc Keep peer in wg table when updating psk (#6856)
* Keep peer in wg table when updating psk

* Fix unit test

* update handle_update_peer_psk_request

---------

Co-authored-by: Jędrzej Stuczyński <jedrzej.stuczynski@gmail.com>
2026-06-08 09:19:42 +01:00
Jędrzej Stuczyński b6202b5a6b chore: minor nym-node improvements (#6850)
* set TCP_NODELAY for mixnet connections

* bugfix: correctly compute count deferral threshold

* bugfix: make sure to flush pending packets waiting for bloomfilter check

* implement batch sending into mixnet connection

* adjust default nym-node connection settings
2026-06-08 08:37:41 +01:00
Jędrzej Stuczyński e8410b2302 feat: disable Nagle's algorithm for LP between nym-nodes (#6857) 2026-06-05 16:37:12 +01:00
mfahampshire cff370a943 Update scripts + CI for dryrun + version checking (#6858)
* Update scripts + CI for dryrun + version checking

* Update publish.sh w trap

* Coderabbit
2026-06-05 14:00:04 +00:00
mfahampshire 08dc353e82 New TS SDK packages (#6839)
* First sweep packages + some minor tweaking

* Second sweep

* Regenerate lockfile + package.json mods

* Regenerate lockfile again

* Fix CI

* Fix CI again

* All building properly

* unblock

* Tweak examples

* Comments + readme + fix rotten unit test
2026-06-05 10:36:36 +00:00
import this 495f020730 [DOCs/operators]: Menu v2 (#6853) 2026-06-05 11:29:04 +02:00
benedettadavico 8de781f750 fix ci builds 2026-06-04 12:15:21 +01:00
benedettadavico 225024d428 update cargo lock 2026-06-04 12:15:21 +01:00
Nym bot 367716612f crates release: bump version to 1.21.1 2026-06-04 12:15:20 +01:00
benedettadavico e82b116230 bump versions 2026-06-04 12:15:20 +01:00
import this c7780d2d34 Feat: Node orchestration UX improvements (#6848)
* improve nginx playbook

* improve configure-vm script

* improve initialise-vm script

* expand config naming options

* provide args docs

* syntax fix

* address rabbitai comments

* cleanup ansible

* document ansible changes

* fix review comments

* update scraed data

* fix max comment review
2026-06-04 12:59:50 +02:00
mfahampshire 4ad00dba3d Smolmix RTT storm fix (#6846)
* RT fix for TLS

* Condense comment

* Coderabbit nits

* Clippy fix?

* Clippy 2:electric boogaloo

* Logging aggregate for very noisy tcp stuff
2026-06-03 17:31:15 +00:00