Site icon 8bit.media

判斷一個項目是否適合區塊鏈的八個標準

Spread the love

鏈社區快傳號

2018年區塊鏈正在風口上。媒體上大量湧現出的區塊鏈項目,表明了更多的人對區塊鏈概念的接受,並積極地投入到實際應用中。但是對於一個多年的區塊鏈研究者和從業者,我們更應該有清醒的認識,不斷地反問自己:現階段,區塊鏈到底能給社會治理和企業運營帶來什麼真實的價值?

我知道,很多區塊鏈項目還都在“概念驗證”階段,甚至有些項目跟區塊鏈根本沒有任何關係。從軟件技術架構的角度來說,這些項目更適合採用“傳統的關係型數據庫”技術,比如Oracle 和SQL Server這樣的企業級產品,或者MySQL 和PostgreSQL這樣的輕量級產品。直接明了地說就是:

“如何一個項目需求,如果用關係型數據庫技術就可以滿足,那麼你用區塊鏈就是愚蠢的!”

為什麼這麼說呢?因為像Oracle 或MySQL 這樣的數據系統,都有幾十年的發展進程,已經部署在全球數以百萬計的服務器上的數據庫系統,每天運行數以萬億計的查詢。這些系統都經過了嚴格測試和性能優化,每秒處理幾千次的交易都毫不費勁。同時,這些系統背後還有數以萬計的軟件工程師和系統工程師在做技術支撐。實際上,我們常用的軟件應用,在數據庫技術上都能找到成熟的解決方案。

而區塊鏈技術,即便是代表性的比特幣網絡,雖然經過8年的運行,仍然在穩定性和可靠性上面臨挑戰。更不要說其他區塊鏈開發平台了,基本都處在白皮書和Alpha版本階段。

這裡,我不是說區塊鏈的無用之處,而是因為整個區塊鏈的技術發展仍然處在初級探索的階段。如果我們採用區塊鏈的技術路線,那麼在IT規劃階段,我們就應該明白區塊鏈運行需要一系列的約束條件。如果不滿足這些條件,還是應該回到數據庫的路線來,也許這能讓你更準確地定義項目,或者節省更多的時間和成本。

下面我將介紹,使用區塊鏈需要的8個基本條件:

1、基於數據庫

如果你想開發區塊鏈項目,那麼首先它應該是個數據庫項目。從技術上,區塊鏈可以看做是一種“共享型數據庫”。

關係型數據庫是用多個表來存儲結構化的數據,還有現在比較時尚的NoSQL是利用文件系統來存儲數據。(在理論的層面上,NoSQL數據庫都是關係型數據庫的一個子集而已)

區塊鏈中的數據,以經常討論的銀行賬單為例,也可以表示為數據庫中的一張表,其中每一行對應一個銀行賬戶信息,每行數據又包含三個列,分別代表:1)賬戶的標示,如唯一性的銀行賬號;2)資產類型,如“人民幣”或“美元”等;3)所擁有的資產數量。

數據庫中對數據的操作,可以通過簡單的SQL命令執行,對於復雜的交易類型的操作,通常是通過“存儲過程”這個功能實現的。存儲過程就是多個SQL命令組合在一起,它們要么全部成功執行、要么全部失敗。例如,一個人向另一個人發起了支付交易,對應就是數據庫中減少某一行的資產數量,同時增加另一行的資產數量。

2、需要多個“寫操作者”

對於數據的操作類型,可以分為“讀操作”(對應數據庫中的查詢命令)和“寫操作”(對應數據庫中的增加、修改、刪除操作),擁有寫操作權限就表示對數據有了完全的控制能力。

區塊鏈可以認為是具有多個寫操作者的共享型數據庫。也就是說,可以有多個用戶發起交易命令,對區塊鏈中的數據進行修改。你知道這些寫操作者是誰嗎?

在區塊鏈的網絡中,這些寫操作者通常都是“區塊鏈節點”的運行者,他們每個人都擁有一份區塊鏈數據的備份,並且通過P2P的方式傳遞交易命令。

當然,也有很多用戶可以發起交易,但是他們並沒有運行節點,他們通過其他節點,間接地對區塊鏈數據進行修改。例如,一個由多個銀行共同維護的區塊鏈支付系統,但在移動設備上擁有數百萬終端用戶,他們只與自己的銀行系統通信。

3、存在信任缺失的情況

如果多個用戶同時需要對區塊鏈數據進行修改,那麼一定存在某種程度的不信任關係。區塊鏈就是一種支持多個相互不信任的寫操作者的數據庫技術。

你也許會認為,不信任關係只存在於分散的組織之間,比如在一個跨國的貿易市場中的多個銀行之間的交易等。實際上,不信任關係也存在於組織內部,比如不同副總裁管轄的部門之間。

在數據層面的“不信任”是指,每個用戶都不希望其他人對自己的數據就行修改,同時也不會相信其他人對你報告的數據情況(不是自己查詢到的數據是不可信的),因為每個人都有不同的利益訴求或者代表了不同的價值主張。

4、需要去中心化(或者去中介化、或脫媒)

到此,我們討論到區塊鏈可以應對多個不信任的主體對數據的操作問題。其實這個問題,我們還有一個眾所周知的解決方案,就是找一個大家都信賴的中介。也就是說,所有人都信任這個中介,但是每個人相互不需要信任。

這種解決方案在現實中大量應用,比如銀行賬單系統就是這樣。我們每個人對自己的銀行賬戶進行數據查詢或修改,其實並不是你直接進行數據庫操作的,而是委託了銀行後台系統的一個數據庫用戶來完成的。因為我們都信任銀行,銀行確保我們交易的有效性和賬戶的安全性。

區塊鏈可以擺脫對這種中介機構的依賴,也就是所有用戶可以直接發起交易,完成對數據的操作。所有這些交易由區塊鏈節點進行授權認證和有效性認證。

有個問題會經常困擾我們?找個可靠的中介有什麼不好?為什麼非要搞去中心化?一個很好的理由就是,基於區塊鏈的去中心化的結構,在降低成本、提高交易速度方面更具優勢,同時有自動對賬的特點,況且在很多系統中,選擇或確定一個可信的中介方也是一件頭疼的事情。

5、交易之間的交互

前面提到一個區塊鏈系統涉及的多個操作者、不需要信任、去中介化等,但是這不還不是部署區塊鏈系統真正的理由。如果你的需求中,需要處理多個交易之間的交互關係,那麼區塊鍊是個很好的選擇。

什麼是多個交易之間的交互?簡單說就是,不同操作者發起的交易之間存在互相依賴的關係。例如,A向B發起一個交易,B又向C發起一個交易。這種情況B的交易就依賴於A的交易,如果不驗證A交易的合法性,也就無法驗證B交易的合法性。

再進一步說,區塊鏈還有一個特性是,交易可以由多個用戶共同發起(三角債或多方債務)清算,任何一方都不需要承擔風險,這也是為什麼銀行間結算可以安全地在區塊鏈上運行的原因,且不需要一個中介結構的參與。

還有一個例子是在身份識別系統中,一個客戶的身份信息的不同方面可以被不同的主體進行獨立的驗證,比如公安部門驗證戶籍信息、銀行部門驗證金融信息、醫院驗證醫療信息等。雖然這些驗證都是相互獨立的,區塊鏈提供了一個機制讓這些信息可以統一起來。

6、制定交易規則的需要

這不是採用區塊鏈技術的一個條件,而是使用區塊鏈面臨的一個必然結果。當多個相互不信任的主體,發起不同的交易時,那麼區塊鏈中需要有某種內置的交易規則進行約束。

這種區塊鏈中的交易約束規則跟數據庫中的約束規則不同。數據庫的約束主要是檢查特定時間點的數據庫狀態;區塊鏈的交易約束規則是要驗證交易的合法性。每一個區塊鏈節點都利用這些規則,對每一個交易進行驗證,驗證結果是:那麼交易被拒絕,要么就傳遞給下一個節點,繼續進行驗證。

在區塊鏈的金融系統中,一個基本的交易規則要防止交易憑空創造資產。規則規定,每次交易之前和之後,資產的總量必須相同。

7、需要選擇交易仲裁者

前面幾項要求都是針對數據層面的,那麼在交易組織上,區塊鏈的工作角色是交易仲裁者,它是一種權威性的交易結果的日誌。如果你的項目中需要選擇交易仲裁,那麼區塊鍊是一種很好的解決方案。

為什麼需要這個日誌呢?

第一,當區塊鏈中增加新的節點時,它可以從頭下載所有的交易歷史記錄,不需要從其他不信任的節點下載信息。

第二,有些節點可能由於系統故障或網絡故障,錯過了某些交易。如果沒有這些日誌,就會導致一個節點的數據庫與其他節點的數據庫分離,從而破壞共享數據庫的目標。

第三,兩個交易可能同時發生,但是只有一個交易被接受。一個典型的例子就是“雙重消費”,一個區塊鏈中的資產被同時支付了兩個不同的主體,由於區塊鍊是通過P2P方式進行信息傳遞的,不同的節點可以對交易有不同的看法,因此需要把交易“confirm”到區塊中,確保不同節點達到統一的決策。

最後,在Ethereum風格的區塊鏈平台中,交易的順序起到了至關重要的作用,每一個交易都影響到後續的一個交易。這種情況下,沒有區塊鏈,交易根本無法進行。

區塊鏈,從字面上講就是多個區塊組成一個鏈,每個區塊中包含了若干個已經被confirm的交易。那麼誰來決定,哪個交易應該進入到哪個區塊中呢?這就需要區塊鍊網絡中某些節點承擔“仲裁者”的角色,在比特幣中就是“礦工”,他們可以創造新的區塊,並通過數字簽名的方式保證這些區塊的合法性。

仲裁者跟中介的一個本質區別是,仲裁者對數據操作的權限要小得多,他們不能虛假交易或者違反規則修改數據內容。在金融系統案例中,仲裁者不能花別人的錢,也不能改變資產的總數量。

在企業級的區塊鏈項目中,可以選擇或指定仲裁者,通常有三種方案:1)某個組織控制下的多個節點;2)不同組織成立一個核心小組來負責維護區塊鏈;3 )所有節點。

8、錨定現實資產

我對區塊鏈的認識,更趨向於“共享數據庫”,而不是大家經常提到的“共享賬單”。作為一種技術,區塊鏈的應用範圍遠遠超出對金融資產所有權的跟踪問題,只不過用區塊鏈做資產賬單管理,是最簡單、最自然的一個應用,這跟比特幣的發展有關。

用區塊鏈做金融資產管理,一個核心的問題是?誰來為區塊鏈中的交易數據做背書?也就是說,我在區塊鏈上有十個單位的資產,誰能給我兌換現實世界的十個單位資產?或者說,如果沒人給我兌換,我找誰去起訴或索賠?

當然在不同的項目案例中,答案是不同的。對於貨幣資產,我們可以想像託管銀行收取了傳統形式上的貨幣,然後把儲戶的賬戶信息發佈到區塊鏈上,那麼託管銀行就負責區塊鏈上資產的兌換。在貿易融資中,信用證和提單將分別由進口商的銀行和船運公司支持。我們還可以想像,未來某一天,公司可以直接在區塊鏈上發行債券,成為一種新的融資工具,當然公司要為區塊鏈上數據進行背書。

總結

就像我開始提到的那樣,如果一個項目不符合上述8個條件中的每一個,那就不應該選擇區塊鏈技術,你應該考慮:1)常規的文件存儲;2)中心化的關係型數據庫;3)主-從數據庫複製技術;4)基於用戶訂閱機制的多數據庫系統。

如果你的項目需求滿足前5個條件,你還要考慮如何設定應用中的交易規則,你需要對你選擇的仲裁者充滿信心。最後,讓你開發的區塊鏈系統需要錨定一種或多種金融產品時,你需要找到能為這些金融產品背書的機構。

如果你找到了一個真正的適合區塊鏈的需求案例,請與我們聯繫,我們共同探討。

Exit mobile version