位元幣原理詳解

2021-10-01 23:01:51 字數 2739 閱讀 7644

一、什麼是位元幣

位元幣是一種電子貨幣,是一種基於密碼學的貨幣,在2023年11月1日由中本聰發表位元幣***,文中提出了一種去中心化的電子記賬系統,我們平時的電子現金是銀行來記賬,因為銀行的背後是國家信用。去中心化電子記賬系統是參與者共同記賬。位元幣可以防止主權危機、信用風險。其好處不多做贅述,這一層面介紹的文章很多,本文主要從更深層的技術原理角度進行介紹。

二、問題引入

假設現有4個人分別稱之為abcd,他們之間發起了3個交易,a轉給b10個位元幣,b轉給c5個位元幣,c轉給d2個位元幣。如果是傳統的記賬方式,這些交易會記錄在銀行的系統中,這些資訊由銀行來記錄,我們相信銀行不會隨意新增、刪除或修改一條交易記錄,我們也不會關注到底有哪些交易,我們只關注自己的賬戶餘額。而位元幣的記賬方式為abcd每個人儲存了這樣乙份賬本,賬本上記錄了上述交易內容,如果每個人賬本實時的一致,abcd就不再需要銀行。

位元幣是這樣做的,每當有人發起一筆交易,他就要將一筆交易廣播至全網,由全網中的某乙個人,把一段時間內的交易打包好記錄到乙個區塊上,再按照順序把這些區塊,乙個乙個的鏈結在一起,進而形成了乙個鏈條,這就是所謂的區塊鏈。

那麼問題來了

1、我憑什麼要參與這個系統,我為什麼要動用自己的計算機資源來儲存這些資訊呢?

2、以誰的記錄為準呢?比如上面的賬單順序,a使用者可能是這個順序,但是b可能順序不一樣,甚至可能b根本就沒有接收到c給d轉賬的這個訊息。

3、位元幣如果做到支付功能,保證該是誰的錢就是誰的錢,而且只有其所有者才能花。

4、如何防偽、防篡改以及雙重支付,防偽是驗證每條交易的真的是某人發出的,比如b可能杜撰一條訊息,說某某給我轉了一筆錢,這就是乙個假訊息,或者b說我給某人轉了多少錢,但是實際上他並沒有這麼多錢,又怎麼辦。防篡改指的是b可能想從區塊鏈上把自己曾經轉給某人錢的記錄刪掉,這樣他的餘額就會增加。雙重支付是指,b只有10位元幣,他同時向c和d轉10個位元幣,造成雙重花費。

三、為什麼要記賬?

因為記賬有獎勵,記賬有手續費的收益,而且打包區塊的人有系統獎勵,獎勵方案是,每十分鐘生成乙個區塊,每生成乙個區塊會獎勵一定數量的位元幣,最開始是50個btc,過4年會獎勵25個btc,再過4年再減少一半,以此類推。這樣位元幣的產生會越來越少,越來越趨近於乙個最大值,計算公式是:50×6×24×365×4×(1+1/2+1/4+1/8+…)≈2100萬,其中最初獎勵50個位元幣,每小時有6個區塊,每天24小時,每年365天,前四年是如此,之後每四年減半。

此外,記賬獎勵還有每筆交易的小額手續費,每個交易發起都會附帶一定的手續費,這些手續費是給記賬的礦工的。

四、以誰為準?

各個節點通過工作量證明機制來爭奪記賬權,他們計算乙個很複雜的數學題,第乙個計算出來的節點就是下乙個區塊的產生者。這個數學題很難,難到沒有乙個人能同過腦子算出來,它是基於概率的方法,礦工必須通過遍歷、猜測和嘗試的辦法才能解開這個未知數。那麼這個數學難題到底是什麼呢?下面詳細介紹。

4.1雜湊函式

雜湊函式又稱為數字摘要或雜湊函式,它的特點是輸入乙個字串,可以生成另外乙個字串,但是如果輸入不同,輸出的字串就一定不同,而且通過輸出的字串,不能反推出輸入。舉個簡單的例子,對1-100內的數模10,可以認為是一種雜湊方法,比如98%10=8,66%10=6,98和66是輸入,模10是雜湊函式,8和6是輸出,在這個模型中,通過6和8無法推斷輸入是66和98,因為還可能是56和88等,當然因為這個例子比較簡單,所以會出現雜湊碰撞,即66和56的結果都是6,輸出的結果相同。乙個優秀的雜湊函式,可以做到輸出一定不同,雜湊碰撞的概率幾乎為0。常見的雜湊函式有很多,比如md系列和sha系列等,位元幣採用的sha256演算法,即輸入乙個字串,輸出乙個256位的二進位制數…

4.2挖礦原理

首先介紹一下位元幣每個區塊的資料結構,每個區塊由區塊頭和區塊體兩部分組成。

區塊體中包含了礦工蒐集的若干交易資訊,圖中假設有8個交易被收錄在區塊中,所有的交易生成一顆默克爾樹,默克爾樹是一種資料結構,它將葉子節點兩兩雜湊,生成上一層節點,上層節點再雜湊,生成上一層,直到最後生成乙個樹根,稱之為默克爾樹根,只有樹根保留在區塊頭中,這樣可以節省區塊頭的空間,也便於交易的驗證。

區塊頭中包含父區塊的雜湊,版本號,當前時間戳,難度值,隨機數和上面提到的默克爾樹根。

假設區塊鏈已經鏈結到了某個塊,有abcd四個節點已經蒐集了前十分鐘內全網中的一些交易資訊,他們選出其中約4k條交易,打包好,生成默克爾樹根,將區塊頭中的資訊,即發區塊雜湊+版本號+時間戳+難度值+隨機數+默克爾樹根組成乙個字串str,通過兩次雜湊函式得出乙個256的二進位制數,即sha256(sha256(str)) = 10010011……共256位,位元幣要求,生成的結果,前n位必須是0,n就是難度值,如果現在生成的二進位制數不符合要求,就必須改變隨機數的值,重新計算,只到算出滿足條件的結果為止。假設現在n是5,則生成的二進位制數必須是00000……(共256位)。一旦挖礦成功,礦工就可以廣播這個訊息到全網,其他的礦工就會基於該區塊繼續挖礦。下乙個區塊頭中的父區塊雜湊值就是上乙個區塊生成的00000……這個數。

解決這個數學難題要靠運氣,理論上,運氣最好的礦工可能1次雜湊就能算出結果,運氣差的可能永遠都算不出來。但是總體來看,如果乙個礦工的算力越大,單位時間內進行的雜湊次數就越多,就越可能在短時間內挖礦成功。

那麼n是如何確定的呢?位元幣設計者希望,總體上平均每十分鐘產生乙個區塊,總體上來看,挖礦成功的概率為1/2^n。現假設世界上有1w台礦機,每台礦機的算力是14t次/s = 1.4×1013次/s,單位次/s稱之為雜湊率,10分鐘是600s,所以10分鐘可以做8×1019次雜湊運算,從概率角度看,想要挖礦成功需要做2n次運算,可以列出等式2n = 8×10^19,可以解出n約為66。所以對於這種方法,我們沒有辦法使得自己的運氣變的更好,只能提高自己的算力,盡快的算出結果。

位元幣原理1

雜湊函式 原始資訊 摘要資訊同樣的原始資訊用同乙個雜湊函式總是能得到相同的摘要資訊,原始資訊的微小變化都會雜湊出面目全非的摘要資訊,從摘要資訊無法逆向推算出原始資訊。hash 序號,時間戳,交易資訊 雜湊值,雜湊函式的怎麼實現的?區塊 序號,時間戳,雜湊值 交易資訊10分鐘出塊雜湊值 hash ha...

位元幣原理一(四個問題)

一 賬本如何驗證 哪乙個賬本是有效的 假如有這樣乙個賬本 賬號收入 支出餘額 王二100 100張三 10030 李四120 90110 趙五300 600這樣的乙個賬本,分別存在於王 二 張三 李 四 趙五的電腦中。在這時可能有人會增加自己的餘額,比如張三偷偷把自己的餘額從30改為300,這樣網路...

一段程式看懂位元幣原理

自從位元幣火起來以後,網上對位元幣的解釋可謂汗牛充棟,紛繁複雜。但對於程式設計師來說,最直接的方式莫過於直接看程式 了。嫌位元幣 龐雜沒關係,我找到一段簡明扼要的 用來理解位元幣再好不過了。以下這段程式 知乎上wu hao的回答。function mine function sendbtc amou...