国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何使用Go實現(xiàn)區(qū)塊鏈

區(qū)塊鏈
自互聯(lián)網(wǎng)以來,鎖鏈技術(shù)已被某些人稱為最有影響力的發(fā)明。盡管公眾將區(qū)塊鏈與投機(jī)性加密貨幣同義解釋,但區(qū)塊鏈實際上在現(xiàn)代世界中具有不可思議的廣泛應(yīng)用。

[[392202]]

本文轉(zhuǎn)載自微信公眾號「區(qū)塊鏈研究實驗室」,作者鏈三豐。轉(zhuǎn)載本文請聯(lián)系區(qū)塊鏈研究實驗室公眾號。

自互聯(lián)網(wǎng)以來,鎖鏈技術(shù)已被某些人稱為最有影響力的發(fā)明。盡管公眾將區(qū)塊鏈與投機(jī)性加密貨幣同義解釋,但區(qū)塊鏈實際上在現(xiàn)代世界中具有不可思議的廣泛應(yīng)用。實際上,加密貨幣只是區(qū)塊鏈領(lǐng)域的一小部分,生產(chǎn)中的許多解決方案都是由私人組織領(lǐng)導(dǎo)來實現(xiàn)的。

隨著區(qū)塊鏈技術(shù)的迅速發(fā)展,技術(shù)領(lǐng)域的專業(yè)人員越來越需要了解區(qū)塊鏈的基礎(chǔ)知識及其技術(shù)影響力。

畢竟,實現(xiàn)自己的區(qū)塊鏈實際上并不像聽起來那樣復(fù)雜。本文中,我們將使用2021年最流行的編程語言之一GoLang實現(xiàn)基本的區(qū)塊鏈。那么,讓我們開始吧!

了解區(qū)塊鏈

區(qū)塊鏈?zhǔn)敲Q符合其含義的少數(shù)技術(shù)之一。我們可以將區(qū)塊鏈視為通過哈希相互連接的信息塊,哈希是從輸入數(shù)據(jù)生成的加密的固定輸出。由于每個塊都通過哈希相互引用,因此如果不大幅度更改鏈的其余部分,就不可能更改鏈的任何部分。

區(qū)塊鏈中的每個塊都可以包含幾乎任何內(nèi)容的數(shù)據(jù)。一個基本框架將包括每個塊的過去交易的所有記錄。比特幣以類似的方式工作,這就是為什么您可以一直跟蹤比特幣交易直至Satoshi首次進(jìn)行加密貨幣交易的原因。

下面我們有三個區(qū)塊來創(chuàng)建區(qū)塊鏈。第一塊是創(chuàng)世塊。由于之前沒有任何內(nèi)容,因此前一個哈希字段為空。我們?nèi)匀皇褂脮r間戳記屬性和初始事務(wù)作為哈希算法的輸入。該算法將吐出一大串?dāng)?shù)字和字母,這些數(shù)字和字母代表了創(chuàng)世紀(jì)塊的哈希值。

轉(zhuǎn)到塊2,我們將創(chuàng)世塊的哈希值用作塊2先前哈希值。這個動作將創(chuàng)世塊與第2塊聯(lián)系起來!接下來,我們將時間戳,交易列表和先前的哈希值作為我們的哈希算法的輸入。該算法將為我們提供一個新的哈希值來表示塊2。

我們將繼續(xù)重復(fù)該過程任意多次,除了區(qū)塊的有效性以及存儲區(qū)塊鏈的能力(比特幣的區(qū)塊鏈約為330 GB)之外,沒有任何其他限制。

在Go中創(chuàng)建一個簡單的區(qū)塊鏈

創(chuàng)建我們的區(qū)塊鏈的第一步是定義什么是區(qū)塊。Go使我們的生活更輕松地創(chuàng)建自定義類型,我們可以Block使用以下代碼來定義類型。在這里,該Block結(jié)構(gòu)具有四個字段以匹配我們上面的圖。

  1. type Block struct { 
  2.   timestamp  time.Time 
  3.   transactions  []string 
  4.   prevHash  []byte 
  5.   Hash    []byte 

下一步是創(chuàng)建構(gòu)造函數(shù)的Go版本,以創(chuàng)建新的塊。該函數(shù)的輸入將使用一個字符串?dāng)?shù)組來表示事務(wù),以及一個字節(jié)數(shù)組來表示先前制作的塊所對應(yīng)的先前的哈希值。下一個要研究的NewHash()功能是我們下一步將實現(xiàn)的功能。

  1. func NewBlock(transactions []string, prevHash []byte) *Block { 
  2.   currentTime := time.Now() 
  3.   return &Block { 
  4.     timestamp: currentTime, 
  5.     transactions: transactions, 
  6.     prevHash: prevHash, 
  7.     Hash: NewHash(currentTime, transactions, prevHash), 
  8.   } 

該NewHash()函數(shù)將時間,事務(wù)列表和以前的哈希作為我們的輸入?yún)?shù),同時返回一個字節(jié)數(shù)組來表示新生成的哈希值。在此功能中,我們基本上只是將所有輸入都混入一個稱為的單個字節(jié)數(shù)組中input。我們這樣做是使用append()功能的附加time參數(shù),prevHash通過轉(zhuǎn)換time為string用...,以追加作為后綴time片的prevHash切片。

然后,我們遍歷transactions并將每個個體附加transaction到input數(shù)據(jù)blob。有趣的語法string(rune(transaction))...只是Go中將其中的每個元素轉(zhuǎn)換transactions為可以附加到的切片的一種方法input。它正在輸入垃圾內(nèi)容,因此,如果您真的想要,請深入研究。

  1. func NewHash(time time.Time, transactions []string, prevHash []byte) []byte { 
  2.   input := append(prevHash, time.String()...) 
  3.   for transaction := range transactions { 
  4.     input = append(input, string(rune(transaction))...) 
  5.   } 
  6.   hash := sha256.Sum256(input) 
  7.   return hash[:] 

最后,我們使用crypto包轉(zhuǎn)到電話sha256.Sum256()與input作為它的參數(shù)。這將為我們的所有數(shù)據(jù)輸入提供新的哈希表示。我們返回時hash[:]使用的[:]語法將hash在返回時切成適當(dāng)?shù)拈L度。

這實際上是我們開始鏈接我們的區(qū)塊鏈所需的全部。當(dāng)然,我們希望在程序中看到某種輸出,以便在打印時可以使用一些輔助方法:

  1. func printBlockInformation(block *Block) { 
  2.   fmt.Printf("\ttime: %s\n", block.timestamp.String()) 
  3.   fmt.Printf("\tprevHash: %x\n", block.prevHash) 
  4.   fmt.Printf("\tHash: %x\n", block.Hash) 
  5.   printTransactions(block) 
  6.  
  7. func printTransactions(block *Block) { 
  8.   fmt.Println("\tTransactions:"
  9.   for i, transaction := range block.transactions { 
  10.     fmt.Printf("\t\t%v: %q\n", i, transaction
  11.   } 

現(xiàn)在剩下的就是創(chuàng)建新的事務(wù),塊和哈希。我們可以通過我們的主要方法來做到這一點(diǎn)。我們定義了一個字符串?dāng)?shù)組來記錄我們的區(qū)塊鏈中的交易。另請注意,我們?nèi)绾蝹鬟f一個空字節(jié)數(shù)組NewBlock()來生成名為的第一個塊genesisBlock。

  1. func main() { 
  2.   genesisTransactions := []string{"Izzy sent Will 50 bitcoin""Will sent Izzy 30 bitcoin"
  3.   genesisBlock := NewBlock(genesisTransactions, []byte{}) 
  4.   fmt.Println("--- First Block ---"
  5.   printBlockInformation(genesisBlock) 
  6.  
  7.   block2Transactions := []string{"John sent Izzy 30 bitcoin"
  8.   block2 := NewBlock(block2Transactions, genesisBlock.Hash) 
  9.   fmt.Println("--- Second Block ---"
  10.   printBlockInformation(block2) 
  11.  
  12.   block3Transactions := []string{"Will sent Izzy 45 bitcoin""Izzy sent Will 10 bitcoin"
  13.   block3 := NewBlock(block3Transactions, block2.Hash) 
  14.   fmt.Println("--- Third Block ---"
  15.   printBlockInformation(block3) 

為了創(chuàng)建新的區(qū)塊,我們將前一個區(qū)塊的哈希值NewBlock()與對應(yīng)的交易歷史記錄一起傳遞。如果您想在一個地方查看整個程序,則為:

  1. package main 
  2.  
  3. import ( 
  4.   "crypto/sha256" 
  5.   "fmt" 
  6.   "time" 
  7.  
  8. type Block struct { 
  9.   timestamp    time.Time 
  10.   transactions  []string 
  11.   prevHash    []byte 
  12.   Hash      []byte 
  13.  
  14. func main() { 
  15.   genesisTransactions := []string{"Izzy sent Will 50 bitcoin""Will sent Izzy 30 bitcoin"
  16.   genesisBlock := NewBlock(genesisTransactions, []byte{}) 
  17.   fmt.Println("--- First Block ---"
  18.   printBlockInformation(genesisBlock) 
  19.  
  20.   block2Transactions := []string{"John sent Izzy 30 bitcoin"
  21.   block2 := NewBlock(block2Transactions, genesisBlock.Hash) 
  22.   fmt.Println("--- Second Block ---"
  23.   printBlockInformation(block2) 
  24.  
  25.   block3Transactions := []string{"Will sent Izzy 45 bitcoin""Izzy sent Will 10 bitcoin"
  26.   block3 := NewBlock(block3Transactions, block2.Hash) 
  27.   fmt.Println("--- Third Block ---"
  28.   printBlockInformation(block3) 
  29.  
  30. func NewBlock(transactions []string, prevHash []byte) *Block { 
  31.   currentTime := time.Now() 
  32.   return &Block { 
  33.     timestamp: currentTime, 
  34.     transactions: transactions, 
  35.     prevHash: prevHash, 
  36.     Hash: NewHash(currentTime, transactions, prevHash), 
  37.   } 
  38.  
  39. func NewHash(time time.Time, transactions []string, prevHash []byte) []byte { 
  40.   input := append(prevHash, time.String()...) 
  41.   for transaction := range transactions { 
  42.     input = append(input, string(rune(transaction))...) 
  43.   } 
  44.   hash := sha256.Sum256(input) 
  45.   return hash[:] 
  46.  
  47. func printBlockInformation(block *Block) { 
  48.   fmt.Printf("\ttime: %s\n", block.timestamp.String()) 
  49.   fmt.Printf("\tprevHash: %x\n", block.prevHash) 
  50.   fmt.Printf("\tHash: %x\n", block.Hash) 
  51.   printTransactions(block) 
  52.  
  53. func printTransactions(block *Block) { 
  54.   fmt.Println("\tTransactions:"
  55.   for i, transaction := range block.transactions { 
  56.     fmt.Printf("\t\t%v: %q\n", i, transaction
  57.   } 

如果要運(yùn)行此程序,將得到以下輸出:

  1. $ go run example.go  
  2. --- First Block --- 
  3.         time: 2021-04-05 15:12:18.813294 -0600 MDT m=+0.000074939 
  4.         prevHash:  
  5.         Hash: 43ec51c50d2b9565f221155a29d8b72307247b08eaf6731cca 
  6.         Transactions: 
  7.                 0: "Izzy sent Will 50 bitcoin" 
  8.                 1: "Will sent Izzy 30 bitcoin" 
  9. --- Second Block --- 
  10.         time: 2021-04-05 15:12:18.813477 -0600 MDT m=+0.000257244 
  11.         prevHash: 43ec51c50d2b9565f221155a29d8b72307247b08eaf6731cca 
  12.         Hash: fcce5323a35cb67b45fe75866582db00fd32baeb92aac448c7 
  13.         Transactions: 
  14.                 0: "John sent Izzy 30 bitcoin" 
  15. --- Third Block --- 
  16.         time: 2021-04-05 15:12:18.813488 -0600 MDT m=+0.000269168 
  17.         prevHash: fcce5323a35cb67b45fe75866582db00fd32baeb92aac448c7 
  18.         Hash: fc1d3eee286970d85812b47c3a5bf016ae8c1de4f86b8ace972ffa 
  19.         Transactions: 
  20.                 0: "Will sent Izzy 45 bitcoin" 
  21.                 1: "Izzy sent Will 10 bitcoin" 

過程可能會很粗糙,但這是創(chuàng)建自己的區(qū)塊鏈的基礎(chǔ)!

責(zé)任編輯:武曉燕 來源: 區(qū)塊鏈研究實驗室
相關(guān)推薦

2021-04-16 20:43:18

Go區(qū)塊鏈編程

2022-07-18 23:49:19

區(qū)塊鏈民主數(shù)據(jù)

2022-01-10 10:56:37

區(qū)塊鏈技術(shù)比特幣

2019-04-03 10:50:09

Javascript區(qū)塊鏈技術(shù)

2020-09-04 08:33:17

區(qū)塊鏈病例電子病例

2021-09-23 22:40:10

區(qū)塊鏈比特幣技術(shù)

2021-04-08 18:39:57

JavaScriptExpress區(qū)塊鏈

2023-06-13 11:49:35

2021-12-13 14:05:27

區(qū)塊鏈金融技術(shù)

2018-03-27 09:52:30

區(qū)塊鏈數(shù)字貨幣比特幣

2021-05-10 15:09:47

區(qū)塊鏈互聯(lián)網(wǎng)金融

2021-02-20 22:35:17

區(qū)塊鏈比特幣記賬

2021-09-02 00:25:46

區(qū)塊鏈互聯(lián)網(wǎng)技術(shù)

2021-04-11 11:31:05

區(qū)塊鏈記賬比特幣

2020-08-18 10:58:05

區(qū)塊鏈比特幣區(qū)塊鏈戰(zhàn)略

2018-05-06 16:17:01

2022-04-18 14:50:00

區(qū)塊鏈安全交易

2021-03-16 14:33:12

區(qū)塊鏈比特幣加密貨幣

2021-04-12 10:57:28

區(qū)塊鏈信任銀行

2018-06-14 10:32:25

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

日本一区视频在线播放| 亚洲精品看片| 国产成人精品视频在线| aa级大片欧美三级| 欧美黄网站在线观看| 色狠狠一区二区三区香蕉| 电影天堂国产精品| 国产精品小说在线| 国产91精品久久久久久久网曝门| 好吊的妞视频这里都有| 亚洲精品美女视频| 91九色精品| 日韩中文字幕三区| 欧美老女人第四色| 先锋影音国产精品| 国产手机视频在线观看| 精品日本高清在线播放| 日韩免费大片| 欧美一区亚洲二区| 亚洲午夜激情av| 91精品福利观看| 热re99久久精品国产99热| 尤物av一区二区| 国产亚洲一区二区手机在线观看 | 在线观看av的网址| 色悠久久久久综合欧美99| 视频精品二区| 亚洲色图都市激情| 欧美精品日韩一区| 操欧美老女人| 性欧美极品xxxx欧美一区二区| 亚洲第一天堂av| 国产精品久久| 午夜黄色一级片| 欧美巨乳美女视频| 国产主播一区二区| 超碰在线网址| 99久久免费国| 亚洲1区2区3区4区| 天堂成人娱乐在线视频免费播放网站 | 久久久亚洲福利精品午夜| 国产成人一区二区精品非洲| 最新国产在线拍揄自揄视频| 成人综合色站| 色一情一乱一乱一91av| 青青草成人影院| 日本免费专区| 日韩美女毛茸茸| 国产精品二三区| 欧洲大片精品免费永久看nba| 亚洲精品天堂成人片av在线播放| 欧美tk丨vk视频| 久久伊人亚洲| 巨大荫蒂视频欧美大片| 国产精品一区二| 欧美影院一区二区| 亚洲手机视频| 国产三级视频在线看| 91免费欧美精品| 亚洲高清在线视频| 成人久久电影| 久草在线新视觉| 国产精品久久激情| 亚洲国产日韩精品| 久久一区二区三区喷水| 依依成人在线| 97久久精品午夜一区二区| 在线一区二区视频| 国产精品久久久久久模特| 性爱视频在线播放| 这里只有精品66| 在线亚洲欧美视频| 久久理论电影网| 欧美男男freegayvideosroom| 香蕉视频网站入口| 久久久久免费精品国产| 国产欧美一区二区三区鸳鸯浴| 视频一区中文字幕精品| aaaaa毛片| 91影院在线免费观看视频| 亚洲va欧美va人人爽| 在线不卡亚洲| sm久久捆绑调教精品一区| 妞干网视频在线观看| 色综合久久悠悠| 亚洲一区二区综合| 韩国精品一区二区三区| 91福利在线尤物| 欧美丰满熟妇bbbbbb百度| 精品国产午夜肉伦伦影院| 国产精品18久久久久久久久久久久| 日韩成人影视| 在线视频不卡一区二区| 久久精品视频免费播放| 日本一二三四高清不卡| 手机在线电影一区| 日本乱理伦在线| 欧美日韩黄色一级片| 国产成人久久久| 欧美一级夜夜爽| www.欧美日韩| 成人在线免费观看视频| 免费观看久久久久| www.日本少妇| 国产精品丝袜久久久久久高清| 欧美视频在线一区| 国产福利91精品| 杨幂一区二区三区免费看视频| 午夜激情视频在线观看| 黄色一级片在线看| 国产免费一区视频观看免费| 欧美成人福利视频| 91色.com| 欧美日本二区| 伊人亚洲精品| 国产香蕉在线| 黄色片久久久久| 99久久一区三区四区免费| 日韩中文在线视频| 色综合中文综合网| 国产乱码精品一品二品| 亚洲男帅同性gay1069| 久久婷婷一区二区三区| 国产精品毛片| 69堂精品视频在线播放| 国产精品永久在线| 一道本一区二区| 一区二区三区在线免费播放| 91精品国产色综合久久| 日韩欧美在线免费观看| 日日骚欧美日韩| 在线国产小视频| 中文字幕人成一区| 日韩免费在线播放| 日韩三级免费观看| 中文字幕日本不卡| 蜜臀av性久久久久av蜜臀妖精| 成人h动漫免费观看网站| 欧美天天影院| 成人黄色网页| 激情成人开心网| 欧美疯狂做受xxxx高潮| 久久精品xxx| 日韩国产在线播放| 午夜精品国产更新| 成人国产精品免费观看| 亚洲青涩在线| 精品久久久亚洲| 欧美aaaaaa| 高清福利在线观看| 97中文字幕| 久久久999视频| 亚洲福利av| 超碰97在线人人| 欧美在线视频网| 色偷偷av一区二区三区| 欧美一级片在线| 色婷婷综合中文久久一本| 中文在线免费一区三区高中清不卡| 国产麻豆精品95视频| 亚洲一区国产| 午夜日韩福利| 久久香蕉国产| 国产精品一国产精品| 国产美女精品视频免费播放软件| 久久青草伊人| 欧美色窝79yyyycom| 久久综合亚洲社区| 欧洲精品久久| 三区四区电影在线观看| 视频一区视频二区欧美| 欧美日韩国产欧| 一区二区三区四区蜜桃| 欧美日韩免费在线视频| 欧美黑人又粗大| 91精品国产色综合久久不卡98口| 欧美日韩国产限制| 亚洲美女偷拍久久| 日本一区二区高清| 久久先锋影音av鲁色资源| 99久免费精品视频在线观看| av电影一区二区| 成人性生交大合| aa级大片欧美| 成人午夜免费av| 国产91丝袜在线播放| 日韩精品色哟哟| 欧美丰满少妇xxxx| 国产一级片在线| 一本久久青青| 欧美日韩国产精品专区| 日韩在线激情| 台湾佬成人网| av中文资源在线资源免费观看| 八戒八戒神马在线电影| av在线麻豆| а√天堂8资源中文在线| 三级在线观看视频| 欧美国产日韩电影| 亚洲一区二区av|