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

# 使用钱包

> 使用 useHeliusWallet 读取授权状态、签署消息和交易、发送和读取历史记录

## 认证

使用 `useHeliusWallet` 钩子读取授权状态并推动登录：

```tsx theme={"system"}
"use client";

import { useHeliusWallet } from "helius-wallet-kit";

export function AuthButton() {
  const { status, login, logout, address } = useHeliusWallet();

  if (status === "loading") return <p>Loading…</p>;

  if (status === "authenticated") {
    return (
      <div>
        <span>{address}</span>
        <button onClick={() => logout()}>Sign out</button>
      </div>
    );
  }

  return <button onClick={() => login()}>Sign in</button>;
}
```

调用 `login()` 会打开带有您启用的身份认证方法的钱包模态窗口。

登录后，`status` 变为 `"authenticated"`，并且 `user` 会填充用户的 ID、子组织 ID 和钱包 ID。

选择显示在仪表板中的登录方法 — 请参阅[配置登录方法](/zh/waas/configuration#configure-sign-in-methods) 。

## 签署和发送

`useHeliusWallet` 暴露钱包地址、签署方法和连接到 Helius RPC 的即用型 Solana `Connection`。

### 签署消息

```tsx theme={"system"}
const { signMessage } = useHeliusWallet();
const signature = await signMessage("Sign in to Acme");
```

### 签署并发送交易

`signAndSendTransaction` 在客户端签署交易并通过 Helius 提交。它需要一个序列化的交易并返回交易签名。

```tsx theme={"system"}
import {
  Transaction,
  SystemProgram,
  PublicKey,
  LAMPORTS_PER_SOL,
  ComputeBudgetProgram,
} from "@solana/web3.js";

const { address, connection, signAndSendTransaction, getPriorityFeeLevels } =
  useHeliusWallet();

const fromPubkey = new PublicKey(address!);
const toPubkey = new PublicKey(recipient);

// Estimate a priority fee from Helius.
const fees = await getPriorityFeeLevels([address!, recipient]);

const tx = new Transaction()
  .add(ComputeBudgetProgram.setComputeUnitPrice({ microLamports: fees.medium }))
  .add(
    SystemProgram.transfer({
      fromPubkey,
      toPubkey,
      lamports: 0.01 * LAMPORTS_PER_SOL,
    }),
  );

const { blockhash } = await connection.getLatestBlockhash();
tx.recentBlockhash = blockhash;
tx.feePayer = fromPubkey;

const serialized = tx.serialize({
  requireAllSignatures: false,
  verifySignatures: false,
});

const signature = await signAndSendTransaction(serialized);
```

<Tip>
  当您需要钱包的签名而不进行广播时，例如，在您自己提交之前将其添加到多方交易中，使用 `signTransaction` 而不是 `signAndSendTransaction`。
</Tip>

### 读取交易历史

```tsx theme={"system"}
const { getTransactions } = useHeliusWallet();
const transactions = await getTransactions({ limit: 20 });
```

<Note>
  `getTransactions` 需要 [服务器路由处理器](/zh/waas/quickstart#setup) — 它在默认的客户端模式 (Secure RPC) 下不可用。
</Note>

### 导出钱包

钱包是非托管的，因此用户可以带走他们的密钥。`exportWallet` 为登录用户打开一个安全的加密流程，以显示和导出他们的私钥。

```tsx theme={"system"}
const { exportWallet } = useHeliusWallet();
await exportWallet();
```

## 后续步骤

<CardGroup cols={2}>
  <Card title="API 参考" icon="code" href="/zh/waas/api-reference">
    全部 `useHeliusWallet()` 接口和导入。
  </Card>

  <Card title="从 Privy 迁移" icon="arrow-right-arrow-left" href="/zh/waas/migrating-from-privy">
    将现有的 Privy 钱包迁移到 Helius WaaS
  </Card>
</CardGroup>
