Inspiration
Proof of Reserve already tells the truth. It does not decide what that truth is allowed to do. We kept seeing a green badge beside a live price and a reserve that was old, flat, or missing a child claim underneath it. The idea was simple: an attestation is a claim on a graph, and Jac should walk that claim until it is allowed to mint.
How we built it
Ingest writes Chainlink-shaped facts onto a Jac graph: price, reserve, source (live or a labeled fixture). Freshness, Cover, and Auditor only stamp. They never mint. Freshness age-gates both clocks. Cover checks coverage against this protocol’s liability, flags a stuck reserve, and requires the child claim. Auditor is only allowed to attack, and it prints its checklist even on a pass. Act is the only minter of a small ERC-20. Three greens or no print. When it prints, it mints (\min(\text{requested}, \text{justified})) and writes an on-chain record of amount, ratio, timestamps, and stamps. Counsel speaks last, and only after those stamps exist. Same execute button, three moods: mint, stale refuse, missing-PoR refuse.
Challenges we ran into
The first draft wanted a live custom graph UI and a cross-chain send. That is how a one-day build disappears. We cut the spectacle and kept the law: colors, auditor text, a printer that can refuse. The conceptual trap was wrapping PoR and calling it new. A reprint of (R) is not a product. The other trap was a boolean mint of “100 tokens because green.” That feels like a traffic light. Sizing the mint to coverage, and leaving a record a judge can open later, is what made it feel like a permit.
Accomplishments that we're proud of
We made unknown a first-class halt instead of an empty field. We made the auditor visible when nothing is wrong, so fail-closed looks like a system trying to fail. We locked the printer behind three greens and still let Cover decide how much may print. We kept the fixture labeled as a fixture. We shipped a demo that is one button and three colors, not a tour of architecture.
What we learned
Freshness and coverage are not the same verdict. A useful reserve is not (R) alone - it is whether (R) still covers liability (L) in the same window as price (P). A parent cannot inherit a clean badge from a silent child. If Counsel can talk before stamps exist, the agent narrates hope. Jac is at its best when each walker has one authority and the graph holds the verdict.
What's next for Proof of Reserve - Jac Enforced
Add another hop on the backing chain without turning the walker into unbounded recursion. Point the same printer at a live PoR feed when the window allows it. Keep the refuse path louder than the happy path. The product stays the same: PoR attests, Jac enforces, and the printer only runs for what the walk can justify.## Inspiration
Built With
- chainlink
- erc-20
- hardhat
- jaseci
- next.js
- object-spatial-programming
- openzeppelin
- postgresql
- proof-of-reserves
- python
- react
- solidity
- tailwind
- typescript
Log in or sign up for Devpost to join the conversation.