/**
* 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}
);
}