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

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

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

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

现如今数字经济完全依赖各大平台的服务,交易能否达成与双方信用直接挂钩。平台往往在交易过程中抽取大量服务费用,导致了交易成本的提高。

关键字: 元宇宙 区块链 虚拟活动

随着人工智能(AI)技术的不断发展和创新,其应用领域也在不断拓展。AI正在逐步渗透到各个行业中,为我们的生活和工作带来诸多变革。本文将为您探讨人工智能在各个领域的应用。

关键字: 人工智能 区块链 应用领域

本文中,小编将对区块链技术予以介绍,如果你想对它的详细情况有所认识,或者想要增进对它的了解程度,不妨请看以下内容哦。

关键字: 区块链 Blockchain

深圳2023年9月8日 /美通社/ -- 近日,超算领域国际顶级会刊SC23公布了论文入选名单,由微众银行区块链团队发表的论文——《FISCO-BCOS:An Enterprise-grade Permissioned...

关键字: 区块链 OS 开源 联盟链

(全球TMT2023年9月6日讯)耀世星辉新文娱集团控股有限公司宣布,根据2023年8月16日签署的《股份认购协议》,完成发行总计8,064,516 股普通股,认购价格为每股2.48美元,总计2000万美元的战略投资完...

关键字: 云计算 移动互联网 区块链 生态系统

上海2023年8月17日 /美通社/ -- 低碳经济的新机遇和挑战激发了电池制造业的创新热情。为了引领行业电池安全生产标准的制定并保持市场领先地位,一些电池制造公司,已在电池创新技术上投入巨大的研发力量。 在这个背景下...

关键字: 区块链 新能源电池管理 区块链技术 AI

(全球TMT2023年8月17日讯)耀世星辉新文娱集团控股有限公司宣布与两家新的投资机构签署战略投资股份认购协议。根据协议,公司同意向两家机构发行总计8,064,516 股普通股,每股价格为2.48美元,总额2000万...

关键字: 云计算 移动互联网 区块链 生态系统

近日,SABIC携手区块链软件提供商Circularise共同推出区块链试点项目,旨在评估其技术在追踪特定材料从“端到端”流动的碳足迹方面的使用情况。

关键字: 区块链 碳中和

区块链技术是一种基于去中心化、分布式、不可篡改的数据存储和传输技术,其应用场景广泛,涉及到数字货币、供应链管理、智能合约、数字身份验证、物联网等多个领域。以下是区块链技术的几个具体应用:

关键字: 区块链 数字货币

比特币是一种去中心化、全球性的数字货币,它通过加密算法和分布式账本技术,实现了安全、快速、低成本的交易和转移资产。比特币的出现,打破了传统的金融模式,为人们提供了一种全新的支付方式和财富管理方式,同时也引发了人们对金融创...

关键字: 比特币 区块链
关闭
关闭