亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 專題 > 區(qū)塊鏈 > 正文

用 Go 語言構(gòu)建區(qū)塊鏈

2020-02-25 19:28:53
字體:
供稿:網(wǎng)友

1. 介紹

在上一篇文章中,我們構(gòu)建了一個非常簡單的數(shù)據(jù)結(jié)構(gòu),這是區(qū)塊鏈數(shù)據(jù)庫的本質(zhì)。 而且我們可以用它們之間的鏈接向它添加區(qū)塊:每個區(qū)塊與前一個鏈接。 唉,然而在現(xiàn)實中添加一個區(qū)塊添加到鏈?zhǔn)切枰?strong>高成本的工作。

2. 工作證明

區(qū)塊鏈的一個關(guān)鍵思想是,必須通過工作證明才能將數(shù)據(jù)放入其中。這是一個艱巨的工作,使塊鏈安全和一致。此外,這筆辛苦的工作也得到了獎勵(這是人們獲得采礦硬幣的方式)。

這種機(jī)制與現(xiàn)實生活中的機(jī)制非常相似:人們必須工作獲酬勞勵并維持生命。在網(wǎng)絡(luò)中,網(wǎng)絡(luò)的一些參與者(礦工)努力維持網(wǎng)絡(luò),為其添加新的塊,并為他們的工作獲得獎勵。作為其工作的結(jié)果,塊以安全的方式并入到塊鏈中,這保持了整個塊鏈數(shù)據(jù)庫的穩(wěn)定性。值得注意的是,完成工作的人必須證明這一點。

這個整體“努力工作和證明工作價值”機(jī)制被稱為工作證明。這很難因為它需要很多的計算能力:即使是高性能的計算機(jī)也不能很快的完成。此外,這項工作的難度不時增加,以保持新的塊率每小時大約6個塊。在比特幣,這樣的工作的目標(biāo)是找到一個塊的哈希,滿足一些要求。這是散列,作為證明。因此,找到證據(jù)是實際工作。

最后要注意的事情。工作證明算法必須滿足要求:工作不易,證明容易。證明通常交給非工作者,所以對他們來說,驗證它不應(yīng)該花太多的時間。

3. 哈希算法

在本文中,我們將討論哈希算法。 如果你熟悉這個概念,你可以跳過這個部分。

哈希是獲取指定數(shù)據(jù)的哈希值的過程。 哈希值是對其計算的數(shù)據(jù)的唯一表示。 哈希函數(shù)是一個獲取任意大小的數(shù)據(jù)并產(chǎn)生固定大小的哈希的函數(shù)。 以下是哈希的一些主要功能:

  • 原始數(shù)據(jù)無法從哈希值恢復(fù)。 因此,哈希過程不是加密。
  • 數(shù)據(jù)只能有一個與之對應(yīng)的哈希值,因此哈希是唯一的。
  • 更改輸入數(shù)據(jù)中的一個字節(jié)將導(dǎo)致完全不同的散列。

Hashing functions are widely used to check the consistency of data. Some software providers publish checksums in addition to a software package. After downloading a file you can feed it to a hashing function and compare produced hash with the one provided by the software developer.

In blockchain, hashing is used to guarantee the consistency of a block. The input data for a hashing algorithm contains the hash of the previous block, thus making it impossible (or, at least, quite difficult) to modify a block in the chain: one has to recalculate its hash and hashes of all the blocks after it.

哈希函數(shù)被廣泛用于檢查數(shù)據(jù)的一致性。在區(qū)塊鏈中,使用哈希來保證塊的一致性。 哈希算法的輸入數(shù)據(jù)包含前一個塊的哈希值,從而使得已經(jīng)生成的鏈難以修改之前產(chǎn)生的區(qū)塊(或至少相當(dāng)困難):篡改一個區(qū)塊必須重新計算其前的所有塊的哈希值。

哈?,F(xiàn)金

比特幣使用Hashcash,哈希現(xiàn)金的發(fā)明最初是為防止電子郵件垃圾郵件而開發(fā)的。它可以分為以下幾個步驟:

  1. 獲取公開的數(shù)據(jù)(在電子郵件的情況下,它是接收者的電子郵件地址;在比特幣的情況下,它是塊標(biāo)題)。
  2. 添加一個計數(shù)器。計數(shù)器從0開始。
  3. 獲取數(shù)據(jù)+計數(shù)器組合的哈希值。
  4. 檢查哈希值是否符合要求。
    1. 如果滿足要求,結(jié)束過程。
    2. 如果不滿足要求,增加計數(shù)器并重復(fù)步驟3和4。

因此,這是一個強力brute force算法:

1. 計算一個新的哈希2. 檢查該哈希值3. 增加計數(shù)器

現(xiàn)在讓我們看看一個哈希必須滿足的要求。在原來的Hashcash實現(xiàn)中“哈希的前20位必須是零”。然而在比特幣中,哈希要求是不時進(jìn)行調(diào)整的,因為盡管計算能力隨著時間的推移而增加,越來越多的礦工加入網(wǎng)絡(luò),因此設(shè)計必須每10分鐘生成一個塊。

4. 編寫代碼

程序員小提醒:go和python都是不用加分號的語言

好的,我們完成了理論,讓我們編寫代碼! 首先,我們來定義挖掘難度

const targetBits = 24

4.1 目標(biāo)位

在比特幣中,“目標(biāo)位(target bit)”是存儲塊被挖掘的困難的頭部數(shù)據(jù)。 我們現(xiàn)在不會實現(xiàn)目標(biāo)調(diào)整算法,所以我們可以將難度定義為全局常數(shù)

24是一個任意數(shù)字,我們的目標(biāo)是在內(nèi)存中占用少于256位的目標(biāo)。 而且我們希望差異足夠大,但不要太大,因為差異越大,找到合適的哈希越難。

// 工作證明type ProofOfWork struct {    block  *Block     target *big.Int //定義目標(biāo)位}// 新的工作證明func NewProofOfWork(b *Block) *ProofOfWork {    target := big.NewInt(1)    target.Lsh(target, uint(256-targetBits))   //用于隨機(jī)產(chǎn)生target,目標(biāo)數(shù)值?。。∵@里從數(shù)學(xué)上保證了  // Lsh: local sensitivity hashing  //左移256個 target bits位    pow := &ProofOfWork{b, target}    return pow}

這里創(chuàng)建工作證明結(jié)構(gòu)中保存指向區(qū)塊的指針的和指向target的指針。 “target”是上一段所述要求的另一個名稱。 我們使用一個大整數(shù),因為我們將哈希與目標(biāo)進(jìn)行比較:我們將哈希轉(zhuǎn)換為一個大整數(shù),并檢查它是否小于target。

在新的工作證明的函數(shù)中,我們初始化一個值為1的big.Int,并將其左移256個 - targetBits位。 256是SHA-256哈希的長度,以比特為單位,它是我們要使用的SHA-256散列算法。 目標(biāo)的十六進(jìn)制表示為:

0x10000000000000000000000000000000000000000000000000000000000

它在內(nèi)存中占用29個字節(jié)。 這是與以前的例子中的哈希的比較:

0fac49161af82ed938add1d8725835cc123a1a87b1b196488360e58d4bfb51e300000100000000000000000000000000000000000000000000000000000000000000008b0f41ec78bab747864db66bcb9fb89920ee75f43fdaaeb5544f7f76ca

第一個哈希(以“我喜歡甜甜圈”計算)大于目標(biāo),因此它不是有效的工作證明。 第二個哈希(以“我喜歡甜甜圈ca07ca”計算)小于目標(biāo),因此這是一個有效的證明。

您可以將目標(biāo)視為范圍的上限:如果數(shù)字(哈希)低于邊界,則它是有效的,反之亦然。 降低邊界將導(dǎo)致有效數(shù)量減少,因此找到有效數(shù)量所需的工作更加困難。

4.2 準(zhǔn)備數(shù)據(jù)

//準(zhǔn)備數(shù)據(jù),加入targetBits和noncefunc (pow *ProofOfWork) prepareData(nonce int) []byte {     data := bytes.Join(        [][]byte{            pow.block.PrevBlockHash,            pow.block.Data,            IntToHex(pow.block.Timestamp),            IntToHex(int64(targetBits)),             IntToHex(int64(nonce)),        },        []byte{},    )    return data}

4.3 工作證明

func (pow *ProofOfWork) Run() (int, []byte) {    var hashInt big.Int    var hash [32]byte    nonce := 0    fmt.Printf("Mining the block containing /"%s/"/n", pow.block.Data)   // nounce  是counter    for nonce < maxNonce { // maxNounce被設(shè)置成math.MaxInt64,防止溢出        data := pow.prepareData(nonce) // 1. prepare data        hash = sha256.Sum256(data) // 2. sha256 hash:https://golang.org/pkg/crypto/sha256/#Sum256        fmt.Printf("/r%x", hash)          hashInt.SetBytes(hash[:]) // 3. 從hexidecimal 轉(zhuǎn)換成  big INT        //執(zhí)行這個for loop直到找到hashInt和target相等        if hashInt.Cmp(pow.target) == -1 { // 4. Compare integer with the target            break        } else {            nonce++        }    }    fmt.Print("/n/n")    return nonce, hash[:]}

4.4. 給NewBlock() 加入nounce和工作證明

移除SetHash,并更改NewBlock:

  1. 產(chǎn)生新區(qū)塊
  2. 工作證明
func NewBlock(data string, prevBlockHash []byte) *Block {    block := &Block{time.Now().Unix(), []byte(data), prevBlockHash, []byte{}, 0}    // 工作證明    pow := NewProofOfWork(block)    nonce, hash := pow.Run()     block.Hash = hash[:]    block.Nonce = nonce    return block}

nonce被加入到Block結(jié)構(gòu)中

type Block struct {    Timestamp     int64    Data          []byte    PrevBlockHash []byte    Hash          []byte    Nonce         int // 用于驗證}

4.5. 驗證工作證明 validate()

func (pow *ProofOfWork) Validate() bool {    var hashInt big.Int    data := pow.prepareData(pow.block.Nonce) // 驗證    hash := sha256.Sum256(data)    hashInt.SetBytes(hash[:])    isValid := hashInt.Cmp(pow.target) == -1 //檢查產(chǎn)生的Big Int hashInt是否和target相當(dāng)    return isValid}
func main() {    ...    for _, block := range bc.blocks {        ...        pow := NewProofOfWork(block)        fmt.Printf("PoW: %s/n", strconv.FormatBool(pow.Validate())) //驗證工作證明        fmt.Println()    }}

Output:

...Prev. hash:Data: Genesis BlockHash: 00000093253acb814afb942e652a84a8f245069a67b5eaa709df8ac612075038PoW: truePrev. hash: 00000093253acb814afb942e652a84a8f245069a67b5eaa709df8ac612075038Data: Send 1 BTC to IvanHash: 0000003eeb3743ee42020e4a15262fd110a72823d804ce8e49643b5fd9d1062bPoW: truePrev. hash: 0000003eeb3743ee42020e4a15262fd110a72823d804ce8e49643b5fd9d1062bData: Send 2 more BTC to IvanHash: 000000e42afddf57a3daa11b43b2e0923f23e894f96d1f24bfd9b8d2d494c57aPoW: true

5. 總結(jié)

我們的塊鏈?zhǔn)且粋€更接近其實際架構(gòu)的一步:添加塊現(xiàn)在需要工作證明,因此mining是可能的。但是它仍然缺乏一些關(guān)鍵的特征:塊鏈數(shù)據(jù)庫不是持久性數(shù)據(jù),沒有錢包,地址,交易,沒有共識機(jī)制。所有這些我們將在以后的文章中實現(xiàn)。

persistence refers to the characteristic of state that outlives the process that created it. This is achieved in practice by storing the state as data in computer data storage .

Links:

  1. Full source codes
  2. Blockchain hashing algorithm
  3. Proof of work
  4. Hashcash

番外

不同branches中保存著各個階段的代碼

 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
欧美a级片视频| 国产日本欧美在线| 国产精品入口免费视频一| 国产精品影院在线| 国产精品一区二区果冻传媒| 国产一区免费在线| 国产福利91精品一区| 污污的网站在线观看| 亚洲大胆视频| 三年片大全在线观看大全有哪些| 欧美黑人极品猛少妇色xxxxx| 91福利在线看| 国产欧美日韩综合一区在线观看| 欧美日韩性生活片| 国产桃色电影在线播放| 成人片免费看| 亚洲福利在线看| 欧美三级第一页| 中文字幕一区二区中文字幕| 素人一区二区三区| 男男h黄动漫啪啪无遮挡软件| 国产一区二区三区在线看| 91久久国产自产拍夜夜嗨| 91精品国产91久久久久久吃药| 欧美久久综合网| 成人免费视频国产免费麻豆| 国产一级片播放| 天天操 夜夜操| 午夜dj在线观看高清视频完整版| 成人搞黄视频| 丁香另类激情小说| 亚洲欧美日韩精品久久久| 日韩一区二区三区视频在线观看| 成人国产精品日本在线| **精品中文字幕一区二区三区| 在线成人免费| 欧美亚洲综合网| 在线免费一区三区| 精品一区二区三区高清免费不卡| 97成人在线观看视频| 在线播放国产精品| 狠狠色狠色综合曰曰| 春暖花开亚洲| 国产亚洲精品激情久久| 成年网站在线在免费播放| 欧美性一区二区三区| www.综合网.com| 欧美激情高清视频| 国产女人在线视频| 亚洲视频久久久| 欧美精品密入口播放| 国产精品普通话对白| 女人在下体塞跳蛋在线观看| 日韩欧美亚洲成人| 国产欧美精品日韩区二区麻豆天美| 色8久久久久| 久久久久久久久久久久久久久久久久| 久久精品视频8| 亚洲人成在线观看网站高清| 秋霞欧美一区二区三区视频免费| 精品在线观看国产| 成人激情诱惑| 麻豆成人91精品二区三区| 日韩激情视频在线| 第一福利在线| 国产精品海角社区在线观看| 91麻豆精品91久久久久久清纯| h在线视频免费观看完整版| 国产精品国码视频| 午夜免费视频网站| 欧美黑人巨大xxx极品| 成年午夜在线| 午夜久久影院| 色就是色欧美色图| 欧美日韩中文| 网上成人av| 亚洲一区二区三区在线观看视频| 国产一区二区三区四区三区四| 91av在线网站| 欧美激情在线精品一区二区三区| 免费观看91视频大全| 黄动漫视频高清在线| 欧美一区二区三区爽爽爽| 午夜国产精品影院在线观看| 国产主播一区| 成人黄色av电影| 日本在线看片免费人成视1000| 日韩精品在线观看一区| 日韩男女性生活视频| 欧美日韩尤物久久| 亚洲国产一区在线| www.日本久久| 久久99精品久久久久久欧洲站| 九九热在线观看| 精品国产91亚洲一区二区三区婷婷| 欧美成人日本| zzzwww在线看片免费| 小早川怜子影音先锋在线观看| 高清精品一区二区三区一区| 国产在线观看免费av| 欧美军人男男激情gay| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲高清二区| 亚洲人成影院在线观看| 欧美亚洲色图视频| 韩国三级电影一区二区| 中文字幕一区二区三区人妻| 深爱五月激情五月| av在线播放网| 国产在线观看免费av| 日本亚洲欧洲精品| 欧美日韩亚洲网| 91久久国产自产拍夜夜嗨| 人人澡人人爽| 国产成+人+综合+亚洲欧美丁香花| 日本一本a高清免费不卡| 一区二区三区小视频| 日本大片在线看黄a∨免费| 国产在线拍揄自揄拍视频| 亚洲一级Av无码毛片久久精品| 一区二区三区在线免费观看| av麻豆国产| 亚洲视频在线播放| wwwwxxxx日韩| 日韩一区二区三区四区在线| av资源中文色综合| 污视频网站免费| 亚洲欧洲国产一区| 免费男同深夜夜行网站| 久久久久综合网| 欧美激情视频在线免费观看 欧美视频免费一| 久久免费少妇高潮久久精品99| 91九色丨porny丨国产jk| 国产成人精品亚洲日本在线观看| 国产毛片久久久久久久| 91九色国产在线播放| 不卡日本视频| 久久99精品久久久久久国产越南| 高清欧美性猛交xxxx黑人猛| 久久精品国产一区二区三区肥胖| 福利小视频在线| 国产精品一区二区三区毛片淫片| 国产欧美高清| 欧美日韩1080p| 在线中文字幕第一页| 精品无码av在线| 奇米777第四色| 91国内在线| 免费在线观看亚洲| 国产成人精品无码免费看夜聊软件| 白白色免费视频| 综合图区亚洲白拍在线| 中文字幕免费不卡在线| 欧美国产日韩在线播放| 五月开心六月丁香综合色啪| 五月天婷亚洲天综合网精品偷| 欧美hdsex| 国产综合第一页| 91精品国产91久久久久久三级| 色小子综合网| 日本一区二区三区电影免费观看| 国产精品嫩草影院精东| 欧美美女搞黄| 亚洲色图丝袜美腿| 浴室偷拍美女洗澡456在线| 日韩av在线播| 黄色小视频免费| 在线观看免费黄色网址| 天天夜碰日日摸日日澡性色av| 欧美在线三级电影| 国产成人精品影视| 鲁鲁视频www一区二区| 欧美日韩在线高清| 另类综合日韩欧美亚洲| 国产精品久久久久久久av电影| 最新中文乱码字字幕在线| 欧美专区日韩| 黄色av免费| 色视频免费版高清在线观看| 亚洲国产精品午夜在线观看| 国产一区二区三区视频在线播放| 红桃视频在线观看一区二区| 插吧插吧综合网| 欧美精品九九久久| 成人在线视频www| 91色p视频在线| 免费中文字幕视频| 日韩国产高清在线| 日韩mv欧美mv国产网站| 日韩中文字幕在线视频| 五月天在线免费视频| 粉嫩一区二区三区在线看| a级片在线视频| 日韩丝袜美女视频| 欧美69xxxxx| 久久综合免费视频| 亚洲精品中文字幕av| 亚洲激情久久| av成人黄色| 欧美激情手机在线视频| 黑人巨大精品欧美一区二区桃花岛| 国内自拍视频在线播放| 日韩黄色片视频| 天天操天天操天天操天天操天天操| 国产一区二区三区精品欧美日韩一区二区三区| 国产黄色小视频| 亚洲免费视频一区二区三区| 91麻豆成人久久精品二区三区| 日韩成人在线一区| 亚洲精品写真福利| 午夜精品国产精品大乳美女| 亚洲第一网中文字幕| 麻豆精品在线观看| 天堂中文在线视频| 成人在线激情网| 日本黄色免费网站| 精品亚洲成av人在线观看| 国产激情在线看| 久久精品免费电影| 免费av一级电影| 97免费在线观看视频| 亚洲高清三级视频| 亚洲一区二区中文字幕| 欧美亚洲国产一卡| 欧美午夜精品免费| 国产精品一区二区在线观看| 久久久久黄久久免费漫画| 亚洲免费一区三区| 国产又粗又大又爽| 女明星视频黄又免费| 国产资源第一页| 国产高清视频免费观看| 国产又黄又爽视频| 国产手机精品在线| 青青草91视频| 国产精品久久久久久久久久久久久久久| 第一社区sis001原创亚洲| 成人免费毛片在线观看| 91av视频| 精品国产第一区二区三区观看体验| 91国产丝袜在线放| 91久热免费在线视频| 国产美女视频免费观看下载软件| 一区二区在线免费视频| 国产精品bbw一区二区三区| 91福利国产在线观看菠萝蜜| 国产精品欧美三级在线观看| 亚洲护士老师的毛茸茸最新章节| 欧美成人vps| 在线视频1区2区| 男人的午夜天堂| 日韩av中文字幕在线免费观看| 麻豆精品av| 日韩免费一区| 免费在线黄网站| 日本在线观看免费视频| 久久精品一偷一偷国产| 欧美手机在线视频| 99热这里只有精品首页| 9999精品成人免费毛片在线看| 四虎国产精品成人免费入口| 亚洲免费在线观看| www.99在线| 欧美一区二区三区爽爽爽| 亚洲www免费| 久久一区二区三| 久久精品一卡二卡| 日韩免费福利电影在线观看| 成人黄色一级视频| 亚洲色图视频免费播放| 亚洲激情婷婷| 国产一区免费看| 欧美日韩一二三| 精品国产伦一区二区三区| 成人高h视频在线| 久久精品一区二区| 国产一区二区三区自拍| 日本视频在线一区| 色94色欧美sute亚洲13| 26uuu成人| 久草在线在线精品观看| 91理论片午午论夜理片久久| 欧美高清hd18日本| www.久久久久久久久久久| 亚洲精品综合| 国产成人精品亚洲日本在线桃色| 成年人免费观看的视频| 成年人三级黄色片| 亚洲一二三四久久| 国产精品国产三级国产在线观看| 在线视频观看一区二区| 91麻豆国产自产在线观看| 蜜桃传媒视频麻豆第一区免费观看| 丝袜诱惑亚洲看片| 色猫av在线| 欧美裸身视频免费观看| 免费一级在线观看播放网址| 日韩欧洲国产| 99视频免费在线观看| 日韩av无码一区二区三区不卡| 国产精品午夜av| 亚洲一区二区中文字幕| 无套白嫩进入乌克兰美女| 亚洲人成影视在线观看| 99久久伊人精品| 成年人视频免费看| 18岁以下禁止观看的美女视频| 5g国产欧美日韩视频| 牛牛影视精品影视| 91国内在线播放| 国产精品天美传媒入口| 色婷婷综合久久久久中文一区二区| 色悠久久久久综合网小说| www.av网站| 国产精品一区二区不卡视频| 成人中文字幕+乱码+中文字幕| heyzo在线欧美播放| 国产97免费视| 国产伦精品一区二区三区在线观看| 91麻豆.com| 国产精品久久一区二区三区不卡| 精品国产白色丝袜高跟鞋| 亚洲男女毛片无遮挡| 性欧美video另类hd3| 麻豆国产入口在线观看免费| 日本一区二区三区视频在线播放| 欧美成人免费播放| 日韩精品一卡二卡三卡四卡无卡|