feat: add the bare-Canton vesting dApp (vesting-lite)#84
Draft
fernandomg wants to merge 6 commits into
Draft
Conversation
Module Vesting + Schedule: linear/milestone schedules, a 1.0 CC floor, under a daml umbrella.
Happy path, residual/fully-claimed/sub-floor cancel, and schedule math; 9 scripts via daml:test.
Direct-access UI (Vite 6, React 19, react-router, zustand, Tailwind v4, Vitest) over a Wallet seam. Parties via wallet.listParties, mutations via wallet.execute; ACS reads direct; exact claim.
Reads the backend user's CanActAs from the ledger; optional WALLET_SERVICE_ACCOUNTS_PREFIX filter.
dev-stack up folds in the guarded vesting bootstrap; node for DAR id; vesting-lite workspace.
Real stack (Vite, React 19, Tailwind v4, zustand, Vitest, Biome; direct-access) + vesting-lite.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
No related issue. Introduces the vesting dApp on bare Canton ("lite"): a
vesting-liteDaml package, a React 19 frontend that talks to a real ledger through the wallet-service
ledgerApiproxy via explicit disclosure, and a one-command dev stack. Replaces thestampbook example.
This is the base of a stacked pair —
feat/vesting-amulettargets this branch and addsthe Splice/Amulet evolution on top, so its PR diff is exactly the lite→amulet delta.
Changes
vesting-lite(factory → proposal → contract;linear + milestone schedules;
minGrantAmount; value-preserving cancel→residual)(direct-access party picker; explicit-disclosure create; live ACS reads)
listAccountsreturns the backend user's ledgerCanActAsrightsAcceptance criteria
dev-stack upboots + bootstraps the demo in one commandTest plan
Automated tests
cd dapp/daml/vesting-lite && dpm buildthencd ../daml-test && dpm testcd dapp/frontend && npm test && npm run typecheck && npm run build && npm run lintcd canton-barebones/wallet-service && npm test && npm run lintPKG=<pkg> node scripts/vesting-lite-driver.mjsManual verification
Live browser flow on the bare-Canton stack: party pool from the wallet → create-via-disclosure
→ accept → live vesting → claim until claimable is 0.
Breaking changes
None.
Checklist
Screenshots
None.