Skip to content

feat: admin force-resolve endpoint with idempotency-key support#761

Merged
greatest0fallt1me merged 2 commits into
Predictify-org:masterfrom
muffti123:feature/admin-force-resolve
Jun 29, 2026
Merged

feat: admin force-resolve endpoint with idempotency-key support#761
greatest0fallt1me merged 2 commits into
Predictify-org:masterfrom
muffti123:feature/admin-force-resolve

Conversation

@muffti123

Copy link
Copy Markdown
Contributor

Closes #648

Implements admin-only force_resolve_market with idempotency-key replay protection, 12 tests, audit trail, events, and non-panicking error handling.

API:

  • force_resolve_market(env, admin, market_id, winning_outcomes, reason, idempotency_key) -> Result<(), Error>
  • New errors: ForceResolveReplayed (517), ForceResolveReasonEmpty (518)
  • New event: ForceResolvedEvent (topic frc_rs)
  • New audit action: MarketForceResolved

Implements an admin-only force_resolve_market entrypoint on the
PredictifyHybrid contract that can resolve a market BEFORE its
end_time, with strict idempotency-key replay protection.

Closes Predictify-org#648

=== API Changes ===

New function:
  force_resolve_market(env, admin, market_id, winning_outcomes,
                       reason, idempotency_key) -> Result<(), Error>

Key differences from existing resolve_market_manual:
  - Bypasses end_time check (resolves at any time)
  - Returns Result<(), Error> instead of panicking
  - Requires non-empty 'reason' (stored in audit trail)
  - Requires a unique idempotency_key (string, e.g. UUID) per market
  - Supports multiple winning outcomes (Vec<String>)

=== New Error Codes ===
  ForceResolveReplayed       (517) - idempotency key already used
  ForceResolveReasonEmpty    (518) - empty reason string

=== New Events ===
  ForceResolvedEvent (topic 'frc_rs') emitted on success

=== New Audit Action ===
  AuditAction::MarketForceResolved

=== New Module ===
  force_resolve.rs - ForceResolveManager for idempotency storage

=== Files ===
  M src/err.rs       - error variants, classification, recovery
  M src/events.rs    - event struct + ForceResolvedEvent emitter
  M src/lib.rs       - force_resolve_market function + test mod
  M src/audit_trail.rs - MarketForceResolved audit action
  A src/force_resolve_tests.rs - comprehensive tests
@greatest0fallt1me greatest0fallt1me merged commit 46920eb into Predictify-org:master Jun 29, 2026
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.

2 participants