Grant progress
Single index of milestone-completion evidence, per grant. Every code claim links a commit-SHA permalink; every deployment claim links a source-verified contract or transaction a reviewer can confirm directly on the explorer.
ENS Public Goods Builder Grant
Milestone 1 — Reference deployment ✅
A self-governed, ENS-named ERC-4626 vault diamond deployed to Sepolia with verified source, which then executed a full governance lifecycle against itself.
This deployment predates the one-transaction LatticeFactory rule: it created and initialized the diamond
in two transactions. Every script/base/** recipe now deploys through the factory.
Tag: grant-m1 — created on main when this evidence is promoted from dev.
Milestone 2 — Worked integration example + composition guide ✅
A runnable governance-upgradeable Diamond example and a "Compose your own Diamond" guide, exercised in CI on Anvil and reproduced live on Sepolia, where the example vault upgraded itself through its own Governor + TimelockController.
| Evidence | Link |
|---|---|
| Composition guide | docs/guides/compose-your-own-diamond.md |
Runnable example (one make command, local Anvil or any EVM RPC) | examples/governance-upgradeable-diamond/ |
Canonical test: namespace check → atomic init → propose → vote → timelock → diamondCut, state preserved | test/unit/GovernedVaultUpgradeTest.t.sol |
| Green CI running the example end to end on Anvil | CI run 37650708789 on the tagged commit 4e95664; originally run 34620029310 on 25db4d7 (identical tree; see the note below) |
| Live Sepolia vault (all 20 contracts verified on Etherscan and Sourcify) | 0x942592e135FFfF39d993F43B735aF34605E829d5 |
| Governed upgrade executed on-chain | ProposalExecuted tx 0xbe354e…0c08 — grantVersion() returns 2 through the proxy; deposited assets and shares unchanged |
| Source of the live run (commit permalink) | script/base/defi/GrantExample.s.sol @ 0e1560b (the deployed contracts are verified on Sourcify against this tree) |
| Deploy broadcast log | broadcast/GrantExample.s.sol/11155111/run-latest.json |
| Every recipe deploys and initializes in one transaction | #182; make check-atomic-deploy runs in CI |
| Full governance flow on-chain (all status 1) | mint → approve → deposit → delegate → propose → castVote → queue → execute |
Tag: grant-m2, commit 4e95664, on main; the repository links above resolve at the tag.
Commit history note. dev and main were rewritten after the milestone was delivered, which re-created the
tag on a new commit with the same tree. Commits cited in earlier copies of this page still resolve on GitHub but
are no longer on a branch. Each has a tree-identical commit on main:
| Cited earlier | Now on main | Tree |
|---|---|---|
9ccdcaf (head of CI run 34620029310) | 25db4d7 | 9fb66c2 |
d5a89e6 (source of the live run) | 0e1560b | c5bcc9e |
94b7d93 (tag commit; CI run 34623283525) | 4e95664 | beba22a |
Demo scope and known issues. The live vault is a testnet demo:
- Governance can be taken over. The deployer holds every vote, but the demo asset's
mintis open to anyone, and governance delays are minutes (voting delay 60 s, voting period 600 s, timelock 300 s; quorum 4). Anyone could mint, delegate and outvote the deployer. - Issues found after delivery. They don't change the M2 flow:
Milestone 3 — Docs site + reusable storage-safety Action
Delivered in release v0.5.0. The site and the Action are built and tested in this repository, the docs deploy to GitHub Pages from main, and the Action is released and proven in an external repository.
| Evidence | Status |
|---|---|
Docs site source: the guides plus the API reference forge doc generates, built with Vocs under /lattice | docs/site/ · script/docs/build.sh (make doc) |
| Docs build and link check in CI on every relevant pull request | .github/workflows/docs.yml (pull requests build only; main builds and deploys to GitHub Pages) |
| Public docs URL | https://dadadave80.github.io/lattice/, first deployed by run 37938597222 from main at 2134a6e |
| Storage-safety Action: composite Action on the Bash+jq checker Lattice's own CI runs | .github/actions/storage-layout/ |
| Action regression cases (43) on a fixture consumer project, and a CI self-test calling the Action | script/test-storage-layout.sh · storage-action job in test.yml |
| Lattice CI checks every pull request append-only against its base through the same Action | storage-layout job in test.yml |
| Versioned Action release (tag and commit) | storage-layout-v1.0.0 → 828e0a8 |
| External demo repository calling the released Action | lattice-storage-guard-demo pins .github/actions/storage-layout@828e0a8… (workflow) |
| Demo runs: red on an incompatible change, green on its fix, green on a safe append | reorder red → fix green (#1) · safe append green (#2) |
Tag: grant-m3, commit cca133b (the v0.5.0 release), on main.
Circle Arc Grant (2026 Cohort 2 — application evidence)
Groundwork delivered before application: the CCTPBridgeAdapter (Circle CCTP v2, including
depositForBurnWithHook/relayMessageWithHook hooks) proven with live USDC on Arc testnet as the
source chain, in both a plain multi-destination transfer and a programmable-USDC hook delivery.
| Evidence | Link |
|---|---|
| Adapter source (commit permalink) | src/crosschain/CCTPBridgeAdapter.sol · CCTPHookExecutor.sol · CCTPHookVault.sol |
| Arc source hub — transfer demo | 0xfc937CD3d175b890fF668f95fdED5CB4D9247d68 |
| USDC delivered — Ethereum Sepolia | mint tx 0xff2326…39aea |
| USDC delivered — Base Sepolia | mint tx 0xf72700…736d3 |
| Hook demo — Arc hub diamond | 0x6ca99B6179eAc891E3aCD4008b610fcE66F63E2d (Sourcify-verified) |
| Hook demo — Base destination diamond | 0x957259C5AEAa521c9DcFaEb6692C25ae53F349f1 |
| Auto-credit vault | 0xe8e10843Ab41B2c359D02eA091b6772C43b05b1f |
| Programmable-USDC delivery, one tx | burn 0xc9ba15…a77a4 → relay 0x7f82f3…b5d00 minted to the vault and emitted Credited(0x11Cf…eC00, 1000000, 26, hub) |
| Real-attestation replay (reproducible) | test/fork/CCTPHookDemoFork.t.sol replays the captured Iris fixture through the live Base diamond on a pinned fork — credits exactly 1 USDC, second relay reverts (nonce consumed) |
Receipt NFT (CCTPHookReceipt) | 0x6De791…71a65 |
| Receipt demo burn (Arc) | 0x7a923b…c6f07 |
| Receipt relay — direct USDC + NFT (Base) | 0xbdcd52…5a8a7 — grant-video run; mints 5 USDC and receipt #4 to 0xDAda…C751 |
| Receipt real-attestation replay | test/fork/CCTPHookReceiptDemoFork.t.sol replays the captured receipt fixture |
| Broadcast evidence | broadcast/multi/ (multichain setups) · broadcast/CCTPHookDemo.s.sol/84532/ (hook relay) · broadcast/CCTPUSDCDemo.s.sol/ (transfer relays) |
| One-command reproduce | make demo-cctp · make demo-cctp-hook KEYSTORE=<name> · make demo-cctp-receipt KEYSTORE=<name> — see the README demo section |
All demo contracts are Sourcify-verified (exact_match) on both chains. The hook, receipt and round-trip
demo scripts default to the hook demo's Arc hub and Base diamond above (CANON_* in
script/config/cctp-*.sh); keep this table and those defaults in step.
Team1 Builder Grants (Avalanche) — Mini Grant application evidence
Lattice's reference vault diamond is live and source-verified on Avalanche Fuji (chain 43113), with the same
evidence as the ENS milestones: a governed vault assembled through LatticeFactory in one transaction, then
a shareholder proposal that passes through the vault's own Governor and TimelockController and upgrades it.
The deployment is release v0.5.0
(cca133b on main), built with the repository's own
settings. Avalanche runs the Cancun EVM. Lattice compiles to identical creation and runtime code for Cancun
and for the repository's default target (all 1,204 bytecode objects, compared without the metadata hash), so
every facet sits at the address a v0.5.0 release gets on every chain (CreateX CREATE2, salt
lattice.<Name>.0.5.0). The 14 facets were the first v0.5.0 facets deployed anywhere; a later DeployRelease
on Fuji adopts them.
| Evidence | Link |
|---|---|
| Deploy script (commit permalink) | script/base/defi/GrantExample.s.sol · runner run.sh |
| Governed vault (diamond) | 0xd06F72Eabf158CDFAa550450cCb220b42A1068ef · Snowtrace · Sourcify |
| Vault asset (test token) | 0x3cad51414bBd94E19C47Ef47fE2D65f89e467Eea · Snowtrace · Sourcify |
| Upgrade probe (facet added by the proposal) | 0xD22736eCd4a7F1574f99feCff0fD59C96a2d1571 · Snowtrace · Sourcify |
| LatticeFactory (this run's own instance, not the canonical factory) | 0xdaC8b1CaBfab28F99D6B572E464a42b37FAC7D1A · Snowtrace · Sourcify |
| LatticeRegistry (this run's own instance, owned by the deployer, not the canonical registry) | 0x9c69eD8Bd87E85AF80d2546e2C4a8F064fc98F4C · Snowtrace · Sourcify |
| Vault init contract | 0xC360591B35BA82ad066b609CCFdCBab4D9f3f810 · Snowtrace · Sourcify |
| Vault creation through the factory, one transaction | 0x2e9bc8…0f52 |
Governed upgrade: ProposalExecuted, then grantVersion() returns 2 through the vault | 0x5deeea…0ed2 (block 59,249,355) |
| Governance steps | mint 0x1451f2…197c → approve 0xcfc5b0…59bf → deposit 0xa288ee…2c27 → delegate 0xcbe24b…f695 → propose 0xc78a91…6490 → vote 0x098789…9204 → queue 0x88d746…44e5 → execute (above) |
| Vault facets, each verified | AccessControl · TimelockController · ERC20 · ERC4626 · VaultCore · Votes · ERC20Votes · Governor · GovernedVault · EmergencyStop · GovernedDiamondCut · Receive · ERC165Facet · DiamondLoupeFacet |
| Broadcast log (20 transactions, 33.3M gas) | broadcast/GrantExample.s.sol/43113/run-latest.json |
| One-command reproduce | make example-ens-grant-m2 RPC=fuji KEYSTORE=<name> (about 20 minutes of real governance delays) — see the example README |
All 20 contracts in the broadcast are verified on Sourcify, Snowscan (Etherscan V2) and Snowtrace
(Routescan). On Sourcify, 18 are exact matches. ERC165Facet and DiamondLoupeFacet from diamond-lib are
full matches, because Sourcify had already verified the same bytecode from another source tree. Snowtrace
lists the vault as LatticeDiamond, an earlier verified contract with identical bytecode.