Skip to content
Lattice

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.

EvidenceLink
Deploy script (commit permalink)script/base/defi/DeployGovernedVaultENS.s.sol
Verified diamond (Sepolia)0x7a498c34A8Dc3B6502889C21218Da0F8696b7bb6 — all 14 facets verified (next row)
Verified facets (Etherscan)ERC165Facet · AccessControl · TimelockController · ERC20 · ERC4626 · VaultCore · Votes · ERC20Votes · Governor · GovernedVault · DiamondLoupeFacet · EmergencyStop · GovernedDiamondCut · ENSReverseClaimer · (init: GovernedVaultENSInit)
Underlying assetTestnetAsset (open faucet: mint(address,uint256))
Primary ENS name (forward + reverse)milestone1vault.lattice.studio.eth
Governance lifecycle executed on-chainProposalExecuted tx 0xfba2c5…df64 — proposal froze the loupe/cut selectors and reasserted the ENS name via the diamond's own Governor + TimelockController
Deploy broadcast logbroadcast/DeployGovernedVaultENS.s.sol/11155111/run-latest.json
Governance-demo broadcast logbroadcast/DeployGovernedVaultENS.s.sol/11155111/governanceDemo-latest.json
ENS registration broadcast logbroadcast/RegisterEnsName.s.sol/11155111/register-latest.json
One-command reproduceREADME live deployments section
Community filesLICENSE · SECURITY.md · CONTRIBUTING.md

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.

EvidenceLink
Composition guidedocs/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 preservedtest/unit/GovernedVaultUpgradeTest.t.sol
Green CI running the example end to end on AnvilCI 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-chainProposalExecuted 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 logbroadcast/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 earlierNow on mainTree
9ccdcaf (head of CI run 34620029310)25db4d79fb66c2
d5a89e6 (source of the live run)0e1560bc5bcc9e
94b7d93 (tag commit; CI run 34623283525)4e95664beba22a

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 mint is 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:
    • #214: ERC-4626 shares are priced on the idle balance. This is latent here, because the vault has no strategy manager.
    • #222: an ERC20Votes ERC-165 constant writes to slot keccak256(0). The write is present in this vault's storage.
    • #255: supportsInterface(0x01ffc9a7) returns false.

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.

EvidenceStatus
Docs site source: the guides plus the API reference forge doc generates, built with Vocs under /latticedocs/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 URLhttps://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 Actionscript/test-storage-layout.sh · storage-action job in test.yml
Lattice CI checks every pull request append-only against its base through the same Actionstorage-layout job in test.yml
Versioned Action release (tag and commit)storage-layout-v1.0.0 → 828e0a8
External demo repository calling the released Actionlattice-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 appendreorder 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.

EvidenceLink
Adapter source (commit permalink)src/crosschain/CCTPBridgeAdapter.sol · CCTPHookExecutor.sol · CCTPHookVault.sol
Arc source hub — transfer demo0xfc937CD3d175b890fF668f95fdED5CB4D9247d68
USDC delivered — Ethereum Sepoliamint tx 0xff2326…39aea
USDC delivered — Base Sepoliamint tx 0xf72700…736d3
Hook demo — Arc hub diamond0x6ca99B6179eAc891E3aCD4008b610fcE66F63E2d (Sourcify-verified)
Hook demo — Base destination diamond0x957259C5AEAa521c9DcFaEb6692C25ae53F349f1
Auto-credit vault0xe8e10843Ab41B2c359D02eA091b6772C43b05b1f
Programmable-USDC delivery, one txburn 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 replaytest/fork/CCTPHookReceiptDemoFork.t.sol replays the captured receipt fixture
Broadcast evidencebroadcast/multi/ (multichain setups) · broadcast/CCTPHookDemo.s.sol/84532/ (hook relay) · broadcast/CCTPUSDCDemo.s.sol/ (transfer relays)
One-command reproducemake 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.

EvidenceLink
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 contract0xC360591B35BA82ad066b609CCFdCBab4D9f3f810 · Snowtrace · Sourcify
Vault creation through the factory, one transaction0x2e9bc8…0f52
Governed upgrade: ProposalExecuted, then grantVersion() returns 2 through the vault0x5deeea…0ed2 (block 59,249,355)
Governance stepsmint 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 verifiedAccessControl · 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 reproducemake 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.