欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

當前位置:主頁 > 區(qū)塊鏈 > 區(qū)塊鏈技術 > GO創(chuàng)建區(qū)塊鏈

GO創(chuàng)建區(qū)塊鏈,怎么用GO實現(xiàn)一個簡單的區(qū)塊鏈?

2021-04-19 16:18:13 | 來源:比特范 | 作者:佚名
這篇文章主要介紹了GO創(chuàng)建區(qū)塊鏈,怎么用GO實現(xiàn)一個簡單的區(qū)塊鏈?本文中,我們將使用2021年最流行的編程語言之一GoLang實現(xiàn)基本的區(qū)塊鏈。下面跟隨小編一起來參考下內(nèi)容吧!

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

GO創(chuàng)建區(qū)塊鏈,怎么用GO實現(xiàn)一個簡單的區(qū)塊鏈?

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

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

了解區(qū)塊鏈

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

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

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

 

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

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

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

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

type Block struct { timestamp time.Time transactions []string prevHash []byte Hash []byte}

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

func NewBlock(transactions []string, prevHash []byte) *Block { currentTime := time.Now() return &Block { timestamp: currentTime, transactions: transactions, prevHash: prevHash, Hash: NewHash(currentTime, transactions, prevHash), }}

該NewHash()函數(shù)將時間,事務列表和以前的哈希作為我們的輸入?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)容,因此,如果您真的想要,請深入研究。

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

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

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

func printBlockInformation(block *Block) { fmt.Printf("\ttime: %s\n", block.timestamp.String()) fmt.Printf("\tprevHash: %x\n", block.prevHash) fmt.Printf("\tHash: %x\n", block.Hash) printTransactions(block)}func printTransactions(block *Block) { fmt.Println("\tTransactions:") for i, transaction := range block.transactions { fmt.Printf("\t\t%v: %q\n", i, transaction) }}

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

func main() { genesisTransactions := []string{"Izzy sent Will 50 bitcoin", "Will sent Izzy 30 bitcoin"} genesisBlock := NewBlock(genesisTransactions, []byte{}) fmt.Println("--- First Block ---") printBlockInformation(genesisBlock) block2Transactions := []string{"John sent Izzy 30 bitcoin"} block2 := NewBlock(block2Transactions, genesisBlock.Hash) fmt.Println("--- Second Block ---") printBlockInformation(block2) block3Transactions := []string{"Will sent Izzy 45 bitcoin", "Izzy sent Will 10 bitcoin"} block3 := NewBlock(block3Transactions, block2.Hash) fmt.Println("--- Third Block ---") printBlockInformation(block3)}

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

package mainimport ( "crypto/sha256" "fmt" "time")type Block struct { timestamp time.Time transactions []string prevHash []byte Hash []byte}func main() { genesisTransactions := []string{"Izzy sent Will 50 bitcoin", "Will sent Izzy 30 bitcoin"} genesisBlock := NewBlock(genesisTransactions, []byte{}) fmt.Println("--- First Block ---") printBlockInformation(genesisBlock) block2Transactions := []string{"John sent Izzy 30 bitcoin"} block2 := NewBlock(block2Transactions, genesisBlock.Hash) fmt.Println("--- Second Block ---") printBlockInformation(block2) block3Transactions := []string{"Will sent Izzy 45 bitcoin", "Izzy sent Will 10 bitcoin"} block3 := NewBlock(block3Transactions, block2.Hash) fmt.Println("--- Third Block ---") printBlockInformation(block3)}func NewBlock(transactions []string, prevHash []byte) *Block { currentTime := time.Now() return &Block { timestamp: currentTime, transactions: transactions, prevHash: prevHash, Hash: NewHash(currentTime, transactions, prevHash), }}func NewHash(time time.Time, transactions []string, prevHash []byte) []byte { input := append(prevHash, time.String()...) for transaction := range transactions { input = append(input, string(rune(transaction))...) } hash := sha256.Sum256(input) return hash[:]}func printBlockInformation(block *Block) { fmt.Printf("\ttime: %s\n", block.timestamp.String()) fmt.Printf("\tprevHash: %x\n", block.prevHash) fmt.Printf("\tHash: %x\n", block.Hash) printTransactions(block)}func printTransactions(block *Block) { fmt.Println("\tTransactions:") for i, transaction := range block.transactions { fmt.Printf("\t\t%v: %q\n", i, transaction) }}

如果要運行此程序,將得到以下輸出:

$ go run example.go --- First Block --- time: 2021-04-05 15:12:18.813294 -0600 MDT m=+0.000074939 prevHash:  Hash: 43ec51c50d2b9565f221155a29d8b72307247b08eaf6731cca Transactions: 0: "Izzy sent Will 50 bitcoin" 1: "Will sent Izzy 30 bitcoin"--- Second Block --- time: 2021-04-05 15:12:18.813477 -0600 MDT m=+0.000257244 prevHash: 43ec51c50d2b9565f221155a29d8b72307247b08eaf6731cca Hash: fcce5323a35cb67b45fe75866582db00fd32baeb92aac448c7 Transactions: 0: "John sent Izzy 30 bitcoin"--- Third Block --- time: 2021-04-05 15:12:18.813488 -0600 MDT m=+0.000269168 prevHash: fcce5323a35cb67b45fe75866582db00fd32baeb92aac448c7 Hash: fc1d3eee286970d85812b47c3a5bf016ae8c1de4f86b8ace972ffa Transactions: 0: "Will sent Izzy 45 bitcoin" 1: "Izzy sent Will 10 bitcoin"

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

以上就是GO創(chuàng)建區(qū)塊鏈,怎么用GO實現(xiàn)一個簡單的區(qū)塊鏈?的詳細內(nèi)容,更多關于GO創(chuàng)建區(qū)塊鏈的資料請關注腳本之家其它相關文章!

免責聲明:本文只為提供市場訊息,所有內(nèi)容及觀點僅供參考,不構成投資建議,不代表本站觀點和立場。投資者應自行決策與交易,對投資者交易形成的直接或間接損失,作者及本站將不承擔任何責任。!
Tag:GO   區(qū)塊鏈   Golang  

你可能感興趣的文章

更多

熱門幣種

  • 幣名
    最新價格
    24H漲幅
  • bitcoin BTC 比特幣

    BTC

    比特幣

    $ 95521.71¥ 678146.82
    -3.86%
  • ethereum ETH 以太坊

    ETH

    以太坊

    $ 3163.95¥ 22462.14
    -1.33%
  • tether USDT 泰達幣

    USDT

    泰達幣

    $ 0.9992¥ 7.0937
    -0.04%
  • ripple XRP 瑞波幣

    XRP

    瑞波幣

    $ 2.2771¥ 16.166
    -1.55%
  • binance-coin BNB 幣安幣

    BNB

    幣安幣

    $ 927.57¥ 6585.19
    +0.45%
  • solana SOL Solana

    SOL

    Solana

    $ 141.93¥ 1007.61
    -1.53%
  • usdc USDC USD Coin

    USDC

    USD Coin

    $ 1.0008¥ 7.105
    +0.04%
  • tron TRX 波場

    TRX

    波場

    $ 0.2943¥ 2.0893
    +1%
  • dogecoin DOGE 狗狗幣

    DOGE

    狗狗幣

    $ 0.1609¥ 1.1422
    -1.71%
  • cardano ADA 艾達幣

    ADA

    艾達幣

    $ 0.5086¥ 3.6107
    -3.44%

幣圈快訊

  • Hyperliquid平臺鯨魚當前持倉55.2億美元,多空持倉比為0.87

    2025-11-15 10:00
    據(jù)Coinglass數(shù)據(jù),Hyperliquid平臺鯨魚當前持倉55.2億美元,多單持倉25.75億美元,持倉占比46.64%,空單持倉29.46億美元,持倉占比53.36%。多單盈虧-1.59億美元,空單盈虧2.44億美元。 其中,巨鯨地址0x9eec..ab在3243.65美元價格15倍全倉做多ETH,目前未實現(xiàn)盈虧-369.16萬美元。
  • AvenirGroup比特幣ETF持倉升至11.89億美元,續(xù)創(chuàng)新高

    2025-11-15 09:53
    據(jù)SEC13F文件披露,李林旗下家族辦公室AvenirGroup于2025年第三季度持有1,829.7萬股BlackRockiSharesBitcoinTrust(IBIT),持倉市值達11.89億美元,較上季增長約18%,并已連續(xù)5個季度穩(wěn)居亞洲最大機構持有人。集團在過去15個月于多輪市場調(diào)整中持續(xù)加倉,并同步加大加密金融基礎設施布局,包括參與OSL集團約23.55億港元融資、入股TigerBrokers及領投MetalphaPIPE。此外,Avenir推進比特幣、以太坊與Solana生態(tài)擴張,啟動5億美元合作基金,并參投SharpsTechnology超4億美元融資。
  • 貝萊德BUIDL基金正式登陸B(tài)NBChain,成為Binance平臺認可的抵押品

    2025-11-15 09:51
    貝萊德旗下BUIDL基金現(xiàn)已通過證券型代幣平臺Securitize與跨鏈協(xié)議Wormhole正式登陸B(tài)NBChain。BUIDL基金通過在BNBChain上推出新份額類別,為合格投資者在BNBChain網(wǎng)絡中開辟了配置代幣化美元收益資產(chǎn)的通道。該基金還將成為Binance交易平臺認可的抵押品,為機構和資深交易者在不脫離代幣化國債敞口的前提下,開辟資本高效配置新路徑。
  • 137.87枚BTC從匿名地址轉(zhuǎn)出,經(jīng)中轉(zhuǎn)后流入Binance

    2025-11-15 09:50
    據(jù)Arkham數(shù)據(jù),在09:48,137.87枚BTC(價值約1314萬美元)從一匿名地址(bc1q33k9q...開頭)轉(zhuǎn)出至另一匿名地址(bc1qu57x6...開頭)。隨后,該地址將部分BTC(0.0019847枚)轉(zhuǎn)移至Binance。
  • AvenirGroup比特幣ETF持倉升至11.89億美元再創(chuàng)新高

    2025-11-15 09:49
    據(jù)SEC13F文件披露,李林旗下家族辦公室AvenirGroup于2025年第三季度持有1,829.7萬股BlackRockiSharesBitcoinTrust(IBIT),持倉市值達11.89億美元,較上季增長約18%,并已連續(xù)5個季度穩(wěn)居亞洲最大機構持有人。集團在過去15個月于多輪市場調(diào)整中持續(xù)加倉,并同步加大加密金融基礎設施布局,包括參與OSL集團約23.55億港元融資、入股TigerBrokers及領投MetalphaPIPE。此外,Avenir推進比特幣、以太坊與Solana生態(tài)擴張,啟動5億美元合作基金,并參投SharpsTechnology超4億美元融資。
  • 查看更多