Skip to content

Latest commit

 

History

History
732 lines (691 loc) · 136 KB

File metadata and controls

732 lines (691 loc) · 136 KB

1.0.1 (2026-05-27)

Bug Fixes

Features

  • #13: Implement Governance-Only Upgradability Pattern with 48-hour timelock (ae8afa0), closes #13
  • #22: Implement Event-Driven Frontend Indexing Support (3507c2f), closes #22
  • #246: add tie-handling tests for dispute voting (f505cf5), closes #246
  • #252: add payout mode immutability tests (877d53b), closes #252
  • #406: add status index to eliminate full reverse scan in get_markets_by_status (35c841d), closes #406
  • #519: Enhance accessibility compliance with improved ARIA labels and keyboard navigation (174c41a), closes #519
  • #520: Add frontend error boundary components (6deea3f), closes #520
  • #521: Implement frontend route-based code splitting (e4166bc), closes #521
  • #522: Add frontend environment variable validation (b6dc301), closes #522
  • #523: Implement frontend API response caching (4daf584), closes #523
  • #524: Add frontend internationalization support (266a5e3), closes #524
  • #525: Implement frontend dark mode support (e171d57), closes #525
  • #526: Add k6 load test for newsletter subscribe endpoint (b31196d), closes #526
  • #551: Add database indexes for newsletter subscriber queries (44b2830), closes #551
  • #552: Implement soft delete for newsletter subscribers (5ef9c8f), closes #552
  • #557: Add contract storage migration utilities (2a64813), closes #557
  • add administrative function to withdraw protocol fee revenue (a5befd7), closes #26
  • add API response compression middleware (c13cb81)
  • add automated recovery path for circuit breaker (d32435a), closes #12
  • add blockchain event replay (#110) and complete contract upgrade mechanism (#111) (775d0b2)
  • add cache stampede protection (Issue #047) (4fff7e7)
  • Add comprehensive multi-token support tests for Issue #9 (7b8e185)
  • Add comprehensive performance testing suite (1dd5353)
  • Add comprehensive test suite with 60+ tests and CI/CD pipeline (eb06d34), closes #80
  • add configurable database query timeout (#049) (522e0f0)
  • add E2E tests for betting flow (issue #092) (4149ed6)
  • add E2E tests for market creation flow with CI and flaky detection (8778933)
  • add idempotency key support for email sends (Issue #045) (54dde3f)
  • Add market cancellation with zero-fee refunds (Issue #10) (274d1f0)
  • add test to oracle failure fallback strategy (98b1d04)
  • api: add database connection health check (#495) (e012013)
  • api: add structured error codes and consistent error schema (#399) (27dcdb9)
  • api: add unit tests for chain reorg invalidation logic (40b90c0)
  • api: add URL versioning strategy and request deduplication (03f15b6)
  • bets: add property-based fuzz tests for bet placement inputs (8ef07fe)
  • blockchain integration service (92d3325)
  • centralize and version contract key schema (a4bc239)
  • ci: add contract gas benchmark to CI (issue #084) (11b29a3)
  • ci: add dependency vulnerability scanning (27f0b9e)
  • ci: add Docker image build and push to CI (4ac6b29)
  • ci: implement semantic versioning and changelog automation (0967121)
  • Confidence threshold rounding tests (4e13454)
  • contract: pagination for heavy queries (6ad5637)
  • contract: pagination for heavy queries (6b7d083)
  • contracts: add hard pagination bounds for query functions (#407) (df7305f)
  • distinguish live/stale/rpc_fallback in blockchain responses (8ab8468)
  • distinguish live/stale/rpc_fallback in blockchain responses (8fb1962)
  • Emit Events for Monitoring State Resets (af06066)
  • Event payload verification tests for oracle/dispute/resolution events (d0ae480)
  • frontend: add form validation with accessible user feedback (#073) (f376168)
  • implement AI text-to-speech for social video narrations (a2f025f)
  • Implement automated gas benchmarking and instruction optimization (Issue #7) (5ab7a28)
  • Implement automated hybrid consensus resolution state machine (15a54be), closes #4
  • implement cache TTL per key type (Issue #046) (8f2bbb1)
  • implement caching and performance optimization (47fea70)
  • implement claim_winnings function with payout calculation (fa5871e)
  • Implement Classic Stellar Assets (SAC) interoperability (Issue #21) (c3de65e)
  • implement comprehensive rate limiting and security measures (Issue #12) (c4f6c73)
  • Implement comprehensive WCAG 2.1 AA accessibility testing (310dde3), closes #90
  • implement conditional/chained prediction markets (Issue #25) (9699a8d)
  • implement cursor-based pagination for list endpoints (3176c4f)
  • implement database migration version tracking (281e2a2), closes #496
  • implement database schema, migrations, and seeds for issue #13 (0306829)
  • implement E2E user journey tests (Issue #92) (509a5c2)
  • implement email webhook authenticity and replay protection for sendgrid (d345150)
  • implement graceful shutdown for background workers (0ef02d4)
  • implement graceful shutdown for background workers (c6a3f1c)
  • implement Guardian-led emergency pause to mitigate Admin hijacking (b3a7aab), closes #158
  • implement infrastructure as code for deployment (6d6f088)
  • implement issues #513 #514 #515 #516 (f8cdec2)
  • implement linear reputation-based discounts for market creators (2fdb2b3), closes #153
  • implement multisig emergency pause with partial freeze for Guardian-controlled risk management (17b16c2)
  • implement newsletter subscription endpoint (issue #2) (4100f1b)
  • Implement Overflow-Safe Price Confidence Calculation (6fcb022)
  • Implement permissioned creation and tiered market levels (Issue #14) (f6ad2af)
  • Implement production-ready email service integration (Issue #14) (3077d91)
  • implement production-ready Pyth oracle price fetching (1e84441), closes #25 #41 #49
  • Implement Pyth Network oracle integration (Issue #2) (89037f4)
  • implement real market resolve write flow (#457) (ca9de29)
  • Implement referral system with affiliate incentives (f2bf178), closes #11
  • Implement snapshot-based voting weight to prevent flash voting attacks (e039a14), closes #3
  • Implement State Footprint & TTL Management (Issue #6) (3702293)
  • increase dispute window to 72 hours for better accessibility (3a49d12), closes #8
  • introduce targeted cache invalidation tags (#459) (e2924e3)
  • invariant tests for market stake conservation (ef097f5)
  • Multi-oracle keying tests (0374afa)
  • newsletter-security-issues (59e2a2d)
  • perf: add k6 load test for blockchain data endpoints (issue #082) (7963d6f)
  • perf: implement performance regression detection in CI (issue #083) (b8e71e3)
  • protect /metrics endpoint with auth and IP allowlist (044ef94), closes #456
  • Redis pooling, circuit breaker, retry, correlation IDs, OTel tracing (cab2ffb)
  • Refactor Logic Duplication in Claim Paths (8bf392f)
  • Replace panic! with ErrorCode returns and standardize event schema (b81510a)
  • return 401 JSON+headers from api_key_middleware, add integration tests (2484683)
  • sanitize email recipients before SendGrid call (Issue #044) (13ff88a)
  • test-pruning-behaviour (6d509e4)
  • test-reentrancy (d62a880)
  • tests for partial storage cleanup (77c3199)
  • tts: add API key and JWT authentication (86b6396)
  • tts: add health check endpoint (issue #085) (b30a5ed)
  • tts: rate limiting, caching, error handling, input sanitization (e824ec1), closes #531 #532 #533 #534 #531 #532 #533 #534
  • update_check_in_interval Function (5379e22)
  • wire and globalise admin security & validation middleware (#446 #447 #448 #449) (38ad7b3)

Performance Improvements

  • #406: rewrite get_markets_by_status to use status index (O(limit) vs O(total)) (501c3b7), closes #406
  • remove unused administrative getter functions (bb2d17f)
  • remove unused administrative getter functions (21874f2)

1.0.0 (2026-04-29)

Bug Fixes

  • #244: remove duplicate get_dispute_window and add dispute_timestamp regression tests (cd7335a), closes #244
  • #257: remove duplicate imports in oracles_test and add oracle quality gate to CI (a230a8c), closes #257
  • #290: replace .expect panic in generate_signature with fallible Result API (36ed34a), closes #290
  • #395: separate webhook routing security model from admin routes (4be4df1), closes #395
  • #396: store real recipient address in sent email events (78754d7), closes #396
  • #397: recover orphaned processing jobs on worker startup (349b7b9), closes #397
  • #398: remove Box::leak memory leak in analytics rate limiter (47cabae), closes #398
  • #403/#404: define missing governance types and timelock constants (99258a4), closes #403 #404 #406
  • #405: emit accurate oracle source metadata in oracle result events (562ad84), closes #405
  • #407: enforce MAX_PAGE_LIMIT=100 on all paginated contract queries (a257618), closes #407
  • #452: remove double newsletter rate limiting, make policy configurable (6169065), closes #452 #452
  • #453: Redis-backed newsletter IP rate limiter with atomic counters (932a14d), closes #453
  • #454: harden client IP extraction with trusted proxy CIDRs (04db648), closes #454
  • #463: add TTL and max-size eviction to watched_txs (428b7a7), closes #463
  • #485-#488: sync API_SPEC, add email DLQ, validate templates at startup (0749bc5), closes #485 -#488 #485 #486 #487 #488
  • add AssetClawedBack to ErrorCode enum for SAC compatibility (b27300c)
  • add missing GovernanceToken variant to ConfigKey enum (b00dfd2), closes #3
  • add winner count, boundary, and gas threshold tests (b0d2fbe)
  • allow permissionless pruning of expired market data (8f32ca6), closes #47
  • api: sync OpenAPI with runtime config and add auth security schemes (#400) (4505c01)
  • base governance majority on total voting power instead of count (369dd49), closes #4
  • blockchain: quarantine malformed events; add event parsing and tx monitor tests (b723f42)
  • consolidate newsletter rate limiting to single 5/hour policy (#377) (c6fcbf5)
  • contract query optimizations and docs fixes (#481-484) (2a0d193), closes #481-484
  • contract: prevent market deadlock for parent-child outcomes (38f0e10)
  • contracts: fix duplicate get_dispute_window and dead constant usage (#402) (4f1c617)
  • contracts: remove duplicate cancel_market_admin entrypoint (#401) (3243498)
  • decrement total_staked on refund to maintain accounting accuracy (94bcd0a)
  • deep-prune voting storage on market prune (issue #84) (c81462c)
  • efficient paginated user_bets endpoint using upstream offset/limit (closes #390) (3ee7bde)
  • enforce betting deadline before resolution deadline (95fb998), closes #6
  • enforce immutable payout mode throughout market lifecycle (4083803), closes #23
  • enforce proxy trust boundaries for x-forwarded-for (closes #379) (c8edd6d)
  • enforce reward claim finality before market pruning (95ed3d5), closes #125
  • Enforce SendGrid webhook signature validation (d49109a), closes #24
  • enforce strict separation between Admin and Guardian identities (673413c), closes #19 #19
  • ensure absolute isolation of storage keys and vote revision (61a40e6)
  • ensure all refund paths use SAC-safe transfer and respect circuit breakers (a6244b1), closes #93
  • ensure comprehensive storage cleanup for bettor participation records (cbc8c4b)
  • ensure consistent TTL management for all governance and protocol state (6227343)
  • ensure robust market ID generation for high-volume environments (6a0a00a)
  • expose get_timelock_duration endpoint and add query test (994c514)
  • expose lib target so security_tests can import predictiq_api::security (835f00d)
  • extend persistent storage TTL to safely cover pruning grace period (a234a5a), closes #144
  • implement comprehensive security and governance improvements (00934d7), closes #192 #181 #170 #191
  • implement configurable governance timelock duration (4ee3cb5), closes #13
  • implement configurable winner threshold for payout mode switching (fde6463)
  • implement creator deposit refunds for cancelled markets (42d16dd), closes #51
  • implement flexible oracle result indexing per market (f99207b), closes #117
  • implement granular balance tracking for locked fallback tokens (15cdbf3), closes #37
  • implement granular role-based access control for administrative tasks (fd56a03), closes #118
  • implement minimum bet threshold to prevent state-bloat attacks (3382469)
  • implement parimutuel payout logic in claim_winnings (c8f098b), closes #2
  • implement persistent bet counter for market outcomes (f342e61)
  • implement programmatic error handling for SAC transfers (1b82e74), closes #11
  • implement real parimutuel payout calculation in claim_winnings (3555caa), closes #91
  • implement rounding and remainder handling for parimutuel payouts (0689993)
  • implement tie-detection in resolution voting outcome calculation (7c8c0a0), closes #58
  • import missing types and resolve undefined ConfigKey variant (2e4fac8)
  • include actual total payout in ResolutionFinalized event (cbca6bf), closes #143
  • invoke host update_current_contract_wasm in execute_upgrade (4109cb5)
  • lock creator deposits until resolution finality (c7e47ff), closes #115
  • log cache warming errors and cover all critical endpoints (bf978d5), closes #493
  • maintain consistent i128 usage for vote weight summation (6540b02)
  • mount security headers middleware globally (#373) (81653b1)
  • move all circuit breaker state to instance storage for consistency (cc45af6), closes #38
  • move ErrorBody to module level, fix rustfmt line lengths (3d4badd)
  • oracles: tighten verify_oracle_health and add behavioral tests (4221fe0)
  • paginate event fetch and bound watched_txs with TTL/cap (730c652)
  • pass outcome=0 default in lib.rs withdraw_refund wrapper (8385910)
  • pre-initialize outcome stake map during market creation to optimize gas (eed66ee)
  • prevent gas-limit griefing in permissionless finalization (d956d8c)
  • prevent payout mode changes after resolution process has started (#182) (3eb18f3)
  • prevent redundant upgrade votes and implement hash cool-down (74c2b93)
  • protect metrics endpoint, implement resolve_market, SCAN-based cache deletion, narrow invalidation scope (e145d5a)
  • reflect node and contract health as explicit degraded states (09a3b5c)
  • Remove unused imports and variables (b5aa6ac)
  • reorder fee arithmetic to prevent precision loss in discounts (3441fcd)
  • replace single-connection SCAN loop with per-batch connection acquisition (#458) (2cfdec4)
  • replace unsafe winner count heuristic with precise outcome counters (e412995), closes #24
  • require guardian consensus for removal to prevent admin overreach (69e2a9f), closes #151
  • require market resolution before unlocking voting tokens (05852e9)
  • resolution: replace max_outcome=0 default with Option to prevent silent wrong-winner bug (3156780)
  • resolve all 50 smart contract issues across security, gas, governance, and storage (7a9db68)
  • resolve all tracked issues across contracts, backend, and docs (93117e2)
  • resolve compile errors from issues #477-#480 (81235ac), closes #478
  • resolve merge conflict, structured config keys, admin events, double-refund guard (5a39df3), closes #184 #185 #186
  • resolve pre-existing compile errors blocking test execution (2f10646)
  • restrict contract initialization to authorized deployer only (370114f), closes #28
  • restrict creation deposit release to the market creator (6f323cd)
  • reverse referral rewards and fees on market cancellation (a88d0c3)
  • rpc: mask RPC errors with structured log and metrics (b3f283b)
  • secure and configurable CORS (closes #380) (af46e8c)
  • security: add trust-boundary tests for spoofed forwarding headers (#281) (c6381f9)
  • security: strip non-ASCII control chars in sanitize::string; add Unicode fuzz and signing corpus tests (4266add)
  • security: strip non-ASCII control chars in sanitize::string; add Unicode fuzz and signing corpus tests (9f51228)
  • stop swallowing blockchain RPC errors into silent defaults (#460) (fc0ec9c)
  • structured API errors, webhook sig verification, OpenAPI sync (2430bfe)
  • sync: add cursor progression tests under empty event streams (af739cb)
  • synchronize errors.rs with missing SAC and Oracle error variants (b392a83), closes #113
  • use BytesN<32> for WASM hash in PendingUpgrade struct (6f43f62), closes #32
  • use overflow-safe math for cancellation threshold checks (ddd0237), closes #52
  • use Redis for shared, atomic newsletter rate limiting (closes #378) (44b92de)
  • verify OracleConfig struct schema is complete (28ec807), closes #124
  • verify self-referral prevention is implemented (34c5730), closes #129

Features

  • #13: Implement Governance-Only Upgradability Pattern with 48-hour timelock (ae8afa0), closes #13
  • #22: Implement Event-Driven Frontend Indexing Support (3507c2f), closes #22
  • #246: add tie-handling tests for dispute voting (f505cf5), closes #246
  • #252: add payout mode immutability tests (877d53b), closes #252
  • #406: add status index to eliminate full reverse scan in get_markets_by_status (35c841d), closes #406
  • #519: Enhance accessibility compliance with improved ARIA labels and keyboard navigation (174c41a), closes #519
  • #520: Add frontend error boundary components (6deea3f), closes #520
  • #521: Implement frontend route-based code splitting (e4166bc), closes #521
  • #522: Add frontend environment variable validation (b6dc301), closes #522
  • #523: Implement frontend API response caching (4daf584), closes #523
  • #524: Add frontend internationalization support (266a5e3), closes #524
  • #525: Implement frontend dark mode support (e171d57), closes #525
  • #526: Add k6 load test for newsletter subscribe endpoint (b31196d), closes #526
  • #551: Add database indexes for newsletter subscriber queries (44b2830), closes #551
  • #552: Implement soft delete for newsletter subscribers (5ef9c8f), closes #552
  • #557: Add contract storage migration utilities (2a64813), closes #557
  • add administrative function to withdraw protocol fee revenue (a5befd7), closes #26
  • add API response compression middleware (c13cb81)
  • add automated recovery path for circuit breaker (d32435a), closes #12
  • add blockchain event replay (#110) and complete contract upgrade mechanism (#111) (775d0b2)
  • add cache stampede protection (Issue #047) (4fff7e7)
  • Add comprehensive multi-token support tests for Issue #9 (7b8e185)
  • Add comprehensive performance testing suite (1dd5353)
  • Add comprehensive test suite with 60+ tests and CI/CD pipeline (eb06d34), closes #80
  • add configurable database query timeout (#049) (522e0f0)
  • add E2E tests for betting flow (issue #092) (4149ed6)
  • add E2E tests for market creation flow with CI and flaky detection (8778933)
  • add idempotency key support for email sends (Issue #045) (54dde3f)
  • Add market cancellation with zero-fee refunds (Issue #10) (274d1f0)
  • add test to oracle failure fallback strategy (98b1d04)
  • api: add database connection health check (#495) (e012013)
  • api: add structured error codes and consistent error schema (#399) (27dcdb9)
  • api: add unit tests for chain reorg invalidation logic (40b90c0)
  • api: add URL versioning strategy and request deduplication (03f15b6)
  • bets: add property-based fuzz tests for bet placement inputs (8ef07fe)
  • blockchain integration service (92d3325)
  • centralize and version contract key schema (a4bc239)
  • ci: add contract gas benchmark to CI (issue #084) (11b29a3)
  • ci: add dependency vulnerability scanning (27f0b9e)
  • ci: add Docker image build and push to CI (4ac6b29)
  • ci: implement semantic versioning and changelog automation (0967121)
  • Confidence threshold rounding tests (4e13454)
  • contract: pagination for heavy queries (6ad5637)
  • contract: pagination for heavy queries (6b7d083)
  • contracts: add hard pagination bounds for query functions (#407) (df7305f)
  • distinguish live/stale/rpc_fallback in blockchain responses (8ab8468)
  • distinguish live/stale/rpc_fallback in blockchain responses (8fb1962)
  • Emit Events for Monitoring State Resets (af06066)
  • Event payload verification tests for oracle/dispute/resolution events (d0ae480)
  • frontend: add form validation with accessible user feedback (#073) (f376168)
  • implement AI text-to-speech for social video narrations (a2f025f)
  • Implement automated gas benchmarking and instruction optimization (Issue #7) (5ab7a28)
  • Implement automated hybrid consensus resolution state machine (15a54be), closes #4
  • implement cache TTL per key type (Issue #046) (8f2bbb1)
  • implement caching and performance optimization (47fea70)
  • implement claim_winnings function with payout calculation (fa5871e)
  • Implement Classic Stellar Assets (SAC) interoperability (Issue #21) (c3de65e)
  • implement comprehensive rate limiting and security measures (Issue #12) (c4f6c73)
  • Implement comprehensive WCAG 2.1 AA accessibility testing (310dde3), closes #90
  • implement conditional/chained prediction markets (Issue #25) (9699a8d)
  • implement cursor-based pagination for list endpoints (3176c4f)
  • implement database migration version tracking (281e2a2), closes #496
  • implement database schema, migrations, and seeds for issue #13 (0306829)
  • implement E2E user journey tests (Issue #92) (509a5c2)
  • implement email webhook authenticity and replay protection for sendgrid (d345150)
  • implement graceful shutdown for background workers (0ef02d4)
  • implement graceful shutdown for background workers (c6a3f1c)
  • implement Guardian-led emergency pause to mitigate Admin hijacking (b3a7aab), closes #158
  • implement infrastructure as code for deployment (6d6f088)
  • implement issues #513 #514 #515 #516 (f8cdec2)
  • implement linear reputation-based discounts for market creators (2fdb2b3), closes #153
  • implement multisig emergency pause with partial freeze for Guardian-controlled risk management (17b16c2)
  • implement newsletter subscription endpoint (issue #2) (4100f1b)
  • Implement Overflow-Safe Price Confidence Calculation (6fcb022)
  • Implement permissioned creation and tiered market levels (Issue #14) (f6ad2af)
  • Implement production-ready email service integration (Issue #14) (3077d91)
  • implement production-ready Pyth oracle price fetching (1e84441), closes #25 #41 #49
  • Implement Pyth Network oracle integration (Issue #2) (89037f4)
  • implement real market resolve write flow (#457) (ca9de29)
  • Implement referral system with affiliate incentives (f2bf178), closes #11
  • Implement snapshot-based voting weight to prevent flash voting attacks (e039a14), closes #3
  • Implement State Footprint & TTL Management (Issue #6) (3702293)
  • increase dispute window to 72 hours for better accessibility (3a49d12), closes #8
  • introduce targeted cache invalidation tags (#459) (e2924e3)
  • invariant tests for market stake conservation (ef097f5)
  • Multi-oracle keying tests (0374afa)
  • newsletter-security-issues (59e2a2d)
  • perf: add k6 load test for blockchain data endpoints (issue #082) (7963d6f)
  • perf: implement performance regression detection in CI (issue #083) (b8e71e3)
  • protect /metrics endpoint with auth and IP allowlist (044ef94), closes #456
  • Redis pooling, circuit breaker, retry, correlation IDs, OTel tracing (cab2ffb)
  • Refactor Logic Duplication in Claim Paths (8bf392f)
  • Replace panic! with ErrorCode returns and standardize event schema (b81510a)
  • return 401 JSON+headers from api_key_middleware, add integration tests (2484683)
  • sanitize email recipients before SendGrid call (Issue #044) (13ff88a)
  • test-pruning-behaviour (6d509e4)
  • test-reentrancy (d62a880)
  • tests for partial storage cleanup (77c3199)
  • tts: add API key and JWT authentication (86b6396)
  • tts: add health check endpoint (issue #085) (b30a5ed)
  • tts: rate limiting, caching, error handling, input sanitization (e824ec1), closes #531 #532 #533 #534 #531 #532 #533 #534
  • update_check_in_interval Function (5379e22)
  • wire and globalise admin security & validation middleware (#446 #447 #448 #449) (38ad7b3)

Performance Improvements

  • #406: rewrite get_markets_by_status to use status index (O(limit) vs O(total)) (501c3b7), closes #406
  • remove unused administrative getter functions (bb2d17f)
  • remove unused administrative getter functions (21874f2)

1.0.0 (2026-04-25)

Bug Fixes

  • #244: remove duplicate get_dispute_window and add dispute_timestamp regression tests (cd7335a), closes #244
  • #257: remove duplicate imports in oracles_test and add oracle quality gate to CI (a230a8c), closes #257
  • #290: replace .expect panic in generate_signature with fallible Result API (36ed34a), closes #290
  • #395: separate webhook routing security model from admin routes (4be4df1), closes #395
  • #396: store real recipient address in sent email events (78754d7), closes #396
  • #397: recover orphaned processing jobs on worker startup (349b7b9), closes #397
  • #398: remove Box::leak memory leak in analytics rate limiter (47cabae), closes #398
  • #403/#404: define missing governance types and timelock constants (99258a4), closes #403 #404 #406
  • #405: emit accurate oracle source metadata in oracle result events (562ad84), closes #405
  • #407: enforce MAX_PAGE_LIMIT=100 on all paginated contract queries (a257618), closes #407
  • add AssetClawedBack to ErrorCode enum for SAC compatibility (b27300c)
  • add missing GovernanceToken variant to ConfigKey enum (b00dfd2), closes #3
  • add winner count, boundary, and gas threshold tests (b0d2fbe)
  • allow permissionless pruning of expired market data (8f32ca6), closes #47
  • api: sync OpenAPI with runtime config and add auth security schemes (#400) (4505c01)
  • base governance majority on total voting power instead of count (369dd49), closes #4
  • blockchain: quarantine malformed events; add event parsing and tx monitor tests (b723f42)
  • consolidate newsletter rate limiting to single 5/hour policy (#377) (c6fcbf5)
  • contract: prevent market deadlock for parent-child outcomes (38f0e10)
  • contracts: fix duplicate get_dispute_window and dead constant usage (#402) (4f1c617)
  • contracts: remove duplicate cancel_market_admin entrypoint (#401) (3243498)
  • decrement total_staked on refund to maintain accounting accuracy (94bcd0a)
  • deep-prune voting storage on market prune (issue #84) (c81462c)
  • efficient paginated user_bets endpoint using upstream offset/limit (closes #390) (3ee7bde)
  • enforce betting deadline before resolution deadline (95fb998), closes #6
  • enforce immutable payout mode throughout market lifecycle (4083803), closes #23
  • enforce proxy trust boundaries for x-forwarded-for (closes #379) (c8edd6d)
  • enforce reward claim finality before market pruning (95ed3d5), closes #125
  • enforce strict separation between Admin and Guardian identities (673413c), closes #19 #19
  • ensure absolute isolation of storage keys and vote revision (61a40e6)
  • ensure all refund paths use SAC-safe transfer and respect circuit breakers (a6244b1), closes #93
  • ensure comprehensive storage cleanup for bettor participation records (cbc8c4b)
  • ensure consistent TTL management for all governance and protocol state (6227343)
  • ensure robust market ID generation for high-volume environments (6a0a00a)
  • expose get_timelock_duration endpoint and add query test (994c514)
  • expose lib target so security_tests can import predictiq_api::security (835f00d)
  • extend persistent storage TTL to safely cover pruning grace period (a234a5a), closes #144
  • implement comprehensive security and governance improvements (00934d7), closes #192 #181 #170 #191
  • implement configurable governance timelock duration (4ee3cb5), closes #13
  • implement configurable winner threshold for payout mode switching (fde6463)
  • implement creator deposit refunds for cancelled markets (42d16dd), closes #51
  • implement flexible oracle result indexing per market (f99207b), closes #117
  • implement granular balance tracking for locked fallback tokens (15cdbf3), closes #37
  • implement granular role-based access control for administrative tasks (fd56a03), closes #118
  • implement minimum bet threshold to prevent state-bloat attacks (3382469)
  • implement parimutuel payout logic in claim_winnings (c8f098b), closes #2
  • implement persistent bet counter for market outcomes (f342e61)
  • implement programmatic error handling for SAC transfers (1b82e74), closes #11
  • implement real parimutuel payout calculation in claim_winnings (3555caa), closes #91
  • implement rounding and remainder handling for parimutuel payouts (0689993)
  • implement tie-detection in resolution voting outcome calculation (7c8c0a0), closes #58
  • import missing types and resolve undefined ConfigKey variant (2e4fac8)
  • include actual total payout in ResolutionFinalized event (cbca6bf), closes #143
  • invoke host update_current_contract_wasm in execute_upgrade (4109cb5)
  • lock creator deposits until resolution finality (c7e47ff), closes #115
  • maintain consistent i128 usage for vote weight summation (6540b02)
  • mount security headers middleware globally (#373) (81653b1)
  • move all circuit breaker state to instance storage for consistency (cc45af6), closes #38
  • move ErrorBody to module level, fix rustfmt line lengths (3d4badd)
  • oracles: tighten verify_oracle_health and add behavioral tests (4221fe0)
  • paginate event fetch and bound watched_txs with TTL/cap (730c652)
  • pass outcome=0 default in lib.rs withdraw_refund wrapper (8385910)
  • pre-initialize outcome stake map during market creation to optimize gas (eed66ee)
  • prevent gas-limit griefing in permissionless finalization (d956d8c)
  • prevent payout mode changes after resolution process has started (#182) (3eb18f3)
  • prevent redundant upgrade votes and implement hash cool-down (74c2b93)
  • protect metrics endpoint, implement resolve_market, SCAN-based cache deletion, narrow invalidation scope (e145d5a)
  • reflect node and contract health as explicit degraded states (09a3b5c)
  • Remove unused imports and variables (b5aa6ac)
  • reorder fee arithmetic to prevent precision loss in discounts (3441fcd)
  • replace unsafe winner count heuristic with precise outcome counters (e412995), closes #24
  • require guardian consensus for removal to prevent admin overreach (69e2a9f), closes #151
  • require market resolution before unlocking voting tokens (05852e9)
  • resolution: replace max_outcome=0 default with Option to prevent silent wrong-winner bug (3156780)
  • resolve all 50 smart contract issues across security, gas, governance, and storage (7a9db68)
  • resolve all tracked issues across contracts, backend, and docs (93117e2)
  • resolve merge conflict, structured config keys, admin events, double-refund guard (5a39df3), closes #184 #185 #186
  • resolve pre-existing compile errors blocking test execution (2f10646)
  • restrict contract initialization to authorized deployer only (370114f), closes #28
  • restrict creation deposit release to the market creator (6f323cd)
  • reverse referral rewards and fees on market cancellation (a88d0c3)
  • rpc: mask RPC errors with structured log and metrics (b3f283b)
  • secure and configurable CORS (closes #380) (af46e8c)
  • security: add trust-boundary tests for spoofed forwarding headers (#281) (c6381f9)
  • security: strip non-ASCII control chars in sanitize::string; add Unicode fuzz and signing corpus tests (4266add)
  • security: strip non-ASCII control chars in sanitize::string; add Unicode fuzz and signing corpus tests (9f51228)
  • sync: add cursor progression tests under empty event streams (af739cb)
  • synchronize errors.rs with missing SAC and Oracle error variants (b392a83), closes #113
  • use BytesN<32> for WASM hash in PendingUpgrade struct (6f43f62), closes #32
  • use overflow-safe math for cancellation threshold checks (ddd0237), closes #52
  • use Redis for shared, atomic newsletter rate limiting (closes #378) (44b92de)
  • verify OracleConfig struct schema is complete (28ec807), closes #124
  • verify self-referral prevention is implemented (34c5730), closes #129

Features

  • #13: Implement Governance-Only Upgradability Pattern with 48-hour timelock (ae8afa0), closes #13
  • #22: Implement Event-Driven Frontend Indexing Support (3507c2f), closes #22
  • #246: add tie-handling tests for dispute voting (f505cf5), closes #246
  • #252: add payout mode immutability tests (877d53b), closes #252
  • #406: add status index to eliminate full reverse scan in get_markets_by_status (35c841d), closes #406
  • #519: Enhance accessibility compliance with improved ARIA labels and keyboard navigation (174c41a), closes #519
  • #520: Add frontend error boundary components (6deea3f), closes #520
  • #521: Implement frontend route-based code splitting (e4166bc), closes #521
  • #522: Add frontend environment variable validation (b6dc301), closes #522
  • #523: Implement frontend API response caching (4daf584), closes #523
  • #524: Add frontend internationalization support (266a5e3), closes #524
  • #525: Implement frontend dark mode support (e171d57), closes #525
  • #526: Add k6 load test for newsletter subscribe endpoint (b31196d), closes #526
  • #551: Add database indexes for newsletter subscriber queries (44b2830), closes #551
  • #552: Implement soft delete for newsletter subscribers (5ef9c8f), closes #552
  • #557: Add contract storage migration utilities (2a64813), closes #557
  • add administrative function to withdraw protocol fee revenue (a5befd7), closes #26
  • add API response compression middleware (c13cb81)
  • add automated recovery path for circuit breaker (d32435a), closes #12
  • add blockchain event replay (#110) and complete contract upgrade mechanism (#111) (775d0b2)
  • Add comprehensive multi-token support tests for Issue #9 (7b8e185)
  • Add comprehensive performance testing suite (1dd5353)
  • Add comprehensive test suite with 60+ tests and CI/CD pipeline (eb06d34), closes #80
  • add E2E tests for betting flow (issue #092) (4149ed6)
  • add E2E tests for market creation flow with CI and flaky detection (8778933)
  • Add market cancellation with zero-fee refunds (Issue #10) (274d1f0)
  • add test to oracle failure fallback strategy (98b1d04)
  • api: add structured error codes and consistent error schema (#399) (27dcdb9)
  • api: add unit tests for chain reorg invalidation logic (40b90c0)
  • api: add URL versioning strategy and request deduplication (03f15b6)
  • bets: add property-based fuzz tests for bet placement inputs (8ef07fe)
  • blockchain integration service (92d3325)
  • centralize and version contract key schema (a4bc239)
  • ci: add contract gas benchmark to CI (issue #084) (11b29a3)
  • ci: add dependency vulnerability scanning (27f0b9e)
  • ci: add Docker image build and push to CI (4ac6b29)
  • ci: implement semantic versioning and changelog automation (0967121)
  • Confidence threshold rounding tests (4e13454)
  • contract: pagination for heavy queries (6ad5637)
  • contract: pagination for heavy queries (6b7d083)
  • contracts: add hard pagination bounds for query functions (#407) (df7305f)
  • distinguish live/stale/rpc_fallback in blockchain responses (8ab8468)
  • distinguish live/stale/rpc_fallback in blockchain responses (8fb1962)
  • Emit Events for Monitoring State Resets (af06066)
  • Event payload verification tests for oracle/dispute/resolution events (d0ae480)
  • implement AI text-to-speech for social video narrations (a2f025f)
  • Implement automated gas benchmarking and instruction optimization (Issue #7) (5ab7a28)
  • Implement automated hybrid consensus resolution state machine (15a54be), closes #4
  • implement caching and performance optimization (47fea70)
  • implement claim_winnings function with payout calculation (fa5871e)
  • Implement Classic Stellar Assets (SAC) interoperability (Issue #21) (c3de65e)
  • implement comprehensive rate limiting and security measures (Issue #12) (c4f6c73)
  • Implement comprehensive WCAG 2.1 AA accessibility testing (310dde3), closes #90
  • implement conditional/chained prediction markets (Issue #25) (9699a8d)
  • implement cursor-based pagination for list endpoints (3176c4f)
  • implement database schema, migrations, and seeds for issue #13 (0306829)
  • implement E2E user journey tests (Issue #92) (509a5c2)
  • implement email webhook authenticity and replay protection for sendgrid (d345150)
  • implement graceful shutdown for background workers (c6a3f1c)
  • implement Guardian-led emergency pause to mitigate Admin hijacking (b3a7aab), closes #158
  • implement infrastructure as code for deployment (6d6f088)
  • implement linear reputation-based discounts for market creators (2fdb2b3), closes #153
  • implement multisig emergency pause with partial freeze for Guardian-controlled risk management (17b16c2)
  • implement newsletter subscription endpoint (issue #2) (4100f1b)
  • Implement Overflow-Safe Price Confidence Calculation (6fcb022)
  • Implement permissioned creation and tiered market levels (Issue #14) (f6ad2af)
  • Implement production-ready email service integration (Issue #14) (3077d91)
  • implement production-ready Pyth oracle price fetching (1e84441), closes #25 #41 #49
  • Implement Pyth Network oracle integration (Issue #2) (89037f4)
  • Implement referral system with affiliate incentives (f2bf178), closes #11
  • Implement snapshot-based voting weight to prevent flash voting attacks (e039a14), closes #3
  • Implement State Footprint & TTL Management (Issue #6) (3702293)
  • increase dispute window to 72 hours for better accessibility (3a49d12), closes #8
  • invariant tests for market stake conservation (ef097f5)
  • Multi-oracle keying tests (0374afa)
  • perf: add k6 load test for blockchain data endpoints (issue #082) (7963d6f)
  • perf: implement performance regression detection in CI (issue #083) (b8e71e3)
  • Refactor Logic Duplication in Claim Paths (8bf392f)
  • Replace panic! with ErrorCode returns and standardize event schema (b81510a)
  • return 401 JSON+headers from api_key_middleware, add integration tests (2484683)
  • test-pruning-behaviour (6d509e4)
  • test-reentrancy (d62a880)
  • tests for partial storage cleanup (77c3199)
  • tts: add API key and JWT authentication (86b6396)
  • tts: add health check endpoint (issue #085) (b30a5ed)
  • tts: rate limiting, caching, error handling, input sanitization (e824ec1), closes #531 #532 #533 #534 #531 #532 #533 #534
  • update_check_in_interval Function (5379e22)

Performance Improvements

  • #406: rewrite get_markets_by_status to use status index (O(limit) vs O(total)) (501c3b7), closes #406
  • remove unused administrative getter functions (bb2d17f)
  • remove unused administrative getter functions (21874f2)

1.0.0 (2026-04-25)

Bug Fixes

  • #244: remove duplicate get_dispute_window and add dispute_timestamp regression tests (cd7335a), closes #244
  • #257: remove duplicate imports in oracles_test and add oracle quality gate to CI (a230a8c), closes #257
  • #290: replace .expect panic in generate_signature with fallible Result API (36ed34a), closes #290
  • #395: separate webhook routing security model from admin routes (4be4df1), closes #395
  • #396: store real recipient address in sent email events (78754d7), closes #396
  • #397: recover orphaned processing jobs on worker startup (349b7b9), closes #397
  • #398: remove Box::leak memory leak in analytics rate limiter (47cabae), closes #398
  • #403/#404: define missing governance types and timelock constants (99258a4), closes #403 #404 #406
  • #405: emit accurate oracle source metadata in oracle result events (562ad84), closes #405
  • #407: enforce MAX_PAGE_LIMIT=100 on all paginated contract queries (a257618), closes #407
  • add AssetClawedBack to ErrorCode enum for SAC compatibility (b27300c)
  • add missing GovernanceToken variant to ConfigKey enum (b00dfd2), closes #3
  • add winner count, boundary, and gas threshold tests (b0d2fbe)
  • allow permissionless pruning of expired market data (8f32ca6), closes #47
  • api: sync OpenAPI with runtime config and add auth security schemes (#400) (4505c01)
  • base governance majority on total voting power instead of count (369dd49), closes #4
  • blockchain: quarantine malformed events; add event parsing and tx monitor tests (b723f42)
  • consolidate newsletter rate limiting to single 5/hour policy (#377) (c6fcbf5)
  • contract: prevent market deadlock for parent-child outcomes (38f0e10)
  • contracts: fix duplicate get_dispute_window and dead constant usage (#402) (4f1c617)
  • contracts: remove duplicate cancel_market_admin entrypoint (#401) (3243498)
  • decrement total_staked on refund to maintain accounting accuracy (94bcd0a)
  • deep-prune voting storage on market prune (issue #84) (c81462c)
  • efficient paginated user_bets endpoint using upstream offset/limit (closes #390) (3ee7bde)
  • enforce betting deadline before resolution deadline (95fb998), closes #6
  • enforce immutable payout mode throughout market lifecycle (4083803), closes #23
  • enforce proxy trust boundaries for x-forwarded-for (closes #379) (c8edd6d)
  • enforce reward claim finality before market pruning (95ed3d5), closes #125
  • enforce strict separation between Admin and Guardian identities (673413c), closes #19 #19
  • ensure absolute isolation of storage keys and vote revision (61a40e6)
  • ensure all refund paths use SAC-safe transfer and respect circuit breakers (a6244b1), closes #93
  • ensure comprehensive storage cleanup for bettor participation records (cbc8c4b)
  • ensure consistent TTL management for all governance and protocol state (6227343)
  • ensure robust market ID generation for high-volume environments (6a0a00a)
  • expose get_timelock_duration endpoint and add query test (994c514)
  • expose lib target so security_tests can import predictiq_api::security (835f00d)
  • extend persistent storage TTL to safely cover pruning grace period (a234a5a), closes #144
  • implement comprehensive security and governance improvements (00934d7), closes #192 #181 #170 #191
  • implement configurable governance timelock duration (4ee3cb5), closes #13
  • implement configurable winner threshold for payout mode switching (fde6463)
  • implement creator deposit refunds for cancelled markets (42d16dd), closes #51
  • implement flexible oracle result indexing per market (f99207b), closes #117
  • implement granular balance tracking for locked fallback tokens (15cdbf3), closes #37
  • implement granular role-based access control for administrative tasks (fd56a03), closes #118
  • implement minimum bet threshold to prevent state-bloat attacks (3382469)
  • implement parimutuel payout logic in claim_winnings (c8f098b), closes #2
  • implement persistent bet counter for market outcomes (f342e61)
  • implement programmatic error handling for SAC transfers (1b82e74), closes #11
  • implement real parimutuel payout calculation in claim_winnings (3555caa), closes #91
  • implement rounding and remainder handling for parimutuel payouts (0689993)
  • implement tie-detection in resolution voting outcome calculation (7c8c0a0), closes #58
  • import missing types and resolve undefined ConfigKey variant (2e4fac8)
  • include actual total payout in ResolutionFinalized event (cbca6bf), closes #143
  • invoke host update_current_contract_wasm in execute_upgrade (4109cb5)
  • lock creator deposits until resolution finality (c7e47ff), closes #115
  • maintain consistent i128 usage for vote weight summation (6540b02)
  • mount security headers middleware globally (#373) (81653b1)
  • move all circuit breaker state to instance storage for consistency (cc45af6), closes #38
  • move ErrorBody to module level, fix rustfmt line lengths (3d4badd)
  • oracles: tighten verify_oracle_health and add behavioral tests (4221fe0)
  • paginate event fetch and bound watched_txs with TTL/cap (730c652)
  • pass outcome=0 default in lib.rs withdraw_refund wrapper (8385910)
  • pre-initialize outcome stake map during market creation to optimize gas (eed66ee)
  • prevent gas-limit griefing in permissionless finalization (d956d8c)
  • prevent payout mode changes after resolution process has started (#182) (3eb18f3)
  • prevent redundant upgrade votes and implement hash cool-down (74c2b93)
  • protect metrics endpoint, implement resolve_market, SCAN-based cache deletion, narrow invalidation scope (e145d5a)
  • reflect node and contract health as explicit degraded states (09a3b5c)
  • Remove unused imports and variables (b5aa6ac)
  • reorder fee arithmetic to prevent precision loss in discounts (3441fcd)
  • replace unsafe winner count heuristic with precise outcome counters (e412995), closes #24
  • require guardian consensus for removal to prevent admin overreach (69e2a9f), closes #151
  • require market resolution before unlocking voting tokens (05852e9)
  • resolution: replace max_outcome=0 default with Option to prevent silent wrong-winner bug (3156780)
  • resolve all 50 smart contract issues across security, gas, governance, and storage (7a9db68)
  • resolve all tracked issues across contracts, backend, and docs (93117e2)
  • resolve merge conflict, structured config keys, admin events, double-refund guard (5a39df3), closes #184 #185 #186
  • resolve pre-existing compile errors blocking test execution (2f10646)
  • restrict contract initialization to authorized deployer only (370114f), closes #28
  • restrict creation deposit release to the market creator (6f323cd)
  • reverse referral rewards and fees on market cancellation (a88d0c3)
  • rpc: mask RPC errors with structured log and metrics (b3f283b)
  • secure and configurable CORS (closes #380) (af46e8c)
  • security: add trust-boundary tests for spoofed forwarding headers (#281) (c6381f9)
  • security: strip non-ASCII control chars in sanitize::string; add Unicode fuzz and signing corpus tests (4266add)
  • security: strip non-ASCII control chars in sanitize::string; add Unicode fuzz and signing corpus tests (9f51228)
  • sync: add cursor progression tests under empty event streams (af739cb)
  • synchronize errors.rs with missing SAC and Oracle error variants (b392a83), closes #113
  • use BytesN<32> for WASM hash in PendingUpgrade struct (6f43f62), closes #32
  • use overflow-safe math for cancellation threshold checks (ddd0237), closes #52
  • use Redis for shared, atomic newsletter rate limiting (closes #378) (44b92de)
  • verify OracleConfig struct schema is complete (28ec807), closes #124
  • verify self-referral prevention is implemented (34c5730), closes #129

Features

  • #13: Implement Governance-Only Upgradability Pattern with 48-hour timelock (ae8afa0), closes #13
  • #22: Implement Event-Driven Frontend Indexing Support (3507c2f), closes #22
  • #246: add tie-handling tests for dispute voting (f505cf5), closes #246
  • #252: add payout mode immutability tests (877d53b), closes #252
  • #406: add status index to eliminate full reverse scan in get_markets_by_status (35c841d), closes #406
  • #551: Add database indexes for newsletter subscriber queries (44b2830), closes #551
  • #552: Implement soft delete for newsletter subscribers (5ef9c8f), closes #552
  • #557: Add contract storage migration utilities (2a64813), closes #557
  • add administrative function to withdraw protocol fee revenue (a5befd7), closes #26
  • add API response compression middleware (c13cb81)
  • add automated recovery path for circuit breaker (d32435a), closes #12
  • add blockchain event replay (#110) and complete contract upgrade mechanism (#111) (775d0b2)
  • Add comprehensive multi-token support tests for Issue #9 (7b8e185)
  • Add comprehensive performance testing suite (1dd5353)
  • Add comprehensive test suite with 60+ tests and CI/CD pipeline (eb06d34), closes #80
  • add E2E tests for betting flow (issue #092) (4149ed6)
  • Add market cancellation with zero-fee refunds (Issue #10) (274d1f0)
  • add test to oracle failure fallback strategy (98b1d04)
  • api: add structured error codes and consistent error schema (#399) (27dcdb9)
  • api: add unit tests for chain reorg invalidation logic (40b90c0)
  • api: add URL versioning strategy and request deduplication (03f15b6)
  • bets: add property-based fuzz tests for bet placement inputs (8ef07fe)
  • blockchain integration service (92d3325)
  • centralize and version contract key schema (a4bc239)
  • ci: add contract gas benchmark to CI (issue #084) (11b29a3)
  • ci: add dependency vulnerability scanning (27f0b9e)
  • ci: add Docker image build and push to CI (4ac6b29)
  • ci: implement semantic versioning and changelog automation (0967121)
  • Confidence threshold rounding tests (4e13454)
  • contract: pagination for heavy queries (6ad5637)
  • contract: pagination for heavy queries (6b7d083)
  • contracts: add hard pagination bounds for query functions (#407) (df7305f)
  • distinguish live/stale/rpc_fallback in blockchain responses (8ab8468)
  • distinguish live/stale/rpc_fallback in blockchain responses (8fb1962)
  • Emit Events for Monitoring State Resets (af06066)
  • Event payload verification tests for oracle/dispute/resolution events (d0ae480)
  • implement AI text-to-speech for social video narrations (a2f025f)
  • Implement automated gas benchmarking and instruction optimization (Issue #7) (5ab7a28)
  • Implement automated hybrid consensus resolution state machine (15a54be), closes #4
  • implement caching and performance optimization (47fea70)
  • implement claim_winnings function with payout calculation (fa5871e)
  • Implement Classic Stellar Assets (SAC) interoperability (Issue #21) (c3de65e)
  • implement comprehensive rate limiting and security measures (Issue #12) (c4f6c73)
  • Implement comprehensive WCAG 2.1 AA accessibility testing (310dde3), closes #90
  • implement conditional/chained prediction markets (Issue #25) (9699a8d)
  • implement cursor-based pagination for list endpoints (3176c4f)
  • implement database schema, migrations, and seeds for issue #13 (0306829)
  • implement E2E user journey tests (Issue #92) (509a5c2)
  • implement email webhook authenticity and replay protection for sendgrid (d345150)
  • implement graceful shutdown for background workers (c6a3f1c)
  • implement Guardian-led emergency pause to mitigate Admin hijacking (b3a7aab), closes #158
  • implement infrastructure as code for deployment (6d6f088)
  • implement linear reputation-based discounts for market creators (2fdb2b3), closes #153
  • implement multisig emergency pause with partial freeze for Guardian-controlled risk management (17b16c2)
  • implement newsletter subscription endpoint (issue #2) (4100f1b)
  • Implement Overflow-Safe Price Confidence Calculation (6fcb022)
  • Implement permissioned creation and tiered market levels (Issue #14) (f6ad2af)
  • Implement production-ready email service integration (Issue #14) (3077d91)
  • implement production-ready Pyth oracle price fetching (1e84441), closes #25 #41 #49
  • Implement Pyth Network oracle integration (Issue #2) (89037f4)
  • Implement referral system with affiliate incentives (f2bf178), closes #11
  • Implement snapshot-based voting weight to prevent flash voting attacks (e039a14), closes #3
  • Implement State Footprint & TTL Management (Issue #6) (3702293)
  • increase dispute window to 72 hours for better accessibility (3a49d12), closes #8
  • invariant tests for market stake conservation (ef097f5)
  • Multi-oracle keying tests (0374afa)
  • perf: add k6 load test for blockchain data endpoints (issue #082) (7963d6f)
  • perf: implement performance regression detection in CI (issue #083) (b8e71e3)
  • Refactor Logic Duplication in Claim Paths (8bf392f)
  • Replace panic! with ErrorCode returns and standardize event schema (b81510a)
  • return 401 JSON+headers from api_key_middleware, add integration tests (2484683)
  • test-pruning-behaviour (6d509e4)
  • test-reentrancy (d62a880)
  • tests for partial storage cleanup (77c3199)
  • tts: add API key and JWT authentication (86b6396)
  • tts: add health check endpoint (issue #085) (b30a5ed)
  • tts: rate limiting, caching, error handling, input sanitization (e824ec1), closes #531 #532 #533 #534 #531 #532 #533 #534
  • update_check_in_interval Function (5379e22)

Performance Improvements

  • #406: rewrite get_markets_by_status to use status index (O(limit) vs O(total)) (501c3b7), closes #406
  • remove unused administrative getter functions (bb2d17f)
  • remove unused administrative getter functions (21874f2)