成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

以太坊源碼分析—Whisper

Doyle / 1545人閱讀

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

[TOC]

前言

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

特性

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

通信加密

每一條Whisper消息在網(wǎng)絡上都是加密傳輸?shù)模梢赃x擇非對稱加密(橢圓曲線)和對稱加密(AES GSM)兩種加密算法之一。

Envelope(信封)

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

Expiry time:消息的超時時刻,過了這個時刻,本消息不會被節(jié)點處理或者轉(zhuǎn)發(fā)

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

Topic:消息的主題

AESNonce:采用AES對稱密鑰加密算法時使用的Nonce值

EnvNonce:用于PoW計算

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

Topic(主題)

每個Envelope上寫明了自己封裝消息的Topic,如果一個節(jié)點不關(guān)心這個Topic,那么它就不需要去試著打開(解密)這個Envelope。通常一個Topic對應一個消息加密時使用的Key(無論是對稱還是非對稱加密)。所以,如果一個節(jié)點收到了一個關(guān)心的TopicEnvelope時,它應該能打開這個Envelope

Filter(過濾器)

Dapp 可以在節(jié)點上安裝多個Filter,每個Filter包含一組條件,只有滿足這些條件的Envelope才能被打開,準確的說,不是節(jié)點打開Envelope,而是節(jié)點上安裝的Filter打開Envelope,每個Filter有一個緩沖區(qū)可以存儲解密后的消息,如果一個Envelope滿足多個Filter,那么這個消息會存儲在多個Filter中。Filter可以設置以下條件:

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

Sender address:創(chuàng)建這個消息的節(jié)點

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

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

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

Proof of Work(工作量證明)

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

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

源碼分解

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

Whisper

Whisper表示一個協(xié)議實例,負責整個Whisper功能的運行,其中比較重要的字段如下:

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

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

privateKeys - 本節(jié)點存儲的非對稱密鑰對的集合,一個Whisper實例可以保存多個密鑰對

symKeys - 本屆點存儲的對稱密鑰的集合,一個Whisper實例可以保存多個對稱密鑰

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

expirations - 超時池,記錄envelope的的過期時間,超時池的存儲鍵值是unix時間,值是envelope的Hash

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

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

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

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

Envelope

Envelope表示一個Whisper消息,它有兩個來源

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

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

其重要的字段有

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

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

pow - 消息具有的pow值

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

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

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

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

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

Envelope加入Envelope池

消息接收的典型過程

以下是典型的Whisper消息接收過程,其中w表示Whisper實例

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

另一方面,當w通過Start啟動后,從w.messageQueue接收事件,開始Filter匹配

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

demo

寫了一個whipser的chat-room demo,托管在github上,感興趣可以瞧瞧

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/24379.html

相關(guān)文章

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

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

    Brenner 評論0 收藏0
  • 以太連載(五):以太社區(qū)、基金會、貢獻者介紹

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

    KoreyLee 評論0 收藏0
  • 干貨 | 以太Mist負責人教你建立無服務器應用

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

    villainhr 評論0 收藏0
  • 干貨 | 以太Mist負責人教你建立無服務器應用

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

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

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

    quietin 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<