區塊鏈交易的流程分析

區塊鏈絕非單一的創新技術,而是將許多跨領域技術湊在一塊兒,包括演算法、數學、密碼學與經濟模型,並結合點對點(P2P)網路關係,利用數學基礎就能創建信任效果,成爲一個不需基於彼此信任基礎、也不需依賴單一中心化機構就可以運做的分散式系統,而比特幣即是第一個採用區塊鏈技術而打造出的一套P2P電子現金系統,用來實現一個可去中心化,並確保交易安全性、可追蹤性的數位貨幣體系。
在這裏插入圖片描述
如今,包括大數據、物聯網、基因工程、3D打印、量子工程、人工智能、無人駕駛、機器人AI和區塊鏈將帶來第四次工業革命,工業4.0時代全面開啓。著名的《經濟學人》雜誌於2015年10月發了題爲《The trust machine》的封面文章,將區塊鏈被比喻爲「信任的機器」。
區塊鏈基於數學原理解決了交易過程的全部權確認問題,保障系統對價值交換活動的記錄、傳輸、存儲結果都是可信的。區塊鏈記錄的信息一旦生成將永久記錄,沒法篡改,除非能擁有全網絡總算力的51%以上纔有可能修改最新生成的一個區塊記錄!區塊鏈的交易並非一般意義上的一手交錢一手交貨的交易,而是轉帳。
若是每一筆轉帳都須要構造一筆交易數據會比較笨拙,爲了使得價值易於組合與分割,比特幣的交易被設計爲能夠歸入多個輸入輸出,即一筆交易能夠轉帳給多我的。
1、區塊鏈究竟能夠作什麼呢?
區塊鏈解決了信任危機
著名的《經濟學人》雜誌於2015年10月發了題爲《The trust machine》的封面文章,將區塊鏈被比喻爲「信任的機器」。
區塊鏈基於數學原理解決了交易過程的全部權確認問題,保障系統對價值交換活動的記錄、傳輸、存儲結果都是可信的。區塊鏈記錄的信息一旦生成將永久記錄,沒法篡改,除非能擁有全網絡總算力的51%以上纔有可能修改最新生成的一個區塊記錄。
區塊鏈的數學原理是hash 方程,看到這裏,相信數學學霸和程序猿們已經明白啦。不明白的童鞋請繼續往下看。
在這裏插入圖片描述2、區塊鏈的交易流程
一、交易的生成
在這裏插入圖片描述
當前全部者利用私鑰對前一次交易和下一位全部者簽署一個數字簽名,並將這個簽名附加在這枚貨幣的末尾,製做成交易單。一筆新交易產生時,會先被廣播到區塊鏈網絡中的其它參與節點。
二、交易的傳播
在這裏插入圖片描述
當前全部者將交易單廣播至全網,每一個節點會將數筆未驗證的交易Hash值收集到區塊中,每一個區塊能夠包含數百筆或上千筆交易。最快完成POWwww.kaifx.cn的節點,會將本身的區塊傳播給其餘節點。
三、工做量證實
在這裏插入圖片描述
每一個節點經過至關於解一道數學題的工做量證實機制,從而得到建立新區塊的權力,並爭取獲得數字貨幣的獎勵。各節點進行工做量證實的計算來決定誰能夠驗證交易,由最快算出結果的節點來驗證交易,這就是取得共識的作法。
四、全節點驗證
在這裏插入圖片描述
當一個節點找到截時,它就向全網廣播該區塊記錄的全部蓋時間戳的交易,並由全網其餘節點核對,其餘節點會確認這個區塊所包含的交易是否有效,確認沒被重複花費且具備效數位簽章後,接受該區塊,此時區塊才正式接上區塊鏈,沒法再竄改資料。
五、區塊鏈記錄
在這裏插入圖片描述
全網其餘節點核對該區塊記帳的正確性,沒有錯誤後他們將在該合法區塊以後競爭下一個區塊,這樣就造成了一個合法記帳的區塊。全部節點一旦接受該區塊後,先前沒算完POW工做的區塊會失效,各節點會從新創建一個區塊,繼續下一回POW計算工做。每一個區塊的建立時間大約在10分鐘,隨着全網算力的不斷變化,每一個區塊的產生時間會隨算力加強而縮短,隨算力減弱而延長。
3、區塊鏈交易的7個步驟
步驟1:1個用戶在他們的錢包裏確認交易,嘗試發送某種加密貨幣給其餘人。
步驟2:交易由錢包傳達出去並等待對應的區塊鏈上的礦工接收。只要沒有接受,它就會等待在「未確認的交易池」中。這是一個待處理的未確認的交易集合池。而這些待確認的交易一般不會集中在一個巨型池中,而是在分開的小型本地池中。
步驟3:網絡上的礦工(有時稱爲節點,但不徹底相同!)從這些池中選擇交易並造成「區塊」。除了一些額外的元數據以外,塊區基本上是交易的集合(此時,仍然是未經確認的交易)。每一個礦工都構建本身的交易塊,多個礦工能夠選擇一樣的交易包含在本身的區塊中。
示例:有兩名礦工,礦工A和礦工B。礦工A和礦工B均可以將交易X包含在本身的區塊中。每一個區塊鏈都有本身的區塊規模。在比特幣區塊鏈上,區塊最大可存儲1 MB數據。在向區塊添加交易以前,礦工須要根據區塊鏈歷史檢查交易是否有可以進行。根據當前區塊鏈歷史記錄,若是發起人的錢包餘額充足,則交易被認爲是有效的而且能夠添加到該區塊中。礦工一般會優先考慮高交易費的交易,這樣回報更高。
步驟4:經過選擇交易並將其添加到本身的區塊,礦工建立了一個交易塊。爲了把交易塊添加到區塊鏈(讓全部礦工和節點記錄),該區塊須要簽名(也稱爲工做證實)。此簽名是經過解決每一個交易塊所特有的數學問題來建立。每一個區塊都有不一樣的數學題,所以每一個礦工須要處理他們構建的區塊所特有的問題,全部這些問題難度相同。爲了解決這個數學問題,大量算力被佔用(所以須要大量的電力)。你能夠想象成在計算器上運行計算,只是在電腦上更難,這就是挖礦的過程。若是你想了解更多數學問題的解決過程,請繼續閱讀下文,或者請跳至步驟5。
挖礦又叫哈希(工做量證實共識算法)
當在區塊鏈上添加區塊時,每一個礦工面臨的數學問題是爲其區塊中的數據找到哈希輸出(也稱爲簽名),該輸出以必定量的連續零開始。這聽起來很複雜吧?但實際上並不那麼難。咱們試着用一個簡單的方法解釋。
在咱們繼續以前,瞭解什麼是哈希函數很重要。哈希函數是一個很難解決的數學問題,但答案很容易驗證。
哈希函數接收數字和字母的字符串(任意隨機字母,數字或者符號的字符串),並將其轉換爲由隨機字母和數字組成的新的32位字符串。這個32位數字符串是哈希輸出。若是接收的字符串中任何數字或字母發生更改,則哈希輸出也將隨機變化。可是,接收相同的字符串將始終獲得相同的字符串輸出。
如今將區塊內的數據想象爲哈希輸入(一個數據串),當對此輸入進行哈希處理時,它會獲得哈希輸出(32位字符串)。比特幣區塊鏈的一個規則是,若是一個區塊的簽名(哈希輸出)以必定量的零開始,才能將其添加到區塊鏈中。可是,輸出字符串每次都是由隨機的輸入字符串產生的,那麼若是區塊的數據字符串不能產生以多個連續零開頭的簽名(哈希輸出)怎麼辦?好吧,這就是爲何礦工須要反覆更改其區塊內數據,這稱爲nonce。每次礦工更改nonce時輸入字符串都會改變,所以也會產生隨機的輸出字符串(簽名)。礦工一直重複此過程直到找到知足簽名要求(以多個連續零開始)的輸出字符串。下面有一個示例,它使用七個零,但零的數量實際上取決於區塊鏈的「區塊難度」。「區塊難度」有點複雜,因此我建議你先保存(如今不是很是重要)。
這就是礦工們找到合格簽名的過程,也是解決這個數學問題須要如此多算力的緣由。如此多的nonce須要花費大量的時間和算力;若是更多的礦工加入區塊鏈,數學問題的難度也會隨之增長,這將致使更高的電費。若是你很好地理解這個過程,如今讓咱們來看第5步。
步驟5:礦工首先爲區塊找到合格的簽名,而後再把該區塊及其簽名廣播給其餘礦工。
步驟6:其餘礦工須要確認簽名的合法性,經過接收被廣播的區塊的數據串來計算輸出的字符串是否匹配簽名。若是它是有效的,其餘礦工將確認其有效性並贊成該區塊能夠添加到區塊鏈中(他們達成共識,也就是說彼此一致,所以術語叫共識算法)。這也是「工做量證實」的來源。簽名就是所執行工做的「證實」(花費了算力)。而後該區塊就能夠添加到區塊鏈中,並被網絡上的其餘節點傳播。只要區塊內的交易與當前錢包餘額(經過交易歷史)能對應,其餘節點就會接受該區塊並保存到其交易數據中。
步驟7:將一個區塊添加到鏈上後,以後添加的每一個區塊都被當作該區塊再次的「確認」。例如,若是個人交易包含在區塊502中,總共鏈長是507個區塊,則意味着個人交易被5次確認(從502-507)。之因此被稱爲確認,由於以後添加區塊時,區塊鏈會在總體交易歷史上再次達成共識,包括你的交易及區塊。因此能夠說區塊鏈確認了你的交易5次。這也是Etherscan在展現交易詳情時所指的內容。你的交易被確認次數越多(也就是嵌入鏈中更深的區塊),攻擊者就越難以改變它。在添加新區塊到區塊鏈後,全部礦工須要從第3步造成一個新的交易區塊開始。這是,礦工們不能繼續(實際上他們能夠,但這與本文無關)挖掘來解決區塊中的問題,緣由有兩個:
一、它可能包含已被添加到區塊鏈的上一個區塊確認的交易(請記住,礦工能夠選擇/包含區塊中相同的交易),所以這些交易中的一些可能再也不有效,而使整個區塊無效。
二、每一個區塊都須要添加上一個區塊的哈希輸出(簽名),這個哈希輸出已經添加到區塊鏈的元數據中。這就是它成爲區塊鏈的過程。若是礦工繼續挖掘他們正在處理的區塊,其餘礦工就會看到哈希輸出與區塊鏈上最新添加的區塊不對應,所以將遭到拒絕。web