盤點 | 一文讀懂11個主流共識演算法
作者 | Aholiab
在區塊鏈的交流和學習中,「 共識演算法 」是一個很頻繁被提起的詞彙,正是因為共識演算法的存在,區塊鏈的可信性才能被保證。
常見的共識演算法有很多,例如PoW(Proof of Work,工作量證明)、PoS(Proof of Stake,權益證明)、DPoS(Delegate Proof of Stake,委託權益證明)、PBFT(Practical Byzantine Fault Tolerance,實用拜占庭容錯演算法)等。
說白了,不同的演算法其實就是不同的遊戲玩法。在區塊鏈世界,共識一般都是通過特定的數學演算法實現。
那麼到底什麼是共識演算法?每天聽到的這些共識演算法到底是什麼意思?本篇文章就為你一一梳理,相信讀完之後,可以得到不少的談資 。
在講解共識演算法之前,我們先來看看什麼叫共識。
說人話,談談共識演算法
所謂共識,簡單理解就是指大家都達成一致的意思 。其實在現實生活中,有很多需要達成共識的場景,比如開會討論,雙方或多方簽訂一份合作協議等。
而在區塊鏈系統中,每個節點必須要做的事情就是讓自己的賬本跟其他節點的賬本保持一致。如果是在傳統的軟體結構中,這幾乎就不是問題,因為有一箇中心伺服器存在,也就是所謂的主庫,其他的從庫向主庫看齊就行了。
在現實生活中,很多事情人們也都是按照這種思路來的,比如企業老闆釋出一個通知,員工照著做。但是區塊鏈是一個分散式的對等網路結構,在這個結構中沒有哪個節點是“老大”,一切都要商量著來。
所以在區塊鏈系統中,如何讓每個節點通過一個規則將各自的資料保持一致是一個很核心的問題,這個問題的解決方案就是制定一套共識演算法。
共識演算法其實就是一個規則,每個節點都按照這個規則去確認各自的資料。我們暫且拋開演算法的原理,先來想一想在生活中我們會如何解決這樣一個問題: 假設一群人開會,這群人中沒有一個領導或者說老大,大家各抒己見,那麼最後如何統一出一個決定出來呢?
一般,我們一般會在某一個時間段中選出一個人,那個人負責彙總大家的內容,然後釋出完整的意見,其他人投票表決,每個人都有機會來做彙總發表,最後誰的支持者多就以誰的最終意見為準。
這種思路其實就算是一種共識演算法了 。然而在實際過程中,如果人數不多並且數量是確定的還好處理,如果人數很多且數量也不固定,那就很難通過這種方式投票決定了,效率太低。 我們需要通過一種機制篩選出最有代表性的人,在共識演算法中就是篩選出具有代表性的節點 。
這就需要設計出一組條件,而這組條件就是我們所談的共識演算法。目前主流的共識演算法有很多,接下來,營長就為大家一一科普每種共識演算法的機制、特性和優劣。
1. 工作量證明(PoW,Proof of Work)
優點 :自 2009 年以來得到了廣泛測試,目前依然得到廣泛的使用。
缺點 :速度慢;耗能巨大,對環境不好;易受“規模經濟”(economies of scale)的影響。
使用者 :Bitcoin、Ethereum、Litecoin、Dogecoin等。
型別 :有競爭共識(Competitive consensus)。
工作量證明(Proof Of Work,簡稱POW)應該算是最常見的共識演算法之一,簡單理解就是一份用來確認你做過一定量的工作的證明。監測工作的整個過程通常是極為低效的,而通過對工作的結果進行認證來證明完成了相應的工作量,則是一種非常高效的方式。比如現實生活中的畢業證、駕駛證等等,也是通過檢驗結果的方式(通過相關的考試)所取得的證明。
工作量證明系統(或者說協議、函式),是一種應對拒絕服務攻擊和其他服務濫用的經濟對策 。它要求發起者進行一定量的運算,也就意味著需要消耗計算機一定的時間。這個概念由Cynthia Dwork 和Moni Naor 1993年在學術論文中首次提出。而工作量證明(POW)這個名詞,則是在1999年 Markus Jakobsson 和Ari Juels的文章中才被真正提出。
PoW 並非一個新理念,但是中本聰將 Pow 與加密簽名、Merkle 鏈和 P2P 網路等已有理念結合,形成一種可用的分散式共識系統。加密貨幣是這樣系統的首個基礎和應用,因而獨具創新性。
在 PoW 的工作方式中,區塊鏈參與者(稱為「礦工」)要在區塊鏈中新增一塊交易,必須解決某種「複雜但是無用」的計算問題。
本質上, 這種做法可確保礦工花費了一些金錢或資源(礦機)完成工作,這表示了它們將不會損害區塊鏈系統 ,因為對系統的損害也將會導致投資的損失,進而損害他們自身。
為保證執行區塊時間不變,問題的複雜性會發生變化。有時,會存在多名礦工同時解決了問題。在這種情況下,每位礦工從中選取一個區塊鏈,並以選取最長鏈者為獲勝者。
因此,如果假定大多數礦工工作在同一個鏈上,那麼成長最快的鏈將成為最長和最值得信任的鏈。這樣,只要由礦工提交的工作有超過一半是值得信任的,那麼加密貨幣就是安全的。
2. 權益證明(PoS,Proof of Stake)
優點 :節能;攻擊者代價更大;不易受“規模經濟”的影響。
缺點 :「無利害關係」(Nothing at stake)攻擊問題。
使用者 :Ethereum(即將推出)、Peercoin、Nxt。
型別 :有競爭共識。
正是因為PoW演算法在挖礦過程中對環境和電力的浪費極大,PoS才作為一種代替演算法。
POS也稱股權證明,類似於財產儲存在銀行,這種模式會根據你持有數字貨幣的量和時間,分配給你相應的利息。鑑於POW主要依賴於計算機硬體的稀缺性來防止女巫攻擊,POS則主要依賴於區塊鏈自身裡的代幣。在POW中,一個使用者可能拿1000美元來買計算機,加入網路來挖礦產生新區塊,從而得到獎勵。
簡單來說, 就是一個根據你持有貨幣的量和時間,給你發利息的一個制度 ,在股權證明POS模式下,有一個名詞叫幣齡,每個幣每天產生1幣齡,比如你持有100個幣,總共持有了30天,那麼,此時你的幣齡就為3000,這個時候,如果你發現了一個POS區塊,你的幣齡就會被清空為0。
你每被清空365幣齡,你將會從區塊中獲得0.05個幣的利息(假定利息可理解為年利率5%),那麼在這個案例中,利息 = 3000 * 5% / 365 = 0.41個幣,這下就很有意思了,持幣有利息。
然而, 一旦幣的權益被用於簽名一個區塊,則幣齡將清為零,這樣必須等待至少30日才能簽署另一區塊 。同時,為防止非常老或非常大的權益控制區塊鏈,尋找下一區塊的最大概率在90天后達到最大值,這一過程保護了網路,並隨著時間逐漸生成新的幣而無需消耗大量的計算能力。
權益證明必須採用某種方法定義任意區塊鏈中的下一合法區塊,依據賬戶結餘來選擇將導致中心化,例如單個首富成員可能會擁有長久的優勢。為此,人們還設計了其他不同的方法來選擇下一合法區塊。
PoW與PoS對比
3. 延遲工作量證明(dPoW,Delayed Proof-of-Work)
優點 :節能;安全性增加;可以通過非直接提供 Bitcoin(或是其它任何安全鏈),添加價值到其它區塊鏈,無需付出 Bitcoin(或是其它任何安全鏈)交易的代價。
缺點 :只有使用PoW或PoS的區塊鏈,才能採用這種共識演算法;在“公證員啟用”(Notaries Active)模式下,必須校準不同節點(公證員或正常節點)的雜湊率,否則雜湊率間的差異會爆炸(下文將給出詳細解釋)。
採用者 :Komodo
型別 :協同型共識(Collaborative consensus)
DPoW是建立在PoB與DPoS基礎上的新一代共識機制,借鑑了前輩共識機制的設計理念和執行的經驗。
解釋DPoW前,需要先說明什麼叫PoB。
PoB(Proof of Burn)叫做焚燒證明機制,是一種通過焚燒自己手中的代幣來表決誰擁有對網路的領導地位的承諾 。焚燒代幣的數量越多,能獲得網路領導地位的概率越高。PoB是分散式共識的一種方法,也是工作量證明機制的替代方法。它也可以用來引導一種加密貨幣。
在基於DPoW的區塊鏈中,礦工挖礦所獲得的不再是獎勵的代幣,而是可以焚燒的“wood”——燃木。礦工使用自己的算力,通過雜湊演算法,最終證明自己的工作量之後,獲取對應的wood,wood不可交易。當wood積攢到一定量之後,可以前往燃燒場地燃燒wood。
通過一組演算法計算後,燃燒較多wood的人或者BP或者一組BP可以獲取下個事件段出塊的權利,成功出塊後獲取獎勵(代幣) 。由於一個時間段內可能會有多人燃燒wood,下一個時間段出塊的概率由自己燃燒wood數量決定。焚燒的越多,下一段時間可以獲得出塊權利的概率越高。
這樣可以讓算力和出礦權利達到一個平衡。不一定非要龐大算力的礦工、礦池才能成為區塊生產者。小礦工也有春天,只要辛勤勞動,積攢一定數量的wood,也能出塊。保證效率,人人蔘與,最平民化的參與方式保證了去中心化的理念,避免擁有算力的組織或者持幣大戶把持網路。
dPoW 系統中有兩種型別的節點:公證人節點和正常節點 。64 個公證人節點是由 dPoW 區塊鏈的權益持有者(stakeholder)選舉產生的,它們可從 dPoW 區塊鏈向所附加的 PoW 區塊鏈新增經公證確認的塊。 一旦添加了一個塊,該塊的雜湊值將被新增到由 33 個公證人節點簽署的 Bitcoin 交易中,並建立一個雜湊到 Bitcoin 區塊鏈的 dPow 塊記錄 。該記錄已被網路中的大多數公證人節點公證。
為避免公證人節點間在挖礦上產生戰爭,進而降低網路的效率,Komodo 設計了一種採用輪詢機制的挖礦方法,該方法具有兩種執行模式。
在“無公證人”(No Notary)模式下,支援所有網路節點參與挖礦,這類似於傳統 PoW 共識機制。而在“公證人啟用”(Notaries Active)模式下,網路公證人使用一種顯著降低的網路難度率挖礦 。“公證人啟用”模式下,允許每位公證人使用其當前的難度挖掘一個區塊,而其它公證人節點必須採用 10 倍難度挖礦,所有正常節點使用公證人節點難度的 100 倍挖礦。
4. 授權 PoS(DPoS,Delegated Proof-of-Stake)
優點 :節能;快速;高流量部落格網站 Steemit 就使用了它。EOS 的塊時間是 0.5 秒。
缺點 :略為中心化;擁有高權益的參與者可投票使自己成為一名驗證者(這是近期已在 EOS 中出現的問題)。
採用者 :BitShares、Steemit、EOS、Lisk、Ark。
型別 :協同型共識
DPoS機制,又叫做「股份授權證明機制」和「受託人機制」,是2014年4月由Bitshares 的首席開發者 Dan Larimer(BM)提出的。
它的原理是讓每一個持有位元股的人進行投票,由此產生101位代表 , 我們可以將其理解為101個超級節點或者礦池,而這101個超級節點彼此的權利是完全相等的 。
從某種角度來看,DPOS有點像是議會制度或人民代表大會制度。如果代表不能履行他們的職責(當輪到他們時,沒能生成區塊),他們會被除名,網路會選出新的超級節點來取代他們。DPOS的出現最主要還是因為礦機的產生,大量的算力在不瞭解也不關心比特幣的人身上,類似演唱會的黃牛,大量囤票而絲毫不關心演唱會的內容。
DPoS的虛擬碼實現
為了方便理解,可以再舉個例子。想象有這樣一家公司:公司員工總數有1000人,每個人都持有數額不等的公司股份。每隔一段時間,員工可以把手裡的票投向自己最認可的10個人來領導公司,其中每個員工的票權和他手裡持有的股份數成正比。等所有人投完票以後,得票率最高的10個人成為公司的領導。
如果有領導能力不勝任或做了不利於公司的事,那員工可以撤銷對改領導的投票,讓他的得票率無法進入前10名,從而退出管理層。這就是對DPoS(Delegated Proof of Stake)共識機制的一個形象描述。
5. 實用拜占庭容錯演算法(PBFT:Practical Byzantine Fault Tolerance)
優點 :高速、可擴充套件。
缺點 :通常用於私有網路和許可網路。
採用者 :Hyperledger Fabric、Stellar、Ripple、Dispatch
在解釋這種演算法之前,我們先來看看分散式計算中的經典問題—— 拜占庭將軍問題 。
拜占庭將軍問題是Leslie Lamport在10世紀80年代提出的一個假想問題。拜占庭是東羅馬帝國的首都, 由於當時拜占庭羅馬帝國國土遼闊,每支軍隊的駐地分隔很遠,將軍們只能靠信使傳遞訊息。發生戰爭時將軍們必須制訂統一的行動計劃 。
然而,這些將軍中有叛徒,叛徒希望通過影響統一行動計劃的制定與傳播,破壞忠誠的將軍們一致的行動計劃。 因此,將軍們必須有一個預定的方法協議,使所有忠誠的將軍夠達成一致 。而且少數幾個叛徒不能使忠誠的將軍做出錯誤的計劃。 也就是說,拜占庭將軍問題的實質就是要尋找一個方法,使得將軍們在一個有版徒的非信任環境中建立對戰鬥計劃的共識 。
在分散式系統中,特別是在區塊鏈網路環境中,也和拜占庭將軍的環境類似,有執行正常的伺服器(類似忠誠的拜占庭將軍),還有故障的伺服器,有破壞者的伺服器(類似叛變的拜占庭將軍)。共識演算法的核心是在正常的節點間形成對網路狀態的共識。
實用拜占庭容錯(PBFT,Practical Byzantine Fault Tolerance)是首個提出的該問題解決方案,當前已被 Hyperledger Fabric 採用。 PBFT 使用了較少(少於 20 個,之後會稍有增加)的預選定將軍數,因此執行非常高效。它的優點是高交易通量和吞吐量,但是不足之處在於是中心化的,並用於許可網路 。
拜占庭容錯系統是指:在一個擁有n臺節點的系統,整個系統,對每個請求滿足如下條件:
-
所有非拜占庭節點使用相同的輸入資訊,產生同樣的結果;
-
如果輸入的資訊正確,那麼所有非拜占庭節點必須接收這個資訊,並計算相應的結果。
與此同時,在拜占庭系統的實際執行過程中一般假設系統中拜占庭節點不超過m臺,並且對每個請求滿足2個指標:
-
安全性 ——任何已經完成的請求都不會被更改,它可以在以後請求看到;
-
活性 ——可以接受並且執行非拜占庭客戶端的請求,不會被任何因素影響而導致非拜占庭客戶端的請求不能執行。
拜占庭系統目前普遍採用的假設條件包括:
1) 拜占庭節點的行為可以是任意的,拜占庭節點之間可以共謀;
2) 節點之間的錯誤是不相關的;
3) 節點之間通過非同步網路連線,網路中的訊息可能丟失、亂序、延時到達;
4) 伺服器之間傳遞的資訊,第三方可以知曉 ,但是不能竄改、偽造資訊的內容和驗證資訊的完整性;
簡化的PBFT的協議通訊模式
此外, PBFT是一種狀態機副本複製演算法,即服務作為狀態機進行建模,狀態機在分散式系統的不同節點進行副本複製。每個狀態機的副本都儲存了服務的狀態,同時也實現了服務的操作 。將所有的副本組成的集合使用大寫字母R表示,使用0到|R|-1的整數表示每一個副本。假設|R|=3f+1,這裡f是有可能失效的副本的最大個數。儘管可以存在多於3f+1個副本,但是額外的副本除了降低效能之外不能提高可靠性。
6. 授權拜占庭容錯演算法(dBFT,Delegated Byzantine Fault Tolerance)
優點 :快速;可擴充套件。
缺點 :每個人都爭相成為根鏈。其中可能存在多個根鏈。
採用者 :Neo。
同樣是為了解決拜占庭將軍問題,「授權拜占庭容錯」機制,是一種在NEO區塊鏈內部實現的保證容錯的共識演算法。
在這個機制當中,存在兩個參與者,一個是專業記賬的“記賬節點”,一個是系統當中的普通使用者 。
普通使用者基於持有權益的比例來投票決定記賬節點,當需要通過一項共識時,在這些記賬節點中隨機推選出一名發言人擬定方案,然後由其他記賬節點根據拜占庭容錯演算法,即少數服從多數的原則進行表態,如果超過66%的節點表示同意發言人方案,則共識達成;否則,重新推選發言人,重複投票過程。
所以說,dBFT機制實際使用了一種迭代共識的方法來保證系統達成一致決定。 然而, 這種機制的缺點在於,當系統中有超過三分之一的記賬節點停止工作時,整個區塊鏈網路將無法提供正常的服務 ;當超過三分之一的節點聯合作惡時,區塊鏈將有可能發生分叉。
7. 權威證明(PoA,Proof-of-Authority)
優點 :節能、快速。
缺點 :略為中心化;雖然可用於公有區塊鏈,但是通常用於私有區塊鏈和許可區塊鏈。
使用者 :POA.Network、Ethereum Kovan testnet、VeChain。
型別 :協同型共識。
基於 PoA 的網路、事務和區塊,是由一些經認可的賬戶認證的,這些被認可的賬戶稱為“驗證者”(Validator)。驗證者執行的軟體,支援驗證者將交易(transaction)置於區塊中。該過程是自動的,無需驗證者持續監控計算機,但需要維護計算機(權威節點)不妥協(uncompromised)。
驗證者必須滿足以下三個條件:
-
其身份必須在鏈上得到正式驗證,資訊可在公有可用域中交叉驗證;
-
其資格必須難以獲得,這樣所得到的驗證塊的權利才彌足珍貴(例如,潛在的驗證者需要獲得公證書);
-
建立權威的檢查和程式必須完全統一。
使用 PoA,每個個體都具有變成驗證者的權利,因此存在一旦獲取就保持驗證者位置的動機。通過對身份附加一個聲譽,可以鼓勵驗證者去維護交易的過程。因為驗證者並不希望讓自己獲得負面聲譽,這會使其失去來之不易的驗證者地位。
8. 所用時間證明(PoET,Proof of Elapsed Time)
優點 :參與代價低;更多人可輕易加入,進而達到去中心化;對於所有參與者而言,更易於驗證領導者是通過合法選舉產生的;控制領導者選舉過程的代價,是與從中獲得的價值成正比的。
缺點 :儘管 PoET 的代價低,但是必須要使用特定的硬體;不適用於公有區塊鏈。
採用者 :HyperLedger Sawtooth
型別 :有競爭共識
PoET 共識機制演算法通常用於許可區塊鏈網路,它可決定網路中獲得區塊者的挖礦權利。許可區塊鏈網路需要任何預期參與者在加入前驗證身份。根據公平彩票系統的原則,每個節點具有同等的可能成為勝出者。PoET 機制賦予大量可能的網路參與者以平等勝出的機會。
PoET 的工作機制如下: 網路中的每位參與節點都必須等待一個隨機選取的時期,首個完成設定等待時間的節點將獲得一個新區塊。區塊鏈網路中的每個節點會生成一個隨機的等待時間,並休眠一個設定的時間 。最先醒來的節點,即具有最短等待時間的節點,喚醒並向區塊鏈提交一個新區塊,然後廣播必要的資訊到整個對等網路中。同一過程將會重複,以發現下一個區塊。
在 PoET 網路共識機制中,需要確保兩個重要因素。
第一,參與節點在本質上會自然地選取一個隨機的時間,而非某一個參與者為勝出而刻意選取了較短的時間。
第二,勝出者的確完成了等待時間。
PoET 理念是由著名的晶片製造巨頭 Intel 於 2016 年早期提出的。Intel 為解決“隨機領導者選舉”的計算問題,實現了一個可用的高科技工具。
這種內在機制允許應用在受保護的環境中執行受信任的程式碼,它確保了上面提出的兩個要求得到滿足,即隨機選擇所有參與節點的等待時間,以及勝出參與者真正完成了等待時間。
PoET 通過控制代價實現了共識過程,該代價依然是與從過程中獲得的價值成正比。這是保證加密貨幣經濟持續繁榮的一個關鍵需求。
9. 權益流通證明(PoSV,Proof of Stake Velocity)
採用者 :Reddcoin
PoSV 是作為 PoW 和 PoS 的一種替代方法而提出的,其目的是提高 P2P 網路的安全性,進而用於確認 Reddcoin 交易。Reddcoin 是一種加密貨幣,專為加速數字化時代的社交互動而提出的。
PoSV 在設計上鼓勵所有者(權益)和活動(流通),直接對應於 Reddcoin 作為真實貨幣的兩個主要功能,即儲存價值和交換中介。Reddcoin 也可在異構社交場景中作為計量單位使用。
10. 恆星共識(Stellar Consensus)
優點 :去中心化控制;低延遲;靈活的信任機制;漸進安全(Asymptotic security)。
採用者 :Stellar
恆星共識基於聯邦拜占庭共識(FBA)。恆星共識協議(SCP,Stellar Consensus Protocol)提供了一種不依賴閉合系統實現準確記錄金融交易而達成共識的方法。
SCP 具有一組可驗證的安全屬性,這些屬性根據如何安全地保持活力而做了優化。一旦出現分割槽或不當行為節點,它將會終止網路過程,直至達成共識。SCP 同時具備四種屬性:去中心控制、低延遲、靈活信任機制和漸進安全。
11. 活動證明(PoActivity,Proof Of Activity)
使用者 :Decred
為避免出現惡性通貨膨脹(當大量貨幣充斥系統時就會發生),比特幣將只生成兩千一百萬枚。這意味著,在某些時候,比特幣區塊獎勵補貼將終止,比特幣礦工將只能收取交易費用。
一些人猜測這可能會導致由“公地悲劇(Tragedy of the commons)”所引發的安全問題,人們出於自身利益考慮行事並破壞系統。因此,人們提出了 PoActivity 作為一種替代 Bitcoin 的激勵結構。
PoActivity 是一種結合了 PoW 和 PoS 的混合方法。在 PoActivity 中,挖礦一開始使用的是傳統的 PoW,礦工們爭相解決加密難題 。根據實現,挖掘的區塊不包含任何交易,它們更像模板。因此,勝出的區塊將只包含頭部資訊,以及礦工的獎勵地址。
此時,系統將切換到 PoS。PoActivity 根據頭部資訊選擇一組隨機驗證者對新區塊簽名。如果一位驗證者所擁有的系統中代幣越多,那麼該驗證者被選中的可能性也會越大。一旦所有驗證者已簽名,那麼模板就會變成一個完整的區塊。
如果在完成區塊時,某些選定的驗證者是不可用的,那麼就選擇下一個勝出區塊,並選擇一組新的驗證者,依此類推,直到區塊收到到正確數量的簽名。費用由礦工和在區塊上簽名的驗證者分攤。
對 PoActivity 的批評包括挖掘區塊耗能過高(與PoW一樣),以及無法阻止驗證者做雙重簽名。
以上就是目前主流的共識演算法 。
如果跳出開發者的角度,更多結合政治與經濟的思考方式在裡面,或許還會出現更多的共識演算法,如結合類似PPP概念的共識方式,不僅能達到對惡意者的懲罰性質,還能達到最高效節約算力的目的也說不定。
至於說演算法的選擇,營長想提醒大家: 沒有最好的演算法,只有最適合自己的演算法 。共識演算法的選擇與應用場景高度相關,可信環境使用Paxos 或者RAFT,帶許可的聯盟可使用PBFT ,非許可鏈可以是PoW,PoS,Ripple共識等。根據根據自己的實際需求選擇共識演算法,才是最優解。
營長為大家整理了這麼多,喜歡就轉起來吧~
參考文獻:
大白話談談所謂的共識演算法/幣圈新貴
三十種共識演算法,應用計算核心/終結者ASDF
區塊鏈共識演算法-POW/wycandyy
共識機制3.0時代來臨 | DPoW達到效率與去中心化的新平衡點/Celeschain
[區塊鏈]共識演算法(POW,POS,DPOS,PBFT)介紹和心得/樂扣老師lekkoliu
區塊鏈中常用共識演算法總結/已不再是少年
什麼是NEO的dBFT共識機制?/華爾街見聞
A Hitchhiker’s Guide to Consensus Algorithms/Zane Witherspoon
Consensus Algorithms: The Root Of The Blockchain Technology/HASIB ANWAR
區塊鏈大本營選單更新提醒
New選單升級啦,一鍵直通CSDN會員服務。
你關心的開發問題,這裡都有答案。
搜尋: 開發疑難/資源一鍵查詢,搜遍CSDN全站;
會員購買: 專屬VIP購買,免積分下載/免廣告/獲免費課程;
下載APP: 安裝CSDN APP,CSDN資源隨身帶;
個人中心: 掌上CSDN個人助手,專屬您的個人空間。