online gambling singapore online gambling singapore online slot malaysia online slot malaysia mega888 malaysia slot gacor live casino malaysia online betting malaysia mega888 mega888 mega888 mega888 mega888 mega888 mega888 mega888 mega888 區塊鏈原理最清晰最直觀的解釋

 


區塊鏈原理最清晰最直觀的解釋

 

維基百科上對區塊鏈的描述:
 
維護不斷增長的記錄(稱作區塊)的分佈式數據庫。
 
聽上去很簡單,但到底是怎麼回事呢?
 
我們用一款開源命令行界面Blockchain CLI 來詳細說明區塊鏈。我也做了一個瀏覽器可以訪問的在線版。
 

 
安裝命令行界面
 
首先請確保安裝Node.js
 
然後在終端裡運行下面命令:
 
npm install blockchain-cli -g
blockchain
 
你將看到? Welcome to Blockchain CLI! 和blockchain → 提示已準備好接受命令。
 
區塊是什麼樣子的?
你可以在命令行中輸入blockchain 或bc 來查看你當前的區塊鏈。你將看到下圖類似的區塊。
 

 
索引(區塊):這是哪個區塊?(初始區塊索引為0)
哈希:區塊有效嗎?
前個哈希:之前一個區塊有效嗎?
時間戳:區塊什麼時候添加的?
數據:區塊中存的什麼信息?
隨機數(Nonce):我們重複了多少次才找到有效的區塊?
 
初始區塊
每個區塊鏈都會以一個? Genesis Block 作為開始。你接下來將會看到每個區塊都關聯前一個區塊。所以我們開採第一個區塊前,要有初始區塊。
 
當一個新的區塊被開采出來會發生什麼?
 

 
讓我們來開採我們的第一個區塊,在提示框輸入mine freeCodeCamp♥ 命令。區塊鏈根據最後一個區塊生成當前索引和前個哈希。我們現在的區塊鏈最後一個區塊就是初始區塊。
 
索引:o+1 = 1
前個哈希:0000018035a828da0…
時間戳:區塊什麼時候添加的?
數據:freeCodeCamp❤
哈希:??
隨機數(Nonce):??
 
哈希值如何計算?
哈希值是固定長度的數值,用來標識數據。
 
哈希通過將索引、前個哈希、時間戳、數據、隨機數作為輸入後計算得出。
 
CryptoJS.SHA256(index + previousHash + timestamp + data + nonce)
 
SHA256 算法通過給定的輸入,計算出一個的哈希。相同的輸入總會生成相同的哈希。
 
你注意到哈希開頭的四個0 了嗎?
開頭的四個0 是有效哈希的基本要求。開頭0 的個數被稱為難度值(difficulty)。
 
function isValidHashDifficulty(hash, difficulty) {
  for (var i = 0, b = hash.length; i < b; i ++) {
      if (hash[i] !== '0') {
          break;
      }
  }
  return i >= difficulty;
}
 
這就是眾所周知的工作量證明系統(Proof-of-Work)。
 
什麼是隨機數?
隨機數是用來尋找有效哈希的一個數字。
 
let nonce = 0;
let hash;
let input;
while(!isValidHashDifficulty(hash)) {    
  nonce = nonce + 1;
  input = index + previousHash + timestamp + data + nonce;
  hash = CryptoJS.SHA256(input)
}
 
隨機數不斷迭代,直到哈希有效。在我們的例子中,有效的哈希值至少要四個0 開頭。尋找有效哈希對應隨機數的過程就稱為開採(挖礦)。
 
隨著難度值的提升,有效哈希的數量逐步減少,我們需要投入更多資源來找到一個有效哈希。
 
為什麼這很重要?
 
因為它確保了區塊鏈不可變。
 
如果我們有一個這樣的區塊鏈A → B → C,有人想修改區塊A 上的數據。會發生下面情況:
 
修改區塊A 上的數據。
區塊A 的哈希變動,因為計算哈希所用的數據變化了。
區塊A 無效,因為它的哈希不是四個0 開頭。
區塊B 的哈希變動,因為計算區塊B 的哈希所用到的區塊A 的哈希值變化了。
區塊B 無效,因為它的哈希不是四個0 開頭。
區塊C 的哈希變動,因為計算區塊C 的哈希所用到的區塊B 的哈希值變化了。
區塊C 無效,因為它的哈希不是四個0 開頭。
 
修改一個區塊的方式就是重新開採這個區塊以及它之後的所有區塊。因為新的區塊不斷增加,基本不可能修改區塊鏈。
 
我希望本文對你有幫助。
 

 

如果你想checkout 在線版本的例子,移步http://blockchaindemo.io

 

轉貼自: 煉數成金


留下你的回應

以訪客張貼回應

0

在此對話中的人們

YOU MAY BE INTERESTED