Skip to content

refactor: adopt zama-summer-games infra patterns (keep FHECounter + RainbowKit, SDK v3)#69

Merged
poppyseedDev merged 5 commits into
mainfrom
refactor/summer-games-infra
Apr 24, 2026
Merged

refactor: adopt zama-summer-games infra patterns (keep FHECounter + RainbowKit, SDK v3)#69
poppyseedDev merged 5 commits into
mainfrom
refactor/summer-games-infra

Conversation

@poppyseedDev

@poppyseedDev poppyseedDev commented Apr 24, 2026

Copy link
Copy Markdown
Contributor

Summary

Infra-only refactor toward the zama-summer-games layout. FHECounter contract and RainbowKit auth are preserved; only scripts, dev tooling, ABI-file structure, and SDK version change.

  • Scriptschain.sh now deploys FHECounter on top of the FHEVM cleartext host in one command; deploy-local.sh renamed to deploy-localhost.sh; generateTsAbis.ts rewritten to emit per-contract files with .local.ts sidecars (gitignored), walking every run-*.json so incremental deploys don't drop reused addresses.
  • Dev tooling — CI workflow (forge test + frontend typecheck/lint/build + prettier + PR-scoped gitleaks scan), husky + lint-staged (prettier + eslint on staged TS/JS, forge fmt on .sol), .gitleaks.toml / .gitleaksignore, root .prettierrc.json + .prettierignore, .env.example, postinstall regenerates ABIs on fresh clones.
  • SDK v3@zama-fhe/sdk + @zama-fhe/react-sdk bumped to ^3.0.0, viem to ^2.47.12. Provider moves signer / storage / sessionStorage to module scope and switches to IndexedDBStorage (persistent across reload); relayer still swaps per chain at runtime to keep RainbowKit multi-chain UX intact.
  • ABI files — drops monolithic deployedContracts.ts in favor of FHECounter.ts + FHECounter.local.ts; drops scaffold-eth useDeployedContractInfo + utils/helper/contract.ts; adds utils/contract.ts with a ContractDeployment type and a narrow deploymentFor() helper.

Notes

  • Kept the local packages/nextjs/services/web3/wagmiSigner.ts workaround: @zama-fhe/react-sdk@3.0.0 ships a WagmiSigner that imports watchConnection from wagmi/actions, which wagmi does not export. The 3.0.0-alpha.18 pre-release uses watchAccount instead; once a fixed stable lands, this file can be deleted and the provider can import { WagmiSigner } from "@zama-fhe/react-sdk/wagmi".
  • No games, no Privy, no daisyUI removal, no custom CSS.

Test plan

  • pnpm install completes; postinstall runs generateTsAbis without errors
  • pnpm contracts:test — forge tests pass
  • NEXT_PUBLIC_ALCHEMY_API_KEY=stub pnpm --filter ./packages/nextjs build succeeds
  • pnpm --filter ./packages/nextjs check-types passes
  • pnpm chain in one terminal, pnpm start in another — FHECounter demo works on 31337 (increment, decrement, decrypt)
  • After pnpm deploy:sepolia, the Sepolia entry in packages/nextjs/contracts/FHECounter.ts updates and the frontend works on Sepolia
  • Pre-commit hook runs lint-staged on staged files
  • CI runs cleanly on this PR

🤖 Generated with Claude Code

@poppyseedDev
poppyseedDev force-pushed the refactor/summer-games-infra branch 3 times, most recently from af5d5a4 to ddd2ca2 Compare April 24, 2026 14:26
@poppyseedDev
poppyseedDev requested a review from ghermet April 24, 2026 14:31
Scope is infra-only. FHECounter contract and RainbowKit auth stay as-is;
only scripts, dev tooling, ABI-file structure, and SDK version change.

Scripts
- chain.sh now deploys FHECounter on top of the FHEVM cleartext host in one
  command (single-terminal flow)
- deploy-local.sh -> deploy-localhost.sh, with env-var stubs so forge 1.x
  does not trip on unset SEPOLIA_RPC_URL / ETHERSCAN_API_KEY
- generateTsAbis.ts emits per-contract files with .local.ts sidecars
  (gitignored), walks every run-*.json so incremental deploys do not drop
  reused addresses, and cleans stale artifacts

Dev tooling
- CI workflow (forge test, frontend typecheck/lint/build, prettier check,
  PR-scoped gitleaks scan)
- husky + lint-staged (prettier + eslint on staged TS/JS, forge fmt on .sol)
- .gitleaks.toml / .gitleaksignore
- Root .prettierrc.json + .prettierignore, .env.example
- postinstall regenerates ABIs so fresh clones boot without a manual step

SDK v3 bump (+ upstream react-sdk patterns rolled in)
- @zama-fhe/sdk + @zama-fhe/react-sdk -> ^3.0.0, viem -> ^2.47.12
- DappWrapperWithProviders: module-scoped signer/storage; IndexedDBStorage
  (persistent across reload) replaces memoryStorage; relayer still swaps per
  chain at runtime to keep RainbowKit multi-chain UX intact
- Adopt query-based useUserDecrypt + useAllow/useIsAllowed gate
- Keep local WagmiSigner: @zama-fhe/react-sdk@3.0.0 ships one that imports
  watchConnection from wagmi/actions, which wagmi does not export

ABI files
- Drop monolithic deployedContracts.ts in favor of FHECounter.ts +
  FHECounter.local.ts
- Drop scaffold-eth useDeployedContractInfo + utils/helper/contract.ts
  (unused after the switch)
- New utils/contract.ts exposes ContractDeployment + deploymentFor() helper

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@poppyseedDev
poppyseedDev force-pushed the refactor/summer-games-infra branch from ddd2ca2 to 4c3e68b Compare April 24, 2026 14:33
Comment thread packages/nextjs/components/DappWrapperWithProviders.tsx Outdated
@poppyseedDev
poppyseedDev force-pushed the refactor/summer-games-infra branch from e8181d5 to 25e9dbe Compare April 24, 2026 14:58

@ghermet ghermet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

zama SDK wise good to go

@vercel

vercel Bot commented Apr 24, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
fhevm-react-template-nextjs Building Building Preview, Comment Apr 24, 2026 3:17pm
fhevm-react-template-nextjs-1777043833489-9s3J Canceled Canceled Apr 24, 2026 3:17pm

Request Review

@poppyseedDev
poppyseedDev merged commit 329e3f3 into main Apr 24, 2026
3 of 4 checks passed
@poppyseedDev
poppyseedDev deleted the refactor/summer-games-infra branch April 24, 2026 15:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants