IOTA Snapshot (快照) 是一種將整體 Tangle 壓縮為地址與餘額 Pair 的一種節省 Tangle 使用空間的技術。當整體 Tangle 被 Snapshot 後,Snapshot 前的交易紀錄將不會被保存下來,而整個 Tangle 會基於這個 Snapshot 增量處理後續出現的交易。
Snapshot 運作方式解說
我們在這邊想像一個小的 Tangle 網路,來模擬 Snapshot 的狀況。
假設 Tangle 中共有 5 個地址,分別持有下列數量的 IOTA:
- AABCBB…..: 100
- BHCEGM…: 10
- CDBBCG….: 0
- QZMXLO…: 50
- YVMA9O…: 1000000000
在這個 Tangle 中,曾經進行過這些交易,為了簡化模型,Bundle 不會把剩餘的 IOTA 移出送出的地址 (容我後面講解這個部份):
- AABCBB -> BHCEGM: 給予 50 IOTA (Bundle: AABCBB -50, BHCEGM +50)
- BHCEGM -> QZMXLO: 給予10 IOTA (Bundle: BHCEGM -10, QZMXLO +10)
- YVMA9O -> AABCBB: 給予 1 IOTA (Bundle: YVMA9O -1, AABCBB +1)
- CDBBCG -> YVMA9O: 給予 0 IOTA (不要忘記 IOTA 可以送 0 value 的 transaction,而且 0 fee!)
- CDBBCG -> CDBBCG: 給予 0 IOTA
- CDBBCG -> AABCBB: 給予 0 IOTA
經過這些交易後,整個 Tangle 的地址餘額會變成:
- AABCBB…..: 51
- BHCEGM…: 50
- CDBBCG….: 0
- QZMXLO…: 60
- YVMA9O…: 999999999
要注意的是,雖然 Tangle 內地址的餘額有變化,但是上述的交易紀錄 (Transaction Hash, Bundle…etc) 還是儲存在 IRI 的 Database 之中。在 IRI Database 中有維護地址的 diff 紀錄,來追蹤每個地址的餘額。
接著 IOTA foundation 進行了一次 Official Snapshot 後,會產出兩個檔案,分別是Snapshot.sig
以及 Snapshot.txt
。前者是用來驗證後者是否是由 Coordinator 簽署,並且保證了檔案的完整性。後者則是這次 Snapshot 的結果,格式如下:
1 2 3 4 |
AABCBB......;51 BHCEGM......;50 QZMXLO......;60 YVMA9O......;999999999 |
是一個簡略的 Key-value pair,分號前代表的是地址,後面代表的是地址餘額。
你可以發現到,除了所有的 transaction 紀錄都不見之外,餘額為 0 的地址也會被剔除掉。
Snapshot 評估:
- 優點:透過 Snapshot 就能夠縮小整個 Tangle 所需要的儲存容量
- 代價:犧牲掉整體 Tangle Transaction 紀錄。
而在 IOTA Roadmap 中,共有兩項與 Snapshot 有關。
- Automated Snapshotting: 目前的 Snapshot 都是手動進行,Roadmap 中希望可以自動作到 Snapshotting,目前進度為開發以及測試中。
- Permanodes: 前面提到,Snapshot 會讓以前的 Transaction 紀錄消失,Permanodes 則是類似儲存節點,即使 Snapshot 後,Permanodes 還是會有所有的 Transaction 紀錄。
Leave a Reply