ไธไธชๆกๆถๆ ๅ ณ็ๅทฅๅ ทๅ ๏ผๅธฎๅฉๅผๅ่ ่ฝปๆพๆๅปบๆบๅฏdAppใ้็จๆจกๅๅ้้ ๅจๆถๆ๏ผๅฏๅจReactใNext.jsใVueๅNode.js็ฏๅขไธญๆ ็ผๅทฅไฝใ
่ง็้็จFHEVM SDK็ๅฎ้ ๆผ็คบ๏ผ ๆฅ็ๆๆๅฑ็คบ็ๅฎๆถๆผ็คบ๏ผๅญฆไน ๅฆไฝๅจๆจ็้กน็ฎไธญไฝฟ็จ้้ ๅจใ
๐ ๅจYouTubeไธ่ง็
ๆๆ็คบไพ้ฝๅจSepoliaๆต่ฏ็ฝไธ่ฟ่ก็ๅฎ็FHEVMไบคไบ๏ผ
React Showcase๏ผ https://react-showcase-1738.up.railway.app/
Next.js Showcase๏ผ https://nextjs-showcase-1661.up.railway.app/
Vue Showcase๏ผ https://vue-showcase-2780.up.railway.app/
Node.js Showcase๏ผ packages/node-showcase/
ๅ็บฆ่ฏฆๆ ๏ผ
- FHE่ฎกๆฐๅจๅ็บฆ๏ผ
0xead137D42d2E6A6a30166EaEf97deBA1C3D1954e - ่ฏๅๅ็บฆ๏ผ
0xcA2430F1B112EC25cF6b6631bb40039aCa0C86e0 - ๆ็ฅจๅ็บฆ๏ผ
0x7294A541222ce449faa2B8A7214C571b0fCAb52E - ็ฝ็ป๏ผ Sepoliaๆต่ฏ็ฝ (้พID: 11155111)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ้็จFHEVM SDK โ
โ packages/fhevm-sdk/ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ
โโโโโโโผโโโโโโ โโโโโโโโโผโโโโโโโโ โโโโโโโโโผโโโโโโโโ
โ ๆ ธๅฟ โ โ ้้
ๅจ โ โ ๅฑ็คบ โ
โsrc/core/ โ โsrc/adapters/ โ โ packages/ โ
โโโโโโโฌโโโโโโ โโโโโโโโโฌโโโโโโโโ โโโโโโโโโฌโโโโโโโโ
โ โ โ
โโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โ โfhevm.ts โ โcontracts.โ โindex.ts โ โ
โ โ โ โts โ โ(exports) โ โ
โ โ-initializeโ โ โ โโโโโโโโโโโโ โ
โ โ-createEncโ โ-FhevmCon โ โ
โ โ-decrypt โ โtract โ โ
โ โ-publicDecโ โโโโโโโโโโโโ โ
โ โ-test/ โ โ
โ โโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โโโโโโโผโโโโโโ โโโโโโโผโโโโโโ โโโโโโโผโโโโโโ
โ react.ts โ โ vue.ts โ โ node.ts โ
โ โ โ โ โ โ
โuseWallet โ โuseWalletVueโ โFhevmNode โ
โuseFhevm โ โuseFhevmVue โ โ(class) โ
โuseContractโ โuseContract โ โโโโโโโโโโโโโ
โuseEncrypt โ โuseEncrypt โ
โuseDecrypt โ โuseDecrypt โ
โuseFhevmOpsโ โuseFhevmOps โ
โโโโโโโโโโโโโ โโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โโโโโโโผโโโโโโโโโโ โโโโโโโผโโโโโโโโโโ โโโโโโโผโโโโโโโโโโ
โreact-showcase โ โnextjs-showcase โ โ vue-showcase โ
โ โ โ โ โ โ
โApp.tsx โ โpage.tsx โ โApp.vue โ
โFheCounter โ โcomponents/ โ โcomponents/ โ
โFheRatings โ โFHECounter โ โFHECounter โ
โFheVoting โ โFHERatings โ โFHERatings โ
โ โ โSimpleVoting โ โSimpleVoting โ
โ โ โtest/ โ โtest/ โ
โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ node-showcase โ
โ โ
โ index.ts server.ts explorer.ts โ
โ counter.ts voting.ts ratings.ts โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ react-showcase โ โ vue-showcase โ โ node-showcase โ
โ โ โ โ โ โ
โ App.tsx โ โ App.vue โ โ index.ts โ
โ FheCounter.tsx โ โ FheCounter.vue โ โ counter.ts โ
โ FheRatings.tsx โ โ FheRatings.vue โ โ voting.ts โ
โ FheVoting.tsx โ โ FheVoting.vue โ โ ratings.ts โ
โโโโโโโโโโฌโโโโโโโโโ โโโโโโโโโโฌโโโโโโโโโ โโโโโโโโโโฌโโโโโโโโโ
โ โ โ
โ import { useWallet, โ import { useWalletVue,โ import { FhevmNode
โ useFhevm, โ useFhevmVue } โ } from
โ useEncrypt, โ } from โ '@fhevm-sdk'
โ useDecrypt } โ '@fhevm-sdk' โ
โ from '@fhevm-sdk' โ โ
โ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโผโโโโโโโโโโโโโโ
โ @fhevm-sdk/src/ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ adapters/react.ts โ โ
โ โ adapters/vue.ts โ โ
โ โ adapters/node.ts โ โ
โ โโโโโโโโโโโโฌโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโผโโโโโโโโโโโ โ
โ โ core/index.ts โ โ
โ โ core/fhevm.ts โ โ
โ โ core/contracts.ts โ โ
โ โโโโโโโโโโโโฌโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโผโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโ
โ Zama Relayer SDK โ
โ (@zama-fhe/relayer-sdk) โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ createInstance() โ โ
โ โ createEncryptedInput โ โ
โ โ decryptValue() โ โ
โ โ publicDecrypt() โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
fhevm-react-template/
โโโ packages/
โ โโโ fhevm-sdk/ # ้็จFHEVM SDKๆ ธๅฟ
โ โ โโโ src/
โ โ โ โโโ core/ # ๆ ธๅฟFHEVMๅ่ฝ
โ โ โ โ โโโ fhevm.ts # FHEVMๅฎขๆท็ซฏๅๅงๅ
โ โ โ โ โโโ contracts.ts # ๅ็บฆไบคไบ
โ โ โ โโโ adapters/ # ๆกๆถ็นๅฎ้้
ๅจ
โ โ โ โโโ react.ts # React hooks (re-exports)
โ โ โ โโโ useWallet.ts # ้ฑๅ
่ฟๆฅhook
โ โ โ โโโ useFhevm.ts # FHEVMๅฎไพhook
โ โ โ โโโ useContract.ts # ๅ็บฆไบคไบhook
โ โ โ โโโ useEncrypt.ts # ๅ ๅฏhook
โ โ โ โโโ useDecrypt.ts # ่งฃๅฏhook
โ โ โ โโโ useFhevmOperations.ts # ็ปๅๆไฝhook
โ โ โ โโโ vue.ts # Vue็ปๅๅผๅฝๆฐ
โ โ โ โโโ node.ts # Node.js็ฑป้้
ๅจ
โ โ โโโ dist/ # ๆๅปบ่พๅบ
โ โ
โ โโโ react-showcase/ # React็คบไพ
โ โ โโโ src/
โ โ โ โโโ App.tsx # ไธปๅบ็จ (ไฝฟ็จ้้
ๅจ)
โ โ โ โโโ components/
โ โ โ โโโ FheCounter.tsx # ไฝฟ็จ useEncrypt, useDecrypt
โ โ โ โโโ FheRatings.tsx # ไฝฟ็จ useEncrypt, useDecrypt
โ โ โ โโโ FheVoting.tsx # ไฝฟ็จ useEncrypt
โ โ
โ โโโ nextjs-showcase/ # Next.js็คบไพ
โ โ โโโ app/
โ โ โ โโโ page.tsx # ไธป้กต้ข (ไฝฟ็จ้้
ๅจ)
โ โ โโโ components/ # ไธReact showcase็ธๅ
โ โ
โ โโโ vue-showcase/ # Vue็คบไพ
โ โ โโโ src/
โ โ โ โโโ App.vue # ไธปๅบ็จ (ไฝฟ็จ็ปๅๅผๅฝๆฐ)
โ โ โ โโโ components/
โ โ โ โโโ FheCounter.vue # ไฝฟ็จ useEncryptVue, useDecryptVue
โ โ โ โโโ FheRatings.vue # ไฝฟ็จ useEncryptVue, useDecryptVue
โ โ โ โโโ FheVoting.vue # ไฝฟ็จ useEncryptVue
โ โ
โ โโโ node-showcase/ # Node.js็คบไพ
โ โ โโโ src/
โ โ โ โโโ index.ts # ไธปๅ
ฅๅฃ (ไฝฟ็จ FhevmNode)
โ โ โ โโโ counter.ts # ่ฎกๆฐๅจๆผ็คบ
โ โ โ โโโ voting.ts # ๆ็ฅจๆผ็คบ
โ โ โ โโโ ratings.ts # ่ฏๅๆผ็คบ
โ โ
โ โโโ hardhat/ # ๆบ่ฝๅ็บฆ
โ โโโ contracts/ # Solidityๅ็บฆ
โ โโโ deploy/ # ้จ็ฝฒ่ๆฌ
โ
โโโ pnpm-workspace.yaml # Monorepo้
็ฝฎ
โโโ README.md # ๆฌๆไปถ
้็จFHEVM SDK้็จๆธ ๆฐ็้้ ๅจๆถๆ๏ผ
- ๆ ธๅฟๆไพๆกๆถๆ ๅ ณ็FHEVMๆไฝ
- ้้ ๅจๅฐๆ ธๅฟๅ่ฝๅฐ่ฃ ๅจๆกๆถ็นๅฎ็APIไธญ
- ๅฑ็คบๆผ็คบ้้ ๅจ็ๅฎ้ ไฝฟ็จ
ๅบไบHooks็API - ็ฑปไผผไบWagmiๆจกๅผ๏ผ
import { useWallet, useFhevm, useEncrypt, useDecrypt, useContract } from '@fhevm-sdk';
function MyComponent() {
// ้ฑๅ
่ฟๆฅ
const { address, isConnected, chainId, connect, disconnect } = useWallet();
// FHEVMๅฎไพ
const { status, initialize, isInitialized } = useFhevm();
// ๅ็บฆไบคไบ
const { contract, isReady } = useContract(contractAddress, abi);
// ๅ ๅฏ
const { encrypt, isEncrypting, error: encryptError } = useEncrypt();
// ่งฃๅฏ
const { decrypt, publicDecrypt, isDecrypting, error: decryptError } = useDecrypt();
// ไฝฟ็จ็คบไพ
const handleIncrement = async () => {
const encrypted = await encrypt(contractAddress, address, 1);
await contract.increment(encrypted.handles[0], encrypted.inputProof);
};
return (
<div>
{!isConnected && <button onClick={connect}>่ฟๆฅ้ฑๅ
</button>}
{isConnected && <button onClick={handleIncrement}>้ๅข</button>}
</div>
);
}ๅบไบ็ปๅๅผๅฝๆฐ็API - Vue 3็ปๅๅผAPI๏ผ
<script setup lang="ts">
import { useWalletVue, useFhevmVue, useEncryptVue, useDecryptVue } from '@fhevm-sdk';
// ้ฑๅ
่ฟๆฅ
const { address, isConnected, chainId, connect, disconnect } = useWalletVue();
// FHEVMๅฎไพ
const { status, initialize, isInitialized } = useFhevmVue();
// ๅ ๅฏ
const { encrypt, isEncrypting, error: encryptError } = useEncryptVue();
// ่งฃๅฏ
const { decrypt, publicDecrypt, isDecrypting, error: decryptError } = useDecryptVue();
// ไฝฟ็จ็คบไพ
const handleIncrement = async () => {
const encrypted = await encrypt.value(contractAddress, address.value, 1);
await contract.increment(encrypted.handles[0], encrypted.inputProof);
};
</script>
<template>
<div>
<button v-if="!isConnected" @click="connect">่ฟๆฅ้ฑๅ
</button>
<button v-if="isConnected" @click="handleIncrement">้ๅข</button>
</div>
</template>ๅบไบ็ฑป็API - ็จไบๆๅกๅจ็ซฏๆไฝ๏ผ
import { FhevmNode } from '@fhevm-sdk';
const fhevm = new FhevmNode({
rpcUrl: 'https://sepolia.infura.io/v3/YOUR_KEY',
privateKey: 'YOUR_PRIVATE_KEY',
chainId: 11155111
});
await fhevm.initialize();
// ๅ ๅฏ
const encrypted = await fhevm.encrypt(contractAddress, walletAddress, 1);
// ่งฃๅฏ
const decrypted = await fhevm.decrypt(handle, contractAddress);
// ๅ
ฌๅ
ฑ่งฃๅฏ
const publicDecrypted = await fhevm.publicDecrypt(handle);
// ๆง่กไบคๆ
const contract = fhevm.createContract(contractAddress, abi);
await fhevm.executeEncryptedTransaction(contract, 'increment', encrypted);็ซๅณๅๅปบๆฐ็FHEVM้กน็ฎ๏ผ
# React
npx create-fhevm-react my-app
cd my-app
npm install && npm start
# Next.js
npx create-fhevm-nextjs my-app
cd my-app
npm install && npm run dev
# Vue
npx create-fhevm-vue my-app
cd my-app
npm install && npm run devๅ ้ๅนถ่ฟ่กๅฎๆด็ๅผๅ็ฏๅข๏ผ
# 1. ๅ
้ไปๅบ
git clone https://github.com/your-username/fhevm-react-template.git
cd fhevm-react-template
# 2. ๅฎ่ฃ
ไพ่ต
pnpm install
# 3. ๆๅปบSDK
pnpm sdk:build
# 4. ่ฟ่กๅฑ็คบ
pnpm --filter react-showcase start # Reactๅจ:3000
pnpm --filter nextjs-showcase dev # Next.jsๅจ:3001
pnpm --filter vue-showcase dev # Vueๅจ:3003
pnpm --filter node-showcase explorer # ไบคไบๅผCLIๆจกๅผ๏ผๆจ่๏ผ
pnpm --filter node-showcase start # HTTPๆๅกๅจๆจกๅผ
pnpm --filter node-showcase cli # ้ไบคไบๅผCLIๆจกๅผๆฏไธชๅฑ็คบๆผ็คบ้้ ๅจ็ๅฎ้ ไฝฟ็จ๏ผ
- React Showcase - React hooksไฝฟ็จ
- Next.js Showcase - Next.jsไธReact hooks
- Vue Showcase - Vue็ปๅๅผๅฝๆฐไฝฟ็จ
- Node.js Showcase - ๆๅกๅจ็ซฏๆไฝ
- ๐ ไบคไบๅผCLIๆจกๅผ - ๅธฆๆ็คบ็ๅผๅฏผๅฉๆ (
pnpm explorer) - ๐ HTTPๆๅกๅจๆจกๅผ - ๅธฆ็ซฏ็น็REST API (
pnpm start) - ๐ ้ไบคไบๅผCLIๆจกๅผ - ้กบๅบๆง่ก (
pnpm cli)
- ๐ ไบคไบๅผCLIๆจกๅผ - ๅธฆๆ็คบ็ๅผๅฏผๅฉๆ (
- ๅไธๆ ธๅฟๅฎ็ฐ๏ผๆๆ้้ ๅจไฝฟ็จ
- ๆ ธๅฟไธญๆ ๆกๆถ็นๅฎไพ่ต
- ๆไบๆฉๅฑๆฐ้้ ๅจ
- ๅฏนweb3ๅผๅ่ ๆฅ่ฏด็ๆ็ๆจกๅผ
- ๅบไบhooks๏ผReact๏ผๅ็ปๅๅผๅฝๆฐ๏ผVue๏ผ
- ๆธ ๆฐ็ด่ง็ๆฅๅฃ
- ๆๆ้้ ๅจ็ๅฎๆด็ฑปๅๅฎๅ จ
- ๅบ่ฒ็IDEๆฏๆ
- ๅฎๆด็็ฑปๅๅฎไน
- EIP-712็ญพๅ่งฃๅฏ
- ๅ ฌๅ ฑ่งฃๅฏๆฏๆ
- ๅ ๅฏไบคๆๆง่ก
- ๆ ๆจกๆ - ๆๆ็ๅฎ็ๅบๅ้พไบคไบ
- ่ฎกๆฐๅจๆผ็คบ๏ผ ไฝฟ็จ็งๆ่งฃๅฏ็้ๅข/้ๅ
- ่ฏๅๆผ็คบ๏ผ ไฝฟ็จๅ ฌๅ ฑ่งฃๅฏ็ๅ ๅฏ่ฏๅ
- ๆ็ฅจๆผ็คบ๏ผ ๅ ๅฏๆ็ฅจไธ็ปๆๆญ็คบ
- Node.js 18+
- pnpm๏ผๆจ่๏ผๆnpm
- MetaMask๏ผ็จไบๅ็ซฏ็คบไพ๏ผ
- Sepolia ETH๏ผ็จไบไบคๆ๏ผ
MIT่ฎธๅฏ่ฏ - ่ฏฆ็ปไฟกๆฏ่ฏทๅ้ LICENSEๆไปถ
ๆฌข่ฟ่ดก็ฎ๏ผๆดๅคไฟกๆฏ่ฏทๅ้ ๆไปฌ็่ดก็ฎๆๅใ
ไธบZama้็จFHEVM SDK่ต้่ๆๅปบ๏ผไฟๆค้็ง