成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

區(qū)塊鏈入門筆記

hzc / 1208人閱讀

摘要:最近了解了一些區(qū)塊鏈的東西,動(dòng)了一些深入了解的心思。同時(shí),為了使區(qū)塊的添加速率趨于平均比特幣的設(shè)計(jì)是大約分鐘生成一個(gè)新的區(qū)塊,并不是隨便一個(gè)新建的區(qū)塊都可以被添加到鏈上。

最近了解了一些區(qū)塊鏈的東西,動(dòng)了一些深入了解的心思。

了解的過程中會(huì)不斷補(bǔ)充和完善這篇文章,理解的不一定對,隨意看看得了,每篇文章都會(huì)把閱讀過的資料列出來,也方便大家去源頭看看。

區(qū)塊鏈(blockchain)

區(qū)塊鏈?zhǔn)鞘裁矗?/p>

一句話,它是一種特殊的分布式數(shù)據(jù)庫

這句定義中有兩個(gè)關(guān)鍵詞分布式數(shù)據(jù)庫.

首先,我們可以把區(qū)塊鏈看成是數(shù)據(jù)庫,但是這個(gè)數(shù)據(jù)庫并沒有管理員,也沒有中心,每個(gè)應(yīng)用鏈的人,都具有平等的權(quán)利。

區(qū)塊

區(qū)塊鏈?zhǔn)怯梢粋€(gè)個(gè)的區(qū)塊(block)組成的, 每個(gè)區(qū)塊可以看做是一個(gè)存儲(chǔ)數(shù)據(jù)的單元,每寫入一次數(shù)據(jù),就會(huì)新建一個(gè)區(qū)塊,一個(gè)一個(gè)區(qū)塊連接起來,就成了鏈狀。

每個(gè)區(qū)塊分成兩個(gè)部分:

區(qū)塊頭(Block Head)

包含了當(dāng)前區(qū)塊的基本信息,包括 生成時(shí)間, 區(qū)塊體的 hash 值, 上一個(gè)區(qū)塊的 hash 等信息。

區(qū)塊的 hash 就是根據(jù)區(qū)塊頭的內(nèi)容來生成的。

區(qū)塊體(Block Body)

區(qū)塊體就是所含數(shù)據(jù)的真實(shí)內(nèi)容

hash

區(qū)塊的根本是源于 hash, 如果把區(qū)塊鏈想象成一個(gè)真實(shí)的鏈狀結(jié)構(gòu)的話,那么 hash 就是每個(gè)元素之間的連接點(diǎn)。

hash 的特征

關(guān)于 hash 的詳盡定義,可以在 wikipedia中查看,這里簡單總結(jié)一下 hash 的特征:

如果兩個(gè) hash 是不相同的(根據(jù)同一函數(shù)),那么這兩個(gè) hash 的原始輸入也是不相同的

hash 的輸入和輸出不是唯一對應(yīng)關(guān)系的,如果兩個(gè) hash 值相同,兩個(gè)輸入值很可能是相同的,但也可能不同,這是由具體的 hash 計(jì)算方法決定的

hash 在區(qū)塊鏈中的應(yīng)用

區(qū)塊的內(nèi)容與 hash 是一一對應(yīng)的,每個(gè)區(qū)塊的 hash 值都是不同的。同時(shí),每一個(gè)區(qū)塊又都保存著上一個(gè)區(qū)塊的 hash 值。

按照這個(gè)邏輯,如果一個(gè)區(qū)塊的 hash 值變了的話,那么它之后的每一個(gè)區(qū)塊的 hash 值都需要進(jìn)行更新。

進(jìn)而延伸一下,如果有人想更新某一區(qū)塊上的內(nèi)容,那么他必須有能力依次更新這個(gè)區(qū)塊后面所有區(qū)塊的 hash 值才行,否則的話,被更新的區(qū)塊就會(huì)脫離整個(gè)鏈了。由于更新區(qū)塊 hash 的計(jì)算很復(fù)雜且耗時(shí),所以除非掌握了全網(wǎng) 50% 以上的運(yùn)算能力,否則更新某一區(qū)塊的行為根本不可能成功。

正是通過這種環(huán)環(huán)相扣的機(jī)制,區(qū)塊鏈才可以保證自身數(shù)據(jù)的不可修改的特性。

區(qū)塊鏈?zhǔn)侨绾芜\(yùn)行的 挖礦

由于區(qū)塊鏈?zhǔn)且粭l單一的鏈,每個(gè)區(qū)塊都依賴于上一個(gè)區(qū)塊,所以同一時(shí)間,只能向鏈上添加一個(gè)區(qū)塊。

又由于必須保證各個(gè)節(jié)點(diǎn)間的同步,所以添加完一個(gè)區(qū)塊,各個(gè)節(jié)點(diǎn)又必須進(jìn)行同步。

也就是說,假設(shè)節(jié)點(diǎn) A 正忙著生成新的區(qū)塊,突然收到消息:“B 已經(jīng)在鏈上添加了一個(gè)區(qū)塊!”。這個(gè)時(shí)候 A 之前做的計(jì)算就都白做了,又得基于 B 新添加的節(jié)點(diǎn),重新剛才的計(jì)算。并且計(jì)算的過程中,還會(huì)有類似的事情發(fā)生。

上面我們說過,在區(qū)塊鏈的運(yùn)行機(jī)制中,通過區(qū)塊自身的 hash 來判斷當(dāng)前區(qū)塊是否可以被加入到鏈上。

同時(shí),為了使區(qū)塊的添加速率趨于平均(比特幣的設(shè)計(jì)是大約10分鐘生成一個(gè)新的區(qū)塊),并不是隨便一個(gè)新建的區(qū)塊都可以被添加到鏈上。

通常會(huì)設(shè)置一個(gè)準(zhǔn)入條件,只有符合該條件的區(qū)塊,才可以被添加到鏈上,設(shè)計(jì)者通過設(shè)置海量的計(jì)算,來使計(jì)算滿足加入條件的區(qū)塊 hash 值變得非常困難,這個(gè)過程就叫做挖礦,也叫(mining), 繼續(xù)挖礦計(jì)算的機(jī)器, 我們就叫做礦機(jī), 操作機(jī)器的人(其實(shí)是程序), 我們就叫做礦工。

用 js 代碼運(yùn)行一下簡單的挖礦機(jī)制

首先,每一個(gè)區(qū)塊,我們可以看成是由這幾部分組成:

這是我們這個(gè)鏈上的第一個(gè)區(qū)塊,這個(gè)區(qū)塊包括了這樣幾個(gè)信息

index: 區(qū)塊的 index 值, 這里應(yīng)該是 0

previous hash: 前一個(gè)區(qū)塊的 hash

timestamp: 區(qū)塊創(chuàng)建時(shí)的時(shí)間戳

data: 區(qū)塊包含的數(shù)據(jù)內(nèi)容

hash: 區(qū)塊本身的 hash

nonce: 計(jì)算區(qū)塊 hash 的難度系數(shù)

我們先假定這個(gè)區(qū)塊的名字是 A, 接下來,我們在它后面再添加個(gè)區(qū)塊 B.

那么我的這個(gè) B 將包含以下這些信息:

index: 1

previous hash: 也就是 A 的 hash

timestamp

data: I love Blockchain

hash: ?

nonce: ?

如果要將 B 添加到鏈上,那么我們接下來的工作就是計(jì)算出 hashnonce 的值,

那么就假設(shè)我們計(jì)算 hash 的算法是這樣的:

CryptoJS.SHA256(index + previousHash + timestamp + data + nonce)

接下來我們來計(jì)算這個(gè) hash 值是否是一個(gè)準(zhǔn)入的 hash, 代碼如下:

function isValidHashDifficulty(hash, difficulty) {
  for (var i = 0, b = hash.length; i < b; i ++) {
      if (hash[i] !== "0") {
          break;
      }
  }
  return i >= difficulty;
}

我們這里的準(zhǔn)入條件為 hash 中連續(xù)不為 0 的值必須不小于 difficulty.

參數(shù)中的 difficulty, 也可以稱為難度系數(shù), 通過這個(gè)系數(shù)的動(dòng)態(tài)調(diào)整,可以維持新增區(qū)塊的平均速率。

另外,我們上面計(jì)算 hash 的算法中 index, previousHash, timestampdata 都是固定的,所以重復(fù)計(jì)算出來的 hash 值也應(yīng)該是一樣的,為了使每次計(jì)算出的 hash 不同, nonce被設(shè)計(jì)成了一個(gè)變化的值, 通過 nonce值的變化, 計(jì)算出不同的 hash, 從而判斷 hash 值是否符合準(zhǔn)入條件, 用代碼表示的話. 就是這樣:

let nonce = 0;
let hash;
let input;
while(!isValidHashDifficulty(hash, difficulty)) {     
  nonce = nonce + 1;
  input = index + previousHash + timestamp + data + nonce;
  hash = CryptoJS.SHA256(input)
}

看到這里, 我們可以發(fā)現(xiàn), 其實(shí)礦工的工作就是去猜nonce的值, 因?yàn)檫@個(gè)值很大, 所以計(jì)算難道也就比較大, 挖礦也就成了一件費(fèi)時(shí)費(fèi)力的事情。

相應(yīng)的, 既然挖礦是如此費(fèi)時(shí)費(fèi)力的一件事, 那么礦工也不會(huì)是義務(wù)勞動(dòng)的, 礦工獲得的相應(yīng)收益, 會(huì)在下一部分 比特幣 中, 以比特幣的運(yùn)行規(guī)則來描述一下。

Reference

區(qū)塊鏈入門教程

How does blockchain really work? I built an app to show you

Ethereum for web developers

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/24253.html

相關(guān)文章

  • 比特幣入門筆記

    摘要:也就是說,比特幣是一個(gè)完全出于社區(qū)共識的貨幣。所謂全稱為,它是比特幣交易的基本單位。根據(jù)比特幣的協(xié)議,一個(gè)區(qū)塊的大小是而一筆交易大概是,因此一個(gè)區(qū)塊大概可以包含筆交易。 誕生 比特幣誕生于 2008 年,一個(gè)網(wǎng)名為中本聰?shù)娜耍岢隽艘粋€(gè)設(shè)想: 創(chuàng)造一種不受政府或任何組織控制的貨幣 比特幣的本質(zhì)就是一串?dāng)?shù)字,沒有任何資產(chǎn)支持(現(xiàn)行貨幣背后都是國家或銀行提供資產(chǎn)支持)。也就是說,比特幣是一...

    Loong_T 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.41 - 深入學(xué)習(xí)區(qū)塊

    摘要:和比特幣協(xié)議有所不同的是,以太坊的設(shè)計(jì)十分靈活,極具適應(yīng)性。超級賬本區(qū)塊鏈的商業(yè)應(yīng)用超級賬本超級賬本是基金會(huì)下的眾多項(xiàng)目中的一個(gè)。證書頒發(fā)機(jī)構(gòu)負(fù)責(zé)簽發(fā)撤 showImg(https://segmentfault.com/img/bV2ge9?w=900&h=385); 從比特幣開始 一個(gè)故事告訴你比特幣的原理及運(yùn)作機(jī)制 這篇文章的定位會(huì)比較科普,盡量用類比的方法將比特幣的基本原理講出來...

    qianfeng 評論0 收藏0
  • 寫給前端的區(qū)塊開發(fā)入門指南:零基礎(chǔ)開發(fā)基于以太坊智能合約的 ICO DApp

    摘要:圍繞以太坊的開發(fā)生態(tài)是目前相對最成熟的,比如有開發(fā)框架,有智能合約在線集成開發(fā)環(huán)境,還有專設(shè)的開發(fā)者問答頻道。 showImg(https://segmentfault.com/img/bVbaJOL?w=1200&h=514); 張泉靈說,時(shí)代拋棄我們的時(shí)候連聲再見都不會(huì)說,馬云說對于新興事物,絕大多數(shù)人是看不見、看不起、看不懂、來不及。自從學(xué)完 Coursera 上的 Crypto...

    sean 評論0 收藏0
  • 寫給前端的區(qū)塊開發(fā)入門指南:零基礎(chǔ)開發(fā)基于以太坊智能合約的 ICO DApp

    摘要:圍繞以太坊的開發(fā)生態(tài)是目前相對最成熟的,比如有開發(fā)框架,有智能合約在線集成開發(fā)環(huán)境,還有專設(shè)的開發(fā)者問答頻道。 showImg(https://segmentfault.com/img/bVbaJOL?w=1200&h=514); 張泉靈說,時(shí)代拋棄我們的時(shí)候連聲再見都不會(huì)說,馬云說對于新興事物,絕大多數(shù)人是看不見、看不起、看不懂、來不及。自從學(xué)完 Coursera 上的 Crypto...

    yzzz 評論0 收藏0
  • 技術(shù)解析+代碼實(shí)戰(zhàn),帶你入門華為云政務(wù)區(qū)塊平臺(tái)

    摘要:本文分享自華為云社區(qū)技術(shù)解析代碼實(shí)戰(zhàn),帶你入門華為云政務(wù)區(qū)塊鏈平臺(tái),作者敏捷的小智。點(diǎn)擊關(guān)注,第一時(shí)間了解華為云新鮮技術(shù) 摘要:政務(wù)區(qū)塊鏈平臺(tái)是行業(yè)區(qū)塊鏈平臺(tái)的初步實(shí)踐,未來在區(qū)塊鏈技術(shù)的發(fā)展下,還會(huì)打造面向其他領(lǐng)域的鏈管平臺(tái),構(gòu)建多方協(xié)同的分布式賬本,讓區(qū)塊鏈應(yīng)用更便捷高效的為產(chǎn)業(yè)服務(wù)。...

    不知名網(wǎng)友 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<