Skip to content

Add RISEx venue integration - #2

Open
ignimbrite wants to merge 1 commit into
Check-the-Chain:mainfrom
ignimbrite:add-risex-venue
Open

Add RISEx venue integration#2
ignimbrite wants to merge 1 commit into
Check-the-Chain:mainfrom
ignimbrite:add-risex-venue

Conversation

@ignimbrite

@ignimbrite ignimbrite commented Aug 16, 2026

Copy link
Copy Markdown

Summary

  • Adds RISEx (RISE Chain mainnet perps exchange) as a new benchmarkable venue, following the existing multi-venue pattern: Go spec.Definition + Python EIP-712 signing subprocess for order placement, WS confirmation, and cleanup.
  • Live-verified against RISEx mainnet end-to-end: 10/10 place → WS confirm → cancel → WS cancel-confirm cycles, repeated after fixes.
  • Found and fixed two real signing bugs during live testing, not just style issues:
    • header_flags/action-hash mismatch that made every real order fail signature verification (SignerNotAuthorized).
    • A nonce-anchor caching race between the place and cleanup processes — confirmed necessary via an A/B test (reproduced the original failure with the fix reverted and the account's other live trader stopped, then confirmed the fix resolves it).
  • Batch scenario is refused outright (SystemExit, HTTPBatch: false) rather than faked: RISEx's strict sequential nonce_anchor makes the usual concurrent-fanout workaround (used for Nado/Extended) unreliable — confirmed live (1 of 5 concurrent orders succeeded in one test). Matches edgeX's precedent for venues without a real batch endpoint.
  • Adds a cleanup safety net (before_run/after_run sweep) that RISEx was missing — caught real leftover orders live during testing.
  • Test coverage matches every other venue's convention: build_payload_test.py / cancel_payload_test.py, including a signature-recovery regression test verified to actually catch the header_flags bug by reintroducing it.
  • Frontend: real RISEx logo/brand color, chart color.
  • Account setup: RISEX_PRIVATE_KEY / RISEX_ACCOUNT_ADDRESS (address-only alternative for hardware wallets or signers already registered via RISEx's website) / RISEX_SIGNER_PRIVATE_KEY.

Test plan

  • gofmt, go build ./..., go vet ./..., go test ./... all clean
  • Python build_payload_test.py / cancel_payload_test.py (22 tests) pass, including offline signature-recovery checks
  • Live mainnet: single-order place/WS-confirm/cancel/WS-cancel-confirm, 10/10 repeated across multiple runs
  • Live mainnet: batch scenario correctly refuses before touching the account
  • Live mainnet: nonce-anchor fix confirmed necessary via A/B test (bug reproduces without it, resolves with it)
  • Reviewed for reuse/simplification/efficiency cleanups

Adds RISEx (mainnet perps exchange) as a new benchmarkable venue, following
the existing multi-venue pattern: Go spec.Definition + Python EIP-712 signing
subprocess for order placement, WS confirmation, and cleanup. Live-verified
against mainnet (10/10 place+WS-confirm+cancel+WS-cancel-confirm cycles),
including catching and fixing two real signing bugs (header_flags/action-hash
mismatch causing every order to fail signature verification, and a nonce-anchor
caching race between the place and cleanup processes) that were only
discoverable through live testing. Also documents a confirmed RISEx-side
limitation with concurrent batch order submission.

Includes frontend additions (real RISEx logo/brand color, chart color) and
account-setup wiring (RISEX_PRIVATE_KEY / RISEX_ACCOUNT_ADDRESS /
RISEX_SIGNER_PRIVATE_KEY, supporting setups where the main account's raw
private key isn't available or exported, e.g. hardware wallets).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant