單元五 區(qū)塊鏈中節(jié)點間的通信_第1頁
單元五 區(qū)塊鏈中節(jié)點間的通信_第2頁
單元五 區(qū)塊鏈中節(jié)點間的通信_第3頁
單元五 區(qū)塊鏈中節(jié)點間的通信_第4頁
單元五 區(qū)塊鏈中節(jié)點間的通信_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

單元五區(qū)塊鏈中節(jié)點間的通信CommunicaitoninNodesPART1區(qū)塊鏈網(wǎng)絡(luò)基礎(chǔ)公有鏈區(qū)塊鏈網(wǎng)絡(luò)一般具有數(shù)量多、分布廣、自治以及開發(fā)自由等特點,一般采用P2P對等網(wǎng)絡(luò)通信的方式區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點均會承擔(dān)網(wǎng)絡(luò)路由、驗證數(shù)據(jù)、傳播數(shù)據(jù)以及發(fā)現(xiàn)節(jié)點等功能采用的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)為Mesh網(wǎng)絡(luò)(即網(wǎng)狀拓?fù)浣Y(jié)構(gòu))聯(lián)盟鏈區(qū)塊鏈網(wǎng)絡(luò)適用于企業(yè)間進(jìn)行高頻的數(shù)據(jù)交換以及工業(yè)生產(chǎn)中存在的高頻數(shù)據(jù)記錄等業(yè)務(wù)將多個參與者構(gòu)建為獨立的聯(lián)盟,在聯(lián)盟內(nèi)的成員采用區(qū)塊鏈的形式管理數(shù)據(jù)聯(lián)盟與聯(lián)盟間將以物理的形式實現(xiàn)“數(shù)據(jù)隔離”,降低區(qū)塊鏈網(wǎng)絡(luò)的拓?fù)鋸?fù)雜,提升效率私有鏈區(qū)塊鏈網(wǎng)絡(luò)集中于公司或組織的內(nèi)部使用,類似于傳統(tǒng)中心化網(wǎng)絡(luò)構(gòu)建私有鏈網(wǎng)絡(luò),所有數(shù)據(jù)都保存于一個中心節(jié)點中。借助區(qū)塊鏈技術(shù)實現(xiàn)數(shù)據(jù)的安全和隱私保護(hù)PART2Networkx實現(xiàn)區(qū)塊鏈網(wǎng)絡(luò)繪制區(qū)塊鏈網(wǎng)絡(luò)1.安裝Networkx確保Python版本為3.6+,使用pip可直接安裝,確保具體命令如下:$pipinstallnetworkx若要升級到較新版本,請使用--upgrade,具體操作如下:$pipinstall--upgradenetworkx繪制區(qū)塊鏈網(wǎng)絡(luò)2.創(chuàng)建圖形(Graph)使用工具的第一步,創(chuàng)建一個沒有節(jié)點和邊的空圖形,具體代碼如下:importnetworkxasnxG=nx.Graph()繪制區(qū)塊鏈網(wǎng)絡(luò)3.添加節(jié)點(Node)(1)直接添加節(jié)點如下為直接添加一個節(jié)點的代碼示例:G.add_node(1)(2)通過可迭代對象添加節(jié)點如下為添加的代碼示例:G.add_nodes_from([2,3])繪制區(qū)塊鏈網(wǎng)絡(luò)4.添加邊(Edge)(1)直接添加如下為直接添加邊的代碼示例:G.add_edge(1,2)(2)通過可迭代對象添加如下為具體代碼示例:G.add_edges_from([(1,2),(1,3)])繪制區(qū)塊鏈網(wǎng)絡(luò)5.檢查圖的元素信息

完成圖、節(jié)點和邊信息添加后,可通過相關(guān)方法檢查。具體操作如下:print(list(G.nodes))#顯示圖中的節(jié)點信息print(list(G.edges))#顯示圖中的邊信息print(G.number_of_nodes())#顯示圖中節(jié)點數(shù)量print(G.number_of_edges()) #顯示圖中邊數(shù)量print(G.nodes()[1])#獲取名稱為1的節(jié)點完整信息繪制區(qū)塊鏈網(wǎng)絡(luò)6.從圖中刪除元素如下代碼可實現(xiàn)從已存在的圖中刪除節(jié)點和邊:G.remove_node(2)#刪除名稱為2的節(jié)點G.remove_edge(1,3)#刪除節(jié)點1和節(jié)點3的邊繪制區(qū)塊鏈網(wǎng)絡(luò)7.向圖形、節(jié)點和邊緣添加屬性(1)向圖形添加屬性通過向nx.Graph()函數(shù)中添加參數(shù)可以實現(xiàn)屬性的添加具體的屬性設(shè)置和獲取代碼如下:G=nx.Graph(name="test_network")print(G.graph['name'])或者可以直接通過G.graph設(shè)置圖形的屬性,具體代碼如下:G.graph['location']='china'print(G.graph['location'])繪制區(qū)塊鏈網(wǎng)絡(luò)7.向圖形、節(jié)點和邊緣添加屬性(2)向節(jié)點添加屬性與圖形添加屬性的方法類似,節(jié)點添加也有兩種方式,具體代碼示例如下:G.add_node(4,name='test4')#直接添加節(jié)點和對應(yīng)屬性G.add_nodes_from([5,6],location='jiangsu')#通過迭代的方式添加節(jié)點和屬性print(list(G.nodes.data()))#輸出添加節(jié)點后的節(jié)點及屬性信息繪制區(qū)塊鏈網(wǎng)絡(luò)7.向圖形、節(jié)點和邊緣添加屬性(3)向邊添加屬性參照圖形以及節(jié)點的屬性添加方法,邊設(shè)置屬性可以有如下代碼示例:G.add_edge(4,5,weight=4)#直接添加邊屬性G.add_edges_from([(1,2,{'color':'blue'}),(4,6,{'weight':'5'})])#通過添加可迭代對象G[1][2]['weight']=8#給已存在的邊添加屬性繪制區(qū)塊鏈網(wǎng)絡(luò)8.繪制簡單網(wǎng)絡(luò)如下代碼為使用networkx生成示例圖和繪制圖形的示例代碼:importnetworkxasnximportmatplotlib.pyplotaspltG=nx.Graph()G.add_node(1)G.add_node(2)G.add_node(3)G.add_edges_from([(1,2),(2,3),(3,1)])nx.draw(G)plt.show()實戰(zhàn)練習(xí):繪制不同類型的區(qū)塊鏈網(wǎng)絡(luò)1.練習(xí)目標(biāo)使用networkx繪制不同類型的區(qū)塊鏈網(wǎng)絡(luò),包括公有鏈網(wǎng)絡(luò)、聯(lián)盟鏈網(wǎng)絡(luò)以及私有鏈網(wǎng)絡(luò)。2.任務(wù)內(nèi)容(1)使用networkx工具繪制私有鏈區(qū)塊鏈網(wǎng)絡(luò),并保存繪制結(jié)果。(2)使用networkx工具繪制聯(lián)盟有鏈區(qū)塊鏈網(wǎng)絡(luò),并保存繪制結(jié)果。(3)使用networkx工具繪制公有鏈區(qū)塊鏈網(wǎng)絡(luò),并保存繪制結(jié)果。感謝觀看單元五區(qū)塊鏈中節(jié)點間的通信CommunicaitoninNodesPART1P2P網(wǎng)絡(luò)通信基礎(chǔ)概念P2P的英文全稱為peer-to-peer,中文全稱為對等式網(wǎng)絡(luò),又稱點對點技術(shù),是無中心服務(wù)器、依靠用戶群(peers)交換信息的互聯(lián)網(wǎng)體系。Socket通信Socket通過中文直譯為“套接字”,是在P2P網(wǎng)絡(luò)通信常用的通信手段。從原理上講,Socket并不是一種通信協(xié)議而是一個介于應(yīng)用層與傳輸層之間的抽象層TCP/IP參考模型Socket通信與傳統(tǒng)網(wǎng)絡(luò)通信方式類似,Socket的通信主體包括客戶端和服務(wù)端。在客戶端和服務(wù)端均創(chuàng)建Socket對象后,雙方就可以實現(xiàn)數(shù)據(jù)通信。在數(shù)據(jù)傳輸方面,服務(wù)端將開啟一個輪詢機(jī)制,不斷監(jiān)聽客戶端發(fā)送的請求,并根據(jù)請求信息給予響應(yīng)PART2P2P網(wǎng)絡(luò)通信的程序?qū)崿F(xiàn)基于Socket實現(xiàn)P2P通信1.創(chuàng)建Socket服務(wù)端(1)安裝依賴使用pip可以安裝依賴包,具體操作如下:#首先安裝flask依賴$pipinstallflask#再安裝flask-socketio依賴$pipinstallflask-socketio基于Socket實現(xiàn)P2P通信1.創(chuàng)建Socket服務(wù)端(2)創(chuàng)建socket接口并啟動基于Socket實現(xiàn)P2P通信2.創(chuàng)建Socket客戶端(1)安裝依賴使用pip執(zhí)行以下操作進(jìn)行安裝,具體操作如下:$pipinstall"python-socketio[client]"基于Socket實現(xiàn)P2P通信2.創(chuàng)建Socket客戶端(2)實現(xiàn)Socket請求根據(jù)如下代碼可實現(xiàn)Socket請求,具體內(nèi)容如下:PART3區(qū)塊鏈節(jié)點的定時通信實現(xiàn)方法基于Flask-APScheduler定時器(1)安裝使用pip工具可完成操作,具體操作如下:$pipinstallflask-apscheduler(2)創(chuàng)建定時器①

通過配置的方式創(chuàng)建定時器② 以裝飾器的方式創(chuàng)建定時器感謝觀看單元五基于Socket的區(qū)塊鏈P2P網(wǎng)絡(luò)通信PART1P2P通信基礎(chǔ)基礎(chǔ)概念P2P的英文全稱為peer-to-peer,中文全稱為對等式網(wǎng)絡(luò),又稱點對點技術(shù),是無中心服務(wù)器、依靠用戶群(peers)交換信息的互聯(lián)網(wǎng)體系。Socket通信與傳統(tǒng)網(wǎng)絡(luò)通信方式類似,Socket的通信主體包括客戶端和服務(wù)端。在客戶端和服務(wù)端均創(chuàng)建Socket對象后,雙方就可以實現(xiàn)數(shù)據(jù)通信。在數(shù)據(jù)傳輸方面,服務(wù)端將開啟一個輪詢機(jī)制,不斷監(jiān)聽客戶端發(fā)送的請求,并根據(jù)請求信息給予響應(yīng)PART2構(gòu)建區(qū)塊鏈P2P網(wǎng)絡(luò)通信通信實現(xiàn)方式基于Socket可以實現(xiàn)P2P網(wǎng)絡(luò)通信。基于P2P網(wǎng)絡(luò)通信原理,每個屬于P2P網(wǎng)絡(luò)的節(jié)點同時具備數(shù)據(jù)發(fā)送和數(shù)據(jù)接收的功能。那么,可以在每個節(jié)點上同時構(gòu)建客戶端和服務(wù)端,實現(xiàn)點對點通信構(gòu)建步驟第一步,創(chuàng)建socket1.py(存放節(jié)點1即socket1代碼)、socket2.py(存放節(jié)點2即socket2代碼)。第二步,分別在Python文件中放入包含Socket客戶端和服務(wù)端的代碼。第三步,分別啟動socket1和socket2節(jié)點。第四步,驗證代碼正確性。PART2功能代碼實現(xiàn)感謝觀看單元五Gossip的基本概念

PART1Gossip基本概念相關(guān)背景

與中心化系統(tǒng)不同,區(qū)塊鏈網(wǎng)絡(luò)由于采用了P2P通信,網(wǎng)絡(luò)中不存在中心節(jié)點,網(wǎng)絡(luò)中的節(jié)點既可以充當(dāng)數(shù)據(jù)發(fā)送節(jié)點s也可充當(dāng)數(shù)據(jù)接收節(jié)點,一方面這提高了區(qū)塊鏈的健壯性,但這也加大了區(qū)塊鏈網(wǎng)絡(luò)的管理難度。為了合理管控節(jié)點的數(shù)據(jù)通信,區(qū)塊鏈采用包括Gossip、kedemlia等協(xié)議規(guī)定數(shù)據(jù)通信準(zhǔn)則,提高傳輸效率。Gossip的基本概念

Gossip英譯的結(jié)果為“流言”。受現(xiàn)實社會中流言蜚語或病毒的傳播方式啟發(fā),Gossip在控制數(shù)據(jù)傳輸?shù)奶攸c為在計算機(jī)網(wǎng)絡(luò)中,節(jié)點只能隨機(jī)地與周圍節(jié)點通信,在經(jīng)過一段時間雜亂通信后最終形成數(shù)據(jù)通信的動態(tài)穩(wěn)定。Gossip與P2P的關(guān)系Gossip是區(qū)塊鏈網(wǎng)絡(luò)信息傳輸?shù)耐ㄐ拍J絽^(qū)塊鏈網(wǎng)絡(luò)節(jié)點間使用P2P的方式進(jìn)行數(shù)據(jù)傳輸node1node2node3node5node4P2PP2PP2PP2PP2PGossip機(jī)制PART2Gossip的通信模式Pull模式在此模式下,網(wǎng)絡(luò)中的所有節(jié)點都將不斷向相鄰節(jié)點發(fā)送詢問請求,詢問是否有新數(shù)據(jù),相鄰節(jié)點收到詢問請求后將給予回復(fù),若有新數(shù)據(jù)則會將數(shù)據(jù)打包在回復(fù)中發(fā)送。假設(shè)有節(jié)點A和與其相鄰的B、C、D節(jié)點,那么Pull模式的具體實現(xiàn)步驟如下。(1)節(jié)點A以固定時間間隔T,循環(huán)發(fā)出詢問請求,詢問請求的內(nèi)容為“是否有新數(shù)據(jù)?”,每次循環(huán)將隨機(jī)選取相鄰節(jié)點發(fā)送詢問請求。(2)相鄰節(jié)點收到詢問請求將檢索本節(jié)點存儲的數(shù)據(jù),若存在新數(shù)據(jù)則會將其打包進(jìn)請求對應(yīng)的回復(fù)中。(3)節(jié)點B、C、D將執(zhí)行與節(jié)點A相同的操作。Push模式在此模式下,節(jié)點會向相鄰節(jié)點以循環(huán)的方式發(fā)送消息,相鄰節(jié)點在接收到消息后將判斷是否存在新數(shù)據(jù),若存在新數(shù)據(jù)則會保存。假設(shè)有節(jié)點A和與其相鄰的B、C、D節(jié)點,那么Push模式的具體實現(xiàn)步驟如下。(1)節(jié)點A以循環(huán)的方式隨機(jī)選取B、C、D節(jié)點發(fā)送消息。(2)相鄰節(jié)點在接收到節(jié)點A的消息后判斷是否存在新數(shù)據(jù),若存在新數(shù)據(jù)則保存。(3)節(jié)點B、C、D將執(zhí)行與節(jié)點A相同的操作。感謝觀看單元五基于Flask-APScheduler實現(xiàn)定時器PART1工具相關(guān)基礎(chǔ)內(nèi)容定時器的作用基于Socket技術(shù),區(qū)塊鏈網(wǎng)絡(luò)中節(jié)點間通信既需要作為服務(wù)端接收消息,也需要作為客戶端發(fā)送消息。作為客戶端的功能主要為發(fā)現(xiàn)鄰居節(jié)點以及告知自身節(jié)點存活。這個過程需要以定時的方式實施,并且包括Gossip等機(jī)制都需要采用定時的形式開展工作。節(jié)點工作模式(客戶端)定時器輪詢實施使用流程(1)安裝使用pip工具可完成操作,具體操作如下:$pipinstallflask-apscheduler(2)創(chuàng)建定時器①

通過配置的方式創(chuàng)建定時器② 以裝飾器的方式創(chuàng)建定時器PART2定時器的實現(xiàn)形式通過配置的方式創(chuàng)建定時器JOBS=[{'id':'job1','func':'scheduler:task','args':(1,2),'trigger':'interval','seconds':10}]配置說明:func:表示需要啟動的函數(shù)(文件名:函數(shù)名);args:表示啟動函數(shù)需要傳入的參數(shù);trigger:表示觸發(fā)方式,這里使用interval表示間隔觸發(fā);second:表示間隔的時間(單位為秒)。通過裝飾器的方式創(chuàng)建定時器@scheduler.task('interval',id='do_job_1',seconds=30

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論