摘要:前言是以太坊中一項非常有趣的技術(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是網(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的固有機制。
每個Envelope上寫明了自己封裝消息的Topic,如果一個節(jié)點不關(guān)心這個Topic,那么它就不需要去試著打開(解密)這個Envelope。通常一個Topic對應一個消息加密時使用的Key(無論是對稱還是非對稱加密)。所以,如果一個節(jié)點收到了一個關(guān)心的Topic的Envelope時,它應該能打開這個Envelope
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用來防止節(jié)點惡意大量發(fā)送消息,采用的算法和PoW共識算法差不多。消息的創(chuàng)建者需要找到一個nonce使得消息的Hash值小于一個值。這個值與消息的大小和TTL有關(guān),消息越大,TTL越大,則找到nonce越困難,計算工作量的公式為
其中$BestBit$為Hash值中從左往右第一個為1的bit所在的位置(這個值越大,則需要嘗試nonce的次數(shù)越多)
源碼分解本部分主要涉及Whisper filter envelope ,它們的聯(lián)系如下圖:
WhisperWhisper表示一個協(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表示一個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
摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接以太坊客戶端命令用法參數(shù)詳解原文已更新,請讀者前往原文閱讀在以太坊智能合約開發(fā)中最常用的工具必備開發(fā)工具,一個多用途的命令行工具。如果你還不知道是什么,請先閱讀入門篇以太坊是什么。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:以太坊客戶端Geth命令用法-參數(shù)詳解原文已更新,請讀者前往原文閱讀 Geth在以太坊智能合約開發(fā)中最常用的工具(必備開發(fā)工具),一...
摘要:以太坊論壇大名鼎鼎的以太坊論壇將不再維護,可能很快就會停用。以太坊基金會以太坊基金會是在瑞士注冊的非營利性機構(gòu),旨在管理以太幣銷售中籌措的基金,以更好地為以太坊和去中心化技術(shù)生態(tài)系統(tǒng)服務。 社區(qū)發(fā)起討論和問問題,請明智選擇論壇,并協(xié)助我們維護論壇環(huán)境整潔。 Reddit以太坊reddit分論壇是最全面的以太坊論壇,這里是大部分社區(qū)討論發(fā)生的地方和核心開發(fā)者最活躍的地方。如果你想對新聞、...
摘要:它同時會檢查確保沒有意外發(fā)送的以太幣。當任何以太幣被存入智能合約時,匿名函數(shù)會被執(zhí)行,并會自動拒絕接收以太幣。 作者:Alex Van de Sande譯者:王建/蔡佳慧譯者介紹: 王建:萬云平臺區(qū)塊鏈技術(shù)專家,擁有多年應用系統(tǒng)架構(gòu)經(jīng)驗,目前在區(qū)塊鏈落地方面進行積極探索 蔡佳慧:萬云平臺實習生,區(qū)塊鏈技術(shù)愛好者,英國帝國理工學院數(shù)學專業(yè)在讀 這篇教程是由以太坊Mist瀏覽器的負責人...
摘要:它同時會檢查確保沒有意外發(fā)送的以太幣。當任何以太幣被存入智能合約時,匿名函數(shù)會被執(zhí)行,并會自動拒絕接收以太幣。 作者:Alex Van de Sande譯者:王建/蔡佳慧譯者介紹: 王建:萬云平臺區(qū)塊鏈技術(shù)專家,擁有多年應用系統(tǒng)架構(gòu)經(jīng)驗,目前在區(qū)塊鏈落地方面進行積極探索 蔡佳慧:萬云平臺實習生,區(qū)塊鏈技術(shù)愛好者,英國帝國理工學院數(shù)學專業(yè)在讀 這篇教程是由以太坊Mist瀏覽器的負責人...
摘要:自年初以來,一直在推廣和分享以太坊及其生態(tài)系統(tǒng)方面的知識。你可以把想作是以太坊的。在任何外部數(shù)據(jù)源例如網(wǎng)絡和區(qū)塊鏈應用程序如以太坊方面的智能合約之間提供安全的認證通道。 從2018年3月8日到10日,來自世界各地的以太坊專業(yè)人士、研究人員、投資者和愛好者涌入了巴黎來參加以太坊社區(qū)會議(EthCC)。 EthCC是由一家法國的非盈利組織Asseth籌備組織的。Asseth自2016年初以...
閱讀 3031·2021-11-18 10:07
閱讀 3781·2021-11-17 17:00
閱讀 2111·2021-11-15 18:01
閱讀 938·2021-10-11 10:58
閱讀 3391·2021-09-10 10:50
閱讀 3465·2021-08-13 15:05
閱讀 1235·2019-08-30 15:53
閱讀 2659·2019-08-29 13:01