[Dev Fund] DAML choice dry-run simulator (the eth_call Canton lacks): working PoC, seeking a champion
grants-discuss1 messagesstarted 12-06-2026
- Hi all,
I'm Federico Abrignani, working with Salvatore Martorana. On guidance from the Foundation, I'm bringing an external Development Fund proposal here for feedback and to find a champion.
Problem and motivation
Today the only way to find out what a DAML choice does is to submit it and read the result off the ledger. Every team building on Canton hits this during development, in CI, and when building UIs that want to preview an action before a user confirms it. There is no pre-execution simulation: PR #171 (Fee Estimator) noted in its own text that "the Ledger API (v2) does not expose a public dry-run simulation endpoint comparable to Cosmos simulate." In Ethereum terms, this is the eth_call that Canton lacks. It is distinct from fee estimation (the Fee Estimator's space); the two are complementary.
What it is
A dry-run simulator: given a live contract and a choice, it returns exactly what would happen (contracts created, contracts archived, the choice return value, any authorization errors) without committing anything to the ledger. It drives the DAML LF engine directly, with the contract supplied as an explicit disclosure, so results match real ledger behaviour rather than approximating it. Deliverables: a daml simulate CLI and a TypeScript SDK.
Proof of concept (already working): https://github.com/Sernior/Canton-Simulate
Validated on Canton 3.x (the line the network runs): it fetches a real contract from a live participant over the Ledger API v2, runs the choice through the DAML LF engine, and returns the exact effects without committing, including a wrong-party case that is correctly rejected with a FailedAuthorization. The repo is clone-and-run (daml build, then bash build.sh).
Full proposal (draft PR): https://github.com/canton-foundation/canton-dev-fund/pull/457
Proposed milestones and budget
Total 480,000 CC over roughly 12 weeks, each milestone paid only on committee acceptance:
- M1 (100,000 CC): real-ledger PoC hardened, plus a published spec. A deliberately small go/no-go gate.
- M2 (150,000 CC): core engine, all DAML error types, transitive-dependency resolution, contract keys.
- M3 (100,000 CC): the daml simulate CLI with JSON output.
- M4 (80,000 CC): the TypeScript SDK.
- M5 (50,000 CC): hardening, docs, Canton Network testnet validation, security review.
All artifacts under Apache-2.0.
Where I would value feedback
- Whether the approach is sound and a good fit for Canton.
- Whether there is interest in a tool like this.
Ask
I'm looking for a Development Fund champion to help refine the proposal and take it through review. The full proposal is in the draft PR linked above, and I'm happy to give a short live demo.
Thanks,
Federico Abrignani
GitHub: github.com/Sernior
Salvatore Martorana
GitHub: github.com/SMartorana