久久亚洲精品成人_国产精品欧美综合亚洲_亚洲va天堂va欧美ⅴa在线_91色视频在线观看_久久影院亚洲_一级黄色片播放_日韩av在线一区_精品一区二区在线看_老头吃奶性行交视频_日韩免费高清视频_天天操天天爽天天干_日本欧美在线视频

首頁 > 專題 > 區塊鏈 > 正文

用 Go 語言構建區塊鏈

2020-02-25 19:28:53
字體:
來源:轉載
供稿:網友

1. 介紹

在上一篇文章中,我們構建了一個非常簡單的數據結構,這是區塊鏈數據庫的本質。 而且我們可以用它們之間的鏈接向它添加區塊:每個區塊與前一個鏈接。 唉,然而在現實中添加一個區塊添加到鏈是需要高成本的工作。

2. 工作證明

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

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

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

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

3. 哈希算法

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

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

  • 原始數據無法從哈希值恢復。 因此,哈希過程不是加密。
  • 數據只能有一個與之對應的哈希值,因此哈希是唯一的。
  • 更改輸入數據中的一個字節將導致完全不同的散列。

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.

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

哈希現金

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

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

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

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

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

4. 編寫代碼

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

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

const targetBits = 24

4.1 目標位

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

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

// 工作證明type ProofOfWork struct {    block  *Block     target *big.Int //定義目標位}// 新的工作證明func NewProofOfWork(b *Block) *ProofOfWork {    target := big.NewInt(1)    target.Lsh(target, uint(256-targetBits))   //用于隨機產生target,目標數值!!!這里從數學上保證了  // Lsh: local sensitivity hashing  //左移256個 target bits位    pow := &ProofOfWork{b, target}    return pow}

這里創建工作證明結構中保存指向區塊的指針的和指向target的指針。 “target”是上一段所述要求的另一個名稱。 我們使用一個大整數,因為我們將哈希與目標進行比較:我們將哈希轉換為一個大整數,并檢查它是否小于target。

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

0x10000000000000000000000000000000000000000000000000000000000

它在內存中占用29個字節。 這是與以前的例子中的哈希的比較:

0fac49161af82ed938add1d8725835cc123a1a87b1b196488360e58d4bfb51e300000100000000000000000000000000000000000000000000000000000000000000008b0f41ec78bab747864db66bcb9fb89920ee75f43fdaaeb5544f7f76ca

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

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

4.2 準備數據

//準備數據,加入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被設置成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 轉換成  big INT        //執行這個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. 產生新區塊
  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結構中

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 //檢查產生的Big Int hashInt是否和target相當    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. 總結

我們的塊鏈是一個更接近其實際架構的一步:添加塊現在需要工作證明,因此mining是可能的。但是它仍然缺乏一些關鍵的特征:塊鏈數據庫不是持久性數據,沒有錢包,地址,交易,沒有共識機制。所有這些我們將在以后的文章中實現。

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中保存著各個階段的代碼

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
久久亚洲AV成人无码国产野外| 日韩女优毛片在线| 成人免费观看a| www.色视频| 国产成人涩涩涩视频在线观看| 99在线精品视频免费观看20| 成人亚洲欧美一区二区三区| 成人av无码一区二区三区| 777午夜精品福利在线观看| 中文字幕人妻色偷偷久久| 清纯唯美亚洲激情| 奇米色一区二区三区四区| 国内精品二区| 91在线一区二区三区| 亚洲一区免费看| 丰满白嫩尤物一区二区| 国产一区二区免费在线观看| 成人一区二区三区| 国内久久久精品| www五月婷婷| 国产亚洲自拍偷拍| 成人晚上爱看视频| av片在线免费| 欧美日韩视频一区二区| 日批视频免费看| 中国china体内裑精亚洲片| 国产精品99re| 91在线观看欧美日韩| 国产精品自拍网站| 黄色www网站| 91精品蜜臀在线一区尤物| 精品午夜福利视频| 成人黄色大片在线免费观看| 91网站在线观看视频| 色噜噜狠狠永久免费| 欧美刺激午夜性久久久久久久| 久草免费在线观看视频| 91老司机在线| 综合久久久久综合| 亚洲人成网站在线观看播放| 亚洲一区二区精品视频| 中国1级黄色片| 国产在线视频一区| 91香蕉视频黄| 男生草女生视频| 国产精品极品美女粉嫩高清在线| 26uuu久久综合| 香蕉久久久久久av成人| 欧美在线视频网| 日本一区二区三区dvd视频在线 | 99一区二区三区| 亚洲国产精品一区二区久久恐怖片| 成人免费观看a| 天天综合网久久| 在线观看精品国产视频| 久久久久久自在自线| 欧美 日韩精品| 97在线精品国自产拍中文| 亚洲黄色免费在线观看| 国产福利精品视频| 成人免费毛片高清视频| 蜜桃精品成人影片| 国产精品亚洲视频在线观看| 亚洲精品免费一二三区| 国产高潮流白浆| 伊人久久大香线蕉成人综合网 | 91九色02白丝porn| xxxx18国产| 国产精品乱码久久久久| 欧美精品成人91久久久久久久| 91在线视频免费91| 欧美激情黑白配| 亚洲a级黄色片| 国产欧美日韩亚洲| 69精品人人人人| 蜜桃精品视频在线观看| 怡红院一区二区三区| 国产精品免费一区二区三区观看 | www.日本高清| 亚洲精品欧洲精品| 久久精品国产亚洲精品| 欧美色视频日本版| 六月婷婷色综合| xxxxx在线观看| 精品欧美一区二区三区久久久| 亚洲精品丝袜日韩| 亚洲精品欧美综合四区| 天天干,夜夜爽| 国产精品久久久视频| www国产无套内射com| 成人激情视频在线观看| 国产偷国产偷亚洲清高网站| 国产欧美日本一区视频| 激情网站在线观看| 亚洲天堂一区二区在线观看| 亚洲精品在线免费看| 97久久精品国产| 4438亚洲最大| 一区二区高清免费观看影视大全| 国产米奇在线777精品观看| 国产精品sm调教免费专区| 久久免费视频2| 6080yy精品一区二区三区| 日韩免费观看高清完整版在线观看| 国产精品视频一二三| 亚洲精品视频91| 黄视频网站免费看| 欧美图片自拍偷拍| 成人黄色大片网站| 亚洲xxx视频| 欧美黑人xxxx| 日韩成人在线视频观看| 在线欧美日韩精品| 狠狠狠色丁香婷婷综合久久五月| 国产香蕉视频在线| 99久久免费看精品国产一区 | 精品国产sm最大网站免费看| 夜夜揉揉日日人人青青一国产精品 | 精品免费视频123区| 亚洲免费电影在线观看| 欧美视频在线观看一区| 国产美女主播在线观看| 多男操一女视频| wwwwwxxxx日本| 国产免费黄色av| 中文字幕一区二区三区四区五区六区 | 亚洲成人免费在线视频| 欧美唯美清纯偷拍| 亚洲超丰满肉感bbw| 1024成人网| 麻豆免费精品视频| 青青青伊人色综合久久| 高清一区二区三区四区| 天天综合久久综合| 在线观看免费国产视频| 成熟的女同志hd| 欧美性猛交xxxx乱大交蜜桃| 中文字幕乱码一区二区| 懂色av.com| 激情五月婷婷小说| 久久久久久久福利| 欧美日韩精品亚洲精品| 成年人av电影| 欧美一区二区视频在线播放| 精品国产乱码久久久久| 国产精品夜夜夜一区二区三区尤| 国产免费一区二区三区在线观看| 国产精品久久综合av爱欲tv| 成人午夜在线影院| 97人人模人人爽人人喊38tv| 国产精品露脸自拍| 99re视频| 亚洲成色www久久网站| 香蕉久久夜色| 91成人综合网| 国产又粗又爽又黄的视频 | 国模无码一区二区三区| 国产白浆在线观看| 久久精品91| 国产精品一区二区在线播放| 久久色.com| 午夜精品久久久久久久蜜桃app| 91久久人澡人人添人人爽欧美| 欧美高清www午色夜在线视频| 日韩精品久久久久| 欧美另类精品xxxx孕妇| 亚洲91av视频| 国产91精品网站| 成人日韩av在线| 午夜一区二区三视频在线观看| 僵尸世界大战2 在线播放| 一级网站在线观看| 日韩av手机在线免费观看| 四虎成人在线观看| 亚洲精品国产无码| 久久精品国产77777蜜臀| 久久奇米777| 蜜桃传媒一区二区亚洲av | 在线一区二区三区做爰视频网站| 日韩欧美美女一区二区三区| 日韩欧美电影在线| 国产999视频| 91在线观看免费| 2021狠狠干| 免费高清视频在线观看| 中文字幕第69页| 亚洲免费国产视频| 久久亚洲精品小早川怜子| 中文字幕一区二区三区在线播放 | 中国一级特黄视频| 国精产品一区一区三区mba桃花| 国产精品卡一卡二卡三| 欧美日韩免费在线观看| 亚洲女人天堂成人av在线| 色综合视频网站| 欧美猛男男办公室激情| 三级精品视频久久久久| 亚洲综合国产精品| 日韩小视频网站| 国产精品探花一区二区在线观看| 国产美女www| 97精品国产露脸对白| 欧美日韩中文字幕精品| 欧美最猛性xxxxx免费| 亚洲欧美成人一区| 中国黄色a级片| 欧美一级淫片aaaaaa| 亚洲综合丁香婷婷六月香| 色吧影院999| 日韩视频在线播放| 国产熟妇搡bbbb搡bbbb| 国产一区二区三区在线观看 | 国产精品日韩成人| 亚洲精品国产精品国自产观看浪潮| 欧美激情亚洲视频| 人妻少妇精品久久| 裸体武打性艳史| 国产精品自在在线| 国产精品国产三级国产aⅴ原创 | 国精产品一区一区三区视频| 日韩av片在线| 麻豆精品在线视频| 欧美日韩在线视频一区二区| 一本一道久久a久久精品逆3p| 神马影院我不卡| 亚洲欧美卡通动漫| 成人美女视频在线观看| 欧美一区二区视频在线观看| 亚洲一区二区三区久久| 被黑人猛躁10次高潮视频| 亚洲免费成人网| 日韩一区二区三区在线观看 | ts人妖另类在线| 国产精品成人免费一区久久羞羞| 国产a级免费视频| 夜夜亚洲天天久久| 日本精品久久久久影院| 天堂视频免费看| 中国女人一级一次看片| 在线一区二区三区四区| 成人中文字幕在线观看| 国产人妻一区二区| 91啪九色porn原创视频在线观看| 性猛交娇小69hd| 粉嫩虎白女毛片人体| 午夜精品一区二| 奇米色一区二区三区四区| 日韩精品一区二区在线观看| 久久资源av| 国产尤物在线视频| 色婷婷激情综合| 免费黄色小视频在线观看| 日本三级中文字幕| 国产婷婷色一区二区三区四区| 中文字幕精品久久久久| 男人靠女人免费视频网站| 国产亚洲精品久久久久久无几年桃| 亚洲AV无码成人片在线观看| 亚洲午夜在线视频| 久久高清视频免费| 国产资源在线视频| 精人妻无码一区二区三区| 91啪九色porn原创视频在线观看| 色偷偷888欧美精品久久久| 少妇光屁股影院| 另类中文字幕网| 色综合一个色综合| 国产一区二中文字幕在线看| 美女网站视频色| 成人在线综合网| 久久97精品久久久久久久不卡| 国产精品欧美亚洲777777| 北条麻妃在线视频观看| 日韩免费一级片| 日本一区二区动态图| 色综合久综合久久综合久鬼88| 国产一级爱c视频| 超碰在线播放97| 色网综合在线观看| 国内外成人免费激情在线视频网站| 亚洲 自拍 另类小说综合图区| 亚洲视频在线观看一区二区| 国产欧美日韩不卡免费| 欧美一二三视频| 可以直接看的黄色网址| 欧美精品在线观看一区二区| 少妇人妻在线视频| 成人激情黄色小说| av免费精品一区二区三区| 国产激情久久久久久熟女老人av| 欧美激情精品久久久久| 多男操一女视频| 欧美一区二区三区的| 美女久久久久久久久| 黄色精品一区二区| aa在线免费观看| 亚洲少妇30p| 欧美日韩一区二区三区电影| 久久成人久久鬼色| 亚洲精品欧美日韩| 亚洲人成色777777老人头| 全亚洲最色的网站在线观看| 久久久精品人妻一区二区三区四 | 精品国产xxx| 中文字幕国产精品| 丰满少妇一区二区| 国产福利精品导航| 视频一区二区综合| 国产激情91久久精品导航| 5566日本婷婷色中文字幕97| 波多野结衣在线电影| 欧美极品少妇与黑人| 成年人一级黄色片| www国产精品视频| 波多野结衣 久久| 亚洲欧洲偷拍精品| 精品无码人妻一区二区三区| 不卡av日日日| 亚洲大尺度视频| 成人免费看黄网站| 蜜桃视频一区| 免费久久久一本精品久久区| 日本欧美一区二区三区| 精品一区久久| 中文字幕一区二区三区四区不卡| 亚洲免费av一区二区三区| 午夜精品一区在线观看| 欧美污在线观看| 日韩欧美卡一卡二| 亚洲色偷偷综合亚洲av伊人| 久久男人资源站| 日本少妇一级片| 91国产免费观看| 亚洲国产精品成人综合久久久| 亚洲aⅴ怡春院| 三叶草欧洲码在线| 欧美私人免费视频| 艳妇乳肉豪妇荡乳xxx| 精品日本一区二区| 精品一二三四区| 亚洲最大色综合成人av| 国产精品久久久久桃色tv| 高清欧美精品xxxxx| 欧美无人高清视频在线观看| 欧美人禽zoz0强交| 欧美综合一区第一页| 国产乱理伦片在线观看夜一区| 2022中文字幕| 天天色图综合网| 久久中文字幕无码| 日本韩国欧美精品大片卡二| 肉丝袜脚交视频一区二区| 美女主播视频一区| 亚洲高清不卡在线| 精品熟女一区二区三区| 亚洲国产成人爱av在线播放| 91免费视频播放| 国产精品一区在线观看| 一区二区三区四区不卡视频 | 麻豆一区二区三区精品视频| 国产精品自在线| 国产欧美1区2区3区| 美女伦理水蜜桃4| 亚洲系列中文字幕| www.天堂在线| 成人黄色av片| 国产高清免费在线观看| 欧美aaaaa喷水| 在线观看欧美黄色| 一区二区三区免费高清视频| 午夜精品亚洲一区二区三区嫩草| 精品视频一区三区九区| 国产成人无码精品亚洲| 国产免费色视频| 亚洲老司机av| 国产精品一区二区在线看| 天天色天天综合网| 97精品免费视频| 亚洲色图视频网站| 九九九视频在线观看| 久久综合久久综合这里只有精品| 亚洲色图制服丝袜| 2019男人天堂| 精品一区二区三区国产| 精品欧美久久久| 免费成人小视频| 88av在线播放| 亚洲自拍偷拍色图| 欧美日韩视频第一区| 国产毛片一区二区三区va在线 | 亚洲成av人片一区二区梦乃| 亚洲精品视频网址| 欧美一区二区高清在线观看| 日韩欧美国产午夜精品| 国产精品一二三区| 成人午夜福利一区二区| 欧美劲爆第一页| 午夜精品国产更新| 韩国av电影在线观看| 国产精品久久不卡| 国产经品一区二区| 亚洲精品中文字幕女同| 久久综合九色综合97婷婷女人| 中国一级片在线观看| 黄色三级中文字幕| 欧美在线免费观看| 欧美一区二区视频观看视频| 国产成人免费网站| 精品一区在线观看视频| www.男人天堂网|