⑴ 請問大家默克爾哈希樹是什麼它有什麼用處
這是比特幣核心代碼組成員Greg Maxwell主導的項目,主要給交易平台的審計程序提供一個公開的、可信賴的演算法。該演算法也被應用到亞馬遜的Dynamo項目中,以及分布式資料庫Cassandra。
顧名思義,「默克爾哈希樹(Merkel Hash Tree)」是一棵樹狀的數據結構(二叉或多叉),該樹狀結構的所有節點(昵稱「葉子」)都是Hash值。
在審計之前,交易平台向第三方審計者,提供完整的哈希樹節點信息,例如每個用戶的賬戶(金額、ID等)審計信息(據以計算節點哈希值的原始數據),以及交易平台的錢包和地址總余額。
因而,交易平台的地址隱私,至少暴露給了第三方審計者。而第三方審計者要對鑒定結果出具意見,承擔商業責任。
⑵ 什麼是默克爾樹
默克爾樹(Merkle tree)是一種哈希二叉樹,1979年由Ralph Merkle發明,將數據存儲在樹狀結構的葉子節點中,並通過對數據的逐級哈希(Hash)操作確保數據的不可篡改性。葉子節點數據的任何變動,都會傳遞到上一級節點並最終反應到樹根的變化。比特幣區塊裡面的每一筆交易就是通過默克爾樹結構進行存儲的。
⑶ 比特幣機制研究
現今世界的電子支付系統已經十分發達,我們平時的各種消費基本上在支付寶和微信上都可以輕松解決。但是無論是支付寶、微信,其實本質上都依賴於一個中心化的金融系統,即使在大多數情況這個系統運行得很好,但是由於信任模型的存在,還是會存在著仲裁糾紛,有仲裁糾紛就意味著不存在 不可撤銷的交易 ,這樣對於 不可撤銷的服務 來說,一定比例的欺詐是不可避免的。在比特幣出來之前,不存在一個 不引入中心化的可信任方 就能解決在通信通道上支付的方案。
比特幣的強大之處就在於:它是一個基於密碼學原理而不是依賴於中心化機構的電子支付系統,它能夠允許任何有交易意願的雙方能直接交易而不需要一個可信任的第三方。交易在數學計算上的不可撤銷將保護 提供不可撤銷服務 的商家不被欺詐,而用來保護買家的 程序化合約機制 也比較容易實現。
假設網路中有A, B ,C三個人。
A付給B 1比特幣 ,B付給C 2比特幣 ,C付給A 3比特幣 。
如下圖所示:
為了刺激比特幣系統中的用戶進行記賬,記賬是有獎勵的。獎勵來源主要有兩方面:
比特幣中每一筆交易都會有手續費,手續費會給記賬者
記賬會有打包區塊的獎勵,中本聰在08年設計的方案是: 每10分鍾打一個包,每打一個包獎勵50個比特幣,每4年單次打包的獎勵數減半,即4年後每打一個包獎勵25個比特幣,再過四年後就獎勵12.5個比特幣... 這樣我們其實可以算出比特幣的總量:
要說明打包的記錄以誰為準的問題,我們需要引入一個知名的 拜占庭將軍問題 (Byzantine failures)。拜占庭將軍問題是由萊斯利·蘭伯特提出的點對點通信中的基本問題。含義是在存在消息丟失的不可靠信道上試圖通過消息傳遞的方式達到一致性是不可能的。
假設有9個互相遠離的將軍包圍了拜占庭帝國,除非有5個及以上的將軍一起攻打,拜占庭帝國才能被打下來。而這9個將軍之間是互不信任的,他們並不知道這其中是否有叛徒,那麼如何通過遠距離協商來讓他們贏取戰斗呢?
口頭協議有3個默認規則:
1.每個信息都能夠被准確接收
2.接收者知道是誰發送給他的
3.誰沒有發送消息大家都知道
4.接受者不知道轉發信息的轉發者是誰
將軍們遵循口頭規則的話,那就是下面的場景:將軍1對其他8個將軍發送了信息,然後將軍2~9將消息進行轉達(廣播),每個將軍都是消息的接受者和轉發者,這樣一輪下來,總共就會有9×8=72次發送。這樣將軍就可以根據自己手中的信息,選擇多數人的投票結果行動即可,這個時候即便有間諜,因為少數服從多數的原則,只要大部分將軍同意攻打拜占庭,自己就去行動。
這個方案有很多缺點:
1.首先是發送量大,9個將軍之間要發送72次,隨著節點數的增加,工作量呈現幾何增長。
2.再者是無法找出誰是叛徒,因為是口頭協議,接受者不知道轉發信息的轉發者是誰,每個將軍手裡的數據僅僅只是一個數量的對比:
這里我們假設有3個叛徒,在一種最極端的情況下即叛徒轉發信息時總是篡改為「不進攻」,那麼我們最壞的結果就如上圖所示。將軍1根據手裡的信息可以推出要進攻的結論,卻無法獲知將軍裡面誰是叛徒。
這樣我們就有了方案二:書面協議。
書面協議即將軍在接受到信息後可以進行簽字,並且大家都能夠識別出這個簽字是否是本人,換種說法就是如果有人篡改簽字大家可以知道。書面協議相對比口頭協議就是增加了一個認證機制,所有的消息都有記錄。一旦發現有人所給出的信息不一致,就是追查間諜。
有了書面協議,那麼將軍1手裡的信息就是這樣的:
可以很明顯得看出,在最壞的一種情況——叛徒總是轉發「不進攻」的消息之下,將軍7、8、9是團隊里的叛徒。
這個方案解決了口頭協議里歷史信息不可追溯的問題,但是在發送量方面並沒有做到任何改進。
在我們的示例中,比特幣系統里的每個用戶發起了一筆交易,都會通過自己的私鑰進行簽名,用數學公式表示就是:
所以之前的區塊就變成了這樣:
這樣每一筆交易都由交易發起者通過私鑰進行數字簽名,由於私鑰是不公開的,所以交易信息也就無法被偽造了。
如書面協議末尾所說的那樣,書面協議未能解決信息交流過多的問題。當比特幣系統中存在上千萬節點的時候,如果要互相廣播驗證,請求響應的次數那將是一個非常龐大的數字,顯然勢必會造成網路擁堵、節點處理變慢。為了解決這個問題,中本聰乾脆讓整個10分鍾出一個區塊,這個區塊由誰來打包發出呢?這里就採用了工作量證明機制(PoW)。工作量證明,說白了就是解一個數學題,誰先解出來數學題,誰就能有打包區塊的權力。換在拜占庭將軍的例子中就是,誰先做出數學題,誰就成為將軍們裡面的總司令,其他將軍聽從他發號的命令。
首先,礦工會將區塊頭所佔用的128位元組的字元串進行兩次sha256求值,即:
這樣求得一個值Hash,將其與目標值相比對,如果符合條件,則視為工作量證明成功。
工作量證明成功的條件寫在了區塊鏈頭部的 難度數 欄位,它要求了最後進行兩次sha256運算的Hash值必須小於定下的目標值;如果不是的話,那就改變區塊頭的 隨機數 (nonce),通過一次次地重復計算檢驗,直到符合條件為止。
此外, 比特幣有自己的一套難度控制系統,使得比特幣系統要在全網不同的算力條件下,都保持10分鍾生成一個區塊的速率。這也就意味著:難度值必須根據全網算力的變化進行調整。難度調整的策略是由最新2016個區塊的花費時長與期望時長(期望時長為20160分鍾即兩周,是按每10分鍾一個區塊的產生速率計算出的總時長)比較得出的,根據實際時長與期望時長的比值,進行相應調整(或變難或變易)。也就是說,如果區塊產生的速率比10分鍾快則增加難度,比10分鍾慢則降低難度。
PoW其實在比特幣中是做了以下的三件事情。
這樣可以防止一台高性能機器同時跑上萬個節點,因為每完成一個工作都要有足夠的算力。
有經濟獎勵就會加速整個系統的去中心化,也鼓勵大家不要去作惡,要積極地按照協議本來的執行方式去執行。(所以說,無幣區塊鏈其實是不可行的,無幣區塊鏈一定導致中心化。)
也就是說,每個節點都不能以自身硬體條件去控制出快速度。現在的比特幣上平均10分鍾出一個塊,性能再好的機器也無法打破這個規則,這就能夠保證 區塊鏈是可以收斂到共同的主鏈上的 ,也就是我們所說的共識。
綜上,共識只是PoW三個作用中的一點,事實上PoW設計的作用有點至少有這么三種。
默克爾樹的概念其實很簡單,如圖所示
這樣,我們區塊的結構就大致完整了,這里分成了區塊頭和區塊體兩部分。
區塊鏈的每個節點,都保存著區塊鏈從創世到現在的每一區塊,即每一筆交易都被保存在節點上,現在已經有幾百個GB了。
每當比特幣系統中有一筆新的交易生成,就會將新交易廣播到所有的節點。每個節點都把新交易收集起來,並生成對應的默克爾根,拼接完區塊頭後,就開始調整區塊頭里的隨機數值,然後就開始算數學題
將算出的result和網路中的目標值進行比對,如果是結果是小於的話,就全網廣播答案。其他礦工收到了這個信息後,就會立馬放下手裡的運算,開始下一個區塊的計算。
舉個例子,當前A節點在挖38936個區塊,A挖礦節點一旦完成計算,立刻將這個區塊發給它的所有相鄰節點。這些節點在接收並驗證這個新區塊後,也會繼續傳播此區塊。當這個新區塊在網路中擴散時,每個節點都會將它作為第38936個區塊(前一個區塊為38935)加到自身節點的區塊鏈副本中。當挖礦節點收到並驗證了這個新區塊後,它們會放棄之前對構建這個相同高度區塊的計算,並立即開始計算區塊鏈中下一個區塊的工作。
整個流程就像下一張圖所展示的這樣:
簡單來說,雙花問題是一筆錢重復花了兩次。具體來講,雙花問題可分為兩種情況:
1.同一筆錢被多次使用;
2.一筆錢只被使用過一次,但是通過黑客攻擊或造假等方式,將這筆錢復制了一份,再次使用。
在我們生活的數字系統中,由於數據的可復制性,使得系統可能存在同一筆數字資產因不當操作被重復使用的情況,為了解決雙花問題,日常生活中是依賴於第三方的信任機構的。這類機構對數據進行中心化管理,並通過實時修改賬戶余額的方法來防止雙重支付的出現。而作為去中心化的點對點價值傳輸系統,比特幣通過UTXO、時間戳等技術的整合來解決雙花問題。
UTXO的英文全稱是 unspent transaction outputs ,意為 未使用的交易輸出 。UTXO是一種有別於傳統記賬方式的新的記賬模型。
銀行里傳統的記賬方式是基於賬戶的,主要是記錄某個用戶的賬戶余額。而UTXO的交易方式,是基於交易本身的,甚至沒有賬戶的概念。在UTXO的記賬機制里,除了貨幣發行外,所有的資金來源都必須來自於前面某一個或幾個交易。任何一筆的交易總量必須等於交易輸出總量。UTXO的記賬機制使得比特幣網路中的每一筆轉賬,都能夠追溯到它前面一筆交易。
比特幣的挖礦節點獲得新區塊的挖礦獎勵,比如 12.5 個比特幣,這時,它的錢包地址得到的就是一個 UTXO,即這個新區塊的幣基交易(也稱創幣交易)的輸出。幣基交易是一個特殊的交易,它沒有輸入,只有輸出。
當甲要把一筆比特幣轉給乙時,這個過程是把甲的錢包地址中之前的一個 UTXO,用私鑰進行簽名,發送到乙的地址。這個過程是一個新的交易,而乙得到的是一個新的 UTXO。
這就是為什麼有人說在這個世界上根本沒有比特幣,只有 UTXO,你的地址中的比特幣是指沒花掉的交易輸出。
以Alice向Bob進行轉賬的過程舉例的話:
UTXO 與我們熟悉的賬戶概念的差別很大。我們日常接觸最多的是賬戶,比如,我在銀行開設一個賬戶,賬戶里的余額就是我的錢。
但在比特幣網路中沒有賬戶的概念,你可以有多個錢包地址,每個錢包地址中都有著多個 UTXO,你的錢是所有這些地址中的 UTXO 加起來的總和。
中本聰發明比特幣的目標是創建一個點對點的電子現金,UTXO 的設計正可以看成是借鑒了現金的思路:我們可能在這個口袋裡裝點現金,在那個櫃子角落裡放點現金,在這種情況下不存在一個賬戶,你放在各處的現金加起來就是你所有的錢。
採用 UTXO 設計還有一個技術上的理由,這種特別的數據結構可以讓雙重花費更容易驗證。對比一下:
⑷ 關於比特幣的謎題(完結)
你可曾想過: 為什麼礦機算力越大越好?(既然是解數學題那為什麼不是拼誰的演算法厲害啊喂!) 比特幣的數量總和為什麼是2100萬? 比特幣盜竊是怎麼回事? 我不玩比特幣,就真的與比特幣無關了嗎…… 🤔️
關於大眾不再感到陌生的比特幣,背後還有許多巧妙之處。本文介紹了比特幣的基本原理和主要原則,並結合對部分技術細節的剖析,來對上述的一些疑問作出解答。全文較長,約7000字,閱讀時間約為22分鍾,建議收藏後閱讀😁
文章可以分成以下幾個部分:
* 比特幣先驗知識
-- 密碼學相關
-- 比特幣重要概念
* 交易的生命周期
* 區塊鏈的構成
* 區塊鏈的生長
-- 「挖礦」的數學本質
-- 「礦工」的收益
* 比特幣的共識機制
-- 比特幣的去中心化共識
-- 「最長鏈優先」原則
* 比特幣安全性
比特幣作為第一個去中心化的數字貨幣,其設計中運用了不少的密碼學相關知識,主要包括非對稱加密技術、哈希函數等等。理解這些密碼學知識,能幫助我們更好地理解比特幣中的一些概念及規則。
以下是比特幣的一些定義及概念解說,了解過的小夥伴們可以直接跳過~
在比特幣這個創新的支付網路中,一個交易的生命周期大概可以分為幾個階段:創建、傳播和被驗證交織、被打包進區塊記錄到區塊鏈中、獲得更多的確認。圖1對這幾個階段做出了示意。
註:
1⃣️一個支付方A在發起一個比特幣交易時,會使用自己的私鑰對交易信息的哈希值進行簽名。因此A向全網廣播的內容除了交易信息之外,還有自己的公鑰信息、對消息的簽名。其他礦工只要利用A的公鑰即可對這個交易進行驗證,判斷是否真的由A創建。
2⃣️」交易傳播和交易驗證「交替意味著 各個節點基於一定的規則獨立驗證每個交易(共識基礎1) , 一個節點只有認為這個交易有效才會把它繼續傳播出去。
比特幣的底層技術是區塊鏈。區塊鏈系統是一種分布式共識系統,區塊鏈網路中所有的參與節點將就交易的狀態達成一致。
區塊鏈到底是什麼呢?你可以把它理解成一種分布式的交易的共享賬本,以區塊為基本單位鏈接在一起。交易信息將被整理並打包記錄在區塊中。每一個區塊,包含區塊頭,以及緊跟其後的交易列表。區塊頭包含3個區塊元數據集合:前序區塊哈希(嚴格來說是前序區塊頭哈希,因為只有區塊頭被用於哈希運算)、元數據集(包括難度、時間戳、隨機數等)、一個基於加密哈希來高效概括區塊中所有交易的默克爾樹(merkle tree)。了解這個結構,將幫助我們更好地理解挖礦的數學本質。
你可能聽說過「挖礦」這個詞,或者聽說眾人爭相購買挖礦機器來發家致富。但讓人疑惑的是:都說打包區塊的本質是解數學難題,但單憑那些看似簡陋的機器嗡嗡嗡瘋狂耗費電力,就能確保自己解出比特幣難題的勝率高了嗎?比特幣技術原理中,礦工們解決的數學題,難道是一個暴力破解題?
看了一圈,發現礦工們解決的題,還真有點暴力破解的意思,每次嘗試解題的過程幾乎都是茫茫然、去碰運氣的。拼的是誰足夠幸運,也拼誰算的足夠快;算的快了么,試錯次數多,自然勝算也就大了。
解題的背景是這樣的—— 挖礦節點通過基於工作量證明演算法(Proof-of-Work,POW)的證明運算,獨立將交易匯聚到新區塊中(共識基礎2)。 當礦工從網路中接收到一個新的區塊的時候,他發現自己已經在上一輪競爭中失敗了,所以立即開始新區塊的挖礦過程。為了創建一個新的區塊,他從內存池中選擇交易來填充區塊(加入區塊的第一筆交易是一個「鑄幣交易」,3.2節會給出詳相關細節)。接下來是填充欄位來創建區塊頭(包括前序區塊的區塊頭哈希、交易的默克爾樹(Merkel樹)、時間戳、難度目標值、隨機數),然後開始計算這個新區塊的工作量證明。
這個計算的過程簡單來說是對區塊頭部進行兩次sha256運算,得到一個RESULT,如果這個RESULT滿足特定要求,這個人才能算是算對了、才有權利去記賬。滿足要求的RESULT被稱為「工作量證明」(中本聰論文中稱為「proof of work」)。
關於這個計算過程,強調以下幾點:
第一,區塊頭部,包含了前序區塊頭部的哈希、本區塊交易信息的默克爾樹、時間戳、難度目標值、隨機數等信息(見圖2)。
第二,哈希運算具有「知道y,無法推出使得h(x)=y成立的x」、「即使輸入只改變一點點,輸出也會差很多」、「利用任意長度的數據作為輸入,生成一個固定長度的確定結果」的特性。所以大家也不知道什麼樣子的輸入才能產生自己想要的結果,礦工只能不斷嘗試。
第三,前面說到,區塊頭哈希值需要滿足一個特定要求才能成為工作量證明——小於某一閾值,或者說哈希值含有給定前綴。閾值的大小求和挖礦難度有關:挖礦難度是一個動態參數,其值越大,則閾值越小,說明哈希值符合要求的概率更小,礦工每次計算能成為工作量證明的概率越小。比特幣有一個自我調節過程——通過對現有的挖礦算力情況進行估算,來對應調整挖礦難度,可以保證區塊鏈每十分鍾出一個塊,達到控制發行速度的目的。(這個過程的基本思想類似產品筆試的數據估算題,根據「一個提供、一個需要「的思路去構造一個等式,然後求解等式一邊的一個因子;想了解挖礦難度系統和調整方式的同學可以進一步查閱~)
綜合以上三點來看,為了產生工作量證明,用戶基本上會通過調整隨機數來碰運氣(因為其他欄位基本不變)、進行多次運算直至符合要求,別無他法。如此一看,隨機數就具有「幸運數字」的意味了。因此,平均來講,誰計算的能力越強(嘗試的次數越多),就更有希望打包塊。
你可能會想,礦工這么心甘情願地消耗算力去維護區塊鏈,是受到怎樣的利益驅使呢?簡單來說,礦工的收益來源有二:1、計算出工作量證明,創造一個新區塊所獲得的新幣獎勵;2、記賬礦工費。
當礦工找到工作量證明、打包一個新區塊,並把區塊傳送給他的所有對等節點。 每一個挖礦節點都獨立驗證新區塊、把合格的新區塊整合進區塊鏈(共識基礎3) ,並把這個區塊繼續傳給自己的對等節點。結果是,只有經過驗證的區塊才會在網路當中廣泛傳播,保證了誠實礦工挖出的新區塊能被區塊鏈所接納。挖礦成功的個體節點或集體節點,可以同時獲得新幣獎勵和記賬礦工費。
新幣獎勵類似於貨幣的發行,其遵循規則是,第一個四年每一個新區塊產生50btc,第二個四年每一個新區塊產生25btc,第三個四年每個新區塊產生12.5btc,如此周期指數遞減。按照等比數列求和可知,到2140年,比特幣產生的總和約為21000000(所以說比特幣數量有限,天生緊縮)。屆時,不再隨區塊的產生增加新的比特幣,礦工不再擁有第一項收益。但現實中,由於挖礦成本高昂,挖礦成功的往往是是一個礦池的所有參與者。收益被分給礦池地址,礦池按照組內算力貢獻比例來分攤收益的。
記賬礦工費又稱交易費用,以交易輸入和交易輸出之間的差值的形式存在;一個區塊的總交易費用是對加入區塊的所有交易的(交易輸入-交易輸出)求和。一般來說,礦工費越高的交易,會越快被處理。而礦工費在這里起到兩個作用,一個是獎勵礦工,另一個是防止主鏈濫用(防止大家發送交易垃圾信息,因為提出交易是有一定代價的)。
礦工的收益以什麼樣的形式被驗證呢?這里不得不提到 「鑄幣交易」 。每個計算機節點在進行工作量證明計算之前加入區塊的第一筆交易,正是「鑄幣交易」。這個交易從無到有生成比特幣,其金額是新幣獎勵與記賬礦工費的總和,被支付到挖礦礦工自己的比特幣地址。如果礦工找到了一個工作量證明使區塊有效,他就贏得了這個獎勵,因為他構造的「鑄幣交易」生效了。
關於鑄幣交易和「新幣獎勵」,之前有一個讀者問我:一個礦工把自己挖到新區塊的消息公布出去,他的工作量證明 不會被別人剽竊 嗎?
個人認為,至少「鑄幣交易」能防止這件事情發生。讓我們來重申一下計算工作量證明的過程——一個礦工E在新區塊里加入了獎賞自己的「鑄幣交易」,並利用時間戳、前序區塊頭哈希、隨機數、本區塊交易的merkle樹等信息計算出一個符合要求的工作量證明。
在這個過程中,merkle樹啥樣子,取決於包括「鑄幣交易」在內的本區塊所有交易信息。因此可以把鑄幣交易視為工作量證明的間接變數之一。那麼,即使其他人拿到了E的工作量證明,這個工作量證明也是帶有E的印記的、與獎賞E的鑄幣交易相關的,別人根本無法納為己用。
你還可以通過設想以下的場景來加深對共識基礎2「挖礦節點通過基於工作量證明演算法的證明運算,獨立將交易匯聚到新區塊中」的理解。
為什麼一個挖出新區塊的礦工不悄悄使個心眼,在創建區塊之初就把鑄幣交易的金額設成1000BTC呢?原因在於每個節點都是基於相同的規則來獨立驗證區塊的。礦工必須創建完美的、符合公共規則的、正確依據工作量證明方法的區塊;而一個無效的鑄幣交易會導致整個區塊無效,並被其他節點拒絕,永遠無法成為賬本的一部分。可以預想,為了生成這個工作量證明,礦工們已經投入了巨大的算力和電量去挖礦,如果涉嫌欺詐而被否決,其為挖礦付出成本都付諸東流。
綜上所述,礦工不能冒領他人的獎勵,而拿到獎勵的礦工也必須只能拿取符合規定的數額。
比特幣的卓越之處,在於建立了一種去中心化的自發共識。這種共識是自發產生的,是成千上萬在網路中遵循著共同規則的節點,在非同步交互中形成的,不依賴於任何中央機構的調解和干涉。
關於比特幣的4項主要共識基礎,本文在講解對應細節時有提及,下面做一個整合:
這四個過程相輔相成、互相作用,形成了自發的全網共識,促使全網節點組合出可信、公開、權威的總賬。
你可能會想,比特幣是一個去中心化的、基於大眾信任的、依靠眾人力量運轉的一個東西。萬一有一部分礦工被壞人收買了咋辦呢?「51%攻擊」指的又是什麼?比特幣交易所要求的「6個確認」又是怎麼回事?
這里首先要提到比特幣的一個規則「 最長鏈優先 」。意思是, 比特幣的賬單鏈在出現分叉的時候,每個礦工會獨立選擇長(累積了最多工作量證明)的鏈條,在上面繼續挖礦工作(共識基礎4) 。
這個原則主要涉及到兩個問題:
當有兩個礦工A和B同時挖礦成功(算出符合要求的數學答案)時,他們分別把自己計算出來的工作量證明作為下一個塊的前序區塊哈希,生成一個塊銜接到原有的鏈後面,由此出現了兩個分支。
這個時候,這兩個成功的礦工廣播了自己打包成功的消息。由於區塊鏈是一個去中心化的數據結構,區塊消息到達不同節點的時間點不一致,故不同的節點可能擁有不完全一樣的區塊鏈視圖——有的礦工會先收到A的消息,有的則先收到B的消息。為了解決這個問題,收到消息的礦工們遵循一個原則:選擇並嘗試延長最長的鏈。
因此,這兩條分支會各自成長一小段時間,直到他們的長度出現差異(不可能長度一直相同),比如說其中一條鏈的礦工們,更快地打包在支鏈後面又加上一塊。按照「最長鏈優先「的規則,較短的鏈會被拋棄,原本工作在短鏈上的礦工們都回到長鏈上工作。
換言之,分叉只是不同節點暫時的不一致現象,當新區塊被加入到其中某一分支時,最終收斂將解決這一個問題。[讀者可以思考一下,為什麼區塊鏈被設置成每十分鍾挖出來一個塊:如果時間短了,是不是就增加了分支產生的次數?如果時間長了,是不是交易結算的效率就太低了?]
雙重支付的本質其實也是區塊鏈的分叉,但這種分叉卻是「非自然惡意蓄謀」的產物。
我們假設小敏是密謀雙重支付的一方,她把自己僅有的10BTC先給小強、交換一塊黃金,待這條交易信息P被打包進區塊Q後,她從小強手中拿到了黃金。這時,小敏使了個心眼,她想偷偷抹去、篡改區塊Q上的交易信息P,「白嫖」這塊黃金。為了實現這樣的目的,根據「最長鏈優先」法則,小敏必須剔除該筆交易P後、重新進行結算工作,集中算力來形成分叉,並讓分叉以更快的增速超過並取代Q所在的主鏈。如果小敏確實能讓分叉更長,分叉就成為了主鏈,其他節點也會轉向新主鏈上繼續工作。這樣,小強付出了黃金,卻沒有收到這10個比特幣,「賠了夫人又折兵」。
在這個過程中,小敏需要和原鏈進行「抗爭」,使新分叉成為最長的主鏈,這被稱為「共識攻擊」。「共識攻擊」本質上是對下一區塊的爭奪,攻擊方越「強壯」、哈希算力越大,就越容易成功。
「共識攻擊「成功的可能性有多大呢?
大多數比特幣交易所規定,一個交易傳送到區塊鏈上後需要6個「確認」來完成驗證該筆交易。這一規定的根據是,假設意圖造假的礦工擁有10%的算力(挖礦成功概率0.1),那麼造假礦工要構造另一條偽鏈實施長度超越,必須至少成功挖礦6次。那麼原鏈被取代、被拋棄的概率約為0.1的6次方,趨近於0。你可以把比特幣理解為地質構造層,表層可能因為季節變換而有所改變,甚至可能被風颳走,但一旦深入到地下,地質層就能更加穩定、不受干擾。
而假設有一群擁有了51%算力的礦工,他們控制了一半以上的全網哈希算力,可以故意在區塊鏈中製造分叉、進行雙重支付交易 。但事實是,全網哈希算力的大量增加,個體礦工幾乎不可能控制哪怕1%的哈希算力了(但礦池帶來的算力集中化控制,存在一定的風險)。更何況,如果真有擁有如此強大算力的組織,他完全可以憑借自己強大的算力投入到挖礦中去獲取開發新區塊所獲的的比特幣獎勵,誠實挖礦比雙花更有利可圖。
盡管實際上並未出現51%攻擊的問題,但不可否認的是,算力的集中違背了比特幣去中心化這一初衷,並成為其繼續發展的一大隱患。
一個系統的安全性,往往取決於系統安全的最薄弱環節,這也就是所謂的「木桶原理「。與區塊鏈系統相關的安全性問題包括但不限於以下幾項:
(1)在區塊鏈上被廣泛使用的公鑰系統基本上是安全的,但量子演算法在理論上能夠破解公鑰系統;因此,區塊鏈的演算法安全性是相對的。
(2)區塊鏈協議本身存在邏輯缺陷,例如受到黑客攻擊的區塊鏈系統共識機制。
(3)所有數字貨幣系統高度依賴私鑰,私鑰在存儲、使用方面的安全性成為區塊鏈系統安全性中至關緊要的一環。
盡管區塊鏈是去中心化系統,但目前絕大多數數字交易所卻是中心化的,存在著人為安全漏洞及技術安全漏洞。這些數字交易所擁有存放大量加密貨幣的私鑰,這對於黑客來說無疑是最矚目的目標;只要黑客偷走了這些私鑰,就可以獲取到這些加密貨幣。
作者會繼續閱讀相關資料、不斷完善本文,目標是完成一篇通俗易懂的比特幣科普文章。:)
**本文系網上信息與個人理解的結合,如有偏差及誤讀,歡迎讀者指出。也歡迎給出關於文章結構上的指導~
⑸ 區域塊是什麼意思
區塊鏈是一個信息技術領域的術語。從本質上講,它是一個共享資料庫,存儲於其中的數據或信息,具有「不可偽造」「全程留痕」「可以追溯」「公開透明」「集體維護」等特徵。
每一個區塊包含了前一個區塊的加密散列、相應時間戳記以及交易資料(通常用默克爾樹(Merkle tree)演算法計算的散列值表示),這樣的設計使得區塊內容具有難以篡改的特性。用區塊鏈技術所串接的分布式賬本能讓兩方有效紀錄交易,且可永久查驗此交易。
目前區塊鏈技術最大的應用是數字貨幣,例如比特幣的發明。因為支付的本質是「將賬戶A中減少的金額增加到賬戶B中」。如果人們有一本公共賬簿,記錄了所有的賬戶至今為止的所有交易,那麼對於任何一個賬戶,人們都可以計算出它當前擁有的金額數量。
而區塊鏈恰恰是用於實現這個目的的公共賬簿,其保存了全部交易記錄。在比特幣體系中,比特幣地址相當於賬戶,比特幣數量相當於金額。
(5)比特幣默克爾樹存儲在擴展閱讀:
概念定義
從科技層面來看,區塊鏈涉及數學、密碼學、互聯網和計算機編程等很多科學技術問題。從應用視角來看,簡單來說,區塊鏈是一個分布式的共享賬本和資料庫,具有去中心化、不可篡改、全程留痕、可以追溯、集體維護、公開透明等特點。
這些特點保證了區塊鏈的「誠實」與「透明」,為區塊鏈創造信任奠定基礎。而區塊鏈豐富的應用場景,基本上都基於區塊鏈能夠解決信息不對稱問題,實現多個主體之間的協作信任與一致行動。
區塊鏈是分布式數據存儲、點對點傳輸、共識機制、加密演算法等計算機技術的新型應用模式。區塊鏈(Blockchain),是比特幣的一個重要概念。
它本質上是一個去中心化的資料庫,同時作為比特幣的底層技術,是一串使用密碼學方法相關聯產生的數據塊,每一個數據塊中包含了一批次比特幣網路交易的信息,用於驗證其信息的有效性(防偽)和生成下一個區塊 。
比特幣白皮書英文原版 其實並未出現 blockchain 一詞,而是使用的 chain of blocks。最早的比特幣白皮書中文翻譯版 中,將 chain of blocks 翻譯成了區塊鏈。這是「區塊鏈」這一中文詞最早的出現時間。
國家互聯網信息辦公室2019年1月10日發布《區塊鏈信息服務管理規定》,自2019年2月15日起施行 。
作為核心技術自主創新的重要突破口,區塊鏈的安全風險問題被視為當前制約行業健康發展的一大短板,頻頻發生的安全事件為業界敲響警鍾。擁抱區塊鏈,需要加快探索建立適應區塊鏈技術機制的安全保障體系。
⑹ 交易數據是寫入區塊鏈的哪個部分
現實的區塊鏈直接將內容數據(如交易數據)存儲在資料庫中,稱為默克爾樹,然後將默克爾樹的跟存儲在區塊頭。
_默克爾樹具有非常獨特的屬性,使我們能夠在對等網路中進行有效的數據驗證。默克爾樹是二叉樹,其中節點存儲哈希,而不是排序存儲數據塊。 https://right.bdstatic.com/vcg/edit/.jpg
區塊鏈,就是一個又一個區塊組成的鏈條。每一個區塊中保存了一定的信息,它們按照各自產生的時間順序連接成鏈條。這個鏈條被保存在所有的伺服器中,只要整個系統中有一台伺服器可以工作,整條區塊鏈就是安全的。
這些伺服器在區塊鏈系統中被稱為節點,它們為整個區塊鏈系統提供存儲空間和算力支持。
⑺ 比特幣突破6萬美元,比特幣是如何產生的
比特幣突破6萬美元,但是很多人都對比特幣有點陌生,下面為大家介紹下比特幣。
比特幣誕生於互聯網飛速發展的時代。比特幣的出現和發展似乎是偶然的情況,但實際上,它是經濟,社會和科學技術發展到一定階段的必然產物。這是信息技術發展,互聯網金融興起和社會環境變化共同作用的結果。在電子商務的普及過程中,作為其重要組成部分的金融體系逐漸融入了互聯網潮流。全球互聯網金融興起的影響不僅是金融格式的改變,還包括用戶習慣和貨幣觀念的改變。在線支付,電子轉賬等方式給人們帶來了很多便利,加之銀行卡的普及,人們對真實貨幣的依賴性正在下降,而對虛擬貨幣的接受度正在上升,然後逐漸認識到那些做實的人沒有國家信譽作為虛擬貨幣的保證。
⑻ 什麼是區塊鏈挖礦是做什麼詳細介紹區塊鏈和虛擬貨幣
在比特幣剛發行的時候人們發現了,它去中心化,不受任何中心管制;它完全開放,除了交易信息加密之外整個系統信息高度透明,技術都是開源的;安全性,只要不能控制全部節點的%51,就無法肆意修改數據,這使得它相對安全;獨立性,整個模式和比特幣不依賴任何第三方,所有節點都在系統內驗證、交換數據,不受任何干預
我們這里詳細解釋什麼是區塊鏈技術,說白了就是區塊+鏈,那什麼是 「區塊」 ?什麼又是 「鏈」 呢?
區塊就是一個賬本交易記賬由分布在不同地方的多個節點共同完成,而且每一個節點記錄的是完整的賬目,因此它們都可以參與監督交易合法性,同時也可以共同為其作證
每一個區塊包含了前一個區塊的加密散列、相應時間戳記以及交易資料(通常用默克爾樹(Merkle tree)演算法計算的散列值表示),這樣的設計使得區塊內容具有難以篡改的特性。用區塊鏈技術所串接的分布式賬本能讓兩方有效記錄交易,且可永久查驗此交易。
哈希函數h()的作用:將任意長度的字元串,轉換成固定長度(例如256位)的輸出。輸出也被稱為 哈希值 ,這個輸出不可逆
很難找到兩個不同的x和y,使得h(x) = h(y),也就是說兩個不同的輸入,會有不同的輸出。理論上說兩個不同的輸入可能會有不同的輸出,但這幾乎不可能,比方說一個無限的空間映射到一個有限的空間,肯定存在多對一的情況,理論存在,但沒有任何規律,保證你無法通過數學上的任何推斷來找到這個結果,為什麼這里是256位呢?不是更長的呢?因為256位已經足夠安全。
將賬本拆分成塊,比如一個本子的一張紙就是一個區塊,每個區塊記錄一段時間內的交易,列如10分鍾
我們把每張紙比作一個一個 區塊 ,在每個區塊的上面增加一部分內容我們把它叫做 區塊頭 ,其中記錄父區塊的哈希值,通過每個區塊儲存父區塊的哈希值,將所有區塊按順利連接起來,形成區塊鏈
把 1區塊 的哈希值記錄到 2區塊 的區塊頭上,如此操作每個區塊的區塊頭都記錄父區塊的哈希值,每個區塊都按照順序鏈接起來了,這就叫做區塊鏈。第一個區塊沒有區塊頭,又被稱之為創世區塊
區塊鏈是一個賬本,在賬本上只有發生了交易你的賬戶上的錢才會變多和變少,需要進行交易那麼首先需要一個賬號和密碼,就像你的銀行卡有賬號和密碼別人就可以對你進行一個轉賬,在區塊賬本上這個賬號密碼就是公鑰和私鑰
老王(已有私鑰,公鑰),想轉給張10個BTC,需要一些操作
證明是老王本人發出轉賬 簽名函數Sign (老王的私鑰 + 轉賬信息:老王轉給張三10 BTC)=本次專賬簽名
驗證是老王本人發出轉賬 驗證函數Verify (老王的地址 + 轉賬詳細:老王轉給張三10 BTC + 本次轉賬簽名)=true
一旦轉賬記錄到區塊從此誰也不能改變它,張三增加10 BTC,老王則相應減少10 BTC,整個操作都是自動的,比如你的錢包app它會幫你去做這樣的事情,app知道你的私鑰,你告訴錢包交易內容,錢包簽名向全網公布,等待其他人來驗證這筆交易
中心化記賬效率會更高,銀行、政府或者支付寶幫你記賬,都很可靠,因為他們都無法動你的錢,除非它們有你的私鑰
中心化記賬存在一些缺點
去中心化人人都可以記賬,每個人可以保留一個完整的賬本。任何人都可以下載開源程序,參與比特幣的p2p網路,監聽來自全世界發送的交易,成為記賬節點,參與記賬,假設小逸發布了一筆交易向全網廣播,A記賬節點監聽到了這筆交易,A驗證了這筆交易位true之後放入交易池繼續向其它節點傳播,因為是網路傳播,同一時間不同記賬節點的交易池不一定相同,每10分鍾,從所有記賬節點當中,按照某個方式抽取一名,驗證這個節點的交易為true之後,之後將這個選中的節點交易池中的交易記錄與自己(A)節點的交易池中的交易記錄對比一下,對比完之後會將自己交易池中已經被選中記賬節點記錄的交易刪掉,別的不動繼續記賬等待下一次被選中,每隔10分鍾就是一個循環,這個10分鍾所有記賬節點正常記賬,10分鍾之後再選出一個節點把它交易池當中的交易作為一個新的區塊,這個區塊來自所有記賬節點中我任意選擇的一個記賬節點的交易池,如此不斷循環往復
交易並不是被記錄就完成,只有當這筆交易變成了某一個區塊,這筆交易才算是真正的完成。這就是去中心化的一個記賬的完整的流程,你的交易並不會第一時間被記錄,因為p2p網路傳播需要時間,如果被選中區塊的節點還沒有接受到你的交易,交易就沒有完成。每10分鍾產生一個區塊,但不是所有在10分鍾內的交易都能記錄。10分鍾只是一個平均值
去中心化記賬的特點,有記賬權的記賬節點,每十分鍾被選中的節點它會獲得50BTC獎勵,每21萬個區塊差不多4年,獎勵減半,比特幣自發行已經兩次減半,那麼每十分鍾產生一個新的區塊這個記賬節點得到的獎勵是10.5BTC,每隔4年減半那麼可以算出BTC的總量大約為2100萬枚,預計2040年開采完,記錄一個區塊的獎勵也是比特幣唯一的發行方式,當BTC開采完之後,記賬節點可以獲得的收益就只有交易的手續費了
記賬節點通過題目來爭奪記賬權,
找到某位隨機數使得等式不成立
SHA256哈希函數 (隨機數 + 父區塊哈希值 + 交易池中的交易) 某一指定值)
從0開始遍歷隨機數碰運氣之外,沒有其它解法,解題的過程,又叫做 挖礦 ,所以解這個題目的記賬節點又被稱之為 礦工 ,你遍歷隨機數越快你拿到這個記賬權的可能性就越大,這個遍歷速度就被礦老闆們稱之為 算力 ,為了得到這個算力,礦老闆們就會購買更多且更高算力的礦機
誰先解對,誰就得到記賬權。A記賬節點率先找到解,即向全網公布,其他節點驗證無誤之後,A節點就獲得了這個區塊,獲得12.5個BTC的收益,在新區塊之後重新開始新一輪計算。這個方式被稱之為(POW)分配記賬權
一般大約10分鍾解出這個隨機數,10並不絕對,因為解開這個題目的過程本就是個碰運氣的過程,未來應對算力的變化,比特幣每隔2016個區塊,大約兩周,會加大或減小難度,使得平均產生區塊的時間是十分鍾
每一個區塊包含了前一個區塊的加密散列、相應時間戳記以及交易資料(通常用默克爾樹(Merkle tree)演算法計算的散列值表示),這樣的設計使得區塊內容具有難以篡改的特性。用區塊鏈技術所串接的分布式賬本能讓兩方有效記錄交易,且可永久查驗此交易。
和傳統存儲的數據不同的是,區塊鏈每個節點都按照塊鏈式結構存儲完整的數據,區塊鏈每個節點存儲都是獨立的、地位等同的,依靠共識機制保證存儲的一致性,而傳統分布式存儲一般是通過中心節點往其他備份節點同步數據。
麻將作為中國傳統的區塊鏈項目,四個礦工一組,先碰撞出13個數字正確哈希值的礦工可以獲得記賬權並得到獎勵。
很多人講區塊鏈是騙局比特幣是騙局,這也許是個騙局,但是這個技術已經被廣泛地承認和應用,區塊鏈涉及的密碼學知識一般人再借幾個腦子給你你也搞不懂,在一個相對理性的角度看待問題最重要,千萬別聽風就是雨。
這門技術有著不可思議的地方 在一個沒有中心沒有監管的情況下保持著絕對的秩序 這個只需由大家的共識建立的信任,比特幣創造了這個共識,在區塊鏈的世界裡每個人都是公平平等的。