# 费用体系详解

## 概述

MemeDice 采用 **三层费用结构**，确保平台、游戏创建者和 Oracle 服务的可持续运营。所有费用参数在合约部署时确定，平台费率不可修改，所有者费率有硬编码上限保护。

***

## 费用结构总览

```mermaid
graph TD
    A[玩家下注金额] --> B{费用分配}
    B -->|平台费| C[开发者<br/>devWallet]
    B -->|所有者费| D[游戏所有者]
    B -->|Oracle 费| E[Oracle 服务<br/>仅 Oracle 模式]
    B -->|净下注额| F[进入游戏逻辑]
    
    style C fill:#4F46E5,color:#fff
    style D fill:#7C3AED,color:#fff
    style E fill:#D97706,color:#fff
    style F fill:#059669,color:#fff
```

### 三层费用

| 层级      | 名称             | 收取方          | 可修改          | 上限        |
| ------- | -------------- | ------------ | ------------ | --------- |
| **第一层** | 平台费（devFee）    | dapp.meme 平台 | ❌ 不可变        | 部署时确定(1%) |
| **第二层** | 所有者费（ownerFee） | 游戏创建者        | ✅ 可调整(0%-9%) | 9%（硬编码）   |
| **第三层** | Oracle 费       | Oracle 服务    | ❌ 不可变        | 极低        |

***

## 各环节费用详解

### 1. 下注费用

玩家每次下注时，从下注金额中扣除费用：

```
净下注额 = 下注金额 - 平台下注费 - 所有者下注费
```

| 费用     | 计算方式                               | 说明        |
| ------ | ---------------------------------- | --------- |
| 平台下注费  | `betAmount × devBetFeeBps / 10000` | 不可变，部署时确定 |
| 所有者下注费 | `betAmount × ownerFeeBps / 10000`  | 可调整，上限 9% |

**示例**：假设平台费 1%，所有者费 2%，下注 100 USDT

```
平台费 = 100 × 100 / 10000 = 1 USDT
所有者费 = 100 × 200 / 10000 = 2 USDT
净下注额 = 100 - 1 - 2 = 97 USDT
```

### 2. 提款费用

股东提取份额时，从提取金额中扣除费用：

```
实际到手 = 提取金额 - 平台提款费 - 所有者提款费
```

| 费用     | 计算方式                                         | 说明  |
| ------ | -------------------------------------------- | --- |
| 平台提款费  | `withdrawAmount × devWithdrawFeeBps / 10000` | 不可变 |
| 所有者提款费 | `withdrawAmount × ownerFeeBps / 10000`       | 可调整 |

### 3. Oracle 费用

使用 Oracle 模式时，每次下注需要额外支付 Oracle 服务费（以原生代币支付，如 ETH/BNB）：

| 费用       | 支付方式          | 说明               |
| -------- | ------------- | ---------------- |
| Oracle 费 | 原生代币（ETH/BNB） | 随 `msg.value` 支付 |

Oracle 费用用于覆盖：

* Oracle 揭示随机数的 gas 费用
* Oracle 服务的运营成本
* 费用极低几乎可忽略

### 4. 部署费用

部署游戏时需要支付部署费（以原生代币支付）：

```
总部署费 = 基础部署费 + 域名溢价
```

| 费用    | 说明              |
| ----- | --------------- |
| 基础部署费 | 平台收取的固定费用       |
| 域名溢价  | 短域名（3-4字符）的额外费用 |

详细的域名定价请参阅 [域名与定价](/chuang-jian-you-xi/yu-ming-yu-ding-jia.md)。

***

## 奖金计算

当玩家赢得下注时，奖金的计算方式：

```
有效下注额 = 净下注额（扣除费用后）
奖金 = 有效下注额 × (10000 / winRateParam - 1)
玩家获得 = 有效下注额 + 奖金
```

### 计算示例

| 参数    | 值                         |
| ----- | ------------------------- |
| 下注金额  | 100 USDT                  |
| 平台费率  | 1%                        |
| 所有者费率 | 2%                        |
| 胜率    | 50% (winRateParam = 5000) |

```
平台费 = 100 × 1% = 1 USDT
所有者费 = 100 × 2% = 2 USDT
有效下注额 = 100 - 1 - 2 = 97 USDT

赔率 = 10000 / 5000 = 2.0x
奖金 = 97 × (2.0 - 1) = 97 USDT
玩家获得 = 97 + 97 = 194 USDT

实际赔率 = 194 / 100 = 1.94x（低于理论赔率 2.0x，差额即为费用）
```

***

## 费用流向图

```mermaid
graph TD
    subgraph 下注流程
        A[玩家下注 100] --> B[平台费 1]
        A --> C[所有者费 2]
        A --> D[净下注额 97]
    end
    
    subgraph 结果
        D --> E{赢/输?}
        E -->|输| F[97 进入资金池]
        E -->|赢| G[97 + 奖金 从资金池支付]
    end
    
    B --> H[平台钱包]
    C --> I[所有者钱包]
    
    style H fill:#4F46E5,color:#fff
    style I fill:#7C3AED,color:#fff
    style F fill:#059669,color:#fff
```

***

## 费率保护机制

### 所有者费率上限

```
MAX_FEE_BPS = 900（即 9%）
```

合约硬编码了所有者费率的上限为 9%，即使管理员恶意操作也无法超过此限制。

### 平台费率不可变

平台费率（`devBetFeeBps`、`devDepositFeeBps`、`devWithdrawFeeBps`）作为合约的 **不可变量（Immutable）**，在部署时确定，之后永远无法修改。

### 费率变更透明

所有者费率的每次变更都会在链上产生事件，记录在 [链上日志](/pai-xing-bang-yu-ri-zhi/lian-shang-ri-zhi-yu-you-xi-tou-ming-du.md) 中，任何人可查。

***

## 费用对比表

以不同费率配置为例，展示 100 USDT 下注的费用分配：

| 配置   | 平台费  | 所有者费 | 净下注额 | 50% 胜率赔率 |
| ---- | ---- | ---- | ---- | -------- |
| 低费率  | 0.5% | 0%   | 99.5 | 1.99x    |
| 标准费率 | 1%   | 2%   | 97   | 1.94x    |
| 高费率  | 1%   | 5%   | 94   | 1.88x    |
| 最高费率 | 1%   | 9%   | 90   | 1.80x    |

> 💡 费率越低，玩家的实际赔率越接近理论赔率，游戏对玩家越有利。

***

## 相关链接

* ⬅️ 返回 [技术深度概览](/ji-shu-gai-lan/ji-shu-shen-du-gai-lan.md)
* 🏗️ 了解 [智能合约架构](/ji-shu-gai-lan/zhi-neng-he-yue-jia-gou.md)
* ⚙️ 了解 [游戏管理](/guan-li-you-xi/you-xi-guan-li-gai-lan.md)（费率调整）
* 💰 了解 [投资入股](/ti-gong-liu-dong-xing-lp/you-xi-ru-gu-zhi-nan.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/ji-shu-gai-lan/fei-yong-ti-xi-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.
