C語言中文網 目錄
首頁 > 區塊鏈 閱讀:74

區塊鏈應用(去中心化應用)是什么樣的?

EOS 的技術白皮書給出了應用所需的六個條件(如下所示),而 EOS 的軟件設計的確是對應這些條件而設計的。本節我們將重點討論 EOS 的其中三個為應用而做的特別設計:用戶免費、賬戶體系、存儲。

區塊鏈應用的六個條件:
  1. 支持百萬級別的用戶,需要能夠處理數千萬日活躍用戶的區塊鏈技術。
  2. 使用免費,應用開發人員需要具備靈活性,能夠為用戶提供免費服務;用戶不必為了使用平臺或從平臺的服務中受益而付費。
  3. 輕松升級和故障修復,區塊鏈平臺必須對軟件和智能合約的升級提供支持。
  4. 延遲低,及時地反饋是良好用戶體驗的基礎。
  5. 串行性能,有些應用程序由于必須順序執行命令,無法用并行算法進行實現。區塊鏈需要提供強大的串行性能支持。
  6. 并行性能,大型應用程序需要在多個CPU和計算機之間分配工作負載。
《EOSIO技術白皮書》翻譯版:http://blog.eosdata.io/index.php/2018/04/28/eos-io-whitepaper-v2/;英文版:https://github.com/EOSIO/Do-cumentation/blob/master/TechnicalWhitePaper.md#accounts。

區塊鏈應用要去中心化到什么程度

類似于互聯網,讓區塊鏈變得有用的所有期待都寄托在應用上,通常人們也稱之為去中心化應用(DAPP)。在討論 EOS 為應用所做的特別設計之前,我們先討論區塊鏈應用或所謂去中心化應用的架構,這是區塊鏈落地應用的最前沿,眾人仍在探索。

對于應用的前景,在《區塊鏈革命》一書中,唐·塔普斯科特曾展望道:“我們在進入數字化革命的一個新紀元,人們可以進行分布式軟件的編程和分享。就如區塊鏈協議本身是分布式的那樣,一個分布式的應用程序或 DAPP(去中心化應用程序)會在很多計算機上運行,而不是在一個單一的服務器上運行。”

經過 20 多年的發展,我們都已經很熟悉信息互聯網的網站或移動應用是什么樣的,那么,和區塊鏈相關的去中心化應用究竟是什么樣的呢?

要理解區塊鏈應用或去中心化應用,我們還是要從熟悉的事物談起。

現在被認同的發展前景是,互聯網將從信息互聯網跨越到基于區塊鏈的價值互聯網。信息互聯網的應用是網站與移動 App。在展望應用時,很多人自然地認為,在區塊鏈上將出現原生的區塊鏈應用或去中心化應用。

這樣形成的結構是如圖 1 a) 所示:網站、移動 App 對應的是信息互聯網,而所謂的區塊鏈應用/去中心化應用對應著區塊鏈。早期應用的確呈現這樣的狀態,比如區塊瀏覽器、每個區塊鏈自己的錢包等。每一條區塊鏈都是分布式賬本去中心網絡,它們提供數據與功能。早期應用與這些區塊鏈進行交互。

但我們很快發現,當普通用戶要使用區塊鏈時,應用可能變成類似于圖 1 b) 的樣子:網站與移動 App 中有一個與區塊鏈進行數據和功能交互的“區塊鏈應用”,而普通用戶看到的其實還是網站與移動應用。我們甚至可以說,對于普通用戶來說,可能根本沒有什么區塊鏈應用或去中心化應用,只有應用。

區塊鏈應用
圖1:區塊鏈應用

如果單獨看一條區塊鏈的應用,情形可能如圖 2 所示。
  • 這條區塊鏈是分布式賬本與去中心網絡,它提供著一系列與價值相關的數據和功能。
  • 多個應用接入區塊鏈網絡。在這些應用中,有的可能是普通用戶可以使用的,是網站/移動 App 與區塊鏈應用的組合;有的可能是純粹的區塊鏈應用。

區塊鏈應用的可能性
圖2:區塊鏈應用的可能性

有的應用可能接入多個區塊鏈,比如現在常見的應用交易所、錢包就接入多個區塊鏈。

基于 Steem 區塊鏈的 Steemit 博客應用是少有的普通用戶可以使用的應用。在 Steem 區塊鏈上,上述這樣的應用架構就展現得較為明晰:
  • Steem 區塊鏈上存儲價值(STEEM 幣、SP、SBD 等三種通證),并按照內容貢獻進行價值的分配。
  • 基于這條區塊鏈建立有多個應用:普通用戶可用的 Steemit 博客平臺、視頻平臺 DTube 等;常備的應用如區塊鏈瀏覽器 steemd.com 網站。它的社區算是較為活躍的,還有其他的很多應用。

Steem 的主要開發者也是 EOS 的主要開發者丹尼爾·拉瑞莫(BM),EOS 是將 Steem 區塊鏈通用化,并做了很多改進。比如,對比 Steem 與 EOS 我們可以看到,EOS 不再采用把內容存放在區塊鏈上這個不合理的設計,但它繼續擴展了 Steem 中已經有的賬號與權限體系。

比特幣系統完成了用區塊鏈進行價值表示和價值轉移的概念驗證,而 Steem 區塊鏈和 Steemit 博客平臺這個早期項目可能完成了區塊鏈應用的概念驗證?,F在,EOS 將其之前的很多設計發揚光大。

在《去中心化應用》一書中,開發者西拉杰·拉瓦爾對去中心化應用的去中心化程度進行了一番討論。他認為,區塊鏈可能在四個過去集中化的方面完成去中心化:
  • 將數據去中心化(decentralized data)
  • 將財富去中心化(decentralized wealth)
  • 將身份去中心化(decentralized identity)
  • 將計算去中心化(decentralized computing)

我認為,區塊鏈的核心功能是去中心化的價值表示和價值轉移,它們分別對應的是以上分類中的財富與計算。當試圖構建應用時,我們應把重點放在這兩者上面。和其他主要的區塊鏈一樣,EOS 在這兩個方面做得很好。它還試圖大幅度改進區塊鏈本身的核心性能,即每秒事務處理量(TPS)。

或許同樣重要的是,與其他區塊鏈相比,EOS 為開發一個普通用戶可用的應用,提供了更多的功能與特性。接下來我們討論 EOS 為應用而做的三件事:用戶免費、賬戶與權限體系、存儲系統。

用戶免費

在討論應用所需的條件時,EOS 白皮書寫道:“用戶不必為了使用平臺或從平臺的服務中受益而付費。”

用戶免費是 EOS 與比特幣、以太坊相對而言的顯著差別。在比特幣、以太坊系統中,普通用戶如果進行轉賬交易等操作,需要支付相應的交易費。而 EOS 把承擔這個費用的壓力轉移給了應用的提供者。

用戶免費是和 EOS 的通證經濟設計緊密相關的。使用一個區塊鏈的應用通常需要三種資源,這三種資源是由維護這個去中心網絡的計算機提供的,對 EOS 來說,這三種資源是由區塊生產者(BP)提供的。這三種資源分別是:
  • 帶寬資源:帶寬和日志存儲(磁盤)(Bandwidth and Log Storage(Disk))。
  • 計算資源:計算和計算積壓(CPU)(Computation and Computational Backlog(CPU))。
  • 狀態資源:狀態存儲(RAM)(State Storage(RAM))。

這三種資源(帶寬資源、計算資源和狀態資源)對應的是一個計算機網絡的三種能力。對于熟悉計算機的人來說,帶寬資源和計算資源容易理解,而狀態資源是區塊鏈的專用術語。正如之前討論的,區塊鏈賬本中存儲的是狀態,比如交易賬本、賬戶余額等,按其名字縮寫為 RAM,它的性質大約相當于內存。

EOS 還特別舉例說明,什么應該存入狀態,什么不應該存入狀態。例如,一個區塊鏈應用程序的邏輯不需要讀取博客文章的內容和評論,因此它們不應該存儲在區塊鏈的狀態中。但是,博客文章或評論是否存在、投票數以及其他屬性,需要存在區塊鏈的狀態之中。
特別地,BM 之前設計與開發了內容專用的區塊鏈 Steem,在 Steem 中,博客文章和評論的文本是存儲在區塊鏈的區塊(區塊鏈賬本)中的。BM 在實踐中可能意識到,正確的做法應當是只在區塊鏈賬本中存儲與交易相關的信息。
簡單地說,區塊鏈是用于交易的,區塊鏈的狀態是交易賬本,那么,與交易相關的信息應該存入交易賬本,而與交易無關的信息不應存入交易賬本。

EOS 區塊鏈的這三種資源的消耗機制是這樣的:區塊生產者(BP)公布可用的帶寬(bandwidth)、計算(computation)和狀態(state)的容量。

EOSIO 系統允許每個賬戶消耗一定比例的可用資源,這個比例是根據賬戶將自己持有的通證存入“三天抵押合約”的數量決定的。

例如,假設有一個基于 EOS 的應用,如果一個賬戶持有總通證的 1%,那么這個賬戶可利用 1% 的狀態存儲容量。

因此,對于如何做到對用戶免費,EOS 的設計關鍵是如下兩點。

第一,用戶不用直接向區塊鏈付費,而由應用來處理。

在以太坊區塊鏈網絡中,我要將以太幣或其他基于 ERC20 標準的通證轉移給別人,我作為交易的發起人,需要自己設定一個交易費(gas),給區塊鏈網絡直接付費,從而讓以太坊網絡能處理這一交易。

EOS 的設計邏輯是基于這樣的假設:“沒有任何網站要求訪問者為維護服務器而支付小額費用。因此,去中心化應用程序不應該強迫它的客戶為使用區塊鏈而向區塊鏈支付直接費用。”

EOS 雖然以“接收方付費”作為一個討論部分的小標題,但它的思路其實是,由應用自己來決定采取什么樣的方式。通常為了應用能夠便于用戶使用,它的基本邏輯應當是,應用自行解決費用,最終用戶使用區塊鏈網絡是免費的。

第二,將交易成本與通證價值區分開。

在以太坊區塊鏈網絡中,我們支付交易費支付的是以太幣,隨著以太幣價格的漲跌,交易成本就隨著這個通證價格波動。而 EOS 的設計邏輯是:“將交易成本與通證價值區分開。”

EOS 區塊鏈網絡的做法是,一個應用擁有的帶寬、計算、狀態等資源,是與其持有的通證數量有關的,但由于不需要消耗,因此在一定程度上可視為與該通證的價值或價格無關。

如果我們作為應用開發者,并不持有足夠多的通證,則 EOS 區塊鏈網絡還提供一種租用機制,這個機制是“將資源能力授權出去”(delegating capacity):通證的持有人可能不需要立即消耗可用帶寬的全部或部分資源,他們可以選擇將未消耗的帶寬委托或租賃給他人。

但要注意的是這句話:“帶寬和計算可以授權給他人,但是對應用程序狀態的存儲需要開發者持有通證,直至狀態刪除為止。如果程序的狀態永不刪除,那么這部分通證就退出了流通。”
根據 EOSIO 文檔,這里的狀態可認為指的是一個應用所占用的區塊鏈網絡的 RAM 存儲空間。原文為:Storage of application state will require an application developer to hold tokens until that state is deleted.If state is never deleted,then the tokens are effectively removed from circulation.

對比以太坊和 EOS 我們可以看到,在以太坊中進行交易,個人用戶需要支付交易費,而在 EOS 中進行交易,則是應用提供者需要承擔成本,現在看來其中主要的成本是與 RAM 存儲空間相關的。

賬戶與權限體系

EOS 與比特幣、以太坊的一大不同點是,它允許用戶創建一個不超過 12 位長的用戶名,這個用戶名代表的是我們的賬戶。

以太坊的賬戶

比特幣區塊鏈根本就沒有賬戶的概念,比特幣只有地址;以太坊設計了賬戶,但遠沒有 EOS 這么完備的賬戶權限相關功能。為了便于理解,我們先看從比特幣到以太坊的“從地址到賬戶”,再看 EOS 的賬戶設計。

比特幣是沒有賬戶的,所有的比特幣交易都是地址之間的交換。我們所持有的比特幣是自己的各個地址中比特幣的總和,在比特幣系統中是沒有賬戶、余額這種東西的。

以太坊引入了賬戶的概念:以太坊賬戶。每個賬戶包括四個信息:一個隨機數、賬戶的余額、合約代碼(如果有的話)、存儲(通常為空)。

以太坊包括兩類賬戶:
  • 外部由私鑰控制的賬戶。
  • 合約控制的賬戶。

對比特幣來說,它只有由外部的私鑰控制的地址。在以太坊外部賬戶中沒有代碼,它可以創建和簽署一個交易,也就是發出消息,而一個合約賬戶在收到消息后可以執行相應的代碼和處理存儲。這里的“合約”代碼相當于存在于以太坊執行環境中的“自治代理”,它擁有自己的以太坊賬戶,它在收到交易信息后就相當于被捅了一下,然后自動執行一段代碼。

和比特幣一樣,以太坊的區塊中存儲的也是交易,它包括的字段主要有:接受者(接受的賬戶)、發送者的簽名、發送者發給接受者的以太幣金額等。

EOS 的賬戶

EOS 的賬戶系統則要復雜得多,它更像銀行的賬戶系統或者我們在互聯網應用(比如谷歌、微信等)中的賬戶系統。

下面來看看 EOS 賬戶系統的構成。

一個 EOS 賬戶系統可以發送動作(action)給另一個賬戶,而每個賬戶都可以設定一個處理器(handler)來自動處理發送給自己的動作。動作和處理器的結合,就是 EOS 的智能合約(見圖3)。

每個賬戶都有自己的內部數據庫(private database),這個賬戶內部的內部數據庫只有自己的動作處理器可以訪問。

EOS賬戶的交互:動作與處理器
圖3:EOS賬戶的交互:動作與處理器

EOS 系統提供了一個標準的基于角色的權限系統(role based permission management),這使得所有基于 EOS 開發的應用都可以采用這個賬戶體系與權限系統,而不必自己重新造輪子。

在 BM 之前開發的 Steem 區塊鏈中,基于角色的權限系統就被引入區塊鏈中,他在 Steem 中硬編碼了三種用戶權限:owner、active、posting。

EOS 白皮書在討論 Steem 時說:“posting 權限只能執行諸如投票和發布等社交行為,而 active 權限除了更改所有者之外,還可以做其他任何事情。owner 權限用作冷存儲,它能夠做所有事情。”

EOS 對此進一步改進,對這個基于角色的權限系統進行了通用化,“允許每個賬戶持有者定義自己的權限層次結構以及動作的分組”。這樣做給了應用開發者更多的自由度。
在 EOS 開發者文檔中,有關于賬戶與權限的開發信息,見 https://developers.eos.io/eosio-nodeos/docs/accounts-and-permissions。
在 EOS 的賬戶權限系統中有兩個缺省的權限組:最高級別的缺省權限組是 owner,第二個缺省權限組是 active,它可以做出除更改所有者之外的所有事。其他的權限組都可以由 active 派生出來,這些權限組用戶可以自行定義。比如,我開發一個博客應用,我就可以自己定義一個 publish 權限組出來(見圖4)。

EOS白皮書中的一個權限系統示例
圖4:EOS白皮書中的一個權限系統示例

存儲系統

我們都已經知道,只有與交易相關的信息應該存儲在區塊鏈的區塊中,那么,對于去中心化的應用,其他的數據應該存儲在何處呢?
EOS 存儲的白皮書見:https://github.com/EOSIO/Docum-entation/blob/master/EOS.IO%20Storage.pdf。其中,它強調區塊鏈的區塊中不應存儲文件。
絕大多數基礎公鏈都沒有解決這個周邊問題,而聚焦于區塊鏈的核心任務——交易。但為了讓 EOS 可以更好地用于開發應用,EOS 在 2017 年 9 月就發布了 EOS 存儲的獨立白皮書,解釋了它在存儲方面的開發設想。

在討論了星際文件系統(IPFS)、分布式存儲項目(Filecoin、Maidsafe、Siacoin、Storj),以及現有的中心化存儲(如DropBox、GoogleDriver、蘋果的iCloud)等后,它提出了用自己的通證與 IPFS 結合,形成一個用于 EOS 應用開發的存儲。

有了基于 IPFS 的文件存儲系統之后,在 2017 年 12 月 12 日,EOS 團隊發表文章給出了它建議的 EOS 應用開發架構(見圖5)。從圖中可以看到,在它建議的應用開發框架中,EOS 的應用是被建議存儲在基于 IPFS 的 EOS 存儲中的(即圖中的 IPFS File Storage)。到目前為止,EOS 在存儲方面還僅僅提供了一個設想,離真正落實還有一定的距離。

總的來說,區塊鏈將價值表示和價值轉移這兩個與價值有關的核心功能去中心化了,區塊鏈應用可通過接口與區塊鏈交互數據(通證)和計算(通證交易)。EOS 作為當下最熱門的新區塊鏈系統,它的特色在于,在這兩個核心功能之外,它為應用的開發提供了各種便利,可能促進更多應用的出現。
EOS應用開發框架(2017年12月)
圖5:EOS應用開發框架(2017年12月)

區塊鏈的第七、第八個定義如圖6所示。
區塊鏈的定義之七、之八:關于區塊鏈的應用
圖6:區塊鏈的定義之七、之八

精美而實用的網站,提供C語言、C++、STL、Linux、Shell、Java、Go語言等教程,以及socket、GCC、vi、Swing、設計模式、JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo