Summary
Reference receipts use a single global key. An unrelated user can submit a predictable reference first on another pool/operation, causing the legitimate request to fail as a duplicate.
Repository evidence
contracts/chainmove-pool/src/lib.rs defines DataKey::Reference(String) without operation, pool, or actor scope.
- Replay validation rejects the same key when stored receipt fields differ.
Scope
- Derive the idempotency key from domain/version, operation kind, pool ID, actor/participant, and external reference.
- Provide a compatibility rule for existing receipts.
- Hash or bound composite keys to control storage cost.
Acceptance criteria
Tests
Non-goals
- Extending receipt retention; that is tracked separately.
Summary
Reference receipts use a single global key. An unrelated user can submit a predictable reference first on another pool/operation, causing the legitimate request to fail as a duplicate.
Repository evidence
contracts/chainmove-pool/src/lib.rsdefinesDataKey::Reference(String)without operation, pool, or actor scope.Scope
Acceptance criteria
Tests
Non-goals