
你發送了一筆交易,它已確認,但你的錢包仍顯示舊餘額。刷新後,餘額出現了;再刷新一次,又消失了。並沒有任何東西損壞,你只是碰到了一個尚未同步的副本。 Rialo 發布了一篇關於一致性模型的指南,精確解釋了這一現象,其說明比大多數錢包 UX 建議更有用。分散式系統會在多台伺服器之間複製資料,而這些伺服器接收更新的時間點各不相同。若讀取請求落在滯後的副本上,就會返回較舊的已提交狀態。這在大多數一致性模型中是正確的行為,但看起來卻極具迷惑性。 解決方案有一個名稱:讀己所寫。一旦客戶端在一個會話中提交寫入,該會話中後續的所有讀取都必須反映此寫入。即使其他使用者還未看到,你也總能看見自己的交易。配合單調讀取,你的視圖只會向前推進,因此在一個會話中餘額不會倒退。 @RialoHQ 的文件指出,錢包應在應用層實現此機制,並分別映射出哪種模型適合區塊鏈的哪一部分:最終性檢查點使用強一致性;同步期間的區塊排序使用一致前綴;輕客戶端使用有界滯後性。 大多數區塊鏈並未記錄一致性規範,而是讓開發者透過錯誤回報自行發現。明確記錄每種保證適用於何處是一項無聊卻極其重要的工作,它能為他人節省一週時間,避免追查根本不是錯誤的問題。

