《分散式技術原理與演算法解析》學習筆記Day05

来源:https://www.cnblogs.com/wing011203/archive/2023/02/08/17103002.html
-Advertisement-
Play Games

這篇文章主要討論分散式共識,包括什麼是分散式共識以及常用的三種分散式共識演算法:PoW(工作量證明)、PoS(權益證明)和DPoS(委托權益證明)。 ...


分散式共識

什麼是分散式共識?

分散式共識就是在多個節點均可獨自操作或記錄的情況下,使得所有節點針對某個狀態達成一致的過程。

有哪些常見的分散式共識演算法?

一般有3種分散式共識演算法:

  • PoW(Proof-of-Work,工作量證明)
  • PoS(Proff-of-Stake,權益證明)
  • DPoS(Delegated Proof of Stake,委托權益證明)

什麼是區塊鏈?

區塊鏈是一種鏈式數據結構,由包含交易信息的區塊通過哈希指針、根據時間順序連接而成,也是一種分散式資料庫。區塊是區塊鏈的主要組成部分,每個區塊由區塊頭和區塊內容數據構成。區塊頭記錄了時間戳,並用於保證區塊鏈的連接性,區塊內容數據中包含了多條交易信息。

PoW

分散式共識包括兩個關鍵點:獲得記賬權和所有節點或伺服器達成一致。

PoW演算法十一每個節點或者伺服器的計算能力(即算力)來競爭記賬權的機制,它是一種使用工作量證明機制的共識演算法。也就是說,誰的計算力強、工作能力強,誰獲得記賬權的可能性就越大。

PoW演算法獲取記賬權的原理:利用區塊index、前一個區塊的哈希值、交易的時間戳、區塊數據和nonce值,通過SHA256哈希演算法計算出一個哈希值,並判斷前k個值是否都為 0。如果不是則遞增nonce值,重新按照上述方法計算,如果是,則本次計算的哈希值為要解決的題目的正確答案。誰先計算出正確答案,誰就獲得這個區塊的記賬權。

這裡的nonce值是用來找到一個滿足哈希值的數字,k是哈希值前導零的個數,標記了計算的難度,0越多計算難度越大。

PoW演算法的優點是相對公平、有容錯機制、完全去中心化、簡單易懂、容易實現。

PoW演算法的缺點是不適合私有鏈或者聯盟鏈,共識效率很低,每秒完成交易量少,存在阻塞和資源浪費問題,交易的服務費高。

比特幣採用的是PoW共識演算法。

PoS

PoS的核心原理是由系統權益代表算力來決定區塊記賬權,擁有的權益越大獲得記賬權的概率就越大。

這裡的權益是指每個節點占有貨幣的數量和時間,而貨幣就是節點所獲得的獎勵。PoS演算法充分利用了分散式線上記賬重的獎勵,鼓勵“利滾利”。

基於PoS演算法獲得區塊記賬權的方法與機遇PoW的方法類似,不同之處在於:節點計算獲取記賬權的方式不一樣,PoW是利用區塊的index、前一個區塊的哈希值、交易的時間戳、區塊數據和nonce值,通過SHA256哈希演算法計算出一個哈希值,並判斷前k個值是否都為0。而PoS是根據節點擁有感的股權或者權益進行計算的,每個節點在計算自己記賬權時,通過計算自己的股權或權益來評估,如果發現自己的權益最大,則將自己的區塊廣播給其他節點。

PoS將算力競爭轉變為權益競爭。與PoW相比,PoS不需要消耗大量的電力就能保證區塊鏈網路的安全性,同時也不需要在每個區塊中創建新的貨幣來激勵記賬者參與當前網路運行,這也縮短了達成共識所需要的時間。

PoS演算法中持幣越多或者持幣越久,幣齡就會越高,持幣人就越容易挖到區塊並得到激勵,而持幣少的人基本沒有機會,這樣整個系統的安全性實際上會被持幣數量較大的一部分人掌握,容易出現壟斷現象。

PoS演算法的優點是資源消耗低、達成共識周期短、交易服務費低。

PoS演算法的缺點是每秒完成的交易量較低、容易被壟斷以及無法處理分叉鏈的情況。

以太坊採用的是PoS共識演算法。

DPoS

在DPoS演算法中,通常會選出K個受托節點,它們的權利是完全相等的。受托節點之間爭取記賬權也是根據算力進行競爭的。只要受托節點提供的算力不穩定、電腦宕機或者利用手中的權利作惡,隨時可以被握著貨幣的普通節點投票踢出整個系統,而後備的受托節點可以隨時頂上去。

DPoS是在PoW和PoS的基礎上改進的,它的優點在於:

  1. 由投票選舉出的若幹信譽度高的受托人記賬,解決了所有節點均參與競爭導致消息量大,達成一致周期長燈問題。
  2. 每隔一段時間會調整受托人,避免受托人造假和獨權。

DPoS演算法的優點在於能耗更低、每秒完成交易量高、無壟斷情況、交易服務費低、更加安全。
DPoS演算法的缺點:持幣人投票的積極性不高。

DPoS演算法的缺點在於:故障問題解決效率低,易出現安全隱患,同時持幣人投票的積極性並不高。

以太股、EOS等使用的是DPoS。

    作者:李潘     出處:http://wing011203.cnblogs.com/     本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 環境安裝 一、node 1.為什麼需要node環境 Vue.js本質上就是一個Js庫,可以直接在頁面通過script標簽引用。這種使用方式只使用了VueJs的”構建用戶界面“,使用不了他的模塊化 Vue.js可以在html里直接引用後使用,等到與Vue一起配合使用的第三方應用的庫或框架多起來後,一個 ...
  • JavaScript 中的高階函數是一種接受函數作為輸入或返回函數作為輸出的函數。高階函數可以用於創建抽象概念,例如柯里化、組合和管道。 ...
  • 如何創建有層次的C++工程目錄 大多數人創建C++工程採用預設設置,這樣會導致工程內文件散亂,毫無可觀性。那麼如何去創建一個可觀性搶的工程目錄呢?以下將為大家解惑。 1、快速創建預設工程並簡單處理 a、新手因不理解具體的項目工程有哪些文件目錄,所以我建議直接創建一個預設的項目,然後關閉當前目錄創建這 ...
  • 一、應用介紹 ”所有網頁都是客戶端“為fusion app的核心概念,讓我們利用它可以快速的做出屬於自己的應用。由於作者已經停止更新原版app,文章採用FA 重製版完成。 成品展示: 體驗下載: 下載鏈接:https://wwp.lanzoup.com/iIKXF0mxu1gd 提取碼 : xcvb ...
  • 《Terraform 101 從入門到實踐》這本小冊在南瓜慢說官方網站和GitHub兩個地方同步更新,書中的示例代碼也是放在GitHub上,方便大家參考查看。 Terraform 101 從入門到實踐 Terraform作為基礎設施即代碼(Infrastructure as Code,很簡稱IaC) ...
  • 1.介紹 selenium最初是一個自動化測試工具,而爬蟲中使用它主要是為瞭解決requests無法直接執行JavaScript代碼的問題 selenium本質是通過驅動瀏覽器,完全模擬瀏覽器的操作,比如跳轉、輸入、點擊、下拉等,來拿到網頁渲染之後的結果,可支持多種瀏覽器 from selenium ...
  • 條件判斷if 簡單的if判斷 package main import "fmt" func main(){ age := 18 if age >=18 { fmt.Println("呦呵長大了") }else { fmt.Println("還沒長大") } } 多分支if package main ...
  • 春節電影聽巳月說都還可以,我不信,我覺得還是要看看看過的觀眾怎麼說,於是我點開了流浪地球2 … 看起來好像不錯的樣子,8.2的評分,三十多億的票房 就是這評價也太多了,那我們今天就把網友對它的評論獲取下來,做成可視化詞雲圖看看大家討論最多的是什麼。 準備工作 使用的環境 Python 3.8 解釋器 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...