-
鏈?zhǔn)浇Y(jié)構(gòu)小結(jié)
更改區(qū)塊1的數(shù)據(jù),只有修改所有鏈條上的數(shù)據(jù)才能保證一致。
在區(qū)塊1上可以分叉新的鏈條,這種方式也需要全網(wǎng)區(qū)塊達(dá)成共識(shí)。
查看全部 -
認(rèn)識(shí)hash函數(shù)
確定性:對(duì)同一個(gè)輸入數(shù)據(jù),無(wú)論用哈希函數(shù)重復(fù)計(jì)算多少次,每次都能得到相同的結(jié)果。
單向性:可以很輕松的對(duì)已知數(shù)據(jù)進(jìn)行哈希計(jì)算,得到哈希值,通過(guò)哈希值反推相應(yīng)的已知數(shù)據(jù)非常難。
隱秘性:在已知哈希值的情況下,沒(méi)有可行的辦法算出哈希函數(shù)的輸入值。
抗篡改:對(duì)一個(gè)數(shù)據(jù)塊,哪怕只改動(dòng)一個(gè)bit位,哈希值改動(dòng)非常大。
抗碰撞:兩個(gè)不同的數(shù)據(jù)塊,hash值相同的可能性非常小。
MD系列常用MD5,但其抗碰撞性被公認(rèn)較差,不推薦使用。
SHA0,SHA1已被證實(shí)不安全,推薦使用SHA256,SHA3。
查看全部 -
區(qū)塊鏈鏈?zhǔn)浇Y(jié)構(gòu)
查看全部 -
區(qū)塊鏈的架構(gòu)模型
?
查看全部 -
認(rèn)識(shí)一下什么是區(qū)塊鏈
價(jià)值傳遞從轉(zhuǎn)讓方到了受讓方
價(jià)值傳遞雙方借助第三方中介進(jìn)行傳遞,由于擔(dān)心第三方系統(tǒng)會(huì)發(fā)生故障導(dǎo)致數(shù)據(jù)丟失,因此引入?yún)^(qū)塊鏈。
通過(guò)區(qū)塊鏈協(xié)議進(jìn)行自管理。
查看全部 -
go語(yǔ)言構(gòu)建區(qū)塊鏈
查看全部 -
要看一下,錢包是啥玩意查看全部
-
done查看全部
-
學(xué)習(xí)區(qū)塊鏈查看全部
-
package?BlockChain import?( ???"crypto/sha256" ???"encoding/hex" ???"time" ) //構(gòu)建區(qū)塊鏈結(jié)構(gòu)體——區(qū)塊 type?Block?struct?{ ???Index?int64???//區(qū)塊編號(hào) ???Timestamp?int64??//區(qū)塊時(shí)間戳秒為單位,區(qū)塊創(chuàng)建的時(shí)間 ???PrevBlockHash?string??//上一個(gè)區(qū)塊哈希值 ???Hash?string??//當(dāng)前區(qū)塊的哈希值 ???Data?string??//區(qū)塊所包含的數(shù)據(jù) } //計(jì)算區(qū)塊的哈希值 func?calculateHash(b?Block)?string{ ???//用區(qū)塊的這幾個(gè)部分作為hash內(nèi)容 ???//string(b.Index)???將int64轉(zhuǎn)化為string ???blockData?:=?string(b.Index)?+?string(b.Timestamp)?+?b.PrevBlockHash?+?b.Data ???//計(jì)算hash值并存入字節(jié)數(shù)組 ???hashInBytes?:=?sha256.Sum256([]?byte(blockData)) ????return?hex.EncodeToString(hashInBytes[:]) } //生成區(qū)塊 func?GenerateNewBlock(preBlock?Block,?data?string)?Block{ ???//定義一個(gè)新的區(qū)塊 ???newBlock?:=?Block{} ???//新區(qū)塊的編號(hào)等于父區(qū)塊的編號(hào)+1 ???newBlock.Index?=?preBlock.Index?+?1 ???//新區(qū)塊的哈希值等于上一個(gè)區(qū)塊本身的hash值 ???newBlock.PrevBlockHash?=?preBlock.Hash ???//新區(qū)塊的時(shí)間戳等于當(dāng)前時(shí)間 ???newBlock.Timestamp?=?time.Now().Unix() ???//新區(qū)塊的Hash是更新新內(nèi)容計(jì)算得來(lái) ???newBlock.Hash?=?calculateHash(newBlock) ???return?newBlock } //生成創(chuàng)世區(qū)塊:是第一個(gè)區(qū)塊,區(qū)塊編號(hào)為0,區(qū)塊的哈希值是一個(gè)空值, //區(qū)塊的時(shí)間戳和當(dāng)前Hash值可以為它傳遞一個(gè)虛擬的父區(qū)塊生成 //?在系統(tǒng)啟動(dòng)之前就已經(jīng)生成好了 func?GenerateGenesisBlock()?Block{ ???preBlock?:=?Block{} ???preBlock.Index?=?-1 ???preBlock.Hash?=?"" ???return?GenerateNewBlock(preBlock,"First?Block") }
查看全部 -
修改其中一個(gè)區(qū)塊,這個(gè)區(qū)塊后面的所有區(qū)塊都有跟著修改
查看全部 -
鏈?zhǔn)浇Y(jié)構(gòu)哈希的計(jì)算
查看全部 -
哈希函數(shù):是一種算法,把任意長(zhǎng)度的二進(jìn)制數(shù)據(jù)映射為固定長(zhǎng)度的二進(jìn)制數(shù)據(jù)。
哈希函數(shù)的特點(diǎn):具有確定性,單向性,隱秘性,抗篡改,抗碰撞
哈希函數(shù)的實(shí)現(xiàn):MD系列,SHA系列,推薦SHA256,SHA3
查看全部 -
區(qū)塊鏈鏈?zhǔn)浇Y(jié)構(gòu):
一個(gè)區(qū)塊由區(qū)塊頭和區(qū)塊體組成;
區(qū)塊體中存儲(chǔ)了相關(guān)的交易數(shù)據(jù);
區(qū)塊頭中最重要的元素是父區(qū)塊hash,每一個(gè)區(qū)塊含有一個(gè)父區(qū)塊的hash,相當(dāng)于有了一個(gè)指向父區(qū)塊的指針,通過(guò)hash指針把一個(gè)一個(gè)的區(qū)塊連接起來(lái),就構(gòu)成了區(qū)塊鏈特殊的鏈?zhǔn)浇Y(jié)構(gòu)。
在區(qū)塊鏈中的第一個(gè)節(jié)點(diǎn)稱為創(chuàng)世區(qū)塊,創(chuàng)世區(qū)塊只有數(shù)據(jù)值,沒(méi)有父區(qū)塊和hash值。
查看全部 -
區(qū)塊鏈的架構(gòu)模型
數(shù)據(jù)層:封裝了底層數(shù)據(jù)區(qū)塊的鏈子結(jié)構(gòu),以及相關(guān)的非對(duì)稱的公鑰私鑰加密技術(shù)和時(shí)間戳技術(shù);是整個(gè)區(qū)塊鏈最底層的數(shù)據(jù)結(jié)構(gòu)。
網(wǎng)絡(luò)層:包括P2P組網(wǎng)機(jī)制,數(shù)據(jù)傳播機(jī)制和數(shù)據(jù)驗(yàn)證機(jī)制。
共識(shí)層:封裝了網(wǎng)絡(luò)節(jié)點(diǎn)的各類共識(shí)機(jī)制算法,是區(qū)塊鏈的核心技術(shù),它決定是到底是誰(shuí)來(lái)進(jìn)行記賬,而記賬方式將會(huì)影響整個(gè)系統(tǒng)的安全性和可靠性。
激勵(lì)層:將幀元素集中到區(qū)塊鏈的技術(shù)體系中來(lái),包括發(fā)行機(jī)制和分配機(jī)制,主要應(yīng)用在公有鏈中,并不是所有的區(qū)塊鏈都有激勵(lì)層。
合約層:用于封裝各類腳本、算法和智能合約,是區(qū)塊鏈可編程特性的基礎(chǔ),可以簡(jiǎn)單理解為一份自定義的電子合同。
應(yīng)用層:封裝了區(qū)塊鏈的各種應(yīng)用場(chǎng)景和案例。
合約層、激勵(lì)層、共識(shí)層、網(wǎng)絡(luò)層、數(shù)據(jù)層構(gòu)成了區(qū)塊鏈的核心系統(tǒng)
共識(shí)層、網(wǎng)絡(luò)層、數(shù)據(jù)層是構(gòu)建區(qū)塊鏈系統(tǒng)的必要元素
激勵(lì)層通常位于公有鏈,激勵(lì)遵守規(guī)則的節(jié)點(diǎn),懲罰不遵守規(guī)則的節(jié)點(diǎn)
合約層用于封裝各類腳本、算法、合約。
查看全部
舉報(bào)