比特幣區塊頭位元組數
㈠ 區塊鏈記錄哪些信息
區塊鏈是一個分布式的大賬本,每一個區塊就相當於是這個賬本中的一頁。
目前,區塊鏈的區塊主要記錄了區塊頭、交易詳情、交易計數器和區塊大小等數據。:區塊頭是區塊的前 80 個位元組,區塊內部的數據如下: 1.交易詳情:詳細記錄了每筆交易的轉出方和收入方、金額及轉出者的數字簽名,這是 每個區塊內的主要內容;2.交易計數器:這記錄的是每個區塊中發生的交易數量;3.區塊大小:表示每個區塊數據的大小,…如果你想詳細了解關於這些方面的知識,我建議你到廣州煊凌網路學習下,可以給你介紹得很詳細,專業的事找專業的人問!准沒錯,希望對你有所幫助!
㈡ 比特幣機制研究
現今世界的電子支付系統已經十分發達,我們平時的各種消費基本上在支付寶和微信上都可以輕松解決。但是無論是支付寶、微信,其實本質上都依賴於一個中心化的金融系統,即使在大多數情況這個系統運行得很好,但是由於信任模型的存在,還是會存在著仲裁糾紛,有仲裁糾紛就意味著不存在 不可撤銷的交易 ,這樣對於 不可撤銷的服務 來說,一定比例的欺詐是不可避免的。在比特幣出來之前,不存在一個 不引入中心化的可信任方 就能解決在通信通道上支付的方案。
比特幣的強大之處就在於:它是一個基於密碼學原理而不是依賴於中心化機構的電子支付系統,它能夠允許任何有交易意願的雙方能直接交易而不需要一個可信任的第三方。交易在數學計算上的不可撤銷將保護 提供不可撤銷服務 的商家不被欺詐,而用來保護買家的 程序化合約機制 也比較容易實現。
假設網路中有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 設計還有一個技術上的理由,這種特別的數據結構可以讓雙重花費更容易驗證。對比一下:
㈢ 比特幣區塊鏈是1個比特幣就有一個區塊鏈嗎每個節點都有完整的區塊鏈數據嗎
比特幣區塊鏈是1個比特幣就有一個區塊鏈嗎? 不是,區塊保存交易的,前期你成功建立一個區塊會得到一個幣,後期只能得到交易所付出的費用。一枚貨幣是一串數字簽名,是上一個擁有的人發給接受者的數字簽名,所有人都可以從交易中看出誰擁有這枚貨幣。
每個節點都有完整的區塊鏈數據嗎? 你說的節點指的是一個用戶節點? 一個用戶節點需要保留最長的工作量證明鏈條的區塊頭的拷貝,所以是知道所有區塊頭的數據的可以向前推進知道所有區塊鏈上的數據,但是沒有全部保存下來。一個區塊頭是很小隻有80位元組,是完全能夠保存下來的,因為節點的生成是很慢的。就算隨著時間遷移現在來看量也不是太大的。
㈣ 比特幣挖礦一定要用計算機嚒我們為什麼不能用紙和筆來計算呢
比特幣其實是一個毫無用處的一串數字,但是被大家公認為有用,它就像鑽石、古董、字畫、游戲皮膚等被賦予了價值。既不能吃,也不能用,但我們還是會認可它們的價值。
「挖礦」僅僅只是讓更多的人參與進區塊鏈網路的建設中來,這么多的電費用來「計算」一串虛擬的數值這樣真的好嗎?比特幣並不是一個保值的東西,價格浮動較大,炒比特幣可能一夜暴富,也可能一夜變成窮光蛋。比特幣也並非宣稱那樣安全,2014年全球最大的比特幣交易網站MtGox被黑客入侵導致破產,價值4.67億美元的比特幣瞬間蒸發。犯罪分子用它來洗錢、逃稅等等,政府想去調查也是相當困難的一件事。以上個人淺見,歡迎批評指正。認同我的看法,請點個贊再走,感謝!喜歡我的,請關注我,再次感謝!
㈤ 比特幣錢包需要同步區塊數據嗎
當然需要了,錢包會監聽並接收最新的區塊頭,否則會影響錢包的正常使用,但是你可以使用輕錢包,輕錢包不用下載所有區塊的交易數據,只下載每個塊的區塊頭。每個區塊頭只有若干位元組,不到1kb。比如,幣包,下載幾乎不佔用內存的。
㈥ 詳解區塊頭
最近一直在看技術向的普及讀物,我覺得比看行情有意思。
在剛開始了解比特幣的時候,我就很想要知道一個區塊的數據大概是由哪些部分構成,知道了這些構成對我的理解有著莫大的便利性,還好我找到了。
區塊大小和交易計數器很好理解,區塊頭和交易則稍顯復雜。
區塊頭包括三組數據:
第一、父區塊哈希值的數據。我認為可以理解為基因。
第二、挖礦難度值、區塊時間戳以及Nonce。這一組數據記錄與挖礦有關的內容。
第三、Merkle樹根。這是個神奇的東西,可以先理解為描述區塊中所有交易的數據。
區塊鏈之所以叫鏈,就是因為它的結構是一條從後向前有序連接起來的數據結構,就像是一條尾巴永遠在變長的鏈子。
那是什麼原因導致這條數據這樣井然有序的從後向前的連接呢?這就得靠父區塊哈希值了。
從字面意思理解,這是來自於父親的哈希值。在區塊鏈中,我們稱呼當前區塊的前一個區塊為父區塊,相應的後一個區塊為子區塊。唯獨有一個區塊是特殊的,它沒有父區塊,它是孫悟空~不對,它叫創世區塊!
所謂的父區塊哈希值,就是父區塊的區塊頭哈希值。從表格2中可以看到,區塊頭中包含了各種數據,大小是80位元組,而這80位元組的數據經過哈希運算,會得到一個32位元組的字元串,這個32位元組的字元串就是區塊頭哈希值。
舉個例子(例中數據全是隨機亂輸入的),第198808個區塊的區塊頭哈希值是ade12318fbce...12ade413(32位元組),那麼第198809個區塊的區塊頭數據就是這樣的:
把198809區塊頭中的所有數據經過哈希運算得到一個32位元組的數據:bcf45896aefcd...33cde409(32位元組),那麼第198810個區塊的區塊頭數據就是這樣的:
把兩張圖放到一起,就能得到一個簡單的由2個區塊構成的鏈。而區塊鏈就是以這種方式構成的一條可以隨著時間流逝無限延長的鏈。
為什麼要這樣做呢?
一開始我有說,我認為父區塊哈希值可以理解為基因。如果我們的祖先有8條腿,我們人類可能就不是現在這個長相了,蜘蛛應該會非常可愛!
而父區塊哈希值如果出現變化,那麼把父區塊哈希值作為輸入條件的子區塊哈希值一定會出現變化,緊跟著孫區塊也一定會發生變化,如此這般,這個被改變的區塊之後所有的已有區塊都必須改變。
越是早創造的區塊,更改後需要的工作量越大,越不可能實現,而越新的區塊被改變的難度也就越低。這也是區塊鏈的交易一般需要有6個新區快建立以後才被確認交易完成的原因,因為這個時候,交易被更改的可能性已經基本沒有了。
憑著這個結構,區塊鏈實現了不可逆、不可篡改的特性!
㈦ 比特幣長啥樣
比特幣是一串很小的字元,有32個位元組,8個比特,所以叫比特幣
這些位元組記錄著一串數字,這串數字就是你的資產,而這個字元串就是一個賬本
中本聰通過哈希演算法將這個字元串加密後放到區塊鏈上,就是一個分布式記賬系統
所以比特幣也叫做加密數字貨幣
拓展資料:什麼是區塊鏈
區塊鏈其實就是個點對點的傳輸協議,叫做PPP協議,這個協議以前用來解決中心化伺服器的擁堵問題,以前的快播都是用這個原理,通過共享個人電腦的存儲空間和帶寬,去掉了中心化的伺服器,這樣在線節點越多傳輸速度越快
獲得方式
挖礦目前已經不現實了,專業礦機要16個月回本,而且馬上獎勵減半,需要32個月回本
最簡單直接的方式就是去交易所買
目前國內頭部交易所huobi、幣安和OKEX
㈧ 比特幣創立之初區塊大小是多少
比特幣在創立之初,每個區塊數不超過36兆位元組的交易數據,區塊的大小隻有1M。
區塊大小剛好是1M的原因是比特幣區塊要永久記載btc網路上交易的數據,這些數據經分類後形成分類賬,再添加到區塊鏈中,如果區塊太大了會被網路限制,甚至會拒絕,區塊大小能夠影響著數據量的驗證通過率。
區塊的大小影響著比特幣網路每分每秒能夠解決處理多少的事務數量,因為比特幣區塊記載著各種交易數據,並進行了分類賬目,如果某個個別區塊太大了,數據量太大會遭到網路的拒絕,故區塊能夠有效克制網路的擴展。避免區塊被填滿,造成網路擁擠的局面,一旦那樣,帶來的交易費用也會不斷攀升。
㈨ 比特幣現金的區塊大小
比特幣現金的區塊大小大約在1M。
比特幣現金的區塊大約在1MB,最近一個區塊的大小僅為57KB,硬分叉擴容事實上幾乎沒有意義。
像在比特幣網路中,區塊的大小被限制在了1M,並且每十分鍾產生一個區塊,比特幣網路能夠支撐起的並發量僅僅為每秒7筆交易。
㈩ 比特幣挖礦究竟在計算一個什麼問題手動驗證區塊鏈給出答案
簡單回顧下挖礦的流程。
首先先要對所有的交易做驗證,剔除有問題的,然後通過一套自定義的標准來選擇哪些交易希望打包進區塊,比如說提供的交易費與交易佔用的位元組大小的比值超過某個門檻,這樣的交易才被認為有利可圖。當然,節點也可以特意選擇要加入某條交易,或者故意忽略某些交易。如果是通過礦池挖礦的話,礦池的伺服器會去篩選交易,然後分配給每個參與的礦機一個獨立的任務。
一旦篩選好交易數據,層層約減,通過這些交易就可以計算出一棵Merkle樹,可以確定一個唯一的摘要,這就是Merkl樹的根。
然後我們再依次獲取挖礦需要的其他信息,這些信息組成一個區塊的頭。
區塊頭的位元組分配
區塊頭只有80個位元組,挖礦只需要對區塊頭進行運算即可。交易數據都通過merkle樹固定了下來,不需要再包含進來。
這些信息中大部分已經是固定下來的,或者是可計算的。
我們以區塊277316為例,其信息來自網站 http://blockchain.info
Bitcoin Block #277316blockchain.info
選擇這個區塊的原因是在《Mastering Bitcoin》一書中,中文社區譯本和英文原版在介紹這部分內容時有出入,而且作者Antonopoulos並沒有提到一個關鍵點,就是位元組順序的問題,相信很多人可能會踩這個坑。這里還原的細節可以幫助讀者與書籍做相互參考。
請大家注意下面的每個步驟,注意每一個變化,這是比特幣最核心的演算法。
轉換時間,記住,一定要轉為utc的時間戳,此處遇到過坑,小心。
這一步的發現異常艱辛,耗費了大量的查詢,大坑,大坑,謹記。發明人中本聰可能為了讓機器計算更快,而變為了更接近機器的編碼方式little-endian.
最終得到的結果就是
16進制下前面15個0,然後是1; 而難度目標對應的數字是
16進制下前面15個0,然後是3. 計算結果小於難度目標,符合要求。這個結果與網站上公布的數字一致。
在挖礦時,nonce隨機數是未知的,要從0試到2^32,但是這個數字其實不大,只有4294967296,以現在的礦機動輒14T每秒的算力,全部算完到上限也不需要一秒。剛才提到在這種情況下,需要使用創幣交易中的附帶信息,額外的字元串成為extra nonce。
另外,創世區塊也可以通過上面的方法來驗證,有好奇的朋友可以嘗試下。
提示: