针对Algorand所使用的密码相关技术细节进行介绍
關(guān)鍵概念
- VRF: 可驗(yàn)證隨機(jī)函數(shù)。簡(jiǎn)單來(lái)說(shuō)是:vrf,Proof = VRF(sk,seed),sk為私鑰,seed為隨機(jī)種子;通過(guò)Verify(proof,pk,seed)驗(yàn)證vrf的合法性。
- cryptographic sorition: 根據(jù)用戶本輪的VRF值,自身的權(quán)重以及公開(kāi)的區(qū)塊鏈信息,計(jì)算出某用戶本輪被選舉的sub-users個(gè)數(shù),并提供相應(yīng)的證明
- committee member: 見(jiàn)證人委員會(huì),即使用cryptographic sortition選舉出的用戶集合。
- FINAL共識(shí):全網(wǎng)用戶對(duì)某一非空塊達(dá)成了共識(shí)。FINAL區(qū)塊及之前區(qū)塊所包含的交易均被確認(rèn)。
- TENTATIVE共識(shí):其他用戶可能對(duì)不同的區(qū)塊達(dá)成了共識(shí)。TENTATIVE區(qū)塊的交易需要在對(duì)之后的FINAL區(qū)塊達(dá)成共識(shí)后得到確認(rèn)。
基本假設(shè)
算法假設(shè)
- 誠(chéng)實(shí)用戶運(yùn)行bug-free的軟件。
- 節(jié)點(diǎn)可以自由地隨時(shí)加入網(wǎng)絡(luò),而且不需要申請(qǐng)。網(wǎng)絡(luò)中的每一個(gè)節(jié)點(diǎn)通過(guò)一個(gè)公鑰的地址(這個(gè)地址同時(shí)也是錢(qián)包地址)進(jìn)行表示,對(duì)于新加入的節(jié)點(diǎn)地址,只有和網(wǎng)絡(luò)中其余節(jié)點(diǎn)發(fā)生轉(zhuǎn)賬關(guān)系之后,才可以參與到網(wǎng)絡(luò)中的區(qū)塊共識(shí)
- 攻擊者是動(dòng)態(tài)變化的,誠(chéng)實(shí)節(jié)點(diǎn)隨時(shí)可能變?yōu)楣粽?/li>
- 誠(chéng)實(shí)節(jié)點(diǎn)所持Token的總數(shù)占比大于2/3,以避免區(qū)塊分叉與交易雙花。
- 強(qiáng)同步(strong synchrony)假設(shè):大多數(shù)誠(chéng)實(shí)用戶(例如95%)發(fā)送的信息都能在一定的已知的時(shí)間范圍內(nèi),被大多數(shù)誠(chéng)實(shí)的用戶接收。
- 弱同步(weak synchrony)假設(shè):網(wǎng)絡(luò)在一定的長(zhǎng)時(shí)間內(nèi)是異步的(例如完全被惡意方控制)。在異步階段之后,網(wǎng)絡(luò)一定會(huì)有一段合理時(shí)長(zhǎng)的強(qiáng)同步階段,在這一階段,Algorand可以確保算法安全。在此情況下,算法仍然安全但性能會(huì)受較大影響。
- 強(qiáng)同步時(shí)鐘:為了在弱同步情況下執(zhí)行恢復(fù)協(xié)議,所有節(jié)點(diǎn)需要同步本地時(shí)鐘,即本地時(shí)鐘應(yīng)當(dāng)足夠接近,使得所有節(jié)點(diǎn)執(zhí)行恢復(fù)協(xié)議的步調(diào)基本一致。
網(wǎng)絡(luò)假設(shè)
- 網(wǎng)絡(luò)消息傳播時(shí)間上限:固定時(shí)間內(nèi)完成對(duì)固定比例的用戶的網(wǎng)絡(luò)傳播。
- 比如,比特幣:1KB消息,在1秒鐘內(nèi)完成全網(wǎng)95%的傳播,而1MB消息需要1.5分鐘完成全網(wǎng)95%的傳播。
總體概括
- Algorand 采用可驗(yàn)證隨機(jī)函數(shù)、POS (賬戶余額權(quán)重)以及新的拜占庭協(xié)議議定書(shū)(Byzantine Agreement Protocol,BA*)整合方式的共識(shí)機(jī)制來(lái)實(shí)現(xiàn)提高TPS的同時(shí),沒(méi)有犧牲去中心化和隱私性,并且擁有良好的擴(kuò)展性。
可驗(yàn)證的隨機(jī)函數(shù):
- Micali是可驗(yàn)證的隨機(jī)函數(shù)(verifiable random functions:VRF)的發(fā)明人之一,VRF是一種隨機(jī)數(shù)產(chǎn)生方式,每一個(gè)用戶,都能夠通過(guò)計(jì)算他們的私鑰和區(qū)塊鏈上公共信息的函數(shù)(VRF),獨(dú)立地判斷他是否當(dāng)選委員會(huì)的成員。這一過(guò)程是非互動(dòng)的,所以可以有效保證信息的隱私性和防止參與者被攻擊的可能性。
- 由于使用節(jié)點(diǎn)私鑰作為Input,VRF的結(jié)果無(wú)法被預(yù)測(cè)。其他節(jié)點(diǎn)只有通過(guò)網(wǎng)絡(luò)接收到隨機(jī)結(jié)果后才能對(duì)其合法性進(jìn)行驗(yàn)證,即攻擊者在得知選舉結(jié)果時(shí),選舉人已經(jīng)做出行動(dòng)了。
- VRF的輸出值除了隨機(jī)值外,還包含一個(gè)proof,提供了隨機(jī)值驗(yàn)證的零知識(shí)證明,即不必知道某人私鑰即可證明該隨機(jī)值是由某人產(chǎn)生的。
- Algorand 利用 VRF 來(lái)選擇區(qū)塊生產(chǎn)者和驗(yàn)證者,保證所有共識(shí)參與者都是隨機(jī)地、公平地被選出的。可驗(yàn)證隨機(jī)函數(shù)(VRF,Verifiable Random Function)是由 Micali 教授等提出的一種偽隨機(jī)函數(shù),和普通的隨機(jī)函數(shù)一樣,對(duì)于不同輸入,其輸出也具有隨機(jī)性(嚴(yán)格來(lái)說(shuō)是“偽隨機(jī)”)。其獨(dú)特之處在于調(diào)用者可以提供一個(gè)證明,表明這個(gè)隨機(jī)輸出確實(shí)由該調(diào)用者產(chǎn)生。
- VRF 可以有多種實(shí)現(xiàn)方式,Micali 等人在其原始論文中提供了一種較復(fù)雜的實(shí)現(xiàn)方式。Algorand 利用哈希函數(shù)和數(shù)字簽名的特性,提供了一種較為簡(jiǎn)單的 VRF 實(shí)現(xiàn)。具體實(shí)現(xiàn)方式是調(diào)用者 i 將輸入 m 通過(guò)數(shù)字簽名和哈希函數(shù)映射為固定長(zhǎng)度的輸出 H[SIGi(m)],即 m -> H[SIGi(m)]。
- 對(duì)于任何輸入 m,不同的調(diào)用者 i 生成的數(shù)字簽名 SIGi(m) 都是唯一的;而對(duì)于不同輸入,哈希函數(shù) H 的輸出具有隨機(jī)性,因此上述映射符合 VRF 的”隨機(jī)性“要求。同時(shí),由于 i 的數(shù)字簽名 SIGi(m) 可通過(guò)其公鑰對(duì)其身份進(jìn)行驗(yàn)證,因此其也符合 VRF ”可驗(yàn)證“ 的特性,SIGi(m) 就是 VRF 中提到的”證明“。
具體內(nèi)容詳解
隨機(jī)選出每一輪的區(qū)塊生產(chǎn)者(Leader)
- 每一輪共識(shí)開(kāi)始時(shí),每個(gè)節(jié)點(diǎn)都可以通過(guò)以下 VRF 獨(dú)立地驗(yàn)證自己是否是潛在的 leader:
- .H[SIG(r, 1, Q(r-1))] <= 1 / SIZE(PK(r-k))
- 其中,H 是哈希運(yùn)算;SIG 是簽名運(yùn)算;r 是目前的輪次;Q(r-1) 為與 r-1 輪的種子;SIZE(PK(r-k)) 是在 r-k 輪所有符合要求的公鑰的數(shù)量(k 為回溯系數(shù));公式開(kāi)始的 . 表示將哈希結(jié)果轉(zhuǎn)化為小數(shù)位,從而保證結(jié)果為[0,1)的某個(gè)值。
- 節(jié)點(diǎn)通過(guò)自己的私鑰計(jì)算上面簽名的哈希值是否符合要求,從而知道自己是否屬于候選的 leader,在此過(guò)程中無(wú)需和其他節(jié)點(diǎn)交換信息。由于哈希函數(shù)輸出的隨機(jī)性,可以認(rèn)為符合要求的候選節(jié)點(diǎn)都是隨機(jī)選出的。候選節(jié)點(diǎn)隨后可以生成新區(qū)塊,并向全網(wǎng)提供簽名證實(shí)自己的身份。如果有多個(gè)候選 leader,最終上述哈希值最小的 leader 將在后續(xù)的共識(shí)中成為本輪最終的 leader。Leader 產(chǎn)生的區(qū)塊 Br 包含了本輪的所有交易和上述的證明信息,由驗(yàn)證組成員進(jìn)行共識(shí)驗(yàn)證。
隨機(jī)選出每一輪每一階段的驗(yàn)證組
- 驗(yàn)證組成員的選擇與上述過(guò)程類(lèi)似,在每一輪和每一階段(step),所有節(jié)點(diǎn)都可以獨(dú)立驗(yàn)證自己是否屬于驗(yàn)證組成員:
- .H[SIG(r, s, Q(r-1))] <= n / SIZE(PK(r-k))
- 其中 s 為本輪所處的不同階段,Algorand 在每一輪的各個(gè)階段都有不同的驗(yàn)證組,從而進(jìn)一步保證安全性;n 為預(yù)期的驗(yàn)證組成員數(shù)量,可以人為設(shè)定;其他參數(shù)含義與候選 leader 一樣,每一階段的驗(yàn)證組成員均隨機(jī)選出,驗(yàn)證節(jié)點(diǎn)在證實(shí)自己身份后,可以開(kāi)始參與共識(shí)驗(yàn)證過(guò)程,揭露自己的簽名即可證明其身份。
引入權(quán)益證明(Proof-of-Stake,PoS)機(jī)制
- 上述的隨機(jī)選擇過(guò)程沒(méi)有考慮 Token 持有者的權(quán)重,惡意節(jié)點(diǎn)可能通過(guò)大量生成有效私鑰從而有極大概率成為區(qū)塊的生產(chǎn)者和驗(yàn)證者。Algorand 在其公布的實(shí)現(xiàn)建議中引入了名為 Honest Majority of Money (HMM)的條件假設(shè),其基本思想來(lái)源于 PoS 共識(shí)機(jī)制,即在上述隨機(jī)選擇過(guò)程中引入代幣持有量(Stake)作為權(quán)重,持有量多的節(jié)點(diǎn)被選中的概率較高,而代幣持有者往往更傾向于保護(hù)網(wǎng)絡(luò)的安全性。
- 具體可以表示為如下公式:.H[SIG(r, 1, Q(r-1))] <= (a(i,r) / M) * (1 / SIZE(PK(r-k)))
- 其中,a(i,r) / M 為節(jié)點(diǎn)所持有的幣的數(shù)量占代幣總數(shù) M 的權(quán)重。其余過(guò)程與前面描述一直。
純粹股權(quán)證明PurePoS
- 正如上面所述,一小部分資金的所有者不可能損害整個(gè)系統(tǒng),而且大多數(shù)資金的所有者作惡,使自己的資產(chǎn)貶值將是十分愚蠢的。
-
例如,在PoW或BPoS中,少數(shù)用戶就可以阻止其他用戶進(jìn)行交易。在Algorand,只有大部分資金的所有者才能阻止其他用戶進(jìn)行交易。但如果他們這樣做,聲譽(yù)將受到極大的損害,資金將不再被普遍接受,其購(gòu)買(mǎi)力將大大降低。對(duì)于大多數(shù)資金的所有者來(lái)說(shuō),這并不是一個(gè)好的結(jié)果。
PPos如何出塊
在Algorand一個(gè)新的區(qū)塊分為兩個(gè)階段:?
- 在第一階段,隨機(jī)選擇一個(gè)Token,其所有者就是下一個(gè)塊提議者。
- 在第二階段,從當(dāng)前系統(tǒng)中的所有通證中選擇1000個(gè)Token。
- 這1000個(gè)Token的所有者被選為第2階段委員會(huì)的一部分,該委員會(huì)批準(zhǔn)第一個(gè)用戶提出的區(qū)塊。
- 因此,委員會(huì)的一些成員可以被選擇兩次或更多次,通常是k次,在這種情況下,該成員將在委員會(huì)中擁有k票以批準(zhǔn)下一個(gè)區(qū)塊。
第二階段是十分必要的
- 在任何社會(huì)中,區(qū)塊鏈也不例外,總有一小部分壞人被發(fā)現(xiàn);比如1%。也許2%。如果一個(gè)人不幸生活在一個(gè)非常危險(xiǎn)的社會(huì)中,那么10%的人可能是壞人,也許甚至20%!但只要大多數(shù)成員遵守規(guī)定的規(guī)則,就會(huì)存在一個(gè)穩(wěn)定和諧的社會(huì)。
- 假設(shè)Algorand中10%的代幣屬于不誠(chéng)實(shí)的人。然后在階段1中,十分之一選擇提議塊的用戶可能是壞演員。因此,他可以告訴一些用戶該塊是X,而告訴其他用戶該塊是Y等等,從而產(chǎn)生關(guān)于區(qū)塊的意見(jiàn)分歧。
- 階段2消除了這個(gè)問(wèn)題。實(shí)際上,如果你選擇隨機(jī)的1000個(gè)代幣,當(dāng)最多10%的代幣是不誠(chéng)實(shí)的手牌時(shí),大多數(shù)所選硬幣屬于不良參與者的概率,即委員會(huì)大多數(shù)投票是糟糕的演員的概率是如此之低,以至于可以忽略不計(jì)。
誰(shuí)來(lái)進(jìn)行隨機(jī)選擇委員會(huì)
- Algorand采取的方式:委員會(huì)成員選擇自己。你可能會(huì)想“什么?這是一個(gè)糟糕的主意!因?yàn)槿绻沂且粋€(gè)壞人,我會(huì)選擇自己成為這個(gè)委員會(huì)的成員。接下來(lái)。那之后......“但不是那么快。
- 要想屬于委員會(huì),你的一枚代幣必須獨(dú)立贏得這個(gè)機(jī)會(huì),像加密地公平的彩票,你可以在你自己的計(jì)算機(jī)隱私中獨(dú)立運(yùn)行?-?也就是說(shuō),不與任何其他人交談。而且由于彩票是加密公平的,你不能改變被選中的機(jī)會(huì)。(即使是擁有巨大算力資源的民族國(guó)家,也無(wú)法增加被選中的概率。)
- 為了在假設(shè)10,000,000,000個(gè)通證中選擇1,000個(gè)隨機(jī)通證,每個(gè)代幣以概率1,000 /10,000,000,000被選擇?-?即,概率為1千萬(wàn)分之一。
我可以獲得多少票
(如果用戶有n個(gè)通證,額外的算法技術(shù)基本上運(yùn)行一個(gè)整張彩票,而不是n個(gè)單獨(dú)的彩票!)一旦用戶運(yùn)行她的抽獎(jiǎng),就會(huì)出現(xiàn)兩種情況之一。
- 要么所有代幣都沒(méi)有贏得彩票,在這種情況下,用戶對(duì)該區(qū)塊表達(dá)何種意見(jiàn)都將被忽略。
- 或者其中一些k> 1的代幣贏得了彩票,在這種情況下,用戶獲得了一張中獎(jiǎng)彩票,即一個(gè)簡(jiǎn)短的證明,即每個(gè)人都可以很容易地證明此用戶在委員會(huì)中有k票。在后一種情況下,通過(guò)網(wǎng)絡(luò)傳播:證明用戶有k票的中獎(jiǎng)票 ?以及該用戶對(duì)該票的意見(jiàn)。
例子
- 這里具體舉例說(shuō)明一下:假設(shè)網(wǎng)絡(luò)里總共有100萬(wàn)個(gè)幣,要從中選1000個(gè)做委員. 那么每個(gè)幣被選中的概率是千分之一。?我如果有100個(gè)幣,等于我參選了100次,每次千分之一。你如果有10000次,就等于參選了10000次。這些次選擇都是獨(dú)立的,所以有可能你有多次被選中,我也有多次被選中,只是我的概率比你低。
- 但是每次都是千分之一的概率,那么你有100個(gè)token被選中的概率是千分之一的100次方 乘以一個(gè)二項(xiàng)式的系數(shù),概率極低。
偽代碼
入?yún)⒔忉?/span>
- ·sk: 用戶私鑰
- ·seed: 選舉所用的種子信息
- ·role: 當(dāng)前所選舉的身份信息
- ·τ: 期望選舉的子用戶sub-users數(shù)量
- ·w: 用戶的權(quán)重
- ·W: 全網(wǎng)總權(quán)重
介紹
- 為了防止女巫攻擊,Algorand使用二項(xiàng)分布作為概率分布函數(shù),原因是B(k1+k2;w1+w2,p) = B(k1;w1,p) + B(k2;w2,p),即從概率上來(lái)說(shuō),無(wú)法通過(guò)拆分token來(lái)提高被選中子用戶的數(shù)量。
- 某用戶的子用戶數(shù)量j數(shù)量大于0,即表示該用戶被選為committee member(見(jiàn)證人委員會(huì))
選舉驗(yàn)證:
- 選舉證明算法如下,用于判斷某用戶的VRF值是否合法,且在當(dāng)前輪次與步驟下是否被選舉為committee member。該函數(shù)在CommitteeVote中被使用到
如何選取種子
- 在Algorand中,seed作為區(qū)塊的一個(gè)字段,第r輪的seed由第r-1輪區(qū)塊的seed所決定
- 計(jì)算公式如下:<seed(r),π> = VRF(sk,seed(r?1)||r).
- 為了限制攻擊者操縱選舉的能力,選舉算法中所用的seed會(huì)每隔R輪刷新一次,即seed(r) = seed(r-1-(r mod R))。
選擇早先于seed的私鑰
- 上述機(jī)制對(duì)用戶的私鑰sk選擇提出了新的要求:由于seed在固定R輪中不變,這使得惡意用戶可以通過(guò)嘗試不同私鑰來(lái)控制VRF值。Algorand要求用戶的私鑰是在區(qū)塊r-1-(r mod R)之前生成的,論文中提出的方案是使用距離區(qū)塊r-1-(r mod R)早b個(gè)時(shí)間單位的最近區(qū)塊所使用的密鑰對(duì)。
?
新的拜占庭協(xié)議議定書(shū)B(niǎo)A*:
- BA* 是一種高度可擴(kuò)展性極強(qiáng),遠(yuǎn)超目前拜占庭協(xié)議書(shū)的鏈上共識(shí),在這個(gè)過(guò)程中,每個(gè)節(jié)點(diǎn)連續(xù)性提出出塊建議,并且直到權(quán)重最高的快被選出為止。
- 由下圖可知,BA* 協(xié)議也可以理解為兩步驟:第一步,同步確定擁有最大優(yōu)先級(jí)的區(qū)塊,即驗(yàn)證者對(duì)區(qū)塊運(yùn)行分級(jí)共識(shí)協(xié)議,選出驗(yàn)證者共識(shí)最多的候選區(qū)塊。第二步,確定該區(qū)塊是否擁有穩(wěn)定共識(shí)的能力,即驗(yàn)證者對(duì)上一階段選出的候選區(qū)塊,進(jìn)行二元拜占庭協(xié)議驗(yàn)證,要么接受他,要么接受空的區(qū)塊。
BA*共識(shí)又被細(xì)化為兩個(gè)重要的子算法:
Reduction
- 在Block Proposal階段,不同的誠(chéng)實(shí)節(jié)點(diǎn)因?yàn)榫W(wǎng)絡(luò)延遲等因素,會(huì)收集到不同優(yōu)先級(jí)的區(qū)塊,其所觀察到的最高優(yōu)先級(jí)區(qū)塊可能不同。因此,它們傳入BA算法的區(qū)塊也會(huì)不同。因此在做拜占庭共識(shí)之前,先執(zhí)行Reduction*,在全網(wǎng)對(duì)哪個(gè)區(qū)塊的優(yōu)先級(jí)最高這一問(wèn)題進(jìn)行投票并達(dá)成共識(shí),將N個(gè)潛在的區(qū)塊收斂為至多1個(gè)非空區(qū)塊。
具體步驟
- 檢查自己是否為committee member,若是則對(duì)自己提案的區(qū)塊投票。
- 等待λblock + λstep的超時(shí)時(shí)間,收集網(wǎng)絡(luò)用戶的投票。
- 一旦某區(qū)塊的投票數(shù)超過(guò)了T*τ的閾值,則認(rèn)為全網(wǎng)大部分誠(chéng)實(shí)節(jié)點(diǎn)在該區(qū)塊達(dá)成共識(shí),再對(duì)該區(qū)塊投票;若在執(zhí)行上一步等待λblock + λstep時(shí)間的時(shí)候超時(shí),則對(duì)空塊投票。
- 等待λstep的超時(shí)時(shí)間,收集網(wǎng)絡(luò)用戶投票,并返回最終得到的區(qū)塊。
Q&A
Q:為什么要進(jìn)行兩次投票?
A:第一次投票(步驟2)用于對(duì)大多數(shù)節(jié)點(diǎn)所看到的最高優(yōu)先級(jí)區(qū)塊達(dá)成共識(shí),類(lèi)似于prepare階段;第二次投票(步驟3、4)用于對(duì)第一次投票的共識(shí)結(jié)果進(jìn)行共識(shí),表示大多數(shù)節(jié)點(diǎn)已經(jīng)對(duì)某新區(qū)塊達(dá)成共識(shí),類(lèi)似于commit階段。
Q:CommitteeVote函數(shù)中為何要傳入不同的step?(REDUCTION_ONE與REDUCTION_TWO)
A:每個(gè)用戶的vrf值,round和step均為選舉算法的隨機(jī)種子,影響著用戶是否能被選舉為committee member。這里對(duì)Reduction的兩次投票引入了一定的隨機(jī)性,使得兩次投票的用戶不同。若兩次投票用戶均為同一批,惡意方可以在兩次投票之間的時(shí)間間隙,對(duì)第一次投票的用戶進(jìn)行攻擊(因?yàn)榈谝淮瓮镀焙笠呀?jīng)暴露了投票人是誰(shuí)),從而危及算法安全性。
?
BinaryBA*
- BinaryBA* 算法對(duì)Reduction過(guò)程收斂的區(qū)塊進(jìn)行多次投票,在網(wǎng)絡(luò)狀況良好的情況下在第一步即可達(dá)成FINAL共識(shí)。
- 1,step=1時(shí),用戶對(duì)Reduction得到的區(qū)塊hash進(jìn)行投票,并收集票數(shù)。若超時(shí),則保持原區(qū)塊hash,進(jìn)入步驟2;若不超時(shí)且投票結(jié)果為非空塊,則再對(duì)該hash投票3次,并投出FINAL步驟的票(意為當(dāng)前用戶已達(dá)成FINAL共識(shí)),返回該區(qū)塊hash。
- 2,繼續(xù)對(duì)上一步驟中得到的區(qū)塊hash投票并收集票數(shù)。若超時(shí),則將hash置為空塊hash,并進(jìn)行步驟3;若得到空塊,則連續(xù)投票3次并返回空塊hash。
- 3,繼續(xù)對(duì)上一步驟中得到的區(qū)塊hash投票并收集票數(shù)。若超時(shí),則執(zhí)行“拋硬幣”算法,有50%的概率將hash置為原先的區(qū)塊hash或空塊hash。若否,則將hash置為投票結(jié)果。最后重復(fù)步驟1。
Q&A
Q: 在每輪算法的前兩步中達(dá)成共識(shí),為何在return之前要連續(xù)投票3次?
- A: 在公網(wǎng)環(huán)境下,若有很多誠(chéng)實(shí)節(jié)點(diǎn)在某一步達(dá)成共識(shí)并返回,而其余誠(chéng)實(shí)節(jié)點(diǎn)由于網(wǎng)絡(luò)延遲,在給定時(shí)間內(nèi)沒(méi)有收集到足夠的票數(shù),從而超時(shí)進(jìn)入下一輪。此時(shí)在接下來(lái)的step中很可能沒(méi)有足夠的committee member進(jìn)行投票,使得這些節(jié)點(diǎn)始終無(wú)法對(duì)區(qū)塊達(dá)成共識(shí)。Algorand對(duì)這一問(wèn)題的解決方案是:在某用戶達(dá)成共識(shí)并結(jié)束算法之前,預(yù)先對(duì)該區(qū)塊hash進(jìn)行后三步的投票。在還未達(dá)成共識(shí)的用戶看來(lái),這些已達(dá)成共識(shí)的節(jié)點(diǎn)仍然參與了后三步(后一輪)的投票。
Q: 為何設(shè)計(jì)CommonCoin拋硬幣算法?
- A: 避免在網(wǎng)絡(luò)分區(qū)的情況下,攻擊者有機(jī)會(huì)給不同的用戶發(fā)送對(duì)不同hash的投票(或故意不投),使它們對(duì)不同區(qū)塊達(dá)成共識(shí)。同時(shí)CommonCoin加速了BBA的收斂過(guò)程。根據(jù)CommonCoin的算法特性,誠(chéng)實(shí)用戶的比例最壞為2/3,經(jīng)過(guò)CommonCoin得到block_hash和empty_hash概率均為為1/2,因此每經(jīng)過(guò)一次CommonCoin,全網(wǎng)達(dá)成共識(shí)的概率為(2/3)*(1/2) = 1/3。則全網(wǎng)用戶在第i輪達(dá)成共識(shí)的概率為((2/3)^(i-1))*(1/3)。達(dá)成共識(shí)的期望總輪數(shù)為i*((2/3)^(n-1)*(1/3))的無(wú)窮級(jí)數(shù),即極限為3。因此,通過(guò)拋硬幣,在最壞情況下,全網(wǎng)達(dá)成共識(shí)的期望輪數(shù)為3,期望步驟數(shù)為2+3*3=11
改進(jìn)的二元拜占庭協(xié)議 BBA*
- Algorand 引入的 BBA* 是一個(gè)改進(jìn)的二元拜占庭協(xié)議(所謂二元,即只能達(dá)成 0 或 1 兩種共識(shí))。BBA* 可以在誠(chéng)實(shí)節(jié)點(diǎn)超過(guò) ? 的情況下,快速達(dá)成共識(shí)。其具體過(guò)程是一個(gè) 3 步循環(huán),循環(huán)中每一步都有 ? 的概率達(dá)成共識(shí)。
- 節(jié)點(diǎn)之間需要進(jìn)行 P2P 通信,假設(shè)被選中的驗(yàn)證節(jié)點(diǎn)中有 t 個(gè)惡意節(jié)點(diǎn),驗(yàn)證組總的節(jié)點(diǎn)數(shù)為 n >= 3t + 1,即惡意節(jié)點(diǎn)不超過(guò) ? 。協(xié)議過(guò)程如下:
- 所有驗(yàn)證節(jié)點(diǎn)i都有一個(gè)初始值 bi(bi = 0 或 1),協(xié)議開(kāi)始時(shí),每個(gè)驗(yàn)證節(jié)點(diǎn)都會(huì)向其他驗(yàn)證節(jié)點(diǎn)發(fā)送各自的初始值,
協(xié)議第一步(Step 1)是歸 0 過(guò)程:
- 如果某驗(yàn)證節(jié)點(diǎn) i 收到 0 的總數(shù)超過(guò)總驗(yàn)證節(jié)點(diǎn)數(shù)的 ? ,輸出共識(shí)結(jié)果為 0,共識(shí)結(jié)束,不再執(zhí)行后面所有步驟
- 如果某驗(yàn)證節(jié)點(diǎn) i 收到 1 的總數(shù)超過(guò)總驗(yàn)證節(jié)點(diǎn)數(shù)的 ?,則該驗(yàn)證節(jié)點(diǎn)把自己的 bi 設(shè)為 1
- 如果收到的 0 或 1 都沒(méi)超過(guò) ?, 則驗(yàn)證節(jié)點(diǎn)把自己的 bi 設(shè)為 0
- 第一步結(jié)束節(jié)點(diǎn)再次向其他節(jié)點(diǎn)發(fā)送各自的 bi
第二步(Step 2)為歸 1 過(guò)程:
- 如果某驗(yàn)證節(jié)點(diǎn) i 收到 1 的總數(shù)超過(guò)總驗(yàn)證節(jié)點(diǎn)數(shù)的 ? ,輸出共識(shí)結(jié)果為 1,共識(shí)結(jié)束,不再執(zhí)行后面所有步驟
- 如果某驗(yàn)證節(jié)點(diǎn) i 收到 0 的總數(shù)超過(guò)總驗(yàn)證節(jié)點(diǎn)數(shù)的 ?,則該驗(yàn)證節(jié)點(diǎn)把自己的 bi 設(shè)為 0
- 如果收到的 0 或 1 都沒(méi)超過(guò) ?, 則驗(yàn)證節(jié)點(diǎn)把自己的 bi 設(shè)為 1
- 第二步結(jié)束節(jié)點(diǎn)再次向其他節(jié)點(diǎn)發(fā)送各自的 bi
第三步(Step 3)為重新設(shè)定初始值的過(guò)程:
- 如果某驗(yàn)證節(jié)點(diǎn) i 收到 0 的總數(shù)超過(guò)總驗(yàn)證節(jié)點(diǎn)數(shù)的 ?,設(shè)定 bi = 0
- 如果某驗(yàn)證節(jié)點(diǎn) i 收到 1 的總數(shù)超過(guò)總驗(yàn)證節(jié)點(diǎn)數(shù)的 ?,設(shè)定 bi = 1
- 如果收到的 0 或 1 都沒(méi)超過(guò) ?,則每個(gè)驗(yàn)證節(jié)點(diǎn)會(huì)對(duì)某個(gè)和本輪本階段相關(guān)的信息進(jìn)行簽名,并對(duì)簽名求哈希。bi 被設(shè)置為這些哈希值中最小哈希的最低有效位(仍然是 0 或 1)
- 之后返回第一步,直到達(dá)成共識(shí)
- 在 Algorand 中, BBA* 的結(jié)果是對(duì)是否接受某個(gè)區(qū)塊達(dá)成共識(shí),共識(shí)結(jié)果只有接受(0)或拒絕(1)兩種情況。
分級(jí)共識(shí)協(xié)議 GC
- 上述 BBA* 只適用于二元情況,當(dāng)需要對(duì)任意值達(dá)成共識(shí),需要引入分級(jí)共識(shí)協(xié)議,將任意值問(wèn)題轉(zhuǎn)化為二元問(wèn)題:
- Algorand 采用的 GC 分為兩步(上圖來(lái)自 Algorand 白皮書(shū),為了和文中其他部分對(duì)應(yīng),將兩個(gè)步驟命名為 Step 2 和 3),協(xié)議開(kāi)始時(shí),每個(gè)驗(yàn)證節(jié)點(diǎn)i各自都有一個(gè)初始值 vi(在 Algorand 中即候選的新區(qū)塊的哈希)\
- 第一步 (Step 2),所有驗(yàn)證節(jié)點(diǎn)將各自的 vi 發(fā)給其他所有驗(yàn)證節(jié)點(diǎn);
- 第二步(Step 3),對(duì)于某個(gè)x值,當(dāng)且僅當(dāng)節(jié)點(diǎn)收到其他驗(yàn)證節(jié)點(diǎn)發(fā)來(lái)該 x 值的總次數(shù)(多次收到同一節(jié)點(diǎn)發(fā)送的x值,只算一次)超過(guò)總驗(yàn)證節(jié)點(diǎn)數(shù)的 ? 時(shí),這個(gè)節(jié)點(diǎn)會(huì)對(duì)其它節(jié)點(diǎn)發(fā)送值 x:
經(jīng)過(guò) GC,每個(gè)節(jié)點(diǎn)都會(huì)輸出一個(gè)值對(duì) (vi, gi),輸出規(guī)則:
- 當(dāng)收到 x 的總次數(shù)超過(guò)總驗(yàn)證節(jié)點(diǎn)數(shù)的 ? 時(shí),設(shè)定 vi = x, gi = 2;
- 當(dāng)收到 x 的總次數(shù)超過(guò)總驗(yàn)證節(jié)點(diǎn)數(shù)的 ? 時(shí),設(shè)定 vi = x, gi = 1;
- 否則,設(shè)定 vi = 空, gi = 0;
- 簡(jiǎn)單來(lái)說(shuō),分級(jí)共識(shí)的作用是從多個(gè)可能的候選新區(qū)塊中選擇被大多數(shù)認(rèn)可的一個(gè)作為最終候選的區(qū)塊,再通過(guò)上面的 BBA* 最終達(dá)成共識(shí)。
BA* = GC + BBA*
- 改進(jìn)的拜占庭協(xié)議 BA*? 結(jié)合了上述 GC 和 BBA*,先通過(guò) GC 把任意值問(wèn)題(從多個(gè)區(qū)塊中選擇一個(gè)候選)轉(zhuǎn)化為二元問(wèn)題(接收或拒絕新區(qū)塊?),再利用 BBA* 達(dá)成快速二元拜占庭共識(shí),從而可以快速對(duì)任意值達(dá)成共識(shí),其共識(shí)過(guò)程如下:
- ?BA* 的第一步,和第二步,所有驗(yàn)證節(jié)點(diǎn) i 執(zhí)行 分級(jí)共識(shí) GC,各自得到一個(gè)關(guān)于新區(qū)塊的數(shù)值對(duì) (vi, gi),其中 vi 為驗(yàn)證節(jié)點(diǎn) i 認(rèn)為的候選區(qū)塊哈希(有可能為空),gi = 0 或 1 或 2 。
- 第三步,所有驗(yàn)證節(jié)點(diǎn)根據(jù)各自的 (vi, gi) 設(shè)定 BBA* 的初始值,如果 gi = 2,則設(shè)定初始值為 0,如果 gi = 0 或 1, 則設(shè)定初始值為 1 。之后進(jìn)行BBA* 共識(shí)過(guò)程:
- 若共識(shí)結(jié)果為 0,則最終輸出結(jié)果為 vi(非空新區(qū)塊)
- 若共識(shí)結(jié)果為 1, 則最終輸出結(jié)果為空(即新區(qū)塊為空)
- 無(wú)論哪種情況,BA* 都可以在驗(yàn)證節(jié)點(diǎn)中達(dá)成共識(shí),從而確定新區(qū)塊及其包含的交易(有可能為空區(qū)塊)。
?Algorand 區(qū)塊鏈分叉的可能性
- Algorand 實(shí)際采用的是經(jīng)典拜占庭共識(shí)的升級(jí)版 BA*,它和以比特幣為代表的中本聰共識(shí)的最大區(qū)別在于分叉的可能性。后者由于完全去中心化,節(jié)點(diǎn)之間無(wú)法完全通信,因此可能僅在部分節(jié)點(diǎn)間達(dá)成共識(shí),容易發(fā)生分叉。
- Algorand 可以通過(guò)設(shè)定最大可接受的錯(cuò)誤概率 F 調(diào)整分叉的概率。在 Algorand 提供的兩種實(shí)現(xiàn)中,其分叉概率分別為 10^-12 和 10^-18,在現(xiàn)實(shí)中分叉僅存在理論上的可能,但是這個(gè)概率賊低,假設(shè) Algorand 每秒生成一個(gè)區(qū)塊,10^-18 的概率意味著從宇宙大爆炸至今的時(shí)間內(nèi),只有可能發(fā)生一次分叉,可見(jiàn)其概率極低。
- 即使真的發(fā)生分叉,Algorand 仍可以從分叉中恢復(fù):
Algorand 如何保證安全性
種子Q(r)
- Algorand 中的隨機(jī)性主要靠 VRF 保證,每輪隨機(jī)的選出 leader 及驗(yàn)證組。一個(gè)比較直接的想法是把上一區(qū)塊 B(r-1) 作為隨機(jī)函數(shù)的輸入。但這種方法將給惡意節(jié)點(diǎn)帶來(lái)一定的優(yōu)勢(shì):因?yàn)閰^(qū)塊和其包含的交易高度相關(guān),惡意節(jié)點(diǎn)可以通過(guò)調(diào)整區(qū)塊中包含的交易集,獲得多個(gè)輸出,并選擇對(duì)其最有利的交易集產(chǎn)生新區(qū)塊,從而提高自己在下一輪中成為 leader 或驗(yàn)證組的概率。
- 為解決這一問(wèn)題,Algorand 引入了一個(gè)隨機(jī)的、不斷更新的種子參數(shù) Q(r),Q(r) 與交易集本身相互獨(dú)立,因此惡意節(jié)點(diǎn)無(wú)法通過(guò)調(diào)整交易集而獲利。當(dāng)區(qū)塊非空時(shí),Q(r) = H(SIG(Q(r-1),r) (其中,SIG 為 本輪 leader 的簽名); 當(dāng)區(qū)塊為空時(shí),Q(r) = H(Q(r-1),r)
- 可以看出,Q(r) 在每一輪都發(fā)生變化,且與交易本身無(wú)關(guān)。可以證明,當(dāng) Q(r-1) 是隨機(jī)的,則 Q(r) 也是隨機(jī)的。因此惡意節(jié)點(diǎn)無(wú)法通過(guò)改變交易集影響下一個(gè)種子的生成。其中,Q(1)的定義沒(méi)有在相關(guān)文獻(xiàn)中找到。
回溯系數(shù)K
- 種子參數(shù)降低了惡意節(jié)點(diǎn)預(yù)測(cè) leader 的可能性,但擁有多個(gè)潛在 leader 的惡意節(jié)點(diǎn)仍可以有比普通節(jié)點(diǎn)更高的概率成為下一個(gè)區(qū)塊的 leader,但這個(gè)概率會(huì)隨著區(qū)塊的變多而逐漸變小。因此,Algorand 引入了一個(gè)回溯系數(shù) k,第 r 輪的候選組只從 r-k 輪已存在的候選組中選取,惡意節(jié)點(diǎn)在 r-k 輪能夠影響第 r 輪候選組的概率極低。
一次性公鑰
- Algorand 從協(xié)議層面的分叉僅在理論上可能發(fā)生。在實(shí)際中,如果惡意節(jié)點(diǎn)可以挾持其他節(jié)點(diǎn),仍可以在驗(yàn)證組被公開(kāi)的瞬間,強(qiáng)制這些節(jié)點(diǎn)重新簽名新的區(qū)塊,從而產(chǎn)生短暫的分叉。Algorand 引入了一種一次性公鑰的機(jī)制,以杜絕這種可能性。
- 具體原理是所有節(jié)點(diǎn)在加入 Algorand 網(wǎng)絡(luò)時(shí)(即發(fā)生第一筆交易時(shí)),都生成足夠多的一次性公鑰,并公布。這些公鑰將用作后續(xù)所有輪次的簽名驗(yàn)證,并且每個(gè)公鑰只使用一次,一旦被使用后就銷(xiāo)毀。一次性公鑰的生成過(guò)程需要一定的時(shí)間,在 Algorand 的典型實(shí)現(xiàn)中,每個(gè)新節(jié)點(diǎn)需要約 1 小時(shí)來(lái)生成未來(lái) 10^6 輪的所有公鑰(約 180 MB 數(shù)據(jù))。雖然這增加了節(jié)點(diǎn)加入時(shí)的門(mén)檻,但可以從根本上杜絕上述分叉攻擊:因?yàn)橐坏┖灻瓿?#xff0c;公鑰即被銷(xiāo)毀,即使被惡意節(jié)點(diǎn)劫持,也無(wú)法再次簽名產(chǎn)生分叉。
Algorand 的可擴(kuò)展性
- 對(duì)于目前大多數(shù)去中心化區(qū)塊鏈,如比特幣,以太坊以及 Qtum 等,可擴(kuò)展性的主要瓶頸在于所有鏈上計(jì)算都要進(jìn)行全網(wǎng)驗(yàn)證,而達(dá)成全網(wǎng)共識(shí)往往需要一定的時(shí)間。Algorand 采用 PoS+VRF 機(jī)制進(jìn)行隨機(jī)選擇區(qū)塊生產(chǎn)者和驗(yàn)證者,無(wú)論網(wǎng)絡(luò)中有多少節(jié)點(diǎn),每一輪都只需要在少數(shù)節(jié)點(diǎn)上進(jìn)行驗(yàn)證,大大提高了共識(shí)速度,提高可擴(kuò)展性。同時(shí),Algorand 還采用了改進(jìn)的拜占庭共識(shí) BA*,該協(xié)議可以減少共識(shí)節(jié)點(diǎn)之間的通信量,從而進(jìn)一步提高共識(shí)速度。
- 此前 Algorand 發(fā)布了其性能測(cè)試數(shù)據(jù),結(jié)果表明,在 1000 臺(tái) EC2 服務(wù)器(AWS 虛擬云服務(wù)器)、500,000 用戶場(chǎng)景下,Algorand 網(wǎng)絡(luò)確認(rèn)時(shí)間穩(wěn)定為 1 分鐘,吞吐量約為比特幣網(wǎng)絡(luò)的 125 倍。(比特幣約為 7 TPS)且吞吐量不會(huì)隨著節(jié)點(diǎn)數(shù)的變多而明顯下降。
?
賬戶余額權(quán)重:
- Algorand算法中的節(jié)點(diǎn)都有權(quán)重(weight),該權(quán)重和賬戶的余額成正比。
- 上圖中的t是選中的賬戶余額閥值,w=賬戶余額/賬戶余額閥值,也就是說(shuō)w是賬戶中可以分割成多少個(gè)賬戶余額閥值。利用多項(xiàng)式分布B(k;w,p),計(jì)算出hash對(duì)應(yīng)的比例在哪個(gè)區(qū)間內(nèi),則最后選中的次數(shù)就是多少,也就是最后的j的數(shù)值。
加密抽簽算法:
- 在百萬(wàn)級(jí)別使用用戶的量級(jí)下,如何依然能維持快速有效的的拜占庭共識(shí),其主要手段是避免所有用戶參與驗(yàn)證,那么減少驗(yàn)證者同樣可能帶來(lái)安全性的不足,如何平衡兩者使得在大量節(jié)點(diǎn)中提取可靠維持共識(shí)效率的驗(yàn)證人是關(guān)鍵。加密抽簽算法就是用來(lái)解決這個(gè)隨機(jī)選擇問(wèn)題的,他提供了一種私密隨機(jī)并可驗(yàn)證的驗(yàn)證人篩選方法。
- 抽簽其實(shí)是一種隨機(jī)方式,在整個(gè)網(wǎng)絡(luò)中,節(jié)點(diǎn)之間如何不存在事先商議的情況下自動(dòng)產(chǎn)生隨機(jī)驗(yàn)證人是需要用心構(gòu)思的技巧。
- Algorand的解決方式中,主要有兩點(diǎn):1、用戶私鑰參與運(yùn)算的隨機(jī)特征值產(chǎn)生算法函數(shù),該函數(shù)產(chǎn)生與上一區(qū)塊相關(guān),私鑰的保密性,使得參與隨機(jī)運(yùn)算后的結(jié)果存在不可預(yù)測(cè)性;2、將運(yùn)算后的特征值映射到(0,1)數(shù)值區(qū)間內(nèi),對(duì)比特征值數(shù)值最小的作為提塊人,按照特定規(guī)則從特征值中選取出驗(yàn)證群體,并且在此時(shí)驗(yàn)證人的選取是在其不可知的情況下被選擇的,只有當(dāng)區(qū)塊組裝完成后,驗(yàn)證人會(huì)同時(shí)將自己生成的驗(yàn)證憑證(用來(lái)證明自己是在秘密抽簽中被合法選中的驗(yàn)證人)一并廣播出去,在這之后其他用戶可驗(yàn)證當(dāng)前驗(yàn)證人是否合法。
- Algorand采用了VRF函數(shù),并結(jié)合賬戶的余額比例,隨機(jī)確定區(qū)塊生成以及投票人角色。根據(jù)論文中的模擬數(shù)據(jù),比特幣的POW共識(shí)換成Algorand共識(shí)后,TPS增長(zhǎng)125倍。和DPOS+BFT相比,Algorand的安全性更強(qiáng),只要超過(guò)2/3的賬戶余額是誠(chéng)實(shí)節(jié)點(diǎn),Algorand即安全。不過(guò)Algorand共識(shí)只是進(jìn)行了小范圍的測(cè)試,還沒(méi)有經(jīng)過(guò)大規(guī)模的市場(chǎng)驗(yàn)證。
算法細(xì)節(jié)解析
算法輔助函數(shù)
CommonCoin
- CommonCoin算法用于模擬1/2概率,俗稱”拋硬幣“,但該”拋硬幣“算法有以下兩個(gè)特點(diǎn):
- 1. 結(jié)果只有2個(gè),且每個(gè)結(jié)果的概率為50%。
- 2. 使用相同參數(shù)作為種子,獲得的結(jié)果相同。
- 在Algorand中,CommonCoin使用全網(wǎng)的投票信息作為種子,對(duì)于強(qiáng)同步的大多數(shù)誠(chéng)實(shí)節(jié)點(diǎn)來(lái)說(shuō),得到相同結(jié)果的概率為h(h即為誠(chéng)實(shí)節(jié)點(diǎn)所占比例,h > 2/3)。故每經(jīng)過(guò)一次CommonCoin可以h的概率讓大多數(shù)誠(chéng)實(shí)節(jié)點(diǎn)達(dá)成共識(shí)。
CountVotes
- CountVotes算法用于在給定時(shí)間內(nèi)統(tǒng)計(jì)票數(shù),并選出超過(guò)票數(shù)閾值的合法區(qū)塊。每個(gè)投票消息的票數(shù)實(shí)際為該用戶在當(dāng)前上下文中所選舉的子用戶數(shù)量。
ProcessMsg
- ProcessMsg用于接收投票信息,驗(yàn)證并統(tǒng)計(jì)票數(shù)。
?AIgorand的區(qū)塊鏈的種類(lèi)的分類(lèi)
ALGORAND 非許可區(qū)塊鏈
- Algorand 提供真正去中心化、可擴(kuò)展和安全的非許可區(qū)塊鏈。它具備真正去中心化的特點(diǎn):每個(gè)代幣都可以參與共識(shí)協(xié)議,與任何其他代幣具有相同的權(quán)力。它具有可伸縮性,因?yàn)樗恍枋褂蒙倭康倪\(yùn)算,即可支持?jǐn)?shù)十億用戶在幾秒之內(nèi)生成一個(gè)區(qū)塊。而且它很安全,因?yàn)樗豢赡鼙簧贁?shù)礦工或受托人或者一小部分代幣的所有者破壞。事實(shí)上,只要?Algorand 區(qū)塊鏈的大多數(shù)代幣掌握在可靠的人手中,它就能保證正常工作。
- Algorand 協(xié)議依賴于全新的技術(shù),例如其獨(dú)特的密碼抽簽和超高效的拜占庭協(xié)議。
除了完全的去中心化、可擴(kuò)展性和安全性之外,Algorand 非許可區(qū)塊鏈還具有以下顯著特性:
- 無(wú)分叉和即時(shí)交易確認(rèn)。Algorand 區(qū)塊鏈不會(huì)分叉。每個(gè)新區(qū)塊都是單獨(dú)商定的,并且保證永遠(yuǎn)留在 Algorand 鏈上。因此,用戶可以立即信賴新區(qū)塊中包含的交易,而不必等待區(qū)塊在鏈中具有足夠的深度。
- 在?Layer 1?處理標(biāo)準(zhǔn)資產(chǎn)和智能合約。區(qū)塊鏈在不同的層面上處理不同的交易。第 1 層是最直接和最安全的一層。傳統(tǒng)意義上來(lái)說(shuō),第 1 層只處理普通支付和共識(shí)協(xié)議本身,新資產(chǎn)的發(fā)行、智能合約和其他的所有事務(wù)都在第 2 層處理。但眾所周知,第 2 層的協(xié)議速度慢、成本高并且容易出錯(cuò)。相比之下,Algorand 在第 1 層還會(huì)處理標(biāo)準(zhǔn)資產(chǎn)和大量智能合約的發(fā)行,包括資產(chǎn)代幣化、原子交易和抵押借貸,并且能夠在必要時(shí)隔離和收回有爭(zhēng)議的交易。事實(shí)上,Algorand 在第 1 層就滿足了智能合約的大多數(shù)當(dāng)前用例,并且具有與普通支付手段相同的安全性和效率。
ALGORAND許可鏈版本
- 許可型區(qū)塊鏈的主要優(yōu)點(diǎn)是能夠保護(hù)交易不受外界干擾。
- 在 Algorand 的非許可鏈版本中,每個(gè)原生代幣(除了作為本地貨幣 (Algo) 的計(jì)量單位之外)都可以參與共識(shí)協(xié)議,并具有與其他代幣相同的權(quán)力。但是,在 Algorand 的許可鏈版本中,企業(yè) E 只能將給定的 10M 代幣池用于共識(shí)協(xié)議,并以任何方式將其劃分到自己選擇的驗(yàn)證節(jié)點(diǎn)集合 V 中。例如,E 可以選擇 V 僅包含 5 個(gè)驗(yàn)證節(jié)點(diǎn),并為每個(gè)驗(yàn)證節(jié)點(diǎn)分配 2M 共識(shí)代幣。這樣做的結(jié)果是,E 為五個(gè)驗(yàn)證節(jié)點(diǎn)中的每一個(gè)提供了生成新區(qū)塊的相同能力。另舉一例,E 可以選擇 55 個(gè)驗(yàn)證節(jié)點(diǎn),為前 5 個(gè)驗(yàn)證節(jié)點(diǎn)每個(gè)分配 1M 代幣,并為另外 50 個(gè)驗(yàn)證節(jié)點(diǎn)每個(gè)分配 100K 代幣。這樣的話,E 為前 5 個(gè)驗(yàn)證節(jié)點(diǎn)分配的區(qū)塊生成能力就是其他 50 個(gè)驗(yàn)證節(jié)點(diǎn)的 10 倍。
- Algorand 的許可型版本具有極細(xì)的顆粒度級(jí)別,可以為不同的驗(yàn)證節(jié)點(diǎn)分配不同的權(quán)重。
通過(guò)Algorand 許可區(qū)塊鏈,而不是從頭開(kāi)始構(gòu)建自己的許可鏈或采用另一個(gè)許可鏈,E 獲得了以下主要優(yōu)勢(shì):
- a) 按需分配的加權(quán)去中心化。選擇任意數(shù)量(任意權(quán)重)的驗(yàn)證節(jié)點(diǎn)是至關(guān)重要的。實(shí)際上,E 可能想做出這種選擇來(lái)提高自己區(qū)塊鏈的安全性,或者擴(kuò)大它所服務(wù)的社區(qū)。最初為少量金融機(jī)構(gòu)服務(wù)的區(qū)塊鏈可以從少量的驗(yàn)證節(jié)點(diǎn)開(kāi)始。但是,如果以后它想要為中小型銀行和信用合作社服務(wù),而所有這些機(jī)構(gòu)都希望參與區(qū)塊生成,該怎么辦?適用于少數(shù)參與者的共識(shí)算法可能無(wú)法有效地適用于成百上千的參與者。而中途改變策略可能相當(dāng)具有挑戰(zhàn)性!通過(guò)允許共識(shí)協(xié)議擴(kuò)展到數(shù)十億個(gè)驗(yàn)證節(jié)點(diǎn),E 能夠保證在任何時(shí)候毫無(wú)問(wèn)題地?cái)U(kuò)大驗(yàn)證節(jié)點(diǎn)集。縮小規(guī)模容易,擴(kuò)大規(guī)模就難了。
- b)?交易最終性和第?1?層智能合約。無(wú)論是私有還是公有區(qū)塊鏈,許可型還是非許可型區(qū)塊鏈,對(duì)于任何區(qū)塊鏈來(lái)說(shuō),交易最終性都是一個(gè)至關(guān)重要的屬性。在第 1 層處理大多數(shù)智能合約需求的能力也是如此。通過(guò)在 Algorand 中增加權(quán)限控制特性,E 從而獲得一個(gè)許可型區(qū)塊鏈,該區(qū)塊鏈會(huì)自動(dòng)繼承這些至關(guān)重要并且很難擁有的屬性。
- c)?可升級(jí)性和持續(xù)創(chuàng)新。無(wú)論何時(shí)將升級(jí)改進(jìn)和創(chuàng)新添加到核心的無(wú)許可型 Algorand 主鏈,使用許可型版本的 Algorand 協(xié)議均會(huì)自動(dòng)為 E 提供未來(lái)的升級(jí)改進(jìn)和創(chuàng)新。
ALGORAND Co-Chain:定義和挑戰(zhàn)
定義
- Algorand Co-Chain是特殊的 Algorand 許可鏈版本。因此,它是一個(gè)可擴(kuò)展的許可鏈框架,可按需實(shí)現(xiàn)去中心化,具有交易即時(shí)確認(rèn)和第 1 層智能合約等特性。它還滿足一個(gè)額外的關(guān)鍵特性:
- 與其他Co-Chain的互操作性。許可型區(qū)塊鏈能讓給定范圍內(nèi)的用戶安全地進(jìn)行互動(dòng)。但它可能不允許他們與其他實(shí)體和個(gè)人進(jìn)行互動(dòng)。這是一個(gè)很大的限制,因?yàn)椤巴獠俊钡氖澜绫取皟?nèi)部”的世界更大,我們可能想要與更大的世界互動(dòng)。一組金融機(jī)構(gòu)可能想建立他們自己的許可鏈。但是一些醫(yī)療機(jī)構(gòu)可能也想這樣做。由于醫(yī)療保健是經(jīng)濟(jì)的重要組成部分,所以金融機(jī)構(gòu)鏈想必希望與醫(yī)療機(jī)構(gòu)鏈進(jìn)行交互和資產(chǎn)交換。如果沒(méi)有外部的互操作性,許可鏈的成員就可能被困在自己的鏈中。
Co-Chain是?Algorand?許可鏈,它能保證?Algorand?無(wú)許可鏈與其他Co-Chain之間高效和安全的互操作性。
挑戰(zhàn)
第一個(gè)挑戰(zhàn):安全性
- 許可鏈之間的互操作性很容易聲明,但很難得到保證。考慮一個(gè)簡(jiǎn)單的例子。用戶a擁有資產(chǎn)?x,他希望與擁有資產(chǎn)?y的另一用戶?b進(jìn)行交換。
- 如果?a和?b屬于 Algorand 無(wú)許可鏈或同一個(gè) Algorand Co-Chain,此問(wèn)題可以在 5 秒內(nèi)解決,并且具有最終性和安全性。實(shí)際上,他們可以使用原子交換,這是 Algorand 中作為第 1 層交易可用的主要工具之一。但是,如果?a是Co-Chain?A?的成員,b是另一個(gè)Co-Chain?B?的成員,該怎么辦?
- 不同鏈間的資產(chǎn)交換通常通過(guò)哈希鎖定協(xié)議來(lái)實(shí)現(xiàn)的。但是這種方法存在相當(dāng)大的問(wèn)題。除了需要多個(gè)邏輯復(fù)雜的步驟之外,它還容易受到拒絕服務(wù)攻擊。這樣的攻擊可以使欺騙一方保留自己的資產(chǎn),同時(shí)獲得另一方的資產(chǎn)。為了避免這種情況,協(xié)議可能需要持續(xù)很長(zhǎng)一段時(shí)間,這可能使拒絕服務(wù)的成本高于相關(guān)資產(chǎn)的價(jià)值。
第二個(gè)挑戰(zhàn):明確所有權(quán)
- 但是,這又會(huì)產(chǎn)生另一個(gè)問(wèn)題,并且該問(wèn)題適用于僅涉及x和y及其各自區(qū)塊鏈A和B的任何協(xié)議。也就是說(shuō),由于A?和B是許可型的私有鏈,最多只有它們的成員知道x和y交換了原始資產(chǎn),因此,b現(xiàn)在由鏈A的成員擁有。如果鏈B?損壞,沒(méi)有什么能夠阻止y多次向其他區(qū)塊鏈的成員出售b或用其交換其他資產(chǎn)!從本質(zhì)上講,這相當(dāng)于資產(chǎn)交換的雙重支付。
- 如果許可鏈的大多數(shù)驗(yàn)證節(jié)點(diǎn)是惡意的,或者其密鑰已泄露,那么該許可鏈就算是腐敗了。在腐敗的鏈中,原始區(qū)塊可以被替換為假區(qū)塊,這樣就再也無(wú)法弄清楚誰(shuí)擁有哪些資產(chǎn)。(這就是去中心化對(duì)安全來(lái)說(shuō)至關(guān)重要,以及幾百個(gè)驗(yàn)證節(jié)點(diǎn)比幾十個(gè)更好的原因!)許可鏈的損壞具有很強(qiáng)的隱匿性,因?yàn)樗乃矫苄钥梢苑乐雇獠咳藛T注意到這種腐敗。鏈的損壞是比較罕見(jiàn)的事件,但當(dāng)它發(fā)生時(shí),應(yīng)該只影響鏈的成員,而不應(yīng)該影響誠(chéng)實(shí)鏈!沒(méi)人能夠保證另一條鏈可以保持誠(chéng)實(shí)。
- 鏈的互操作性應(yīng)該保證誠(chéng)實(shí)鏈的成員所獲得的任何資產(chǎn)都有明確的所有權(quán)。即便從腐敗的鏈的成員處獲得的資產(chǎn)也是如此。
ALGORAND(簡(jiǎn)化版)Co-Chain體系結(jié)構(gòu)
現(xiàn)在,我們來(lái)概述一下 Algorand Co-Chain如何互操作。為簡(jiǎn)明起見(jiàn),先忽略隱私特性。
序言
我們用?MAIN來(lái)表示 Algorand 的主網(wǎng),它是無(wú)許可并且公開(kāi)的。相應(yīng)地,每個(gè)Co-Chain監(jiān)控?MAIN的區(qū)塊。對(duì)于每個(gè)Co-Chain?C,MAIN都需要維護(hù)
- Co-Chain的驗(yàn)證節(jié)點(diǎn)的最新列表VALIDATORSC,
- 以及Co-Chain的成員擁有的,可以轉(zhuǎn)讓給其他鏈的所有資產(chǎn)的最新列表ASSETSC。
過(guò)程
- 最初,當(dāng)一個(gè)Co-Chain形成時(shí),這兩個(gè)列表都可能被包含在本質(zhì)上是Co-Chain?C在“MAIN中的創(chuàng)世區(qū)塊”。(這個(gè)創(chuàng)世區(qū)塊與Co-Chain?C的原始創(chuàng)世區(qū)塊不同,它指示哪些是Co-Chain?C的初始公鑰,以及這些密鑰最初擁有哪些資產(chǎn)。)
- 隨著時(shí)間的推移,VALIDATORSC和?ASSETSC都通過(guò)Co-Chain?C在?MAIN中發(fā)布由Co-Chain?C的最新驗(yàn)證節(jié)點(diǎn)列表(適當(dāng)多數(shù))簽署的適當(dāng)交易進(jìn)行更新。
- 需要強(qiáng)調(diào)的是,MAIN不僅對(duì)Co-Chain?C?中發(fā)生的交易一無(wú)所知,而且也不知道Co-Chain?C的實(shí)際公鑰,更不用說(shuō)使用這些密鑰的實(shí)際用戶了!事實(shí)上,ASSETSC不會(huì)透露有關(guān)Co-Chain?C中控制?ASSETS中資產(chǎn)的公鑰的任何信息。
從?Algorand Co-Chain?到主鏈的資產(chǎn)轉(zhuǎn)移
- Algorand Co-Chain?A?的用戶?x可能想要通過(guò)公鑰?tx將他擁有的資產(chǎn)?a轉(zhuǎn)移到?MAIN。用戶?x這樣做可能出于多種原因。例如,x可能想拍賣(mài)?a,而“出價(jià)的人越多,價(jià)格就越高”。因此,與其在?A上拍賣(mài)?a,用戶?x可能更愿意在?MAIN上拍賣(mài),這樣不僅有?A的成員報(bào)價(jià),還有?MAIN或其他Co-Chain的成員報(bào)價(jià)。事實(shí)上,Co-Chain的任何成員都可以輕松地向?MAIN轉(zhuǎn)移穩(wěn)定幣,唯一的目的就是參加拍賣(mài)。
- 與Co-Chain?A?中普通的轉(zhuǎn)移相同,將?a從?tx轉(zhuǎn)移到?MAIN的操作由 tx?的數(shù)字簽名授權(quán),用符號(hào)表示為?SIGx(tx, a, MAIN)。由于?tx擁有?a?,并且轉(zhuǎn)移得到了適當(dāng)?shù)氖跈?quán),SIGx(tx, a, MAIN)會(huì)進(jìn)入經(jīng)?A的驗(yàn)證節(jié)點(diǎn)適當(dāng)認(rèn)證的?A的一個(gè)新區(qū)塊?X。此時(shí),Co-Chain?A?的所有成員意識(shí)到?tx和?A中的任何其他公鑰均不擁有資產(chǎn)?a。因此(除非?A已損壞),tx不能再授權(quán)?a在?A內(nèi)或?A外的轉(zhuǎn)移。
- 與?A的所有其他區(qū)塊相同,X的結(jié)構(gòu)是為了便于將?SIGx?(tx,a, MAIN)和轉(zhuǎn)到?MAIN的所有其他資產(chǎn)轉(zhuǎn)移與所有其他信息隔離開(kāi)來(lái),這些信息必須僅對(duì)?A的成員保持可見(jiàn)。從概念上來(lái)說(shuō),表示方式如下:
X= (SIGx?(tx, a, MAIN), other transfers to MAIN, H)
- 其中H是A中所有交易的單向哈希(通常長(zhǎng)度為 256 位),必須在A中保持私密。需要注意的是,X的格式非常緊湊。實(shí)際上,除了打算傳遞給 Algorand 主鏈的信息外,它只包含 256 個(gè)字節(jié)。
- 此格式的區(qū)塊X以及它在A中的證書(shū)會(huì)傳播到MAIN的節(jié)點(diǎn)。
由于Co-Chain?A運(yùn)行與MAIN相同的共識(shí)算法,并且MAIN知道 A 的驗(yàn)證節(jié)點(diǎn),因此MAIN的驗(yàn)證節(jié)點(diǎn)可以解析X的證書(shū),并了解到
-
tx是A擁有資產(chǎn)a的密鑰
-
密鑰tx的所有者希望將?a轉(zhuǎn)移到 Algorand 的主鏈。
相應(yīng)地,
-
資產(chǎn)a會(huì)從?ASSETSA中移除,并且
-
密鑰tx會(huì)被記錄為MAIN擁有(在MAIN中!)資產(chǎn)a的(可能為新的)密鑰。
注意:步驟 1 中使用的MAIN既是公有的,也是非許可的。具體來(lái)說(shuō),MAIN為非許可型這一事實(shí)能夠保證tx成為MAIN中的密鑰,不會(huì)出現(xiàn)任何問(wèn)題。并且MAIN是公有的這一事實(shí)能夠保證所有人意識(shí)到資產(chǎn)a現(xiàn)在位于MAIN中。這能夠保證y將(在下一個(gè)步驟中)獲得a的明確所有權(quán)。事實(shí)上,無(wú)論Co-Chain?A?是否損壞,x和A中的任何其他成員均無(wú)法將a轉(zhuǎn)移給任何其他Co-Chain的任何成員。
從主鏈轉(zhuǎn)回Co-Chain的資產(chǎn)轉(zhuǎn)移
- 在?MAIN中出售?a后,tx可能會(huì)想將拍賣(mài)所得的穩(wěn)定幣轉(zhuǎn)移給?A。
- 更普遍的情況下,如果?tx是?MAIN和?A兩者的公鑰,tx可能會(huì)想將它在?MAIN中擁有的資產(chǎn)?b轉(zhuǎn)移到?A。同樣,這樣的轉(zhuǎn)移可能是由?tx的數(shù)字簽名授權(quán)的,用符號(hào)表示為?SIGx?(tx,b, A),它會(huì)進(jìn)入?MAIN的一個(gè)新區(qū)塊。由于?MAIN為非許可型,A的驗(yàn)證節(jié)點(diǎn)可能會(huì)看到?SIGx?(tx,a, A)出現(xiàn)在?MAIN的區(qū)塊中,或者它們可以通過(guò)?tx本身看到這種出現(xiàn)的適當(dāng)緊湊證明。無(wú)論哪種情況,A的驗(yàn)證節(jié)點(diǎn)都將導(dǎo)致?tx成為?A中資產(chǎn)?b的當(dāng)前所有者,因?yàn)樗呀?jīng)是?A中的一個(gè)密鑰。同時(shí),只要?SIGx(tx, a, A)出現(xiàn)在?MAIN的區(qū)塊中,tx便不再擁有?MAIN中的?b,并且?ASSETS A將更新為包含資產(chǎn)?b。
Co-Chain互操作性
- 接下來(lái),我們使用上面提到的相同資產(chǎn)交換示例來(lái)說(shuō)明Co-Chain是如何互操作的。現(xiàn)在,A和?B是不同的 Algorand Co-Chain。具體來(lái)說(shuō),資產(chǎn)?a在?A中由公鑰?tx控制,其私鑰為?x所知,而資產(chǎn)?b在?B中由公鑰?ty控制,其密鑰為?y所知。
要交換它們的資產(chǎn),x和y通過(guò)以下概念步驟利用MAIN。
步驟 1 的說(shuō)明
步驟 1 可以通過(guò)tx在MAIN的區(qū)塊中發(fā)布?SIGx?(tx, a, A)?來(lái)實(shí)現(xiàn),如上所述。相應(yīng)地,在MAIN中,
-
資產(chǎn)a會(huì)從?ASSETA中移除,并且資產(chǎn)b會(huì)從?ASSETB中移除。
-
密鑰tx不再擁有a。
類(lèi)似地,對(duì)于ty來(lái)說(shuō)也是如此。
步驟 2 的說(shuō)明
- 從現(xiàn)在開(kāi)始,在?MAIN中,tx?擁有a,并且ty擁有b,它們可以在幾秒鐘之內(nèi)以超級(jí)安全的方式交換這些資產(chǎn)。實(shí)際上,所采取的方式是第 1 層原子交易,這是 Algorand 非許可鏈的主要功能特性之一。
步驟 3 的說(shuō)明
- 如前所述,在?MAIN中,tx?將b轉(zhuǎn)移給 A 中的自己,因?yàn)閠x仍然是A的批準(zhǔn)密鑰。類(lèi)似地,對(duì)于ty來(lái)說(shuō)也是如此。
附加說(shuō)明
- 我們可以注意到,整個(gè)過(guò)程非常快。實(shí)際上,以上三個(gè)步驟中的每一步都可以在生成新區(qū)塊所需的時(shí)間內(nèi)執(zhí)行。這一時(shí)間在 Algorand 的主鏈中不超過(guò) 5 秒。但是在 Algorand Co-Chain中生成區(qū)塊可能會(huì)快很多。實(shí)際上,在 Algorand 協(xié)議中,可以在確保大多數(shù)驗(yàn)證節(jié)點(diǎn)看到區(qū)塊所需的時(shí)間內(nèi)生成一個(gè)區(qū)塊。在網(wǎng)絡(luò)速度很快的Co-Chain中,這一時(shí)間可以忽略不計(jì)。
-
還注意到,整個(gè)過(guò)程發(fā)生在第 1 層,因此無(wú)論是在主鏈中還是在Co-Chain中,都具有更高的安全性。
- 最后請(qǐng)注意,給定Co-Chain的資產(chǎn)累計(jì)價(jià)值可能超過(guò) Algorand 主鏈的估值。然而,Algorand 的主鏈并不用于保護(hù)任何Co-Chain的資產(chǎn)。在給定的時(shí)間點(diǎn),它僅用于處理給定Co-Chain的少量資產(chǎn),并且僅持續(xù)幾秒鐘。也就是說(shuō),它用于處理Co-Chain想與另一個(gè)鏈交換的資產(chǎn)。
增強(qiáng)私密性
- Algorand Co-Chain之間資產(chǎn)交換的隱私性可以大幅增強(qiáng)。
- 具體而言,tx和?ty可以是臨時(shí)密鑰,僅供?x和?y在本次資產(chǎn)交換中使用。也就是說(shuō),在開(kāi)始上述的三步流程之前,x生成臨時(shí)公鑰?tx?并將資產(chǎn)?a從之前持有a的任何公鑰轉(zhuǎn)移到?tx。完成步驟 3,并且?tx?在?A中擁有資產(chǎn)?b后,x可以將?b從?tx?轉(zhuǎn)移到他選擇的任何其他公鑰。通過(guò)這樣的方式,Algorand 的主鏈永遠(yuǎn)不知道?A中的哪個(gè)公鑰最初擁有資產(chǎn)?a,以及哪個(gè)公鑰最終會(huì)擁有?b。
Co-Chain主要有以下幾個(gè)特點(diǎn)
- 完全獨(dú)立于公有區(qū)塊鏈,保護(hù)其交易不被外部人員所看到,可以自行選擇驗(yàn)證者節(jié)點(diǎn),并自行來(lái)運(yùn)行Algorand共識(shí)協(xié)議;
- 通過(guò)與Algorand主鏈交互從而和其他Co-Chains以及其他方之間進(jìn)行交易,并且確保該過(guò)程和在Algorand無(wú)需許可的公鏈內(nèi)進(jìn)行資產(chǎn)交換,擁有相同程度的安全性和便利性;
- Co-Chain能夠使用原子交換(Atomic Transfers),智能合約(ASC)等所有Algorand公鏈原生擁有的工具和特性;實(shí)際上,Co-Chain能夠自動(dòng)享受到Algorand公鏈上所有的升級(jí)以及性能提升。
Algorand網(wǎng)絡(luò)節(jié)點(diǎn)分為兩種
- Relay Node(中繼節(jié)點(diǎn))和 Non-Relay Node(非中繼節(jié)點(diǎn))。其中中繼節(jié)點(diǎn)承擔(dān) Algorand 網(wǎng)絡(luò)樞紐的作用,執(zhí)行重復(fù)數(shù)據(jù)刪除,簽名檢查和其他驗(yàn)證步驟,最終向其他節(jié)點(diǎn)重新傳播有效消息。非中繼節(jié)點(diǎn)則又稱為參選節(jié)點(diǎn),通過(guò)配置有效賬戶并連接到中繼節(jié)點(diǎn)參與網(wǎng)絡(luò)選舉。作為一個(gè)開(kāi)放性的網(wǎng)絡(luò),任何人都可以下載安裝跑一個(gè)Algorand節(jié)點(diǎn)。參選節(jié)點(diǎn)可以設(shè)置為全節(jié)點(diǎn)模式和非全節(jié)點(diǎn)模式。在非全節(jié)點(diǎn)模式下,節(jié)點(diǎn)只需要保留大約1天的區(qū)塊數(shù)據(jù),能有效降低存儲(chǔ)要求。Algorand 所固有的高速、可擴(kuò)展性和安全性等特點(diǎn)將被其上發(fā)行的 USDT 所繼承。
小結(jié)
[1]Algorand 共識(shí)不是一個(gè)漫長(zhǎng)的過(guò)程。隨著越來(lái)越多的區(qū)塊被附加到給定的區(qū)塊 B 上,人們?cè)絹?lái)越有可能對(duì) B 達(dá)成共識(shí)。Algorand 單獨(dú)對(duì)新的區(qū)塊達(dá)成協(xié)議,這一過(guò)程完成后,再對(duì)下一個(gè)區(qū)塊達(dá)成協(xié)議,以此類(lèi)推。
[2]原子交易讓多名用戶能夠通過(guò)單筆交易交換資產(chǎn),或者以多種貨幣執(zhí)行多筆支付。因此,原子交易中的任何參與者都無(wú)法欺騙其他參與者,并且沒(méi)有人害怕自己是第一個(gè)嘗試的人。
[3]另一個(gè)經(jīng)常提到的選擇許可型區(qū)塊鏈的原因是安全。然而,這個(gè)理由忽略了一點(diǎn),即去中心化本身就是安全性的主要來(lái)源。
?
參考鏈接
- AIgorand:兼顧高性能、去中心和安全的公有鏈 | ONETOP評(píng)級(jí)
- AIgorand加密共識(shí)算法主要解決了什么問(wèn)題?
- 必讀| Algorand PPoS共識(shí)協(xié)議絕對(duì)核心優(yōu)勢(shì)在哪?PurePoS輕松速懂精華總結(jié)版
- Algorand Co-Chain技術(shù)解讀
- 專(zhuān)題研究九:區(qū)塊鏈項(xiàng)目Algorand
- 可驗(yàn)證隨機(jī)函數(shù)VRF之Algorand算法
?
總結(jié)
以上是生活随笔為你收集整理的针对Algorand所使用的密码相关技术细节进行介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 光大腾讯微加信用卡额度一般是多少?影响因
- 下一篇: 王道考研 计算机网络11 数据链路层 封