今天的互聯(lián)網(wǎng),已經(jīng)發(fā)展了四十多年,從一個小型的科研項目,成長為數(shù)字觸角伸向世界的龐然大物。盡管核心的底層互聯(lián)網(wǎng)協(xié)議自20世紀90年代以來基本保持一致,互聯(lián)網(wǎng)的應(yīng)用層和服務(wù)架構(gòu)卻發(fā)生了極大的變化,以支持互聯(lián)網(wǎng)應(yīng)用的爆發(fā)式增長。
建設(shè)互聯(lián)網(wǎng)應(yīng)用的基本模型是上世紀90年代流行起來的客戶端/服務(wù)器模型。該模型短期利好,但長期帶來很多負面后果。Web應(yīng)用順勢而起,但是導(dǎo)致Web服務(wù)愈加依賴于遠程服務(wù)器。云計算是基礎(chǔ)的客戶端/服務(wù)器模型的一個演進。今天,在云端存儲著私有的用戶數(shù)據(jù),運行著應(yīng)用業(yè)務(wù)邏輯和計算,管理著訪問權(quán)限,等等。
最近的十年里,我們開始看到云計算帶來的負面后果,人們由此開始質(zhì)疑基于客戶端/服務(wù)器開發(fā)軟件的完整模型。大規(guī)模的數(shù)據(jù)泄露, 用戶隱私的喪失,數(shù)據(jù)缺乏可移植性,以及根植于客戶端/服務(wù)器模型核心設(shè)計帶來的科技巨頭間廣泛的互不信任。鑒于計算在人類社會中的重要性與日俱增,我們不能讓過時的計算模型來定義我們現(xiàn)在的生活方式。
云計算的下一步演進將利用更強勁的客戶端設(shè)備、邊緣計算和全球連接以減少對這些中心化平臺的依賴。趨勢已經(jīng)朝著去中心化計算演進,我們相信這是計算機工業(yè)自大型機轉(zhuǎn)向桌面電腦以來最重大的技術(shù)變遷。去中心化計算可以改變軟件如何構(gòu)造和使用。其提供給開發(fā)者一系列新的工具,改變了用戶和軟件之間的關(guān)系:軟件的存在是保護用戶,軟件的優(yōu)化是為用戶利益至上。
Blockstack是一個開源軟件產(chǎn)品,在開源社區(qū)中設(shè)計、開發(fā)、成長為一個去中心化計算網(wǎng)絡(luò),為傳統(tǒng)的云計算提供一個全棧的替代。Blockstack正在重新構(gòu)想傳統(tǒng)互聯(lián)網(wǎng)的應(yīng)用層,為去中心化應(yīng)用提供一個全新網(wǎng)絡(luò);構(gòu)建于Blockstack之上的應(yīng)用將使用戶擁有和直接控制他們自己的數(shù)據(jù)。Blockstack使用現(xiàn)存的互聯(lián)網(wǎng)傳輸層協(xié)議以及底層的通信協(xié)議,但是移除了應(yīng)用層里的中心點。我們遵循端到端的設(shè)計原則,以保持網(wǎng)絡(luò)核心簡單,而將復(fù)雜性推送到客戶端。為了應(yīng)用的可擴展性,我們將全局狀態(tài)變化最小化,提供一個可靠的去中心化存儲系統(tǒng),其相比云存儲性能相當。而且,我們的全棧方法為所有開發(fā)者構(gòu)建去中心化應(yīng)用必須的棧組件提供了默認的選項。Blockstack是模塊化的,開發(fā)者可以輕易定制和集成其他替代技術(shù)。
設(shè)計目標
Blockstack的設(shè)計優(yōu)化源于下列屬性:
1. 易使用。去中心化應(yīng)用應(yīng)該像現(xiàn)在的互聯(lián)網(wǎng)應(yīng)用一樣容易被終端用戶所使用。此外,開發(fā)去中心化應(yīng)用應(yīng)該像在今天的云上開發(fā)一樣容易。
2. 可擴展。去中心化應(yīng)用應(yīng)該可以支持互聯(lián)網(wǎng)級別的用戶量,也就是數(shù)億到十億的用戶量。為了達到這點,網(wǎng)絡(luò)(包括區(qū)塊鏈)必須可以隨用戶數(shù)和運行的應(yīng)用數(shù)量進行擴展。
3. 用戶控制。采用去中心化計算的應(yīng)用應(yīng)該默認由用戶控制。用戶應(yīng)該可以提供自己的計算和存儲資源,而不是依賴于應(yīng)用運營的服務(wù)器。
帶著這些設(shè)計目標,Blockstack做出了自己的設(shè)計選擇,將其與其他的“重”區(qū)塊鏈和“世界計算機”設(shè)計哲學(xué)的去中心化計算方案區(qū)別開來。
最小化區(qū)塊鏈層的邏輯和狀態(tài):為了取得可擴展性,Blockstack在我們的“輕”區(qū)塊鏈層最小化了應(yīng)用的邏輯和數(shù)據(jù)。使用區(qū)塊鏈操作記錄應(yīng)用邏輯和存儲,本質(zhì)上要比“鏈下”方法要慢。需要在全網(wǎng)范圍和設(shè)備間同步和驗證狀態(tài),顯示出這種操作在吞吐量上極大的局限性。限制因素在于底層的全局連通帶寬和典型網(wǎng)絡(luò)節(jié)點上可用的內(nèi)存/存儲,也就是物理限制(而不是任何協(xié)議的限制)。
本地狀態(tài)變化 vs. 全局狀態(tài)變化:Blockstack平臺使用全棧方法確保構(gòu)建在Blockstack上的應(yīng)用是可擴展的:與應(yīng)用的交互盡可能改變本地的狀態(tài),而不是全局的狀態(tài)。正因為此,我們的存儲系統(tǒng)和認證協(xié)議是我們平臺的基礎(chǔ)組件——其使得應(yīng)用不發(fā)起一個區(qū)塊鏈交易,就可以和用戶的私人數(shù)據(jù)存儲交互,并且完成用戶認證。Stacks區(qū)塊鏈僅用于在去中心化的環(huán)境中,以一種一致的方式協(xié)調(diào)全局狀態(tài)的變換(例如:注冊一個全局唯一的用戶名)。
可靠的云存儲 vs. 對等存儲:在Blockstack上構(gòu)建的應(yīng)用,其數(shù)據(jù)存儲和用戶是一體的(使用用戶自己的私人數(shù)據(jù)鎖柜),不需要在服務(wù)器端保存任何用戶訪問憑證。這種方式不僅將用戶數(shù)據(jù)交由用戶自己控制,而且為開發(fā)人員降低了復(fù)雜度:開發(fā)人員無需運行服務(wù)器和數(shù)據(jù)庫,從而代替用戶支付云服務(wù)的賬單。此外,我們避免了點對點存儲固有的可靠性和性能問題,在一個去中心化的廣域文件系統(tǒng)中改變了現(xiàn)有云存儲提供商的位置——區(qū)塊鏈層只存儲指向用戶數(shù)據(jù)鎖柜的指針。
適用開發(fā)者的全棧SDK:Blockstack提供全棧方法,為開發(fā)去中心化應(yīng)用所需的所有層提供了默認的選項。開發(fā)者SDK將區(qū)塊鏈的復(fù)雜性和其他開發(fā)技術(shù)抽離;應(yīng)用開發(fā)者能夠使用Blockstack SDKs輕松構(gòu)建他們的應(yīng)用。技術(shù)棧的不同層次是模塊化的,可以根據(jù)需要使用其他技術(shù)。
與同期的去中心化計算方法除了這些不同外,我們的智能合約語言也做了獨特的設(shè)計決策來優(yōu)化智能合約的安全和可預(yù)測性。
新應(yīng)用模型
Blockstack為開發(fā)者構(gòu)建應(yīng)用提供了一個新的模型,確保應(yīng)用是去中心化的,而且默認是由用戶控制的:
1. 無不透明數(shù)據(jù)庫:在客戶端/服務(wù)器模型中,數(shù)據(jù)庫是所有應(yīng)用的核心組成部分,因為服務(wù)端需要存儲和查詢大量的用戶數(shù)據(jù)。在去中心化計算中,開發(fā)者無需擔(dān)心數(shù)據(jù)庫的維護和安全問題,因為他們從一開始就不做數(shù)據(jù)托管。開發(fā)者更多聚焦在應(yīng)用邏輯上,用戶下載應(yīng)用后,接入他們的私人數(shù)據(jù)鎖柜。如果使用數(shù)據(jù)庫的話,其功能等同于過去互聯(lián)網(wǎng)的“搜索檢索器”——索引公共數(shù)據(jù)的服務(wù)。任何人都可以使用底層(去中心化)的數(shù)據(jù)創(chuàng)建這些索引。
2. 無服務(wù)器:在客戶端/服務(wù)器模型中,應(yīng)用通過增加服務(wù)器擴容,因為所有的計算都在服務(wù)端執(zhí)行。在去中心化計算中,應(yīng)用在客戶端運行,每個用戶將自身的計算和存儲能力帶入網(wǎng)絡(luò)(而不是依賴于應(yīng)用開發(fā)者)。開發(fā)者只需提供最少的基礎(chǔ)設(shè)施托管應(yīng)用代碼,因為每個用戶自帶所需的存儲和計算資源使用應(yīng)用。
3. 智能合約:在客戶端/服務(wù)器模型中,全局狀態(tài)變化由一個中央服務(wù)器協(xié)調(diào),其是網(wǎng)絡(luò)真理的唯一權(quán)威。在去中心化計算中,這些狀態(tài)的變化是通過執(zhí)行于一個開放區(qū)塊鏈之上的智能合約解決的。
4. 去中心化認證:傳統(tǒng)的互聯(lián)網(wǎng)中,用戶認證通過使用某種信任的認證流程進行。如果應(yīng)用維護了一個用戶數(shù)據(jù)庫,該應(yīng)用通過密碼認證用戶,有時加入第二因子。如果應(yīng)用依賴于某個第三方認證服務(wù),像Google或Facebook,該應(yīng)用將使用OAuth協(xié)議從第三方認證服務(wù)獲得驗證結(jié)果。顯然,在所有這些方法中用戶自己無法控制認證流程。在去中心化計算中,認證由用戶的客戶端執(zhí)行,通過加密數(shù)字簽名證明對區(qū)塊鏈上注冊的某個用戶名的控制權(quán)。任何應(yīng)用都可以獨立驗證證明。
5. 原生代幣:在傳統(tǒng)的互聯(lián)網(wǎng)應(yīng)用中,支付通常采用像信用卡一樣的第三方服務(wù)。數(shù)字代幣是去中心化計算平臺上的原生資產(chǎn),如Blockstack和以太坊。用戶對代幣有直接的所有權(quán),可以使用它們直接注冊數(shù)字資產(chǎn)和智能合約,也可以支付智能合約的運行費用。這種原生代幣的使用可通過智能合約編程,構(gòu)建軟件訂閱服務(wù),也可以自動化其他的應(yīng)用功能。這種可編程的代幣是傳統(tǒng)互聯(lián)網(wǎng)應(yīng)用開發(fā)者無法得到的能力。
去中心化計算層次結(jié)構(gòu)
Blockstack去中心化計算網(wǎng)絡(luò)邏輯上位于傳統(tǒng)互聯(lián)網(wǎng)架構(gòu)的“應(yīng)用層”。然而,Blockstack網(wǎng)絡(luò)自身由多個系統(tǒng)組成,共同為實現(xiàn)去中心化應(yīng)用提供必需的組件:
1. Stacks區(qū)塊鏈:Stacks區(qū)塊鏈是Blockstack網(wǎng)絡(luò)的基礎(chǔ)。Stacks區(qū)塊鏈使用戶可以注冊和控制數(shù)字資產(chǎn),如通用用戶名,并且可以注冊/執(zhí)行智能合約。像通用用戶名這樣的數(shù)字資產(chǎn),允許用戶接下來控制他們的存儲以及更多功能——用戶將其私有數(shù)據(jù)鎖柜的訪問憑證與其通用用戶名進行連接。
2. Gaia:Gaia是一個用戶控制的存儲系統(tǒng),使應(yīng)用可以和私人數(shù)據(jù)鎖柜交互。私人數(shù)據(jù)鎖柜可以在一個云服務(wù)提供商,或者是其他的數(shù)據(jù)存儲服務(wù)商托管。重要的是,用戶控制使用哪一個提供商。Gaia上的數(shù)據(jù)經(jīng)過加密,并使用用戶密鑰在客戶端側(cè)簽名。用戶的數(shù)據(jù)鎖柜(data locker)可以通過查詢Stacks區(qū)塊鏈上的信息發(fā)現(xiàn)。
3. Blockstack認證:Blockstack認證協(xié)議是應(yīng)用的去中心化認證協(xié)議。通過該協(xié)議用戶可以使用自己擁有的ID進行認證,并且設(shè)置使用哪個Gaia服務(wù)器保存該用戶的應(yīng)用數(shù)據(jù)。
4. Blockstack程序庫和開發(fā)包:開發(fā)者程序庫(Libraries)和開發(fā)包(SDKs)位于平臺堆棧的頂端,應(yīng)用開發(fā)者和用戶以此和Blockstack網(wǎng)絡(luò)的不同組件進行交互。例如,Blockstack客戶端軟件允許用戶注冊并管理自己的ID。Blockstack的開發(fā)者程序庫使開發(fā)人員構(gòu)建Blockstack應(yīng)用像構(gòu)建傳統(tǒng)的Web應(yīng)用一樣簡單。
Stacks區(qū)塊鏈
Stacks區(qū)塊鏈是Blockstack網(wǎng)絡(luò)的基礎(chǔ)層。Stacks區(qū)塊鏈為網(wǎng)絡(luò)提供了全局共識和協(xié)調(diào)層,產(chǎn)生了Blockstack網(wǎng)絡(luò)的原生代幣,稱為“Stacks token”。當用戶注冊通用用戶名,軟件許可,存儲鎖柜的指針等數(shù)字資產(chǎn)時,需要消耗Stacks代幣作為“燃料”。當注冊/執(zhí)行智能合約時,Stacks代幣也被用于支付給礦工。
本章我們展示Stacks區(qū)塊鏈的高階設(shè)計。關(guān)于這些設(shè)計如何實現(xiàn)和演進的細節(jié),我們建議您閱讀不同組件的SIP(Stacks Improvement Proposals)1。當更多的SIP被Stacks改進程序接受時,我們將更新本篇白皮書。Stacks區(qū)塊鏈體現(xiàn)了如下的設(shè)計決策:
1.一個可調(diào)諧的工作量證明(tunable proof-of-work)機制用于領(lǐng)導(dǎo)人選舉
2.一個燃燒證明(proof-of-burn)挖礦算法來重用現(xiàn)有區(qū)塊鏈的算力
3.一個新穎的對等網(wǎng)絡(luò)(Atlas),節(jié)點連通采用基于圖的隨機游走算法,減少了取得共識需要的數(shù)據(jù)量
4.一種智能合約語言,Clarity (清),非圖靈完備,解釋型語言
區(qū)塊鏈版本:當前生產(chǎn)環(huán)境中運行的Stacks區(qū)塊鏈是“版本1”,是部署基本功能的一個初始實現(xiàn)。Stacks區(qū)塊鏈v1使用比特幣網(wǎng)絡(luò)實現(xiàn)其共識算法,支持Stacks代幣操作,比如轉(zhuǎn)賬。Stacks區(qū)塊鏈v1為一些用例實現(xiàn)了智能合約,比如Blockstack Naming System。關(guān)于版本1功能和實現(xiàn)的更多細節(jié),請查看Github上的已有實現(xiàn)。本章中的剩余部分將討論Stacks區(qū)塊鏈“版本2”的設(shè)計。Stacks區(qū)塊鏈v2實現(xiàn)了我們新共識算法和智能合約語言的完整功能,將是對版本1的一個主要升級。
1. 領(lǐng)導(dǎo)人選舉
Blockstack的第一代區(qū)塊鏈邏輯上在Layer-1(L1)之上操作,每一個交易1:1對應(yīng)于一個L1的比特幣交易。這樣做的原因是確保重組Blockstack區(qū)塊鏈的難度就像重組比特幣區(qū)塊鏈的難度一樣大——這是我們從Namecoin,一個更小型區(qū)塊鏈網(wǎng)絡(luò)上得到的一個安全問題的教訓(xùn)。
Stacks區(qū)塊鏈采用一個可調(diào)諧的證明機制(Tunable Proofs)用于領(lǐng)導(dǎo)人選舉過程。可調(diào)諧證明機制是一個有附加功能的工作量證明(PoW)系統(tǒng),可以重用另一個更成熟區(qū)塊鏈的算力。采用可調(diào)諧證明機制,我們的目標是安全地啟動一條新的區(qū)塊鏈,慢慢轉(zhuǎn)換到使用自身的PoW機制。可調(diào)諧證明機制有兩部分:(a)自身的PoW 和(b)另一種加密數(shù)字貨幣的燃燒證明。
在初始時,燃燒證明部分的挖礦有更大的權(quán)重。通過燃燒證明,礦工燃燒加密數(shù)字貨幣表明他們參與挖礦程序的興趣。為了競選領(lǐng)導(dǎo)人,候選人燃燒底層鏈的代幣(這里是比特幣),在領(lǐng)導(dǎo)人的候選(would-be)塊里提交了一個初始的交易集。該次提交同時也表明了該領(lǐng)導(dǎo)人的分叉選擇:當前塊的共識哈希必須包含前一個塊的頭部。當出現(xiàn)有多個競爭的分叉時,那些選擇在失敗分叉上“挖礦”的領(lǐng)導(dǎo)人無法收到區(qū)塊獎勵和交易手續(xù)費,也不能恢復(fù)已燒掉的加密數(shù)字貨幣。
Stacks區(qū)塊鏈中采用的燃燒證明機制可以達成:
高驗證吞吐量。處理的Stacks交易數(shù)量與底層“燃燒鏈”(這里是比特幣)的交易處理速率間解耦。使用燃燒證明選舉允許Stacks交易的“全部區(qū)塊”用底層燃燒鏈的每一個新區(qū)塊來確認。
低延遲塊采納。通過采用單一領(lǐng)導(dǎo)人選舉,我們的燃燒證明共識算法允許當前領(lǐng)導(dǎo)人在Stacks區(qū)塊中立即包含一個來自于交易池(mempool)新交易。這個區(qū)塊流模型允許用戶在幾秒鐘內(nèi)得知一個交易被區(qū)塊采納。
開放領(lǐng)導(dǎo)人集合。燃燒證明選舉允許任何人成為領(lǐng)導(dǎo)人。這個機制確保Stacks區(qū)塊鏈是一個開放的區(qū)塊鏈(相對于依賴固定領(lǐng)導(dǎo)人集合的封閉區(qū)塊鏈,或者委托權(quán)益證明(DPoS)系統(tǒng),其行為功能上與封閉的集合類似)。而且,通過執(zhí)行單一領(lǐng)導(dǎo)人選舉,我們的共識算法確保潛在領(lǐng)導(dǎo)人間無需協(xié)調(diào)。
無挖礦硬件可參與。作為領(lǐng)導(dǎo)人參與,所需的工作涉及燃燒某種加密數(shù)字貨幣,而不是像傳統(tǒng)的工作量證明挖礦方案。因此,參與領(lǐng)導(dǎo)人選舉不需要挖礦硬件。任何能獲得要燃燒的加密數(shù)字貨幣的人都能參與挖礦,哪怕只能負擔(dān)得起最低限度的數(shù)量。
公平礦池。Stacks區(qū)塊鏈天然地支持公平的礦池。任何參與到網(wǎng)絡(luò)中的人可以燃燒加密數(shù)字貨幣支持某個指定領(lǐng)導(dǎo)人的選舉。提交這樣的“用戶投票型燃燒”(user support burns)的用戶將與該領(lǐng)導(dǎo)人分享等量份額的Stacks區(qū)塊獎勵。
故障恢復(fù)能力。這個設(shè)計確保發(fā)生燃燒鏈不穩(wěn)定,或者不適合Stacks區(qū)塊鏈挖礦時,Stacks區(qū)塊鏈可以使用另一條不同的燃燒鏈。
關(guān)于燃燒證明組件的更多細節(jié)參見文獻。將來可能發(fā)生的情況是,一旦在Stacks區(qū)塊鏈上有足夠的自身算力,燃燒證明組件就不再需要了。
2. 可調(diào)諧證明
除了燃燒證明之外,Stacks區(qū)塊鏈的共識算法中包含了一個內(nèi)置的工作量證明(PoW)組件。這種組合分擔(dān)了在SIP-001中描述的燃燒證明選舉系統(tǒng)所在區(qū)塊鏈的安全職責(zé)。這種內(nèi)置的工作量證明和燃燒證明的組合在我們系統(tǒng)里被稱為可調(diào)諧證明。允許引入內(nèi)置的PoW挖礦,而在當前PoW利益較低時,通過燃燒證明確保區(qū)塊鏈的穩(wěn)定。當?shù)讓尤紵溩呦蛩ヂ鋾r,可調(diào)諧的功能給我們更靈活的遷移。可協(xié)調(diào)機制的設(shè)計的靈活性還擴展到今后新的共識機制。我們可以研究其它PoW和PoS的共識機制, 如果未來有必要采取新的共識機制, 也可以安全合理的引入。
PoW組件在領(lǐng)導(dǎo)人選舉中是這樣工作的,其允許候選人在他們的燃燒交易中可選地包含一個PoW隨機數(shù)。產(chǎn)生此隨機數(shù)需要的工作量(就是某種函數(shù),其計算結(jié)果哈希前置多少個0)對應(yīng)成候選人的“燃燒數(shù)量”。在初始時,內(nèi)置的PoW將占比5%(相對于已提交的燃燒數(shù)量)。內(nèi)置的PoW組件仍在大量的設(shè)計和開發(fā)之中。隨著更多的細節(jié)具體化,這部分內(nèi)容(以及一個對應(yīng)的SIP)將被更新。
3. Atlas對等網(wǎng)絡(luò)
Atlas對等網(wǎng)絡(luò)是一個內(nèi)容可尋址的對等網(wǎng)絡(luò),實現(xiàn)了一個Gossip協(xié)議,每個節(jié)點跟蹤哪些其他節(jié)點當前在網(wǎng)絡(luò)中,每個節(jié)點試圖保存網(wǎng)絡(luò)中所有數(shù)據(jù)的一個完整副本。該網(wǎng)絡(luò)的容量受到了Stacks區(qū)塊鏈的限制:數(shù)據(jù)集中的每一條新紀錄,都必須和Stacks區(qū)塊鏈上的一個交易相關(guān)聯(lián)。Atlas對等網(wǎng)絡(luò)是作為Stacks區(qū)塊鏈的一個子系統(tǒng)工作的。其設(shè)計成一個無結(jié)構(gòu)對等網(wǎng)絡(luò)(unstructured peer network)以避免節(jié)點加入或離開網(wǎng)絡(luò)引起的問題。而且,既然每個節(jié)點都保留所有數(shù)據(jù)的一個副本,數(shù)據(jù)的索引在Stacks區(qū)塊鏈上可用,那么新的Atlas節(jié)點可以快速同步其需要存儲的數(shù)據(jù),因為事先知道應(yīng)該從其他節(jié)點存儲什么數(shù)據(jù)(通常在點對點網(wǎng)絡(luò)中這對節(jié)點是未知的)。
Atlas網(wǎng)絡(luò)作為Stacks區(qū)塊鏈的“擴展存儲”子系統(tǒng)運行。我們的設(shè)計方案是盡可能少地依賴于直接與Stacks區(qū)塊鏈自身的交互,盡可能少地在其上存儲數(shù)據(jù)。對于許多在Blockstack上的應(yīng)用,例如Blockstack Naming System (BNS)的智能合約,其本質(zhì)上是有一個機制存儲不可改變和帶有時間戳的數(shù)據(jù)。在BNS里,這被用來將用戶名和路由信息關(guān)聯(lián),通過路由信息可以發(fā)現(xiàn)用戶個人資料和應(yīng)用數(shù)據(jù)。大多數(shù)的區(qū)塊鏈直接將這種數(shù)據(jù)存儲在區(qū)塊鏈上。然而,我們相反選擇將哈希存儲在區(qū)塊鏈上(空間昂貴),并實現(xiàn)了一個單獨的對等網(wǎng)絡(luò)來交換對應(yīng)于這些哈希的數(shù)據(jù)。
4. Stacks代幣用途
Stacks區(qū)塊鏈實現(xiàn)的原生Stacks代幣激活了Blockstack網(wǎng)絡(luò)上的幾項基礎(chǔ)操作:
1. 注冊數(shù)字資產(chǎn)的燃料。Stacks代幣用來注冊不同種類的數(shù)字資產(chǎn),例如:用戶名,域名,軟件授權(quán),播客,還有一些其他的。
2. 注冊/執(zhí)行智能合約的燃料。執(zhí)行智能合約需要燃料以支付驗證合約正確性并執(zhí)行合約的開銷。Stacks代幣也被用來核銷在Stacks區(qū)塊鏈上存儲智能合約的成本。
3. 交易手續(xù)費。Stacks代幣被用來支付交易手續(xù)費,以此Stacks區(qū)塊鏈才能記錄該交易。
4. 錨定的應(yīng)用鏈。對于在Blockstack上廣受歡迎的應(yīng)用,我們的區(qū)塊鏈有一個可擴展的入口,應(yīng)用可以在Stacks區(qū)塊鏈上初始化自己的區(qū)塊鏈。這樣的“應(yīng)用鏈”燃燒Stacks代幣挖礦。
上面的列表并不是全部——隨著Blockstack網(wǎng)絡(luò)的成熟,我們期待網(wǎng)絡(luò)參與者會發(fā)現(xiàn)和開發(fā)出Stacks代幣的其他用處。我們當前正積極研究一個“應(yīng)用權(quán)益”機制,使代幣持有者可以潛在參與我們的“應(yīng)用挖礦”開發(fā)者激勵計劃中。
Clarity (清)智能合約語言
Stacks區(qū)塊鏈支持加載和執(zhí)行智能合約,以對數(shù)字資產(chǎn)進行編程控制。“清”這個新智能合約語言優(yōu)化了安全和可預(yù)測性,強調(diào)了其不同于先前的智能合約系統(tǒng)的一些關(guān)鍵設(shè)計目標:
1. 該語言必須允許快速、精確的運行時和空間需求的靜態(tài)分析。為了支持這一點,該語言在單一交易的執(zhí)行中是非圖靈完備的。但就完整的交易歷史來說,該語言是圖靈完備的。
2. 智能合約應(yīng)該是由我們的虛擬機解釋執(zhí)行的,而非編譯。開發(fā)者編寫的合約代碼必須直接部署到區(qū)塊鏈上。
為了實現(xiàn)以上兩個性質(zhì),我們創(chuàng)造了一個新的LISP語言變種,特殊設(shè)計成智能合約的編寫語言。在SIP-002[24]中有關(guān)于Clarity(清)語言設(shè)計的更詳細討論。
1. 語言概覽
智能合約語言Clarity(清)與其他的LISP變種(例如:Scheme)相似,但是有如下的不同:
1. 遞歸是非法的,并且沒有l(wèi)ambda函數(shù)
2. 循環(huán)只能通過map,filter,或fold執(zhí)行
3. 唯一的原子類型是布爾,整型,定長數(shù)組,以及控制主體(principals,是Blockstack智能合約語言中特有的數(shù)據(jù)類型)
4. 對原子類型的列表提供額外的支持,但該語言中唯一變長的列表只能作為函數(shù)輸入出現(xiàn)(也就是說,對類似append或join的列表操作不支持)。我們也支持名稱和類型指定(named-and-typed)的元組。
5. 變量僅能使用let綁定創(chuàng)建,不支持類似set的可變功能
6. 允許使用define語句定義常量和函數(shù)來簡化代碼。但這純粹是句法意義上的。如果一個定義不能被還原(inlined),該合約將被視為非法被拒絕。這些定義同時也是私有的,在某個函數(shù)中這樣的定義,只能被指定智能合約中定義的其他函數(shù)所調(diào)用。
7. 通過define-public語句指定的函數(shù)是公有函數(shù)。傳給這些函數(shù)的參數(shù)必須指定類型。
智能合約有下面的權(quán)力:
1. 從其他的智能合約調(diào)用公有函數(shù)。這些智能合約以其哈希標識,被調(diào)用智能合約必須在調(diào)用者智能合約發(fā)布時已存在。結(jié)合遞歸的非法性,這樣做將防止函數(shù)重入,這在現(xiàn)存的智能合約平臺上是一個通用的攻擊途徑。
2. 擁有并控制數(shù)字資產(chǎn)。就像公鑰或多重簽名地址一樣,智能合約是一級主體。
每個智能合約有自己的數(shù)據(jù)空間(data-space)。在此數(shù)據(jù)空間中的數(shù)據(jù)被存儲在map里。這些存儲將一個typed-tuple與另一個typed-tuple相關(guān)聯(lián)(很像一個有類型的鍵值對數(shù)據(jù)庫)。相對于表(table)數(shù)據(jù)結(jié)構(gòu),map只關(guān)聯(lián)一個指定的key到一個唯一確定的value。
每個智能合約可以從任何其他智能合約的map里取數(shù)據(jù)。但是,只有一個智能合約可以直接在其自己的map里更新數(shù)據(jù)。
由于以下兩點原因,我們選擇使用map,而不是其他的數(shù)據(jù)結(jié)構(gòu):
1. 由于map結(jié)構(gòu)的簡單性,使得虛擬機內(nèi)實現(xiàn)更簡單,函數(shù)推導(dǎo)更容易。通過檢查一個指定函數(shù)的定義,可以清楚的看到哪些map將被修改;甚至在那些map中,哪些key會受到一個給定調(diào)用的影響。
2. Map接口確保其操作的返回類型是定長的,這對智能合約運行時、成本和其他屬性的靜態(tài)分析是必須的。
2. 圖靈不完備和靜態(tài)分析
創(chuàng)造一個非圖靈完備語言是一個重要的設(shè)計考慮。在區(qū)塊鏈這種惡意的網(wǎng)絡(luò)環(huán)境中,這一點為編程帶來了許多好處。
1. 圖靈不完備使靜態(tài)分析能夠決定執(zhí)行一個指定交易的成本。這允許網(wǎng)絡(luò)預(yù)先清楚地知道向一個指定交易收取多少手續(xù)費。這也會提升客戶端的體驗,因為對客戶端來說廣播一個交易的成本可知了,所以能容易地傳達給用戶。
2. 圖靈不完備允許靜態(tài)分析可以快速決定一些重要屬性,例如單個交易可能調(diào)用了哪幾個合約。這提升了用戶體驗,因為客戶端可以警告用戶關(guān)于一個給定交易的任何潛在副作用。
3. 改進的、精確的靜態(tài)分析將允許程序員充滿信心地分析他們的智能合約,在上線之前發(fā)現(xiàn)任何可能的缺陷和錯誤。
基本上我們認為,像對待其他編程形式一樣對待智能合約編程是個錯誤。區(qū)塊鏈的性質(zhì)造就了智能合約非常重要的特性。我們認為犧牲編程的簡易,來換取增進的人和計算機對智能合約行為的全面理解,是一個好的權(quán)衡。已有的智能合約使用實踐證實了這點——圖靈完備智能合約的歷史基本上是智能合約bug的歷史。
在智能合約語言“清”中,在廣播智能合約之前運行的靜態(tài)分析可以提供如下的信息:
1. 廣播指定交易的成本是其輸入大小的函數(shù)
2. 可以修改任意特定表的交易集合
未來的工作可以支持甚至更高級的分析功能,例如自動檢查智能合約代碼上的證據(jù)的能力。
3. 解釋型語言 vs. 編譯型語言
在我們智能合約語言Clarity(清)中的另一個關(guān)鍵設(shè)計決策是,選擇一門解釋型語言,而不是編譯型語言(例如,編譯成WASM)。與同時期的其他方法相比,我們不采用編譯器的設(shè)計決策是一個根本的不同。采用這種設(shè)計決策的主要原因,是對程序?qū)崿F(xiàn)的bug歸因的能力。
程序?qū)崿F(xiàn)的bug是無法更改的事實,即使有最好的編碼規(guī)范,也無從避免。智能合約的bug(區(qū)塊鏈)是如此,其他代碼也一樣。智能合約的bug處理起來更復(fù)雜。不同的區(qū)塊鏈社區(qū)奉行“代碼即法律”的哲學(xué),提交到區(qū)塊鏈上的法則是最終真相的來源(source of ultimate truth)。編寫智能合約的開發(fā)者通過源代碼表達他們的意愿,然而是編譯將他們的意愿轉(zhuǎn)換為實際的法則。這會導(dǎo)致因為編譯器的bug使實際法則偏離開發(fā)者意愿的情況。會產(chǎn)生令人不快的情況,人們將爭論是開發(fā)者意愿更重要還是法則更重要。在Stacks區(qū)塊鏈里,我們移除編譯步驟,直接提交開發(fā)者意愿到區(qū)塊鏈,避免這種狀況,以使開發(fā)者意愿絕不會偏離法則。
讓我們考慮一下在智能合約語言(也就是虛擬機)的實現(xiàn)里出現(xiàn)bug的情況。如果智能合約語言使用解釋器,那么解決bug相對容易實施。世界上的所有合約代碼都在區(qū)塊鏈上,只需要對解釋器打一個補丁,然后從創(chuàng)世塊開始重啟區(qū)塊鏈(重新應(yīng)用到所有的交易)。
但是如果智能合約語言是編譯的,該bug是在編譯器內(nèi)部,而非虛擬機,那補救措施就沒那么明顯了,因而可能會發(fā)生更多的爭議。這是因為編譯器里的一個bug可以導(dǎo)致其生成的代碼(最終廣播到區(qū)塊鏈上)產(chǎn)生與開發(fā)者初衷背離的行為。在加密數(shù)字貨幣社區(qū)里,在對“代碼即法律”哲學(xué)的認同下,這種情況愈加復(fù)雜。由開發(fā)者編寫的代碼是正確的,但是區(qū)塊鏈上產(chǎn)生的交易是錯誤的。收集每個開發(fā)者的源代碼并重新編譯是不現(xiàn)實的,尤其在無法驗證源代碼是否已改變的情況下。我們懷疑,在實踐中這種情況下在區(qū)塊鏈上發(fā)布的代碼多數(shù)是最終真相的源。如果是這樣,開發(fā)者應(yīng)該歸因和驗證此代碼,而不是他們的源代碼。我們相信,使用一個高級的解釋型語言對于確保正確的智能合約執(zhí)行是至關(guān)重要的。
Gaia:用戶控制的存儲
Blockstack使用Gaia存儲系統(tǒng)給用戶對其數(shù)據(jù)的控制權(quán)。這是一個用戶控制的存儲系統(tǒng),使應(yīng)用可以與私人數(shù)據(jù)鎖柜(private data lockers)交互。私人數(shù)據(jù)鎖柜可以托管在一個云服務(wù)提供商,或者是其他的數(shù)據(jù)存儲服務(wù)商。重要的是,用戶控制使用哪一個提供商。Gaia上的數(shù)據(jù)經(jīng)過加密,并使用用戶控制的密鑰簽名。邏輯上,Gaia像是一個廣域的文件系統(tǒng),可以被掛載以保存文件。
使用Gaia存儲系統(tǒng),用戶要指定一個Gaia存儲位置的地址,在此保存數(shù)據(jù)。只是Gaia存儲位置的“指針”被保存到Stacks區(qū)塊鏈上(以及Atlas子系統(tǒng)上)。當用戶使用Blockstack認證協(xié)議登錄應(yīng)用和服務(wù)時,將此位置傳遞給應(yīng)用;有了這個信息,應(yīng)用知道如何與指定地Gaia數(shù)據(jù)鎖柜交流,如此應(yīng)用數(shù)據(jù)被保存到用戶指定的存儲里。
Gaia的設(shè)計哲學(xué)是,以一種終端用戶無需信任底層云服務(wù)提供商的方式重用現(xiàn)有的云服務(wù)提供商和基礎(chǔ)設(shè)施。我們看待云存儲服務(wù)提供商(像Amazon S3, Google Cloud Storage,甚至一個本地磁盤)只是作為一個通道(dumb drives),在上面存儲加密過的,和/或簽名過的數(shù)據(jù)。云服務(wù)提供商看不到用戶的數(shù)據(jù);他們只能看到加密的數(shù)據(jù)塊。
而且,因為通過Stacks區(qū)塊鏈可發(fā)現(xiàn)相關(guān)聯(lián)的公鑰或數(shù)據(jù)哈希,云服務(wù)提供商沒有篡改用戶數(shù)據(jù)的能力。
向Gaia服務(wù)器寫數(shù)據(jù)涉及到POST數(shù)據(jù)到服務(wù)器的合適位置。這些POST在服務(wù)器端被驗證,檢查是否此寫請求附帶了一個簽名的認證token。這個token使用私鑰簽名,控制了是否對特定的bucket有寫權(quán)限。為了給用戶的每一個應(yīng)用提供分離的bucket,用戶將為每一個應(yīng)用推導(dǎo)出不同的私鑰。每一個私鑰僅賦予Gaia服務(wù)器上特定bucket的訪問權(quán)限。
在Gaia里,用戶的區(qū)塊鏈驗證的路由信息中包含一個URL,指向一個簽名過的JSON對象(由該用戶的owner key簽名)。這個簽名過的JSON對象內(nèi)包含指向該用戶Gaia數(shù)據(jù)鎖柜的URL。一旦應(yīng)用知道用戶的Gaia數(shù)據(jù)鎖柜的位置,就可以使用普通的HTTP請求向那個位置請求一個文件。為了查詢不同用戶創(chuàng)建的文件,應(yīng)用可以完全在客戶端順序地執(zhí)行查詢。這在初始查詢時會有時間延遲的開銷,但是路由信息中的許多數(shù)據(jù)可以由瀏覽器本地緩存(或者由本地應(yīng)用),所以后續(xù)的查詢就像傳統(tǒng)的互聯(lián)網(wǎng)數(shù)據(jù)訪問一樣快了。
圖1顯示了Gaia的總覽。查詢一個像werner.id一樣的名字,其工作流程如下:
1. 在Stacks區(qū)塊鏈上查詢該名字,取得(name,hash)對
2. 在Blockstack的Atlas對等網(wǎng)絡(luò)里查詢hash(name),得到該名字的路由信息文件。
3. 從路由信息文件中取得該用戶的Gaia URL,接著查詢此URL,連接至存儲后端。
4. 從指定的Gaia服務(wù)處GET/PUT數(shù)據(jù)(如果需要且讀者有此訪問權(quán)限,則進行解密),并驗證相應(yīng)的簽名或哈希。
上面的步驟1和步驟2可通過對blockstack-core在/v1/names/《name》訪問點上的一個簡單調(diào)用即可執(zhí)行。這些重復(fù)的讀寫操作已在我們的開發(fā)者程序庫中自動處理了。
性能。我們架構(gòu)的目標是相對構(gòu)建于云服務(wù)提供商之上的傳統(tǒng)互聯(lián)網(wǎng)應(yīng)用提供可比的性能。通過移除控制和失效的中心點,我們引入了有意義的安全和容錯的好處——在讀寫性能上付出一些小的額外開銷是值得的,只要這些額外開銷對普通用戶不那么重大或顯而易見。我們評估了Gaia的讀寫性能,顯示出其在讀寫底層存儲的文件上是有競爭力的。由于加密的緣故,Gaia為每個文件增加了一個可忽略的固定大小的存儲空間開銷(粗略為文件大小的5%)。加密也會有CPU的額外開銷;但是因為文件尺寸變化非常小,讀寫的網(wǎng)絡(luò)性能與直接訪問底層的存儲服務(wù)是相似的。
系統(tǒng)擴展性。我們架構(gòu)的存儲層不是一個可擴展性的瓶頸。同期的云存儲系統(tǒng)是高度可擴展的。Atlas網(wǎng)絡(luò)也是擴展性良好,因為其并不索引單獨的用戶文件或文件塊,只索引指向用戶存儲后臺的指針。存儲后臺處理批量的數(shù)據(jù)讀寫操作,Atlas網(wǎng)絡(luò)只在下述情況下參與 (a)用戶改變或更新了他的存儲后臺或者公鑰映射,或(b)新用戶在系統(tǒng)中注冊。當注冊新域名/用戶時,路由文件的哈希必須在區(qū)塊鏈上廣播。區(qū)塊鏈可能是可擴展性的一個瓶頸(相對于Atlas網(wǎng)絡(luò)),但用戶極少寫區(qū)塊鏈。另外,鏈下名字注冊的使用可以在一個單一的區(qū)塊鏈交易中注冊超過100個用戶,由此可以支持每天數(shù)十萬個用戶注冊(可以與傳統(tǒng)云上平臺的每日新用戶數(shù)量相比)。提升Gaia到10億用戶量級在實踐中可能會暴露出可擴展性問題,但明顯現(xiàn)在不會發(fā)生,解決這些挑戰(zhàn)是正在進行和將來工作的一個研究領(lǐng)域。
認證
使用互聯(lián)網(wǎng)應(yīng)用,用戶賬戶是至關(guān)重要的。Blockstack提供給用戶一個通用的用戶名,無需任何密碼,可用于所有的應(yīng)用。不像基于密碼的認證,用戶使用公鑰密碼學(xué)進行認證:一個本地運行的軟件客戶端處理來自特定應(yīng)用的登錄請求,并對認證請求簽名。
Blockstack Auth是我們的認證協(xié)議,其將應(yīng)用與用戶的Gaia hub以及任何應(yīng)用相關(guān)的私鑰連接在一起。應(yīng)用使用這些信息將用戶和其數(shù)據(jù)保存,驗證其他用戶產(chǎn)生的數(shù)據(jù)是真實的。
1. 單點登錄
Blockstack Auth使用公鑰密碼學(xué)進行認證。用戶登錄一個應(yīng)用以使此應(yīng)用可以產(chǎn)生和存儲簽名過的數(shù)據(jù),其他用戶可以讀取和驗證其數(shù)據(jù)。這反過來向其他用戶證明了該登錄用戶是合法的。
在Blockstack中,登錄的目的是向應(yīng)用客戶端提供足夠的信息,來產(chǎn)生和存儲真實的數(shù)據(jù)。這意味著,認證功能可以以一個認證器(authenticator)應(yīng)用的形式,獨立運行在用戶的計算機上。因為所有的名字都是在Stacks區(qū)塊鏈上注冊的,每個應(yīng)用和認證器一直有一個最新的視圖 (1)所有存在的名字,和(2)所有名字的公鑰及Gaia hub。這消除了對一個服務(wù)端ID提供者的需要。
為了認證用戶數(shù)據(jù),應(yīng)用客戶端只需能夠聯(lián)系一個Stacks區(qū)塊鏈節(jié)點。為此用戶在登錄時向應(yīng)用提供其首選Stacks節(jié)點的網(wǎng)絡(luò)地址。
用 戶 通 過 點 擊 “ 登 錄 ” 按 鈕 來 登 錄 一 個 Blockstack 應(yīng) 用 。 此 應(yīng) 用 ( 調(diào) 用blockstack.js SDK)將用戶重定向到Blockstack認證器應(yīng)用,請求登錄。用戶將看到可選擇的用于登錄的Blockstack ID,同時還有一個應(yīng)用所需的權(quán)限列表。選擇一個ID,認證器則將用戶導(dǎo)回到應(yīng)用,并向應(yīng)用傳遞三個信息:
1. 用戶的用戶名(或者是公鑰的哈希,如果還沒用戶名的話)
2. 應(yīng)用特定的私鑰,用來加密和簽名用戶的數(shù)據(jù)。這是使用用戶主私鑰、登錄使用的ID和應(yīng)用的HTTP Origin所生成的確定性密鑰。
3. 用戶Gaia hub的URL,以及用來查詢其他用戶和數(shù)據(jù)的首選Stacks區(qū)塊鏈節(jié)點。
有了這些,用戶展現(xiàn)了其用戶名,通知應(yīng)用哪里可以找到和存儲其數(shù)據(jù)。在那里,應(yīng)用可以持久化地讀寫應(yīng)用特定的數(shù)據(jù),訪問其他用戶的應(yīng)用特定數(shù)據(jù)——所有這些不需要提供其自身的存儲或ID解決方案。
登出操作簡單地清除應(yīng)用的本地狀態(tài),因此導(dǎo)致Web瀏覽器和客戶端忘記應(yīng)用特定的私鑰。
Blockstack程序庫和開發(fā)包
Blockstack PBC是一個公益公司(Public Benefit Corp),和開源貢獻者一起開發(fā)了Blockstack的核心協(xié)議和開發(fā)者程序庫。開發(fā)者程序庫使開發(fā)人員在Blockstack網(wǎng)絡(luò)上構(gòu)建應(yīng)用更簡單,而Blockstack客戶端使用戶可以和Blockstack網(wǎng)絡(luò)的不同組件以及不同應(yīng)用進行交互。
1. 開發(fā)者程序庫
Blockstack設(shè)計成讓開發(fā)人員開發(fā)去中心化應(yīng)用盡可能地簡單。與Stacks區(qū)塊鏈或去中心化存儲的交互復(fù)雜性大多向應(yīng)用開發(fā)者隱藏了,他們可以只關(guān)注應(yīng)用的邏輯。Blockstack開源代碼庫包含了一些不同平臺的開發(fā)者程序庫:一個Javascript Web SDK (blockstack.js),iOS和Android的移動SDK。所有這些程序庫都是在MIT許可協(xié)議下可用,訪問此鏈接可獲取 https://github.com/blockstack。
這些程序庫提供所有必須的API接口,以及實現(xiàn)我們認證協(xié)議的代碼,直接與Gaia服務(wù)器交互,生成Stacks交易。使用這些程序庫允許開發(fā)者創(chuàng)建尊重用戶安全和隱私的去中心化應(yīng)用,就像開發(fā)傳統(tǒng)的應(yīng)用一樣容易。
Radiks 對于希望穿透復(fù)雜的社交圖譜分享數(shù)據(jù)的應(yīng)用來說,對數(shù)據(jù)建立索引通常是有用的和最有效的。Radiks系統(tǒng)是一個服務(wù)器和客戶端的程序庫,用來構(gòu)建并與這樣的索引交互。Radiks程序庫使開發(fā)人員可以在應(yīng)用內(nèi)創(chuàng)建跨用戶的結(jié)構(gòu)化數(shù)據(jù)集,可以通過字段的值查詢。這要求一個服務(wù)器端的組件處理索引和查詢,可關(guān)鍵這不是用戶信任的計算環(huán)境的一部分。其只能看到數(shù)據(jù)的密文和一些必要的元數(shù)據(jù),后者用于構(gòu)建索引以及通過索引應(yīng)答查詢。
2. 用戶軟件
雖然應(yīng)用開發(fā)者將使用開發(fā)包和程序庫與Blockstack網(wǎng)絡(luò)進行交互,但用戶還需要軟件來執(zhí)行諸如注冊用戶、指定其Gaia服務(wù)器以及應(yīng)用用戶認證等功能。Blockstack生態(tài)系統(tǒng)目前提供兩個可使用戶與網(wǎng)絡(luò)進行交互的開源項目:
1. Blockstack瀏覽器。這是目前推薦的認證器應(yīng)用的一個開源實現(xiàn),而且其允許用戶瀏覽可用的Blockstack應(yīng)用、注冊用戶名以及認證應(yīng)用用戶。Blockstack瀏覽器可以在桌面上進行本地安裝,也可以采用web部署。
2. Blockstack CLI。這是一個命令行實用程序,允許高級用戶和開發(fā)者與Blockstack協(xié)議交互。除了提供認證功能,其允許用戶創(chuàng)建原始交易,以及通過Gaia進行高級數(shù)據(jù)管理任務(wù)。
應(yīng)用和服務(wù)
截至2019年初,Blockstack上已經(jīng)搭建了100多個應(yīng)用。開發(fā)者正在搭建各種不同類型的應(yīng)用,在app.co上可找到持續(xù)增多的Blockstack應(yīng)用的完整清單。由于Blockstack是模塊化的,不同的應(yīng)用可獨立地使用不同的組件。以下是我們對一些示例用例做出的簡要概述。
目前,Blockstack上的辦公效率應(yīng)用使用Blockstack認證和Gaia存儲,用戶可以創(chuàng)建、編輯以及共享文件。為幫助用戶發(fā)現(xiàn)彼此的文件,這些應(yīng)用使用Blockstack個人資料檢索器。該檢索器是去中心化的——因為個人資料集是全球可見的,是可以被發(fā)現(xiàn)的,任何人都可以部署及運行個人資料檢索器。
Blockstack生態(tài)系統(tǒng)還包含許多社交應(yīng)用。通常情況下,這些社交應(yīng)用使用 Blockstack認證,同時部署一個Radiks服務(wù)器,以使用戶高效地發(fā)現(xiàn)并獲取其他用戶的資料。在至少一個用例中,應(yīng)用使用一個專用的中繼通道在眾多用戶間路由加密的信息。Blockstack上的發(fā)布和存儲應(yīng)用不僅使用Gaia存儲用戶資料,而且還將其通過傳統(tǒng)的HTTP URL與非Blockstack用戶分享。
開發(fā)者獎勵。Stacks區(qū)塊鏈擴大了挖礦的概念,應(yīng)用開發(fā)者可以通過在網(wǎng)絡(luò)上發(fā)布高質(zhì)量的應(yīng)用 “挖”Stacks代幣。這一機制被稱作應(yīng)用挖礦,其被設(shè)計成一種激勵機制,以期在網(wǎng)絡(luò)上獲得高質(zhì)量應(yīng)用。應(yīng)用挖礦計劃目前由擁有多名獨立審閱人的Blockstack PBC運營。開發(fā)者可以將其應(yīng)用每月提交一次以審閱,并基于其應(yīng)用在應(yīng)用排名機制中的表現(xiàn)獲得獎勵。應(yīng)用由一組獨立審閱人審閱,每名審閱人對于什么樣的應(yīng)用才是好應(yīng)用有自己的評定標準。應(yīng)用得到的總分決定了其排名情況。
結(jié)論
Blockstack是一個去中心化計算網(wǎng)絡(luò),向開發(fā)者提供了用于搭建去中心化應(yīng)用的全棧。迄今為止,我們的網(wǎng)絡(luò)上已經(jīng)搭建了100多個去中心化應(yīng)用。Blockstack無需開發(fā)者運行服務(wù)器和數(shù)據(jù)庫:取而代之的是用應(yīng)用將數(shù)據(jù)寫到用戶控制的私人數(shù)據(jù)鎖柜里。這一去中心化存儲系統(tǒng)與傳統(tǒng)云存儲在性能上相當,只因加密/解密引入一點開銷。我們的認證協(xié)議無需采用基于密碼的登錄方式,那種方式不如加密認證安全。用戶可以使用單一賬戶訪問所有服務(wù)和應(yīng)用,不必持續(xù)不斷的為新服務(wù)創(chuàng)建新賬戶。我們的開發(fā)者程序庫使得在該平臺上開發(fā)去中心化應(yīng)用與搭建傳統(tǒng)互聯(lián)網(wǎng)應(yīng)用一樣簡單。
在本文中,我們呈現(xiàn)了Blockstack的最新設(shè)計。自2016年和2017年產(chǎn)品的早期實現(xiàn)以來,Blockstack的核心設(shè)計一直在演進,吸取了從產(chǎn)品部署中得到的經(jīng)驗教訓(xùn)以及去中心化應(yīng)用開發(fā)者的反饋。與早期(2017年)的白皮書相比,主要變化包括(a)對Stacks 區(qū)塊鏈的說明,其使用新穎的可調(diào)諧證明機制來安全地啟動一條新的區(qū)塊鏈,和(b)對新智能合約語言Clarity(清)的說明,關(guān)注智能合約的安全和可預(yù)測性。我們已經(jīng)以開源的方式發(fā)布了Blockstack 。
評論