3分钟通过一个App的演示深入理解区块链运行原理

简介:

作者:黎跃春,资深讲师,全栈工程师;专注于「区块链+内容」产品的开发以及区块链技术培训。

公众号:区块链部落

QQ群:348924182

微信:liyc1215

区块链技术部落阁:http://liyuechun.org

安装命令行工具

  • 打开终端,输入npm install blockchain-cli -g
Last login: Wed Sep 13 15:48:00 on ttys000
liyuechun:~ yuechunli$ npm install blockchain-cli -g
/usr/local/bin/blockchain -> /usr/local/lib/node_modules/blockchain-cli/main.js

> wrtc@0.0.62 install /usr/local/lib/node_modules/blockchain-cli/node_modules/wrtc
> node-pre-gyp install --fallback-to-build

[wrtc] Success: "/usr/local/lib/node_modules/blockchain-cli/node_modules/wrtc/build/wrtc/v0.0.62/Release/node-v57-darwin-x64/wrtc.node" is installed via remote
+ blockchain-cli@1.0.5
added 263 packages in 89.506s
liyuechun:~ yuechunli$ 
  • 终端输入blockchain
liyuechun:~ yuechunli$ blockchain
  Welcome to Blockchain CLI!

  Commands:

    help [command...]      Provides help for a given command.
    exit                   Exits application.
    blockchain             See the current state of the blockchain.
    mine <data>            Mine a new block. Eg: mine hello!
    open <port>            Open port to accept incoming connections. Eg:
                           open 2727
    connect <host> <port>  Connect to a new peer. Eg: connect localhost
                           2727
    peers                  Get the list of connected peers.
    discover               Discover new peers from your connected peers.

blockchain → 

区块(block)长什么样子?

blockchian ->后面输入blockchain或者bc查看创始区块结构。

  • Index (Block #): 第几个区块? (创世区块链的索引为0)
  • Hash: 当前区块的hash值
  • Previous Hash: 上一个区块的hash值
  • Timestamp: 当前区块创建时的时间戳
  • Data: 存储在当前区块上的交易信息
  • Nonce: 在找到有效区块之前,我们经历的迭代次数

创世区块(Genesis Block)

每个区块链都是由一个创始区块「 Genesis Block」开始。后面你所看到的区块都依赖于上一个区块。因此,创始区块是我们挖取第一个区块的基础。

当一个区块挖矿时都发生了什么?

我们在blockchain → 中输入mine liyc1215,「liyc1215是春哥微信号,添加我微信,拉你进区块链技术交流群」挖取我们的第一个区块。

  • Index: o+1 = 1
  • Previous Hash: 0000018035a828da0…
  • Timestamp: 这个区块创建的时间
  • Data: liyc1215
  • Hash: ??
  • Nonce: ??

Hash是怎么计算的?

Hash值是一个十六进制固定长度为64位的唯一的标识。

hash值是由index, previous block hash, timestamp, block data, 和 nonce 作为输入数据计算而得。

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

The SHA256 algorithm will calculate a unique hash, given those inputs. The same inputs will always return the same hash.

SHA256算法将根据给出的输入数据计算出一个唯一的hash值,只要输入值不变,永远返回相同的结果。

输入数据为liyc1215时,它的hash值永远为dca0762d726738ebb8e6b7b43a4ba4186588a1b711f94ba9c694bffda8fcccf9

你是否注意到块哈希中的四个前导0?

四个前导0是有效散列的最低要求。 所需的前导0的数量称为难度

下面的方法验证hash难度是否有效。

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 system

什么是nonce

nonce是一个用来找到满足条件的hash值的数字。

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值有效为止。在我们案例中一个有效的hash值是最少有4个前导0。找到nonce值以满足合适条件的hash值的过程就叫做挖矿。

随着难度的增加,可能的有效散列数减少。 使用较少可能的有效散列,需要更多的处理能力才能找到有效的散列。

Hash为什么如此重要?

hash散列很重要是因为它可以使区块链不能被改变。

如果我们有三个区块链1 -> 2 -> 3 -> 4 -> 5,当某个人想要试图修改区块A时,下面几点将是会发生的几种情况。

  • 区块3上的区块链被修改。
  • 区块3上的hash值将发生改变,因为hash值是通过数据计算而得。
  • 区块3变得无效,因为它的hash值不再具备4个前导0的条件。
  • 区块4的hash值将发生改变,因为区块3的hash值用来参与计算区块4的hash值。
  • 区块4变得无效,因为它的hash值不再具备4个前导0的条件。
  • 区块5的hash值将发生改变,因为区块4的hash值用来参与计算区块5的hash值。
  • 区块5变得无效,因为它的hash值不再具备4个前导0的条件。

如果想要无效的区块3、4、5变得有效,必须从区块3开始再一次重新依次挖矿,当你的区块链足够长,节点足够多时,就算你将这条链上的区块链改变并且重新挖矿成功,但是因为超过50%的节点的数据和你的节点的数据不一致,你这个被改变的节点的数据也依然无效。

这个demo的演示中,一共有三个节点,我修改了节点2的区块链5并且重新挖矿取得合法的hash值,但是因为节点A节点C中区块5的hash值为0000e4b9052fd8aae92a8afda42e2ea0f17972ea67cead67352e74dd6f7d217c,而节点B中的hash值为0000184634edadb8fc7f4bdee87aa9d7d2a46b0c26db221998e35c1f57c0b42c,少数服从多数,所以以节点A和C的区块数据为准。

参考文档

相关文章
|
10天前
|
供应链 算法 区块链
深入浅出区块链技术:从原理到应用
【10月更文挑战第21天】 本文旨在为读者提供一个关于区块链技术的全面概述,包括其工作原理、关键技术特点以及在现实世界中的应用案例。通过本文,您将能够理解区块链如何在不依赖中心化机构的情况下确保数据的安全性和不可篡改性,并探讨这项技术如何被应用于金融、供应链管理等多个领域,以提高效率和透明度。
27 1
|
8天前
|
存储 供应链 物联网
深入解析区块链技术的核心原理与应用前景
深入解析区块链技术的核心原理与应用前景
|
8天前
|
存储 供应链 安全
深度解析区块链技术的核心原理与应用前景
深度解析区块链技术的核心原理与应用前景
16 0
|
1月前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
232 3
|
22天前
|
供应链 安全 区块链
深入浅出区块链技术:从原理到应用
【10月更文挑战第24天】 在数字时代,区块链技术以其独特的去中心化、不可篡改和透明性特点,正逐渐改变着我们的世界。本文将带你一探究竟,从区块链的基础原理出发,逐步深入到它的应用场景,让你不仅了解区块链“是什么”,更能明白它“能做什么”。无需担心技术术语的晦涩难懂,我们将用最通俗易懂的语言,为你揭开区块链的神秘面纱。
22 0
|
24天前
|
供应链 安全 分布式数据库
探索区块链技术:从原理到应用的全面解析
【10月更文挑战第22天】 本文旨在深入浅出地探讨区块链技术,一种近年来引起广泛关注的分布式账本技术。我们将从区块链的基本概念入手,逐步深入到其工作原理、关键技术特点以及在金融、供应链管理等多个领域的实际应用案例。通过这篇文章,读者不仅能够理解区块链技术的核心价值和潜力,还能获得关于如何评估和选择适合自己需求的区块链解决方案的实用建议。
43 0
|
2月前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
1月前
|
供应链 安全 物联网
深入理解区块链技术的核心原理与应用前景
【10月更文挑战第6天】深入理解区块链技术的核心原理与应用前景
59 0
|
3月前
|
Java 容器
【Azure Function App】Java Function在运行中遇见内存不足的错误
【Azure Function App】Java Function在运行中遇见内存不足的错误
|
3月前
【Azure Function App】本地运行的Function发布到Azure上无法运行的错误分析
【Azure Function App】本地运行的Function发布到Azure上无法运行的错误分析

热门文章

最新文章