/** * Create Account — dark minimalist. * Генерирует Ed25519 + X25519 keypair локально, сохраняет в SecureStore. */ import React, { useState } from 'react'; import { View, Text, ScrollView, Alert, Pressable, ActivityIndicator } from 'react-native'; import { router } from 'expo-router'; import { Ionicons } from '@expo/vector-icons'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { generateKeyFile } from '@/lib/crypto'; import { saveKeyFile } from '@/lib/storage'; import { useStore } from '@/lib/store'; import { safeBack } from '@/lib/utils'; import { Header } from '@/components/Header'; import { IconButton } from '@/components/IconButton'; export default function CreateAccountScreen() { const insets = useSafeAreaInsets(); const setKeyFile = useStore(s => s.setKeyFile); const [loading, setLoading] = useState(false); async function handleCreate() { setLoading(true); try { const kf = generateKeyFile(); await saveKeyFile(kf); setKeyFile(kf); router.replace('/(auth)/created' as never); } catch (e: any) { Alert.alert('Error', e?.message ?? 'Unknown error'); } finally { setLoading(false); } } return (
safeBack('/')} />} /> A new identity is created locally Your private key never leaves this device. The app encrypts it in the platform secure store. Important Export and backup your key file right after creation. If you lose it there is no recovery — blockchain has no password reset. ({ alignItems: 'center', justifyContent: 'center', paddingVertical: 13, borderRadius: 999, marginTop: 20, backgroundColor: loading ? '#1a1a1a' : pressed ? '#1a8cd8' : '#1d9bf0', })} > {loading ? ( ) : ( Generate keys & continue )} ); } function InfoRow({ icon, label, desc, first, }: { icon: React.ComponentProps['name']; label: string; desc: string; first?: boolean; }) { return ( {label} {desc} ); }