Description
Problem
Sorokit transactions are fully linkable through their on-chain inputs, outputs, and timing. There is no abstraction for coordinating privacy-preserving transaction batches or separating individual transfers from a shared submission flow.
Solution
Introduce an optional transaction mixing layer that groups compatible transfers into coordinated batches before submission. The system should maintain participant state, shuffle eligible transactions, calculate the resulting execution cost, and expose the privacy trade-offs of joining a pool without changing the default transaction flow.
Acceptance Criteria
Note for Contributors
Keep the mixing layer isolated from normal transaction builders. Define clear lifecycle states for pooled transactions and avoid exposing participant relationships through public results. Include tests for partial failures and pool cleanup.
Description
Problem
Sorokit transactions are fully linkable through their on-chain inputs, outputs, and timing. There is no abstraction for coordinating privacy-preserving transaction batches or separating individual transfers from a shared submission flow.
Solution
Introduce an optional transaction mixing layer that groups compatible transfers into coordinated batches before submission. The system should maintain participant state, shuffle eligible transactions, calculate the resulting execution cost, and expose the privacy trade-offs of joining a pool without changing the default transaction flow.
Acceptance Criteria
src/transaction/index.tsandsrc/index.tsNote for Contributors
Keep the mixing layer isolated from normal transaction builders. Define clear lifecycle states for pooled transactions and avoid exposing participant relationships through public results. Include tests for partial failures and pool cleanup.