> ## 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.

# Sử dụng ví

> Đọc trạng thái xác thực, ký thông điệp và giao dịch, gửi giao dịch và đọc lịch sử bằng useHeliusWallet

## Xác thực

Sử dụng hook `useHeliusWallet` để đọc trạng thái xác thực và thực hiện đăng nhập:

```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>;
}
```

Việc gọi `login()` sẽ mở cửa sổ ví với các phương thức xác thực bạn đã bật.

Sau khi đăng nhập, `status` chuyển thành `"authenticated"` và `user` được điền ID người dùng, ID tổ chức con và ID ví.

Chọn các phương thức đăng nhập xuất hiện trong bảng điều khiển — xem [Cấu hình phương thức đăng nhập](/docs/vi/waas/configuration#cấu-hình-phương-thức-đăng-nhập).

## Ký và gửi

`useHeliusWallet` cung cấp địa chỉ ví, các phương thức ký và một `Connection` Solana sẵn sàng sử dụng được kết nối với Helius RPC.

### Ký thông điệp

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

### Ký và gửi giao dịch

`signAndSendTransaction` ký giao dịch ở phía máy khách và gửi giao dịch đó qua Helius. Phương thức này nhận một giao dịch đã tuần tự hóa và trả về chữ ký giao dịch.

```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>
  Sử dụng `signTransaction` thay cho `signAndSendTransaction` khi bạn muốn nhận
  chữ ký của ví mà không phát giao dịch lên mạng — ví dụ: để thêm chữ ký đó vào một
  giao dịch nhiều bên trước khi tự gửi giao dịch.
</Tip>

### Đọc lịch sử giao dịch

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

<Note>
  `getTransactions` yêu cầu [trình xử lý tuyến phía máy chủ](/docs/vi/waas/quickstart#thiết-lập) —
  tính năng này không khả dụng trong chế độ mặc định chỉ dành cho máy khách (Secure RPC).
</Note>

### Xuất ví

Ví không lưu ký nên người dùng có thể mang theo khóa của mình. `exportWallet` mở một quy trình bảo mật, được mã hóa để người dùng đã đăng nhập hiển thị và xuất khóa riêng tư của họ.

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

## Các bước tiếp theo

<CardGroup cols={2}>
  <Card title="API reference" icon="code" href="/docs/vi/waas/api-reference">
    Toàn bộ giao diện `useHeliusWallet()` và các lệnh import.
  </Card>

  <Card title="Migrating from Privy" icon="arrow-right-arrow-left" href="/docs/vi/waas/migrating-from-privy">
    Chuyển các ví Privy hiện có sang Helius WaaS
  </Card>
</CardGroup>
