# 股东系统详解

## 概述

MemeDice 的股东系统采用 **Vault 风格的全局累加器模式**，这是一种经过验证的 DeFi 设计模式，能够以 **O(1) 的 gas 成本** 处理存款和提款操作，无论股东数量多少。

***

## 核心机制

### 份额（Shares）vs 代币（Tokens）

股东系统的核心是将 **代币数量** 与 **份额数量** 分离：

* **代币（Tokens）**：资金池中实际的 Token 代币数量，会随着游戏盈亏而变化
* **份额（Shares）**：代表股东在资金池中的占比，存入后不会因游戏盈亏而改变

```
你的实际价值 = 资金池总代币 × (你的份额 / 总份额)
```

### 存款：代币 → 份额

当你存入代币时，系统根据当前的 **代币/份额比率** 计算你获得的份额数：

```
获得份额 = 存入代币数 × (当前总份额 / 当前资金池总代币)
```

**特殊情况**：如果资金池为空（首个存款），则 `份额 = 代币数`（1:1 比率）。

#### 示例

| 场景     | 资金池代币 | 总份额   | 存入代币  | 获得份额  |
| ------ | ----- | ----- | ----- | ----- |
| 首个存款   | 0     | 0     | 1,000 | 1,000 |
| 资金池增长后 | 2,000 | 1,000 | 1,000 | 500   |
| 资金池缩水后 | 500   | 1,000 | 1,000 | 2,000 |

### 提款：份额 → 代币

提款时，系统将你的 **全部份额** 转换回代币：

```
提取代币 = 资金池总代币 × (你的份额 / 总份额) - 费用
```

> ⚠️ **注意**：提款是全额提取，不支持部分提款。提款后你的份额归零。

***

## 盈亏传导机制

### 玩家输钱 → 股东赚钱

```mermaid
sequenceDiagram
    participant P as 玩家
    participant Pool as 资金池
    participant S as 股东们

    P->>Pool: 下注 100 代币
    Note over Pool: 随机数判定：玩家输
    Pool->>Pool: 资金池 +100（扣除费用后）
    Note over S: 份额不变，但每份额<br/>对应的代币数增加了
    S-->>S: 📈 份额增值
```

### 玩家赢钱 → 股东亏钱

```mermaid
sequenceDiagram
    participant P as 玩家
    participant Pool as 资金池
    participant S as 股东们

    P->>Pool: 下注 100 代币
    Note over Pool: 随机数判定：玩家赢
    Pool->>P: 支付奖金
    Note over Pool: 资金池减少
    Note over S: 份额不变，但每份额<br/>对应的代币数减少了
    S-->>S: 📉 份额贬值
```

***

## 完整生命周期示例

以下是一个完整的投资生命周期示例：

### 第 1 步：Alice 存入 1,000 USDT

| 状态       | 值            |
| -------- | ------------ |
| 资金池代币    | 1,000 USDT   |
| 总份额      | 1,000        |
| Alice 份额 | 1,000 (100%) |
| Alice 价值 | 1,000 USDT   |

### 第 2 步：Bob 存入 1,000 USDT

| 状态       | 值           |
| -------- | ----------- |
| 资金池代币    | 2,000 USDT  |
| 总份额      | 2,000       |
| Alice 份额 | 1,000 (50%) |
| Bob 份额   | 1,000 (50%) |

### 第 3 步：玩家输了 200 USDT

| 状态       | 值                                       |
| -------- | --------------------------------------- |
| 资金池代币    | 2,200 USDT                              |
| 总份额      | 2,000（不变）                               |
| Alice 价值 | 2,200 × 1,000/2,000 = **1,100 USDT** 📈 |
| Bob 价值   | 2,200 × 1,000/2,000 = **1,100 USDT** 📈 |

### 第 4 步：Charlie 此时存入 1,100 USDT

```
Charlie 获得份额 = 1,100 × (2,000 / 2,200) = 1,000
```

| 状态         | 值                                    |
| ---------- | ------------------------------------ |
| 资金池代币      | 3,300 USDT                           |
| 总份额        | 3,000                                |
| Alice 价值   | 3,300 × 1,000/3,000 = **1,100 USDT** |
| Bob 价值     | 3,300 × 1,000/3,000 = **1,100 USDT** |
| Charlie 价值 | 3,300 × 1,000/3,000 = **1,100 USDT** |

> 💡 注意：Charlie 存入 1,100 USDT 获得 1,000 份额，因为此时每份额价值 1.1 USDT。这确保了 Charlie 不会稀释 Alice 和 Bob 的收益。

### 第 5 步：玩家赢了 300 USDT

| 状态         | 值                                       |
| ---------- | --------------------------------------- |
| 资金池代币      | 3,000 USDT                              |
| 总份额        | 3,000（不变）                               |
| Alice 价值   | 3,000 × 1,000/3,000 = **1,000 USDT** 📉 |
| Bob 价值     | **1,000 USDT** 📉                       |
| Charlie 价值 | **1,000 USDT** 📉                       |

### 第 6 步：Alice 提款

Alice 提取全部份额，获得 1,000 USDT（扣除费用前）。

| 状态         | 值                                    |
| ---------- | ------------------------------------ |
| 资金池代币      | 2,000 USDT                           |
| 总份额        | 2,000                                |
| Bob 价值     | 2,000 × 1,000/2,000 = **1,000 USDT** |
| Charlie 价值 | **1,000 USDT**                       |

***

## O(1) Gas 效率

传统的收益分配方式需要遍历所有股东来分配收益，gas 成本随股东数量线性增长。MemeDice 的 Vault 模式通过以下方式实现 O(1) 效率：

| 操作     | 传统方式          | Vault 模式      |
| ------ | ------------- | ------------- |
| 玩家下注结算 | 遍历所有股东分配 O(n) | 仅更新资金池总额 O(1) |
| 存款     | O(1)          | O(1)          |
| 提款     | O(1)          | O(1)          |
| 查询份额价值 | O(1)          | O(1)          |

**关键洞察**：游戏结算时不需要更新任何股东的数据，只需要更新资金池总额。每个股东的实际价值在查询时动态计算。

***

## 资金池限制

游戏创建者可以设置以下限制来控制资金池：

| 参数                | 说明      | 默认值    |
| ----------------- | ------- | ------ |
| `minDeposit`      | 最小存款金额  | 由创建者设定 |
| `maxDeposit`      | 最大存款金额  | 由创建者设定 |
| `maxPoolCap`      | 资金池最大容量 | 由创建者设定 |
| `maxShareholders` | 最大股东数量  | 由创建者设定 |
| `depositEnabled`  | 是否允许新存款 | true   |

***

## 待结算资金锁定

为了保护股东利益，合约使用 `pendingLockedAmount` 机制：

* 当玩家下注时，潜在的最大赔付金额会被 **锁定**
* 锁定的金额不计入可用资金池余额
* 这确保了即使多个玩家同时赢钱，资金池也有足够的代币支付

```
可用余额 = 资金池总额 - 待结算锁定金额
```

***

## 管理员操作

游戏管理员（owner）对股东系统有以下权限：

| 操作    | 说明          | 风险等级       |
| ----- | ----------- | ---------- |
| 开关存款  | 控制是否允许新存款   | 🟢 低       |
| 移除股东  | 强制提取某个股东的份额 | 🔴 高（危险操作） |
| 资金池提款 | 从资金池中提取代币   | 🔴 高（危险操作） |

> ⚠️ 如果游戏已 **去中心化**（owner 设为零地址），则管理员无法执行上述操作，股东资金完全由合约保护。

详细的管理员操作请参阅 [游戏管理](/guan-li-you-xi/you-xi-guan-li-gai-lan.md)。

***

## 投资策略建议

> 💡 以下仅为一般性建议，不构成投资建议。

1. **分散投资**：不要将所有资金投入单一游戏
2. **关注资金池大小**：较大的资金池波动相对较小
3. **查看游戏历史**：通过排行榜和日志了解游戏的盈亏趋势
4. **注意去中心化状态**：去中心化的游戏更安全，管理员无法提取资金池
5. **了解费用**：存款和提款都有费用，频繁进出会增加成本

***

## 相关链接

* ⬅️ 返回 [投资入股概览](/ti-gong-liu-dong-xing-lp.md)
* 📊 查看 [排行榜](/pai-xing-bang-yu-ri-zhi/pai-xing-bang-yu-ri-zhi-gai-lan.md) 中的股东排行
* 🔒 了解 [游戏安全性](/ji-shu-gai-lan/you-xi-an-quan-xing.md)
* 💸 了解 [费用体系](/ji-shu-gai-lan/fei-yong-ti-xi-xiang-jie.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.dapp.meme/ti-gong-liu-dong-xing-lp/gu-dong-xi-tong-xiang-jie.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
