成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

以太坊源碼分析—Whisper

Doyle / 1591人閱讀

摘要:前言是以太坊中一項(xiàng)非常有趣的技術(shù),它是一個(gè)基于身份的通信系統(tǒng),被設(shè)計(jì)用于之間少量數(shù)據(jù)通信。協(xié)議運(yùn)行在以太坊協(xié)議框架之上,所有運(yùn)行協(xié)議的節(jié)點(diǎn)以下簡(jiǎn)稱(chēng)節(jié)點(diǎn)組成一個(gè)網(wǎng)絡(luò)。

[TOC]

前言

Whisper是以太坊中一項(xiàng)非常有趣的技術(shù),它是一個(gè)基于身份的通信系統(tǒng),被設(shè)計(jì)用于Dapp之間少量數(shù)據(jù)通信。Whisper協(xié)議運(yùn)行在以太坊p2p協(xié)議框架之上,所有運(yùn)行Whisper協(xié)議的節(jié)點(diǎn)(以下簡(jiǎn)稱(chēng)節(jié)點(diǎn))組成一個(gè)Whisper網(wǎng)絡(luò)。通過(guò)節(jié)點(diǎn)之間的消息轉(zhuǎn)發(fā),理論上,每個(gè)節(jié)點(diǎn)都可以收到所有Whisper消息。

特性

Whisper具有以下基本特性和概念

通信加密

每一條Whisper消息在網(wǎng)絡(luò)上都是加密傳輸?shù)?,可以選擇非對(duì)稱(chēng)加密(橢圓曲線(xiàn))和對(duì)稱(chēng)加密(AES GSM)兩種加密算法之一。

Envelope(信封)

Envelope是網(wǎng)絡(luò)中傳輸?shù)?b>Whisper消息的基本單位,它包含已加密的原始消息以及消息相關(guān)的控制信息:

Expiry time:消息的超時(shí)時(shí)刻,過(guò)了這個(gè)時(shí)刻,本消息不會(huì)被節(jié)點(diǎn)處理或者轉(zhuǎn)發(fā)

TTL:消息的存活時(shí)間,一個(gè)消息在從被創(chuàng)建起,只能生存TTL的時(shí)間,過(guò)了這個(gè)時(shí)間之后,消息在網(wǎng)絡(luò)中超時(shí)

Topic:消息的主題

AESNonce:采用AES對(duì)稱(chēng)密鑰加密算法時(shí)使用的Nonce值

EnvNonce:用于PoW計(jì)算

當(dāng)一個(gè)節(jié)點(diǎn)從一個(gè)Peer收到一個(gè)Envelope時(shí),不管它自己管不關(guān)心里面的數(shù)據(jù)(Topic是否符合設(shè)置的值), 它都會(huì)將這個(gè)Envelope轉(zhuǎn)發(fā)給其他Peer,這是Whisper的固有機(jī)制。

Topic(主題)

每個(gè)Envelope上寫(xiě)明了自己封裝消息的Topic,如果一個(gè)節(jié)點(diǎn)不關(guān)心這個(gè)Topic,那么它就不需要去試著打開(kāi)(解密)這個(gè)Envelope。通常一個(gè)Topic對(duì)應(yīng)一個(gè)消息加密時(shí)使用的Key(無(wú)論是對(duì)稱(chēng)還是非對(duì)稱(chēng)加密)。所以,如果一個(gè)節(jié)點(diǎn)收到了一個(gè)關(guān)心的TopicEnvelope時(shí),它應(yīng)該能打開(kāi)這個(gè)Envelope

Filter(過(guò)濾器)

Dapp 可以在節(jié)點(diǎn)上安裝多個(gè)Filter,每個(gè)Filter包含一組條件,只有滿(mǎn)足這些條件的Envelope才能被打開(kāi),準(zhǔn)確的說(shuō),不是節(jié)點(diǎn)打開(kāi)Envelope,而是節(jié)點(diǎn)上安裝的Filter打開(kāi)Envelope,每個(gè)Filter有一個(gè)緩沖區(qū)可以存儲(chǔ)解密后的消息,如果一個(gè)Envelope滿(mǎn)足多個(gè)Filter,那么這個(gè)消息會(huì)存儲(chǔ)在多個(gè)Filter中。Filter可以設(shè)置以下條件:

Topics:關(guān)心的主題的集合

Sender address:創(chuàng)建這個(gè)消息的節(jié)點(diǎn)

Recipient address:指定接收節(jié)點(diǎn)的地址

PoW requirement:消息需要的工作量證明

AcceptP2P:節(jié)點(diǎn)是否接收P2P消息,這類(lèi)消息有特殊的用途

Proof of Work(工作量證明)

Proof of Work用來(lái)防止節(jié)點(diǎn)惡意大量發(fā)送消息,采用的算法和PoW共識(shí)算法差不多。消息的創(chuàng)建者需要找到一個(gè)nonce使得消息的Hash值小于一個(gè)值。這個(gè)值與消息的大小和TTL有關(guān),消息越大,TTL越大,則找到nonce越困難,計(jì)算工作量的公式為

其中$BestBit$為Hash值中從左往右第一個(gè)為1的bit所在的位置(這個(gè)值越大,則需要嘗試nonce的次數(shù)越多)

源碼分解

本部分主要涉及Whisper filter envelope ,它們的聯(lián)系如下圖:

Whisper

Whisper表示一個(gè)協(xié)議實(shí)例,負(fù)責(zé)整個(gè)Whisper功能的運(yùn)行,其中比較重要的字段如下:

protocol - Whisper協(xié)議的特定值,最重要的是其中的Run字段,它表示該協(xié)議的運(yùn)行入口

filter - 本節(jié)點(diǎn)安裝的所有Filter

privateKeys - 本節(jié)點(diǎn)存儲(chǔ)的非對(duì)稱(chēng)密鑰對(duì)的集合,一個(gè)Whisper實(shí)例可以保存多個(gè)密鑰對(duì)

symKeys - 本屆點(diǎn)存儲(chǔ)的對(duì)稱(chēng)密鑰的集合,一個(gè)Whisper實(shí)例可以保存多個(gè)對(duì)稱(chēng)密鑰

envelopes - envelope池,保存所有待廣播發(fā)送的信封。信封池的存儲(chǔ)鍵值是envelope的Hash

expirations - 超時(shí)池,記錄envelope的的過(guò)期時(shí)間,超時(shí)池的存儲(chǔ)鍵值是unix時(shí)間,值是envelope的Hash

peers - 活躍的Peer節(jié)點(diǎn)的集合,數(shù)據(jù)來(lái)源是p2p底層

msgQueue - 普通Whisper消息的envelope處理通道

在以太坊源碼分析—p2p節(jié)點(diǎn)發(fā)現(xiàn)與協(xié)議運(yùn)行提到過(guò),兩個(gè)節(jié)點(diǎn)在底層連接建立后,會(huì)運(yùn)行共同支持的協(xié)議的Run函數(shù),對(duì)于Whisper協(xié)議來(lái)說(shuō),就是HandlerPeer函數(shù)。

HandlePeer最終運(yùn)行在兩個(gè)Go routine中,一個(gè)是Whisper.runMessageLoop(),它負(fù)責(zé)從底層讀取消息,另一個(gè)是Peer.update(),它負(fù)責(zé)周期性的將envelope池中的未發(fā)送的envelope發(fā)送到對(duì)端并將過(guò)期的envelope刪除。

Envelope

Envelope表示一個(gè)Whisper消息,它有兩個(gè)來(lái)源

出方向通過(guò)NewEnvelope()構(gòu)造

入方向從Peer節(jié)點(diǎn)接收

其重要的字段有

Topic - Envelope中的數(shù)據(jù)的主題,節(jié)點(diǎn)的Filter可以過(guò)濾感興趣的主題進(jìn)行解密

EnvNonce - 消息的創(chuàng)建者在PoW中找到的nonce

pow - 消息具有的pow值

消息發(fā)送的典型過(guò)程

以下是本節(jié)點(diǎn)廣播發(fā)送一小段數(shù)據(jù)payload,封裝到Envelope,再加入到Envelope池的過(guò)程,其中wh表示Whisper實(shí)例

首先構(gòu)造發(fā)送參數(shù),包括原始數(shù)據(jù)payload,主題Topic等

利用發(fā)送參數(shù)構(gòu)造SentMessage

根據(jù)發(fā)送參數(shù)將SentMessage封裝到新創(chuàng)建的Envelope,這一步包括簽名(sign)加密(encrypt)計(jì)算nonce(Seal)

Envelope加入Envelope池

消息接收的典型過(guò)程

以下是典型的Whisper消息接收過(guò)程,其中w表示Whisper實(shí)例

w.runMessageLoop()從底層收到Whisper消息,并解碼成Envelope,加入Envelope池,調(diào)用postEvent()向w.messageQueue寫(xiě)入這個(gè)事件

另一方面,當(dāng)w通過(guò)Start啟動(dòng)后,從w.messageQueue接收事件,開(kāi)始Filter匹配

用已安裝的每個(gè)Filter去匹配這個(gè)Envelope,如果匹配上,就將Envelope打開(kāi)(解密),最終將其放入Filter的緩沖區(qū)中。

demo

寫(xiě)了一個(gè)whipser的chat-room demo,托管在github上,感興趣可以瞧瞧

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/24379.html

相關(guān)文章

  • 以太客戶(hù)端Geth命令用法-參數(shù)詳解

    摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接以太坊客戶(hù)端命令用法參數(shù)詳解原文已更新,請(qǐng)讀者前往原文閱讀在以太坊智能合約開(kāi)發(fā)中最常用的工具必備開(kāi)發(fā)工具,一個(gè)多用途的命令行工具。如果你還不知道是什么,請(qǐng)先閱讀入門(mén)篇以太坊是什么。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:以太坊客戶(hù)端Geth命令用法-參數(shù)詳解原文已更新,請(qǐng)讀者前往原文閱讀 Geth在以太坊智能合約開(kāi)發(fā)中最常用的工具(必備開(kāi)發(fā)工具),一...

    Brenner 評(píng)論0 收藏0
  • 以太連載(五):以太社區(qū)、基金會(huì)、貢獻(xiàn)者介紹

    摘要:以太坊論壇大名鼎鼎的以太坊論壇將不再維護(hù),可能很快就會(huì)停用。以太坊基金會(huì)以太坊基金會(huì)是在瑞士注冊(cè)的非營(yíng)利性機(jī)構(gòu),旨在管理以太幣銷(xiāo)售中籌措的基金,以更好地為以太坊和去中心化技術(shù)生態(tài)系統(tǒng)服務(wù)。 社區(qū)發(fā)起討論和問(wèn)問(wèn)題,請(qǐng)明智選擇論壇,并協(xié)助我們維護(hù)論壇環(huán)境整潔。 Reddit以太坊reddit分論壇是最全面的以太坊論壇,這里是大部分社區(qū)討論發(fā)生的地方和核心開(kāi)發(fā)者最活躍的地方。如果你想對(duì)新聞、...

    KoreyLee 評(píng)論0 收藏0
  • 干貨 | 以太Mist負(fù)責(zé)人教你建立無(wú)服務(wù)器應(yīng)用

    摘要:它同時(shí)會(huì)檢查確保沒(méi)有意外發(fā)送的以太幣。當(dāng)任何以太幣被存入智能合約時(shí),匿名函數(shù)會(huì)被執(zhí)行,并會(huì)自動(dòng)拒絕接收以太幣。 作者:Alex Van de Sande譯者:王建/蔡佳慧譯者介紹:  王建:萬(wàn)云平臺(tái)區(qū)塊鏈技術(shù)專(zhuān)家,擁有多年應(yīng)用系統(tǒng)架構(gòu)經(jīng)驗(yàn),目前在區(qū)塊鏈落地方面進(jìn)行積極探索  蔡佳慧:萬(wàn)云平臺(tái)實(shí)習(xí)生,區(qū)塊鏈技術(shù)愛(ài)好者,英國(guó)帝國(guó)理工學(xué)院數(shù)學(xué)專(zhuān)業(yè)在讀 這篇教程是由以太坊Mist瀏覽器的負(fù)責(zé)人...

    villainhr 評(píng)論0 收藏0
  • 干貨 | 以太Mist負(fù)責(zé)人教你建立無(wú)服務(wù)器應(yīng)用

    摘要:它同時(shí)會(huì)檢查確保沒(méi)有意外發(fā)送的以太幣。當(dāng)任何以太幣被存入智能合約時(shí),匿名函數(shù)會(huì)被執(zhí)行,并會(huì)自動(dòng)拒絕接收以太幣。 作者:Alex Van de Sande譯者:王建/蔡佳慧譯者介紹:  王建:萬(wàn)云平臺(tái)區(qū)塊鏈技術(shù)專(zhuān)家,擁有多年應(yīng)用系統(tǒng)架構(gòu)經(jīng)驗(yàn),目前在區(qū)塊鏈落地方面進(jìn)行積極探索  蔡佳慧:萬(wàn)云平臺(tái)實(shí)習(xí)生,區(qū)塊鏈技術(shù)愛(ài)好者,英國(guó)帝國(guó)理工學(xué)院數(shù)學(xué)專(zhuān)業(yè)在讀 這篇教程是由以太坊Mist瀏覽器的負(fù)責(zé)人...

    JessYanCoding 評(píng)論0 收藏0
  • 2018年3月,以太的擴(kuò)展現(xiàn)狀|EthCC精選:Plasma Cash、Minimum Viabl

    摘要:自年初以來(lái),一直在推廣和分享以太坊及其生態(tài)系統(tǒng)方面的知識(shí)。你可以把想作是以太坊的。在任何外部數(shù)據(jù)源例如網(wǎng)絡(luò)和區(qū)塊鏈應(yīng)用程序如以太坊方面的智能合約之間提供安全的認(rèn)證通道。 從2018年3月8日到10日,來(lái)自世界各地的以太坊專(zhuān)業(yè)人士、研究人員、投資者和愛(ài)好者涌入了巴黎來(lái)參加以太坊社區(qū)會(huì)議(EthCC)。 EthCC是由一家法國(guó)的非盈利組織Asseth籌備組織的。Asseth自2016年初以...

    quietin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<