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
- 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?
- Any interest in basic retry/backoff around the shellnet RPC client for transient connection errors, rather than a hard process exit?
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 resetwhile pollingshellnet.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 asreadiness=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:Reproduced 5 consecutive times in a row on the same TC — not a transient blip. Checked
dexdo seller --helpin full: no flag exists to skip the offer-post step on startup.Environment
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
seller.rsalso cover "already resting, unmatched" (not just "already matched"), skipping the offer-post and going straight to the match-watch loop?