国外有个大侠用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. 微软提出AdaLM,用于开发小型、快速且有效的领域预训练语言模型
  2. boost::describe模块宏BOOST_DESCRIBE_PP_NAME的测试程序
  3. [环境]搭建Node+NPM+Grunt+Ruby开发环境
  4. GPU架构变迁之AI系统视角:从费米到安培
  5. Android实战开发小米主题下载工具
  6. php 开启 ziparchive,php ZipArchive类使用实例详解
  7. 谷歌浏览器字体由繁体改为简体
  8. 火狐浏览器设置url编码_URL编码与解码
  9. RGB色彩模式-最广的颜色系统之一
  10. 拓扑结构计算机网络结构,什么是计算机网络的拓扑结构
  11. 如何将视频上传到网站服务器,如何将本地视频上传到云服务器
  12. 阿里注资新浪微博 冲击最大的是腾讯
  13. 【翻译】Visual Place Recognition_ A Survey视觉场景识别综述【一】
  14. 华科计算机考研2021年分数,华中科技大学2021考研分数线已公布
  15. 大话成像之《图像质量测试测量与国际标准》课程
  16. Python 编程训练2:二维向量
  17. GSM Communication on EBox4300--(1)
  18. 美国医院管理历程,学而时习之
  19. java mina http_mina的HTTP性能测试
  20. 羽毛球线选择--BG65,BG80,BG65Ti,NBG 95

热门文章

  1. 时间改变一切—兄弟连IT教育
  2. 使用TextCNN+Word2Vec实现简历文本分类(二)
  3. 我的世界win10版与java版_我的世界java版和win10版的区别
  4. Win10下Linux双系统的安装教程
  5. 深入学习ElasticSearch(一)——ElasticSearch安装
  6. Elasticsearch 的 Shard 和 Segment
  7. opencv3图像处理小程序(一)
  8. Coherence-Enhancing Shock Filters 代码及详细注释【OpenCV】
  9. 计算机组织电脑义诊是什么,计科院计算机协会开展电脑义诊活动
  10. 转载 fstring用法