![post-mortem.png](../images/post_mortem_7efc587c07.png)

## 定稿背景
Finality 是區塊鏈中的一個重要概念，它保證交易不能被更改、取消或撤銷。 比特幣和大多數鏈在那裡使用概率終結。 在 Symbol 中，我們將概率和確定性終結作為單獨的函數。 也就是說，當交易包含在最終區塊中時，交易被認為是最終的。

要最終確定一個塊，2/3 的活躍投票節點必須對該塊的哈希值進行投票。 選民可以自由參與最終確定過程。 成員變更在下一個紀元生效。 此外，在每個階段結束時，將計算有效投票權，並將該數量用作下一個時期的分母。

## 問題
9 月 12 日星期日，我們注意到網絡在 epoch 361 的終結過程中出現問題。這個 epoch 並不意外，因為我們預計這個 epoch 對終結過程來說是一個沉重的負載。

在網絡啟動時使用符號引導程序註冊其投票密鑰的投票（投票）節點已經註冊了第 1 到 360 個時期的密鑰。許多用戶沒有註冊超過 361 個時期的密鑰，因為定期更新投票密鑰的重要性並不為人所知 . 結果，許多在紀元 360 投票的節點沒有在紀元 361 投票。

儘管如此，仍然有足夠的共識進入下一個紀元（362）。 不幸的是，我們在這裡停滯不前。 更多的大節點停止投票，並且網絡無法就超過大多數投票節點達成一致。

它似乎與過期投票節點的 XYM 持有有關，這是不可取的。 經調查，我們發現客戶妥善處理了已註冊更新投票密鑰賬戶的XYM持倉量，未統計，但統計了未更新投票密鑰賬戶的XYM持倉量。 數據中存儲的數據立即顯示出現了故障。 如果它按設計運行，總票數應該會顯著減少，但變化不大。

## 主要修復
我們通過排除在當前紀元中沒有註冊投票密鑰的帳戶來修復此錯誤。 此外，絕大多數門檻從 70% 降低到 67%。 有了這些更改，一旦將此修復程序分發給絕大多數投票賬戶，最終確定過程就會恢復。

硬分叉將在區塊 528,000 中發生。 這是糾正重要塊中存儲的統計數據的計算所必需的（因為它需要在所有節點上進行驗證）。

由於最終確定是作為 Symbol 中的單個函數實現的，因此在最終確定處於擱置狀態時，鏈會繼續前進。 一旦最終確定，我們希望所有塊都能快速同步。

## 二次修復
當一個 Voting 投票節點結束使用它的投票密鑰時，該節點默認崩潰。 為了緩解這個問題，我們對其進行了更改，以便將其簡單地記錄為錯誤。 這意味著更少的噪音，但是不建議長時間在此狀態下運行節點。 希望停止投票的節點應在將 enableVoting 設置為 false 後重新啟動。

多重簽名賬戶總是需要另一個賬戶（父賬戶）來支付費用，這給他們帶來了不便。 此限制將放寬，以便在分叉區塊中，多重簽名帳戶可以通過將費用匯給父帳戶來間接支付費用。 請注意，這不會改變需要散列鎖定的部分事務的發送行為。

## 未來的工作
在當前版本的 Symbol 中，沒有對 Voting 投票節點的獎勵或懲罰。 雖然這大大簡化了啟動最終確定的實施，但它並沒有為投票節點創建我們預期的正確激勵。 我們計劃在不久的將來添加一個適當的系統來獎勵選民。

我們意識到我們需要投資於更好的工具。 能夠監控活躍投票節點的數量和投票率的下降會在最終決策過程停滯之前提醒我們注意問題。 在接下來的幾個月裡，我們將優先考慮基礎設施，包括新的區塊瀏覽器、改進的 REST API 以及易於理解且對用戶和研究人員有用的數據分析。 如果您想與我們合作，請加入我們的 Discord。
