1. 說明
區(qū)塊鏈具有數(shù)據(jù)運行公開、不可篡改穆桂、可溯源融虽、跨國際享完、去中心化的特點有额。因此越來越多地被應(yīng)用在各個領(lǐng)域彼绷。區(qū)塊鏈主要技術(shù)包括:分布式數(shù)據(jù)存儲茴迁、點對點傳輸、共識機制猜旬、加密算法倦卖,將在下面一一介紹。
2. 點對點傳輸
點對點技術(shù)(peer-to-peer怕膛, 簡稱P2P)又稱對等互聯(lián)網(wǎng)絡(luò)技術(shù),它依賴網(wǎng)絡(luò)中參與者的計算能力和帶寬褐捻,而不是把依賴都聚集在較少的幾臺服務(wù)器上。最典型的應(yīng)用就是電驢倦蚪。在這里它提供了最底層的去中心化支持边苹。
3. 分布式數(shù)據(jù)存儲
先看看對區(qū)塊鏈最直觀的感覺:當?shù)谝淮芜\行比特幣錢包時,會下載很多數(shù)據(jù)个束,2017年10月有150G左右,且還在不斷增加沪悲。數(shù)據(jù)存儲在data/blocks目錄下阱表,blk*.dat這就是區(qū)塊block殿如。
第一個問題是:為什么建礦池需要下載這么多數(shù)據(jù)最爬?區(qū)塊鏈本質(zhì)上是一個去中心化的數(shù)據(jù)庫,我們下載的是比特幣所有數(shù)據(jù)所組成的數(shù)據(jù)庫烤送,因此很大糠悯。去中心化的數(shù)據(jù)庫妻往,數(shù)據(jù)并不是保存在某一個服務(wù)器上,而且在P2P的每個節(jié)點上都需要保存一份讯泣。對于中心化的數(shù)據(jù)庫灰署,數(shù)據(jù)庫可能被宿主或者黑客篡改局嘁,因而可靠性變差。而去中心化數(shù)據(jù)庫就像一個公共帳本悦昵,所有人都能查看,但沒人能私自修改以往數(shù)據(jù)寡痰,因為它不可能修改分散在其他人機器上的數(shù)據(jù)庫棋凳。在某個數(shù)據(jù)與其它數(shù)據(jù)庫不一致時拦坠,則以大多數(shù)一致的為準剩岳,這就是所謂的“共識機制”。
隨著交易增加晓铆,錢包還會不斷變大绰播。太大之后,會用到硬分叉技術(shù)蠢箩。也就是啟用一個全新的網(wǎng)絡(luò)并讓所有的用戶大規(guī)模遷移。
4. 區(qū)塊鏈(blockchain)
區(qū)塊鏈是一串使用密碼學(xué)方法相關(guān)聯(lián)產(chǎn)生的數(shù)據(jù)塊滔韵,每一個數(shù)據(jù)塊(block)中包含了一次比特幣網(wǎng)絡(luò)交易的信息呵萨,用于驗證其信息的有效性和生成下一個區(qū)塊(根據(jù)一個生成下一生,構(gòu)成鏈chain)潮峦。
所謂挖礦就是計算出一個滿足規(guī)則的隨機數(shù)勇婴,從而獲得本次記帳權(quán)嘱腥,發(fā)出本輪需要記錄的數(shù)據(jù),然后向全網(wǎng)廣播齿兔,每個節(jié)點都會將收到交易信息,并記錄到一個區(qū)塊中添诉,然后鏈接到現(xiàn)有的區(qū)塊鏈上医寿。
5. 算法
哈希算法是一個字符串到一個(有限位數(shù)的)數(shù)的映射。
Block的算法是根據(jù)上一個block的hash值靖秩,尋找滿足某些hash結(jié)果的字符串,簡單的說就是不停地拼湊字符串花颗,計算SHA256哈希值(碰撞哈希值)惠拭,直到找到產(chǎn)生合適的哈希的字符串,這個字符串就是解今野。具體公式如下:
SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) < TARGET
挖礦就是求解上述方程中的x罐农。
其中,version是block的版本涵亏,prev_hash是上一個block的hash值,merkle_root是需要寫入的交易記錄的merkle樹的值(merkle樹被應(yīng)用在了交易的存儲上拆内,其基本原理就是將葉子節(jié)點(每筆交易的hash)兩兩配對做哈希運算生成父節(jié)點宠默,不斷迭代這一過程最終生成唯一的根節(jié)點merkle root),ntime是更新時間,nbits是當前難度抹沪,TARGET根據(jù)當前難度求出。x的范圍是0~2^32敏弃,這就是個求解x的問題噪馏,一旦你找到了x,你就可以廣播一個新的block欠肾。
TARGET越小,解出x的難度就越大步清,每產(chǎn)生2016個block(約14天)虏肾,網(wǎng)絡(luò)會根據(jù)這段時間產(chǎn)生新block的平均間隔調(diào)整之后的TARGET欢搜,以保證每10分鐘產(chǎn)生一次的速度。因此炒瘟,隨著網(wǎng)上算力的不斷增加,計算難度會越來越大疮装,礦也越來越難挖了。
如果兩人同時挖到刷袍,block chain會出現(xiàn)分叉樊展,客戶端在眾多分支中找到符合當前難度且最長的。
6. 安全機制
1) 私鑰
私鑰是形式如下的一段字符串:
5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss专缠。只要是正確支持比特幣協(xié)議的應(yīng)用都可以把這段字符串識別為私鑰,轉(zhuǎn)換成公鑰哥力,再轉(zhuǎn)換為地址墩弯,如果對應(yīng)的地址上面有比特幣蟀淮,就可以使用這個私鑰花費上面的比特幣钞澳。一般被盜指的都是私鑰被盜。
2) 公私
公鑰是由私鑰生成的轧粟,一個私鑰經(jīng)過橢圓曲線變換之后會生成一個65個byte的數(shù)組,一般我們會看到這樣形式的一個公鑰:04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235
操作是用私鑰簽名的通惫,只有對應(yīng)的公鑰才能解開混蔼,地址也是從公鑰生成的,這樣就可以驗證操作是不是屬于這個地址的惭嚣。
3) 地址
地址是由公鑰產(chǎn)生的,生成的過程是晚吞,先對公鑰做一次SHA256,對得到的結(jié)果做一次RIPEMD160,再從結(jié)果中取20個byte的數(shù)組迁沫,這個得到的數(shù)組就是得到的hash160捌蚊,形如:9a1c78a507689f6f54b847ad1cef1e614ee23f1e
4) 流程
從你這里發(fā)出的數(shù)據(jù)都是由私鑰加密的(包括挖到礦的廣播缅糟,轉(zhuǎn)帳等等)溺拱,傳數(shù)據(jù)的時候也會傳一個公鑰,通過這個公鑰解密沐扳。如果公/私鑰能對上沪摄,就可以證明你的身份杨拐。公鑰是大家可見的,而私鑰被盜帆阳,那么別人就可以用你的身份交易了蜒谤。具體加解密和密鑰導(dǎo)入導(dǎo)出方法請見后續(xù)“錢包”篇鳍徽。
7. 挖礦與深度學(xué)習(xí)
1) 組織算力
挖礦和深度學(xué)習(xí)都需要組織算力敢课。在運算量大時都需要構(gòu)建集群直秆,拆分計算切厘,集成結(jié)果等等疫稿。
2) 硬件基礎(chǔ)
挖礦和深度學(xué)習(xí)都是數(shù)學(xué)模型計算鹃两,它們對于大規(guī)模學(xué)習(xí)的解決方案都是:顯卡俊扳,F(xiàn)PGA馋记,ASIC梯醒。當然功能并不完全相同,深度學(xué)習(xí)需要矩陣乘法畜隶,卷積等基本運算籽慢,而挖礦主要是hash碰撞箱亿。都需要并行性届惋、多線程和高內(nèi)存帶寬等特性,雖然功能相近氢卡,但硬件還是有不少的差別译秦。硬件說明詳見后續(xù)“控制器與礦機”篇筑悴。