區塊的生成和鏈接(一)

這周聽了新大的區塊鏈課程,每個字都能聽清連在一起就不知道什么意思,所以想到把文字整理出來,為的是可以反復看反復理解,于是就有了這篇文章,這是第五課的前半部分內容。



一、交易的傳播驗證。

先講交易的傳播驗證,交易的傳播驗證完成后存在本地的數據庫里,成為一個交易池,這個交易池的作用是什么呢?就是當挖礦之前要先生成區塊,區塊里主要包含交易所有內容,區塊是從交易池里選一些優先級比較高的交易打包進區塊,然后進行挖礦,然后挖礦成功后需要把區塊和包含工作量證明這些所有的值都填進去,然后向全網廣播,尤其是臨近的節點,臨近節點收到后再對這個區塊進行驗證,包括里面的交易也會重新走一遍。最后討論一下MERKLETREE,這是一種數據結構,它有兩個目的:1.是防止區塊中的交易被惡意篡改,2.是做為輕錢包的快速驗證功能,發現你的交易是否在某個區塊鏈里。

先回顧一下上節課的內容,一個交易包含兩部分內容,有輸入有輸出,N個輸入,M個輸出,N>=0 M>0,這里有個問題,為什么N可以等于0?在什么情況下沒有輸入,只有輸出?當礦工挖到礦后,系統自動生成一個交易,這個交易沒有輸入只有輸出,輸出的接收方就是礦工或礦池的公鑰的哈希鎖定的。

輸入理解為你要花費的UTXO(未花費的輸出,別人給你轉的比特幣生成了一個UTXO,就是別人的交易包含了轉的幣值和你的公鑰哈希值,即鎖定腳本,當你花這個幣的時候,別人給你這個幣的UTXO是要被包含進來的,這個包含不是把這個數據的整個結構都包含進來,它是通過指針指向以前那個交易,指向之前那個交易的index,可以叫做UTXO的下標,輸入是:要被花費的UTXO加上你的解鎖腳本,解鎖腳本包含簽名和公鑰),然后用解鎖腳本加上鎖定腳本來驗證你這個交易是合法的,你花費輸出的這個人是否有權利花這個幣。用棧的方式,把你的簽名、公鑰壓進去,再把解鎖腳本數據壓進去,再用運算符把數據彈出來進行計算,最終結果為TURE的話就說明這個交易過了。

輸出可以理解為UTXO,輸出可以有多個UTXO,其中有轉給他人的,沒花完的轉給自己的UTXO,即找零。

交易是用錢包軟件生成的,生成后會向臨近的節點廣播,臨近節點接收到后第一步就需要對交易驗證,這個交易的驗證和挖礦沒有關系,并不是說誰先驗證完這個交易就得到幣,得到幣只是和挖礦有關系,誰先挖到礦誰得到幣。它不驗證的話就不知道這個交易是否合法,不驗證直接就把這個交易打包進區塊里邊就去挖礦的話,費千辛萬苦把挖出12.5個幣,然后把這個區塊對外廣播到其他節點的話,別的節點對這個區塊進行驗證,只要有一個交易非法的,這個礦就白挖了。

對于交易的驗證條款比較多,這里只說主要的內容

1.要看交易的大小,這個交易的SIAZE一定要小于區塊規定的上限.隔離見證之前規定的,區塊的SIZE是不能超過1M,所以交易的SIZE是不能超過區塊的總的SIZE,如果交易的SIZE大于區塊的SIZE,這個交易就被拋棄的。

2.需要驗證這個交易輸入的UTXO是不是真的存在,是否存在于全節點,全節點這個UTXO存在一個池子,可以理解為一個存UTXO的數據庫,會去檢索這個UTXO是否真實存在,如果不存在就是非法的,還可以檢驗你的這個UTXO是否被其他交易所引用,被花兩次。

3.輸入金額要大于輸出金額,交易是需要付費的,需要給礦工付費的。看比特幣交易那本書里描述有時不付礦工費的,如果交易費為零的話,幣齡時間足夠長或UTXO的深度足夠深,我仍然可以以交易費為零的情況下促使這個交易成功,但據業界的人說這個取決于礦工,所以現在基本上不付礦工費的交易應該不會被打包進區塊的,尤其在比特幣交易阻塞的情況下,有好些交易幾個小時甚至兩三天都不能成功的話,像這個沒有小費的交易就更不可能了,因為礦工或礦池是可以改這個比特幣的軟件的,他可以改,打包這個交易的時候可以剔除掉那些沒有交易費的交易,驗證交易時不把這類交易放入池子里,所以輸入總金額一定要大于輸出總金額。

4.會把這個交易的解鎖腳本和鎖定腳本放到一起去驗證,驗證通過了就認為這個交易是合格的,就放入本地的交易的數據庫里,并且把合法的交易廣播給臨近的節點,這個速度很快,也就零點幾秒,臨近的節點收到這個交易會把當前交易做過的事情再做一遍,然后它把這個交易再傳給臨近的其他節點。


二、區塊的生成

一個交易傳播給其他節點,其他節點驗證后會把它放入自己的數據庫里,一個transcation pool,如果你是一個礦工,你有自己的全節點你要挖礦的話,挖礦之前需要先構造一個區塊,把所有交易打包進去,然后構造區塊頭,然后再進行挖礦。第一步要先把coinbase放在區塊的最頂端,所以它會留出一部分空間用于挖礦的交易輸出,它不會把挖礦的交易輸出打包到交易的最后邊,因為區塊的的大小是有一定limit(限制)的。舉例的話,區塊是一節車廂,整個區塊鏈是一列火車,每節車廂客人是固定的,座位是固定的,所以會預留一些座位給coinbase,即挖礦的交易,把其他的位置按交易池中的優先級最高的打包到區塊中,優先級別如何界定有一個公式。

3.優先級等于交易的額度(這個額度就是交易的總輸入或總輸出,因為交易的輸入和輸出差別不大)乘以UTXO的深度(以前講過區塊高度,從區塊下標為零開始,鐘本聰挖的創世區塊是第一個區塊就是下標為零,然后1、2、3…。區塊的深度的方向正好相反,剛被挖出來的區塊、被大家驗證過的區塊它的深度為1,數字下標從1開始,如果再有一個區塊出來了,被驗證合法了,那么這個區塊深度就加一為二了。

UTXO在比特幣里雖然沒有深度這個概念,但在這里你用區塊深度的概念來理解比較簡單,你這個UTXO所被包含進的區塊的深度是多少,如果這個深度是1000,這個優先級相對于深度為100、10的那個深度優先級就要高很多。多以交易的額度會增加優先級,所花費的UTXO存在的那個區塊的深度也會增加優先級,舉例就像你存在銀行的錢,存的越久,你去取錢的時候,你的客戶優先級就越高。就是說你額度非常大,你是VIP客戶,交易數量也是非常大的,那么你的優先級就非常高,如果你的錢存的時間非常長,那么優先級也非常高。

什么會影響交易的優先級呢,就是交易的SIZE的大小。為什么交易會有SIZE呢,之前說過交易有輸入,有N個輸入,有M個輸出,這個基本上沒有什么上限,但是去看那個代碼,M不能大于1024,或是2048,這是打個比方,這肯定是有上限的,但這個上限不會是幾十個或一百個,可能會非常大,如果一筆交易包含了一百個輸入,二百個輸出,你的這個交易就會比別人的交易一個輸入兩個輸出會大出很多。比如去銀行轉賬,把這個卡里的錢和另外的幾個銀行卡里的錢湊成一個數轉給趙、錢、孫、李等多人,就會被認為你這個交易處理起來會非常慢,你的優先級就被放低了。

比特幣交易優先級這樣的設計,當初鐘本聰可能是為了防止“粉塵攻擊”,粉塵就是碎末,可以這樣理解,比如你開了一間飯館,你的競爭者也開了一個飯館,某一天一開門就來一大幫人進來占著座位,就點一杯茶就這樣坐著,別的客人來說可以拼桌嗎,他說不可以,就是很多小額的交易占據著你所有的營業時間和營業場所,使你的大額交易和一些正常的交易無法進行。

就是在比特幣里交易額度非常小,比如輸入是非常小的就0.001個比特幣,輸出也非常小,0.0001個比特幣甚至更小,然后M非常大,N也非常大,一個交易占據了整整一個區塊,打個比方,比如,有的黑客非常極端他非常推崇以太坊,然后就去攻擊比特幣,就用這樣額度非常小的粉塵攻擊,因此比特幣設計這個交易額度會增加優先級,這個額度設計非常小的話就某種程度可以防止粉塵攻擊,包括UTXO的深度,如果深度非常淺,比如剛產生的交易,這個優先級就比較低。這個交易優先級的設計就是為了防止競爭者的攻擊。

把交易打包進區塊后,區塊的身體就做成了,身體就包含了所有的交易,接著還需要創建區塊的頭部,區塊頭部的數據結構如圖:

1.版本號

2.父區塊的哈希:

哈希函數就是把任意的一頭豬變成等長的香腸,哈希值可以理解為被哈希內容的指紋,它可以唯一的確定這個哈希所一一對應的標的物,這樣可以通過哈希值來回溯到父區塊,從區塊的數據結構能看出區塊的身體只包含交易,沒有下一個區塊的任何信息,區塊的頭部只有父區塊哈希值沒有子區塊和自身的哈希值,通過父區塊的哈希值可以創建一條鏈,從最后一個區塊一直回溯到創世區塊。在區塊鏈里可能每一個區塊可能不止一個子區塊,它可能會產生臨時的分叉,比如兩個人同時在競爭挖礦,然后同時把礦挖到了,然后同時向全網廣播,這樣共同的父區塊就產生了兩個子區塊,就形成了兩條鏈,這兩條鏈會互相競爭看誰長得更長,一旦發現哪個鏈更長,很多算力就會轉到更長的鏈上去挖礦。父區塊哈希的好處是,如果父區塊的哈希值有變化會使子區塊中的父區塊哈希字段變化,如果有人攻擊父區塊的數據,如果某一個字節改了之后整個哈希值就完全不同,所以要篡改區塊的話,只對一個區塊攻擊沒用,得對后續的所有區塊重新計算NONCE值,所以幾乎是不可能的。父區塊哈希的作用是可以回溯,還可以防止篡改。

父區塊的哈希值是礦工或礦池在創建區塊的時候先計算最新區塊的哈希值然后放在區塊的頭部,只計算一次

3.MERKLE樹根是一種數據結構,便于查找數據

4.時間戳記錄區塊生成的時間

5.NONCE難度值

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372

推薦閱讀更多精彩內容

  • 一、快速術語檢索 比特幣地址:(例如:1DSrfJdB2AnWaFNgSbv3MZC2m74996JafV)由一串...
    不如假如閱讀 16,041評論 4 87
  • 以下為金馬老師《精通比特幣》解讀的文稿整理。 第一章 介紹 1.1 什么是比特幣 (1)比特幣是一個區塊鏈實現 (...
    夢之郎閱讀 13,299評論 6 61
  • 區塊鏈技術的典型應用 1 偉大的開拓者-比特幣 1) 比特幣產生 2008年,中本聰(Satoshi Na...
    yrm23閱讀 6,326評論 0 23
  • 雙城記是英國作家查爾斯.狄更斯所著的一部以法國大革命為背景作寫成的長篇歷史小說。故事中,將巴黎,倫敦兩個大...
    1704吳俐虹閱讀 769評論 0 5
  • 澗西區東升一小 三3班 馮馭篤 今天我和爺爺去了牡丹公園玩,公園的西南處有一種彎曲的桃樹,我以前經常去那里玩,春...
    清心閣閱讀 341評論 0 1