寫在前面#
筆者從 2018 年初進入區塊鏈行業,參與過公鏈,交易所現貨 / 槓桿 / 期貨交易業務,鏈上 DeFi 協議和 DApp 等開發,也從事過不同生態的開發者社區建設,開發者的課程籌備,在這個過程中接觸過很多開發者,他們大多數具備 Web2 的技能經驗,但對 Web3 的軟體開發缺乏足夠的認識,反觀自己在 Web3 領域的發展路徑,大部分是隨機漫步和無法獲得正反饋的摸索,從一個互聯網工程師,轉變為一個能夠獨立構建 DApp 的開發者,這個過程可謂漫長而曲折,當然我也清楚,這是區塊鏈技術逐漸完善的過程,試想在 2018 年就能有一個相對清晰的知識結構去學習如何構建 DApp 應用也是不太現實的.
雖然區塊鏈技術在近年來飛速發展,對開發者來說,因為信息的分散和市場噪音影響,學習門檻並沒有降低,尤其這兩年筆者將更多的精力放在 DApp 開發和項目投研後,這種感覺更加明顯,所以就有了編寫此系列文章的想法.
無論是從互聯網想要轉型區塊鏈還是仍在區塊鏈行業探索的開發者,希望這些文章能夠幫助到你.
說明#
本系列文章希望能夠以結構化的方式幫助開發者利用現有的軟體開發技術棧構建去中心化應用 (DApp), 文章面向的讀者需要具備基本的 Web 開發技能或熟悉任何一門編程語言。如果你沒有軟體開發的背景,建議從軟體開發的基礎技能開始或掌握一門編程語言之後再開始閱讀本系列文章.
本文假設讀者具備以下能力之一
本篇文章主要是幫助大家理解 DApp 發展階段和其與 Web2 應用的相同與不同點:
DApp 發展的幾個階段#
在此之前我們需要知道什麼是 DApp —— 運行在去中心化網絡中的應用,以智能合約加客戶端的形式提供服務.
從比特幣誕生以來,應用和協議的互相促進演化催生了不同的 DApp 形態,這個過程也出現了不同類型的 DApp 開發浪潮,筆者從 2018 年進入到區塊鏈行業以來,一直在關注應用層和協議層,有幸見證了區塊鏈行業的蓬勃發展
總結下來 DApp 的發展經歷過幾個階段:
- 比特幣分叉改進浪潮 (2013~2018) —— 以萊特幣和比特現金為首的一眾比特幣分叉,帶來了區塊鏈應用的第一次繁榮,這些應用都停留在更好的去中心化貨幣和更優的區塊鏈參數上,鮮有技術和應用層的創新出現。市場關注的點更多的聚焦在挖礦群體的利益分配,挖礦硬體的改進和技術主張上,這種敘事直到 2018 年 比特現金分叉為 BCH 與 BSV 為後淡出人們視野。
- 以太坊智能合約標準與中心化交易所的崛起 (2017~2019) —— 以太坊的出現讓智能合約技術得到了相對比特幣而言的大規模應用,ERC-20 標準的建立確立了數字貨幣交易所作為頭部應用的主要形態,也明確了區塊鏈應用早期的盈利模式。將投資 / 投機的需求推向高峰.
- 去中心化金融(DeFi) 萌芽與去中心化自治組織(decentralized autonomous organization - DAO) 工具 (2018~ 至今) —— 區塊鏈並未止步於此,鏈上 AMM 機制由 Bancor 和 Uniswap 發揚光大,同期也有不少 DAO 組織先驅嘗試讓 DAO 組織通過低代碼的配置方式快速啟動一個鏈上 DAO 組織,Aragon 和 DAOHaus 為首的 DAO 平台催生出更多的 DAO 組織形態與加速了區塊鏈治理思潮普及.
- 多鏈 / 跨鏈與 Layer2和新一代智能合約平台出現 ( Flow, Near, Solana), 為跨鏈應用打下了基礎,同時樂觀 Rollup 擴容也轉向應用 (Arbitrum, Optimism), 打開了人們對 Web3 增長空間的想像。多鏈和跨鏈催生出了大量的服務與創新,比如跨鏈橋,跨鏈的流動性聚合等等。新一代智能合約平台也給了開發者更多的選擇.
- 鏈上數據分析聚合 (2019~ 至今) —— 隨著更多的鏈上用戶湧入,鏈上數據也出現爆發式的增長,數據分析與聚合場景出現,加速了 The Graph 和 ChainLink 等數據服務中間件的採用率,他們極大的提高了 DeFi 和鏈上應用的體驗,進一步的促進了 DApp 的發展。同期催生出更多的 ToD & ToB 的開發者服務平台,如 Infura Alchemy等,進一步提升了 DApp 的研發體驗,與此同時用戶端的數據分析產品如 Dune 和 Nansen 獲得了強勁的增長。作為去中心化存儲服務的 IPFS 與 Arweave 等也被廣泛採用.
- NFT 與 GameFi (2021~ 至今) —— 2021 年是 NFT 爆發的一年,隨著之前提到的基建與應用的發展,更加豐富的資產類別,更低門檻標準化的 NFT 研發流程,催生了 PFP 類型的資產和加密藝術的應用形態,Axie Infinity 引爆了 X to Earn 的敘事,著都建立在 ERC-721 和 ERC-1155 的基礎上,NFT 的繁榮成就了 OpenSea 等鏈上 NFT 交易平台.
- 去中心化身份 (Decentralized identifiers - DID) 與 Web3 社交 (2021~ 至今) —— 隨著用戶數據和跨鏈的場景的增加,用戶在鏈上的數據逐漸增加且分散在不同的鏈上,基於用戶的鏈上數據聚合與鏈上身份也越來越重要,催生了 BrightId, Proof of human 等應用協議,伴隨著去中心化域名 (ENS)[https://ens.domains/] 採用率的提升,為 DID 和 Web3 社交提供了助力,以 Lens CyberConnect 為首的應用讓 Web3 social 賽道獲得關注.
- Web2.5 與 元宇宙 Metaverse (2022~ 至今) —— 隨著 2021 和 2022 年 Web3 的影響力出圈,傳統的互聯網巨頭也在尋求新一輪的增長,以 Facebook 為首的互聯網公司開始擁抱 Metaverse, 加上擁有巨大品牌影響力的 Nike Adidas Starbucks 等開始試水將區塊鏈融入現有的商業模式中,我們稱之為 Web2.5 的應用類型。此外還有更多團隊嘗試將增強現實 - AR/虛擬現實 - VR/人工智能 - AI 等技術與區塊鏈結合,探索區塊鏈應用的新範式.
可以看到,區塊鏈應用的發展如同一顆進化樹,隨著時間的推移從比特幣開始開枝散葉,在開源社區的推動下枝繁葉茂,這也讓我們看到 DApp 開發的趨勢,技術協議的演進和應用場景需求是相伴相生的關係。
DApp 應用開發趨勢#
在區塊鏈發展的初期,DApp 相關的技術棧和概念都沒有得到普及,一切都處在刀耕火種的狀態,Web3 應用開發者面臨著很多的問題,比如陡峭的學習曲線,基礎設施不全,合約標準不統一,業務模式不清晰等等,很多在 Web2 看似非常簡單合理的需求,在區塊鏈的技術棧中卻很難實現,拋開技術差異不談,大部分時間開發者需要先完善軟體開發的基礎設施,才能夠完成一些應用場景的開發。這就要求開發者既具備一定的架構能力,也需要對區塊鏈底層的深入認識.
在開源社區的努力下,借鑒互聯網的發展路徑和 Web2 成熟的軟體流程,區塊鏈應用的研發趨勢也變得明朗,經過社區長時間迭代和演進,新的應用場景出現,催生新的協議和標準,新的協議和標準也反過來推動應用的創新,伴隨著新的基礎設施和開發工具的豐富,應用研發的門檻在逐步降低,新一代的智能合約平台和協議中間件湧現,這些產品以提高開發者體驗為首要目標,基於現有的協議和產品推進 DApp 的繁榮.
對開發者來說,區塊鏈應用開發的趨勢:
- 技術門檻逐漸降低
- 業務門檻逐漸提高
從技術角度,開源的技術教程和文檔豐富,只要稍花精力就能夠入手 DApp 開發,現存的工具,中間件和服務已經非常易用穩定,各個生態也有完善的開發者引進流程。開發人員構建一個去中心化應用的難度在持續降低.
從業務角度,區塊鏈目前仍處在非常早期,相對互聯網行業來說,技術遠未成熟,大多數創業者們仍在探索中前進,又因為其周期性極強,很難建立類似於互聯網行業的成熟業務模式,更別提穩定的獲客渠道和可控的獲客成本。許多業務並不能帶來長期的正向外部收入,基於 DApp 的創業風險極高.
當然,高風險也意味著高回報,長期來看,區塊鏈仍然有很大的發展空間.
那麼,什麼樣的 DApp 將成為未來的殺手級應用?筆者也在持續的思考和總結,同時也會在後面的文章中幫助大家分析,現階段我們更應該關注開發一個 DApp 需要做什麼樣的知識與技能儲備.
DApp 的特點#
所以想要從事或上手 DApp 開發的工程師,需要明確的認識到 Web3 的業務和 Web2 的相同或不同之處。一方面幫助我們順利的完成技能遷移,降低認知轉換的難度,另一方面幫助我們明確哪些難點避免可能會出現的問題.
開放透明
DApp 的主要邏輯需要通過智能合約完成,核心的業務數據也是存儲在智能合約中,並且這些合約和業務數據都是公開透明可以被第三方檢索,這就讓以平台和數據壟斷為主要競爭力的業務失去了優勢,卻為應用可組合性提供了基礎.
資產導向
DApp 的核心是資產,一切的業務和交互邏輯都將圍繞著資產為中心,數據是伴隨著資產的變化而產生的。同時資產也可以做為 DApp 與用戶交互的媒介,扮演著例如權益,債務,憑證等等角色.
可組合性
有了開源的代碼和公開的數據,DApp 就具備了被其他開發者調用和整合的能力,基於一些標準的鏈上接口,合約之間也可以互相調用,那麼 DApp 就具備了如同樂高積木的組合能力,同樣 DApp 中的標準化資產也可以跨應用來使用.
交易驅動
這個特性是由區塊鏈的技術特點決定的,基於賬戶模型的智能合約區塊鏈,所有的鏈上狀態的變更都需要有一個由私鑰簽名的交易發起改變,智能合約無法發起自動的執行或調用,區塊鏈為確保數據的一致性和有效性,也需要在密碼學層面去保證每筆交易的合法性,從而達到分佈式數據一致.
事件驅動
雖然對 DApp 來說不得不採用交易驅動的方式去思考用戶使用應用的流程,但我們仍然需要豐富的應用數據來提高用戶的查詢體驗,因為區塊鏈只保留最新的全局狀態,過程數據分散在不同的區塊中,甚至不會被保存在鏈上,區塊鏈並不支持複雜的關係型查詢,需要借助鏈下的數據索引服務,為了確保數據查詢的正確性,我們仍需要以交易為單位來索引過程數據,這裡就需要在 DApp 開發的過程中定義交易中產生的事件類型和相關的事件參數,借助鏈下的緩存服務,完成過程數據的緩存,供客戶端查詢.
與傳統 Web 應用的相同之處#
這裡和 Web2 的軟體研發有很多相同之處:
客戶端與服務端架構
單純從應用的模式來看,除了核心的後端服務由智能合約代替,數據存儲在區塊鏈上,其他都可以借助傳統互聯網技術棧完成,
比如客戶端的技術棧,緩存服務的索引查詢,CND 加速,移動客戶端等等都可以借用成熟的互聯網解決方案.
客戶端與區塊鏈同樣是基於 TCP/IP 協議通信,有些區塊鏈或節點服務商也支持 REST 類型的查詢接口和協議,方便開發者完成客戶端與服務端的數據交互.
應用交互流程
一款優秀的 DApp 同樣需要優秀的使用體驗,我們也看到很多 DApp 已經能夠將區塊鏈的複雜度封裝起來,為用戶提供美觀的產品界面,便捷的區塊鏈交互體驗,借助數據索引服務,就能達到媲美互聯網產品的交互體驗。而這些也需要有專業的產品設計和交互設計的努力,提高產品的易用性,消除用戶與 Web3 之間的鴻溝.
軟體開發流程
同理,既然是軟體開發軟體開發和流程管理的最佳實踐依然適用,市場評估,需求評審,技術架構設計,用例設計,軟體迭代方法,單元測試等等流程也是必不可少,不論是大型應用還是小型應用,都需要經歷這些關鍵流程,才能夠更好的完成 DApp 從零到一的過程.
與傳統的 Web 應用的不同#
那麼 DApp 和傳統 Web2 的應用區別具體在哪裡呢?我們先來看 Web3 DApp 的更加細節的架構圖:
這裡面的內容我們在準備階段不再贅述,會在後面的文章中展開討論.
如果你熟悉 Web2 的研發流程並具備一些研發經驗,那麼你已經算是半個 DApp 開發者,為了更好的開發出 DApp 我們仍需要有些思維上的轉換
- 從服務授權到簽名校驗
- 從數據為中心到資產為中心
- 從封閉走向可組合性
- 從效率至上到安全至上
從服務授權到簽名校驗
互聯網產品常用的 HTTP 協議是無狀態的,每個請求都是獨立存在,通過 cookie 和 session 或 http 頭的額外信息來完成用戶身份的識別和鑑權.
而這裡的鑑權方式以中心化為主,且會根據每個服務自身來決定,並不存在完全統一的標準,但在 DApp 中,鑑權就變成了簽名校驗,通過數字簽名來完成用戶權限認證,一切基於加密算法,提高了安全性的同時,也增加了適用性.
從以數據為中心到資產為中心
從互聯網平台和應用的角度來講,數據的重要性不言而喻,針對用戶數據壟斷和競爭也從未停止,平台中的數據會成為互聯網廣告變現邏輯的核心生產資料,用戶也並不「擁有」自己的數據. DApp 中所有權至上,數據和資產的邊界變得模糊,資產作為應用核心的地位凸顯,用戶的權益數據和業務數據往往也會以資產的形式體現在應用中,很多 DApp 服務都將用戶資產作為主要的資源,並基於資產開展業務和服務.
從封閉走向可組合性
傳統互聯網的護城河是依賴封閉系統與海量數據,但 DApp 卻有著相反的方向基於鏈上公開數據和標準資產,DApp 就具備了可組合的基礎,應用開發者可以整合其他應用或協議的資產作為業務基礎,也可以提供便捷的 SDK 讓第三方整合自身應用的資產。以標準化的方式發行資產,讓應用也具備了被組合的可能.
從效率至上到安全至上
中心化的系統因為無需考慮分佈式共識問題,其數據可以隨意的進行回滾和業務邏輯更新,基於智能合約的應用即不能回滾數據,也無法對合約做到大規模的業務更新,這一切都是以資產安全的角度來考量,去中心化的同時犧牲了效率,作為 DApp 開發者,在設計之初就要考慮智能合約的擴展性和兼容性,同時做好業務的解耦設計,將不經常更新的和可能會更新的邏輯進行合約的拆分。因為業務和用戶資產息息相關,同樣也需要關注智能合約的權限和可能會出現的安全漏洞。縱觀區塊鏈應用的發展歷程,是安全漏洞和用戶損失的整個歷程,作為應用開發者,我們要時刻保持警醒,吸取前人的經驗教訓,在處理資產邏輯上要謹慎小心,儘可能的做好單元測試和代碼審計,將安全風險儘可能的降至最低.
總結#
作為本系列的第一篇文章,以概覽的形式介紹了區塊鏈 DApp 的發展和特點,幫助我們梳理 DApp 與互聯網應用的一些相似與不同,幫助開發者在思維上進行 DApp 構建的儲備,不論你是產品經理還是開發者,基於這些概念和理解,讓應用設計和開發事半功倍.
之後的文章我們會以具體的實際項目案例來講解,一個 DApp 從構思設計到研發上線的過程,讓我們更加直觀的理解一個 DApp 是如何從零到一構建而成的.