useFHEVM
Composable to access FHEVM client and initialization status.
Usage
<script setup lang="ts">
import { useFHEVM } from '@fhevmsdk/vue'
const { client, isReady, error, retry } = useFHEVM()
</script>
<template>
<div v-if="!isReady">Loading...</div>
<div v-else-if="error">Error: {{ error }}</div>
<div v-else>FHEVM Ready!</div>
</template>
Returns
interface UseFHEVMReturn {
client: Ref<FHEVMClient | null>
isReady: Ref<boolean>
error: Ref<string | null>
retry: () => void
}
Examples
Loading State
<script setup lang="ts">
import { useFHEVM } from '@fhevmsdk/vue'
const { isReady } = useFHEVM()
</script>
<template>
<div v-if="!isReady" class="loading">
<Spinner />
<p>Initializing FHEVM...</p>
</div>
<Dashboard v-else />
</template>
Error Handling
<script setup lang="ts">
import { useFHEVM } from '@fhevmsdk/vue'
const { isReady, error, retry } = useFHEVM()
</script>
<template>
<div v-if="error" class="error">
<h3>Initialization Failed</h3>
<p>{{ error }}</p>
<button @click="retry">Retry</button>
</div>
<div v-else-if="!isReady">Loading...</div>
<Dashboard v-else />
</template>
Using Client Directly
<script setup lang="ts">
import { useFHEVM } from '@fhevmsdk/vue'
import { useAccount } from '@wagmi/vue'
import { ref } from 'vue'
const { client, isReady } = useFHEVM()
const { address } = useAccount()
const encrypted = ref()
const handleEncrypt = async () => {
if (!isReady.value || !client.value || !address.value) return
encrypted.value = await client.value.encrypt.uint64({
value: 1000n,
contractAddress: '0x...',
userAddress: address.value,
})
}
</script>
<template>
<button @click="handleEncrypt" :disabled="!isReady">Encrypt</button>
</template>
Common Patterns
Guard Component
<!-- FHEVMGuard.vue -->
<script setup lang="ts">
import { useFHEVM } from '@fhevmsdk/vue'
const { isReady, error, retry } = useFHEVM()
</script>
<template>
<div v-if="error">
<p>FHEVM Error: {{ error }}</p>
<button @click="retry">Retry</button>
</div>
<div v-else-if="!isReady">Loading FHEVM...</div>
<slot v-else />
</template>
<!-- Usage -->
<FHEVMGuard>
<YourApp />
</FHEVMGuard>
Notes
- ✅ Reactive refs automatically update
- ✅ Must be used after
setupFHEVM()in main.ts - ✅
clientis null untilisReadyis true - ⚠️ Always check
isReady.valuebefore usingclient.value
See Also
- Setup & Provider - Initialize FHEVM
- useEncrypt - Encryption composable
- useDecrypt - Decryption composable