> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lasersell.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Регистрация кошельков

> Регистрация кошельков для Exit Intelligence Stream с использованием доказательства владения через Ed25519.

## Обзор

Регистрация кошельков подтверждает владение кошельком Solana для LaserSell API. Регистрация обязательна перед подключением кошельков к Exit Intelligence Stream. Поток проверяет, что каждый кошелёк в вашем сообщении `configure` зарегистрирован на ваш аккаунт.

Регистрация использует подписи Ed25519, поэтому транзакция в блокчейне не требуется.

## `POST /v1/wallets/register`

Зарегистрируйте кошелёк, подтвердив владение подписью Ed25519.

### Запрос

```json theme={null}
{
  "wallet_pubkey": "YourWalletPubkey...",
  "signature": "base58-encoded-ed25519-signature",
  "message": "lasersell-register:YourWalletPubkey...:1706000000",
  "label": "My Trading Wallet"
}
```

| Поле            | Тип      | Обязательное | Описание                                                                                                                     |
| --------------- | -------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------- |
| `wallet_pubkey` | `string` | Да           | Публичный ключ кошелька Solana для регистрации.                                                                              |
| `signature`     | `string` | Да           | Подпись Ed25519 сообщения, закодированная в base58.                                                                          |
| `message`       | `string` | Да           | Структурированное сообщение: `lasersell-register:<pubkey>:<unix_timestamp>`. Временная метка должна быть в пределах 5 минут. |
| `label`         | `string` | Нет          | Необязательная человекочитаемая метка для кошелька.                                                                          |

### Ответ

```json theme={null}
{
  "wallet_pubkey": "YourWalletPubkey...",
  "registered": true
}
```

### Аутентификация

Требуется заголовок `x-api-key` с действительным API ключом.

### Ошибки

| Статус | Код         | Описание                                                                              |
| ------ | ----------- | ------------------------------------------------------------------------------------- |
| 400    | Bad Request | Неверный формат pubkey, некорректное сообщение или истёкшая временная метка (>5 мин). |
| 403    | Forbidden   | Отсутствующий или неверный API ключ, или проверка подписи не пройдена.                |

## `DELETE /v1/wallets`

Отмена регистрации кошелька.

### Запрос

```json theme={null}
{
  "wallet_pubkey": "YourWalletPubkey..."
}
```

### Ответ

```json theme={null}
{
  "wallet_pubkey": "YourWalletPubkey...",
  "removed": true
}
```

## Использование SDK

Все 4 SDK предоставляют вспомогательные методы для регистрации кошельков.

### `proveOwnership` / `prove_ownership`

Генерация `WalletProof` локально с использованием вашей пары ключей. Это чистая криптографическая операция без сетевого вызова.

<CodeGroup>
  ```typescript TypeScript theme={null}
  import { proveOwnership } from "@lasersell/lasersell-sdk";

  const proof = proveOwnership(keypair);
  // proof = { walletPubkey, signature, message }
  ```

  ```python Python theme={null}
  from lasersell_sdk.exit_api import prove_ownership

  proof = prove_ownership(keypair)
  # proof = WalletProof(wallet_pubkey, signature, message)
  ```

  ```rust Rust theme={null}
  use lasersell_sdk::exit_api::prove_ownership;

  let proof = prove_ownership(&keypair);
  // proof = WalletProof { wallet_pubkey, signature, message }
  ```

  ```go Go theme={null}
  proof := lasersell.ProveOwnership(privateKey)
  // proof = WalletProof{WalletPubkey, Signature, Message}
  ```
</CodeGroup>

### `registerWallet` / `register_wallet`

Отправка доказательства в API для регистрации кошелька.

<CodeGroup>
  ```typescript TypeScript theme={null}
  const client = ExitApiClient.withApiKey(apiKey);
  await client.registerWallet(proof, "My Wallet");
  ```

  ```python Python theme={null}
  client = ExitApiClient.with_api_key(api_key)
  await client.register_wallet(proof, label="My Wallet")
  ```

  ```rust Rust theme={null}
  client.register_wallet(&proof, Some("My Wallet")).await?;
  ```

  ```go Go theme={null}
  client.RegisterWallet(ctx, proof, lasersell.Ptr("My Wallet"))
  ```
</CodeGroup>

### `connectWithWallets` / `connect_with_wallets`

Удобный метод, который регистрирует кошельки и подключается к потоку одним шагом.

<CodeGroup>
  ```typescript TypeScript theme={null}
  import { StreamClient, proveOwnership } from "@lasersell/lasersell-sdk";

  const proof = proveOwnership(keypair);
  const client = new StreamClient(apiKey);
  const session = await client.connectWithWallets(
    [proof],
    { target_profit_pct: 50, stop_loss_pct: 10 },
    120, // deadline_timeout_sec
  );
  ```

  ```python Python theme={null}
  from lasersell_sdk.exit_api import prove_ownership
  from lasersell_sdk.stream.client import StreamClient

  proof = prove_ownership(keypair)
  client = StreamClient(api_key)
  session = await client.connect_with_wallets(
      [proof],
      {"target_profit_pct": 50, "stop_loss_pct": 10},
      deadline_timeout_sec=120,
  )
  ```

  ```rust Rust theme={null}
  let proof = prove_ownership(&keypair);
  let client = StreamClient::new(api_key);
  let session = client.connect_with_wallets(
      &[proof],
      strategy,
      120,
  ).await?;
  ```

  ```go Go theme={null}
  // Go SDK: register separately, then connect
  proof := lasersell.ProveOwnership(privateKey)
  client.RegisterWallet(ctx, proof, nil)
  session, _ := stream.ConnectSession(ctx, streamClient, configure)
  ```
</CodeGroup>
