精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用Javascript實現簡單的小型區塊鏈

開發 前端 區塊鏈
這個區塊也叫創世區塊。通過這個創世區塊,不停地通過變化隨機數(nonce)來計算出符合條件的區塊。以下是創世區塊基本信息。

區塊鏈概念

狹義:區塊鏈是一種按照時間順序將數據區塊以順序相連的方式組合成的一種鏈式數據結構,并以密碼方式保證的不可篡改和不可偽造的分布式賬本。

一、挖礦(產生新區塊)

首先,區塊鏈是由每一個區塊聯系而形成的,在產生新區塊之前必須先有一個最初始的區塊,這個區塊也叫創世區塊。通過這個創世區塊,不停地通過變化隨機數(nonce)來計算出符合條件的區塊。以下是創世區塊基本信息: 

  1. const initBlock = {  
  2.     index: 0,  
  3.     data: 'hey,this is a block chain',  
  4.     previousHash: '0',  
  5.     timestamp: '1551806536961',  
  6.     nonce: 80490,  
  7.     hash: '0000352fb27dd1141fa7265833190a53e5776b1111e275db0d9a77bf840081e6'  
  8. }; 
  1.   index:是指每個區塊的序號
  2.   data: 這里存放著區塊中所有的信息,例如轉賬,余額等數據
  3.   previousHash: 指的是上一個區塊的hash值,創世區塊沒有上一個,顯示0即可
  4.   timestamp:指的是創建這個區塊的時間
  5.   nonce:這個是隨機數,挖礦就是通過不停變換這個nonce來計算出符合條件的哈希。
  6.   hash: 本區塊的hash值,通過前面5個字段的信息進行hash運算得出的值。

接著,通過不停的hash運算計算出符合條件的哈希,即挖礦。挖礦也可以調節難度的大小,例如算出的哈希值必須前3位數必須為1或者末3位數必須為1等等,這個可以自行的去定義,只要***留一個控制的開關,方便控制即可。可以在定義一個變量

哈希的計算: 

  1. .createHash('sha256')  
  2.  .update(index + data + previousHash + timestamp + nonce)  
  3.  .digest('hex')  
  1. _that.difficulty = 3 // 即前3位或者末3位數必須為1,數量越多難度越大 

生成了符合條件的hash之后,則產生了新的區塊,但是還要對這個區塊進行校驗看看是否有效,因為可能這是一個被篡改的非法的區塊,也有可能和這個鏈沒有任何關系的區塊而僅僅只是符合上述哈希的規則而已。所以,需要進行一下校驗,,前后區塊的有效性。 

  1. isValidaBlock(newBlock,lastBlock) {  
  2.      if (newBlock.index !== lastBlock.index+1) return false  
  3.      if (newBlock.previousHash !== lastBlock.hash) return false  
  4.      if (newBlock.timestamp <= lastBlock.timestamp) return false  
  5.      if (newBlock.hash.slice(1 ,_that.difficulty) !== '1'.repeat(_that.difficulty)) return false  
  6.      if (newBlock.hash !== this.computeHashForBlock(newBlock)) return false  //確保隨機數正確  
  7.         // 都滿足則返回true  
  8.         return true  
  9.     } 

除了上面的校驗之外,還需要使用上面這個函數對整一個chain進行一個每一個塊的校驗,以保證每一個塊的信息是正確的,是沒有被篡改過的是合法的。

二、構建P2P網絡

區塊鏈的網絡是去中心化的,即沒有中心服務器的網絡,客戶端不需要依賴中心服務器來獲取或者處理數據。區塊鏈網絡中,有這許許多多的節點,每個節點都是一個獨立的成員,他們既是客戶端也是服務器,節點與節點直接都是點對點進行連接(peer-to-peer),不需要通過某一個中心服務器進行中轉,所以,信息安全的角度來說,點對點的連接方式對信息私密性是非常可靠的。

[[261341]]

雖然,區塊鏈是通過點對點的連接方式進行數據傳輸,但是,在這之前還需要一個東西作為引導,這個就是種子節點。因為,兩個節點之間他們可能不是處在同一個域下,他們之間想要聯系,必須有一方知道對方的ip和端口,這樣才能和對方聯系上。節點ip和端口號,在這個節點創建出來之后,種子節點就會發給它在這個區塊鏈中所有節點的ip和端口號同時記錄下這個新伙伴的ip和端口號。那么,新的節點拿到了這一份"通訊錄"之后,就會給這個"通訊錄"中的所有小伙伴發個消息,告訴他們有一位新的小伙伴加入,之后,其他節點收到了這個信息,也會在自己的"通訊錄"中加上新伙伴的ip和端口號,相當于加入了白名單。這樣新的節點接下來就可以和任意的的節點進行通信了。

下面用代碼演示一下: 

  1. (res)=> 
  2.   _that.remotePeerInfo = res.data.data   //1  
  3.   _that.addPeersList(res.peersList)             //2  
  4.   _that.boardCast(_that.remotePeerInfo)    //3  
  5.   _that.blockChainUpdate(blockChain,blockData)     //4  
  6.  
  7. addPeersList(peers) {  
  8.     peers.forEach(peer => {  
  9.         if (!_that.peers.find(v => _that.isEqualPeer(peer, v))) {  
  10.             _that.peers.push(peer)  
  11.         }  
  12.     })  
  13.  
  14. boardCast(remotePeerInfo) {  
  15.     this.peers.forEach(v => {  
  16.         this.send(action, v.port, v.address)  
  17.     })  
  18.  
  19. blockChainUpdate(blockChain,blockData){  
  20.   if(newChain.length === 1 ){  
  21.     return  
  22.     }  
  23.     if(_that.isValidaChain(newChain) && newChain.length>_that.blockchain.length){  
  24.     _that.blockchain = Object.assign({}, newChain)  
  25.     }else{  
  26.     console.log('error')  
  27.     return  
  28.     }  
  29.     if (trans.every(v => _that.isValidTransfer(v))) {  
  30.     _that.data = trans  
  31.     } 

1.保存種子節點傳來的此新節點的信息包括ip和端口號,因為,新節點的ip和端口號是會有改變的情況。

2.接受種子節點傳來的節點列表,將列表的節點遍歷檢查一下,沒有相同的就寫進列表中。

3.將新節點的信息廣播到所有的節點上,同時接受到信息的節點更新一下節點列表

4.將區塊鏈上信息同步一份都本地,同時對種子節點傳來的blockchain進行每個區塊的信息

三、轉賬交易

BTC的交易模型是使用的是UTXO。

而這個小型區塊鏈的交易模型使用的是最簡單的方法。

區塊鏈中"現金”,它是一個虛擬的東西就是一個字符串,來源于挖礦。每次挖礦成功都會有一定的獎勵,得到的這些“錢”就可以在區塊鏈網絡中自由的轉賬交易。

在區塊鏈中,進行記錄轉賬交易的時候是需要一個加密的算法,把所有的信息進行加密之后再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.     }  

轉帳的時候需要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.    } 

至此,區塊鏈的最簡單的功能就實現完畢。 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2021-04-09 06:25:41

區塊鏈區塊鏈技術

2021-04-09 20:04:34

區塊鏈Go加密

2021-04-08 18:39:57

JavaScriptExpress區塊鏈

2019-01-24 15:50:06

區塊鏈數字貨幣比特幣

2023-02-01 08:00:00

Kubernetes區塊鏈微服務

2021-07-29 16:58:22

區塊鏈比特幣數字貨幣

2022-07-18 23:49:19

區塊鏈民主數據

2018-05-15 10:26:10

區塊鏈數字貨幣比特幣

2018-09-13 13:52:08

2022-01-10 10:56:37

區塊鏈技術比特幣

2017-11-16 14:25:04

WOT峰會

2021-08-11 14:37:27

區塊鏈加密貨幣技術

2022-11-21 17:50:32

區塊鏈數實融合數字經濟

2021-09-23 22:40:10

區塊鏈比特幣技術

2020-05-13 09:45:08

區塊鏈公共區塊鏈私有區塊鏈

2018-04-02 16:35:57

區塊鏈數字貨幣比特幣

2018-03-27 09:52:30

區塊鏈數字貨幣比特幣

2022-10-26 08:42:28

2022-01-19 15:11:34

區塊鏈云計算安全

2019-04-18 13:40:31

區塊鏈分布式賬本數據庫
點贊
收藏

51CTO技術棧公眾號

亚洲午夜久久久久久久久红桃| 糖心vlog在线免费观看| 日本成人一级片| 国产精品不卡| 亚洲国产精品久久久久秋霞蜜臀 | 一区二区亚洲精品| 亚洲人成网站免费播放| 日本美女久久久| 成人性生活av| 一区二区三区在线视频免费 | 岛国精品视频在线播放| 亚洲欧洲日韩精品| 日韩有码第一页| 久久99国产乱子伦精品免费| 性色av一区二区三区免费| 2019男人天堂| 香蕉一区二区| 精品欧美一区二区在线观看| 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 日本少妇bbwbbw精品| 日韩欧美视频在线播放| 日韩av在线网站| 特黄特色免费视频| 亚洲在线资源| 在线观看亚洲精品视频| 玩弄中年熟妇正在播放| a在线免费观看| 日本一区二区视频在线| 久久精品国产第一区二区三区最新章节| 一本一道精品欧美中文字幕| 久久午夜av| 97色在线观看免费视频| 青娱乐国产精品| 婷婷精品进入| 最近2019免费中文字幕视频三| 亚洲成人日韩在线| 久久综合五月婷婷| 日韩精品中文字幕一区| 四虎1515hh.com| 四虎国产精品免费久久5151| 91福利国产成人精品照片| 尤物av无码色av无码| 日本大片在线播放| 亚洲精品国产视频| 日本精品福利视频| 午夜伦理在线| 中文字幕一区二区三区色视频| 日本一区二区久久精品| 男人的天堂在线视频| 99久久婷婷国产综合精品| 国产一区二区三区四区hd| 精品国产黄色片| 国产成人午夜高潮毛片| 亚洲综合在线中文字幕| 国产极品999| 国产成人精品aa毛片| 91免费在线观看网站| 国产不卡av在线播放| 国产一区免费电影| 亚洲最大av网| 亚洲免费国产视频| av一区二区久久| 欧美理论一区二区| 午夜免费福利在线观看| 亚洲三级在线免费观看| 永久免费网站视频在线观看| 黄网在线免费看| 黄网动漫久久久| 91av俱乐部| 欧美黄页在线免费观看| 欧美一区二区在线免费播放| 免费观看一区二区三区| 欧亚精品一区| 亚洲网址你懂得| www欧美com| 亚洲国产高清视频| 日韩暖暖在线视频| 国产美女主播在线观看| 成人免费的视频| 欧美美乳视频网站在线观看| 亚洲xxxxxx| 亚洲最新在线观看| 欧美牲交a欧美牲交aⅴ免费下载| 亚洲爱爱视频| 欧美一区二区视频在线观看2020| 亚洲麻豆一区二区三区| 精品国产一区探花在线观看| 久久资源免费视频| 可以免费看的av毛片| 日本在线观看不卡视频| av一本久道久久波多野结衣| 日韩精品福利| 亚洲同性同志一二三专区| 欧美日韩视频免费| 日韩三区免费| 日韩欧美亚洲另类制服综合在线| 97人妻精品一区二区三区免| 久久综合成人| 91极品视频在线| 99草在线视频| 久久久久88色偷偷免费| 成人在线观看毛片| 性欧美超级视频| 精品少妇一区二区三区| 99久久99久久精品免费看小说.| 欧美精品麻豆| 国产九九精品视频| 亚洲欧洲国产综合| 亚洲精品自拍动漫在线| 人人干人人视频| 国产毛片久久久| 久久人体大胆视频| 亚洲av中文无码乱人伦在线视色| 国产精品99久久久久久似苏梦涵| 日本成人三级| 在线天堂资源www在线污| 欧美一级黄色片| 粉嫩精品久久99综合一区| 中文日韩欧美| eeuss一区二区三区| 91大神在线网站| 色综合久久综合网| 最近中文字幕无免费| 在线精品视频在线观看高清| 国产精品嫩草视频| 国产尤物视频在线| 欧美性xxxxx极品| 大尺度在线观看| 国产精品videosex极品| 成人免费淫片aa视频免费| 成人性爱视频在线观看| 色综合网站在线| 一区二区三区免费在线观看视频| 欧美成人亚洲| 99国产在线视频| 污网站在线免费看| 精品国产一区二区三区久久影院| 欧美激情图片小说| 国产在线麻豆精品观看| 一本—道久久a久久精品蜜桃| 日韩精品第一| 这里只有精品丝袜| 亚洲字幕av一区二区三区四区| 国产日韩亚洲欧美综合| 欧美黑人又粗又大又爽免费| 自拍自偷一区二区三区| 欧洲s码亚洲m码精品一区| 偷拍自拍在线视频| 欧美性猛交xxxx黑人猛交| 黄色正能量网站| 亚洲一区欧美二区| 免费一区二区三区| 香蕉成人影院| 日韩在线观看网站| 国产精品久久影视| 夜夜爽夜夜爽精品视频| 四虎精品一区二区| 国产免费成人| 天堂一区二区三区| 曰本一区二区| 欧美激情区在线播放| 男人的天堂a在线| 精品欧美国产一区二区三区| 欧美亚一区二区三区| 日本中文字幕一区二区有限公司| 亚洲欧美国产一区二区| 欧美国产亚洲精品| 97视频免费在线看| 成人18在线| 日韩一区二区电影网| 国产在线观看免费视频今夜| 久久女同精品一区二区| 五月天av在线播放| 欧美日韩一区二区三区四区在线观看| 国产精品久久亚洲| 日韩免费小视频| 欧美尺度大的性做爰视频| 日韩一区免费视频| 欧美日韩中文一区| 久久国产精品波多野结衣av| 91美女视频网站| 亚洲男人天堂av在线| 亚洲美女视频在线免费观看| 日本一区美女| 亚洲精品v亚洲精品v日韩精品| 97精品国产97久久久久久春色| 成人免费在线观看| 欧美成人精品福利| 国产精品尤物视频| 亚洲国产一区二区视频| 久久精品—区二区三区舞蹈| 国产成人亚洲精品青草天美| 国产xxxxx视频| 在线成人欧美| 亚洲一区二区免费视频软件合集| 大香伊人久久精品一区二区| 国产精品成人aaaaa网站| 香蕉成人app免费看片| 亚洲欧美日本另类| 亚洲av无码乱码国产精品| 欧美在线不卡视频| 国产无码精品一区二区| 国产免费成人在线视频| 漂亮人妻被黑人久久精品| 久久草av在线| 成年人网站大全| 亚洲国产精品第一区二区| 亚洲一区二区在线免费观看| 欧美日韩导航| 99国内精品久久久久久久软件| 国产美女久久| 欧洲成人免费视频| heyzo在线| 欧美精品在线免费播放| 日本黄色片在线观看| 亚洲精品自产拍| 欧美 日韩 国产 精品| 欧美一区二区三区在线| 国产精品午夜一区二区| 日韩欧美在线观看视频| 欧美日韩中文视频| 亚洲精品国产一区二区三区四区在线| 一级黄色片网址| 91美女精品福利| 最近日本中文字幕| 成人高清在线视频| 人妻换人妻仑乱| 狠狠色伊人亚洲综合成人| 日韩欧美黄色大片| 羞羞答答国产精品www一本| 99热久久这里只有精品| 黄色亚洲免费| 18禁裸男晨勃露j毛免费观看| 在线成人激情| 国产一区二区三区播放| 中文字幕亚洲精品乱码| 亚洲综合首页| 国产精品久久久乱弄| 亚洲国产欧洲综合997久久| 欧美日韩伦理| 日韩三级电影| 欧美日韩中文字幕一区二区三区 | 欧美性猛交xx| 国产剧情一区二区三区| 亚洲热在线视频| 国产成人99久久亚洲综合精品| 原创真实夫妻啪啪av| 国产精品一区一区三区| 亚洲午夜精品在线观看| 福利一区二区在线| 亚洲午夜久久久久久久久| 国产suv精品一区二区6| 精品无码人妻少妇久久久久久| 成人国产精品免费观看动漫| 国产又黄又粗又猛又爽的视频 | 日本一区网站| 日韩大片在线播放| 国产奶头好大揉着好爽视频| 欧美暴力喷水在线| 欧美国产日韩激情| 国产日韩一区二区三区在线| 成人一级片网站| 麻豆成人久久精品二区三区红| 成人黄色一级大片| 国产精品123区| 成年人的黄色片| 国产婷婷一区二区| 免费在线观看黄色小视频| 亚洲特级片在线| 激情综合网五月婷婷| 在线视频一区二区三| 国产精品久久久久久无人区| 精品国产乱码久久久久久蜜臀| 你懂的免费在线观看视频网站| 在线性视频日韩欧美| 菠萝蜜视频国产在线播放| 国内精品久久久久久久| 欧美黑人一区| 亚洲资源在线看| 亚洲精品aaaaa| 天天爱天天做天天操| 韩日在线一区| 日本中文字幕高清| 福利视频网站一区二区三区| 91精品人妻一区二区三区| 亚洲日本丝袜连裤袜办公室| 久草视频在线观| 欧美日韩电影一区| 亚洲人妻一区二区| www.日韩不卡电影av| 国产h片在线观看| 国产一区二区在线免费视频| 黄色成人美女网站| 一区二区在线观看网站| 一二三区精品| 四虎成人在线播放| 国产欧美视频一区二区| www青青草原| 91久久精品一区二区| 国产91绿帽单男绿奴| 日韩最新在线视频| 高清av不卡| 国产高清精品一区二区| 欧美freesextv| 日韩欧美精品在线观看视频| 国产酒店精品激情| 成年人视频软件| 色综合天天综合| 欧美 日韩 国产 成人 在线| 精品久久久999| 韩国成人在线| 免费观看成人高| 99精品视频免费观看视频| 特级黄色片视频| 国产精品久久99| 国产成人av免费| 亚洲精品一区在线观看香蕉| aa国产成人| 国产日韩在线一区二区三区| 在线中文一区| 天天操天天干天天做| 中文一区二区完整视频在线观看 | 高h视频在线播放| 成人激情视频小说免费下载| 成人vr资源| 在线免费视频a| 国产亚洲制服色| 你懂的国产在线| 亚洲欧美国产另类| 中文在线免费二区三区| 精品国产免费一区二区三区 | 97久久伊人激情网| 给我免费播放日韩视频| 波多野结衣 作品| 国产精品99久久久| 免费看一级大片| 9191久久久久久久久久久| 午夜不卡视频| 成人a级免费视频| 亚洲色图网站| 无套内谢丰满少妇中文字幕| 亚洲天堂免费看| 国产福利资源在线| 欧美成人久久久| 一级毛片精品毛片| 国产自产在线视频| 91色在线porny| 亚洲s码欧洲m码国产av| 精品亚洲永久免费精品| 六月婷婷综合| 亚洲精品中文字幕在线| 麻豆精品久久精品色综合| 911国产在线| 欧美一区二区三区在| 日韩激情美女| 精品中文字幕人| 老司机精品久久| 亚洲欧美综合7777色婷婷| 91麻豆精品国产自产在线 | 欧美怡红院视频一区二区三区| 日韩高清电影免费| 91av在线免费播放| 一区在线观看视频| 性中国xxx极品hd| 538国产精品一区二区在线 | 国产一区二区三区18| 成人福利片在线| 国产一级大片免费看| 99精品国产99久久久久久白柏| 伊人中文字幕在线观看| 视频直播国产精品| 一区二区精彩视频| 精品久久久久av| 亚洲欧美在线另类| 天堂中文字幕av| 国产精品日韩电影| 欧美三级特黄| 性高潮久久久久久久| 欧美日韩国产一区二区三区地区| 一二三四区在线观看| 美国av一区二区三区| 九色综合狠狠综合久久| 国产无遮挡裸体免费视频| 中日韩美女免费视频网站在线观看| 玖玖玖视频精品| 久久久免费视频网站| 亚洲欧美日韩中文播放| 青青草视频免费在线观看| 亚洲字幕在线观看| 久久久久久黄| 九九视频免费在线观看| 伊人青青综合网站| 亚州一区二区| 亚洲大胆人体av| 国产 中文 字幕 日韩 在线| 欧美精品一区二区三区精品| www.欧美精品| 欧美精品一二三四区| 久久精品午夜| 99视频在线视频|