一、區(qū)塊鏈結(jié)構(gòu)
1筷笨、基本結(jié)構(gòu):區(qū)塊頭(Block Head)+ 區(qū)塊體(Block Body)
(1)區(qū)塊頭(包括3組元數(shù)據(jù)):
? ? ? ?①用于連接前面的區(qū)塊、索引自父區(qū)塊哈希值的數(shù)據(jù)。
?????? ②挖礦難度揭措、Nonce(隨機(jī)數(shù)驯绎,用于工作量證明算法的計數(shù)器)蒂胞、時間戳。
?????? ③能夠總結(jié)并快速歸納校驗區(qū)塊中所有交易數(shù)據(jù)的Merkle樹根數(shù)據(jù)条篷。
數(shù)據(jù)項:
??????Version(4字節(jié))
??????Hashprevblock(32字節(jié))
??????Hashmerkleroot(32字節(jié))
??????Time(4字節(jié))
??????Bits(4字節(jié))
??????Nonce(4字節(jié))
(2)區(qū)塊體
交易數(shù)據(jù)(Tx)
Transactions包括一個input和多個output骗随。并且輸入和輸出相等:input
satoshi=output satoshi蛤织,input satoshi=output satoshi.已確認(rèn)的交易(或者說已經(jīng)花出去的錢)被稱為Transaction identifiers(TXIDs),未確認(rèn)的被稱為Unspent
Transaction Outputs(UTXOs)
數(shù)據(jù)項:
??????Magic no(4字節(jié)):總是0xD9B4BEF9
??????Blocksize(4字節(jié))
??????Blockheader(80字節(jié))
??????Transaction counter(1-9字節(jié)):正整數(shù)VI= Varlnt
??????Transactions(Transaction counter許多交易):非空
2鸿染、組成部分
(1)數(shù)據(jù)層:區(qū)塊數(shù)據(jù)指蚜、鏈?zhǔn)浇Y(jié)構(gòu)、數(shù)字簽名涨椒、哈希函數(shù)摊鸡、Merkle樹、非對稱加密蚕冬。
(2)網(wǎng)絡(luò)層:P2P網(wǎng)絡(luò)免猾、傳播機(jī)制、驗證機(jī)制囤热。
(3)共識層:共識算法猎提。
(4)激勵層:發(fā)行機(jī)制、分配機(jī)制旁蔼。
(5)合約層:合約算法锨苏。
(6)應(yīng)用層:實現(xiàn)轉(zhuǎn)賬記賬功能。
3棺聊、區(qū)塊:數(shù)據(jù)庫中需要存儲的數(shù)據(jù)伞租。
4、鏈:每個區(qū)塊通過特定的信息鏈接到上一區(qū)塊的后面限佩,前后按時間順序連接起來成為一套完整的數(shù)據(jù)葵诈。
5、哈希算法(Hash Function)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MD5/SHA+uuid+數(shù)據(jù)校驗
(1)概念:將任意長度的二進(jìn)制值串映射為固定長度的二進(jìn)制值串祟同。
①在算法內(nèi)部驯击,不管輸入的數(shù)據(jù)是何種形式,都以單純的比特序列來處理耐亏。
②輸入就是一串由0和1組成的二進(jìn)制數(shù)徊都。
③哈希算法把數(shù)據(jù)打亂混合,壓縮成摘要广辰,使得數(shù)據(jù)量變小暇矫,重新創(chuàng)建一個叫做哈希值的指紋。
④輸入值與輸出值之間沒有規(guī)律择吊,所以不能通過輸出值算出輸入值李根。
(2)常用算法:MD5、SHA
性質(zhì):①不可逆:即知道x的hash值無法求出x几睛。
? ? ? ? ? ? ②小沖突:即存在一個y值房轿,與已知x值的hash值相同的概率非常小。
(3)MD5(MD5 Message-Digest Algorithm,MD5 消息摘要算法)
作用:①防篡改
比如發(fā)送一份電子文檔囱持,發(fā)送前夯接,我先得到MD5的輸出結(jié)果a。然后在對方收到電子文檔后纷妆,對方也得到一個MD5的輸出結(jié)果b盔几。如果a與b一樣就代表中途未被篡改。
? ? ? ? ? ? ②防止直接看到明文
現(xiàn)在很多網(wǎng)站在數(shù)據(jù)庫存儲用戶的密碼的時候都是存儲用戶密碼的MD5值掩幢。這樣就算不法分子得到數(shù)據(jù)庫的用戶密碼的MD5值逊拍,也無法知道用戶的密碼。(比如在UNIX系統(tǒng)中用戶的密碼就是以MD5(或其它類似的算法)經(jīng)加密后存儲在文件系統(tǒng)中际邻。當(dāng)用戶登錄的時候芯丧,系統(tǒng)把用戶輸入的密碼計算成MD5值,然后再去和保存在文件系統(tǒng)中的MD5值進(jìn)行比較世曾,進(jìn)而確定輸入的密碼是否正確缨恒。通過這樣的步驟,系統(tǒng)在并不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統(tǒng)的合法性度硝。這不但可以避免用戶的密碼被具有系統(tǒng)管理員權(quán)限的用戶知道肿轨,而且還在一定程度上增加了密碼被破解的難度寿冕。)
? ? ? ? ? ? ?③防止抵賴(數(shù)字簽名)
這需要一個第三方認(rèn)證機(jī)構(gòu)蕊程。例如A寫了一個文件,認(rèn)證機(jī)構(gòu)對此文件用MD5算法產(chǎn)生摘要信息并做好記錄驼唱。若以后A說這文件不是他寫的藻茂,權(quán)威機(jī)構(gòu)只需對此文件重新產(chǎn)生摘要信息,然后跟記錄在冊的摘要信息進(jìn)行比對玫恳,相同的話辨赐,就證明是A寫的了。這就是所謂的“數(shù)字簽名”京办。
(4)uuid
我們可以給每一個圖片取一個唯一標(biāo)識掀序,或者說信息摘要。比如惭婿,我們可以從圖片的二進(jìn)制碼串開頭取 100 個字節(jié)不恭,從中間取 100 個字節(jié),從最后再取 100 個字節(jié)财饥,然后將這 300 個字節(jié)放到一塊换吧,通過哈希算法(比如 MD5),得到一個哈希字符串钥星,用它作為圖片的唯一標(biāo)識沾瓦。通過這個唯一標(biāo)識來判定圖片是否在圖庫中,這樣就可以減少很多工作量。如果還想繼續(xù)提高效率贯莺,我們可以把每個圖片的唯一標(biāo)識风喇,和相應(yīng)的圖片文件在圖庫中的路徑信息,都存儲在散列表中乖篷。當(dāng)要查看某個圖片是不是在圖庫中的時候响驴,我們先通過哈希算法對這個圖片取唯一標(biāo)識,然后在散列表中查找是否存在這個唯一標(biāo)識撕蔼。如果不存在豁鲤,那就說明這個圖片不在圖庫中;如果存在鲸沮,我們再通過散列表中存儲的文件路徑琳骡,獲取到這個已經(jīng)存在的圖片,跟現(xiàn)在要插入的圖片做全量的比對讼溺,看是否完全一樣楣号。如果一樣,就說明已經(jīng)存在怒坯;如果不一樣炫狱,說明兩張圖片盡管唯一標(biāo)識相同,但是并不是相同的圖片剔猿。
(5)SHA256
操作流程:
第一步:消息預(yù)處理
(1)補(bǔ)位:對消息進(jìn)行補(bǔ)位處理视译,使得最終的長度是512位的倍數(shù)。
(2)分塊:以512位為單位對消息進(jìn)行分塊為M(1),M(2),...,M(N)归敬。
第二步:計算哈希值
對消息區(qū)塊進(jìn)行逐個處理酷含。從一個固定的初始哈希H(0)開始,進(jìn)行以下序列的計算:
H(i)=H(i-1)+ CM^(i)(H(i-1))
C:SHA256的壓縮函數(shù)汪茧。
H(i):第i消息區(qū)塊的哈希值椅亚。
6、交易
轉(zhuǎn)賬
E.G.如果A選用BTC向B付款舱污,若當(dāng)前1BTC=10萬元呀舔,則A需向B支付0.05+0.001=0.051BTC,其中0.001BTC是礦工費扩灯。
礦工費:A向B轉(zhuǎn)賬時媚赖,付給BTC網(wǎng)絡(luò)提供者的“小費”,以激勵他們?yōu)锽TC網(wǎng)絡(luò)提供服務(wù)驴剔∈」牛“小費”是可以調(diào)整的,“小費”給的多丧失,轉(zhuǎn)賬速度就快豺妓。
第一步:A打開BTC錢包,選擇轉(zhuǎn)賬功能。
第二步:輸入B的BTC接收地址琳拭,及轉(zhuǎn)賬金額0.051個BTC训堆。
地址:是由數(shù)字和字母組成的字符串。
生成方式:是由公鑰經(jīng)過單向的哈希函數(shù)生成的(自動生成)白嘁。
第三步:點擊轉(zhuǎn)賬坑鱼,輸入密碼。
第四步:等待6個交易確認(rèn)數(shù)后絮缅,B收到A轉(zhuǎn)來的0.05個BTC鲁沥。
交易確認(rèn)數(shù):區(qū)塊鏈分布式記賬網(wǎng)絡(luò)中,每一筆轉(zhuǎn)賬交易耕魄,每得到網(wǎng)絡(luò)中1個節(jié)點的確認(rèn)画恰,記1次交易確認(rèn)數(shù)。然若得到網(wǎng)絡(luò)中所有節(jié)點確認(rèn)后轉(zhuǎn)賬才能生效吸奴,則需要花費很長時間允扇。因此在BTC網(wǎng)絡(luò)中,經(jīng)過設(shè)計計算则奥,當(dāng)獲得6個交易確認(rèn)數(shù)時考润,可認(rèn)為這筆交易就非常安全了,交易生效读处,轉(zhuǎn)賬的BTC可到賬糊治。
第五步:交易完成。