How the Milestone Clock Works
When a grant is funded, the covenant stores:startTime— when the first milestone window beginsstepInterval— duration in seconds between milestonesstepAmount— on-chain token units per milestonetotalReleased— how much has already been released
Releasing a Milestone
Check what is due
The grant detail shows Releasable amount and Milestones due. These update in real time based on the current timestamp.
Release
Click Release Milestone. The app calls
POST /api/budget-plans/:id/release with your address. Multiple elapsed milestones are batched into one transaction.What Each Release Records
Each released milestone writes a row to thebudget_releases table with:
| Field | Value |
|---|---|
milestone_index | Index of the milestone released |
amount | Display amount released |
released_at | Unix timestamp |
tx_hash | On-chain transaction hash |
Early Release Not Possible
The covenant enforces time. If a milestone has not elapsed, therelease call returns 400: Nothing releasable yet. There is no override — the contract itself prevents early release.
