Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 中文一级毛片,亚洲一区二区影院,精品欧美成人bd高清在线观看

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          P2P技術詳解(三):P2P中的NAT穿越(打洞)方

          P2P技術詳解(三):P2P中的NAT穿越(打洞)方案詳解(進階分析篇)

          、引言

          接本系列的上一篇《P2P技術詳解(二):P2P中的NAT穿越(打洞)方案詳解(基本原理篇)》,本篇將深入分析各種NAT穿越(打洞)方案的技術實現原理和數據交互過程,希望能助你透徹理解它們。

          * 閱讀注意:本文屬高階文章,在你了解P2P基礎原理或還未讀過本系列前幾篇之前,請慎讀本篇,否則讀完要砸電腦,我也拉不住 ....

          (本文同步發布于:http://www.52im.net/thread-2872-1-1.html)

          去年開始,伴隨著比特幣的火爆,區塊鏈成為比“人工智能”、“共享”還要火的詞匯。各大企業,諸如阿里、京東、騰訊、百度等紛紛入局。

          關于區塊鏈技術的文章已經泛濫成災,但大多讀起來晦澀難懂。今天這篇文章,會迅速讓你感覺區塊鏈其實很“弱智”。

          晦澀難懂的區塊鏈到底是什么?

          什么是區塊鏈?我們首先用談戀愛舉個簡單的例子。

          未來所有適齡男女戀愛,結婚的承諾全過程都被其他所有適齡男女共識,兩個人在一起發生的所有故事就會形成區塊。

          其他所有男女就是鏈,如果有第三者來插足或自身違背另一半,其他人都能看到,以后就再也找不到對象了。

          區塊鏈準確的說就是“全中心”體系,就是鏈上的每個節點都是中心。不可刪除,不可更改,這就是區塊鏈技術的基本特征。

          3 分鐘小視頻:漫畫解讀什么是區塊鏈

          講比特幣的人很多,懂比特幣的人也很多,但是具體到區塊鏈,現在并沒有一個很清楚的定義說什么是區塊鏈,基本上所有的介紹里都是這樣的:

          比特幣→區塊鏈是比特幣的底層技術,或者比特幣→比特幣是一種區塊鏈。

          所以從純理論角度說對區塊鏈的定義:

          區塊鏈是一個放在非安全環境中的分布式數據庫(系統)。

          區塊鏈采用密碼學的方法來保證已有數據不可能被篡改。

          區塊鏈采用共識算法來對新增數據達成共識。

          具有以上三個性質的系統,就是區塊鏈。

          區塊鏈相關的概念

          在互聯網去中心化下有很多產物,下面是一些區塊鏈相關的概念。

          P2P 下載

          一種硬盤的共享,是把每個人電腦上的一部分硬盤,拿出來與其他人共享,對應的形態就是迅雷。

          P-CDN

          這是一種分布式的存儲,共享分布式的寬帶。

          分布式計算

          我們去破譯算法或者密碼時會用到超級計算機,它可以單獨用很快的速度破解密碼,這就是中心化的計算。

          而分布式計算的概念就是把大量的計算工作切分成無數的小塊計算,并且分配給世界上各個普通的計算機。

          當全世界幾千,幾萬甚至幾十萬臺個人電腦的 CPU,同時計算的時候,再怎么樣計算速度都會比一個超級計算機要快。

          ICO

          ICO(Initial Coin Offering),首次幣發行,源自股票市場的首次公開發行(IPO)概念,是區塊鏈項目首次發行代幣,募集比特幣、解決以太坊等通用數字貨幣的行為。

          也是一種為加密數字貨幣/區塊鏈項目籌措資金的常用方式。ICO 能夠在沒有任何的實際項目執行的情況下,很快就融到一大筆比特幣、以太幣,或者其他代幣。

          幾乎每個人都聽說過像比特幣和以太幣這樣的加密貨幣,但是只有極少數人懂得隱藏在它們背后的技術。

          下面我將會用 JavaScript 來創建一個簡單的區塊鏈來演示它們的內部究竟是如何工作的。

          用 JavaScript 寫一個區塊鏈

          具體分為以下三個部分:

          • 實現一個基本的區塊鏈

          • 實現 POW

          • 交易與挖礦獎勵

          實現一個基本的區塊鏈

          區塊鏈

          區塊鏈是由一個個任何人都可以訪問的區塊構成的公共數據庫。這好像沒什么特別的,不過它們有一個有趣的屬性:它們是不可變的。

          一旦一個區塊被添加到區塊鏈中,除非讓剩余的其余區塊失效,否則它是不會再被改變的。

          這就是為什么加密貨幣是基于區塊鏈的原因。你肯定不希望人們在交易完成后再變更交易!

          創造一個區塊

          區塊鏈是由許許多多的區塊鏈接在一起的(這聽上去好像沒毛病..)。鏈上的區塊通過某種方式允許我們檢測到是否有人操縱了之前的任何區塊。

          那么我們如何確保數據的完整性呢?每個區塊都包含一個基于其內容計算出來的 hash。同時也包含了前一個區塊的 hash。

          下面是一個區塊類用 JavaScript 寫出來大致的樣子:

          因為 JavaScript 中并不支持 sha256 所以我引入了 crypto-js 庫。然后我定義了一個構造函數來初始化區塊的屬性。

          每一個區塊上都被賦予了 index 屬性來告知我們這個區塊在整個鏈上的位置。我們同時也生成了一個時間戳,以及需要在區塊里存儲的一些數據。最后是前一個區塊的 hash。

          創造一個鏈

          現在我們可以在 Blockchain 類中將區塊鏈接起來了。下面是用 JavaScript 實現的代碼:

          在構造函數里,我通過創建一個包含創世塊的數組來初始化整個鏈。第一個區塊是特殊的,因為它不能指向前一個區塊。

          我還添加了下面兩個方法:

          • getLatestBlock() 返回我們區塊鏈上最新的區塊。

          • addBlock() 負責將新的區塊添加到我們的鏈上。

          為此,我們將前一個區塊的 hash 添加到我們新的區塊中。這樣,我們就可以保持整個鏈的完整性。

          因為只要我們變更了最新區塊的內容,我們就需要重新計算它的 hash。當計算完成后,我將把這個區塊推進鏈里(一個數組)。

          最后,我創建一個 isChainValid() 來確保沒有人篡改過區塊鏈。它會遍歷所有的區塊來檢查每個區塊的 hash 是否正確。

          它會通過比較 previousHash 來檢查每個區塊是否指向正確的上一個區塊。如果一切都沒有問題,它會返回 true 否則會返回 false。

          使用區塊鏈

          我們的區塊鏈類已經寫完啦,可以真正的開始使用它了。

          在這里我僅僅是創建了一個區塊鏈的實例,并且命名它為 SavjeeCoin。之后我在鏈上添加了一些區塊。

          區塊里可以包含任何你想要放的數據,不過在上面的代碼里,我選擇添加了一個帶有 amount 屬性的對象。

          試著操作吧!

          在介紹里我曾說過區塊鏈是不可變的。一旦添加,區塊就不可能再變更了。讓我們試一下。

          我會在一開始通過運行 isChainValid() 來驗證整個鏈的完整性。我們操作過任何區塊,所以它會返回 true。

          之后我將鏈上的第一個(索引為 1)區塊的數據進行了變更。之后我再次檢查整個鏈的完整性,發現它返回了 false。我們的整個鏈不再有效了。

          結論

          這個小栗子還遠未達到完成的程度。它還沒有實現 POW(工作量證明機制)或 P2P 網絡來與其他礦工來進行交流。

          但它確實證明了區塊鏈的工作原理。許多人認為原理會非常復雜,但這篇文章證明了區塊鏈的基本概念是非常容易理解和實現的。

          實現 POW

          在上文中我們用 JavaScript 創建了一個簡單的區塊鏈來演示區塊鏈的工作原理。

          不過這個實現并不完整,很多人發現依舊可以篡改該系統。沒錯!我們的區塊鏈需要另一種機制來抵御攻擊。讓我們來看看我們該如何做到這一點。

          問題

          現在我們可以很快的創造區塊,然后非常迅速的將它們添加進我們的區塊鏈中。

          不過這導致了三個問題:

          • 人們可以快速創建區塊,然后在我們的鏈里塞滿垃圾。大量的區塊會導致我們區塊鏈過載并讓它無法使用。

          • 因為創建一個有效的區塊太容易了,人們可以篡改鏈中的某一個區塊,然后重新計算所有區塊的 hash。即使它們已經篡改了區塊,他們仍然可以以有效的區塊來作為結束。

          • 你可以通過結合上述兩個破綻來有效控制區塊鏈。區塊鏈由 P2P 網絡驅動,其中節點會將區塊添加到可用的最長鏈中。

          所以你可以篡改區塊,然后計算所有其他的區塊,最后添加任意多你想要添加的區塊。你最后會得到一個最長的鏈,所有的其他節點都會接受它,然后往上添加自己的區塊。

          顯然我們需要一個方案來解決這些問題:POW(proof-of-work:工作量證明)。

          什么是 POW

          POW 是在第一個區塊鏈被創造之前就已經存在的一種機制。這是一項簡單的技術,通過一定數量的計算來防止濫用。

          工作量是防止垃圾填充和篡改的關鍵。如果它需要大量的算力,那么填充垃圾就不再值得。

          比特幣通過要求 hash 以特定 0 的數目來實現 POW。這也被稱之為難度,不過等一下!一個區塊的 hash 怎么可以改變呢?

          在比特幣的場景下,一個區塊包含有各種金融交易信息。我們肯定不希望為了獲取正確的 hash 而混淆了那些數據。

          為了解決這個問題,區塊鏈添加了一個 Nonce 值。Nonce 是用來查找一個有效 hash 的次數。

          而且,因為無法預測 hash 函數的輸出,因此在獲得滿足難度條件的 hash 之前,只能大量組合嘗試。尋找到一個有效的 hash(創建一個新的區塊)在圈內稱之為挖礦。

          在比特幣的場景下,POW 確保每 10 分鐘只能添加一個區塊。你可以想象垃圾填充者需要多大的算力來創造一個新區塊,他們很難欺騙網絡,更不要說篡改整個鏈。

          實現 POW

          我們該如何實現呢?我們先來修改我們區塊類并在其構造函數中添加 Nonce 變量。我會初始化它并將其值設置為 0。

          我們還需要一個新的方法來增加 Nonce,直到我們獲得一個有效 hash。強調一下,這是由難度決定的。所以我們會收到作為參數的難度。

          最后,我們還需要更改一下 calculateHash() 函數。因為目前它還沒有使用 Nonce 來計算 hash。

          將它們結合在一起,你會得到如下所示的區塊類:

          修改區塊鏈

          現在,我們的區塊已經擁有 Nonce 并且可以被開采了,我們還需要確保我們的區塊鏈支持這種新的行為。

          讓我們先在區塊鏈中添加一個新的屬性來跟蹤整條鏈的難度。我會將它設置為 2(這意味著區塊的 hash 必須以 2 個 0 開頭)。

          現在剩下要做的就是改變 addBlock() 方法,以便在將其添加到鏈中之前確保實際挖到該區塊。下面我們將難度傳給區塊。

          大功告成!我們的區塊鏈現在擁有了 POW 來抵御攻擊了。

          測試

          現在讓我們來測試一下我們的區塊鏈,看看在 POW 下添加一個新區塊會有什么效果。

          我將會使用之前的代碼,我們將創建一個新的區塊鏈實例,然后往里添加 2 個區塊。

          如果你運行了上面的代碼,你會發現添加新區塊依舊非常快。這是因為目前的難度只有 2(或者你的電腦性能非常好)。

          如果你創建了一個難度為 5 的區塊鏈實例,你會發現你的電腦會花費大概 10 秒鐘來挖礦。隨著難度的提升,你的防御攻擊的保護程度越高。

          免責聲明

          就像之前說的:這絕不是一個完整的區塊鏈。它仍然缺少很多功能(像 P2P 網路)。這只是為了說明區塊鏈的工作原理。

          并且:由于單線程的原因,用 JavaScript 來挖礦并不快。

          交易與挖礦獎勵

          在前面兩部分我們創建了一個簡單的區塊鏈,并且加入了 POW 來抵御攻擊。

          然而我們在途中也偷了懶:我們的區塊鏈只能在一個區塊中存儲一筆交易,而且礦工沒有獎勵。現在,讓我們解決這個問題!

          重構區塊類

          現在一個區塊擁有 index,previousHash,timestamp,data,hash 和 nonce 屬性。

          這個 index 屬性并不是很有用,事實上我甚至不知道為什么開始我要將它添加進去。

          所以我把它移除了,同時將 data 改名為 transactions 來更語義化。

          當我們改變區塊類時,我們也必須更改 calculateHash()函數。現在它還在使用老舊的 index 和 data 屬性。

          交易類

          在區塊內,我們將可以存儲多筆交易。因此我們還需要定義一個交易類,這樣我們可以鎖定交易應當具有的屬性:

          這個交易例子非常的簡單,僅僅包含了發起方(fromAddress)和接受方(toAddress)以及數量。如果有需求,你也可以在里面加入更多字段,不過這個只是為了最小實現。

          調整我們的區塊鏈

          當前的最大任務:調整我們的區塊鏈來適應這些新變化。我們需要做的第一件事就是存儲待處理交易的地方。

          正如你所知道的,由于 POW,區塊鏈可以穩定的創建區塊。在比特幣的場景下,難度被設置成大約每 10 分鐘創建一個新區塊。但是可以在創造兩個區塊之間提交新的交易。

          為了做到這一點,首先需要改變我們區塊鏈的構造函數,以便他可以存儲待處理的交易。

          我們還將創造一個新的屬性,用于定義礦工獲得多少錢作為獎勵:

          下一步,我們將調整我們的 addBlock()方法。不過我的調整是指刪掉并重寫它!我們將不再允許人們直接為鏈上添加區塊。相反,他們必須將交易添加至下一個區塊中。

          而且我們將 addBlock()更名為 createTransaction(),這看起來更語義化:

          挖礦

          人們現在可以將新的交易添加到待處理交易的列表中。但無論如何,我們需要將他們清理掉并移入實際的區塊中。

          為此,我們來創建一個 minePendingTransactions()方法。這個方法不僅會挖掘所有待交易的新區塊,而且還會向采礦者發送獎勵。

          請注意,該方法采用了參數 miningRewardAddress。如果你開始挖礦,你可以將你的錢包地址傳遞給此方法。

          一旦成功挖到礦,系統將創建一個新的交易來給你挖礦獎勵(在這個栗子里是 100 枚幣)。

          有一點需要注意的是,在這個栗子中,我們將所有待處理交易一并添加到一個區塊中。但實際上,由于區塊的大小是有限制的,所以這是行不通的。

          在比特幣里,一個區塊的大小大概是 2MB。如果有更多的交易能夠擠進一個區塊,那么礦工可以選擇哪些交易達成哪些交易不達成(通常情況下費用更高的交易容易獲勝)。

          地址的余額

          在測試我們的代碼前讓我們再做一件事!如果能夠檢查我們區塊鏈上地址的余額將會更好。

          測試

          好吧,我們已經完成并可以正常工作。為此,我們創建了一些交易:

          這些交易目前都處于等待狀態,為了讓他們得到證實,我們必須開始挖礦:

          當我們開始挖礦,我們也會傳遞一個我們想要獲得挖礦獎勵的地址。在這種情況下,我的地址是 xaviers-address(非常復雜!)。

          之后,讓我們檢查一下 xaviers-address 的賬戶余額:

          我的賬戶輸出竟然是 0?!等等,為什么?難道我不應該得到我的挖礦獎勵么?如果你仔細觀察代碼,你會看到系統會創建一個交易,然后將您的挖礦獎勵添加為新的待處理交易。

          這筆交易將會包含在下一個區塊中。所以如果我們再次開始挖礦,我們將收到我們的 100 枚硬幣獎勵!x`

          局限性與結論

          現在我們的區塊鏈已經可以在一個區塊上存儲多筆交易,并且可以為礦工帶來回報。

          不過,還是有一些不足:發送貨幣時,我們不檢查發起人是否有足夠的余額來實際進行交易。

          然而,這其實是一件容易解決的事情。我們也沒有創建一個新的錢包和簽名交易(傳統上用公鑰/私鑰加密完成)。

          這絕不是一個完整的區塊鏈實現!它仍然缺少很多功能。這里只是為了驗證一些概念來幫助大家了解區塊鏈的工作原理。

          京報快訊(記者黃鑫宇) 9月20日下午,北京市互聯網金融行業協會(下稱“協會”)官方公眾號發通知稱,根據監管要求,調整京籍P2P網貸機構申請行業合規申請檢查報名方式。已收到整改通知書的機構,需按照北京金融局公告內容,由金管通統一上傳自查報告等相關材料。其他要求與8月31日協會發布《關于北京P2P網絡借貸行業合規自律檢查工作的公告》的內容保持不變。

          此次,協會變更的報名方式具體分為兩類:(一)已經收到整改通知書機構,按照北京金融局公告內容,由金管通統一上傳自查報告等相關材料;(二)未收到整改通知書機構,需點擊鏈接(https://www.jinguantong.com.cn/infrom.html)申請,并按要求操作。P2P網貸行業合規自律檢查相關工作要求,則參見鏈接www.bjp2p.com.cn。

          北京金融局官網分別曾在8月24日晚間、9月7日傍晚,下發北京市互聯網金融風險專項整治工作領導小組辦公室(下稱“互金整治辦”)兩則關于啟動在京注冊P2P網絡借貸機構自查工作的通知及補充通知。

          據新京報記者了解,通知及補充通知中公布的自律檢查和行政檢查通用的材料清單,機構方只需要準備一次,提交一次。

          在互金整治辦8月24日通知中,關于自查流程,監管方要求京籍P2P網貸機構在規定的時間內將簽章版掃描上傳至金管通系統,網址為https://www.jinguantong.com.cn。在9月7日的補充通知中,監管方要求所有材料上傳至金管通系統的截至日期為10月15日。


          主站蜘蛛池模板: 日韩一区二区a片免费观看| 色精品一区二区三区| 国产精品第一区揄拍| 亚洲AV成人精品一区二区三区| 国内精品一区二区三区在线观看| 成人免费av一区二区三区| 最新欧美精品一区二区三区| 精品久久久久中文字幕一区| 无码人妻少妇色欲AV一区二区| 日本丰满少妇一区二区三区| 亚洲日韩AV一区二区三区中文 | 日韩一区二区精品观看| 国产精品视频免费一区二区| 日本欧洲视频一区| 日本一区二区三区精品国产| 精品一区二区高清在线观看| 国产成人精品一区二三区熟女 | 精品人无码一区二区三区| 日韩免费观看一区| 日韩综合无码一区二区| 精品一区二区三区水蜜桃| 在线观看国产一区二区三区| 怡红院一区二区在线观看| 国产精品一区二区毛卡片| 国产一区韩国女主播| 国产精品亚洲不卡一区二区三区| 日韩高清一区二区| 亚洲片国产一区一级在线观看| 久久久国产一区二区三区| 免费无码AV一区二区| 一区二区乱子伦在线播放| 国产高清精品一区| 国产天堂一区二区综合| 日产一区日产2区| 91福利国产在线观一区二区| 丰满少妇内射一区| 亚洲一区免费视频| 中文字幕人妻丝袜乱一区三区| 成人区人妻精品一区二区不卡视频 | 日本一区精品久久久久影院| 狠狠做深爱婷婷综合一区|