目前,區(qū)塊鏈應用構(gòu)建者往往面臨選擇的難題,需要進行大量的取舍和開發(fā)工作,以實現(xiàn)自己預想中的產(chǎn)品形態(tài)。區(qū)塊鏈底層的開發(fā)成本較為高昂,開發(fā)者通常需要基于合適的底層鏈進行二次開發(fā),并對自己的應用進行適配性修改以適應該底層鏈的特點。同時,由于安全、效率、公平這三點存在矛盾而無法同時達到最優(yōu),能夠適配所有場景的完美區(qū)塊鏈底層并不存在。
例如,選定PoW作為共識算法的公鏈項目,在保證大量節(jié)點參與共識且達到50%容錯的情況下,不得不犧牲吞吐量和交易確認速度,難以滿足實時的應用需求,并耗費大量電能;選定有向無環(huán)圖(DAG)作為共識基礎的項目,雖然保證去中心化并獲得吞吐量優(yōu)勢,但沒有解決高能耗和交易確認慢的問題;選定Hyperledger Fabric作為底層鏈的項目,可以滿足高吞吐量、快速確認、低能耗的需求,但引入了對中心化節(jié)點的依賴。
一個需要指出的問題是,不同平臺上的開發(fā)往往不具有可復用性,在某個平臺上付出的努力,通常無法直接遷移到另外的平臺上,使得相比于業(yè)務功能的具體實現(xiàn),初期的選擇變得尤為重要。上述問題又被稱為平臺“鎖定” 風險,區(qū)塊鏈的應用開發(fā)者不得不在開始階段就選擇某種具體的區(qū)塊鏈底層技術。并且在之后受到它一定程度上的限制。
紙貴區(qū)塊鏈致力于提供適用于多種業(yè)務需求的區(qū)塊鏈底層服務,以期在保證底層開發(fā)維持其理想的底層技術棧的同時。方使區(qū)塊鏈的上層應用開發(fā)。紙貴區(qū)塊鏈底層平臺以通用性、模塊化。可播拔、安全性為設計原則,使得區(qū)塊鏈底層的搭建盡可能輕量級。在底層的組織上,各共識模塊、功能模塊可定制且可插拔,為適配具體場景提供使利。
設計原則
功能解耦原則
各個模塊之間,特別是不同功能層之間的服務應當盡可能地實現(xiàn)功能解耦。例如,底層模塊的任務是構(gòu)建安全、滿足一致性要求的去中心化系統(tǒng),它不應為用戶如何使用自己的私鑰而煩惱;區(qū)塊鏈應用應當更多地處理具體的業(yè)務邏輯,而將接口適配、賬戶管理、區(qū)塊鏈信息查詢等功能交給其他的專門模塊處理,從而有效地避免架構(gòu)過于復雜、錯誤耦合、調(diào)試困難等問題。
兼容性原則
區(qū)塊鏈的基本模塊在設計上應當遵循兼容性原則,使得不同的應用開發(fā)者能夠快速而方便地進行集成。例如,數(shù)據(jù)的傳輸內(nèi)容應當使用通用標準,便于使用者理解;賬戶系統(tǒng)應當滿足絕大部分場景的需求即可,而不應當添加諸如個人信息、角色信息等內(nèi)容。
可插拔原則
當兼容性原則無法滿足,必須通過不同的模塊來提供相同種類的功能時,應當考慮可插拔原則。例如,不同的共識引擎之間應當能夠進行切換,使用者可以根據(jù)自身的需要對具體的功能模塊進行組合,以達到特定的功能或性能要求。
安全性原則
區(qū)塊鏈底層及應用在設計上應當遵循安全第一的原則。保證使用者的利益,使得系統(tǒng)在受到一定程度的惡意攻擊時仍能保持健壯。在沒有中心化管理系統(tǒng)的區(qū)塊鏈底層及應用中,這一點尤為重要。
底層鏈架構(gòu)
底層鏈是區(qū)塊鏈系統(tǒng)的基石,為鏈上信息的分布式共識提供支撐。紙貴區(qū)塊鏈產(chǎn)品的底層通用架構(gòu)如下圖所示:
共識引擎——共識引擎是底層鏈的運行基礎。 其中,區(qū)塊與狀態(tài)是分布式節(jié)點之間通過一致性協(xié)議達成的共識內(nèi)容,是區(qū)塊鏈運行機制的基本數(shù)據(jù)存儲; P2P網(wǎng)絡協(xié)議是節(jié)點間自組織與通信的基礎協(xié)議。這兩個模塊共同作用,奠定了區(qū)塊鏈系統(tǒng)的運行基礎。
鏈上系統(tǒng)——鏈上系統(tǒng)是底層鏈的功能核心。該部分包括一系列可插拔的、 與共識機制緊密結(jié)合的底層基礎邏輯。該部分包括用于分布式實體識別與認證的密碼學基礎算法、鏈上資產(chǎn)、交易、跨鏈協(xié)議等??珂渽f(xié)議是鏈與鏈之間資產(chǎn)的交互與連接、信息的傳遞與流轉(zhuǎn)遵循的交互方式。此外,智能合約運行環(huán)境(如EVM、JVM、x86VM,以及Docker等)為支持智能合約的正常有序執(zhí)行提供了適宜的環(huán)境。
鏈外交互——鏈外交 互是底層鏈的對外窗口,包括智能合約與交互接口。用戶可以對合約進行安裝、刪除、初始化、凍結(jié)等操作,也可以通過接口與智能合約交互,從而實現(xiàn)所需的分布式業(yè)務邏輯,或者對合約請求、用戶身份、其他合約的狀態(tài)進行審核,對區(qū)塊鏈進行治理等。
1.共識引擎
共識引擎是區(qū)塊鏈分布式系統(tǒng)的運行基礎,其核心的功能為對區(qū)塊鏈網(wǎng)絡中的交易進行定序。
區(qū)塊與狀態(tài)機
區(qū)塊鏈網(wǎng)絡是由多個節(jié)點構(gòu)成的分布式系統(tǒng)。區(qū)塊與節(jié)點的狀態(tài)機共同構(gòu)成了該系統(tǒng)的數(shù)據(jù)底層。其中,區(qū)塊存儲了系統(tǒng)中所有需要共識的操作(如交易) 的歷史記錄,這些操作的記錄極難被篡改;節(jié)點的狀態(tài)機存儲了節(jié)點運行時的最新狀態(tài),是區(qū)塊鏈底層維護自身狀態(tài)的存儲空間,它使得智能合約能夠被正確執(zhí)行。
如果將區(qū)塊比作區(qū)塊鏈的“硬盤”,那么狀態(tài)機就是區(qū)塊鏈各運行節(jié)點的“內(nèi)存”。區(qū)塊中記錄了每筆操作的記錄,通過整個鏈條的順序回放便得到了區(qū)塊鏈的當前狀態(tài)。這種分離的設計使得智能合約的運行成為可能,否則,區(qū)塊鏈將需要重放所有區(qū)塊中的交易以獲取用戶的當前余額,在存在大量交易的場景中難以實用。由于狀態(tài)機分別存儲在每個節(jié)點上,單一節(jié)點機的狀態(tài)機是有可能被篡改的,但是被篡改了狀態(tài)的節(jié)點無法與其他節(jié)點達成共識,從而被整個網(wǎng)絡所孤立。
共識算法
各個節(jié)點對區(qū)塊和狀態(tài)達成一致需要由共識算法保證。共識算法的選擇往往受制于具體的應用環(huán)境和應用目的。例如,當區(qū)塊鏈系統(tǒng)用于公司內(nèi)相對獨立的業(yè)務部門之間的協(xié)作時,可以選擇CFT (Crash Fault Tolerance)類共識算法,更利于業(yè)務效率提升,降低各業(yè)務部門達成互信和共識的成本;當區(qū)塊鏈系統(tǒng)用于聯(lián)盟成員之間的共識時,可以選擇PBFT (PracticalByzanTIne Fault Tolerance)、Tendermint 等可以防御一定的作惡節(jié)點,同時兼顧處理效率的共識算法;當區(qū)塊鏈系統(tǒng)暴露于公網(wǎng)供所有人自由接入時,可能需要選擇PoW (Proof ofWork)、PoS (Proof of Stake)等能夠容納大量用戶,容忍低于50%作惡節(jié)點,安全維護分布式賬本的算法。這些算法各有利弊,互相難以替代,只有面向具體業(yè)務場景,才能設計出真正合適的算法。
針對該問題,紙貴區(qū)塊鏈采用可插拔的共識引擎,對共識算法進行統(tǒng)-接口封裝,將上層業(yè)務邏輯與底層共識單元相分離。對于不同的共識方式,按照相同的共識接口進行開發(fā),可實現(xiàn)兼容紙貴區(qū)塊鏈的、上層模塊,實現(xiàn)業(yè)務邏輯與共識引擎相互解耦,并針對不同場景的需要,替換不同類型的共識算法。
2.鏈上系統(tǒng)
鏈上系統(tǒng)包含節(jié)點的核心處理機制,在去中心化的場景下實現(xiàn)部分和區(qū)塊鏈共識緊密相關的業(yè)務功能,并且其中的一些機制可以提供給開發(fā)者進行上層應用的開發(fā)工作。這些機制與共識引擎共同作用,完成底層鏈的基礎功能。
密碼學基礎方法
區(qū)塊鏈又被稱為“System of Proof”,密碼學基礎方法則是支撐證明的強有力工具。它為各種去中心化功能的實現(xiàn)提供了可能性,也是分布式策略賴以實現(xiàn)的最基礎的算法庫與工具包。算法包主要包括但不限于以下幾種開源的、經(jīng)過理論推導與實驗驗證的密碼學庫。
哈希算法
哈希算法通過單向散列函數(shù)確保信息完整性,防止信息被篡改。在實現(xiàn)區(qū)塊之間的鏈式結(jié)構(gòu)、簽名前對待簽信息進行散列、產(chǎn)生鏈上唯一ID 等場景中均會用到哈希算法。
非對稱加密與數(shù)字簽名算法
非對稱加密在區(qū)塊鏈底層系統(tǒng)中主要提供數(shù)字簽名與驗簽功能。簽名驗證工作存在于整個交易過程中,涉及到中間的每個節(jié)點,如提交與驗證交易請求,提交與驗證背書簽名、提交與驗正出塊簽名等。在用戶自主生成和管理的匿名賬戶地址體系中進行的資產(chǎn)交易,也會涉及到非對稱加密與數(shù)字簽名。出于對用戶賬戶私鑰安全性的考慮,紙責提出了符合ISO 7816標準的安全硬件私鑰保存方案,確保用戶鏈。上資產(chǎn)的安全性。
環(huán)簽名算法
紙貴通過提供環(huán)簽名算法模塊。滿足用戶對于交易匿名性的需求。通常情況下,一般的加密簽名可以跟蹤交易,得到發(fā)送人的公鑰與地址。通過調(diào)用紙貴的環(huán)簽名模塊,可以實現(xiàn)對于任何交易,無法追蹤其付款方是誰;對于向外發(fā)送的兩筆交易,其他人無法證明其是否發(fā)給同一個收款人。
同態(tài)加密
用戶在接受數(shù)據(jù)服務時,需要將數(shù)據(jù)以明文形式發(fā)送給數(shù)據(jù)服務提供方。在注重數(shù)據(jù)隱私的場景中,如何在保證用戶數(shù)據(jù)機密性的前提下,使用戶獲得數(shù)據(jù)服務就十分重要。紙責通過提供同態(tài)加密組建,可以確保用戶數(shù)據(jù)在整個服務過程中的機密性。用戶將數(shù)據(jù)以密文形式發(fā)送給數(shù)據(jù)服務提供方。數(shù)據(jù)服務對密文進行特定形式的代數(shù)運算,得到仍然是加密的結(jié)果;用戶得到加密結(jié)果后,將其解密所得到的結(jié)果,與對明文進行同樣運算所得結(jié)果一樣。 紙貴科技目前支持滿足加法同態(tài)和滿足乘法同態(tài)的加密算法,并將在未來進一步支持基于帶擾動學習的多密鑰全同態(tài)加密方案。
賬戶與交易
賬戶與交易是由密碼學方法直接保證的數(shù)字資產(chǎn)模型,也是實現(xiàn)鏈上激勵機制的基本元素。其保證了區(qū)塊鏈能夠成為自組織、自驅(qū)動的去中心化系統(tǒng)。對于任意賬戶資產(chǎn)體系而言,最核心的問題是安全,其次才是性能。
安全性是賬戶體系最基本也是最重要的要求。首先,由于區(qū)塊鏈賬本具有一定的透明性,所有共識節(jié)點均需要對交易進行確認并達成共識,傳統(tǒng)的密碼賬戶體系無法支撐區(qū)塊鏈上的分布式應用。在此場景下,依賴非對稱加密等密碼學算法的去中心化賬戶體系應運而生,區(qū)塊鏈應用得以在公開的環(huán)境確保每個人的資產(chǎn)權屬。其次,由于區(qū)塊鏈上的賬本允許任何人訪問,惡意操作難以控制和回滾,必須從機制上保證沒有人能夠作惡。其中最典型的一個要點是,去中心化賬戶體系應當確??梢缘挚闺p重花費攻擊(DoubleSpending Attack)。例如,比特幣采用未花費交易輸出(Unspent TransacTIon Output)機制來保證資金的流動中流出始終等于流入;以太坊采用Nonce保證交易不會重放。不管采用何種方案,確保賬戶的資產(chǎn)安全,抵抗任何可能出現(xiàn)的攻擊,是區(qū)塊鏈賬戶體系最基本的要求。
由于賬戶系統(tǒng)與支付關系密切,去中心化的賬戶體系也應當支持高并發(fā)交易。去中心化賬戶體系中的交易在兩個地方存在瓶頸。其一,所有交易必須經(jīng)過分布式共識,共識的過程需要消耗時間;其二,區(qū)塊鏈賬戶的賬戶狀態(tài)根據(jù)每個區(qū)塊的確認進行修改,如果某筆交易是根據(jù)當前區(qū)塊的賬戶狀態(tài)構(gòu)建,而在下一個區(qū)塊到來后被廣播至區(qū)塊鏈網(wǎng)絡,這期間很有可能已經(jīng)發(fā)生了賬戶狀態(tài)的改變,從而產(chǎn)生沖突。去中心化賬戶體系應當能夠正確并有效地處理這兩個問題,支持高并發(fā)交易,從而能夠獲取更廣泛的應用空間。
智能合約運行環(huán)境
智能合約具有特殊的分布式特性,其可進行的操作與可利用的資源應保證無法對宿主機造成任何損害。為了保證智能合約能夠在資源受限的條件下正確執(zhí)行,智能合約虛擬機是不可或缺的基礎運行環(huán)境。它通過提供受限的指令集與特殊的資源調(diào)度策略,保證了智能合約的執(zhí)行不會對底層鏈造成損害性的后果。
常見的智能合約運行環(huán)境包括以太坊的以太坊虛擬機(Ethereum Virtual Machine)、Fabric的Docker等,也有部分依賴于特定硬件或?qū)崿F(xiàn)了特殊算法的虛擬機,可根據(jù)應用的需要定制化使用。
3.鏈外交互
鏈外交互層是區(qū)塊鏈與外界進行溝通的窗口,由智能合約及其對外接口組成。
智能合約是區(qū)塊鏈應用的開發(fā)者與鏈上機制進行溝通,實現(xiàn)去中心化業(yè)務邏輯的重要載體,也是區(qū)塊鏈生態(tài)得以繁榮的根本所在。通過智能合約,工程師們可以在區(qū)塊鏈的去中心化環(huán)境中構(gòu)建可信的應用程序,實現(xiàn)具有分布式共識特性的業(yè)務邏輯。他們寫的每-行代碼,以及程序的每一次輸入輸出,都將被底層區(qū)塊鏈忠實記錄與存證。這些智能合約根據(jù)功能的不同可以被分為三類:第一類是鏈外交互的過程中存在的權限認證、正確性檢查等保護機制。通過這些機制可以構(gòu)建具有權限管理的許可鏈,在不少受限的場景下具有廣泛的應用;第二類是鏈上治理合約。這些合約將提供鏈上審計、合約管理等功能,并且所有操作均將作鏈上記錄;第三類則是業(yè)務合約,這些合約與鏈外系統(tǒng)一起,構(gòu)成各式各樣的去中心化應用程序。所有智能合約必須遵守接口開發(fā)規(guī)范,按照對外交互的協(xié)議要求實現(xiàn)調(diào)用接口從而對外提供服務。
智能合約的開發(fā)者們仿佛戴著鐐銬在跳舞。一方面,為了實現(xiàn)去中心化的應用,他們必須遵循鏈上機制提出的種種限制,使用有限的操作方法與受限的計算資源對鏈上的信息進行處理;他們被禁止使用隨機數(shù)等會影響共識達成的機制;他們必須保證自己的代碼毫無差錯。另一方面,合約工程師們要針對外部系統(tǒng)提出的種種要求,以全面的、系統(tǒng)的觀點設計合約功能與應用結(jié)構(gòu),最終適配并交付對外交互層,供外部應用使用。智能合約工程師必須做到邏輯嚴密,代碼嚴謹,既熟悉計算機的基本原理與算法的靈活應用,又通曉分布式系統(tǒng)的運行邏輯與應用系統(tǒng)的架構(gòu)設計,這對應用開發(fā)者提出了很高的技術要求。
應用架構(gòu)
對于一個完整的區(qū)塊鏈應用而言,紙貴區(qū)塊鏈的應用架構(gòu)如下圖所示:
其中,區(qū)塊鏈底層與存儲模塊相配合,能夠滿足大多數(shù)業(yè)務場景的需求;區(qū)塊鏈適配器是將不同底層的接口適配并統(tǒng)一在同一協(xié)議框架下的轉(zhuǎn)換器,通過向下兼容不同底層、向上提供統(tǒng)一接口的方式,大大節(jié)省上層業(yè)務服務的集成開發(fā)成本;接口網(wǎng)關是統(tǒng)一交互入口,進行請求轉(zhuǎn)發(fā)。負載均衡的輔助模塊,也是隔離惡意攻擊。記錄問題操作的防火墻;區(qū)塊鏈服務是通過對區(qū)塊鏈底層接口的再次抽象與封裝,對外提供的簡化操作形式,并按需為上層應用實現(xiàn)用戶管理、身份識別與驗證的基礎設施;通過對區(qū)塊鏈服務的定制化調(diào)度與包裝,最終集成為區(qū)塊鏈應用供用戶使用。
1.區(qū)塊鏈適配器
區(qū)塊鏈適配器使得上層應用的大部分功能可以不關心底層鏈的具體協(xié)議,而專心進行應用邏輯的開發(fā)。
區(qū)塊鏈適配器是使得底層與應用解耦的關鍵模塊。正如在對底層鏈的鏈外交互層進行闡述時指出的。底層的開發(fā)者更注重底層的處理性能、接口效率等指標,他們不希望被應用東縛而應用開發(fā)者則更注重業(yè)務邏輯的實現(xiàn),他們不希望被具體的平臺“鎖定”。為了滿足雙方的需求,區(qū)塊鏈適配器的存在必不可少。
區(qū)塊鏈造配器可以將不同鏈的鏈外交互接口統(tǒng)一到相同的協(xié)議下, 使得應用開發(fā)者可以在相同的框架中構(gòu)建應用。在區(qū)塊鏈適配器的幫助下,開發(fā)者可以在不轉(zhuǎn)變思維的情況下,上手在一個新的平臺上進行開發(fā);他們只需付出少量的學習成本去閱讀某個具體鏈的擴展方法,就可以方便地集成該鏈的特殊功能。
2.服務中間件
服務中間件是以“擴展包”形式存在的基礎功能模塊,它完成了某個細粒度服務的具體實現(xiàn)。
例如,當某個應用開發(fā)者想要完成某個去中心化資產(chǎn)管理的功能時,他僅需引入?yún)^(qū)塊鏈交互中間件,并對應用側(cè)提供交易查詢、賬戶查詢、交易發(fā)起等接口,即可專心開發(fā)客戶端的具體功能。
當某個應用開發(fā)者想要完成分布式數(shù)據(jù)管理的功能時,他需要引入存儲管理中間件與區(qū)塊鏈交互中間件,并對應用側(cè)提供數(shù)據(jù)管理、數(shù)據(jù)摘要上鏈等功能,即可支持實現(xiàn)去中心化數(shù)據(jù)上鏈與存儲的功能。
上述的服務中間件在初期將會以播件、獨立項目的形式為開發(fā)者提供,后期將會以應用商城的形式存在。服務中間件可以大大加速區(qū)塊鏈應用的開發(fā),也是開發(fā)體系得以繁榮的根本所在。
3.區(qū)塊鏈應用
區(qū)塊鏈應用指的是某個基于區(qū)塊鏈開發(fā)的應用實例。它是直接面對用戶提供功能的服務。為方使人們使用區(qū)塊鏈提供支持。常見的區(qū)塊鏈應用包括區(qū)塊鏈瀏覽器、區(qū)塊鏈存證服務、區(qū)塊鏈資產(chǎn)管理工具等等。這些應用在區(qū)塊鏈誕生以來,為區(qū)塊鏈的使用和普及發(fā)揮了巨大的作用,一些應用甚至成為了區(qū)塊鏈項目的標配。
在與服務中間件的關系上,兩者之間并沒有嚴格的界限。當應用開發(fā)者認為時機成熟時,他使可以將自己的應用或其中的一部分包裝成服務中間件。供其他應用開發(fā)者使用;開發(fā)者亦可以對不同的服務中間件進行封裝,以實現(xiàn)特定的區(qū)塊鏈應用。
紙貴科技在對區(qū)塊鏈的探索過程中,亦積累了一系列的區(qū)塊鏈應用,并將持續(xù)以行業(yè)應用或服務中間件的形式服務用戶或回饋社區(qū)。