bitcoin的技術原理

想了解bitcoin的技術原理?

首先需要了解兩個重要的密碼技術:

  • HASH碼:將一個長字符串轉換成固定長度的字符串,並且其轉換不可逆,即不太可能從HASH碼猜出原字符串。bitcoin協議裏使用的主要是SHA256。
  • 公鑰體系:對應一個公鑰和私鑰,在應用中自己保留私鑰,並公開公鑰。當甲向乙傳遞信息時,可使用甲的私鑰加密信息,乙可用甲的公鑰進行解密,這樣可確保第三方無法冒充甲發送信息;同時,甲向乙傳遞信息時,用乙的公鑰加密後發給乙,乙再用自己的私鑰進行解密,這樣可確保第三者無法偷聽兩人之間的通信。最常見的公鑰體系爲RSA,但bitcoin協議裏使用的是lliptic Curve Digital Signature Algorithm。

和現金、銀行賬戶的區別?

bitcoin爲電子貨幣,單位爲BTC。在這篇文章裏也用來指代整個bitcoin系統。
和在銀行開立賬戶一樣,bitcoin裏的對應概念爲地址。每個人都可以有1個或若干個bitcoin地址,該地址用來付賬和收錢。每個地址都是一串以1開頭的字符串。

例如: 我有兩個bitcoin賬戶,1911HhKdLbnsffT5cRSiHgK3mdzMiyspXf和1JSUzrzMk7f6iymfVkvqLBJDBZXBopyfZK。一個bitcoin賬戶由一對公鑰和私鑰唯一確定,要保存賬戶,只需要保存好私鑰文件即可。

和銀行賬戶不一樣的地方在於,銀行會保存所有的交易記錄和維護各個賬戶的賬面餘額,而bitcoin的交易記錄則由整個P2P網絡通過事先約定的協議共同維護。

我的賬戶地址裏到底有多少錢?

雖然使用bitcoin的軟件可以看到當前賬戶的餘額,但和銀行不一樣,並沒有一個地方維護每個地址的賬面餘額。它只能通過所有歷史交易記錄去實時推算賬戶餘額

我如何付賬?

當我從地址A向對方的地址B付賬時,付賬額爲e,此時雙方將向各個網絡節點公告交易信息,告訴地址A向地址B付賬,付賬額爲e。
爲了防止有第三方僞造該交易信息,該交易信息將使用 地址A的私鑰 進行加密,此時接受到該交易信息的網絡節點可以 使用地址A的公鑰 進行驗證該交易信息的確由A發出。當然交易軟件會幫我們做這些事情,我們只需要在軟件中輸入相關參數即可。

網絡節點後收到交易信息後會做什麼?

這個是整個bitcoin系統裏最重要的部分,需要詳細闡述。爲了簡單起見,這裏只使用目前已經實現的 bitcoin協議
在當前版本中,每個網絡節點都會通過同步保存所有的交易信息。

歷史上發生過的所有交易信息分爲兩類:
1. 一類爲 “驗證過”的交易信息
即已經被驗證過的交易信息,它保存在一連串的“blocks”裏面。每個”block”的信息爲前一個”bock”的ID(每個block的ID爲該block的HASH碼的HASH碼)和新增的交易信息(參見一個實際的block)。例如:block_ID1 + 交易信息1 + block_ID2 + 交易信息2 ...

  1. 另外一類指那些 “還未驗證”的交易信息
    上面剛剛付賬的交易信息就屬於此類。
    當一個網絡節點接收到新的未驗證的交易信息之後(可能不止一條),由於該節點保存了歷史上所有的交易信息,它(網絡節點)可以推算中在當時每個地址的賬面餘額,從而可以推算出該交易信息是否有效,即付款的賬戶裏是否有足夠餘額。在剔除掉無效的交易信息後,它首先取出最後一個”block”的ID,然後將這些未驗證的交易信息和該ID組合在一起,再加上一個驗證碼,形成一個新的“block”。例如:新的 block = block_ID? + 交易信息 + 驗證碼
    上面構建一個新的block需要大量的計算工作,因爲它需要計算驗證碼,使得上面的組合成爲一個block,即該block的HASH碼的HASH碼的前若干位爲1。目前需要前13位爲1(大致如此,不確定具體方式),此意味着如果通過枚舉法生成block的話,平均枚舉次數爲16^13次。使用CPU資源生成block被稱爲挖金礦,因爲生產該block將得到一定的獎勵,該獎勵信息已經被包含在這個block裏面。

當一個網絡節點生成一個新的block時,它將廣播給其它的網絡節點。但這個網絡block並不一定會被網絡接受,因爲有可能有別的網絡節點更早生產出了block,只有最早產生的那個block或者後續block最多的那個block有效,其餘block不再作爲下一個block的初始block

對方如何確認支付成功?

當該筆支付信息分發到網絡節點後,網絡節點開始計算該交易是否有效(即賬戶餘額是否足夠支付),並試圖生成包含該筆交易信息的blocks。當累計有6個blocks(1個直接blocks和5個後續blocks)包含該筆交易信息時,該交易信息被認爲“驗證過”,從而該交易被正式確認,對方可確認支付成功。
一個可能的問題爲,我將地址A裏面的餘額都支付給地址B,同時又支付給地址C,如果只驗證單比交易都是有效的。此時,我的作弊的方式爲在真相大白之前產生6個僅包括B的block發給B,以及產生6個僅包含C的block發給C。由於我產生block所需要的CPU時間非常長,與全網絡相比,我這樣作弊成功的概率微乎其微。

網絡節點生產block的動機是什麼?

從上面描述可以看出,爲了讓交易信息有效,需要網絡節點生成1個和5個後續block包含該交易信息,並且這樣的block生成非常耗費CPU。那怎麼樣讓其它網絡節點儘快幫忙生產block呢?答案很簡單,協議規定對生產出block的地址獎勵BTC,以及交易雙方承諾的手續費。目前生產出一個block的獎勵爲50BTC,未來每隔四年減半,比如2013年到2016年之間獎勵爲25BTC。(目前2017年開始是 12.5)
(挖礦的目的,幫別人計算交易信息產生新的 block:blockID + 驗證信息)

交易是匿名的嗎?

是,也不是。所有BITCOIN的交易都是可見的,我們可以查到每個賬戶的所有交易記錄,比如我的。但與銀行貨幣體系不一樣的地方在於,每個人的賬戶本身是匿名的,並且每個人可以開很多個賬戶。總的說來,所謂的匿名性沒有宣稱的那麼好。
但bitcoin用來做黑市交易的還有一個好處,它無法凍結。即便警方追蹤到了某個bitcoin地址,除非根據網絡地址追蹤到交易所使用的電腦,否則還是毫無辦法。

如何保證bitcoin不貶值?

一般來說,在交易活動相當的情況下,貨幣的價值反比於貨幣的發行量。不像傳統貨幣市場,央行可以決定貨幣發行量,bitcoin裏沒有一箇中央的發行機構。只有通過生產block,才能獲得一定數量的BTC貨幣。所以bitcoin貨幣新增量決定於:
1、生產block的速度:bitcoin的協議裏規定了生產block的難度固定在平均2016個每兩個星期,大約10分鐘生產一個。CPU速度每18個月速度加倍的摩爾定律,並不會加快生產block的速度。
2、生產block的獎勵數量:目前每生產一個block獎勵50BTC,每四年減半,2013年開始獎勵25BTC,2017年開始獎勵額爲12.5BTC。
綜合上面兩個因素,bitcoin貨幣發行速度並不由網絡節點中任何單個節點所控制,其協議使得貨幣的存量是事先已知的,並且最高存量只有2100萬BTC(目前每週增加約5萬BTC)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章