当前位置:首页 > 物联网 > 区块链
[导读] 最近,数字货币和底层区块链技术非常火爆,引领了世界潮流。这些天,区块链都是非常热门的词汇,但是很少有人真正地了解这项技术是如何来推动数字货币,类似比特币和以太坊的发展的。 此文中,我们尝

最近,数字货币和底层区块链技术非常火爆,引领了世界潮流。这些天,区块链都是非常热门的词汇,但是很少有人真正地了解这项技术是如何来推动数字货币,类似比特币和以太坊的发展的。

此文中,我们尝试来告诉大家如何使用Node.js语言,来编写你们自己的区块链项目。

区块链

区块链一直在逐渐增加记录列表,这可以对标为区块,而区块之间是通过加密算法互相连接。区块的接连,让区块链中的任何区块如果发生改变,那么链上其他的记录就会无效。

无法更改的特性是数字货币增长的关键,因为它会让人们在完成转账后,很难去进行更改。

创建区块 就像刚才所说,区块链是由很多区块连接构成。加密哈希被用来维持区块链的完整性。

每个区块都会有基于数据计算出来的哈希。它也会有前面区块的哈希。如果任何区块的哈希改变,它就会使得剩下的区块无效。 在Node.js语言下,区块算法就会是如下:

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.computeHash(); this.nonce = 0; } computeHash() { return SHA256(this.index + this.previousHash + this.TImestamp + JSON.stringify(this.data) + this.nonce).toString(); }

像我们看到的,以上的函数中会实例化等级,并且引用如下的参数:  索引:它会追踪区块链中区块的位置  时间戳:它会在每个转账完成的时候,放入时间戳。  数据:它会在转账完成的时候,提供信息,例如购买量。  前个哈希- 它代表区块链中前个区块的哈希值。

我们使用computeHash 这个函数来根据上面的数值,计算出每个区块的加密哈希。为了完成这个,我们会导入crypto-js library 并且使用它的SHA256哈希功能。

SH256是一个很强大的,不可逆哈希功能,它会应用在大多数数字货币中,从而确保它们的安全。

为了设置crypto-js数据库,定位到终点,并且在同样的项目文件夹中,我们使用npm来安装它。

你可以使用下面的代码:

//remember to run npm init first npm install –save crypto-js

创建区块链

区块链的意思是这些区块都互相链接。因此,我们会开始将这些区块和其他的链接在区块链上。

代码如下:

class Blockchain{ constructor() { this.chain = [this.buildGenesisBlock()]; this.complexity = 5; } buildGenesisBlock() { return new Block(0, “17/07/2018”, “genesis block”, “0”); } obtainLatestBlock() { return this.chain[this.chain.length – 1]; } addBlock(newBlock) { newBlock.previousHash = this.obtainLatestBlock().hash; newBlock.mineBlock(this.complexity); this.chain.push(newBlock); } }

从上面代码,我们可以看出,这个等级是由以下函数实现的: A)。 构造函数 区块链是通过buildGenesisBlock来启动的。 B)。 创建创世区块 在区块链中,创世区块是区块链的开始。这个区块之前没有数据,接下来会有区块基于它。我们会使用buildGenesisBlock() 函数来创建。

C)。 获得最新区块 为了获得区块链中的最新区块,我们使用obtainLatestBlock() 函数。 D)。 增加新区块 为了给区块链Node.js增加新区块,我们使用addBlock() 函数。为了完成这步骤,我们会将前个区块的哈希加到新区块上,为了保证区块链的完整性。

因为我们改变了新区块的细节,所以很有必要去再次计算哈希。在完成之后,我们会将区块放入链的数据集。 E)。 确定区块链的有效性

confirmValidity() 功能是为了确保区块链的完整性,并确保缺陷不存在。这个函数中引用了很多if功能,来确认是否每个区块的哈希是不可以更改的。

并且,它也会检查是否每两个相关区块的哈希值指向对方。如果所有都有效,那么就回复true,不然就回复false。

下面是代码: confirmValidity() { for (let i = 1; i 《 this.chain.length; i++){ const currentBlock = this.chain[i]; const previousBlock = this.chain[i – 1]; if (currentBlock.hash !== currentBlock.computeHash()) { return false; } if (currentBlock.previousHash !== previousBlock.hash) { return false; } } return true; }

测试区块链

这是最令人兴奋的部分!

代码如下: let liveEduCoin = new Blockchain(); console.log(‘《》’); liveEduCoin.addBlock(new Block(1, “27/07/2018”, { quanTIty: 10 })); console.log(‘《》’); liveEduCoin.addBlock(new Block(2, “27/07/2018”, { quantity: 20 })); We’ll create a new instance of the Blockchain class and name it liveEduCoin. Thereafter, we’ll add some arbitrary blocks into the blockchain. You can add any kind of data into the blocks. In this simple blockchain Node.js tutorial, we decided to add an object with the quantityproperty. Here is the entire code for our project: 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.computeHash(); this.nonce = 0; } computeHash() { return SHA256(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data) + this.nonce).toString(); } mineBlock(complexity) { while (this.hash.substring(0, complexity) !== Array(complexity + 1).join(“0”)) { this.nonce++; this.hash = this.computeHash(); } console.log(“Mining is taking place: ” + this.hash); } } class Blockchain{ constructor() { this.chain = [this.buildGenesisBlock()]; this.complexity = 5; } buildGenesisBlock() { return new Block(0, “17/07/2018”, “genesis block”, “0”); } obtainLatestBlock() { return this.chain[this.chain.length – 1]; } addBlock(newBlock) { newBlock.previousHash = this.obtainLatestBlock().hash; newBlock.mineBlock(this.complexity); this.chain.push(newBlock); } confirmValidity() { for (let i = 1; i 《 this.chain.length; i++){ const currentBlock = this.chain[i]; const previousBlock = this.chain[i – 1]; if (currentBlock.hash !== currentBlock.computeHash()) { return false; } if (currentBlock.previousHash !== previousBlock.hash) { return false; } } return true; } } let liveEduCoin = new Blockchain(); console.log(‘《》’); liveEduCoin.addBlock(new Block(1, “27/07/2018”, { quantity: 10 })); console.log(‘《》’); liveEduCoin.addBlock(new Block(2, “27/07/2018”, { quantity: 20 }));

如果我们将代码保存为blockchain.js 文件,并且在终端上运行,那么下面就是结果:成功运行

结论

上面所说的Node.js中的数字货币区块链还远没有完成。其实,如果你努力完成,你可以是唯一使用它的人!

例如,它会缺少成功数字货币的关键要素,例如工作量证明和P2P网络。尽管如此,区块链node.js演示展示了区块链运行的方法。和很多人想的不同,这个简单的项目揭示了区块链概念其实是很容易实施的。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭