摘要:我同時(shí)也建立了一個(gè)基于瀏覽器的版本安裝命令行工具在此之前請先安裝然后在你的命令行中運(yùn)行以下指令你應(yīng)該會(huì)看到和一個(gè)提示。
原文:How does blockchain really work? I built an app to show you.
作者:Sean Han
譯者:JeLewine
根據(jù)維基百科,區(qū)塊鏈?zhǔn)牵?/p>
一個(gè)用于維護(hù)不斷增長的記錄列表的分布式數(shù)據(jù)庫,我們稱之為區(qū)塊鏈。
這聽起來很棒,那它是如何工作的呢?
為了說明區(qū)塊鏈,我們將會(huì)使用一個(gè)名為Blockchain CLI的開源命令行工具。
我同時(shí)也建立了一個(gè)基于瀏覽器的版本
安裝命令行工具在此之前請先安裝Node.js
然后在你的命令行中運(yùn)行以下指令:
npm install blockchain-cli -g blockchain
你應(yīng)該會(huì)看到? Welcome to Blockchain CLI!和一個(gè)blockchain →提示。這說明已經(jīng)準(zhǔn)備好了。
區(qū)塊長什么樣?想要查看當(dāng)前的區(qū)塊鏈,你需要在命令提示行下輸入blockchain或者bc。你應(yīng)該會(huì)看到像下面的圖片一樣的一個(gè)區(qū)塊。
Index:是哪一個(gè)區(qū)塊(創(chuàng)世塊的索引是0)?
Hash:塊是否有效?
Previous Hash:前一個(gè)區(qū)塊是否有效?
Timestamp:什么時(shí)候添加的區(qū)塊?
Data:什么信息存儲(chǔ)在區(qū)塊上?
Nonce:在找到有效區(qū)塊之前,我們進(jìn)行了多少次迭代?
創(chuàng)世塊每一個(gè)區(qū)塊鏈都是從? Genesis Block開始的。正如你們將要在后面看到的,區(qū)塊鏈上的每一個(gè)區(qū)塊都依賴于前一個(gè)區(qū)塊。所以,需要?jiǎng)?chuàng)世塊來挖出我們的第一個(gè)區(qū)塊。
當(dāng)一個(gè)新的區(qū)塊被開采時(shí)會(huì)發(fā)生什么?
讓我們挖出我們的第一個(gè)區(qū)塊。在命令行中輸入mine freeCodeCamp??。
區(qū)塊鏈查看鏈上最新的區(qū)塊來獲取index和previous hash。在這個(gè)案例下創(chuàng)世塊是最新的區(qū)塊。
Index:0+1=1
Previous Hash:0000018035a828da0…
Timestamp:區(qū)塊被添加的時(shí)間
Data:freeCodeCamp?
Hash:???
Nonce:???
Hash是如何計(jì)算的?哈希值是唯一標(biāo)識(shí)數(shù)據(jù)的固定長度的數(shù)值。
Hash是通過將Index、Previous Hash、Timestamp、Data和Nonce作為輸入值來計(jì)算的。
CryptoJS.SHA256(index + previousHash + timestamp + data + nonce)
SHA256算法將會(huì)依據(jù)這些輸入計(jì)算出一個(gè)唯一Hash值。同樣的輸入總是會(huì)返回同樣的結(jié)果。
你是否注意到區(qū)塊Hash中的四個(gè)前導(dǎo)0?四個(gè)前導(dǎo)0是一個(gè)有效Hash的最低要求。所需前導(dǎo)0的數(shù)量被稱之為難度
function isValidHashDifficulty(hash, difficulty) { for (var i = 0, b = hash.length; i < b; i ++) { if (hash[i] !== "0") { break; } } return i >= difficulty; }
這也被稱為工作證明系統(tǒng)
Nonce是什么?Nonce是用來查找一個(gè)有效Hash的次數(shù)。
let nonce = 0; let hash; let input; while(!isValidHashDifficulty(hash)) { nonce = nonce + 1; input = index + previousHash + timestamp + data + nonce; hash = CryptoJS.SHA256(input) }
Nonce迭代到直到Hash有效。在我們的案例中,一個(gè)有效的Hash至少要擁有4個(gè)前置0。查找與有效Hash對(duì)應(yīng)的Nonce的過程就是挖礦。
隨著難度的增加,可能的有效Hash數(shù)量就會(huì)減少。伴隨著有效Hash的減少,我們需要更強(qiáng)的算力來查找有效Hash。
為什么這么重要?這些機(jī)制非常重要,它們使區(qū)塊鏈不可變。
如果我們有這么一個(gè)區(qū)塊鏈“A->B->C”,而且有一個(gè)人想要改變區(qū)塊A上的數(shù)據(jù)。那么會(huì)發(fā)生什么呢?
區(qū)塊A上的數(shù)據(jù)改變了。
區(qū)塊A的hash改變了,因?yàn)閿?shù)據(jù)被用來計(jì)算hash。
區(qū)塊A失效了,因?yàn)樗膆ash不再有4個(gè)前導(dǎo)0。
區(qū)塊B的hash改變了,因?yàn)閰^(qū)塊A的hash被用來計(jì)算區(qū)塊B的hash。
區(qū)塊B失效了,因?yàn)樗膆ash不再有4個(gè)前導(dǎo)0。
區(qū)塊B的hash改變了,因?yàn)閰^(qū)塊C的hash被用來計(jì)算區(qū)塊B的hash。
區(qū)塊C失效了,因?yàn)樗膆ash不再有4個(gè)前導(dǎo)0。
改變一個(gè)區(qū)塊的唯一方法就是將這個(gè)區(qū)塊重新挖一遍,接下來是所有的區(qū)塊。由于總是有新的區(qū)塊被添加,因此改變區(qū)塊幾乎是一件不可能的事。
我希望這個(gè)教程能夠?qū)δ兴鶐椭?/p>
如果您想要查看網(wǎng)頁版的演示,請出門右轉(zhuǎn)http://blockchaindemo.io
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/23920.html
摘要:我同時(shí)也建立了一個(gè)基于瀏覽器的版本安裝命令行工具在此之前請先安裝然后在你的命令行中運(yùn)行以下指令你應(yīng)該會(huì)看到和一個(gè)提示。 原文:How does blockchain really work? I built an app to show you.作者:Sean Han譯者:JeLewine 根據(jù)維基百科,區(qū)塊鏈?zhǔn)牵?一個(gè)用于維護(hù)不斷增長的記錄列表的分布式數(shù)據(jù)庫,我們稱之為區(qū)塊鏈。 這聽...
摘要:前端日報(bào)精選使用實(shí)現(xiàn)和交互的彈幕效果類型檢測理解的閉包深入理解之代理和反射,和它們在之中的優(yōu)先級(jí)中文譯區(qū)塊鏈?zhǔn)侨绾喂ぷ鞯挠醚菔局鯇谧g怎樣處理移動(dòng)端對(duì)圖片資源的限制掘金技術(shù)周刊的正則表達(dá)式掘金開發(fā)環(huán)境搭建掘金與復(fù)雜業(yè)務(wù)組件的 2017-09-11 前端日報(bào) 精選 使用canvas實(shí)現(xiàn)和HTML5 video交互的彈幕效果【JS】類型檢測理解 JavaScript 的閉包深入理解ES6...
摘要:區(qū)塊鏈技術(shù)通過給數(shù)字信息標(biāo)記時(shí)間戳,使其無法回溯或篡改。因此,除創(chuàng)世區(qū)塊外,所有區(qū)塊均含有上一個(gè)區(qū)塊的哈希值,這是保證區(qū)塊鏈安全的關(guān)鍵技術(shù),下面將講解它的工作原理。它允許基于區(qū)塊鏈技術(shù)的金融交易,被用于貨幣和支付。 原文鏈接:https://www.guru99.com/blockc... 一、什么是區(qū)塊鏈? 簡而言之,區(qū)塊鏈就是由許多包含信息的區(qū)塊組成的鏈條。區(qū)塊鏈技術(shù)通過給數(shù)字信...
閱讀 3616·2021-11-24 10:22
閱讀 3686·2021-11-22 09:34
閱讀 2480·2021-11-15 11:39
閱讀 1528·2021-10-14 09:42
閱讀 3662·2021-10-08 10:04
閱讀 1553·2019-08-30 15:52
閱讀 846·2019-08-30 13:49
閱讀 3015·2019-08-30 11:21