商品名稱 存量(萬噸) 年產量(萬噸) S2F 供應增長率

黃金 185000 3000 62 %

白銀 550000 25000 22 %

鈀 244 215 %

鉑 86 229 %

曲筷看到了這個資料,發現怪不得要買黃金,不要買白銀,因為白銀的通脹率高,黃金的通脹率相比白銀比較低,自然還有鈀金和鉑金,供應增長率太高了。

繼續來看中本聰的白皮書。

比特幣:一種點對點電子貨幣系統

摘要:一種完全的點對點電子貨幣應當允許線上支付從一方直接傳送到另一方,而不需要透過一個金融機構。數字簽名提供了部分解決方案,但如果仍需一個可信任的第三方來防止雙重支付,那就失去了電子貨幣的主要優點。我們提出一種使用點對點網路解決雙重支付問題的方案。該網路透過將交易雜湊進一條持續增長的基於雜湊的工作量證明鏈來給交易打上時間戳,形成一條除非重做工作量證明否則不能更改的記錄。最長的鏈不僅是被見證事件序列的證據,而且也是它本身是由最大 CPU 算力池產生的證據。只要多數的 CPU 算力被不打算聯合攻擊網路的節點控制,這些節點就將生成最長的鏈並超過攻擊者。這種網路本身只需極簡的架構。資訊將被盡力廣播,節點可以隨時離開和重新加入網路,只需接受最長的工作量證明鏈作為它們離開時發生事件的證據。

1. 簡介

網際網路貿易已經變得幾乎完全依賴金融機構作為可信任的第三方來處理電子支付。儘管對於大部分交易這種系統執行得足夠好,但仍需忍受基於信任模型這個固有缺點。由於金融機構不可避免的需要仲裁糾紛,完全不可撤銷的交易實際是做不到的。仲裁成本增加了交易成本,限制了最小實際交易額度從而杜絕了日常小額交易的可能性,而且由於不支援不可撤銷支付,對不可撤銷服務進行支付將需要更大的成本。由於存在交易被撤銷的可能性,對於信任的需求將更廣泛。商家必須警惕他們的客戶,麻煩他們提供更多他本不需要的資訊。一定比例的欺詐被認為是不可避免的。雖可透過當面使用實物貨幣來避免這些成本及支付的不確定性,但不存在一個無可信任方而能在通訊通道上進行支付的機制。

我們需要的是一個基於密碼學原理而不是信任的電子支付系統,該系統允許任何有交易意願的雙方能直接交易而不需要一個可信任的第三方。交易在計算上的不可撤銷將保護賣家不被欺詐,用來保護買家的程式化合約機制也應該較容易實現。在這篇論文中,我們提出一種使用點對點分散式時間戳伺服器為基於時間的交易序列生成計算上的證據來解決雙重支付問題的方案。只要誠實節點集體控制的 CPU 算力大於任何一個合作攻擊節點群的CPU算力,這個系統就是安全的。

2. 交易

我們將一枚電子貨幣定義為一條數字簽名鏈。每個擁有者都透過將上一次交易和下一個擁有者的公鑰的雜湊值的數字簽名新增到此貨幣末尾的方式將這枚貨幣轉移給下一個擁有者。收款人可以透過驗證數字簽名來證實其為該鏈的所有者。

交易

交易

交易

所有者1

所有者3

所有者2

的公鑰

的公鑰

的公鑰

雜湊

雜湊

雜湊

驗證

驗證

所有者1

所有者2

所有者0

的簽名

的簽名

的簽名

簽名

簽名

所有者1

所有者2

所有者3

的私鑰

的私鑰

的私鑰

這裡的問題是收款人不能證實某個擁有者沒有對此貨幣進行雙重支付。通常的做法是引入一個可信任的中央機構或鑄幣廠來檢查每筆交易是否存在雙重支付。每筆交易之後,都需要將這枚貨幣退回鑄幣廠以換取發行一枚新的貨幣,只有由鑄幣廠直接發行的貨幣才能被確認沒有被雙重支付。這個方案的問題在於整個貨幣系統的命運都依賴於運營鑄幣廠的公司,每筆交易都需要經過它們,就像銀行一樣。

我們需要一種能讓收款人知道上一個貨幣擁有者沒有對任何更早的交易簽名的方法。對我們來說,最早的那次交易是唯一有效的,所以我們不需要關心本次交易後面的雙重支付嘗試。唯一能確認一筆交易不存在的方法是知曉所有之前的交易。在鑄幣廠模型中,鑄幣廠知曉所有交易並能確定哪筆交易最先到達。在不引入一個可信任方的前提下要達到這個目的,所有交易就必須公開發布 [1],而且需要一個能讓所有參與者對交易收到順序的單一歷史達成共識的系統。收款人在每筆交易時,都需要多數節點認同此交易是最先收到的證據。

3.時間戳伺服器

我們提出的方案從時間戳伺服器開始。時間戳伺服器計算包含多個需要被打時間戳的資料項的區塊的雜湊值並廣泛地釋出這個雜湊值,就像在報紙或新聞組帖子裡[2-5]。時間戳能證明要得到這個雜湊值,顯然這些資料當時一定是存在的。每個時間戳的雜湊值都納入了上一個時間戳,形成一條鏈,後面的時間戳進一步增強前一個時間戳。

2

雜湊

雜湊

區塊

區塊

專案

專案

專案

專案

4.工作量證明

為了實現一個基於點對點的時間戳伺服器,我們需要使用一個類似 Adam Back 提出的雜湊貨幣 [6]的工作量證明系統,而不是報紙或新聞組帖子那樣。工作量證明採取搜尋一個數,使得被雜湊時(如使用 SHA-256)得到的雜湊值以數個 0 位元開始。平均所需工作量將隨所需 0比 特呈指數級增長而驗證卻只需執行一次雜湊。

對於我們的時間戳網路。我們透過在區塊中加入一個隨機數,直到使得區塊的雜湊值滿足所需0 位元的數被找到的方式實現工作量證明。一旦消耗了 CPU算力使區塊滿足了工作量證明,那麼除非重做這個工作否則就無法更改區塊。由於後面的區塊是連結在這個區塊後面的,改變這個區塊將需要重做所有後面的區塊。

區塊

區塊

上一個雜湊

隨機數

隨機數

上一個雜湊

交易

交易

交易

交易

工作量證明同時解決了在多數決定中確定投票方式的問題。如果多數是按IP 地址投票來決定,那麼它將可能被能分配大量IP 地址的人破壞。工作量證明本質上是按CPU 投票。最長的鏈代表了多數決定,因為有最大的計算工作量證明的算力投入到這條鏈上。如果多數的CPU 算力被誠實節點控制,誠實的鏈就會增長得最快並超過其他的競爭鏈。要修改過去的某區塊,攻擊者必須重做這個區塊以及其後的所有區塊的工作量證明,從而趕上並超過誠實節點的工作。我們後面會證明隨著後續的區塊被新增一個更慢的攻擊者趕上誠實節點的機率將呈指數級遞減。

為了抵消硬體運算速度的增加及平衡不同時期執行節點的利益,工作量證明的難度將由移動平均數法來確定每小時生成區塊的平均數。如果區塊生成得過快,那麼生成的難度就會增加。

5. 網路

執行網路的步驟如下:

1)新交易向所有節點廣播。

2)每個節點將新交易收集到一個區塊。

3

3)每個節點為它的區塊尋找工作量證明。

4)當一個節點找到了工作量證明,就向所有節點廣播這個區塊。

5)節點只有在區塊內所有交易都是有效的且之前沒有被支付的情況下接收這個區塊。

6)節點透過使用這個區塊的雜湊值作為上一個雜湊值,在鏈中建立下一個區塊的方式表示對這個區塊的接受。

節點總是認為最長的鏈為正確的並持續致力於延長它。如果兩個節點同時廣播了不同的下一個區塊,有些節點可能先收到其中一個而其他節點先收到另一個。這種情況,節點基於他們收到的第一個區塊工作,但是也儲存另一個分支以防它變為更長的鏈。當下一個工作量證明被找到後僵局就會被打破,從而其中一個分支變得更長;在另一個分支上工作的節點將切換到更長的鏈上來。

新交易的廣播不必到達所有的節點。只要到達一些節點,不久就會進入到一個區塊。區塊廣播也是能容忍訊息丟失的。如果一個節點沒有收到某個區塊,它將在收到下一個區塊時發現它丟失了一個區塊然後去請求這個區塊。

6. 激勵

我們約定,區塊中的第一筆交易是區塊建立者開創一枚屬於他的新貨幣的特殊的交易。這就增加了對支援網路的節點的激勵,並提供了一種初始分發貨幣到流通領域的方法,因為這裡沒有中央機構來發行貨幣。新貨幣按固定量穩定地增加就像金礦礦工消耗資源並增加黃金到流通領域一樣。對我們而言,消耗的是 CPU 時間和電力

激勵也可以由交易費充當。如果交易的輸出值小於其輸入值,差價就作為交易費被加到包含此交易的區塊的激勵中。一旦預定量的貨幣進入了流通領域,激勵將變為只含有交易費,這樣可以完全避免通貨膨脹。

激勵會有助於鼓勵節點保持誠實。如果一個貪心的攻擊者有能力聚集比所有誠實節點更多的CPU 算力,他將面臨是以騙回已付款的方式欺詐別人還是使用這些算力生成新貨幣的抉擇。他將發現遵守規則比破壞系統和他自已財產的有效性更有利,因為這些規則准許他獲得比所有其他人都多的新貨幣。

7.回收磁碟空間

一旦某個貨幣的最新交易已經被足夠多的區塊覆蓋,這之前的支付交易就可以被丟棄以節省磁碟空間。為便於此而又不破壞區塊的雜湊值,交易將被雜湊進默克爾樹[7][2][5],只有根節點被納入到區塊的雜湊值。老的區塊可透過剪除樹枝的方式被壓縮。樹枝內部的雜湊不需要被儲存。

4

區塊

區塊

區塊頭 (區塊雜湊)

區塊頭 (區塊雜湊)

隨機數

上一個雜湊

隨機數

上一個雜湊

根雜湊

根雜湊

雜湊23

雜湊01

雜湊01

雜湊23

雜湊2

雜湊3

雜湊3

雜湊0

雜湊1

雜湊2

交易3

交易3

交易1

交易2

交易0

從區塊中剪除交易0-2

交易被雜湊進默克爾樹

每個不包含交易的區塊頭大約是80 bytes。如果每10分鐘生成一個區塊,每年生成80 bytes*6*24*365=, 2008年在售的典型計算機有2GB記憶體, 並且摩爾定律預測目前每年記憶體增加,所以就算區塊頭一定要存在記憶體裡,儲存也不是問題。

8.簡化的支付驗證

不執行一個完整的網路節點也是可以進行支付驗證的。使用者只需擁有一個最長工作量證明鏈的區塊頭副本,他可以透過向其他網路節點查詢以確認他擁有了最長的鏈,並獲取連結交易到給交易打時間戳區塊的默克爾分支。雖然他自已不能核實這個交易,但如果交易已經連結到鏈中的某個位置,就說明一個網路節點已經接受了此交易,而其後追加的區塊進一步確認網路已經接受了它。

最長的工作量證明鏈

區塊頭

區塊頭

區塊頭

上一個雜湊

隨機數

隨機數

上一個雜湊

上一個雜湊

隨機數

默克爾根

默克爾根

默克爾根

雜湊23

雜湊01

交易3的默克爾分支

雜湊3

雜湊2

交易3

同樣地,只要誠實節點控制著網路,這種簡化驗證就是可靠的;如果網路被攻擊者控制,簡化驗證會變得比較脆弱。雖然網路節點可以驗證他們自已的交易,但只要攻擊者持續控制網路,那麼這種簡化的方法就可能被攻擊者的偽造交易欺騙。一種對策是接受其他網路節點發現一個無效區塊時發出的警告,提醒使用者軟體下載整個區塊和被警告的交易來檢查一

5

致性。為了更加獨立的安全性以及更快的支付確認,收款頻繁的公司可能仍需執行他們自已的節點。

9.合併和分割交易額

儘管單獨處理每個貨幣是可行的,但將一次轉賬按每一分拆成多次交易是不實際的。為允許交易額被分割和合並,交易將包含多個輸入值和輸出值。通常是一個從之前交易而得的較大輸入值或多個較小輸入值的組合,以及最多兩個輸出值:一個作為支付,另一個作為找零,如果有的話,退還給支付傳送方。

交易

輸出

輸入

輸入

注意這裡的扇出,即一筆交易依賴數筆交易,這數筆交易又依賴更多的交易,在這裡是不存在問題的。永遠不會需要獲取一筆交易歷史的完整獨立副本。

10. 隱私

傳統的銀行模型透過限制參與方和可信任第三方對資訊的訪問來達到一定級別的隱私保護。交易必須要公開發布就不能使用這個方法,但隱私仍可在其他地方透過阻斷資訊流的方式來保護:那就是保持公鑰匿名。公眾能看到有人正在傳送一定量貨幣給其他人,但是不能將交易關聯到某個人。這和證券交易所釋出的資訊級別類似,每筆交易的時間和交易量,即行情是公開的,但是不會顯示交易雙方是誰。

傳統隱私模型

可信任

公眾

交易

交易對方

身份資訊

新隱私模型

身份資訊

公眾

交易

作為額外的防火牆,對每筆交易使用新金鑰對可以防止他們被關聯到一個共同的擁有者。由於多輸入值交易存在,有些關聯仍不可避免,因為多輸入值交易必然暴露其多個輸入是屬於同一個擁有者的。風險就在於如果一個金鑰的擁有者被暴露,關聯性將暴露屬於同一個擁有者的其他交易。

6

11. 計算

我們考慮一個攻擊者試圖生成一條比誠實鏈更快的替代鏈的情況。即使這個目標達到了,也不會使系統變得可以任意修改,比如憑空建立貨幣或拿走不屬於他的錢。節點將不會接受無效的交易作為支付,而且誠實節點永遠不會接受一個包含無效交易的區塊。攻擊者只可能改變他自已的某筆交易來拿回他不久前已經支出的錢。

誠實鏈與攻擊者鏈之間的競爭可描述為二項隨機漫步。成功事件是誠實節點被延長一個區塊,兩條鏈的差距加1,失敗事件是攻擊者的鏈延長一個區塊,兩條鏈的差距減1。

攻擊者從某一落後位置趕上誠實鏈的機率類似於賭徒破產理論。設想一個擁有無限籌碼的賭徒從一定虧損開始,進行可能無限次的賭博試圖達到盈虧平衡。我們可以計算他達到盈虧平衡,即一個攻擊者趕上誠實鏈的機率,如下[8]:

p=誠實節點找到下一個區塊的機率

q=攻擊者找到下一個區塊的機率

qz=攻擊者從落後z個區塊趕上誠實鏈的機率

我們假設p>q,機率將隨著攻擊者需要趕上的區塊數增加而呈指數下降。由於形勢對他不利,如果他沒有在早期幸運地快速趕上,他落得越遠趕上的機會就越渺茫。

我們現在考慮一個新交易的收款人要等多久才能確保付款人不能再改變這個交易。我們假設作為攻擊者的付款人是想讓收款人相信他暫時已經付款,然後在一段時間後轉換成支付回自已。這時收款人會收到警告,但付款人希望警告已為時已晚。

收款人生成一個新金鑰對並將公鑰給付款人,這樣付款人就無法提前對交易簽名。這能防止付款人透過持續工作直到他足夠幸運獲得大幅領先的方式預先準備一條區塊鏈,然後在那時執行交易。一旦交易被髮出,不誠實的付款人就開始秘密地在一條包含了他的替換版交易的平行鏈上工作。

收款人等到交易被加到區塊中且其後追加了z個區塊。他不知道攻擊者確切的進度,但是假設誠實的區塊按期望的平均時間生成,攻擊者可能的進度將是一個泊松分佈,其期望值為:

\\lambda =z \\frac {q}{p}

為計算攻擊者現在仍然能趕上的機率,我們給每個他可能達到的進度的泊松密度乘以他在那個進度能趕上誠實鏈的機率:

7

變換以避免對分佈的無限尾部求和…

1- \\sum \\limits _{k=0}^{z} \\frac { \\lambda ^{k}e^{- \\lambda }}{k!}(1-(q\/p)^{(z-k)})

轉換成C 語言程式碼…

#include <math. h>

double AttackerSuccessProbability(double q, int z)

{

double p = − q;

double lambda = z * (q \/ p);

double sum = ;

int i, k;

for (k = 0; k <= z; k++)

{

double poisson = exp(-lambda);

for (i = 1; i <= k; i++)

poisson *= lambda \/ i;

sum -= poisson * (1 - pow(q \/ p, z - k));

}

return sum;

}

執行得到一些結果,我們可以看到機率隨z呈指數下降。

q=

z=0 P=

z=1 P=

z=2 P=

z=3 P=

z=4 P=

z=5 P=

z=6 P=

z=7 P=

z=8 P=

z=9 P=

z=10 P=

q=

z=0 P=

z=5 P=

z=10 P=

z=15 P=

z=20 P=

z=25 P=

z=30 P=

z=35 P=

z=40 P=

z=45 P=

z=50 P=

P 小於%的解…

8

P <

q= z=5

q= z=8

q= z=11

q= z=15

q= z=24

q= z=41

q= z=89

q= z=340

12. 總結

我們已經提出了一種不依賴信任的電子交易系統。我們從通用的數字簽名貨幣體系開始,這體系提供了強有力的所有權控制,但由於缺乏防止雙重支付的方法而不完善。為解決這個問題,我們提出一種使用工作量證明來記錄公共交易歷史的點對點網路,只要誠實節點控制了多數的 CPU 算力,對於攻擊者,交易歷史將很快變得在計算上不可更改。網路因其結構簡潔性而強大。節點只需很少的協調就能同時工作。它們不需要被認證,因為資訊不會被髮送到某個特殊的位置,只需被盡力傳播。節點可以隨時離開和重新加入網路,只需接受工作量證明鏈作為它們離開時發生事件的證據。節點使用 CPU 算力來投票,透過致力於延長有效區塊來表達對其接受,透過拒絕在無效區塊上工作來表達對其抵制。任何需要的規則和激勵都可透過這個共識機制來加強。

其它小說相關閱讀More+

娛樂圈的頂流夫婦

甜橙櫻桃

一覺醒來後,變成端淑女娘!

Y七點

四元解夢雜貨鋪

素素紫

小狼狗老公養成計劃

心情大好的天晴宇

病秧子想要活下去

倉鼠夢小澤

當光降臨

琳冧霖