比特幣記賬規則
我們知道了信息計算Hash打包的過程:交易記錄、時間、賬本序號、上一個Hash值。也知道所有的計算和存貯是需要消耗計算機資源。在中本聰的設計里,完成記賬可以獲得系統給與比特幣獎勵,這個過程也就是比特幣發行過程,因此把記賬成為挖礦。
記賬工作
因為記賬是有獎勵,每次記賬都可以為自己增加一定個數的比特幣,因此大家爭相記賬,當然能也就引發了問題:出現記賬不一致的是後,系統引入工作量證明來解決這個問題,規則如下:
1.在一段時間內,只有一個人能記賬成功。
2.通過解決密碼學難題競爭獲得唯一記賬權
3.其他節點復制記賬結果
不過在進行工作量證明之前,記賬節點會做進行如下准備工作:
1.收集廣播中還沒有被記錄賬本的原始交易信息
2.檢查每個交易信息中付款地址有沒有足夠的余額
3.驗證交易是否有正確的簽名
4.把驗證通過的交易信息進行打包記錄
5.添加一個獎勵交易:給自己的地址增加12.5比特幣
如果爭奪記賬權成功的話,就可以得到12.5比特幣的獎勵。
工作量證明
每次記賬的時候會把上一個塊的Hash值和當前的賬頁信息一起作為原始信息進行Hash。為了確保10分鍾前後只有一個人可以記賬,就只有提高記賬的難度,用Hash的結果必須以若干個0開頭。為了滿足條件,進行Hash是引入一個隨機數變數。
用偽代碼表示一下:
1.Hash(上一個Hash值,交易記錄集) = 456635BCD
2.Hash(上一個Hash值,交易記錄集,隨機數) = 0000aFD635BCD
改變Hash的原始信息的一部分,Hash值也會不斷變化,因此在運行Hash的時候,不斷改變隨機數的值,總可以找到一個隨機數使得Hash的結果以若干個0開頭,率先找到隨機數的節點從此獲得記賬的唯一記賬權。
驗證
在節點成功找到Hash值之後,會馬上對全網進行廣播打包區塊,網路的節點收到廣播後會對其進行驗證。如果驗證通過,表明已經有節點成功解密,就不會在競爭當前區塊,而是選擇接受區塊,記錄到自己的賬本中,進行下一輪競爭猜謎。網路中只有最快解密的區塊才會添加到賬本中,其他的節點進行復制,確保整個賬本的唯一性。
如果節點有作弊行為,會導致網路的節點驗證不通過,直接放棄其打包的區塊,也無法記錄到總賬本中,那麼作弊節點的消耗成本就白費了。因此礦工自覺的遵守比特幣系統的共識協議,也確保整個系統的安全。
這個問題就好像你去工地搬磚,搬完一天磚,包工頭問你你怎麼證明自己一天在工地搬磚呢?
㈡ UXTO與余額
區塊鏈入門從使用錢包開始,我們最關注的是錢包的賬戶余額。可看過很多區塊鏈資料以後,一直存在一個疑問,錢包的余額信息存在區塊鏈的什麼位置?一直沒有找到,只有一個相近的概念叫UTXO(Unspent Transaction Output),但看完以後還是對應不上。直到翻遍網上所有關於UXTO的資料,才知道在中本聰設計的比特幣系統中,並沒有餘額這個概念,「比特幣余額」是由比特幣等錢包應用派生出來的產物。錢包的余額是通過與賬戶相關的多個UXTO算出來的。下面且聽我詳細道來。
了解過一點點會計學,我們現在的會計系統絕大部分採用的是一種叫做「借貸記賬法」的方法,賬目分成借方和貸方,每發生一筆業務都要登記兩個以上的科目。
簡單來說,Alice轉賬給Bob 1美元,使用借貸記賬法至少要產生兩條賬目,Alice賬戶減少1美元,Bob賬戶增加1美元。這種記賬法在企業經營、企業審計中有無數的好處。但是這種記賬法也有一個最大的缺點,就是容易產生記賬錯誤和記賬誤差。一筆交易需要登記兩條以上的賬目,本質上記錄的是「交易的結果」,而不是「交易本身」。
中本聰發明了UTXO(Unspent Transaction Output)交易模型,並將其應用到比特幣當中。UTXO是「未花費的交易輸出」,簡單來說就是,每一筆比特幣交易實際上都是由若干個交易輸入和輸出組成的。交易輸入是資金來源,交易輸出是資金去向,每一筆交易都要從交易輸入中花費出去一部分,這一部分就是未花費的交易輸出(UTXO)。每一次的交易輸入都可以追溯到之前的UTXO,直至最初的挖礦所得。
由挖礦所得創建的比特幣交易,是每個區塊中的首個交易,又稱之為coinbase交易,它由礦工創建,沒有上一筆交易輸出。
在比特幣交易中 UTXO 就是基本單位,一個UTXO一旦被創建就不可被繼續分割,它只能當作是下一筆交易的輸入被花費掉,花費後產生新的UTXO,這樣周而復始地實現貨幣的價值轉移。所以我們在比特幣錢包中所看到的賬戶余額,實際上是錢包通過掃描區塊鏈並聚合所有屬於該用戶的UTXO計算得來的。
因此,當我們在說某人擁有1枚比特幣的時候,我們實際上說的是,在當前的區塊鏈記錄中,有若干筆交易的 UTXO 收款地址寫的是這個人的錢包地址,這些UTXO的總和是1個比特幣。
比特幣的UXTO系統遵守兩個規則:
我們以以太賬戶為例,打開 etherscan.io ,選擇BLOCKCHAIN->All Accounts,這樣可以看到所有地址與余額,可以選擇其中一個查看詳細信息。如果看不懂, 沒關系,把自己的以太地址輸入到右上角的搜索框回車後,會顯示地址的余額和詳細交易記錄,如下圖。
至此,我能理解李笑來老師說為什麼他的賬戶沒有餘額,只有UXTO了,O(∩_∩)O哈哈~,內行人不要說外行話嘛。
㈢ 比特幣大跌,你知道比特幣和區塊鏈之間的關系嗎
比特幣是虛擬貨幣。區塊鏈就是計算虛擬貨幣交易的節點。說白了就是區塊鏈技術確保著比特幣體系能否正常運行的。區塊鏈的原理,這個怎麼說呢。大概就是賬本的意思。至於容不容易上手我就不知道了。聽說還是蠻激勵的,畢竟要十分鍾要計算出這個區域的資料庫賬本。
但是比特幣最近市場是不穩定的,大家還是看看吧。弄不好都得天台見了。
㈣ 比特幣怎麼玩
新手首先要知道如何計算你的成本,充值,交易,提現,都有手續費的。起碼看得懂K線,這個K線基礎網上一大把,隨便看看,弄懂,要有風險意識,比特幣屬於高風險,高利潤投資,可能一夜翻倍,也可能一夜寶馬變單車。資金投入,剛開始建議小量玩玩。
但是現在個人挖礦很難挖到比特幣,所以基本都是規模化挖礦,需要和礦池合作,所以如果大家還想靠挖礦賺錢的話,就目前來看,最適合的挖礦方式是雲挖礦或礦機託管了,畢竟單人挖礦的時代已經過去。
㈤ 如何讀懂比特幣
簡單地說,比特幣就是一種虛擬貨幣,但是想了解比特幣,咱得先了解它是怎麼來的。
Part1:比特幣怎麼來的?
比如說村子裡有個超級大的賬房,裡面的賬本比星星還多。
所有賬本每10分鍾必須更新一次,誰去記賬誰就能得到一筆獎勵。
這事兒,村長為了避免有人找他走後門,找了一個特別公平的方式:
算數學題!
說到算題,其實是算一串比圓周率稍微短點的不規則數字。
要算這么一長串數字,必須得用計算機。
因為算題比拼的是計算機的算力!
為了防止出幺蛾子,村長用了一個加密演算法,能保證公平還不泄題。
甭說是親戚了,就算自己是村長自己,也得通過算題才能去記賬。
先算出來的那個學霸,不到獲得記賬權,還能得到獎勵。
這個算題的過程叫做「挖礦」,得到的獎勵就是比特幣。
㈥ 比特幣的運行機制及與區塊鏈的聯系
佚名
每一筆比特幣交易,都會被區塊鏈網路中的節點記錄下來,以此增強交易公信力,保護交易雙方利益。但如果所有節點都參與記錄的話,容易因為網路延遲等因素造成賬本信息不一致,也難以避免記賬人會篡改交易信息。
因此比特幣採用工作量證明(Proof of Work)共識機制,讓所有節點通過解決工作量證明難題的方式參與競爭,競爭成功的節點擁有新區塊的記賬權,並能夠將記錄的信息廣播出去。其他節點接收後將根據此消息進行數據同步,確保賬本一致。這種競爭記賬權的過程,叫做挖礦,參與挖礦的節點,叫做礦工。礦工挖礦成功後可以獲得區塊獎勵,即一定數額的比特幣,還可以收取該區塊上的交易手續費。在利益的驅使下,節點會積極參與挖礦並維護交易記錄的真實有效。
比特幣的發行只有一種方式,即區塊獎勵,也就是說比特幣是通過挖礦產生的。不過,比特幣並不能通過挖礦無限產生,其演算法規定了每產生210100 個區塊(約四年),比特幣的區塊鏈獎勵就要減半一次。由於比特幣的發行總量恆定為2100萬個,預計會在2140年挖完。這個規定確保了比特幣不會由於人為增發而發生嚴重的通貨膨脹,可以保護比特幣的價值。
比特幣的運行以區塊鏈技術為依託,比特幣與區塊鏈有著密不可分的關系。比特幣是一種資產,而區塊鏈就是為這種資產設定好運行規則的底層技術,從而保證每一筆交易順利進行。這就好比視頻文件與播放器之間的關系,視頻的播放必須要通過播放器的底層技術處理才能實現。區塊鏈技術的誕生源於比特幣概念的提出,可以說區塊鏈技術是比特幣催化下的產物。目前,區塊鏈技術不止運用於比特幣等加密貨幣,在各個領域都有廣泛的應用,但比特幣仍舊是區塊鏈技術上最早、最成功的應用。
㈦ 區塊鏈入門(比特幣為例)
區塊鏈主要解決的交易的信任和安全問題,通過每個獨立的節點的去中心化實現不可篡改(依賴分布式節點的共識機制),通過非對稱交易演算法實現僅公開交易信息,對交易人信息保密。
輔助理解:某種程度的逆運算
挖礦就是獲取新的交易信息的記賬權的過程。
比特幣記賬(記錄交易信息,也就是挖礦)的過程,也是比特幣發行的過程,會獎勵第一個完成挖礦計算的節點一定數量的比特幣。
挖礦的規則:
注意事項:
一條成功計算成功的信息摘要:首位18位連續為0的哈希值
涉及3個演算法:
賬號和秘鑰是不可逆推算的,秘鑰是可以推算出賬號的,但是賬號是無法推算秘鑰的,這樣張三亮出私鑰,就可以證明是張三賬號的持有者,但是別人知道張三賬號,卻無法推算出張三的私鑰。
在驗證階段,通過夾雜私鑰生成的簽名摘要+賬號信息,必須要可以驗證是否能匹配成功,這就需要加密演算法的設計,這三個演算法必須有設計上面的關聯性
用戶張三給李四的賬號發起一筆轉賬為例。
用戶張三,在系統中申請一個用戶賬號,創建的同時會收到一個私鑰(通過私鑰證明自己是張三)。
假設張三現在已經有10比特幣,要轉賬給李四。
那麼張三利用通過自己賬號來發起一筆交易
發起人:賬號張三
接收人:賬號李四
轉賬金額:10比特幣
這筆交易要廣播出來,就有幾個問題
為了方便節點之間更快的完成交易信息的核對,可以對交易信息進行哈希運算,這樣李四和王二比對交易信息的時候,比如比對這個交易信息的時候,只需要比對哈希值就可以知道是不是同一筆交易,交易信息是否完全一樣,而不需要比對 發起人賬號、收款人賬號、轉賬金額等這些信息
哈希運算:Hash(交易信息(出賬人賬號,緊張人賬號李四,轉賬金額10比特幣)) 獲得交易摘要
簽名信息不可偽造是因為簽名的參數涉及到私鑰
簽名的哈希運算:sign(交易摘要信息,私鑰) -->簽名摘要
開始廣播,現在有一個交易信息:信息為***,信息簽名為:簽名摘要,大家可以開始驗證,驗證成功請記賬。
驗證的過程:verify(簽名信息,出賬人賬號),現實生活場景中的簽名字跡和簽名人的姓名,是否對的上。
最後王二、麻子等等村民都收到了這個廣播,但是王二速度最快完成了記賬,馬上通過村裡的廣播廣而告之,我對這筆交易率先記賬成功了
(因為大家的賬本都只記錄交易信息,不記錄余額的,假設張三頻繁的發送轉賬,要統計幾年的交易記錄後的余額,也是要考驗村民的計算能力的(為了方便理解,你可以這么認為,實際上是挖礦的過程)),
你們村民你們就不要再算了,因為我是第一個完成校驗計算的,張三的余額是夠的,李四的賬號也是存在的,我宣布該筆交易有效,同時我有權利獲得了相應的獎勵,大家一起開始記錄,我的賬戶獲得獎勵1個比特幣,同時你們復制我的結果,當然還有我的計算過程編號。
整個交易才算完成。
只要大家都記賬了這個操作就可以了,因為是虛擬貨幣,類似於銀行轉賬,而不是紙幣交易,只需要在銀行的系統中張三賬號的余額-10,李四的賬號+10即可,只不過這里的銀行賬本是比特幣所有節點的賬本都做修改。
另外,從安全形度來說,還保護了張三和李四的真實信息的隱私,因為大家看到的只是張三的賬號、李四的賬號,這只是兩個神奇的數字,並不知道發起人是張三,收款人是李四。但是可以確認,這個交易是持有張三賬號的人發起的,而不是其它人偽造的,至於張三到底是誰,住在哪裡,哪個國家的,就不得而知了。
㈧ 爭奪記賬權有什麼好處
在比特幣的世界裡,每十分鍾會出一個全新的區塊,意味著要進行一次記賬權的爭奪,誰能爭奪到記賬權並成功記賬便可以獲得系統的比特幣獎勵。
在比特幣創始之初,成功記賬一次就可以獲得系統50個比特幣獎勵。中本聰設計了一個規則,每產生21萬個區塊,比特幣的系統獎勵就會減半。按照每十分鍾一個區塊來算,21萬個區塊就是4年時間。 所以每隔4年,比特幣的系統獎勵就會減半。2012年是第一次減半,2016年7月是第二次減半。就目前來看,我們成功記賬一次能獲得12.5個比特幣的系統獎勵。所以才會有這么多人加入比特幣網路來參與比特幣記賬。
㈨ 關於比特幣的幾個問題的研究
018年,區塊鏈技術井噴式的發展,同1997年那會兒的互聯網何其相像。筆者相信,區塊鏈技術的發展,肯定會快過互聯網。如果再不攝入點區塊鏈方面的知識,也許你將落後一個時代。本文將回答關於比特幣的幾個問題。
問題一:比特幣怎麼誕生的?
2008年11月1日,一個自稱中本聰(Satoshi Nakamoto)的人在一個隱秘的密碼學評論組(密碼朋克)上貼出了一篇研討微V-BQ爾無吧疤Y陳述,陳述了他對電子貨幣的新設想——比特幣就此面世。
問題二:比特幣如何生產?
比特幣網路通過「挖礦」來生成新的比特幣。所謂「挖礦」實質上是用計算機解決一項復雜的數學問題,來保證比特幣網路分布式記賬系統的微V-BQ爾無吧疤Y一致性。比特幣每10分鍾產生一個區塊,包含過去十分鍾所有的交易信息。誰能算出數字,誰就獲得記賬權。獲得記賬權後,將向全網廣播、存儲。由誰獲得記賬權是不確定的,當然,你運算能力越強,獲得記賬權的幾率越高。隨後比特幣網路會新生成一定量的比特幣作為賞金,獎勵獲得記賬權的人。
問題三:比特幣的特點?
完全去處中心化,沒有發行機構,也就不可能操縱發行數量。比特幣不需要第三方機構,彼此信任的點對點交易。信任的建立不再基於大型機構,而是基於密碼技術和代碼。比特幣可以在任意一台接入互聯網的電腦上管理。不管身處何方,任何人都可以挖掘、購買、出售或收取比特幣。操控比特幣需要私鑰,它可以被隔離保存在任何存儲介質,除了用戶自己之外無人可以獲取。作為由A到B的支付手段,比特幣沒有繁瑣的額度與手續限制,知道對方比特幣地址就可以進行支付。
問題四:比特幣能被仿造嗎?
山寨者難以生存。由於比特幣演算法是完全開源的,誰都可以下載到源碼,修改些參數,重新編譯下,就能創造一種新的p2p貨幣。但這些山寨貨幣微V-BQ爾無吧疤Y很脆弱,極易遭到51%攻擊。任何個人或組織,只要控制一種p2p貨幣網路51%的運算能力,就可以隨意操縱交易、幣值,這會對p2p貨幣構成毀滅性打擊。很多山寨幣,就是死在了這一環節上。而比特幣網路已經足夠健壯,想要控制比特幣網路51%的運算力,所需要的cpu/gpu數量將是一個天文數字。
問題五:為什麼比特幣總量為2100萬?
2009年比特幣誕生的時候,每筆賞金是50個比特幣。誕生10分鍾後,第一批50個比特幣生成了,而此時的貨幣總量就是50。隨後比特幣就以約每10分鍾50個的速度增長。當總量達到1050萬時(2100萬的50%),賞金減半為25個。當總量達到1575萬(新產出525萬,即1050的50%)時,賞金再減半為12.5個。依此類推。根據其設計原理,比特幣的總量會持續增長,直至100多年後達到2100萬的那一天。但比特幣貨幣微V-BQ爾無吧疤Y總量後期增長的速度會非常緩慢。簡單來說,比特幣產量每4年減半,目前每10分鍾產生12.5個比特幣。事實上,87.5%的比特幣都將在頭12年內被「挖」出來。而且,2100萬也只是理論數據,現實中,由於初期比特幣不受重視,不少比特幣遺失。
問題六:比特幣礦工有哪些收益?
首先是通過運算,獲得記賬權後,直接獎勵比特幣。但按照比特幣規則,隨著時間增長,獎勵會越來越少。將來的收益,主要通過收取比特幣交易產生的手續費。
問題七:為什麼比特幣不可修改?
舉個例子,假如A和B進行交易,A需要付給B一百個比特幣。但如果A想要賴賬,只想付給B一個比特幣。按照比特幣的規則,他就必須要獲得下一個10分鍾微V-BQ爾無吧疤Y的記賬權,才能修改;同樣,他也必須要再獲得下下個10分鍾的記賬權,以此類推。所以,修改是幾乎不可能的。
問題八:比特幣交易速率?
理論上講,比特幣交易速率是每秒7筆。實際上,比特幣目前交易速度只有每秒一筆。
問題九:比特幣為什麼有如此強的生命力?
把比特幣比作一個公司,那麼他沒有股東會、董事會、管理層,沒有嚴厲的領導,沒有HR,沒有部門經理,沒有員工,沒有經營場地,沒有收入。但比特幣公司成功運行了9年時間,從沒有出現任何問題,並且市值數千億,網路的運行時依靠一套數學演算法、激勵機制和社區來進行管理和治理。
問題十:比特幣面臨的問題?
一是交易確認時間長。比特幣錢包初次安裝微V-BQ爾無吧疤Y時,會消耗大量時間下載歷史交易數據塊。而比特幣交易時,為了確認數據准確性,會消耗一些時間,與p2p網路進行交互,得到全網確認後,交易才算完成。
二是大眾對原理不理解,以及傳統金融從業人員的抵制。懂原理的人,知道比特幣無法人為操縱和控制。但大眾並不理解,很多人甚至無法分清比特幣和Q幣的區別。「沒有發行者」是比特幣的優點,但在傳統金融從業人員看來,「沒有發行者」的貨幣毫無價值。
㈩ 比特幣機制研究
現今世界的電子支付系統已經十分發達,我們平時的各種消費基本上在支付寶和微信上都可以輕松解決。但是無論是支付寶、微信,其實本質上都依賴於一個中心化的金融系統,即使在大多數情況這個系統運行得很好,但是由於信任模型的存在,還是會存在著仲裁糾紛,有仲裁糾紛就意味著不存在 不可撤銷的交易 ,這樣對於 不可撤銷的服務 來說,一定比例的欺詐是不可避免的。在比特幣出來之前,不存在一個 不引入中心化的可信任方 就能解決在通信通道上支付的方案。
比特幣的強大之處就在於:它是一個基於密碼學原理而不是依賴於中心化機構的電子支付系統,它能夠允許任何有交易意願的雙方能直接交易而不需要一個可信任的第三方。交易在數學計算上的不可撤銷將保護 提供不可撤銷服務 的商家不被欺詐,而用來保護買家的 程序化合約機制 也比較容易實現。
假設網路中有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 設計還有一個技術上的理由,這種特別的數據結構可以讓雙重花費更容易驗證。對比一下: