以太坊學術論文深度解讀系列(一):Gasper 共識協議安全性證明的完整數學推導

Gasper 是以太坊在 The Merge 後採用的共識協議,結合了 CBC 方法論和 LMD Ghost 分叉選擇規則。本文從形式化角度逐步推導 Gasper 的安全性證明,涵蓋 FFG 的最終確定性(Censorship Resilience)、Ghost 的分叉選擇邏輯、罰沒條件的數學基礎、以及活性的數學證明。我們提供完整的數學推導過程,包括雙重投票和環繞投票的防禦機制、安全閾值的推導、以及實際攻擊成本估算。這是深入掌握以太坊共識機制的核心參考資料。

以太坊學術論文深度解讀系列(一):Gasper 共識協議安全性證明的完整數學推導

概述

Gasper 是以太坊在 The Merge 後採用的共識協議,全稱為「Greedy Heaviest Observed Sub-Tree + Casper FFG」。它結合了 CBC(Casper the Friendly Friendship / Correct by Construction)方法論和 LMD Ghost(Latest Message-Driven Greedy Heaviest Observed Sub-Tree)分叉選擇規則。理解 Gasper 的安全性證明是深入掌握以太坊共識機制的核心,對於協議研究者、安全審計師和網路工程師而言至關重要。

本文將從形式化角度逐步推導 Gasper 的安全性證明,涵蓋:FFG 的最終確定性(Censorship Resilience)、Ghost 的分叉選擇邏輯、以及兩者結合後的安全保障。我們將使用數學符號嚴格描述每個概念,並提供完整的推導過程。

第一部分:共識協議的基礎理論

1.1 共識問題的形式化定義

區塊鏈共識協議需要解決的核心問題是:在異步網路中,分散的驗證者如何就區塊鏈的單一歷史達成一致?

共識協議的安全性定義:

    安全属性 (Safety):
    定義:協議不會產生兩個不同高度的「衝突區塊」,即:
    
    ∀ h ∈ ℕ, ∀ B₁, B₂ ∈ Blocks_at_height(h):
        assert not (is_justified(B₁) ∧ is_justified(B₂) ∧ B₁ ≠ B₂)
    
    其中:
    - Blocks_at_height(h): 高度為 h 的所有區塊集合
    - is_justified(B): 區塊 B 是否已達到「合理化」狀態
    
    活性属性 (Liveness):
    定義:區塊鏈持續增長,新區塊不斷被提議和確認:
    
    ∃ ε > 0, ∀ chain C, ∃ 區塊序列 B₁, B₂, ... :
        all_finalized(B₁, B₂, ...) 形成一條增長的區塊鏈

1.2 拜占庭將軍問題的數學表述

拜占庭將軍問題(Byzantine Generals Problem)是共識協議設計的理論基礎:

拜占庭將軍問題:

    假設:
    - n 個將軍,其中最多 f 個叛徒
    - 將軍之間通過信使通信(可能丟失或延遲)
    - 每個將軍需要做出「進攻」或「撤退」的決定
    
    目標:
    1. 一致性:所有忠誠將軍做出相同的決定
    2. 有效性:如果大多數將軍是忠誠的,則最終決定是大多數將軍的初始意圖
    
    定理(Lamport, Shostak, Pease, 1982):
    在同步網路中,當且僅當 n > 3f 時,拜占庭共識是可實現的。
    
    證明思路:
    1. 若 n ≤ 3f,無法區分叛徒和延遲消息
    2. 若 n > 3f,忠誠將軍佔據嚴格多數,可達成共識

1.3 FFG 的設計哲學

Casper FFG(Casper the Friendly Ghost / Friendly Finality Gadget)的設計哲學是「友好最終性」——不要求即時確認,但確保已確認區塊的不可逆性。

FFG 的核心設計原則:

    原則 1:帳戶模型(Accountable Safety)
    - 所有違反協議的驗證者都會被識別和懲罰
    - 罰沒條件明確定義,可通過密碼學證明驗證
    
    原則 2:可選活性(Optional Liveness)
    - 即使網路長時間分區,協議也能恢復
    - 不依賴同步假設來確保安全性
    
    原則 3:錯誤可恢復(Recovery from Malicious Majority)
    - 即使攻擊者控制了大多數驗證者,系統仍可恢復
    - 通過罰沒和退出機制削減攻擊者影響力

第二部分:Casper FFG 的形式化定義

2.1 檢查點與 Justification 結構

FFG 使用「檢查點」(Checkpoint)機制來實現最終確定性:

檢查點結構:

    定義:檢查點是固定間隔區塊高度的區塊
    在以太坊中:每 32 個 slot 為一個 epoch
    每個 epoch 的第一個區塊(區塊 0)為檢查點
    
    檢查點表示:
    Checkpoint = (epoch_number, block_hash)
    
    驗證者職責:
    - 對 (epoch₁, epoch₂) 對投票,其中 epoch₂ > epoch₁
    - 投票是 (source, target) 對,表示「我相信從 source 到 target 的鏈是正確的」

Justification 圖的定義

Justification 結構:

    每個檢查點 B 有三個狀態:
    1. 無投票:尚未被合理化
    2. 合理性化 (Justified):收到了 2/3+ 驗證者的投票
    3. 最終確定 (Finalized):作為合理性化檢查點的目標,且其子檢查點也合理性化
    
    Justification 圖:
    G = (V, E)
    其中:
    - V: 檢查點集合
    - E: 投票邊集合 {(s, t) | s → t 是有效的投票}

2.2 投票與合理性化

投票的形式化定義:

    Vote = (source_epoch, target_epoch, validator_id)
    
    約束條件:
    1. source_epoch < target_epoch
    2. source_epoch 和 target_epoch 都是檢查點 epoch
    3. 驗證者之前未投過相同方向的票
    
    合理性化條件:
    is_justified(B) ⟺
        |{v | v.source = B.parent AND v.target = B}| ≥ 2n/3 + 1
    
    其中:
    - n: 驗證者總數
    - 2n/3 + 1: 超級多數

2.3 最終確定性的推導

最終確定性條件(Finalization):

    定理:Casper FFG 的最終確定性
    
    is_finalized(B) ⟺
        ∧(1) is_justified(B)                    // B 已合理性化
        ∧(2) B.parent 已合理性化                // 父區塊也已合理性化
        ∧(3) > 2n/3 驗證者投票了 (B.parent → B) // 超級多數投票
    
    幾何解釋:
    
    ┌─────────────────────────────────────────────────────────────────┐
    │                                                                      │
    │     epoch:    k-2      k-1       k        k+1      k+2           │
    │              ┌─────┐  ┌─────┐  ┌─────┐  ┌─────┐  ┌─────┐         │
    │              │  C  │  │  A  │  │  B  │  │     │  │     │         │
    │              └─────┘  └─────┘  └─────┘  └─────┘  └─────┘         │
    │                   ▲         ▲         ▲                              │
    │                   │         │         │                              │
    │              >2/3 votes >2/3 votes >2/3 votes                        │
    │                                                                      │
    │  若 epoch k 和 epoch k-1 都合理性化,且 >2/3 投票 (k-1 → k)         │
    │  則 epoch k 最終確定                                                   │
    │                                                                      │
    └─────────────────────────────────────────────────────────────────┘

2.4 雙重確認攻擊的防禦

雙重確認攻擊(Dual Finalization Attack)分析:

    攻擊場景:
    攻擊者控制了 > 1/3 的驗證者,試圖同時確認兩個衝突的區塊
    
    攻擊代價計算:
    
    假設攻擊者控制了 a × n 個驗證者(a > 1/3)
    
    為了在 epoch k 達成雙重確認,攻擊者需要:
    1. 讓 2n/3 + 1 個驗證者投票給第一個分支
    2. 讓另外 2n/3 + 1 個驗證者投票給第二個分支
    
    由於驗證者不能在同一 epoch 投兩票,攻擊者需要:
    - 至少 4n/3 + 2 個驗證者參與
    
    但總驗證者只有 n 個,因此:
    a × n ≥ 4n/3 + 2
    a ≥ 4/3 + 2/n
    a > 1.33
    
    結論:要發動雙重確認攻擊,攻擊者需要控制超過 1/3 的驗證者
    這與安全假設(安全閾值為 1/3)一致

第三部分:LMD Ghost 分叉選擇規則

3.1 Ghost 算法的核心思想

Ghost(Greedy Heaviest Observed Sub-Tree)算法解決的是:在存在多條競爭鏈的情況下,如何選擇「最重」的鏈?

Ghost 算法形式化定義:

    定義:每個區塊有一個「權重」,等於所有支持該區塊的消息總和
    
    weight(B) = Σ_{v in validators} count(votes_for_subtree_rooted_at_B)
    
    分叉選擇規則:
    
    fork_choice(chain₁, chain₂) =
        argmax_{chain} weight(head(chain))
    
    其中 head(chain) 是鏈的最新區塊
    
    Greedy 特性:
    Ghost 總是選擇包含「當前已知的最大權重子樹」的分支

3.2 LMD(Latest Message Driven)優化

LMD Ghost 的優化:

    原始 Ghost 的問題:
    - 每條消息都可能影響權重計算
    - 計算複雜度 O(m × n),其中 m 是消息數,n 是驗證者數
    
    LMD 優化:
    - 每個驗證者只計算「最新消息」的權重
    - 忽略歷史消息(已被新消息取代)
    
    形式化定義:
    
    LMD_weight(B) = Σ_{v in validators} 
        {1 if latest_message(v) is descendant of B, 0 otherwise}
    
    其中:
    latest_message(v) = 最具體的由 v 簽名的消息
    
    複雜度降低:O(n) per block (假設每個驗證者每 epoch 一條消息)

3.3 LMD Ghost 的安全性分析

定理:LMD Ghost 的安全性證明

    假設:
    1. 網路延遲上限 Δ(同步假設)
    2. 驗證者集合大小為 n
    3. 攻擊者控制 a × n 個驗證者(a < 1/3)
    
    定義:
    - G(t): 時間 t 的區塊樹
    - CFG(t): 時間 t 的規範分叉選擇圖(Canonical Fork Choice Graph)
    
    引理 1:LMD Ghost 的利差保證(Yield Gap Guarantee)
    
    在任何時間 t,假設 honest validators 的最新消息集合為 H(t),
    攻擊者的最新消息集合為 A(t),
    則攻擊者無法在 G(t) 中創建一個比 H(t) 更重的分支,
    除非攻擊者控制了超過 1/3 的驗證者。
    
    證明:
    設攻擊者控制的驗證者數為 a × n
    誠實驗證者數為 (1-a) × n
    
    在同步網路中,誠實驗證者會在收到區塊後的 Δ 時間內,
    將其最新消息更新為對該區塊的支持。
    
    因此,在任何時段 [t-Δ, t] 內,
    誠實驗證者的最新消息支持的分叉重量至少為 (1-a) × n
    
    攻擊者要創建更重的分叉,需要其支持分叉重量 > (1-a) × n
    這要求攻擊者控制的驗證者數 > (1-a) × n
    即 a > 1/2(矛盾)

第四部分:Gasper 的組合安全性

4.1 FFG 與 LMD Ghost 的結合

Gasper 協議架構:

┌─────────────────────────────────────────────────────────────────────┐
│                          Gasper                                     │
│                                                                      │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │              FFG (Casper FFG)                               │  │
│  │  - 負責最終確定性                                           │  │
│  │  - 以 epoch 為單位(32 slots)                             │  │
│  │  - 投票格式:(source_epoch, target_epoch)                   │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                              │                                      │
│                              │ 組合方式                             │
│                              ▼                                      │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │              LMD Ghost                                      │  │
│  │  - 負責分叉選擇                                             │  │
│  │  - 以 slot 為單位                                           │  │
│  │  - 考慮驗證者的「最新消息」                                 │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

組合邏輯:
1. FFG 在 epoch 邊界提供最終確定性
2. LMD Ghost 在每個 slot 提供即時分叉選擇
3. 最終確定的區塊一定是 LMD Ghost 選擇的區塊的祖先

4.2 安全性的組合證明

定理:Gasper 的組合安全性

    定理描述:
    在以下假設下,Gasper 協議同時滿足安全性和活性:
    1. 網路同步性:消息在 Δ 時間內可送達
    2. 驗證者誠實比例:> 2/3 的驗證者是誠實的
    3. 驗證者可用性:誠實驗證者在線且正確運行
    
    安全性證明:
    
    Step 1: 證明 FFG 的最終確定性
    
    引理 2:FFG 不可能產生衝突的最終區塊
    證明:假設存在兩個衝突的最終區塊 B₁, B₂
    
    由於 FFG 的最終確定性條件,要最終確定 B₁ 和 B₂:
    - 都需要 > 2n/3 的驗證者投票支持
    - 這些投票必須分別支持不同的 epoch
    
    但每個驗證者每 epoch 只能投一票,
    因此支持 B₁ 和 B₂ 的驗證者集合必須是不同的。
    
    要同時滿足兩個最終確定條件:
    |Voters_for_B₁| + |Voters_for_B₂| > 4n/3
    
    但總驗證者數只有 n,因此:
    矛盾!
    
    Step 2: 證明 LMD Ghost 與 FFG 的一致性
    
    引理 3:最終確定的區塊必然是 LMD Ghost 選擇的祖先
    
    證明:
    - 只有被 LMD Ghost 選擇的區塊才能獲得驗證者的消息
    - FFG 的投票基於 LMD Ghost 的選擇
    - 因此,最終確定的區塊必然是 LMD Ghost 選擇結果的子集

4.3 安全性閾值的數學推導

安全性閾值分析:

    定義以下符號:
    - n: 驗證者總數
    - f: 攻擊者控制的驗證者數
    - α = f/n: 攻擊者比例
    
    FFG 的安全閾值:
    
    要發動「雙重確認攻擊」:
    - 需要 2n/3 + 1 個驗證者投票支持每個分支
    - 由於驗證者不能重複投票,需要至少 4n/3 個驗證者
    - 這要求 α ≥ 4/3(不可能)
    
    因此,FFG 對「雙重確認攻擊」是安全的,只要 α < 1/3
    
    LMD Ghost 的安全閾值:
    
    要發動「長時間攻擊」:
    - 攻擊者需要控制足夠多的驗證者,使其最新消息在 LMD Ghost 中權重大於誠實驗證者
    - 在同步網路中,誠實驗證者會持續更新其最新消息
    - 攻擊者要追上誠實鏈,需要:
      α × n > (1-α) × n × (t/Δ)
    
    其中 t 是攻擊持續時間,Δ 是消息延遲上限
    
    當攻擊者比例 α < 1/3 時,攻擊者無法在長期內追上誠實鏈
    
    組合安全性:
    
    定理:Gasper 的組合安全性
    
    當滿足以下條件時,Gasper 協議不會產生衝突的最終區塊:
    α < 1/3
    
    證明:
    由引理 2,FFG 不會產生衝突的最終區塊
    由引理 3,LMD Ghost 的選擇與 FFG 一致
    因此,Gasper 組合後也不會產生衝突的最終區塊

第五部分:罰沒條件的數學基礎

5.1 罰沒條件的形式化定義

Gasper 罰沒條件(Slashing Conditions):

    條件一:雙重投票(Double Vote)
    定義:驗證者投了兩個投票 (s₁, t₁) 和 (s₂, t₂),其中 t₁ = t₂
    
    圖示:
    ────epoch────▶
    
    v1 ───────●──────────────────●───────  (s1, t) 和 (s2, t)
              source₁          target
    
    罰沒:整個質押金額的 1/32
    
    條件二:環繞投票(Surround Vote)
    定義:驗證者投了兩個投票 (s₁, t₁) 和 (s₂, t₂),
          其中 s₂ < s₁ < t₁ < t₂
    
    圖示:
    
    epoch:     s₂    s₁         t₁    t₂
              ──●───●───────────●────●──▶
    
    v1:      (s₂, t₂) 環繞  (s₁, t₁)
    
    罰沒:整個質押金額

5.2 罰沒條件的必要性證明

引理:為什麼需要這兩個罰沒條件?

    1. 雙重投票的危險性:
    
    若允許雙重投票,攻擊者可以:
    - 在 epoch k 的兩個不同目標區塊上,分別集結 2n/3 的投票
    - 這會導致網路分裂成兩個最終確定的分支
    
    證明:
    假設存在雙重投票但沒有罰沒條件
    攻擊者可以:
    1. 讓 n/3 + 1 個驗證者投票給分支 A
    2. 讓另一組 n/3 + 1 個驗證者投票給分支 B
    3. 重複這個過程,最終達成兩個衝突的最終確定
    
    2. 環繞投票的危險性:
    
    環繞投票允許驗證者「撤回」之前的投票:
    
    攻擊場景:
    1. 攻擊者讓驗證者投票 (s₁, t₁),其中 t₁ 是 epoch k
    2. 這使得 epoch k 合理性化
    3. 攻擊者讓驗證者投票 (s₂, t₂),其中 s₂ < s₁ 且 t₂ > t₁
    4. 這「環繞」了之前的投票,實質上推翻了 epoch k 的合理性化
    
    結果:
    - 攻擊者可以「重寫」已合理性化的歷史
    - 破壞了 FFG 的最終確定性保證

5.3 罰沒觸發概率分析

罰沒觸發的數學分析:

    單個驗證者的罰沒概率(假設攻擊):
    
    攻擊者控制了 f 個驗證者
    
    1. 雙重投票概率:
    
    P(double_vote) = C(f, 2) / C(n, 2)
                    ≈ (f² - f) / (n² - n)
                    ≈ (f/n)²
    
    2. 環繞投票概率:
    
    環繞投票的發生需要投票在「錯誤的」epoch 上
    這通常是由於網路延遲導致的「誠實分歧」
    
    P(surround_vote) ≈ (Δ / epoch_time) × (f/n)
    
    實際風險估算:
    
    假設:
    - n = 10000 驗證者
    - f = 1000 (攻擊者,10%)
    - Δ = 1 slot (網路延遲)
    - epoch_time = 32 slots
    
    P(double_vote) ≈ (0.1)² = 1%
    
    P(surround_vote) ≈ (1/32) × 0.1 ≈ 0.3%
    
    結論:即使攻擊者控制 10% 的驗證者,
    正常操作下觸發罰沒的概率極低

第六部分:活性的數學證明

6.1 活性的定義

Gaspe 的活性定義(Eventual Liveness):

    定義:考慮一個「理想」的觀察者,假設:
    1. 網路最終同步
    2. 誠實驗證者最終在線
    
    在這些假設下,Gasper 會:
    - 持續提出新區塊
    - 持續對這些區塊投票
    - 最終達到新的最終確定
    
    形式化:
    
    ∃ T > 0, ∀ t ≥ T:
        is_finalized(chain_with_max_weight(t))
    
    即:存在一個時間點 T,從此之後,
    由 LMD Ghost 選擇的鏈會不斷最終確定

6.2 活性證明的關鍵引理

引理 4:超級多數投票可達性

    假設網路同步,且誠實驗證者佔比 > 2/3
    則在每個 epoch 的最後一個 slot,
    誠實驗證者可以達成超級多數投票
    
    證明:
    設 epoch k 的目標區塊為 B_k
    
    1. 在 slot k×32 + 1 到 k×32 + 31:
       驗證者提出區塊並進行 LMD Ghost 投票
    
    2. 在 slot k×32 + 32(epoch k 的最後一個 slot):
       所有誠實驗證者都會投票給 B_k
       因為他們的 LMD Ghost 最新消息都指向 B_k 的祖先
    
    3. 誠實驗證者數量 > 2n/3
       因此,投票數量 > 2n/3
    
    QED

6.3 最終確定的持續性證明

定理:Gasper 的活性

    定理描述:
    在網路最終同步和誠實驗證者佔比 > 2/3 的條件下,
    Gasper 會持續對新區塊達成最終確定。
    
    證明:
    
    歸納法:
    
    基例:初始狀態
    - Genesis 區塊是初始的合理性化區塊
    - 假設 epoch 0 最終確定(通過外部假設)
    
    歸納假設:
    假設 epoch k-1 已最終確定
    
    歸納步驟:證明 epoch k 可最終確定
    
    1. 由引理 4,在 epoch k 的最後一個 slot,
       > 2n/3 的驗證者投票給 (k-1 → k)
       
    2. 因此,epoch k 達到合理性化
    
    3. 同理,在 epoch k+1 的最後一個 slot,
       > 2n/3 的驗證者投票給 (k → k+1)
       
    4. 由 FFG 的最終確定性條件,
       epoch k 達到最終確定
    
    由數學歸納法,所有後續 epoch 都會持續最終確定
    
    QED

第七部分:實際安全性參數

7.1 以太坊的具體參數

以太坊 Gasper 參數(2026 年):

    驗證者數量:n ≈ 1,163,456
    最小質押量:32 ETH
    Epoch 長度:32 slots
    Slot 時間:12 秒
    Epoch 時間:6.4 分鐘
    
    罰沒參數:
    ┌──────────────────────────────────────────────────────────────┐
    │  條件              │  罰沒比例  │  禁入期                     │
    ├──────────────────────────────────────────────────────────────┤
    │  雙重投票          │  1/1 (全部) │  2 epochs (~13 分鐘)     │
    │  環繞投票          │  1/1 (全部) │  2 epochs                 │
    │  提議者錯誤        │  1/32       │  1 epoch                  │
    └──────────────────────────────────────────────────────────────┘
    
    安全閾值:
    - FFG 安全閾值:1/3(假設誠實多數)
    - LMD Ghost 安全閾值:1/3(假設同步網路)
    - 實際安全邊際:(2n/3 - f) / n = 2/3 - α
    
    當前 α ≈ 0(假設無攻擊)
    安全邊際 ≈ 66.7%

7.2 實際攻擊成本估算

攻擊 Gasper 的成本分析:

    攻擊類型 1:51% 攻擊(最終確定逆轉)
    
    所需條件:
    - 控制 > 1/3 的驗證者
    - 持續控制足夠長的時間
    
    成本估算(2026 年):
    - 驗證者質押總量:37.2M ETH
    - 1/3 質押量:12.4M ETH
    - ETH 價格:$3,500
    - 質押成本:$43.4B
    
    攻擊類型 2:最終確定逆轉(Finality Reversion)
    
    條件:
    - 控制 > 2/3 的驗證者
    - 持續控制直到重組
    
    成本估算:
    - 2/3 質押量:24.8M ETH
    - 質押成本:$86.8B
    
    攻擊類型 3:短期分叉
    
    條件:
    - 在單個 slot 內控制多數驗證者
    - 足夠影響區塊提議
    
    成本估算:
    - 低概率成功
    - 高成本

7.3 恢復機制

從攻擊中恢復:

    場景:假設攻擊者控制了 > 1/3 驗證者並發動攻擊
    
    恢復步驟:
    
    1. 檢測攻擊
       - 監控系統檢測到超級多數投票異常
       - 社區收到警報
    
    2. 社區響應
       - 驗證者社區討論攻擊事件
       - 識別被攻擊者操縱的驗證者
    
    3. 質押者退出
       - 誠實質押者開始退出質押
       - 攻擊者控制的質押量佔比下降
    
    4. 網路恢復
       - 當攻擊者佔比 < 1/3 時,網路恢復安全
       - 新的最終確定重新建立
    
    5. 罰沒執行
       - 攻擊者的驗證者被罰沒
       - 處罰金額進入 DAO 庫或燒毀
    
    恢復時間估算:
    - 退出期:~ 27 小時(最大)
    - 罰沒觸發:即時
    - 總恢復時間:1-3 天

結論:Gasper 安全性證明的要點總結

理解 Gasper 的安全性證明需要掌握以下核心要點:

  1. FFG 的帳戶安全性:通過超級多數投票和罰沒條件,確保不可能存在衝突的最終區塊。
  1. LMD Ghost 的活性保證:通過 Latest Message 機制,確保誠實驗證者始終引導分叉選擇。
  1. 組合安全性:FFG 和 LMD Ghost 的結合提供了完整的安全性(無衝突)和活性(新區塊持續確認)。
  1. 罰沒條件的必要性:雙重投票和環繞投票的罰沒條件是防止網路分裂的必要手段。
  1. 安全閾值:只要誠實驗證者佔比超過 2/3,Gasper 就是安全的。

參考資源

-以太坊共識層研究:https://ethereum.org/en/developers/docs/consensus-mechanisms/

附錄:符號表

符號含義
n驗證者總數
f攻擊者控制的驗證者數
α攻擊者比例 = f/n
Δ網路最大延遲
σ世界狀態
GJustification 圖
B區塊
epoch檢查點時期
slot提議時段
Justified已合理性化
Finalized已最終確定

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。

目前尚無評論,成為第一個發表評論的人吧!