Block-Latice從更貼合實際經濟活動的角度出發,針對每個賬戶,按交易順序分別記錄僅屬於該賬戶的交易事件,形成該賬戶對應的唯一的一條鏈。一個賬戶一條鏈的設計,使得每筆支付交易只會導致相關的兩條鏈(或兩個以上,若同一筆支付交易中可以包含多個接收賬戶)需要變更,而不影響其他鏈,不同鏈之間的更新是非同步的,不需要同時進行,提高了系統的吞吐量。每個鏈的最新區塊(頭部區塊)代表了該鏈的「當前有效狀態」,頭部區塊之前的區塊資料只代表歷史,僅用於回溯對賬,很多計算節點可拋棄歷史資料(可稱之為「賬本修剪」),只保留每條鏈的頭部區塊作為最新賬本,這就極大地降低了儲存需求,相當於Bitcoin系統中的某些節點拋棄了大部分交易資料,只保留所有的Block-Header和UTXO集。
當A支付X個幣給C時,A賬戶鏈中會生成只包含這筆交易資訊的區塊,A賬戶的餘額發生了變化,C賬戶鏈感知到A賬戶鏈中的資料變化後,也會生成只包含這筆交易資訊的區塊,C賬戶的餘額也發生了相應的變化。雖然A鏈與C鏈在形式上是互相獨立的,但是A賬戶鏈與C賬戶鏈的資料更新必須相互融洽,不可以出現資金髮送(Send)與接收(Rreceive)數額不一致的現象。Nano透過「交易資料的數字簽名」和「類似PoS共識演算法的代理人投票機制」確保整個賬本的一致性,並實現對沖突區塊(惡意分叉、雙花交易可製造多個衝突區塊)的選擇與淘汰。Nano的每個賬戶鏈的第一個區塊(可稱之為「開戶區塊」)中填寫了使用者自願選擇的投票代表(Representative),並允許使用者隨時傳送更新交易將其更換。投票代表R的權重由選擇R作為代表的所有賬戶的餘額總和所決定,與PoS共識機制類似。
Block-Latice技術中同樣存在雙花支付現象:基於A賬戶的最新區塊(Block i+1),A支付X個幣給B後,又基於區塊(Block i+1),支付了Y個幣給C,這樣就形成了兩個互相沖突的新區塊(Block i+2)。當B和C獲得A的支付交易區塊之後,可將A的交易廣播到全網路,然後詢問投票代表(或監聽投票廣播資訊)是否觀察到A有雙重支付行為,若B和C的選擇的投票代表不線上,可以更換新的投票代表。假定同時線上的多個投票代表中,大部分權重對應的代表是誠實的,針對A賬戶鏈的多個衝突區塊進行幾輪投票之後,選票最高的唯一區塊獲勝,其他區塊將被淘汰。然後B和C才開始更新B賬戶鏈和C賬戶鏈,這就解決了雙重支付問題。我認為還可以引入押金機制,對雙重支付行為進行處罰,避免A賬戶持續生成雙重支付區塊,導致代理人節點之間頻繁進行投票廣播。
Nano技術白皮書裡並沒有提到如何獎勵投票代表節點(也必然是全節點),可能是經濟激勵的設計並不難,有很多可選方案,比如系統每年增發一定量的幣,按照權重比例,分配給投票代表節點。Nano採用了零手續費的設計方案,因為其具備極好的賬本修剪特性,不用擔心賬本資料量激增。為了防止惡意使用者在自己的多個賬戶鏈之間持續傳送垃圾交易,Nano要求每筆交易中的部分資料的雜湊值必須處於一定範圍,這部分資料是可以提前知道的,因此使用者可以為未來的交易提前計算好符合雜湊值要求的Nonce值,不會耽誤未來的交易。也可以採取「限制每個賬戶鏈的區塊生成速率」的方式防範垃圾交易行為。但這些方案似乎不能防止攻擊者利用多個賬戶鏈持續建立開戶區塊,再加上新建的賬戶鏈,則可建立更多的開戶區塊,造成資料量激增。所以我覺得零手續費機制不一定最優,燃燒掉較低的手續費,可強化系統安全,並進一步簡化設計方案。
更多區塊鏈資訊:www.qukuaiwang.com.cn/news