专栏名称: SegmentFault思否
SegmentFault (www.sf.gg)开发者社区,是中国年轻开发者喜爱的极客社区,我们为开发者提供最纯粹的技术交流和分享平台。
目录
相关文章推荐
程序员的那些事  ·  GPU:DeepSeek ... ·  昨天  
码农翻身  ·  中国的大模型怎么突然间就领先了? ·  昨天  
码农翻身  ·  漫画 | 为什么大家都愿意进入外企? ·  2 天前  
程序员小灰  ·  3个令人惊艳的DeepSeek项目,诞生了! ·  3 天前  
程序猿  ·  “我真的受够了Ubuntu!” ·  4 天前  
51好读  ›  专栏  ›  SegmentFault思否

【译】区块链是如何工作的——用 JavaScript 演示

SegmentFault思否  · 公众号  · 程序员  · 2017-10-11 08:00

正文

原文:How does blockchain really work? I built an app to show you.

作者:Sean Han

译者:JeLewine

根据维基百科,区块链是:

一个用于维护不断增长的记录列表的分布式数据库,我们称之为区块链。

这听起来很棒,那它是如何工作的呢?

为了说明区块链,我们将会使用一个名为Blockchain CLI的开源命令行工具。

我同时也建立了一个基于浏览器的版本

安装命令行工具

在此之前请先安装Node.js

然后在你的命令行中运行以下指令:

  1. npm install blockchain-cli -g

  2. blockchain

你应该会看到 👋 Welcome to Blockchain CLI ! 和一个 blockchain 提示。这说明已经准备好了。

区块长什么样?

想要查看当前的区块链,你需要在命令提示行下输入 blockchain 或者 bc 。你应该会看到像下面的图片一样的一个区块。

  • Index:是哪一个区块(创世块的索引是0)?

  • Hash:块是否有效?

  • Previous Hash:前一个区块是否有效?

  • Timestamp:什么时候添加的区块?

  • Data:什么信息存储在区块上?

  • Nonce:在找到有效区块之前,我们进行了多少次迭代?

创世块

每一个区块链都是从 🏆 Genesis Block 开始的。正如你们将要在后面看到的,区块链上的每一个区块都依赖于前一个区块。所以,需要创世块来挖出我们的第一个区块。

当一个新的区块被开采时会发生什么?

让我们挖出我们的第一个区块。在命令行中输入 mine freeCodeCamp ♥︎

区块链查看链上最新的区块来获取 index previous hash 。在这个案例下创世块是最新的区块。

  • Index:0+1=1

  • Previous Hash:0000018035a828da0…

  • Timestamp:区块被添加的时间

  • Data:freeCodeCamp❤

  • Hash:???

  • Nonce:???

Hash是如何计算的?

哈希值是唯一标识数据的固定长度的数值。

Hash是通过将 Index Previous Hash Timestamp Data Nonce 作为输入值来计算的。

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

SHA256算法将会依据这些输入计算出一个唯一Hash值。同样的输入总是会返回同样的结果。

你是否注意到区块Hash中的四个前导0?

四个前导0是一个有效Hash的最低要求。所需前导0的数量被称之为 难度

  1. function isValidHashDifficulty(hash, difficulty) {

  2.  for (var i = 0, b = hash.length; i < b; i ++) {

  3.      if (hash[i] !== '0') {

  4.          break;

  5.      }

  6.  }

  7.  return i >= difficulty;

  8. }

这也被称为工作证明系统

Nonce是什么?

Nonce是用来查找一个有效Hash的次数。

  1. let nonce = 0;

  2. let hash;

  3. let







请到「今天看啥」查看全文