Skip to content

Add ARC-compatible status code to TransactionStatus responses#27

Merged
mrz1836 merged 14 commits into
mainfrom
fix/arc-status-code
Mar 17, 2026
Merged

Add ARC-compatible status code to TransactionStatus responses#27
mrz1836 merged 14 commits into
mainfrom
fix/arc-status-code

Conversation

@shruggr
Copy link
Copy Markdown
Collaborator

@shruggr shruggr commented Mar 5, 2026

Summary

  • Adds StatusCode int field (json:"status,omitempty") to TransactionStatus model
  • Sets StatusCode = 200 in route handlers (handlePostTx, handlePostTxs, handleGetTx) and webhook delivery
  • Required for ARC API compatibility — the go-sdk ArcResponse expects a status int in the JSON body, which clients like 1sat-indexer use to distinguish success (200) from not-found (404) when querying transaction status
  • Fixes double-close panic on shutdown when P2P client is provided externally. Services.Close() now respects ownsP2PClient and only closes the P2P client if Arcade created it. This prevents a close of closed channel panic when the caller (e.g. 1sat-stack) also closes the shared client during its own shutdown sequence.

Test plan

  • go build ./... passes
  • go test ./... passes
  • Verify GET /tx/{txid} response includes "status": 200
  • Verify POST /tx response includes "status": 200
  • Verify webhook callbacks include "status": 200 in payload
  • Verify clean shutdown when P2P client is passed in externally (no panic)

shruggr and others added 6 commits February 18, 2026 00:02
The go-sdk's ArcResponse expects a `status` int field in the JSON body
representing the HTTP status code. Clients like 1sat-indexer rely on this
to distinguish 200 vs 404 responses when querying transaction status.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Ensures the JSON body includes `"status": 404` so ARC clients can
detect not-found via the response body, not just the HTTP status code.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update ErrorFields references from errors.ErrorFields to arcerrors.ErrorFields
in swagger annotations, and regenerate docs to include new status field.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When a P2P client is passed into Arcade's Initialize(), Arcade should
not close it during Services.Close() — the caller owns it. The
ownsP2PClient guard was already used during initialization error
cleanup but was missing from the Close() method, causing a
double-close panic when the caller also closed the shared client.
@shruggr shruggr requested a review from mrz1836 as a code owner March 5, 2026 22:40
@shruggr
Copy link
Copy Markdown
Collaborator Author

shruggr commented Mar 5, 2026

Sorry. Claude decided to delete the branch which closed the old PR. I could have shot him. I'm getting the lint issues resolved and will have another push shortly

Remove unnecessary nolint directives and fix uint64 underflow in
fee calculation debug logging.
@github-actions github-actions Bot added bug-P3 Lowest rated bug, affects nearly none or low-impact feature Any new significant addition labels Mar 6, 2026
shruggr added 2 commits March 6, 2026 18:40
Only include the txid leaf at level 0; at higher levels only include the
sibling since the self node is computable from the children below.
Copy link
Copy Markdown
Collaborator

@mrz1836 mrz1836 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CI has some errors and linter issues to resolve

shruggr and others added 4 commits March 8, 2026 16:51
…tTransactions

Known transactions now return their existing status immediately without
re-running BEEF/SPV validation. Prevents false 502s when the same
transaction is submitted through both wallet service and paymail paths.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove unused //nolint:gosec directives in arcade.go
- Add //nolint:gosec for SSRF false positives in client/client.go
- Add //nolint:gosec for AuthToken config field in config/config.go
- Fix log injection warning in examples/sse_client.go
- Add trailing newline to docs/swagger.json
- Add toolchain go1.26.1 to fix 5 Go stdlib CVEs
- Add CVE-2025-15558 to nancy/govulncheck exclusion lists

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@shruggr
Copy link
Copy Markdown
Collaborator Author

shruggr commented Mar 12, 2026

This is waiting on a go-sdk release before I can fix the go replace issue. Just waiting on Satchmo for that

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@mrz1836 mrz1836 merged commit ff36bc7 into main Mar 17, 2026
43 of 45 checks passed
@github-actions github-actions Bot deleted the fix/arc-status-code branch March 17, 2026 12:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug-P3 Lowest rated bug, affects nearly none or low-impact feature Any new significant addition

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants