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

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

发布时间:2019-04-12 12:41:36 所属栏目:优化 来源:TiMiGerry
导读:副标题#e# 区块链概念 狭义:区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码方式保证的不可篡改和不可伪造的分布式账本。 一、挖矿(产生新区块) 首先,区块链是由每一个区块联系而形成的,在产生新区块之前必须

转帐的时候需要3步,分别是校验转出账户是否有足够的金额,转出账户就是本地公钥。如有则进行记账并且使用两个地址、金额、时间,还有签名加密打包,之后进行全节点广播。其他节点收到这个信息之后第一件事也是对新区块的有效性做一个校验,通过校验之后就会写入data中。

  1. transfer(data)  {  
  2.     const timestamp = new Date().getTime()  
  3.     const sig = rsa.sign({data.from, data.to, data.amount , timestamp})  
  4.     const sigTrans = {data.from, data.to, data.amount ,timestamp, sig }   
  5.         // 非创世区块  
  6.     if (trans.from !== '0') {  
  7.             // 检验余额  
  8.         if (!(_that.blance < amount)) { //_that.blance 当前账户余额  
  9.             //全节点广播  
  10.             _that.send('trans', sigTrans)  
  11.         }else{  
  12.             console.log('not enough blance')  
  13.             return  
  14.         }  
  15.     }  
  16.     this.data.push(sigTrans)  
  17.     return sigTrans  

其他节点收到消息之后,先进行去重校验,然后再更新数据。

四、查询余额

这个链的查询方法比较简单,就是将区块中的每一条交易的信息进行校验和匹配,满足条件的就进行增减,同时忽略精度上的问题。

  1. this.blance = blance(address)  
  2. blance(address) {  
  3.        let blance = 0;  
  4.        this.blockchain.forEach(block => {  
  5.            block.data.forEach(trans => {  
  6.                if (address == trans.from) {  
  7.                    blance -= trans.amount  
  8.                }  
  9.                if (address == trans.to) {  
  10.                    blance += trans.amount 
  11.                }  
  12.            })  
  13.        });  
  14.        return blance  
  15.    } 

至此,区块链的最简单的功能就实现完毕。

【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:济南站长网)

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