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

# 快速开始

> 通过 MagicBlock 的 ER 和基于 Intel TDX 的 Trusted Execution Environment，为任意 Solana 程序状态账户启用隐私。

***

<Tip>
  **正在使用 AI 编程助手开发？** 安装 MagicBlock Dev Skill，为你的助手提供 MagicBlock 专属开发模式——委托流程、Magic Actions、Crank、VRF 等。

  Claude Code 快速安装：

  ```bash theme={null}
  npx add-skill https://github.com/magicblock-labs/magicblock-dev-skill
  ```

  使用 Cursor、Codex、Windsurf、Cline 或其他助手？请参阅 [AI Dev Skill](/cn/pages/overview/additional-information/ai-dev-skill) 页面了解所有安装方式。
</Tip>

### 快速访问

查看示例：

<CardGroup cols={2}>
  <Card title="GitHub" icon="github" href="https://github.com/magicblock-labs/magicblock-engine-examples/tree/main/private-counter" iconType="duotone">
    Private Counter 的 Anchor 实现
  </Card>

  <Card title="在线示例应用" icon="shield-check" href="https://private-counter-example.magicblock.app/" iconType="duotone">
    试用 Private Counter
  </Card>
</CardGroup>

<Note>
  MagicBlock 的 Private Ephemeral Rollup 会在入口处、交易被接受或执行之前，
  基于节点级 IP 地理围栏、OFAC 制裁名单以及受限司法辖区来执行合规控制。[了解更多](/cn/pages/private-ephemeral-rollups-pers/introduction/compliance-framework)
</Note>

***

## 分步指南

构建你的程序，将状态委托给 TEE validator，并通过 MagicBlock 的 Permission Program `ACLseoPoyC3cBqoUtkbjZ4aDrkurZW86v19pXz2XQnp1` 和 Delegation Program `DELeGGvXpWV2fqJUhqcF5ZSYMS4JTLjteaAMARRSaeSh` 直接在 ER 上创建 `EphemeralPermission` 账户：

<Steps>
  <Step title={<a href="#1-write-program">编写你的程序</a>}>
    像往常一样编写你的 Solana 程序。
  </Step>

  <Step
    title={
  <a href="#2-委托并创建-permission">
    委托并创建 permission
  </a>
}
  >
    `delegate` 在 Base Layer 上将 counter 委托给 TEE validator。`init_permission`
    接着在 ER 上运行 —— 已委托的 PDA 作为 PDA 签名，并支付自身的 ephemeral
    permission 租金（在 `initialize` 时预先充值）。`set_privacy` 按需切换
    公开 / 私密标志。无需在 Base Layer 上创建、委托或
    commit-and-undelegate 任何 permission 账户。
    [查看访问控制详情](/cn/pages/private-ephemeral-rollups-pers/how-to-guide/access-control)。

    <Note>
      <p>
        这些公共验证器可用于开发环境。请确保在你的委托指令中添加对应的
        ER 验证器：
      </p>

      **主网**

      <ul>
        <li>
          亚洲 (as.magicblock.app):{" "}
          <code>MAS1Dt9qreoRMQ14YQuhg8UTZMMzDdKhmkZMECCzk57</code>
        </li>

        <li>
          欧盟 (eu.magicblock.app):{" "}
          <code>MEUGGrYPxKk17hCr7wpT6s8dtNokZj5U2L57vjYMS8e</code>
        </li>

        <li>
          美国 (us.magicblock.app):{" "}
          <code>MUS3hc9TCw4cGC12vHNoYcCGzJG1txjgQLZWVoeNHNd</code>
        </li>

        <li>
          TEE (mainnet-tee.magicblock.app):{" "}
          <code>MTEWGuqxUpYZGFJQcp8tLN7x5v9BSeoFHYWQQ3n3xzo</code>
        </li>
      </ul>

      **开发网**

      <ul>
        <li>
          亚洲 (devnet-as.magicblock.app):{" "}
          <code>MAS1Dt9qreoRMQ14YQuhg8UTZMMzDdKhmkZMECCzk57</code>
        </li>

        <li>
          欧盟 (devnet-eu.magicblock.app):{" "}
          <code>MEUGGrYPxKk17hCr7wpT6s8dtNokZj5U2L57vjYMS8e</code>
        </li>

        <li>
          美国 (devnet-us.magicblock.app):{" "}
          <code>MUS3hc9TCw4cGC12vHNoYcCGzJG1txjgQLZWVoeNHNd</code>
        </li>

        <li>
          TEE (devnet-tee.magicblock.app):{" "}
          <code>MTEWGuqxUpYZGFJQcp8tLN7x5v9BSeoFHYWQQ3n3xzo</code>
        </li>
      </ul>

      **本地网络**

      <ul>
        <li>
          本地 ER (localhost:7799):{" "}
          <code>mAGicPQYBMvcYveUZA5F5UNNwyHvfYh5xkLS2Fr1mev</code>
        </li>
      </ul>
    </Note>
  </Step>

  <Step title={<a href="#3-deploy">在 Solana 上部署你的程序</a>}>
    使用 Anchor CLI 部署你的 Solana 程序。
  </Step>

  <Step title={<a href="#4-authorize">在客户端实现授权流程</a>}>
    让用户对消息进行签名，从 TEE 端点获取授权令牌。
  </Step>

  <Step title={<a href="#5-test">执行交易并测试隐私</a>}>
    请求授权令牌并发送机密交易。
  </Step>
</Steps>

***

## Private Counter 示例

你可能需要以下软件包，其他版本也可能兼容：

| 软件         | 版本      | 安装指南                                                       |
| ---------- | ------- | ---------------------------------------------------------- |
| **Solana** | 3.1.9   | [安装 Solana](https://docs.anza.xyz/cli/install)             |
| **Rust**   | 1.89.0  | [安装 Rust](https://www.rust-lang.org/tools/install)         |
| **Anchor** | 1.0.2   | [安装 Anchor](https://www.anchor-lang.com/docs/installation) |
| **Node**   | 24.10.0 | [安装 Node](https://nodejs.org/en/download/current)          |

<Note>
  以下展示的 EphemeralPermission 流程需要 `ephemeral-rollups-sdk` v0.14+（引入
  `CreateEphemeralPermissionCpi` / `UpdateEphemeralPermissionCpi` /
  `CloseEphemeralPermissionCpi`）。旧版 SDK 与 Anchor 版本请参阅
  [legacy examples](https://github.com/magicblock-labs/magicblock-engine-examples/tree/main/00-LEGACY_EXAMPLES)。
</Note>

### 代码片段

<Tabs>
  <Tab title="1. 编写程序">
    一个简单的 counter 程序，包含 `initialize` 和 `increment` 指令，结构与公开版本的 counter 完全相同 —— 隐私能力将在后续步骤中加入：

    ```rust theme={null}
    #[ephemeral]
    #[program]
    pub mod private_counter {
        use super::*;

        /// Initialize the counter.
        pub fn initialize(ctx: Context<Initialize>) -> Result<()> {
            let counter = &mut ctx.accounts.counter;
            counter.count = 0;
            Ok(())
        }

        /// Increment the counter.
        pub fn increment(ctx: Context<Increment>) -> Result<()> {
            let counter = &mut ctx.accounts.counter;
            counter.count += 1;
            Ok(())
        }

        /// ... Other instructions for delegation, permission, and privacy
    }

    pub const COUNTER_SEED: &[u8] = b"counter";

    /// Context for initializing counter
    #[derive(Accounts)]
    pub struct Initialize<'info> {
        #[account(init_if_needed, payer = user, space = 8 + 8, seeds = [COUNTER_SEED], bump)]
        pub counter: Account<'info, Counter>,
        #[account(mut)]
        pub user: Signer<'info>,
        pub system_program: Program<'info, System>,
    }

    /// Context for incrementing counter
    #[derive(Accounts)]
    pub struct Increment<'info> {
        #[account(mut, seeds = [COUNTER_SEED], bump)]
        pub counter: Account<'info, Counter>,
    }

    /// Counter struct
    #[account]
    pub struct Counter {
        pub count: u64,
    }

    /// Other context and accounts for delegation and privacy ...
    ```

    [⬆️ 回到顶部](#code-snippets)
  </Tab>

  <Tab title="2. 委托并创建 permission">
    完整的隐私生命周期分布在两层：**Base Layer** 将 counter 委托给 TEE
    validator；**ER** 随后由已委托的 PDA 自行签名，创建 / 更新 / 关闭
    其专属的 `EphemeralPermission` 账户。

    * `initialize` 为 counter PDA 预先充入 ephemeral permission 的租金，使后续步骤无需再单独补充 lamports。
    * `delegate` 仅将 counter 委托给 TEE validator。
    * `init_permission` 在 ER 上运行 —— 已委托的 PDA 使用其程序种子签发 [`CreateEphemeralPermissionCpi`](https://github.com/magicblock-labs/ephemeral-rollups-sdk)，并支付租金。幂等。
    * `set_privacy(is_private)` 通过 [`UpdateEphemeralPermissionCpi`](https://github.com/magicblock-labs/ephemeral-rollups-sdk) 在 ER 上切换隐私标志。私密时，仅 counter 的 `authority` 出现在成员列表中，带有 `TX_LOGS_FLAG | TX_MESSAGE_FLAG | TX_BALANCES_FLAG` 标志 —— 其他所有钱包都会在 TEE 入口处被拒绝。
    * `close_permission` 当不再需要 permission 时，将租金退还给 PDA（可选）。
    * `undelegate` 通过 `MagicIntentBundleBuilder` 提交并取消 counter 的委托。

    完整生命周期及各语言代码片段请参阅[访问控制](/cn/pages/private-ephemeral-rollups-pers/how-to-guide/access-control)。

    <Note>
      <p>
        这些公共验证器可用于开发环境。请确保在你的委托指令中添加对应的
        ER 验证器：
      </p>

      **主网**

      <ul>
        <li>
          亚洲 (as.magicblock.app):{" "}
          <code>MAS1Dt9qreoRMQ14YQuhg8UTZMMzDdKhmkZMECCzk57</code>
        </li>

        <li>
          欧盟 (eu.magicblock.app):{" "}
          <code>MEUGGrYPxKk17hCr7wpT6s8dtNokZj5U2L57vjYMS8e</code>
        </li>

        <li>
          美国 (us.magicblock.app):{" "}
          <code>MUS3hc9TCw4cGC12vHNoYcCGzJG1txjgQLZWVoeNHNd</code>
        </li>

        <li>
          TEE (mainnet-tee.magicblock.app):{" "}
          <code>MTEWGuqxUpYZGFJQcp8tLN7x5v9BSeoFHYWQQ3n3xzo</code>
        </li>
      </ul>

      **开发网**

      <ul>
        <li>
          亚洲 (devnet-as.magicblock.app):{" "}
          <code>MAS1Dt9qreoRMQ14YQuhg8UTZMMzDdKhmkZMECCzk57</code>
        </li>

        <li>
          欧盟 (devnet-eu.magicblock.app):{" "}
          <code>MEUGGrYPxKk17hCr7wpT6s8dtNokZj5U2L57vjYMS8e</code>
        </li>

        <li>
          美国 (devnet-us.magicblock.app):{" "}
          <code>MUS3hc9TCw4cGC12vHNoYcCGzJG1txjgQLZWVoeNHNd</code>
        </li>

        <li>
          TEE (devnet-tee.magicblock.app):{" "}
          <code>MTEWGuqxUpYZGFJQcp8tLN7x5v9BSeoFHYWQQ3n3xzo</code>
        </li>
      </ul>

      **本地网络**

      <ul>
        <li>
          本地 ER (localhost:7799):{" "}
          <code>mAGicPQYBMvcYveUZA5F5UNNwyHvfYh5xkLS2Fr1mev</code>
        </li>
      </ul>
    </Note>

    ```rust theme={null}
    use anchor_lang::system_program::{transfer, Transfer};
    use ephemeral_rollups_sdk::{
        access_control::{
            instructions::{
                CloseEphemeralPermissionCpi, CreateEphemeralPermissionCpi,
                UpdateEphemeralPermissionCpi,
            },
            structs::{
                EphemeralMembersArgs, EphemeralPermission, Member,
                TX_BALANCES_FLAG, TX_LOGS_FLAG, TX_MESSAGE_FLAG,
            },
        },
        anchor::{commit, delegate, ephemeral},
        cpi::DelegateConfig,
        ephem::MagicIntentBundleBuilder,
    };

    #[ephemeral] // Adds undelegation instruction for the ER validator
    #[program]
    pub mod private_counter {
        use super::*;

        /// Initialize on the base layer. Pre-funds the counter PDA with enough
        /// lamports to cover the ephemeral permission rent that will be paid on
        /// the ER (rent = ~32 lamports/byte × (size + 60); use
        /// `EphemeralPermission::size_of(N)` for the exact byte count).
        pub fn initialize(ctx: Context<Initialize>) -> Result<()> {
            transfer(
                CpiContext::new(
                    ctx.accounts.system_program.to_account_info(),
                    Transfer {
                        from: ctx.accounts.authority.to_account_info(),
                        to: ctx.accounts.counter.to_account_info(),
                    },
                ),
                ephemeral_rollups_sdk::ephemeral_accounts::rent(
                    EphemeralPermission::size_of(1) as u32,
                ),
            )?;
            let counter = &mut ctx.accounts.counter;
            counter.count = 0;
            counter.authority = ctx.accounts.authority.key();
            Ok(())
        }

        /// Delegate the counter to the (TEE) ER. No permission CPI here —
        /// the EphemeralPermission is created directly on the ER via
        /// `init_permission` (next instruction).
        pub fn delegate(ctx: Context<DelegateCounterPrivately>) -> Result<()> {
            if ctx.accounts.counter.owner != &ephemeral_rollups_sdk::id() {
                let validator = ctx.accounts.validator.as_ref();
                ctx.accounts.delegate_counter(
                    &ctx.accounts.authority,
                    &[COUNTER_SEED, ctx.accounts.authority.key().as_ref()],
                    DelegateConfig {
                        validator: validator.map(|v| v.key()),
                        ..Default::default()
                    },
                )?;
            }
            Ok(())
        }

        /// Create the ephemeral permission directly on the ER. Payer = the
        /// counter PDA (delegated), which carries its base-layer lamports onto
        /// the ER and signs via its program seeds. Idempotent: skip if the
        /// permission account already exists. Starts public; flip with
        /// `set_privacy`.
        pub fn init_permission(ctx: Context<PermissionContext>) -> Result<()> {
            if ctx.accounts.permission.lamports() > 0 {
                return Ok(());
            }
            let signers = [
                COUNTER_SEED,
                ctx.accounts.counter.authority.as_ref(),
                &[ctx.bumps.counter],
            ];
            CreateEphemeralPermissionCpi {
                payer: ctx.accounts.counter.to_account_info(),
                permissioned_account: ctx.accounts.counter.to_account_info(),
                permission: ctx.accounts.permission.to_account_info(),
                vault: ctx.accounts.ephemeral_vault.to_account_info(),
                magic_program: ctx.accounts.magic_program.to_account_info(),
                permission_program: ctx.accounts.permission_program.to_account_info(),
                args: EphemeralMembersArgs {
                    is_private: false,
                    members: vec![],
                },
            }
            .invoke_signed(&[&signers])?;
            Ok(())
        }

        /// Toggle the privacy flag on the ER. When private, only the counter's
        /// `authority` is allowed to read state via the TEE (logs, messages,
        /// balances). The authority is the only member; the member list is
        /// rebuilt every call so the authority can never lock itself out.
        pub fn set_privacy(ctx: Context<PermissionContext>, is_private: bool) -> Result<()> {
            let signers = [
                COUNTER_SEED,
                ctx.accounts.counter.authority.as_ref(),
                &[ctx.bumps.counter],
            ];
            let members = if is_private {
                vec![Member {
                    flags: TX_LOGS_FLAG | TX_MESSAGE_FLAG | TX_BALANCES_FLAG,
                    pubkey: ctx.accounts.counter.authority,
                }]
            } else {
                vec![]
            };
            UpdateEphemeralPermissionCpi {
                payer: ctx.accounts.counter.to_account_info(),
                permissioned_account: ctx.accounts.counter.to_account_info(),
                permission: ctx.accounts.permission.to_account_info(),
                vault: ctx.accounts.ephemeral_vault.to_account_info(),
                magic_program: ctx.accounts.magic_program.to_account_info(),
                permission_program: ctx.accounts.permission_program.to_account_info(),
                authority: ctx.accounts.counter.to_account_info(),
                authority_is_signer: false, // PDA signs via the seeds above
                args: EphemeralMembersArgs { is_private, members },
            }
            .invoke_signed(&[&signers])?;
            Ok(())
        }

        /// Close the ephemeral permission account on the ER, refunding rent to
        /// the counter PDA (the payer that originally deposited it).
        pub fn close_permission(ctx: Context<PermissionContext>) -> Result<()> {
            let signers = [
                COUNTER_SEED,
                ctx.accounts.counter.authority.as_ref(),
                &[ctx.bumps.counter],
            ];
            CloseEphemeralPermissionCpi {
                payer: ctx.accounts.counter.to_account_info(),
                permissioned_account: ctx.accounts.counter.to_account_info(),
                permission: ctx.accounts.permission.to_account_info(),
                vault: ctx.accounts.ephemeral_vault.to_account_info(),
                magic_program: ctx.accounts.magic_program.to_account_info(),
                permission_program: ctx.accounts.permission_program.to_account_info(),
                authority: ctx.accounts.counter.to_account_info(),
                authority_is_signer: false,
            }
            .invoke_signed(&[&signers])?;
            Ok(())
        }

        /// Commit + undelegate the counter when private execution is done. No
        /// separate permission undelegation step — ephemeral permissions are
        /// confined to the ER and were already cleaned up via `close_permission`
        /// (if called).
        pub fn undelegate(ctx: Context<UndelegateCounter>) -> Result<()> {
            MagicIntentBundleBuilder::new(
                ctx.accounts.payer.to_account_info(),
                ctx.accounts.magic_context.to_account_info(),
                ctx.accounts.magic_program.to_account_info(),
            )
            .commit_and_undelegate(&[ctx.accounts.counter.to_account_info()])
            .build_and_invoke()?;
            Ok(())
        }
    }
    ```

    [⬆️ 回到顶部](#code-snippets)
  </Tab>

  <Tab title="3. 部署">
    现在你的程序已经升级完毕、可以发布了！在目标集群上构建并部署：

    ```bash theme={null}
      anchor build && anchor deploy
    ```

    [⬆️ 回到顶部](#code-snippets)
  </Tab>

  <Tab title="4. 授权">
    在 TEE 中设置与 ER RPC 的交互：

    1. 通过 `https://pccs.phala.network/tdx/certification/v4` 验证 TEE RPC 的完整性
    2. 为用户请求一个授权令牌，用于与 TEE 端点进行交互

    ```typescript Web3.js theme={null}
    import {
      verifyTeeRpcIntegrity,
      getAuthToken,
    } from "@magicblock-labs/ephemeral-rollups-sdk";

    // Verify the integrity of the TEE RPC
    const isVerified = await verifyTeeRpcIntegrity(EPHEMERAL_RPC_URL);

    // Get an auth token before making requests to the TEE
    const token = await getAuthToken(
      EPHEMERAL_RPC_URL,
      wallet.publicKey,
      (message: Uint8Array) =>
        Promise.resolve(nacl.sign.detached(message, wallet.secretKey)),
    );
    ```

    [⬆️ 回到顶部](#code-snippets)
  </Tab>

  <Tab title="5. 测试">
    使用 Private Ephemeral Rollup 连接来测试你的程序：

    `https://devnet-tee.magicblock.app?token=${token}`

    <Note>
      <p>
        这些公共验证器可用于开发环境。请确保在你的委托指令中添加对应的
        ER 验证器：
      </p>

      **主网**

      <ul>
        <li>
          亚洲 (as.magicblock.app):{" "}
          <code>MAS1Dt9qreoRMQ14YQuhg8UTZMMzDdKhmkZMECCzk57</code>
        </li>

        <li>
          欧盟 (eu.magicblock.app):{" "}
          <code>MEUGGrYPxKk17hCr7wpT6s8dtNokZj5U2L57vjYMS8e</code>
        </li>

        <li>
          美国 (us.magicblock.app):{" "}
          <code>MUS3hc9TCw4cGC12vHNoYcCGzJG1txjgQLZWVoeNHNd</code>
        </li>

        <li>
          TEE (mainnet-tee.magicblock.app):{" "}
          <code>MTEWGuqxUpYZGFJQcp8tLN7x5v9BSeoFHYWQQ3n3xzo</code>
        </li>
      </ul>

      **开发网**

      <ul>
        <li>
          亚洲 (devnet-as.magicblock.app):{" "}
          <code>MAS1Dt9qreoRMQ14YQuhg8UTZMMzDdKhmkZMECCzk57</code>
        </li>

        <li>
          欧盟 (devnet-eu.magicblock.app):{" "}
          <code>MEUGGrYPxKk17hCr7wpT6s8dtNokZj5U2L57vjYMS8e</code>
        </li>

        <li>
          美国 (devnet-us.magicblock.app):{" "}
          <code>MUS3hc9TCw4cGC12vHNoYcCGzJG1txjgQLZWVoeNHNd</code>
        </li>

        <li>
          TEE (devnet-tee.magicblock.app):{" "}
          <code>MTEWGuqxUpYZGFJQcp8tLN7x5v9BSeoFHYWQQ3n3xzo</code>
        </li>
      </ul>

      **本地网络**

      <ul>
        <li>
          本地 ER (localhost:7799):{" "}
          <code>mAGicPQYBMvcYveUZA5F5UNNwyHvfYh5xkLS2Fr1mev</code>
        </li>
      </ul>
    </Note>

    ### 快速访问

    查看示例：

    <CardGroup cols={2}>
      <Card title="GitHub" icon="github" href="https://github.com/magicblock-labs/magicblock-engine-examples/tree/main/private-counter" iconType="duotone">
        Private Counter 的 Anchor 实现
      </Card>

      <Card title="在线示例应用" icon="shield-check" href="https://private-counter-example.magicblock.app/" iconType="duotone">
        试用 Private Counter
      </Card>
    </CardGroup>

    [⬆️ 回到顶部](#code-snippets)
  </Tab>
</Tabs>

***

<CardGroup cols={2}>
  <Card title="访问控制" icon="lock" href="/cn/pages/private-ephemeral-rollups-pers/how-to-guide/access-control" iconType="duotone">
    细粒度访问控制
  </Card>

  <Card title="链上隐私" icon="shield" href="/cn/pages/private-ephemeral-rollups-pers/introduction/onchain-privacy" iconType="duotone">
    隐私机制与核心概念
  </Card>

  <Card title="授权" icon="key" href="/cn/pages/private-ephemeral-rollups-pers/introduction/authorization" iconType="duotone">
    授权框架
  </Card>

  <Card title="合规框架" icon="certificate" href="/cn/pages/private-ephemeral-rollups-pers/introduction/compliance-framework" iconType="duotone">
    合规标准与指南
  </Card>
</CardGroup>

***

## Solana 浏览器

查看你在 Solana 上的交易和账户详情：

<CardGroup cols={2}>
  <Card title="Solana 浏览器" icon="search" href="https://explorer.solana.com/" iconType="duotone">
    官方 Solana 浏览器
  </Card>

  <Card title="Solscan" icon="searchengin" href="https://solscan.io/" iconType="duotone">
    浏览 Solana 区块链
  </Card>
</CardGroup>

## Solana RPC 提供商

通过现有 RPC 提供商发送交易和请求：

<CardGroup cols={2}>
  <Card title="Solana" icon="star" href="https://solana.com/docs/references/clusters#on-a-high-level" iconType="duotone">
    Free Public Nodes
  </Card>

  <Card title="Helius" icon="sun" href="https://www.helius.dev/solana-rpc-nodes" iconType="duotone">
    Free Shared Nodes
  </Card>

  <Card title="Triton" icon="crystal-ball" href="https://triton.one/solana" iconType="duotone">
    Dedicated High-Performance Nodes
  </Card>
</CardGroup>

## Solana 验证器仪表盘

查看 Solana 验证器基础设施的实时更新：

<CardGroup cols={2}>
  <Card title="Solana Beach" icon="wave" href="https://solanabeach.io/" iconType="duotone">
    Get Validator Insights
  </Card>

  <Card title="Validators App" icon="cloud-binary" href="https://www.validators.app/" iconType="duotone">
    Discover Validator Metrics
  </Card>
</CardGroup>

## 服务状态

订阅 Solana 与 MagicBlock 的服务状态：

<CardGroup cols={2}>
  <Card title="Solana Status" icon="server" href="https://status.solana.com/" iconType="duotone">
    Subscribe to Solana Server Updates
  </Card>

  <Card title="MagicBlock Status" icon="heart-pulse" href="/cn/pages/overview/additional-information/system-status" iconType="duotone">
    Subscribe to MagicBlock Server Status
  </Card>
</CardGroup>

***

## MagicBlock 产品

<CardGroup cols={2}>
  <Card title="Ephemeral Rollup（ER）" icon="bolt" href="/cn/pages/ephemeral-rollups-ers/how-to-guide/quickstart" iconType="duotone">
    在 Solana 上安全执行实时、零手续费交易。
  </Card>

  <Card title="Private Ephemeral Rollup（PER）" icon="shield-check" href="/cn/pages/private-ephemeral-rollups-pers/how-to-guide/quickstart" iconType="duotone">
    在合规的前提下保护敏感数据——基于 Ephemeral Rollups 构建。
  </Card>

  <Card title="私密支付 API" icon="bag-shopping-plus" href="/cn/pages/private-ephemeral-rollups-pers/api-reference/per/introduction" iconType="duotone">
    几秒钟为你的应用集成链上私密转账——默认合规。
  </Card>

  <Card title="Solana VRF" icon="dice" href="/cn/pages/verifiable-randomness-functions-vrfs/introduction/solana-vrf" iconType="duotone">
    为游戏、抽奖和实时应用添加可证明公平的链上随机数。
  </Card>

  <Card title="价格预言机" icon="waveform" href="/cn/pages/tools/oracle/introduction" iconType="duotone">
    获取适用于交易和 DeFi 的低延迟链上价格数据。
  </Card>
</CardGroup>

***
