加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

使用Javascript实现简单的小型区块链

发布时间:2019-04-05 11:20:21 所属栏目:建站 来源:TiMiGerry
导读:区块链观念 狭义:区块链是一种凭证时刻次序将数据区块以次序相连的方法组合成的一种链式数据布局,并以暗码方法担保的不行改动和不行伪造的漫衍式账本。 一、挖矿(发生新区块) 起首,区块链是由每一个区块接洽而形成的,在发生新区块之前必需先有一个最

在区块链中,举办记录转账买卖营业的时辰是必要一个加密的算法,把全部的信息举办加密之后再push到新区块中的data中,从而完成一笔新买卖营业的记录。以BTC为例,BTC的加密算法是行使elliptic这个加密算法,elliptic是一个非对称性的加密算法,非对称的加密算法的特点就是,私钥是惟一的,只有拥有者才可以和他私钥对应的公钥举办校验 。 nodejs也有对应的库在github上搜刮elliptic即可。

  1. {  
  2.   "privateKey": "34a425df3eb1f22fb6cb74b0e7298b16ffd7f3fb",  
  3.   "publicKey": "ac208623a38d2906b090dbcf3a09378dfe79b77bf39c2b753ef98ea94fe08dc3995a1bd05c917"  

上面是一个天生好的密钥对名目,仅作为展示,我删减了一部门长度。

行使银行卡举办转账买卖营业的时辰,会有一个转出的账号和一个转入的账号,在区块链中的记账也会有这个账号,这个账号就是上面行使天生的密钥对中的公钥,公钥就是地点,可能说公钥代表的就是本身的钱包。

校验的要领,起首行使字段“from”,“to”,“amount”的参数举办sign署名,然后在每次挖矿(记账)的时辰,则行使verify(),通过前面的三个参数,和sig举办校验

  1. verify(type,data){  
  2.     swtich(type){  
  3.         case 'sign':  
  4.             const bufferMsg = Buffer.from(`${data.from}-${data.to}-${data.amount}`)  
  5.             let signature = Buffer.from(keypair.sign(bufferMsg).toDER()).toString('hex')  
  6.                this.signature =  signature  
  7.         break;  
  8.         case 'verify':  
  9.              const keypairTemp = ec.keyFromPublic(pub, 'hex')  
  10.                 const bufferMsg = Buffer.from(`${data.from}-${data.to}-${data.amount}`)  
  11.              this.keypair = keypairTemp.verify(bufferMsg, sig)  
  12.         break;  
  13.         default;  
  14.     }  

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读