# use-user-controlled-wallets

Скилл для сборки некастодиальных кошельков на SDK Circle: вход через Google, Apple, Facebook, email OTP или PIN, ключи остаются у пользователя.

- скилл · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 949 установок · ★ 158
- Автор: circlefin
- Лицензия: Apache-2.0 · policy=mirror · начало файла — в конце страницы
- Исходник: https://github.com/circlefin/skills/tree/HEAD/plugins/circle/skills/use-user-controlled-wallets/SKILL.md
- Обновлён: 2026-10-16
- HTML: https://affpapa.org/nevibecode/skills/use-user-controlled-wallets

## Что делает

Скилл описывает, как собрать кошелёк, в котором приватные ключи остаются у конечного пользователя. Все чувствительные операции — создание кошелька, переводы, подпись сообщений, вызовы контрактов — идут через модель challenge-response: бэкенд создаёт операцию и получает `challengeId`, фронтенд вызывает `sdk.setAuthentication({ userToken, encryptionKey })` и `sdk.execute(challengeId, callback)`, пользователь подтверждает в UI Circle.

Внутри два SDK. Серверная часть на `@circle-fin/user-controlled-wallets` держит API-ключ, создаёт пользователей и запросы. Клиентская на `@circle-fin/w3s-pw-web-sdk` отвечает за авторизацию и выполнение челленджей. Поставить нужно и `vite-plugin-node-polyfills`, потому что SDK опирается на Node.js-модули вроде `buffer` и `crypto`, которых в браузере нет. Заранее понадобятся `CIRCLE_API_KEY` и `CIRCLE_APP_ID`.

Отдельный момент, на котором легко споткнуться: после инициализации SDK обязательно вызвать `sdk.getDeviceId()`. Этот вызов поднимает сессию с сервисом Circle через iframe, и без него `sdk.execute()` молча ничего не сделает. Ещё разработчик не может восстановить доступ к кошельку, если пользователь потерял свой способ входа — восстановление целиком зависит от того, сможет ли он авторизоваться снова.

## Установка

### Claude Code (родная платформа)

1. **Через Skills CLI (Vercel)**
```bash
npx skills add circlefin/skills --skill use-user-controlled-wallets -a claude-code
```

2. **Вручную: положить файлы**
- Файл: `~/.claude/skills/use-user-controlled-wallets/SKILL.md` — Папка скилла целиком; для одного проекта — .claude/skills/use-user-controlled-wallets/

### Codex

1. **Через Skills CLI (Vercel)**
```bash
npx skills add circlefin/skills --skill use-user-controlled-wallets -a codex
```

2. **Вручную: положить файлы**
- Файл: `.agents/skills/use-user-controlled-wallets/SKILL.md` — Для всех проектов — ~/.agents/skills/

### Cursor

1. **Через Skills CLI (Vercel)**
```bash
npx skills add circlefin/skills --skill use-user-controlled-wallets -a cursor
```

2. **Вручную: положить файлы**
- Файл: `.cursor/skills/use-user-controlled-wallets/SKILL.md` — Cursor читает и .agents/skills/, и .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install circlefin/skills use-user-controlled-wallets
```

2. **Вручную: положить файлы**
- Файл: `.github/skills/use-user-controlled-wallets/SKILL.md`

### Gemini CLI

1. **Через Skills CLI (Vercel)**
```bash
npx skills add circlefin/skills --skill use-user-controlled-wallets -a gemini-cli
```

2. **Командой платформы**
```bash
gemini skills install https://github.com/circlefin/skills --path plugins/circle/skills/use-user-controlled-wallets
```

### Windsurf (Devin Desktop)

**Вручную: положить файлы**
- Файл: `.devin/skills/use-user-controlled-wallets/SKILL.md` — Старый путь .windsurf/skills/ тоже читается

### OpenCode

**Через Skills CLI (Vercel)**
```bash
npx skills add circlefin/skills --skill use-user-controlled-wallets -a opencode
```

### Claude.ai

**Claude.ai**
- Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/circlefin/skills/tree/HEAD/plugins/circle/skills/use-user-controlled-wallets/SKILL.md

## Когда брать
- создать кошелёк, где ключи хранит сам пользователь
- подключить вход через Google, Apple или Facebook
- подписать сообщение по подтверждению пользователя
- вызвать смарт-контракт из браузера
- выбрать между EOA и SCA при создании кошелька

## Примеры запросов агенту
- Помоги собрать некастодиальный кошелёк на Circle с входом через email OTP
- Настрой challenge-response для перевода токенов: бэкенд создаёт challengeId, фронтенд вызывает sdk.execute
- Объясни, когда брать SCA, а когда EOA, и как это влияет на газ

## Похожие
- [v4-sdk-integration](https://affpapa.org/nevibecode/skills/v4-sdk-integration.md) — скилл · 729 установок
- [bencium-controlled-ux-designer](https://affpapa.org/nevibecode/skills/bencium-controlled-ux-designer.md) — скилл · 4600 установок
- [clerk-tanstack-patterns](https://affpapa.org/nevibecode/skills/clerk-tanstack-patterns.md) — скилл · 15500 установок
- [solana-dev](https://affpapa.org/nevibecode/skills/solana-dev.md) — скилл · 98900 установок
- [seeker-genesis-token](https://affpapa.org/nevibecode/skills/seeker-genesis-token.md) — скилл · 11600 установок
- [blockchain-developer](https://affpapa.org/nevibecode/skills/blockchain-developer.md) — скилл · 1200 установок

Из того же набора: [circlefin/skills](https://affpapa.org/nevibecode/by/circlefin/skills.md) — 15 карточек

_Часть страницы не вошла по размеру — она есть в HTML-версии._

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
