Nimiq

作者:扎克-赫斯, Zack Hess

https://github.com/zack-bitcoin/amoveo-docs/blob/master/other_blockchains/Nimiq/17_10_17.md

2017年10月17日

Nimiq - 尼米克簡介 #

Nimiq是一個正在用javascript編寫的區塊鏈。這意味着Nimiq瀏覽器錢包從一開始就能很好地工作。默認的錢包將是一個瀏覽器錢包。

Nimiq關注的用例是一個可擴展的支付系統。這個用例之所以好,是因爲。

  • 它是巨大的,每年都有大量的錢被送來支付。
  • 它是如此簡單的一個用例。Nimiq並沒有比比特幣多做什麼。Nimiq只存儲賬戶pubkeys和餘額,遠比那些存儲任意狀態的競爭對手簡單。
  • 還沒有人充分地解決這個問題,Nimiq可以有先發優勢。

Nimiq正計劃使用閃電網絡來實現可擴展性。這也是Amoveo、比特幣Hivemind、以太坊和其他公司正在使用的設計選擇。通道已經被理解了。這不是一個研究問題,而是一個工程問題。其他可擴展性的解決方案,如分片,仍處於研究階段。也許做分片是不可能的。總的來說,Nimiq通過使用閃電網絡做出了正確的選擇。

尼米克目前對通道的計劃 #

與替代方案相比,HTLC通道有一些主要的缺點。

  • HTLC通道有一個問題,如果你通過同一通道進行多次閃電支付,而接受支付的人是離線的,那麼內存和計算要求隨着尚未接受的閃電支付的數量呈指數增長。你必須準備好N個付款的任何組合,要麼成功,要麼失敗,這就是2^N個可能的結果。在HTLC風格的通道中,你需要爲2^N種不同的可能性寫出不同的合同,而且你和閃電中心都必須簽署這些合同。
  • HTLC通道是一個hack,使賬戶像通道一樣運作。這使得軟件很脆弱,因爲如果你試圖改變賬戶或頻道的工作方式,它就會同時改變它們。
  • 由於Nimiq使用的是賬戶的trie設計,而不是UTXO池,所以不清楚比特幣式的HTLC通道如何運作。這些類型的通道通常依賴於引用UTXO來處理尚未被納入任何區塊的交易。如果Nimiq同時使用賬戶trie,和UTXO池,這是一個糟糕的組合,因爲UTXO池使輕節點更糟糕,而且它是不必要的,所以我們在浪費內存。

更好的通道 #

Nimiq目前在merkle trie中存儲賬戶。我們也可以在這個 trie 中存儲通道。Nimiq可以使用6種不同的交易類型來編程一個理想的通道,不受必須同時作爲一個賬戶的限制。我把它編入Amoveo。通道的代碼大約是450行,翻譯成nimiq的javascript應該不難。你可以重新使用你的賬戶數據庫。

這個理想的通道的內存和計算要求只隨着未完成的閃電支付的數量線性增加。所以它的擴展性非常好。

更好的輕節點 #

在比較輕節點設計時,比較最壞的情況是很重要的。在最壞的情況下,可能會有一個看起來有效的區塊頭由一個無效的區塊組成。全節點可以警告輕節點關於無效的區塊,但最終輕節點將不得不處理那一個區塊,以查看哪一方的分叉是有效的。大多數區塊鏈設計需要下載許多區塊,只是爲了驗證一個區塊。解決方案是,對於每一個區塊,都應該有一種方法可以確定地計算出一個merkle證明,證明驗證區塊所需的所有數據。如果Alice的賬戶在一個區塊中收到或花費了幣,那麼這個區塊的merkle證明就必須證明Alice的賬戶在收到或花費幣之前是什麼樣子。這樣你就可以在不知道任何其他區塊的情況下驗證一個區塊。這意味着我們需要在頭文件中添加另一個哈希值。確定性的merkle證明的哈希值。這樣,攻擊者就不能通過讓我們驗證大量附着在有效區塊上的略微無效的merkle證明來DDOS我們。