Node实现简易区块链,助你了解区块链运行原理

简介: 前言 正式了解比特币是在17年的时候,在那个闭着眼睛都能赚到钱的年代,我也跟绝大多数人一样,进入了这场声势浩大的"赌博"。“赌博”过程中让我对区块链产生了兴趣,我很好奇,他们经常提到的挖矿是什么?挖矿为啥就费电,费CPU? 所谓的挖矿 后来查资料才了解到,挖矿就是不断的计算,并且是毫无道理的“瞎算”,只要达到一个很“傻”的条件就表示你挖矿成功。

前言

正式了解比特币是在17年的时候,在那个闭着眼睛都能赚到钱的年代,我也跟绝大多数人一样,进入了这场声势浩大的"赌博"。
“赌博”过程中让我对区块链产生了兴趣,我很好奇,他们经常提到的挖矿是什么?挖矿为啥就费电,费CPU?

所谓的挖矿

后来查资料才了解到,挖矿就是不断的计算,并且是毫无道理的“瞎算”,只要达到一个很“傻”的条件就表示你挖矿成功。

Node实现简单的挖矿

const crypto = require('crypto');
//创世区块 这是第一次挖矿生成的数据
const initBlock ={ 
    index: 0,
    nonce: 1307,
    data: '我是创世区块',
    prevHash: 0,
    timestamp: 1551248147024,
    hash:
     '00e275e4946f0fdf672be32fd4dfeaae0b7efd8d9f377c48ac510efe79d6a814' 
    };
class Blockchain{
    constructor(){
        this.blockchain = [
            initBlock //默认有一个创世区块
        ];
        this.data= [];
        this.difficulty = 2; //难度
        
    }
    //挖矿
    min(){
        const index = this.blockchain.length; //索引.也就是现在区块的长度
        let nonce = 0; //随机数
        const data = this.data;
        const prevHash= this.getLastChain();// 上一个区块的hash值
        let timestamp = new Date().getTime(); //时间戳
        let hash = this.computeHash(index,prevHash,timestamp,data, nonce);
        //判断得到的hash的前 几位 是否为 0~
        while(hash.slice(0, this.difficulty) !== "0".repeat( this.difficulty ))
        {
            nonce+=1;
            hash = this.computeHash(index,prevHash,timestamp,data, nonce);
            console.log(`正在进行第${nonce}次挖矿:${hash}`);
        }
        this.blockchain.push({
            index,
            nonce,
            data,
            prevHash,
            timestamp,
            hash
        })
        console.log(this.blockchain);
            
    }   
    //获取最后一个区块的数据
    getLastChain(){
        return this.blockchain[this.blockchain.length-1].hash;
    }
    //计算哈希
    computeHash(index, prevHash, timestamp, data, nonce){
        return crypto
                .createHash('sha256')
                .update( index + prevHash + timestamp + data + nonce)
                .digest('hex');
    }
}
var chain = new Blockchain();
chain.min();

运行效果如下:

Snipaste_2019_03_05_21_34_30

难度越大,所需要的计算能力也就越高,所以也就越费电,虽然这并没有必然的联系,不过,目前来说确实如此

阿里云优惠劵福利领取

目录
相关文章
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
3431 0
|
10月前
|
存储 供应链 分布式数据库
深入理解区块链技术:原理、应用与挑战
本文旨在探讨区块链技术的基本原理、主要应用及其面临的挑战。通过分析区块链的分布式账本技术、加密算法和共识机制,我们揭示了其如何在无需中心化权威的情况下确保数据的不可篡改性和透明性。此外,文章还讨论了区块链在金融、供应链管理、智能合约等领域的应用案例,并指出了当前区块链技术面临的可扩展性、隐私保护和法律监管等挑战。通过对这些内容的深入分析,我们希望为读者提供一个全面而深入的区块链技术概览。
1333 16
|
9月前
|
存储 供应链 算法
深入探索区块链技术:原理、应用与未来展望
本文将带你深入了解区块链技术的基本原理,探讨其在金融、供应链、医疗等多个领域的应用案例,并展望其未来的发展趋势。通过本文,你将对区块链技术有一个全面的认识,理解其背后的技术逻辑和应用场景。
|
Web App开发 JavaScript 前端开发
浏览器与Node.js事件循环:异同点及工作原理
浏览器与Node.js事件循环:异同点及工作原理
|
10月前
|
人工智能 供应链 物联网
探索区块链技术:原理、应用与未来趋势
探索区块链技术:原理、应用与未来趋势
128 1
|
10月前
|
供应链 算法 区块链
深入浅出区块链技术:从原理到应用
【10月更文挑战第21天】 本文旨在为读者提供一个关于区块链技术的全面概述,包括其工作原理、关键技术特点以及在现实世界中的应用案例。通过本文,您将能够理解区块链如何在不依赖中心化机构的情况下确保数据的安全性和不可篡改性,并探讨这项技术如何被应用于金融、供应链管理等多个领域,以提高效率和透明度。
612 1
|
10月前
|
存储 供应链 算法
深入解析区块链技术的核心原理与应用前景
深入解析区块链技术的核心原理与应用前景
371 0
|
10月前
|
存储 供应链 分布式数据库
深入理解区块链技术的核心原理
深入理解区块链技术的核心原理
|
10月前
|
供应链 区块链
探索区块链技术:从原理到应用
探索区块链技术:从原理到应用
162 0
|
10月前
|
存储 供应链 物联网
深入解析区块链技术的核心原理与应用前景
深入解析区块链技术的核心原理与应用前景