Skip to content

Seller process crashes outright on a transient network reset, and a relaunched-but-still-resting unmatched offer has no resume path (5/5 reproduction) #70

Description

@kevinushana

Summary

Two causally-linked bugs that together leave a crashed seller with an unmatched resting offer permanently unrecoverable via a plain restart:

Bug A — seller process crashes outright on a transient connection reset, no retry logic

A plain connection reset while polling shellnet.ackinacki.org (e.g. Error: shellnet: POST https://shellnet.ackinacki.org/graphql: ... connection error: connection reset) kills the entire seller process — no retry, no backoff, no reconnect attempt. Reproduced independently on two different seller processes in the same session, discovered only via manual process-list checks, not any error the tool itself surfaced proactively. The on-chain TC/offer survives untouched; only the local process (and the gateway serving buyers) dies.

Bug B — relaunching against an already-resting, still-unmatched offer has no resume path, crashes deterministically

seller.rs's resume logic only skips re-posting when a TC is already matched (funded-but-never-opened → resumes cleanly as readiness=resumed_funded_tc). An unmatched but already-resting offer (i.e. exactly what Bug A leaves behind) has no equivalent check — every relaunch attempts to re-post the identical offer, which fails with:

Error: shellnet: seller postSellOffer outcome is not yet confirmed for TokenContract 0:<TC>; no placement, match, or returned placement value was observed

Reproduced 5 consecutive times in a row on the same TC — not a transient blip. Checked dexdo seller --help in full: no flag exists to skip the offer-post step on startup.

Environment

  • dexdo 0.0.12 (SHA256-verified) and 0.0.14 (fresh download, checksum-verified)
  • Network: Shellnet, post the 2026-07-17 restart
  • OS: Windows 11

Impact

Once Bug A fires, Bug B means the affected offer can never be cleanly resumed — the only workaround found was provisioning an entirely fresh TC (new --nonce), permanently orphaning the old one. That orphaned TC then also can't be cleaned up (see #69).

Ask

  1. Should the resume check in seller.rs also cover "already resting, unmatched" (not just "already matched"), skipping the offer-post and going straight to the match-watch loop?
  2. Any interest in basic retry/backoff around the shellnet RPC client for transient connection errors, rather than a hard process exit?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions