www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 物聯(lián)網(wǎng) > 區(qū)塊鏈
[導讀] 區(qū)塊鏈是二十一世紀最具革命性的技術之一,它正在不斷成熟,它的諸多潛力正在逐步實現(xiàn)中。本質上來看,區(qū)塊鏈只不過是一個分布式的數(shù)據(jù)庫。之所以區(qū)塊鏈獨特,是因為它并不是一個私有數(shù)據(jù)庫,而是一個公開的數(shù)

區(qū)塊鏈是二十一世紀最具革命性的技術之一,它正在不斷成熟,它的諸多潛力正在逐步實現(xiàn)中。本質上來看,區(qū)塊鏈只不過是一個分布式的數(shù)據(jù)庫。之所以區(qū)塊鏈獨特,是因為它并不是一個私有數(shù)據(jù)庫,而是一個公開的數(shù)據(jù)庫,即,每一個使用它的人擁有這個數(shù)據(jù)庫的全部或者至少一部分。任何一個新的數(shù)據(jù)記錄,只能在多數(shù)數(shù)據(jù)庫持有者(維護者)的多數(shù)同意之后被加入數(shù)據(jù)庫。正因如此,區(qū)塊鏈使得加密貨幣以及智能合約成為可能。
?

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

區(qū)塊(Block)

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

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

type Block struct {

Timestamp int64

Data []byte

PrevBlockHash []byte

Hash []byte}

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

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

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

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 的常用方式,我們將實現(xiàn)一個函數(shù),以便更簡單地創(chuàng)建區(qū)塊:

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

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

block.SetHash() return block

}

就這么簡單。

區(qū)塊鏈(Blockchain)

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

在 Golang 中,這種結構可以用數(shù)組(Array)與數(shù)圖(Map) 實現(xiàn):數(shù)組用來維護有序哈希(在 Go 語言中,數(shù)組是有序的);數(shù)圖(Map) 用來維護 hash → block 對。不過,在我們的區(qū)塊鏈原型中,我們只需要數(shù)組就可以了,因為我們暫時不需要通過哈希獲取區(qū)塊。

type Blockchain struct {

blocks []*Block

}

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

現(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ū)塊,我們需要一個已經(jīng)存在的區(qū)塊,可現(xiàn)在我們的區(qū)塊鏈里面沒有任何區(qū)塊!于是,在任何區(qū)塊鏈中,應該至少有一個區(qū)塊,這第一個區(qū)塊,被稱為“創(chuàng)始塊”(Genesis Block)。來,讓我們實現(xiàn)一個方法去創(chuàng)建這個“創(chuàng)始塊”:

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

}

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

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

}

讓我們來看看這區(qū)塊鏈是否能用?

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()

}

}

輸出結果是:

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

(竟然)完工!

結論

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

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

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉