Skip to content

Add clawback for regulated assets, fee tracking, auto-completion test, and interpolation optimization - #853

Merged
Jaydbrown merged 3 commits into
conduit-protocol:mainfrom
Big-JoshCode:fix/stream-clawback-fees-auto-completion-interpolation
Oct 18, 2026
Merged

Jaydbrown merged 3 commits into
conduit-protocol:mainfrom
Big-JoshCode:fix/stream-clawback-fees-auto-completion-interpolation

Conversation

@Big-JoshCode

Copy link
Copy Markdown
Contributor

Summary

Implements four stream contract enhancements: regulated asset clawback support, cumulative fee tracking, exact-duration auto-completion test, and linear interpolation optimization.

Changes

#781 Clawback Support for Regulated Assets

  • Added FLAG_REGULATED_ASSET flag to identify streams using compliant regulated assets
  • Added is_regulated_asset() and mark_regulated_asset() methods to StreamInfo
  • Modified initialize() to accept is_regulated_asset parameter
  • Clawback function now properly handles regulated asset streams

#782 Cumulative Fee Tracking

  • Added cumulative_fees: i128 field to StreamInfo struct
  • Tracks total fees paid throughout stream lifetime
  • Initialized to 0 for new streams
  • Enables post-settlement fee accounting

#783 Auto-Completion Test for Exact Duration

  • Added test_stream_auto_completion_at_exact_duration() test case
  • Verifies stream completes correctly when elapsed time equals total duration exactly
  • Confirms withdrawable amount equals total streamed amount at boundary

#784 Linear Interpolation Optimization

  • Optimized calculate_streamed_amount() to early-return for zero cases
  • Prevents unnecessary multiplication operations when rate or elapsed is zero
  • Reduces gas costs for boundary conditions

Closes #781
Closes #782
Closes #783
Closes #784

SarahDoma and others added 3 commits October 18, 2026 12:23
## Summary

Implements four critical contract validation improvements:

### conduit-protocol#785 - StreamCancelled event includes remaining deposit
- Added remaining_deposit parameter to cancelled() and force_cancelled() events
- Provides complete financial breakdown in event logs
- Updated lib.rs calls to pass refund_to_sender as remaining_deposit

### conduit-protocol#786 - SEP-0041 transfer return value validation
- Validates return values from all tk.transfer() calls in token-vault
- Maps transfer errors to appropriate contract errors
- Catches transfer failures before state mutations
- Affects 5 transfer points in lib.rs

### conduit-protocol#787 - Duplicate stream ID validation in batch cancel
- Added DuplicateStreamId error code (33) to factory errors
- Validates non-duplicate stream addresses before batch processing
- Uses Map-backed set for O(log n) duplicate detection
- Rejects batch early if duplicates detected

### conduit-protocol#788 - WASM hash registry verification
- Validates WASM hash exists in Soroban ledger before deployment
- Uses env.ledger().get_wasm() to verify registry
- Prevents deployment failures from stale/invalid hashes
- Early validation in deploy_stream()

Closes conduit-protocol#785
Closes conduit-protocol#786
Closes conduit-protocol#787
Closes conduit-protocol#788
…d Stellar asset staleness threshold

- Fix conduit-protocol#773: Add ProposalExecutionQueued event emitted with execution time when proposals are queued
- Fix conduit-protocol#774: Store proposal execution bytecode hash in DataKey for verification purposes
- Fix conduit-protocol#775: Add three comprehensive unit tests for quorum calculation edge cases with fractional tokens
- Fix conduit-protocol#776: Add StellarAssetStalenessThresholdSecs DataKey for independent Stellar asset price feed staleness configuration

These changes improve proposal governance tracking, execution verification, quorum validation with edge cases, and oracle price feed staleness management for Stellar assets.
…uto-completion test, and optimized interpolation

- Add FLAG_REGULATED_ASSET flag and is_regulated_asset() getter (Issue conduit-protocol#781)
  Streams can now be marked as using compliant regulated assets with tracking

- Add cumulative_fees field to StreamInfo (Issue conduit-protocol#782)
  Tracks total fees paid across the lifetime of a stream

- Add test for stream auto-completion at exact duration (Issue conduit-protocol#783)
  Verifies withdrawable amount equals total when elapsed time equals duration

- Optimize linear interpolation calculation (Issue conduit-protocol#784)
  Early return for zero rate or zero elapsed to prevent unnecessary operations

- Update initialize() to accept is_regulated_asset parameter
- Initialize cumulative_fees to 0 for new streams

Closes conduit-protocol#781
Closes conduit-protocol#782
Closes conduit-protocol#783
Closes conduit-protocol#784
@drips-wave

drips-wave Bot commented Oct 18, 2026

Copy link
Copy Markdown

@Big-JoshCode Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@Jaydbrown
Jaydbrown merged commit 51cd717 into conduit-protocol:main Oct 18, 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

4 participants