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

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

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

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

物联网设备数量呈指数级增长,其身份认证安全与区块链智能合约的可靠性成为制约行业发展的关键瓶颈。本文将从区块链物联网身份认证的底层原理出发,结合Hyperledger Fabric智能合约漏洞扫描与性能基准测试技术,系统阐...

关键字: 区块链 物联网 身份认证

在万物互联的M2M(机器对机器)通信时代,设备间的安全交互成为核心挑战。传统中心化认证体系因单点故障、数据泄露风险及高运维成本,难以满足物联网设备指数级增长的安全需求。区块链技术凭借去中心化、不可篡改和智能合约自动执行等...

关键字: 区块链 M2M

当前电力行业正经历着前所未有的变革。新型电力系统的建设加速推进,分布式新能源、电动汽车、储能设备等新型电力元素大规模接入,使得电力系统的供需互动更加复杂。与此同时,区块链技术凭借其去中心化、不可篡改、可追溯等特性,在金融...

关键字: 电力鸿蒙 区块链

香港2025年4月13日 /美通社/ -- 香港应用科技研究院 (应科院) 于第50届“日内瓦国际发明展”中成绩斐然,荣获16个奖项,其中包括1项评审团嘉许金奖、4项“金奖”、7项“银奖”及4项铜奖。今届获奖项目涵盖人工...

关键字: 人工智能 感测器 区块链 模型

在马来西亚获得政府间(G2G独特 认可的人工智能实验室将汇聚全球领先区块链、人工智能及机器人企业的合作 马来西亚吉隆坡2025年4月11日 /美通社/ -- 马来...

关键字: 人工智能 智能实验室 区块链 身份验证

在数字化时代,物联网(IoT)和区块链技术都备受关注,前者将无数设备连接成庞大网络,后者则以去中心化、不可篡改等特性重塑信任机制。当这两者相遇,碰撞出了创新的火花,区块链技术在物联网领域展现出巨大的应用潜力,为物联网的发...

关键字: 物联网 区块链 数字化

对于奢侈品牌,假冒伪劣产品和恶意灰色市场交易是一个长期存在的挑战。事实上,如今假冒市场被视为全球最大的非法贸易领域。经合组织(OECD)估计,2019 年其规模约为 4640 亿美元,占世界贸易总额的 2.5%,显然,对...

关键字: NFC防伪技术 半导体 区块链

区块链科普系列活动(一) 北京2024年12月24日 /美通社/ -- 在这个日新月异的科技时代,区块链与先进计算正以前所未有的速度推动着各行各业的变革。为了助力区块链及先进计算领域的创业者、从业人员把握时代脉搏,引领...

关键字: 区块链 亚马逊 数字化 AWS

区块链技术在物联网中的应用日益广泛,其去中心化、数据不可篡改和透明性等特点为物联网带来了诸多优势。以下将详细介绍区块链技术在物联网中的几个主要应用领域:

关键字: 区块链 物联网
关闭