文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何从0构建区块链之二

2024-12-03 08:49

关注

本文转载自微信公众号「区块链研究实验室」,作者链三丰 。转载本文请联系区块链研究实验室公众号。  

在上一篇文章中,我们讨论了区块链概念并构建了一个DEMO原型 [ 传送机:区块链研究实验室 | 如何从0构建区块链(一)],在这一集中,我们将使用Javascript的另一种编程语言来实现相同的概念,用Go编写代码可能很困难。

因此,请参考我们在第1集中绘制的图:

这次,我们将使用Javascript将应用相同的机制。

为了使其成为可能,我们需要一台可以运行我们的Javascript代码的服务器,可以使用网络浏览器,但让我们专业地做事。

要求:

让我们开始吧:

毕竟我的package.json看起来像这样:

文件夹结构如下所示:

打开终端并转到javascript文件夹,键入“npm run start不要介意”是否看到错误,这是因为entry.js文件中没有任何内容。

现在我们准备开始对我们的区块链进行编码。entry.js在任何IDE中打开文件并编写此代码以理解它,请跳过注释:

以下是一些说明:

在上面的代码中,我们创建了一个B锁类,其中包含一个id,时间戳,哈希,以前的哈希和数据属性。将来使用该类我们创建了一个构造函数,并添加了一个用于生成哈希的方法。

由于区块链是一组块,因此我们创建了另一个名为Blockchain的类来存储所有块,它只是Javascript中具有数组的承包商,然后我们添加了方法AddBlock将一个块添加到我们的链中。

最后,我们初始化了链并通过发出3个不同的交易对其进行了测试。

结果:

如果安装了nodemon,只需检查运行它的终端,您将看到整个区块链信息。

恭喜你!这在Javascript中非常简单,我们只用了几行代码就完成了。

整个代码:

  1. const bcrypt = require('bcrypt') // import the bcrypt js librairy 
  2.  
  3. class Block{ // create the block structure or class 
  4.       
  5.     constructor(blockid,  previousHash, data){ // create a contractor. in a block we find this information : 
  6.         this.blockid = blockid;  // the block id 
  7.         this.timestamp = Date.now(); // the timestamp 
  8.         this.blockhash = this.getHash(); // the block hash 
  9.         this.prevHash = previousHash; // the hash of the previous block 
  10.         this.data = data; // and all the transactions 
  11.         
  12.         
  13.     } 
  14.     getHash(){ 
  15.         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 
  16.     }; 
  17.  
  18. class BlockChain{ // the blochain structure or class 
  19.     constructor(){ // create a constractor.  
  20.         this.chain = []; // a blockchain is a series of blocks, so we need an array [] 
  21.     } 
  22.  
  23.     addBlock(data){ // create a method that will take the entire block and add it to the blockchain 
  24.         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 
  25.         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 
  26.         let block = new Block(blockid, previousHash, data); // Now create the block 
  27.       
  28.         this.chain.push(block); // Add the block to the blockchain  
  29.     } 
  30.  
  31.  
  32. const Myfirstblockchain = new BlockChain(); 
  33.   
  34. Myfirstblockchain.addBlock({sender: "sinai", receiver: "kazadi", amount: 24034}); // first transaction 
  35. Myfirstblockchain.addBlock({sender: "Dahouda", receiver: "Pat", amount: 32032}); // second transaction 
  36. Myfirstblockchain.addBlock({sender: "Nkolomoni", receiver: "Mao", amount: 20993}); // third transaction  
  37.   
  38. console.log(JSON.stringify(Myfirstblockchain, null, 6)); // convert the result into a json and show it in the console 

 

来源:区块链研究实验室内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯