日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 物聯(lián)網(wǎng) > 區(qū)塊鏈
[導(dǎo)讀] 區(qū)塊鏈?zhǔn)嵌皇兰o(jì)最具革命性的技術(shù)之一,它正在不斷成熟,它的諸多潛力正在逐步實(shí)現(xiàn)中。本質(zhì)上來看,區(qū)塊鏈只不過是一個(gè)分布式的數(shù)據(jù)庫(kù)。之所以區(qū)塊鏈獨(dú)特,是因?yàn)樗⒉皇且粋€(gè)私有數(shù)據(jù)庫(kù),而是一個(gè)公開的數(shù)

區(qū)塊鏈?zhǔn)嵌皇兰o(jì)最具革命性的技術(shù)之一,它正在不斷成熟,它的諸多潛力正在逐步實(shí)現(xiàn)中。本質(zhì)上來看,區(qū)塊鏈只不過是一個(gè)分布式的數(shù)據(jù)庫(kù)。之所以區(qū)塊鏈獨(dú)特,是因?yàn)樗⒉皇且粋€(gè)私有數(shù)據(jù)庫(kù),而是一個(gè)公開的數(shù)據(jù)庫(kù),即,每一個(gè)使用它的人擁有這個(gè)數(shù)據(jù)庫(kù)的全部或者至少一部分。任何一個(gè)新的數(shù)據(jù)記錄,只能在多數(shù)數(shù)據(jù)庫(kù)持有者(維護(hù)者)的多數(shù)同意之后被加入數(shù)據(jù)庫(kù)。正因如此,區(qū)塊鏈?zhǔn)沟眉用茇泿乓约爸悄芎霞s成為可能。
?

在這個(gè)系列文章中,我們將打造一個(gè)簡(jiǎn)化版本的加密貨幣,它將基于一個(gè)簡(jiǎn)化版本的區(qū)塊鏈實(shí)現(xiàn)。

區(qū)塊(Block)

讓我們先從區(qū)塊開始。在區(qū)塊鏈里,價(jià)值信息存儲(chǔ)在區(qū)塊之中。比如,比特幣的區(qū)塊存儲(chǔ)交易記錄,而交易記錄是任何加密貨幣的核心。除此之外,區(qū)塊里還包含有技術(shù)信息,比如它的版本號(hào),當(dāng)前的時(shí)間戳,以及上一個(gè)區(qū)塊的哈希(Hash)。

在這篇文章中,我們所實(shí)現(xiàn)的并不是像比特幣那樣完整的區(qū)塊鏈,而是一個(gè)簡(jiǎn)化版本的區(qū)塊鏈,它只含有最基本的核心信息。差不多是這樣:

type Block struct {

Timestamp int64

Data []byte

PrevBlockHash []byte

Hash []byte}

TImestamp 是當(dāng)前的時(shí)間戳(即,區(qū)塊被創(chuàng)建的時(shí)間),Data 是區(qū)塊中包含的價(jià)值信息,PrevBlockHash 存儲(chǔ)的是上一個(gè)區(qū)塊的哈希,而Hash 保存的是當(dāng)前區(qū)塊的哈希。在比特幣的標(biāo)配中,TImestamp、PrevBlockHash、Hash是區(qū)塊的頭部數(shù)據(jù)(Block headers),構(gòu)成一個(gè)單獨(dú)的數(shù)據(jù)結(jié)構(gòu);而交易記錄(TransacTIons,在我們這個(gè)版本中就是 Data),是另外一個(gè)單獨(dú)的數(shù)據(jù)結(jié)構(gòu)。而我們?cè)谶@里為了簡(jiǎn)化,把數(shù)據(jù)結(jié)構(gòu)混在了一起。

那我們?nèi)绾斡?jì)算哈希呢?計(jì)算哈希的方式是區(qū)塊鏈的重要特征之一,也正是這個(gè)特性使得區(qū)塊鏈如此安全。關(guān)鍵在于,計(jì)算哈希是一個(gè)計(jì)算起來很困難的工作,它需要時(shí)間,哪怕是在很快的計(jì)算機(jī)上(這就是為什么人們要買比 CPU 計(jì)算能力更強(qiáng)悍 GPU 甚至專門的 ASIC 芯片做礦機(jī)的 原因)。這是故意如此設(shè)計(jì)的,這么做的結(jié)果是,往區(qū)塊鏈(數(shù)據(jù)庫(kù))里添加新的區(qū)塊(數(shù)據(jù))有一定的困難,以此保證一旦新的數(shù)據(jù)被加入,往后很難篡改。以后的文章里會(huì)進(jìn)一步討論并實(shí)現(xiàn)這個(gè)機(jī)制。

現(xiàn)在呢,我們只需要罷區(qū)塊里的各個(gè)字段關(guān)聯(lián)起來,并在此基礎(chǔ)上計(jì)算出一個(gè) SHA-256 哈希。讓我們調(diào)用一下 SetHash這個(gè)方法:

func (b *Block) SetHash() {

TImestamp := []byte(strconv.FormatInt(b.Timestamp, 10))

headers := bytes.Join([][]byte{b.PrevBlockHash, b.Data, timestamp}, []byte{})

hash := sha256.Sum256(headers)

b.Hash = hash[:]

}

接下來,依據(jù) Golang 的常用方式,我們將實(shí)現(xiàn)一個(gè)函數(shù),以便更簡(jiǎn)單地創(chuàng)建區(qū)塊:

func NewBlock(data string, prevBlockHash []byte) *Block {

block := &Block{time.Now().Unix(), []byte(data), prevBlockHash, []byte{}}

block.SetHash() return block

}

就這么簡(jiǎn)單。

區(qū)塊鏈(Blockchain)

現(xiàn)在,讓我們來實(shí)現(xiàn)區(qū)塊鏈。本質(zhì)上來看,區(qū)塊鏈只不過是一個(gè)特定結(jié)構(gòu)的數(shù)據(jù)庫(kù),它是一個(gè)有序的,反向鏈接的列表(back-linked list)。這就意味著說,區(qū)塊是按照插入的順序排列的,每個(gè)區(qū)塊都鏈接到上一個(gè)區(qū)塊。這樣的結(jié)構(gòu),使得使用者可以很快地在區(qū)塊鏈中獲得最新的區(qū)塊,也可以很有效率地通過區(qū)塊的哈希獲得某個(gè)區(qū)塊。

在 Golang 中,這種結(jié)構(gòu)可以用數(shù)組(Array)與數(shù)圖(Map) 實(shí)現(xiàn):數(shù)組用來維護(hù)有序哈希(在 Go 語(yǔ)言中,數(shù)組是有序的);數(shù)圖(Map) 用來維護(hù) hash → block 對(duì)。不過,在我們的區(qū)塊鏈原型中,我們只需要數(shù)組就可以了,因?yàn)槲覀儠簳r(shí)不需要通過哈希獲取區(qū)塊。

type Blockchain struct {

blocks []*Block

}

這就是我們的第一個(gè)區(qū)塊鏈!我從來沒想到竟然會(huì)這么簡(jiǎn)單!

現(xiàn)在,我們要想辦法往區(qū)塊鏈里添加區(qū)塊了:

func (bc *Blockchain) AddBlock(data string) {

prevBlock := bc.blocks[len(bc.blocks)-1]

newBlock := NewBlock(data, prevBlock.Hash)

bc.blocks = append(bc.blocks, newBlock)

}

這就完事兒了?或者……?

為了添加新的區(qū)塊,我們需要一個(gè)已經(jīng)存在的區(qū)塊,可現(xiàn)在我們的區(qū)塊鏈里面沒有任何區(qū)塊!于是,在任何區(qū)塊鏈中,應(yīng)該至少有一個(gè)區(qū)塊,這第一個(gè)區(qū)塊,被稱為“創(chuàng)始?jí)K”(Genesis Block)。來,讓我們實(shí)現(xiàn)一個(gè)方法去創(chuàng)建這個(gè)“創(chuàng)始?jí)K”:

func NewGenesisBlock() *Block { return NewBlock(“Genesis Block”, []byte{})

}

現(xiàn)在我們就可以創(chuàng)建一個(gè)函數(shù),用來創(chuàng)建一個(gè)已含有“創(chuàng)始?jí)K”的區(qū)塊鏈了:

func NewBlockchain() *Blockchain { return &Blockchain{[]*Block{NewGenesisBlock()}}

}

讓我們來看看這區(qū)塊鏈?zhǔn)欠衲苡茫?/p>

func main() {

bc := NewBlockchain()

bc.AddBlock(“Send 1 BTC to Ivan”)

bc.AddBlock(“Send 2 more BTC to Ivan”) for _, block := range bc.blocks {

fmt.Printf(“Prev. hash: %x ”, block.PrevBlockHash)

fmt.Printf(“Data: %s ”, block.Data)

fmt.Printf(“Hash: %x ”, block.Hash)

fmt.Println()

}

}

輸出結(jié)果是:

Prev. hash:

Data: Genesis Block

Hash: aff955a50dc6cd2abfe81b8849eab15f99ed1dc333d38487024223b5fe0f1168

Prev. hash: aff955a50dc6cd2abfe81b8849eab15f99ed1dc333d38487024223b5fe0f1168

Data: Send 1 BTC to Ivan

Hash: d75ce22a840abb9b4e8fc3b60767c4ba3f46a0432d3ea15b71aef9fde6a314e1

Prev. hash: d75ce22a840abb9b4e8fc3b60767c4ba3f46a0432d3ea15b71aef9fde6a314e1

Data: Send 2 more BTC to Ivan

Hash: 561237522bb7fcfbccbc6fe0e98bbbde7427ffe01c6fb223f7562288ca2295d1

(竟然)完工!

結(jié)論

我們創(chuàng)建了一個(gè)極簡(jiǎn)的區(qū)塊鏈原型:它只不過是一個(gè)由區(qū)塊構(gòu)成的數(shù)組,每個(gè)區(qū)快鏈接指向上一個(gè)區(qū)塊。當(dāng)然,真正的區(qū)塊鏈遠(yuǎn)比這個(gè)復(fù)雜的多。在我們的區(qū)塊鏈里,添加一個(gè)新區(qū)塊非??欤浅H菀?;但是在真正的區(qū)塊鏈中添加一個(gè)新的區(qū)塊需要更多的工作:在獲得添加區(qū)塊的允許之前要做很繁重的計(jì)算才行(這個(gè)過程被稱為工“作證明機(jī)制”,即,“Proof-of-Work”,POW)。并且,區(qū)塊鏈?zhǔn)且粋€(gè)沒有主權(quán)的分布式的數(shù)據(jù)庫(kù)。因此,任何一個(gè)新的區(qū)塊在被加入之前,必須經(jīng)過網(wǎng)絡(luò)中其它參與者的確認(rèn)與允許(這個(gè)機(jī)制被稱為“共識(shí)機(jī)制”,“Consensus”)…… 還有,我們的區(qū)塊鏈里,還沒有任何交易記錄呢!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉