在上一篇文章中,我们讨论了区块链概念并构建了一个DEMO原型 [ 传送机:区块链研究实验室 | 如何从0构建区块链(一)],在这一集中,我们将使用Javascript的另一种编程语言来实现相同的概念,用Go编写代码可能很困难。
因此,请参考我们在第1集中绘制的图:
这次,我们将使用Javascript将应用相同的机制。
为了使其成为可能,我们需要一台可以运行我们的Javascript代码的服务器,可以使用网络浏览器,但让我们专业地做事。
要求:
Nodejs:在Web浏览器外部执行JavaScript代码的运行时环境。安装它并尝试建立一个项目,您可以按照此处的步骤进行操作。
Express:一个nodejs中间件Web应用程序,稍后我们将使用它,但是让我们先安装它。
Nodemon:一种工具,通过在修改文件后自动重启节点应用程序来帮助开发基于node.js的应用程序
Bcrypt:一个用于快速加密的库,您还可以使用所需的任何哈希函数。
让我们开始吧:
创建一个名为javascript的文件夹,并添加一个名为entry.js
在npm init用于初始化项目的文件夹类型中,填写所有要求,对于入口点输入entry.js
打开终端,然后键入npm i –save-dev nodemon以安装该nodemon工具。
也运行npm i express安装Express JS。
安装bcryptnpm i bcrypt
毕竟我的package.json看起来像这样:
文件夹结构如下所示:
打开终端并转到javascript文件夹,键入“npm run start不要介意”是否看到错误,这是因为entry.js文件中没有任何内容。
现在我们准备开始对我们的区块链进行编码。entry.js在任何IDE中打开文件并编写此代码以理解它,请跳过注释:
以下是一些说明:
在上面的代码中,我们创建了一个B锁类,其中包含一个id,时间戳,哈希,以前的哈希和数据属性。将来使用该类我们创建了一个构造函数,并添加了一个用于生成哈希的方法。
由于区块链是一组块,因此我们创建了另一个名为Blockchain的类来存储所有块,它只是Javascript中具有数组的承包商,然后我们添加了方法AddBlock将一个块添加到我们的链中。
最后,我们初始化了链并通过发出3个不同的交易对其进行了测试。
结果:
如果安装了nodemon,只需检查运行它的终端,您将看到整个区块链信息。
恭喜你!这在Javascript中非常简单,我们只用了几行代码就完成了。
整个代码:
const bcrypt = require('bcrypt') // import the bcrypt js librairy
class Block{ // create the block structure or class
constructor(blockid, previousHash, data){ // create a contractor. in a block we find this information :
this.blockid = blockid; // the block id
this.timestamp = Date.now(); // the timestamp
this.blockhash = this.getHash(); // the block hash
this.prevHash = previousHash; // the hash of the previous block
this.data = data; // and all the transactions
}
getHash(){
return bcrypt.hashSync(String(this.blockid + this.timestamp + this.blockhash + this.previousHash + JSON.stringify(this.data)) , 10) // this method will hash the data in the block using a salt of 10 and return that hash. We use the bcrypt library
};
}
class BlockChain{ // the blochain structure or class
constructor(){ // create a constractor.
this.chain = []; // a blockchain is a series of blocks, so we need an array []
}
addBlock(data){ // create a method that will take the entire block and add it to the blockchain
let blockid = this.chain.length; // The block id will be the length or the total number of blocks in the chain minus 1, so the first block will have 0 as an index
let previousHash = this.chain.length !== 0 ? this.chain[this.chain.length - 1].blockhash : ''; // if it's the first block then its previous hash will be empty, if not then it will take the hash of the previous block
let block = new Block(blockid, previousHash, data); // Now create the block
this.chain.push(block); // Add the block to the blockchain
}
}
const Myfirstblockchain = new BlockChain();
Myfirstblockchain.addBlock({sender: "sinai", receiver: "kazadi", amount: 24034}); // first transaction
Myfirstblockchain.addBlock({sender: "Dahouda", receiver: "Pat", amount: 32032}); // second transaction
Myfirstblockchain.addBlock({sender: "Nkolomoni", receiver: "Mao", amount: 20993}); // third transaction
console.log(JSON.stringify(Myfirstblockchain,null,6));//converttheresultintoajsonandshowitintheconsole
作者:链三丰,来源:区块链研究实验室
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。