The sender can pause a vesting stream at any time to temporarily freeze vesting. Paused time is excluded from all future vesting calculations.
Pause
Open the stream
Go to Streams and select the active stream.
Click Pause
Click Pause Stream. Sign the transaction with the sender wallet.
What happens on-chain
The pause_start field in the NFT commitment is set to tx.locktime. Status changes to PAUSED. No tokens are moved.
Pause requires FLAG_CANCELABLE (0x01) to be set on the stream. Non-cancelable streams cannot be paused.
Resume
Click Resume
On the stream detail page, click Resume Stream. Sign with the sender wallet.
What happens on-chain
The cursor advances by the pause duration:newCursor = cursor + (tx.locktime - pause_start)
pause_start is reset to 0. Status returns to ACTIVE.
Effect on Vesting Math
After resume, all vesting calculations use the updated cursor instead of the original startTimestamp:
elapsed = tx.locktime - cursor # cursor has absorbed pause duration
vestedTotal = (totalAmount × elapsed) / duration
claimable = vestedTotal - totalReleased
The recipient receives the same total amount — only the duration shifts forward.
Example
| Event | Time | Cursor | Vested |
|---|
| Deploy | T=0 | T=0 | 0% |
| 6 months pass | T=6m | T=0 | 50% |
| Pause | T=6m | T=0 | 50% |
| 3 months paused | — | — | 50% (frozen) |
| Resume | T=9m | T=3m | 50% (as if T=6m) |
| 6 more months | T=15m | T=3m | 100% |
The total vesting duration is 12 months of active time, as originally configured.
API
POST /api/streams/:id/pause
POST /api/streams/:id/resume