作家
登录

连编程语言都不懂?看完这篇你也会写区块链

作者: 来源: 2018-03-29 03:05:07 阅读 我要评论

如今剩下要做的就是改变 addBlock() 办法,以便在将其添加到链中之前确保实际挖到该区块。下面我们将难度传给区块。

  1. addBlock(newBlock) { newBlock.previousHash = this.getLatestBlock().hash; newBlock.mineBlock(this.difficulty); this.chain.push(newBlock);} 
  1. constructor() { this.chain = [this.createGenesisBlock()]; this.difficulty = 2;} 

大年夜功告成!我们的区块链如今拥有了 POW 来抵抗进击了。测试如今让我们来测试一下我们的区块链,看看在 POW 下添加一个新区块会有什么效不雅。我将会应用之前的代码,我们将创建一个新的区块链实例,然后往里添加 2 个区块。

  1. let savjeeCoin = new Blockchain();
  2. console.log('Mining block 1');
  3. savjeeCoin.addBlock(new Block(1, "20/07/2017", { amount: 4 }));
  4. console.log('Mining block 2');
  5. savjeeCoin.addBlock(new Block(2, "20/07/2017", { amount: 8 })); 

如不雅你运行了膳绫擎的代码,你会发明添加新区块依旧异常快。这是因为今朝的难度只有 2(或者你的电脑机能异常好)。如不雅你创建了一个难度为 5 的区块链实例,你会发明你的电脑会花费大年夜概 10 秒钟来挖矿。跟着难度的晋升,你的防御进击的保护程度越高。免责声明就像之前说的:这毫不是一个完全的区块链。它仍然缺乏很多功能(像 P2P 网路)。这只是为了解释区块链的工作道理。并且:因为单线程的原因,用 JavaScript 来挖矿并不快。交易与挖矿嘉奖在前面两部分我们创建了一个简单的区块链,并且参加了 POW 来抵抗进击。然而我们在途中也偷潦攀懒:我们的区块链只能在一个区块中存储一笔交易,并且矿工没有嘉奖。如今,让我们解决这个问题!重构区块类如今一个区块拥有 index,previousHash,timestamp,data,hash 和 nonce 属性。这个 index 属性并不是很有效,事实上我甚至不知道为什么开端我要将它添加进去。所以我把它移除了,同时将 data 改名为 transactions 来更语义化。

  1. class Block{ 
  2. constructor(timestamp, transactions, previousHash = '') { 
  3. this.previousHash = previousHash; 
  4. this.timestamp = timestamp
  5. this.transactions = transactions; 
  6. this.hash = this.calculateHash(); 
  7. this.nonce = 0; 
  8. }

当我们改变区块类时,我们也必须更改 calculateHash()函数。如今它还在应用老旧的 index 和 data 属性。

  1. calculateHash() { return SHA256(this.previousHash + this.timestamp + JSON.stringify(this.transactions) + this.nonce).toString();} 

交易类在区块内,我们将可以存储多笔交易。是以我们还须要定义一个交易类,如许我们可以锁定交易应当具有的属性:

  1. class Transaction{ constructor(fromAddress, toAddress, amount){ this.fromAddress = fromAddress; this.toAddress = toAddress; this.amount = amount; }} 

这个交易例子异常的简单,仅仅包含了提议方(fromAddress)和接收方(toAddress)以及数量。如不雅有需求,你也可以在琅绫擎参加更多字段,不过这个只是为了最小实现。调剂我们的区块链当前的最大年夜义务:调剂我们的区块链来适应这些新变更。我们须要做的第一件事就是存储待处理交易的处所。正如你所知道的,因为 POW,区块链可以稳定的创建区块。在比特币的场景下,难度被设置成大年夜约每 10 分钟创建一个新区块。然则可以在创造两个区块之间提交新的交易。为了做到这一点,起首须要改变我们区块链的构造函数,以便他可以存储待处理的交易。我们还将创造一个新的属性,用于定义矿工获得若干钱作为嘉奖:

下一步,我们将调剂我们的 addBlock()办法。不过我的调剂是指删掉落并重写它!我们将不再许可人们直接为链上添加区块。相反,他们必须将交易添加至下一?区块中。并且我们将 addBlock()改名为 createTransaction(),这看起来更语义化:


  推荐阅读

  区块链未来3大发展趋势,它在2018年会凉透吗?

沙龙晃荡 | 3月31日 京东、微博、华为拭魅战专家与你合营商量容器技巧实践! 昨天数字泉币又一次全线暴跌,比特币的价格一度跌破了8000美元大年夜关。 据说比来币圈的社群氛围也都冷的出>>>详细阅读


本文标题:连编程语言都不懂?看完这篇你也会写区块链

地址:http://www.17bianji.com/lsqh/41009.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)