因此,我們假設礦工的唯一選擇是使用以下“演算法1”中給出的簡單強力方法來建立一個有效區塊。
演算法 1 區塊挖礦
需要注意的是,雖然挖掘過程使用私鑰,但解決方案本身僅包含公鑰。解算驗證由“演算法2”完成。
演算法 2 區塊挖礦
這種方法阻止礦池形成,因為挖礦需要金鑰sk:一旦任何池礦工找到正確的解決方案,他就可以使用這個金鑰來竊取塊獎勵。另一方面,揭示單個解決方案是安全的,因為它僅包含公鑰並且揭示了2個秘密sk,w之間的單個線性關係。
造成記憶體困難是源於演算法1需要保持整個R列用於主迴圈執行的事實。每個列表元素佔用32個位元組,因此N列所有元素需要在N = 226時佔用N · 32 =2Gb的記憶體。礦工可以嘗試透過計算這些在執行中的元素而不需要儲存在記憶體中來減少記憶體要求,但是這樣他需要多次計算相同的雜湊H(現代GPU大約104次),這就降低了效率和利潤。
計算列表R也是一項非常繁重的計算任務:我們首次執行[17]是在Nvidia GTX 1070上,花了25秒來完成所有列表中的2
26個元素的填充。然而,如果礦工在記憶體中也儲存了未完成的雜湊值( || || ) u [0, ) H i M pk i N=列表,則該部分就可以被最佳化,共消耗5個多Gb。在這種情況下,計算未完成的雜湊值在挖礦初始化期間應該只進行一次,同時最終確定它們並填充新的頭資訊的R列,只消耗幾十毫秒(在Nvidia GTX 1070上大約50毫秒)。
目標引數b置於難題本身,並透過難度調整演算法[18]調整到當前網路雜湊率,以保持塊之間的時間間隔接近2分鐘。該演算法試圖透過眾所周知的線性最小二乘法得出的基於來自前8個週期的資料來預測即將到來的1024個區塊長週期的雜湊速率。這使得預測比通常的難度調整演算法更好,並且還使得“跳幣”攻擊的利潤更低。
爾格的狀態
要檢查新交易,加密貨幣客戶端不會將賬簿與此前發生的所有交易一起使用。相反,它只會用到歷史交易中某一筆的狀態快照。在比特幣核心參考履行中,該快照可看作是活躍的一次性代硬幣(即,UTXO),並且交易會在銷燬一些代硬幣同時也產生新的硬代幣。在以太坊中,此快照存在於是長期帳戶,而交易會修改某些帳戶的貨幣餘額和內部儲存。此外,與比特幣不同,以太坊上的快照象徵是固定寫入協議中的,而快照的驗證摘要被寫入區塊頭。
爾格遵循比特幣的UTXO設計,並使用一次性硬幣來代表快照。與比特幣的區別在於,除了具有貨幣價值和能保護指令碼外,爾格一次性硬幣,稱為幣箱(box,),還包含了使用者定義的資料。與以太坊類似,爾格塊還在應用區塊後後,儲存全域性狀態的認證摘要,稱為stateRoot(狀態根)。
爾格幣箱由暫存器組成(除了暫存器外別無他物)。此幣箱可以有10個標記為R0, R1, . . . , R9的暫存器,其中前四個填充了強制值,其餘的可以包含任意資料或為空。
一次性不可變物件(如比特幣的UTXO模型)在以太坊的長期可變賬戶中具有一些優勢。首先,它為回放或重排攻擊提供了更簡單,更安全的保護。其次,並行處理交易更加容易,因為它們不會修改它們訪問物件的狀態。此外,一項交易是指要麼完全按預期修改了系統狀態,要麼根本沒有改變狀態(沒有因燃氣異常、可重入性問題等導致的副作用)。最後,使用一次性硬幣構建完全無狀態的客戶似乎更容易[19](儘管該領域的研究仍處於初始階段)。
對一次性硬幣的一個主要批評是該模型似乎不適合非平凡的去中心化應用。然而,爾格已經克服了這些問題,並透過演示構建在其上的許多非平凡的原型應用來證明這種說法是錯誤的。
爾格協議以未被先前交易銷燬的幣箱形式來修復分類帳快照畫像。詳細地說,礦工應該維護在UTXO集之上構建的類似於梅克爾樹狀認證資料結構,並且必須在每個區塊頭中包含該結構的短摘要(僅33個位元組)。必須在應用區塊後才能計算此摘要。這個經過驗證的資料結構構建在AVL+樹之上[12],它像常規雜湊樹一樣,允許生成樹中特定元素存在或不存在的證明。因此,維護完整樹的使用者能夠生成他們幣箱未用證據,並且一個小小的33位元組摘要就足以驗證這些證據。但是,與常規雜湊樹不同,AVL+樹還允許生成樹修改證明,允許驗證者計算新的樹摘要。爾格礦工需要生成區塊修改證明,並且此證明的雜湊值與結果狀態的摘要要一起包含在區塊頭中。因此,僅包含當前狀態的短小摘要的輕節點就能夠驗證完整的區塊 - 它們可以檢查所有用過的幣箱已從狀態中移除,所有建立的幣箱都被新增到狀態中並且不再進行任何更改。
AVL+樹允許構建有效的經過驗證的字典,與先前的解決方案相比,可以減少證明大小並加快驗證速度,速度是原來的1.4-2.5倍,使其更適合加密貨幣應用程式。例如,我們的證明比以太坊中用於相同目的的Merkle Patricia trie(MPT)的證明小3倍(見圖1)。
最後,將單個區塊中的多項交易的證明打包壓縮,將其總長度大概能減少2倍:
圖2:左圖:2000次交易每次修改的證明大小,作為起始樹大小n的函式。右圖:對於具有n= 1000000個鍵的樹每次修改的證明大小作為批次大小B的函式。在左右這兩種情況下,一半的修改是插入新的(鍵,值)對,另一半是改變現有鑰的值。
因此,爾格狀態提供了一種有效且安全的方式來證明其中的特定元素是否存在,以及證明樹的修改。爾格智慧合約語言支援這些樹操作,從而提供了執行第7節中討論的複雜合約的能力。
適應力強和生存性
作為一個合約幣的平臺,爾格還應支援長期的合約,至少是一般人的一生這麼長。然而,現有的其他新興的智慧合約平臺也會遇到效能下降和對外部條件的適應性問題。這就導致了一種情況,即加密貨幣依賴於一小組開發人員來提供固定硬分叉,否則加密貨幣將無法生存。例如,以太坊網路已經開始使用工作量證明共識演算法,並承諾在未來切換到權益證明。然而,權益證明開發的延遲導致了很多次硬分叉修復[20],同時社羣仍然被迫依賴核心開發人員承諾實施下一個硬分叉。
第一個常見的生存性問題是,為了追求普及度,開發人員傾向於在沒有適當初步研究和測試的情況下實施事先無準備的解決方案。這樣的解決方案不可避免地會出現漏洞,然後出現了倉促的漏洞修復,接著再修復那些錯誤的漏洞修復...,這就使網路變得不可靠,甚至更不安全。一個值得注意的例子是IOTA加密貨幣,它實現了各種可擴充套件性解決方案,包括它的雜湊函式和DAG結構,使其能夠實現高普及度和高市場資本化。然而,當對這些解決方案進行分析[21,22]時,它揭示了多個嚴重的問題,包括能夠偷盜貨幣的實際性攻擊,隨後的硬分叉[23]透過切換到已知的SHA3雜湊函式來解決問題,確認了這種創新的無用性。而爾格會使用經過良好測試的穩定解決方案,即使這些解決方案會導致短期創新變慢。爾格中使用的大多數解決方案都在同行評審會議[12,18,3,8,24,25]中提出的論文中正式化了,並且在社羣中也得到了廣泛討論。
去中心化(以及生存性)面臨的第二個問題是缺乏安全的去信任輕量客戶端。爾格解決區塊鏈技術的這個問題,而且不會產生新的問題。由於爾格是PoW(工作量證明)區塊鏈,因此它很容易從區塊內容中提取小的區塊頭。
只有該區塊頭就能驗證在其上完成的工作,並且區塊頭鏈足以用於最佳鏈選擇和與網路同步。區塊頭鏈雖然比完整的區塊鏈小得多,但它仍然會隨著時間推移線性增長。最近對輕量客戶端的研究為輕量客戶端提供了一種透過下載更少量資料來與網路同步的方法,從而解鎖使用去信任的低端硬體(如手機)加入網路的能力[26,27] 。爾格使用經過驗證的狀態(參見第4節),對於區塊中的交易,客戶端可以下載其正確性的證明。因此,無論區塊鏈大小如何,有手機的普通使用者都可以加入網路並開始使用具有與完整節點相同的安全保證的爾格。
讀者可能注意到了第三個潛在的問題,即雖然對輕客戶的支援解決了爾格使用者的問題,但它並沒有解決爾格礦工的問題,礦工仍然需要保持整個狀態以進行有效的交易驗證。在現有的其他區塊鏈系統中,使用者可以將任意資料置於此狀態中。這些資料永遠存在,會產生大量塵埃,並且隨著時間的推移它的大小會不斷增加[28]。大的狀態會導致嚴重的安全問題,因為當狀態不適合隨機存取儲存器時,攻擊者可以觸發交易,他的驗證由於需要隨機訪問礦工的儲存而變得非常慢。這可能會導致分散式阻斷服務(DoS)攻擊,例如2016年以太坊上的攻擊[29]。此外,社羣對此類攻擊的恐懼以及“狀態膨脹”問題對礦工或持有狀態的使用者沒有任何補償阻止了擴充套件解決方案,否則可能已經執行(例如更大的區塊大小)。為了阻止這種情況發生,爾格有一個儲存租用特性如果一個幣箱在該狀態下保持4年而不被移動,礦工可以對該狀態下保留的每個位元組收取少量費用。
這種類似於常規雲端儲存服務的想法最近才被提出用於加密貨幣[30],並且產生了幾個重大的影響。首先,它確保了爾格挖礦總是穩定的,而不像比特幣和其他PoW(工作量證明)貨幣,挖礦可能會在完成發行後變得不穩定[31]。第二,狀態大小的增長變得可控和可預測,從而幫助爾格礦工管理他們的硬體需求。第三,透過從過時的幣箱收取儲存費用,礦工可以將硬幣返回迴圈中,從而防止由於丟失金鑰而導致的迴圈供應穩定減少[32]。所有這些影響都支援爾格在技術和經濟上的長期生存性。
對生存性的第四個重要挑戰是外部環境的變化和對協議的要求。協議應該適應不斷變化的硬體基礎架構和新思路,以提高隨著時間推移出現的安全性或可擴充套件性,用例的演變等等。如果所有規則都是固定的,不能用去中心化的方式改變它們,即使是簡單的持續變化也都導致激烈的辯論和社羣分裂。
例如,對比特幣中區塊大小限制的討論導致其分成幾個獨立的硬幣。相比之下,爾格協議是可自我修改的,能夠適應不斷變化的環境。在爾格中,區塊大小等引數可以透過礦工投票進行恰當地更改。在每個1024區塊投票週期的開始,礦工最多可以提出改變2個引數(例如區塊大小的增加和儲存費用因素的減少)。在該週期剩餘的時間,礦工採取投票來決定更改的批准還是拒絕。如果該週期內的大多數投票支援更改,則新值將寫入下一個週期的第一個區塊的擴充套件部分,並且網路開始使用更新的值進行區塊挖礦和驗證。
為了採納更基礎性的變化,爾格採用了軟分叉方法,允許在保持舊節點執行的同時顯著地改變協議。在一個週期的開始,礦工也可以提出投票,針對是否對描述受影響驗證規則做基礎性改變(例如,向爾格指令碼新增新指令)。對這些激進性變化的投票持續32,768次,並且要求有至少90%選“是”的投票。一旦投票被接受,1個包含32,768區塊長的啟用週期將開始為過時的節點提供更新其軟體版本的時間。如果節點軟體在啟用期後仍未更新,則它會跳過指定的檢查,仍繼續驗證所有已知的規則。先前的軟分叉更改列表將記錄到擴充套件中,以允許任何軟體版本的輕節點加入網路並跟上當前的驗證規則。軟分叉與投票協議的組合允許改變網路的幾乎所有引數,除了負責投票本身的PoW(工作量證明)規則。
爾格原生貨幣
爾格平臺有其原生貨幣,稱為爾格幣,可分割為最多109個最小單位,nano爾格幣(一個nano爾格幣是爾格幣的十億分之一)。爾格幣對於爾格平臺的穩定性和安全性非常重要,原因如下所述。
在爾格生命的最初階段,礦工將根據預定義和硬編碼的貨幣發行計劃來獲得爾格幣的獎勵(更多細節見6.1)。這些硬幣將激勵礦工加入爾格網路,使網路免受基於雜湊率的攻擊,如已知的51%攻擊[33]。
爾格幣發行將在短短的八年內完成,之後礦工將僅從費用中收取爾格幣。儘管後面還可以透過礦工鏈上的投票進行調整,但是在任何給定時間點,爾格區塊大小和最大塊計算成本都將受到限制,因此礦工被強制在高負載期間僅選擇來自記憶體池的一部分交易。費用將幫助礦工對交易進行分類,防止垃圾資訊的攻擊,同時允許礦工收錄來自區塊中誠實使用者的交易。
除了網路和計算資源之外,交易還透過增加狀態大小來使用儲存。在現有的其他加密貨幣中,狀態的一個元素,即基於UTXO區塊鏈中的UTXO,在爾格中被稱為一個幣箱,一旦被創造,將獲得永生,礦工和部分將此狀態儲存在高成本隨機訪問記憶體中的客戶,他們都不收費。這導致了激勵不一致和不斷增加的狀態規模。與此相反,爾格有一個儲存租用特性,定期向使用者對將每個位元組儲存在狀態中收取爾格幣費用。這種儲存租金透過限制狀態規模或確保對較大狀態規模的適當補償,將丟失的硬幣退回到流通中併為礦工提供額外穩定和可預測的獎勵,從而使系統更加穩定。
因此,作為合約幣平臺,爾格適合在其上構建應用和貨幣系統。然而,參與這樣的系統將需要使用爾格原生爾格幣,以便支付儲存租金和交易費用,這將為礦工提供強有力的持續激勵,以確保網路具有足夠的雜湊力。對於使用者而言,如果他們發現爾格的應用程式具有高價值,那麼他們將非常樂意購買,使用和儲存爾格幣。
合約化貨幣
我們認為,絕大多數公鏈用例(即使是那些聲稱能夠提供通用去中心化世界計算機的用例)都是用於金融應用,不需要圖靈完備性。例如,如果預言機(oracle)將非金融資料寫入區塊鏈(例如溫度),則此資料平時會在金融合約中使用。我們做的另一個細小觀察是許多應用使用具有與原生幣不同機制的數字代幣。
對於應用開發人員,爾格平臺提供自定義代幣(屬於一等公民)和用於編寫幣箱保護條件的特定領域的語言,應用於靈活,安全的金融應用。爾格應用程式的定義是保護內建於幣箱中的指令碼,其中也可能包含執行中涉及的資料。我們使用合約化貨幣(contractual money)這一術語來定義其使用受合約約束的爾格幣(和二級代幣)。這適用於現有平臺上的所有幣,因為任何帶有其內容的幣箱(爾格幣,代幣,資料)都受合約限制。
然而,我們可以區分兩種型別的合約化爾格幣。第一個被稱為自由爾格幣(freeErgs),可以輕鬆地改變他們的合約,並且對支出交易的輸出或其他輸入沒有限制。第二種型別是有界爾格幣(bounded Ergs),其合同要求支出交易具有有特定屬性的輸入和輸出幣箱。
例如,如果幣箱A僅受公鑰保護(因此提供與交易對應的的簽名就可以銷燬幣箱了),公鑰所有者可以花費A並將爾格幣轉移到任意輸出幣箱。因此,A中的爾格幣是自由的。相比之下,想象一個幣箱B受公鑰和條件的組合性保護,該條件要求支出交易建立一個具有與B中相同數量爾格幣的輸出幣箱,並且其保護指令碼具有雜湊hashrBMUEMuPQUx3GzgFZSsHmLMBouLabNZ 4cERm4N(用Base58編碼)。在這種情況下,B中的爾格幣是有界爾格幣。
同樣,我們可以定義自由和有界代幣。爾格合約可以有多個混合,例如有界爾格幣和自由代幣,或者在一個公鑰下是有界的而在另一個公鑰下是自由的。
關於更多爾格資訊:https://ergoplatform.org/cn/
更多區塊鏈專案介紹:http://www.qukuaiwang.com.cn/news/xiangmu
風險提示:區塊鏈投資具有極大的風險,專案披露可能不完整或有欺騙。請在嘗試投資前確定自己承受以上風險的能力。區塊網只做專案介紹,專案真假和價值並未做任何稽覈!