热门标签
区块链游戏开发 区块链公司 fomo3d 以太坊区块链开发 区块链开发语言 深圳区块链开发 vpay java区块链开发 区块链开发技术 区块链应用开发 区块链技术开发 区块链项目 EOS区块链开发 区块链钱包 区块链系统 区块链原理 区块链项目开发
小编推荐
大家都在关注
最新区块链百科
随机推荐

当前位置:主页 > 新闻资讯 > 区块链百科 > 如何用JavaScript写一个区块链?

如何用JavaScript写一个区块链?

2020-02-23 02:34:40 83 文章来源:汉全科技 作者:千灯

标签: java区块链开发

  在上面几篇文章中,我们提到过几乎所有语言都可以编写区块链开发程序。那么如何用JavaScript写一个区块链?以下我将要用JavaScript来创建1个简单的区块链来演示它们的内部到底是怎样工作的。我将会称作SavjeeCoin!

区块链开发

  区块链是由一个个所有人能够访问的区块构成的公共数据库。这好像没有什么特别的,不过它们有个有意思的特性:它们是无法变的。要是1个区块被插入到区块链中,除非让剩下的另外区块失效,不然这是不会再被更改的。

  区块链是由千千万万的区块连接在一起的。链上的区块根据某一方法容许人们检验到是不是有人控制了以前的一切区块。

  那么人们怎样保证数据的完整性呢?每一区块都含有1个基于其内容计算出来的hash。同时也涵盖了前1个区块的hash。

  下面是一个区块类用JavaScript写出去大概的模样:

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

  class Block {

  constructor(index, timestamp, data, previousHash = ‘’) {

  this.index = index;

  this.previousHash = previousHash;

  this.timestamp = timestamp;

  this.data = data;

  this.hash = this.calculateHash();

  }

  calculateHash() {

  return SHA256(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data)).toString();

  }

  }

  因为JavaScript中并不支持sha256所以我引入了crypto-js库。然后我定义了一个构造函数来初始化我区块的属性。每一个区块上都被赋予了index属性来告知我们这个区块在整个链上的位置。我们同时也生成了一个时间戳,以及需要在区块里存储的一些数据。最后是前一个区块的hash。

  创造一个链

  现在我们可以在Blockchain类中将区块链接起来了!下面是用JavaScript实现的代码:

  class Blockchain{

  constructor() {

  this.chain = [this.createGenesisBlock()];

  }

  createGenesisBlock() {

  return new Block(0, “01/01/2017”, “Genesis block”, “0”);

  }

  getLatestBlock() {

  return this.chain[this.chain.length - 1];

  }

  addBlock(newBlock) {

  newBlock.previousHash = this.getLatestBlock().hash;

  newBlock.hash = newBlock.calculateHash();

  this.chain.push(newBlock);

  }

  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.calculateHash()) {

  return false;

  }

  if (currentBlock.previousHash !== previousBlock.hash) {

  return false;

  }

  }

  return true;

  }

  }

  在构造函数里,我通过创建一个包含创世块的数组来初始化整个链。第一个区块是特殊的,因为它不能指向前一个区块。我还添加了下面两个方法:

  · getLatestBlock()返回我们区块链上最新的区块。

  · addBlock()负责将新的区块添加到我们的链上。为此,我们将前一个区块的hash添加到我们新的区块中。这样我们就可以保持整个链的完整性。因为只要我们变更了最新区块的内容,我们就需要重新计算它的hash。当计算完成后,我将把这个区块推进链里(一个数组)。

  最后,我创建一个isChainValid()来确保没有人篡改过区块链。它会遍历所有的区块来检查每个区块的hash是否正确。它会通过比较previousHash来检查每个区块是否指向正确的上一个区块。如果一切都没有问题它会返回true否则会返回false。

  使用区块链

  我们的区块链类已经写完啦,可以真正的开始使用它了!

  let savjeeCoin = new Blockchain();

  savjeeCoin.addBlock(new Block(1, “20/07/2017”, { amount: 4 }));

  savjeeCoin.addBlock(new Block(2, “20/07/2017”, { amount: 8 }));

  在这里我仅仅是创建了一个区块链的实例,并且命名它为SavjeeCoin!之后我在链上添加了一些区块。区块里可以包含任何你想要放的数据,不过在上面的代码里,我选择添加了一个带有amount属性的对象。

  试着操作吧!

  在介绍里我曾说过区块链是不可变的。一旦添加,区块就不可能再变更了。让我们试一下!

  // 检查是否有效(将会返回true)

  console.log(‘Blockchain valid? ’ + savjeeCoin.isChainValid());

  // 现在尝试操作变更数据

  savjeeCoin.chain[1].data = { amount: 100 };

  // 再次检查是否有效 (将会返回false)

  console.log(“Blockchain valid? ” + savjeeCoin.isChainValid());

  我会在一开始通过运行isChainValid()来验证整个链的完整性。我们操作过任何区块,所以它会返回true。

  之后我将链上的第一个(索引为1)区块的数据进行了变更。之后我再次检查整个链的完整性,发现它返回了false。我们的整个链不再有效了。

  其实区块链的原理并不复杂,这个小例子证明了区块链的工作原理。

本文链接:https://www.a6shop.cn/wiki/910.html

相关案例

南方航空安联云系统开发
南方航空安联云系统开发
汉全私有链开发
私有链开发
汉全联盟链开发
联盟链开发
选择汉全    品牌保证
01
雄厚公司资质
02
强大产品优势
03
敏锐行业前瞻
04
优质售后服务
汉全科技广东省高新技术企业证书
高新技术企业

汉全科技获得广东省高新技术企业,技术驱动商业创新

汉全科技广东股权交易中心证书
广州股权交易中心

汉全科技于2016年在广州股权交易中心成功挂牌,赢得广大企业事业的信赖

广州汉全信息科技有限公司团队照片
200+强大技术研发团队

团队核心成员来自实达集团,中国软件,唯品会,枫特红外等知名大型企业

广州汉全信息科技有限公司软件研发中心
13年+互联网行业技术沉淀

13年专注新商业程序研究和开发,万千用户品质见证

广州汉全信息科技有限公司软件知识产权证书
30项+软件著作权证书

获得30+互联网创新产品自主知识产权软件著作权证书

广州汉全信息科技有限公司资质荣誉
荣誉资质

汉全科技-中国区块链专业委员会创始会员单位(理事)

独家源码出售

各系统均提供专门的独家源码出售,方便客户自行系统开发。

产品更新迅速

每周均提供不同系统的功能点更新及优化,产品更新迅速,让您时刻立足行业前沿。

产品原生开发

产品原生开发,运行更快更流畅,让客户拥有更良好的体验。

专属定制开发

汉全可根据需求,为您专属定制开发,满足您全方位的产品需求。

方便二次开发

提供系统程序及二次开发文档,大大缩短开发进程,让您的系统快速上线。

全球3000+客户共同选择

产品功能稳定,获全球3000+家商业企业客户信赖,品质有保障。

设立战略研究院

设立专门的行业战略研究院,与行业内专家时刻保持密切联系,形成汉全独特的市场敏锐前瞻。

产品领先全国

领先全国,首家推出“汉全区块链商城”、“汉全区块链溯源”、等创新产品,并取得骄人的市场业绩。

国内最早开发搭建区块链商城系统

国内最早着手区块链商城系统平台的开发搭建,经过持续优化已达到系统稳定、功能持续全面更新中。

产品更新迅速

每周均提供不同系统的功能点更新及优化,产品更新迅速,让您时刻立足行业前沿。

强大的售后团队

强大的售前售后团队。配备专门的服务人员及技术人员1v1服务确保客户碰到的问题第一时间予以解决。

完美的技术支持

产品手册、操作教程、安装帮助等服务手册一应俱全,汉全为您提供完整的技术指导和行业支持,使您快速上手,轻松应对。

迅速响应服务

电话、QQ、工单、上门...汉全的售后人员随时为您提供迅速响应服务,及时应对客户提出的一切运营、技术难题。

全方位服务

QQ、电话等聊天工具全方位解答客户各种操作、技术难题,确保客户系统安全稳定,bug及时修复。

平台搭建部署全程指导

为各平台的搭建部署提供全程指导,即使创业小白,汉全也能助您实现平台快速上线和运营。

更多其他的服务

汉全将与您协同配合,提供优质的解决方案。持续跟进用户反馈,满足您的多方位其他需求。

0元免费试用
免费试用
6网合一网合一
全渠道营销
7*12小时售后×12小时
售后支持
100+营销功能
营销功能
200+团队支持
团队支持
30万商家选择万+
商家选择
广州汉全信息科技有限公司公众号
Title