P2P與區塊鏈文獻綜述
『壹』 區塊鏈核心技術-P2P網路
點對點網路是區塊鏈中核心的技術之一,主要關注的方面是為區塊鏈提供一個穩定的網路結構,用於廣播未被打包的交易(交易池中的交易)以及共識過的區塊,部分共識演算法也需要點對點的網路支撐(如PBFT),另外一個輔助功能,如以太坊的消息網路,也需要點對點網路的支持。
P2P網路分為結構化和非結構化網路兩類。結構化網路採用類似DHT演算法來構建網路結構;非結構化網路是一種扁平的網路,每個節點都有一些鄰居節點的地址。
點對點網路的主要職責有維護網路結構和發送信息這兩個方面。網路結構要關注的是新節點的加入和網路更新這兩個方面,而發送信息包括廣播和單播兩個方面
如何建立並維護點對點的整個網路?節點如何加入、退出?
網路結構的建立有兩個核心的參數,一個是每個節點向外連接的節點數,第二個是最大轉發數。
新節點對於整個網路一無所知,要麼通過一個中心的服務獲取網路中的一些節點去連接,要麼去連接網路中的「種子」節點。
網路更新處理當有新節點加入或者節點退出,甚至原來一些節點網路不好,無法連接,過一段時間又活了,等等這些情況。一般通過節點已有的連接來廣播這些路由表的變化。需要注意的是,因為點對點網路的特殊性,每個節點的路由表是不一樣的(也叫partial view)
廣播一般採用泛洪協議,即收到轉發方式,使的消息在網路中擴散,一般要採用一些限制條件,比如一條消息要設置最大的轉發數,避免網路的過渡負載。
單播需要結構化網路結構支持,一般是DHT,類似於DNS解析的方式,逐跳尋找目標節點地址,之後進行傳輸,並且更新本地路由表。
要想快速檢索信息,有兩種數據結構可以使用,一種是樹類型,如AVL樹、紅黑樹、B樹等;另外一類是hash表。
哈希表的效率比樹更高,但是需要佔用更多的內存。
信息的表示採用鍵值對的方式,即一個鍵對應一個值,我們要查找的是key,值是附著的信息。
哈希表要解決的問題是如何均勻地為每一個key分配一個存儲位置。
這裡面有兩個重點:1.是為key分配一個存儲地點,這個分配演算法是固定的,保證存儲的時候和查找的時候使用同一個演算法,不然存進去之後會找不到;2.是均勻地分配,不能有點地方存放數據多,有點放存放數據少。
一般語言裡面的hashtable、map等結構使用這個技術來實現,哈希函數可以直接使用取模函數,key%n,這種方式,n代表有多少個地方,key是整數,如果key是其他類型,需要先進行一次哈希,將key轉為整數。這種方式可以解決上面的兩個需求,但是當n不夠大的時候(小於要存儲的數據),會產生沖突,一個地方一定會有兩個key要存儲,這時候,需要在這個地方放一個鏈表,將分配到同一地點、不同key,順序擺放。當一個地點放的key太多後,鏈表的查找速度太慢,要轉化為樹類型結構(紅黑樹或者AVL樹)。
上面說過,哈希表效率很高,但是佔用內容,使用多台機器就可以解決這個限制。在分布式環境中,可以將上述的地點理解為計算機(後面成為節點),即如何將一個key映射到一個節點上,每個節點有一個節點ID,即key->node id的映射,這個映射演算法也要固定。
這個演算法還有一個非常重要的要求,即scalebility,當新節點加入和退出時候,需要遷移的key要盡量少。
這個映射演算法有兩種典型結構,一個是環形,一個是樹形;環形的叫一致性哈希演算法,樹形的典型叫kademlia演算法。
選點演算法就是解決key->node id的映射演算法,形象的來說就是為一個key選擇它生命中的她(節點)。
假設我們使用32哈希,那麼總共能容納的key的數據量是2**32,稱之為hash空間,把節點的ID映射成整數,key也映射成整數。把key哈希和節點哈希值接的差值的叫做距離(負數的話要取模,不用絕對值),比如一個key的哈希是100(整數表示),一個節點的哈希是105,則這兩個的距離是105-100=5。當然使用其他距離表示也可以,比如反過來減,但是演算法要固定。我們把key映射(放到)距離他最近的節點上。距離取模的話,看起來就是把節點和key放到一個環上,key歸屬到從順時針角度離它最近的節點上。
kademlia演算法的距離採用的是key哈希與節點哈希異或計算之後的數值來表示(整數),從左往右,擁有越多的「相同前綴」,則距離越近,越在左邊位置不一樣,距離越遠。
樹結構的體現是,將節點和key看成樹的節點,這個演算法支持的位數是160bit,即20個8位元組,樹的高度為160,每個邊表示一位。
選點的演算法和一致性哈希相同,從所有節點中,選擇一個距離key距離最小的節點作為這個key的歸宿。
由於是在分布式環境中,為了保證高可用,我們假設沒有一個中心的路由表,沒有這個可以看到全貌的路由表,帶來了一些挑戰,比如如何發現節點、查找節點?
在P2P網路中,常用的方法是每個節點維護一個部分路由表,即只包含部分節點的路由信息。在泛洪演算法中,這些節點上隨機的;在DHT演算法中,這個路由表是有結構的,維護的節點也是有選擇性的。那麼如何合理的選擇需要維護路由信息的節點呢?
一個樸素的做法是,每一個節點保存比他大的節點的信息,這樣可以組成一個環,但是這樣做的話,有一個大問題和一個小問題。大問題是,每個節點知道的信息太少(只有下一個節點的哈希和地址),當給出一個key時,它不知道網路中還有沒有比它距離這個key距離還短的節點,所以它首先判斷key是否屬於自己和下一個節點,如果是,那麼這個key就屬於下一個節點,如果不是就調用下一個節點同樣的方法,這個復雜度是N(節點數)。一個優化的方法是,每個節點i維護的其他節點有:i+2 1, i+2 2,....i+2**31,通過觀察這個數據,發現由近到遠,節點越來越稀疏。這樣可以把復雜度降低到lgN
每個節點保存的其他節點的信息,包括,從左到右,每一位上與本節點不同的節點,最多選擇k個(演算法的超參數)。比如在節點00110上(為演示起見,選擇5位),在要保存的節點路由信息是:
1****: xxx,....,xxx(k個)
01 : xxx,....,xxx(k個)
000 : xxx,....,xxx(k個)
0010 : xxx,....,xxx(k個)
00111: xxx,....,xxx(k個)
以上為一行稱為k-bucket。形象的來看,也是距離自己越近,節點越密集,越遠,節點越稀疏。這個路由查找、節點查找的演算法也是lgN復雜度。
『貳』 怎麼理解區塊鏈的P2P
對於P2P這個概念想必大家都很熟悉,第一反應就是網路借貸,其實在區塊鏈的世界P2P是指對等網路。
對等網路這個概念是在08年金融危機之後提出的,一個或者幾個化名為中本聰的人在網路上發表了一篇名為 《比特幣白皮書:一種點對點的電子現金系統》的論文,於是一大波技術極客被吸引湊在了一起,他們不斷完善了比特幣系統,最終還發現了區塊鏈。
中本聰在論文里說:在點對點電子現金支付系統中,第三方是沒有價值的。
這里是我理解的去中心化。
我們不確定他們的最終目的,也許是改變世界改變未來?不過這樣的技術發明確實是站在了傳統中心化控制的對立面。
如何理解這個對等網路?
它們對傳統行業會產生哪些影響?
以之前p2p暴雷潮為例。
2018年,自六月份起,可能是p2p行情最為嚴峻的一段時間,每天都有平均5個左右的平台暴雷,許多暴雷平台的投資人或惶惶不可終日,或奔走在維權的路上。網上一搜,慘狀一片。
我們現在回想一下當初我們看好一個平台准備投資時需要做的事情。假設它不是一個資金盤。
注冊,綁銀行卡,身份證實名,充值,這時候你的錢都存到平台上了,然後平台將資金出借給事先對接好並核實身份的借款人,如果你投的一個月,每月時間到期你可以選擇取回本金和坐收當月利息,或者不取出來可以繼續在裡面投標。
再舉一個息息相關的例子
我們平時在淘寶上網購的時候,首先需要綁卡充值購物貨款打給支付寶,確認收貨後,支付寶把你的錢打給商家。這筆交易完成。
分析以上兩個例子就會發現。在我們投資或者交易之前,我們的個人私密信息都是要先透露給第三方,你當初看好後選擇的平台和阿里就充當了信用背書的作用。
在交易的那一刻,潛意識里,我們已經把平台和阿里當成是一個,絕對保證我們個人信息不被泄露以及能夠保證我們的資金安全的平台。
這個時候我們交易的基礎是基於信任。
阿里強大的公眾影響力,姑且認為它跑路和違背信譽的可能性比p2p要低。但是假設,我是說假設,這些巨頭保存的我們的資料和巨額的資產遭受到黑客的攻擊。這樣龐大的數據如果泄露,肯定我們自身有遭受損失的風險,而且完全不受我們控制。
p2p更不用說,圈錢跑路,企業公布的信息不實,或者企業對借款人的信息本身核實不嚴格,給本來該誠實公開給投資人的信息上了一層層的枷鎖,風險自是不必說。
因此,再來理解中本聰提出來的在論文里說:在點對點電子現金支付系統中,第三方是沒價值的這句話。
區塊鏈裡面的點對點(p2p),就是去中心化或者是弱中心化,將傳統行業里掌握大部分數據的中間節點這樣的概念弱化,使得一個區塊鏈網路的所有節點在功能上都是平等的,每一個節點可以對其他節點提供服務,也可以利用其他節點為自己提供服務。
並且這樣的一個行為發生時全網自動廣播備份,也就是記在賬本上,每一個人都會知道有這樣一件事,如果一個人想要賴賬,他必須去更改超過網路中半數以上的賬本,成本巨大,無法賴賬,保證了區塊鏈系統數據的安全。
區塊鏈的去中心化、安全、共享透明、高效、低成本等特徵使得其應用范圍將會非常廣,不過區塊鏈底層技術還不成熟,基礎設施還不完善,國內現在區塊鏈行業處在發展的早期階段,也有許多的陷阱,因此我們的注意力不該只放在幣價和行情,也更該多關注真正的區塊鏈技術
自身能力還不夠的情況下,對於煽動誘導性的投資行為一定要遠離,寧願錯過,也不要頭腦發熱以金犯險。
原文鏈接: https://www.kg.com/article/490959733117816832
『叄』 鍖哄潡閾炬妧鏈榪愯屽湪涓涓瀹屽叏p2p鐨勭綉緇滈噷,瀹冧笉褰掕皝鎵鏈
鍖哄潡閾炬妧鏈榪愯屽湪涓涓瀹屽叏p2p鐨勭綉緇滈噷錛屽畠紜瀹炰笉褰掍換浣曚漢鎵鏈銆
鍖哄潡閾炬妧鏈鐨勬牳蹇冩満鍒舵槸鍘諱腑蹇冨寲錛屽畠鏋勫緩鍦ㄤ竴涓鐐瑰圭偣錛坧2p錛夌殑緗戠粶涔嬩笂銆傝繖鎰忓懗鐫錛屽尯鍧楅摼緗戠粶涓鐨勬瘡涓涓鑺傜偣閮芥槸騫崇瓑鐨勫弬涓庤咃紝鍏卞悓緇存姢鐫鏁翠釜緗戠粶鐨勫畨鍏ㄤ笌紼沖畾銆備笌浼犵粺鐨勪腑蹇冨寲緗戠粶涓嶅悓錛屽尯鍧楅摼緗戠粶娌℃湁涓蹇冩湇鍔″櫒鎴栨潈濞佹満鏋勬潵鎺у埗鎴栫$悊鏁版嵁銆傝繖縐嶅垎甯冨紡鐨勬灦鏋勪嬌寰楀尯鍧楅摼鍏鋒湁鏋侀珮鐨勬姉綃℃敼鎬у拰鍙闈犳э紝鍥犱負浠諱綍瀵規暟鎹鐨勪慨鏀歸兘蹇呴』寰楀埌緗戠粶涓澶у氭暟鑺傜偣鐨勫叡璇嗐
涓句釜渚嬪瓙錛屾瘮鐗瑰竵鏄鍖哄潡閾炬妧鏈鐨勪竴縐嶅簲鐢錛屽畠鍏佽哥敤鎴峰湪娌℃湁涓澶閾惰屾垨鏀垮簻鎺у埗鐨勬儏鍐典笅榪涜屽畨鍏ㄧ殑閲戣瀺浜ゆ槗銆傛瘮鐗瑰竵鐨勪氦鏄撹板綍琚瀛樺偍鍦ㄤ竴涓鍘諱腑蹇冨寲鐨勮處鏈涓婏紝榪欎釜璐︽湰鐢卞叏鐞冩暟浠ヤ竾璁$殑鑺傜偣鍏卞悓緇存姢銆傛瘡涓絎斾氦鏄撻兘瑕佺粡榪囩綉緇滆妭鐐圭殑楠岃瘉鍜岀『璁わ紝鎮勬枟紜淇濅氦鏄撶殑鐪熷疄鎬у拰鍚堟硶鎬с傜敱浜庢病鏈変竴涓涓蹇冧豢榪愰栧寲鐨勬満鏋勬帶鍒舵瘮鐗瑰竵緗戠粶錛屽洜姝ゅ畠鑳藉熷湪寰堝ぇ紼嬪害涓婃姷寰″℃煡銆佸共棰勫拰綃℃敼銆
鎬葷殑鏉ヨ達紝鍖哄潡閾炬妧鏈鐨刾2p鐗規у拰鍘諱腑蹇冨寲鍘熷垯錛屼嬌鍏舵垚涓轟竴涓涓嶅綊浠諱綍浜烘墍鏈夌殑緋葷粺銆傝繖縐嶇壒鎬т笉浠呰祴浜堜簡鍖哄潡閾炬瀬楂樼殑瀹夊叏鎬у拰閫忔槑搴︼紝榪樹負鍏跺湪閲戣瀺銆佷緵搴旈摼綆$悊銆佽韓浠介獙璇佺瓑澶氫釜棰嗗囨暟鍩熺殑搴旂敤鎻愪緵浜嗗箍闃旂殑絀洪棿銆傞殢鐫鎶鏈鐨勪笉鏂鍙戝睍鍜屾櫘鍙婏紝鍖哄潡閾炬湁鏈涙垚涓烘湭鏉ユ暟瀛楃ぞ浼氱殑閲嶈佸熀鐭熾
鍦ㄦ湭鏉ワ紝闅忕潃鏇村氱殑搴旂敤鍦烘櫙琚寮鍙戝嚭鏉ワ紝鍖哄潡閾劇殑p2p緗戠粶鍜屽幓涓蹇冨寲鐗規у皢榪涗竴姝ュ槳鏄懼叾浠峰箋備緥濡傦紝閫氳繃鏅鴻兘鍚堢害錛屼漢浠鍙浠ュ湪娌℃湁絎涓夋柟騫查勭殑鎯呭喌涓嬭嚜鍔ㄦ墽琛屽拰楠岃瘉鍚堝悓鏉℃撅紱鍦ㄤ緵搴旈摼綆$悊涓錛屽尯鍧楅摼鍙浠ョ『淇濅駭鍝佺殑鏉ユ簮鍜屾祦杞榪囩▼閫忔槑鍙榪芥函錛屼粠鑰屾彁楂樻秷璐硅呬俊蹇冨拰浼佷笟淇¤獕銆傝繖浜涘簲鐢ㄩ兘浣撶幇浜嗗尯鍧楅摼鎶鏈浣滀負涓涓鍏鍏便佸紑鏀俱佹棤浜烘墍鏈夌殑騫沖彴鐨勫法澶ф綔鍔涖
『肆』 區塊鏈跟P2P究竟有什麼關系
一、有助監管P2P企業
監管部門(央行、銀監、證監)作為區塊鏈的一部分,可以實時獲取P2P交易的公共賬本,通過分析公共賬本獲取各家P2P企業的理財項目和資金劃轉信息,實時為P2P行業監管提供低成本、高效率、可信賴的監管數據。
二、借款人的徵信透明化
區塊鏈最主要解決的就是信用問題,所以區塊鏈最被看好的就是應用於徵信。但徵信這塊其實爭議也多,畢竟徵信相關數據是非常敏感的,無論是徵信機構還是用戶,其實都是不希望公開的,數據是徵信機構的命根子,家家都希望別人公開,自己保密。用戶也不希望自己的數據公開。當然,如果未來能做到徵信透明化,對P2P的投資人來說還是一件很有利的事。
三、交易結構的低成本化
對於一個P2P平台來說,每個月用戶的取現費用也是一筆不小的開支,只是一般的P2P平台都會自己掏腰包去支付這部分費用。應用區塊鏈強大的在線交易功能,去第三方支付,抑或銀行資金託管,完成資金快速、准備、透明的交易,對於P2P平台來說是一件利好的事。
四、行業基礎建設設施
大部分事物之所以飛速發展,很大程度上得益於基礎設施的完善。就目前來看,區塊鏈技術可以當做P2P乃至整個互聯網金融體系的一個非常重要的新的基礎設施建設,類似於像高速公路對汽車運輸業,集裝箱對遠洋運輸業的巨大改變一樣。