1.1.2 區(qū)塊鏈技術理念
區(qū)塊鏈的技術理念鉴未,其實就是大家共同來參與記賬业汰,通過一種規(guī)則(共識算法)不斷地選出賬務打包者猾封,其他節(jié)點接受驗證蔑鹦,并且每個用戶都有一對密鑰表示自己夺克,通過腳本系統(tǒng)的功能實現(xiàn)在公共網(wǎng)絡中定向發(fā)送有價值的數(shù)據(jù)。
區(qū)塊鏈使用公開密鑰算法來標識用戶身份嚎朽,公開密鑰算法擁有一對密鑰铺纽,是彼此配合使用的,可以相互用來加解密哟忍。其中一個叫私鑰狡门,另外一個叫公鑰陷寝,公鑰可以公開給別人,私鑰鑰自己保管好其馏。在區(qū)塊鏈系統(tǒng)中凤跑,公鑰就是用來用戶身份識別的,一般不會直接使用公鑰叛复,實際處理的時候都會進行轉(zhuǎn)換仔引,比如取得公鑰的最后20個字節(jié)或者經(jīng)過一系列更復雜的轉(zhuǎn)換,最后得到一個稱為“地址”的轉(zhuǎn)換結果褐奥,這個‘地址’就能代表一個用戶咖耘。
密鑰怎么配合工作呢:用公鑰加密的數(shù)據(jù)必須用對應的私鑰來解密,而用私鑰加密(通常稱為“簽名”)的數(shù)據(jù)必須用對應的公鑰來解密撬码。
1.1.3 一般工作流程
1.打包進區(qū)塊 2. 全網(wǎng)廣播 3. 檢查,驗證儿倒,確認 4. 寫入?yún)^(qū)塊
區(qū)塊鏈技術其實就是圍繞如何保持數(shù)據(jù)的一致,如何讓這個公共賬本的數(shù)據(jù)不被篡改來展開的呜笑。
1.2 區(qū)塊鏈技術棧
區(qū)塊鏈系統(tǒng)本質(zhì)行都是在這個經(jīng)典結構紙上直接實現(xiàn)或者擴展實現(xiàn)夫否。
1. 區(qū)塊鏈賬本
比特幣中區(qū)塊鏈數(shù)據(jù)的組成:
區(qū)塊數(shù)據(jù)分為區(qū)塊頭和區(qū)塊體,每個區(qū)塊頭中通過梅克爾根關聯(lián)了區(qū)塊中的眾多交易事務叫胁,而每個區(qū)塊之間通過區(qū)塊頭哈希值(區(qū)塊頭哈希值就是一個區(qū)塊的身份證號)串聯(lián)起來凰慈。
2.共識機制:如何讓每個節(jié)點通過一個規(guī)則將各自的數(shù)據(jù)保持一致是一個很核心的問題,這個問題的解決方案就是制定一套公式算法驼鹅。區(qū)塊鏈中共識算法一般有POW溉瓶,POS,DPOS谤民,PBFT等等。
3.密碼算法
區(qū)塊鏈之間的連接是靠一種叫做哈希值的數(shù)據(jù)來關聯(lián)的疾宏。什么叫哈希值张足?這是通過密碼算法中的哈希算法計算得出的。哈希算法可以通過對一段數(shù)據(jù)計算后得出一段摘要字符串坎藐,這種摘要字符串與原始數(shù)據(jù)是唯一對應的为牍。如果對原始數(shù)據(jù)進行修改,哪怕只是一點點修改岩馍,那么計算出來的哈希值都會發(fā)生完全的改變碉咆。區(qū)塊鏈賬本對每個區(qū)塊都會計算出一個哈希值,稱為區(qū)塊哈希蛀恩,通過區(qū)塊哈希來串聯(lián)區(qū)塊疫铜。
4.腳本系統(tǒng)
區(qū)塊鏈系統(tǒng)依靠腳本系統(tǒng)驅(qū)動著區(qū)塊鏈系統(tǒng)不斷進行著各種數(shù)據(jù)的收發(fā)。所謂腳本双谆,就是指一組程序規(guī)則壳咕。在區(qū)塊鏈系統(tǒng)中席揽,有些系統(tǒng)中的程序規(guī)則是固定的,比如比特幣系統(tǒng)中谓厘,只能進行比特幣的發(fā)送與接收幌羞,這個發(fā)送與接收的過程就是通過實現(xiàn)在比特幣中的一組腳本程序來完成的;而有些系統(tǒng)允許用戶自行編寫一組程序規(guī)則竟稳,編寫好后部署到區(qū)塊鏈賬本中属桦,這樣就可以擴展區(qū)塊鏈系統(tǒng)的功能,比如以太坊就是通過一套可以自定義功能的腳步系統(tǒng)他爸,進而實現(xiàn)了智能合約的功能聂宾。
5. 網(wǎng)絡路由
1.3.2 區(qū)塊鏈分類
1.根據(jù)網(wǎng)絡范圍:可以分為共有鏈、私有鏈讲逛、聯(lián)盟鏈亏吝。
2.根據(jù)部署環(huán)境:主鏈,測試鏈
3.根據(jù)對接類型:單鏈盏混、側鏈蔚鸥、互聯(lián)鏈
單鏈:能夠單獨運行的區(qū)塊鏈系統(tǒng)都可以成為“單鏈”
側鏈:側鏈屬于一種區(qū)塊鏈系統(tǒng)的跨鏈技術。區(qū)塊鏈系統(tǒng)與側鏈系統(tǒng)本身都是一個獨立的鏈系統(tǒng)许赃,兩者之間可以按照一定的協(xié)議進行數(shù)據(jù)互動止喷,通過這種方式,側鏈能起到一個對主鏈功能擴展的作用混聊,很多在主鏈中不方便實現(xiàn)的功能可以實現(xiàn)在側鏈中弹谁,而側鏈再通過與主鏈的數(shù)據(jù)交互增強自己的可靠性。
1.4.2 比特幣核心程序:中本聰客戶端
客戶端邏輯結構:
錢包:主要用于管理用戶的密鑰以及提供轉(zhuǎn)賬操作等功能句喜。
完整區(qū)塊鏈:中本聰客戶端保留了完整的區(qū)塊鏈賬本數(shù)據(jù)预愤,因此能夠獨立自主的校驗所有校驗,而不需借由任何外部的調(diào)用咳胃。當然植康,另外一些節(jié)點只保留了區(qū)塊鏈的一部分(比如區(qū)塊頭),可以通過一種名為“簡易支付驗證”(SPV-simply pay verify)的方式來完成支付驗證,這樣的節(jié)點被稱為“SPV節(jié)點”展懈。
網(wǎng)絡路由:比特幣網(wǎng)絡hi屬于P2P網(wǎng)絡架構销睁,P2P也就是對等的意思。在對等網(wǎng)絡中存崖,每個節(jié)點共同提供網(wǎng)絡服務冻记,不存在任何所謂的中心服務器,因此在對等網(wǎng)絡中網(wǎng)絡架構中是沒有層次的来惧,大家都是平等的冗栗,每個節(jié)點在對外提供服務的同時也在使用網(wǎng)絡中其他節(jié)點所提供的服務。
1.4.3比特幣的發(fā)行:挖礦
挖礦在比特幣系統(tǒng)中的用途:1 搶奪區(qū)塊打包權 2驗證交易實務 3獎勵發(fā)行新幣 4廣播新區(qū)塊
1.難度值:新難度值=當前難度值*(最近的2016個區(qū)塊的實際出塊時間/20 160分鐘)--大約2周調(diào)整一次難度值
2.挖礦計算:
計算公式:SHA256(SHA256(version+pre_hash+merkle_root+ntime+nbits+nonce))<TARGET
ntime:區(qū)塊時間戳?? nbits:當前難度? nonce:隨機數(shù)
挖礦就是重復計算區(qū)塊頭的哈希值,不斷修改該參數(shù)贞瞒,知道與難度目標值匹配的一個過程偶房。
3.區(qū)塊廣播
礦工挖出區(qū)塊后,就進行網(wǎng)絡廣播军浆,傳遞給相鄰節(jié)點棕洋,節(jié)點接收到新的區(qū)塊后會進行一系列的驗證,全部校驗通過就把新的區(qū)塊數(shù)據(jù)納入到自己的區(qū)塊鏈賬本中乒融。如果是挖礦節(jié)點收到信息掰盘,就會立即停止當前的挖礦計算,轉(zhuǎn)而進行下一區(qū)塊的競爭赞季。
4.挖礦方式:CPU/GPU/FPGA/ASIC
1.4.4比特幣錢包:核心錢包與輕錢包
錢包:是屬于比特幣系統(tǒng)中的一個前端工具愧捕,其最基本的功能就是用來管理用戶的比特幣地址、發(fā)起轉(zhuǎn)賬交易申钩、查看交易記錄等次绘。
公開密鑰算法屬于一種不對稱加密算法,擁有兩個密鑰:一個是私鑰撒遣,一個是公鑰邮偎。公鑰可以公開給別人看,私鑰必須要妥善保存义黎,使用私鑰加密(通常習慣上將私鑰加密稱為“私鑰簽名”)的數(shù)據(jù)可以用公鑰解密禾进,而使用公鑰加密的數(shù)據(jù)可以用私鑰解密,兩者是互相匹配的廉涕。目前使用比較廣泛的公開密鑰算法主要有RSA算法和橢圓曲線加密算法(ECC),比特幣使用的是橢圓曲線加密算法泻云。
比特幣地址的生成過程:
對于完整的交易驗證(需要在完整的賬本數(shù)據(jù)上校驗,比如是否包含足夠的余額狐蜕,是否雙花等)可以交給核心節(jié)點宠纯,這樣就可以將錢包功能部分剝離出來,由此產(chǎn)生了SPV錢包层释。即輕錢包征椒,SPV原理的錢包是使用了梅克爾樹來驗證支付是否j已經(jīng)發(fā)生,這也是為什么稱之為簡單支付驗證的原因湃累,支付驗證所做的事情很少,僅僅能看到當前的支付交易是否被發(fā)起而已碍讨,并不能保證這筆交易事務最終會進入到主鏈中治力,也就是說還需要等待核心節(jié)點進行全面的交易驗證并且礦工打包到區(qū)塊后進入主鏈。在這個過程中是有可能發(fā)生失敗的勃黍,所以SPV錢包雖然帶來了便捷性但也犧牲了安全性宵统。
1.4.5比特幣賬戶模型:UTXO(UnspentTransaction Output,未花費事務輸出)
1.比特幣的交易中不是通過賬戶的增減來實現(xiàn)的,而是一筆筆關聯(lián)的輸入/輸出交易事務。
2.每一筆的交易都要花費“輸入”马澈,然后產(chǎn)生“輸出”瓢省,這個產(chǎn)生的“輸出”就是所謂的“未花費的交易輸出”,也就是UTXO.
3.由于沒有賬戶的概念痊班,因此當“輸入”部分的金額大于所需的“輸出”時勤婚,必須給自己找零,這個找零也是作為交易的一部分包含在“輸出”中涤伐。
那么怎么證明哪一條UTXO是屬于誰呢馒胆?
在比特幣中,是使用輸入腳本和輸出腳本程序?qū)崿F(xiàn)的凝果,有時候也稱為“鎖定腳本”和“解鎖腳本”祝迂。簡單地說,就是通過“鎖定腳本”器净,利用私鑰簽名解鎖自己的某一條UTXO(也就是之前的“輸出”)型雳,然后使用對方的公鑰鎖定新的“輸出”,成功后山害,這筆新的“輸出”就成為了對方的UTXO纠俭。
1.5區(qū)塊鏈的技術意義
1.數(shù)據(jù)不可篡改性
2.分布式存儲
3.匿名性
4.價值傳遞
5.自動網(wǎng)絡共識
6.可編程合約
1.6知識點導圖