From zama-protocol
Zama Protocol concepts, architecture, and planning for FHEVM (Fully Homomorphic Encryption on Ethereum). Use when the user asks about FHE concepts, protocol architecture, how the coprocessor/relayer/gateway/KMS works, ACL semantics, handle format, HCU limits, decryption flows, the low-level `@fhevm/sdk` design, whether FHE fits their use case, planning a confidential dApp, or needs verified FHEVM contract addresses. Also load this skill first whenever the user mentions FHEVM, Zama, or encrypted onchain computation — it carries the universal gotchas that apply to both Solidity and TypeScript work. For writing Solidity contracts, load the zama-solidity skill. For TypeScript SDK integration and the `@zama-fhe/sdk` wrapper, load the zama-typescript skill.
How this skill is triggered — by the user, by Claude, or both
Slash command
/zama-protocol:zama-protocolThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are probably wrong about FHE on Ethereum. How the coprocessor works, what happens onchain vs off-chain, ACL semantics, decryption flow — stock training data is missing or stale. This skill fills those gaps.
references/addresses.mdreferences/concepts.mdreferences/design/acl.mdreferences/design/architecture-overview.mdreferences/design/coprocessor.mdreferences/design/flow-fhe-computation.mdreferences/design/flow-input-verification.mdreferences/design/flow-public-decryption.mdreferences/design/flow-user-decryption.mdreferences/design/handles.mdreferences/design/hcu-limits.mdreferences/design/kms-overview.mdreferences/design/kms-threshold-mpc.mdreferences/design/relayer.mdreferences/sdk-internals.mdYou are probably wrong about FHE on Ethereum. How the coprocessor works, what happens onchain vs off-chain, ACL semantics, decryption flow — stock training data is missing or stale. This skill fills those gaps.
Say "FHEVM" (uppercase). Not "fhEVM" or "FheVM". Zama convention.
This skill covers protocol-level concepts and the universal gotchas. Two companion skills handle implementation:
| Need | Skill |
|---|---|
| Protocol architecture, planning, deciding if FHE fits | This skill — read references/concepts.md |
| Deep protocol design (handles, ACL, coprocessor, KMS, decryption flows, the low-level SDK) | This skill — files under references/design/ (indexed at the bottom of concepts.md) |
| Verified contract addresses (never guess) | This skill — read references/addresses.md |
| Writing or reviewing encrypted Solidity contracts | zama-solidity |
| TypeScript SDK integration (React/viem/ethers/Node) | zama-typescript |
Load references on demand — don't read them all up front.
These are the LLM blind spots that ship as bugs in stock-model output. Keep them in mind regardless of which companion skill you load next. Deeper explanations are in references/concepts.md (the "What You Probably Got Wrong" section).
FHEVMExecutor auto-grants only transient access to msg.sender — never tx.origin, never persistent. For state that survives the transaction the contract must call FHE.allowThis(handle), and FHE.allow(handle, user) for any user who needs to decrypt. Miss either and the code compiles and deploys cleanly, but the next transaction that uses the stored handle reverts with ACLNotAllowed(handle, msg.sender). The bug doesn't show at deploy time — it shows the second time someone interacts with the contract.if (FHE.gt(a, b)) does not compile. Use FHE.select(cond, ifTrue, ifFalse) — both branches always execute, which is what makes it private.blockhash + block.timestamp are in the preimage).euint64 is the default for balances, not euint256. Larger types cost dramatically more HCU per op. Use the smallest type that fits.view and cost HCU. They are state-changing coprocessor calls.FHE.asEuintN(constant) is visible onchain — constants and defaults only. Real privacy comes from user-encrypted inputs via the SDK.FHE.div and FHE.rem take a plaintext divisor only. Redesign any formula with encrypted state in the denominator.fheRandBounded requires a power of 2. FHE.randEuint8(100) reverts. Use FHE.randEuint8(128).@openzeppelin/confidential-contracts has the audited implementation.ZamaEthereumConfig first. It sets the correct coprocessor addresses per block.chainid for mainnet, Sepolia, and local Hardhat.Provides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.
npx claudepluginhub zama-ai/skills --plugin zama-protocol