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

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

此文中,我们尝试来告诉大家如何使用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演示展示了区块链运行的方法。和很多人想的不同,这个简单的项目揭示了区块链概念其实是很容易实施的。

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

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭