最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

了解區(qū)塊鏈

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

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

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

 

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

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

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

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

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

下一步是創(chuàng)建構(gòu)造函數(shù)的Go版本,以創(chuàng)建新的塊。該函數(shù)的輸入將使用一個(gè)字符串?dāng)?shù)組來表示事務(wù),以及一個(gè)字節(jié)數(shù)組來表示先前制作的塊所對(duì)應(yīng)的先前的哈希值。下一個(gè)要研究的NewHash()功能是我們下一步將實(shí)現(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ù)將時(shí)間,事務(wù)列表和以前的哈希作為我們的輸入?yún)?shù),同時(shí)返回一個(gè)字節(jié)數(shù)組來表示新生成的哈希值。在此功能中,我們基本上只是將所有輸入都混入一個(gè)稱為的單個(gè)字節(jié)數(shù)組中input。我們這樣做是使用append()功能的附加time參數(shù),prevHash通過轉(zhuǎn)換time為string用...,以追加作為后綴time片的prevHash切片。

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

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ù)輸入提供新的哈希表示。我們返回時(shí)hash[:]使用的[:]語法將hash在返回時(shí)切成適當(dāng)?shù)拈L度。

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

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)建新的事務(wù),塊和哈希。我們可以通過我們的主要方法來做到這一點(diǎn)。我們定義了一個(gè)字符串?dāng)?shù)組來記錄我們的區(qū)塊鏈中的交易。另請(qǐng)注意,我們?nèi)绾蝹鬟f一個(gè)空字節(jié)數(shù)組NewBlock()來生成名為的第一個(gè)塊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ū)塊,我們將前一個(gè)區(qū)塊的哈希值NewBlock()與對(duì)應(yīng)的交易歷史記錄一起傳遞。如果您想在一個(gè)地方查看整個(gè)程序,則為:

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

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

$ 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"

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

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

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

你可能感興趣的文章

幣圈快訊

  • SK集團(tuán)會(huì)長崔泰源購入3620股SK海力士股票

    2026-07-30 18:21
    7月30日,據(jù)韓媒,SK集團(tuán)會(huì)長崔泰源購入3620股SK海力士股票。
  • Citrini:若“25歲AI股神”旗下基金完成新一輪募資并平掉短期對(duì)沖倉位可由此釋放巨額買盤

    2026-07-30 18:21
    7月30日消息,Citrini發(fā)文表示,針對(duì)“25歲AI股神”LeopoldAschenbrenner旗下AI對(duì)沖基金SituationalAwareness在近期AI板塊回調(diào)背景下尋求融資的消息,指出該基金的LP(有限合伙人)群體并非普通投資者,而是堅(jiān)信“AI將比核武器更具變革性”的“機(jī)器上帝”信仰者。盡管該基金可能面臨短期凈值回撤,但鑒于其自2024年成立以來曾錄得約2200%的驚人收益(即回撤90%后仍盈利2.3倍),其LP群體極大概率不會(huì)因短期波動(dòng)轉(zhuǎn)為看空。分析認(rèn)為,這些將“做多TQQQ”視為常態(tài)的超級(jí)AI信徒,不僅不會(huì)恐慌性拋售,反而極有可能“逢低買入”(BTFD)。他指出一旦該基金完成新一輪募資并平掉短期對(duì)沖倉位,由此釋放的巨額買盤或?qū)⒊蔀橹蜛I板塊見底反彈的關(guān)鍵力量。除非AI發(fā)展的核心敘事出現(xiàn)結(jié)構(gòu)性崩塌,否則這群死多頭仍將繼續(xù)押注“2030年前的AI奇點(diǎn)”。
  • Meta:持有路易斯安那數(shù)據(jù)中心項(xiàng)目20%的權(quán)益

    2026-07-30 18:21
    7月30日,Meta表示,持有路易斯安那數(shù)據(jù)中心項(xiàng)目20%的權(quán)益。MetaPlatforms:截至6月30日的三個(gè)月內(nèi),員工薪酬支出中包括11.8億美元的遣散費(fèi),與2026年5月的裁員行動(dòng)相關(guān)。(金十)
  • 歐盟計(jì)劃投資114億美元建設(shè)7座人工智能超級(jí)工廠

    2026-07-30 18:14
    7月30日,歐盟27國集團(tuán)的執(zhí)行官周四表示,歐盟將提供100億歐元(114億美元)的資金,資助企業(yè)建立7個(gè)人工智能巨型工廠,以縮小與美國的人工智能差距。歐盟委員會(huì)表示,希望公共融資能夠吸引額外的200億歐元(228億美元)私人投資。企業(yè)現(xiàn)在可以競標(biāo)建造超級(jí)工廠的合同,這些工廠計(jì)劃配備至少10萬個(gè)尖端人工智能芯片,其性能大約是目前歐盟運(yùn)行的數(shù)據(jù)中心性能的四倍。根據(jù)美國2025年的評(píng)估,歐洲在人工智能發(fā)展的關(guān)鍵領(lǐng)域遠(yuǎn)遠(yuǎn)落后于美國。根據(jù)6月份提交給歐洲議會(huì)的一份委員會(huì)報(bào)告,歐洲企業(yè)和公共當(dāng)局將繼續(xù)依賴美國人工智能提供商,這不利于在前沿工作的歐洲服務(wù)提供商。
  • 消息人士:伊朗對(duì)埃及達(dá)米埃塔港的襲擊旨在展示其干擾全球航運(yùn)的能力

    2026-07-30 17:56
    7月30日,據(jù)紐約時(shí)報(bào)援引兩名伊朗消息人士表示,對(duì)埃及達(dá)米埃塔港的襲擊旨在展示伊朗干擾全球航運(yùn)的能力。
  • 查看更多
更多

熱門幣種

  • 幣種
    最新價(jià)格
    24H漲跌幅
  • bitcoin BTC 比特幣

    BTC

    比特幣

    $ 64568.11¥ 436344.83
    -0.22%
  • ethereum ETH 以太坊

    ETH

    以太坊

    $ 1916.68¥ 12952.73
    -0.29%
  • tether USDT 泰達(dá)幣

    USDT

    泰達(dá)幣

    $ 0.9985¥ 6.7477
    -0.03%
  • binance-coin BNB 幣安幣

    BNB

    幣安幣

    $ 579.63¥ 3917.08
    +1.15%
  • usdc USDC USD Coin

    USDC

    USD Coin

    $ 1.001¥ 6.7646
    +0.01%
  • ripple XRP 瑞波幣

    XRP

    瑞波幣

    $ 1.0808¥ 7.3039
    -0.78%
  • solana SOL Solana

    SOL

    Solana

    $ 74.036¥ 500.32
    -0.14%
  • tron TRX 波場(chǎng)

    TRX

    波場(chǎng)

    $ 0.3284¥ 2.2192
    +0.67%
  • hyperliquid HYPE Hyperliquid

    HYPE

    Hyperliquid

    $ 54.068¥ 365.38
    -2.02%
  • dogecoin DOGE 狗狗幣

    DOGE

    狗狗幣

    $ 0.070267¥ 0.4748
    -1.04%
义乌市| 武乡县| 榆树市| 六枝特区| 永泰县| 体育| 密山市| 大竹县| 庆阳市| 全椒县| 麟游县| 林口县| 余干县| 贵港市| 长宁县| 江川县| 陇川县| 独山县| 大渡口区| 鲜城| 临汾市| 庆阳市| 资中县| 常德市| 许昌县| 芜湖市| 鹰潭市| 宁晋县| 石阡县| 平邑县| 徐水县| 长顺县| 芜湖市| 大埔区| 太康县| 河北区| 泸溪县| 平乡县| 商河县| 华亭县| 桓台县|