国外有个大侠用node.js写了区块链项目,一起来学习一下。

暂时还没包括POW和P2P协议和如何奖励。接下来几篇将详细叙述POW(nonce),P2P,reward

// 引入加密模块

const SHA256 = require('crypto-js/sha256');

// 定义块

class Block {

constructor (index,timestamp,data,previousHash=''){

this.index = index;
    this.timestamp = timestamp;
    this.data = data;
    this.previousHash=previousHash;
    this.hash=this.caculateHash();     //hash 值
}
    caculateHash(){
        return SHA256(this.index+this.timestamp+ JSON.stringify(this.data)+this.previousHash).toString();  //计算hash值
    }
}

//定义区块链

class Blockchain{

constructor()
    {
        this.chain=[this.createGensisBlock()];  //创建世纪块
    }

//创世纪块
    createGensisBlock(){
        return new Block(0,"2017/01/01","GenesisBlock","");

}

//获取当前块

getLatestBlock(){
        return this.chain[this.chain.length-1];
    }

//增加区块到区块链中
    addBlock(newBlock){
        newBlock.previousHash = this.getLatestBlock().hash;
        newBlock.hash = newBlock.caculateHash();
        this.chain.push(newBlock);
    }

//验证块的有效性,当前块的hash等于nonce+前一个块的hash值 nonce相当于难度,暂时还没加入

//加入nonce后需要生成的hash值得前两位为0,正真的比特币hash至少要前72位为零,可见难度有多大,需要多大的计算能力

isChainValid(){
        for(let i=1;i<this.chain.length;i++){

const currentBlock = this.chain[i];
            const previousBlock = this.chain[i-1];
            if(currentBlock.hash != currentBlock.caculateHash()){
                return false;
            }

if(currentBlock.previousHash!=previousBlock.hash){
                return false;
            }

return true;
        }
    }
}

let xuanBlock = new Blockchain();
xuanBlock.addBlock(new Block(1,"10/10/2017",{amount:4}));
xuanBlock.addBlock(new Block(2,"10/12/2017",{amount:2}));
console.log(JSON.stringify(xuanBlock,null,4));

区块链源代码分析(1)相关推荐

  1. r语言error in match.fun(fun) :_Go语言200行写区块链源代码分析

    Github上有一个Repo,是一个使用Go语言(golang),不到200行代码写的区块链源代码,准确的说是174行.原作者起了个名字是 Code your own blockchain in le ...

  2. 区块链前景分析和学习建议

    纵观区块链快速的发展趋势,如狂风暴雨般席卷全球,已经有很多领域开始尝试引入区块链,试图借助区块链技术进行转型的公司也有很多,但区块链是一种新兴的技术,专业人才十分匮乏,因此学习区块链技术成了很多人要做 ...

  3. 区块链概念股分析 | 远光软件大涨128%,区块链或成关键因素?

    随着高层的发话,区块链概念股一度掀起一波炒作热潮,越来越多的上市公司开始涉足区块链业务.但是区块链概念股鱼龙混杂,面对众多质量参差不齐的股票,大家往往不知道该如何下手. 陀螺财经重磅推出[区块链概念股 ...

  4. 杭州趣链科技CEO李伟:区块链场景分析和实践

    2017年10月25日,由数据猿联合<清华金融评论>共同主办的"2017金融科技价值峰会--数据驱动金融商业裂变"在北京隆重召开.本文是杭州趣链科技CEO李伟关于区块链 ...

  5. 狂热至理性,2018年区块链舆情分析 | 链塔区块链产业年鉴精选

    转发此链接至朋友圈并截图进预售群, 前50名可进入链塔年鉴购买优惠通道 "这是一个最好的时代,也是一个最坏的时代." 2018年,区块链依然是最热门的话题之一.从年初火热的三点钟社 ...

  6. python爬取岗位数据并分析_区块链岗位薪资高,Python爬取300个区块链岗位分析,龙虎榜出炉...

    原创: 菜鸟哥 菜鸟学Python 最近区块链技术再次被大家热议,既然区块链受到如此高的关注,我们就不妨去采集数据分析看看,目前所有与区块链相关的招聘信息吧. 1数据的爬取 首先是对于数据的爬取,由于 ...

  7. 区块链工程师薪资竟然被AI吊打?最新出炉的《2018区块链招聘分析报告》,释放了哪些重要信号?...

    2018年中的区块链行业呈现出与年初不同的形态. 一方面ICO渐冷,传统VC转淡,整个融资环境趋于严峻:另一方面各国纷纷布局区块链,从政策上大力发展区块链技术. 整个区块链行业的变动,使得区块链人才招 ...

  8. 从概念到底层技术,区块链一站式分析和汇总(附知识图谱)

    作者简介:朱志文,亿书创始人,CSDN区块链知识库特邀编辑.中国区块链俱乐部主创者和发起人,比特币的忠实粉丝,区块链技术的布道者,代表作<Nodejs开发加密货币>.个人博客:http:/ ...

  9. 5G与区块链发展分析

    5G作为新一代移动通信技术,具备高速率.低延时和海量接入的特性.而区块链作为新一代互联网,其去中心化.交易信息隐私保护.历史记录防篡改.可追溯等特性可推动5G应用的高效发展.分析区块链和5G的行业痛点 ...

最新文章

  1. Service Worker
  2. c语言程序的实质,C语言_printf中的%p的实质
  3. CAP带你轻松玩转ASP.NETCore消息队列
  4. B-树、B+树、B*树详解
  5. 今天完成了share memory的测试
  6. 保险条款精解(四)索赔——不可不看,因为您以前可能没听说过
  7. 集群的可扩展性及其分布式体系结构(1)
  8. 锂价疯涨 马斯克说特斯拉可能不得不去开采和提炼锂
  9. 交换机端口呈现err-disable的原因
  10. 计算机在思政专业的应用与探索,课程思政在计算机类课程中的探索与实践
  11. PKM全民推广系列一:PKM定义
  12. 推荐几个代码自动生成器,神器
  13. python绘制中国_用Python画中国地图(下)
  14. 大话西游2人数最多服务器,大话2大话各个服务器狂人榜排名 看大话如今服务器...
  15. hdu6441 Find Integer
  16. 基于android的手机掌上购物
  17. pandas读取数据时,报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 0: invalid contin
  18. elementUI中el-upload上传文件时附带额外参数传递
  19. 知识点滴 - 无线电频谱划分
  20. Find_in_set()函数的使用及in()用法详解

热门文章

  1. 联通 受限服务器未响应,联通设置宽带的时候服务器未响应
  2. word2003系统服务器,用Word?2003进行协同办公
  3. 计算机的未来展望英语作文,展望未来英语作文范文
  4. Oracle数据库基础(还在学java吗?不如来看看oracle)
  5. Table ‘ambari.members‘ doesn‘t exist 解决方法
  6. linux 版本的选择,以及如何查看linux版本
  7. linux 版本介绍
  8. 证券公司信息化3-经纪业务收入大概是个什么水平?一个普通投资者的开户过程是怎样的?
  9. Aligenie语音开发平台(天猫精灵)的对接记录
  10. 人脸识别之insightface开源代码使用:训练、验证、测试(3)