定義web3 技術棧

翻譯小組 2022-01-07 14:35:06 阅读数:91

web3 web

想在web3上進行構建應用嗎?Nader Dabit 在一份介紹性指南中定義了web3技術棧的構建基礎模塊,一起來看看。

我在2021年4月過渡到web3,此前我做了大約10年的傳統全棧開發者。在潜心研究所有這些新技術和想法時,我想知道的第一件事是 "什麼是web3技術棧?"。

編者注:本文中的我 , 是Edge & Node開發者關系工程師Nader Dabit。

當創建一個傳統的網絡或移動應用程序時,我經常依賴於少數幾個構建模塊來完成工作:

  1. API/應用程序服務器(REST或GraphQL)
  2. 認證層
  3. 數據庫
  4. 客戶端框架、平臺和庫
  5. 文件存儲

使用這些核心組件,我可以建立我想建立的大多數類型的應用程序,或者至少可以達到大部分的目的。那麼,在web3中是什麼樣子的呢?

事實證明,這個問題的答案並不那麼簡單,因為。

  1. 開發範式在很多方面都完全不同
  2. web3的工具、技術和生態系統都沒有web2那麼成熟。

對我來說,要理解如何啟動和運行web3應用程序並建立起來也比較困難,因為我是以與web2世界相同的方式來處理問題的。

在過去8個月左右的時間裏,經過工作、研究、實驗和建設,我想分享我所學到的東西。

什麼是web3?

在我們定義web3棧之前,讓我們先嘗試定義web3。有無數的定義,這取决於你問誰,但對我來說,我發現這個定義很准確:Web3是實現完全去中心化應用的協議棧

有了這個去中心化的技術棧,我們就可以開始建立去中心化的應用,這些應用有其自身的影響和特點。

web3實現的一些特點是:

  • 去中心化的網絡基礎設施
  • 擁有(數據、內容和平臺)的所有權
  • 原生數字支付
  • 自主的身份
  • 分布式的、無信任的、强大的基礎設施
  • 開放、公共、可組合的後端

雖然一些建立在去中心化技術堆棧上的應用程序將取代它們的前身,但區塊鏈所帶來的新基元也使新的應用程序範式成為可能。

原生的數字支付和公共後端基礎設施--如機器學習、移動設備、虛擬現實和其他技術基元、平臺和構建模塊--使全新類型的應用程序得以建立,有些是尚未想象到的。

這是否意味著一切都將被web3取代?不一定。雖然我認為對於某些類型的應用來說,建立在分散的技術堆棧上是一個更好的選擇--就像幾乎所有的技術選擇一樣,這取决於你在建立什麼。

現在讓我們開始深入研究web3堆棧,他們分類為:

  • 區塊鏈
  • 區塊鏈開發環境
  • 文件存儲
  • P2P數據庫
  • API(索引和查詢)
  • 身份識別
  • 客戶端(框架和庫)
  • 其他協議

區塊鏈

有無數的區塊鏈,你可以選擇在其上建立。沒有一個是 "最好的",相反,你應該考慮它們之間的各種權衡。

在學習新東西時,有一件事對我來說常常很重要,那就是將帕累托原則應用於我正在學習的東西。也就是說,什麼是最有效的方式來獲得同樣時間和精力的最大收益。遵循這個想法,我可以在最短的時間內獲得最大的牽引和動力,同時學習新事物。

在區塊鏈領域,學習Solidity和EVM(以太坊虛擬機)可能是作為區塊鏈開發者起步時的最佳選擇。使用這種技能(和技術棧),你不僅可以為以太坊,而且可以在其他以太坊第二層、側鏈,甚至其他區塊鏈(如Avalanche、Fantom和Celo)上構建。

另外,Rust在區塊鏈領域開始變得越來越流行,Solana、NEAR、Polkadot等都有一流的Rust支持。你學習這兩種語言可能都不會出錯,但對於初學者來說,如果今天有人問我,我會說Solidity仍將是更好的選擇。

除了這些建議,這裏有一個不完整的區塊鏈樣本,它們是在技術、實用性、社區、發展勢頭和未來的可行性方面的一個組合:

  • 以太坊 -- 原創智能合約平臺
  • ZK rollups: ZKSync, Starknet, Hermez - 高吞吐量的以太坊第2層,但不兼容EVM
  • Optimistic rollups: Arbitrum & Optimism - 以太坊第2層,與EVM兼容(了解更多關於optimistic 和ZK Rollups的區別這裏)
  • Polygon - 以太坊側鏈
  • Solana - 吞吐量高,交易成本低,區塊時間快,但比EVM更難學習(Rust)
  • NEAR - 第一層區塊鏈,可以用Rust或Assemblyscript編寫智能合約
  • Cosmos - 一個互操作的區塊鏈的生態系統
  • Polkadot - 基於區塊鏈的計算平臺,使建立在其上的區塊鏈能够在它們之間執行交易,創建一個互連的區塊鏈互聯網。
  • Fantom - EVM兼容的第1層
  • Avalanche - EVM兼容的第1層
  • Celo - EVM兼容的第1層,旨在使任何擁有智能手機的人都能輕松發送、接收和存儲加密貨幣
  • Tezos - 非EVM兼容的第1層,很多NFT項目正在使用它

區塊鏈開發環境

對於EVM的開發,有幾個好的開發環境可以使用:

  • Hardhat (JavaScript)是一個較新的選擇,但它正獲得越來越多的青睞。他們的文檔很好,工具和開發人員的體驗也很好,我個人一直在用它來構建dapp。
  • Truffle (JavaScript) 是一套用於在EVM上構建和開發應用程序的工具。它很成熟,經過測試,並且有很好的文檔。它已經存在了一段時間,許多開發者都在使用它。
  • Foundry是Paradigm公司的一個新的Solidity開發環境,顯示出很大的前景。它的主要特點是能够在Solidity中編寫測試,支持模糊測試,以及速度快(它是用Rust編寫的)。在這裏我寫了一份關於它的單獨介紹。
  • Brownie是一個基於Python的智能合約開發和測試框架,用於Solidity/EVM開發。

對於Solana的開發,Anchor正迅速成為新開發者的入口。它提供了一個CLI,用於構建和測試Solana程序的脚手架,以及你可以用來構建前端的客戶端庫。它還包括一個DSL,可以抽象出開發人員在開始使用Solana和Rust開發時經常遇到的許多複雜問題。

文件存儲

我們在web3中把圖片、視頻和其他文件存儲在哪裏?在區塊鏈上存儲這麼大的文件通常是非常昂貴的,所以我們可能不想把它們存儲在那裏。

但是,我們可以有幾個文件存儲協議可以選擇:

  • IPFS : 點對點文件系統協議

    • 優點:它很可靠,有很好的文檔,有一個龐大的生態系統
  • 缺點:如果數據沒有被釘住(pin),就會丟失。
  • Arweave - 允許你永久地存儲數據,只需支付一筆交易費。我是Arweave的粉絲,寫了一篇關於它的博文這裏
  • Filecoin - 來自Protocol Labs,也就是建立IPFS的團隊,它是一個協議,旨在提供一個持久的數據存儲系統。有一些方法供開發者在Filecoin上構建,包括web3.storage,這是相當不錯的。
  • Skynet - 我還沒有在生產中使用它,但已經試過了,它似乎工作得很好。API這裏看起來很棒。我有一些問題,比如數據能保存多長時間,以及Skynet與其他協議的互操作性。

P2P數據庫

除了文件存儲和鏈上存儲之外,你可能還需要在鏈外存儲數據。你可能會使用這些類型的解决方案,類似於你在傳統技術堆棧中使用數據庫的方式,但相反,它們是在分布的網絡上的N個節點上複制的,因此更可靠(至少在理論上)。

幾個選擇是:

  • Ceramic Network - 一個去中心化的開源平臺,用於創建、托管和分享數據。Ceramic也有一個很好的身份協議,我將在後面談及。可能是我目前最喜歡的鏈外存儲解决方案。這裏有一個相當不錯的演示。
  • Textile ThreadDB - 一個建立在IPFS和Libp2p的多方數據庫。如果我理解正確的話,它目前可能正在經曆一個大的API變化。我試過了,它顯示了一些前景,但文檔和DX需要一些改進。
  • GunDB - 一個去中心化的、點對點的數據庫。Gun已經存在了相當長的時間,一些相當有趣的應用已經用它建立。

就成熟度而言,我的看法是,鏈外存儲解决方案的生態系統還沒有達到建立一些開發者可能想要的更高級用例所需要的程度。這裏的一些挑戰是實時數據、沖突檢測和沖突解决、寫入授權、文檔和一般開發者經驗。

將鏈外數據解决方案與區塊鏈協議相結合,是我們在擁有能够支持任何類型應用的完全去中心化協議棧之前需要跨越的最後一個大障礙之一。

API(索引與查詢)

我們與區塊鏈互動和在區塊鏈之上構建的方式與傳統技術棧中的數據庫有很多不同。對於區塊鏈,數據不是以一種可以有效或容易地直接從其他應用程序或前端消費的格式存儲的。

區塊鏈是為寫操作而優化的。你經常聽到以每秒交易量、區塊時間和交易成本為中心的創新。區塊鏈數據在一段時間內以區塊形式寫入,使得除了基本的讀取操作外,其他的都不可能。

在大多數應用中,你需要像關系型數據、排序、過濾、全文搜索、分頁和許多其他類型的查詢功能。為了做到這一點,需要對數據進行索引和組織,以便有效地進行檢索。

傳統上,這就是數據庫在集中式技術棧中所做的工作,但在web3棧中缺少索引層。

The Graph是一個用於索引和查詢區塊鏈數據的協議,使這一過程變得更加容易,並為此提供了一個去中心化的解决方案。任何人都可以建立和發布開放的GraphQL APIs,稱為子圖,使區塊鏈數據易於查詢。

要了解更多關於The Graph的信息,請查看文檔這裏或我的教程這裏

身份認證

在web3中,身份認證是一個完全不同的範式。在web2中,認證幾乎總是基於用戶的個人信息。這些信息通常是通過錶單或OAuth提供者收集的,要求用戶交出這些信息以換取對應用程序的訪問。

在web3中,身份識別完全圍繞著錢包和 公鑰密碼學 的概念。

雖然 "錢包 "這個名字有它的作用,但我發現剛接觸web3的人覺得這個術語與認證和身份有關,令人困惑。我希望在未來我們能找出一些其他的方式來錶達錢包是什麼,因為它結合了金融以及身份和信譽的各個方面。

作為一個開發者,你將需要了解如何以各種方式訪問用戶的錢包和地址並與之互動。

在一個非常基本的層面上(也是一個非常常見的要求),你可能想請求訪問用戶的錢包。要做到這一點,你通常能够在網絡瀏覽器中訪問用戶的錢包,或者使用類似WalletConnectSolana的錢包適配器的東西。

例如,如果他們有一個可用的Ethereum錢包,你將能够訪問window.ethereum。對於Solana(window.solana)、Arweave(window.arweaveWallet)和其他少數幾個也是如此。WalletConnect很適合移動網絡和React Native,因為它允許用戶直接從設備上使用他們的移動錢包進行授權。

如果你想自己處理認證,你可以讓用戶簽署交易,然後在某處解碼以認證用戶,但這通常需要一個服務器。這裏是一個使用EVM錢包的例子,這裏是一個使用Solana / Phantom的例子,如何做到這一點。

那麼以去中心化的方式管理用戶檔案呢?Ceramic Network為管理去中心化的身份提供了最强大的協議和工具套件。他們最近發布了一篇博文,概述了他們最近的一些更新,並給出了一些關於所有工具如何協同工作的指南。我會從那裏開始,然後探索他們的文檔以獲得對如何開始構建的理解,並考慮查看我的例子項目這裏,該項目使用Ceramic self.id

如果你想獲取用戶的ENS文本記錄,ensjs庫為獲取用戶數據提供了一個不錯的API。

const ens = new ENS({ provider, ensAddress: getEnsAddress('1') })const content = await ens.name('sha.eth').getText('avatar')

SpruceID也是一個看起來很有希望的東西,但我還沒有試過。

Ceramic和Spruce都實現了W3C DID的規範,這本身也是我認為是web3的一個構件,任何DID的中心化實現都違背了規範所要實現的理念。

客戶端

就JavaScript框架而言,你真的可以用任何你想要的東西來構建,因為客戶端的區塊鏈SDK大多是框架無關的。當前的情况,絕大多數的項目和例子都是用React構建的。還有一些庫,如Solana Wallet Adapter,為React提供額外的工具,所以我說,學習或熟悉React可能是一個明智之舉。

對於以太坊的客戶端SDK,有web3.jsethers.js。對我來說,Ethers更平易近人,有更好的文檔,盡管web3.js存在的時間更長。

在Solana中,你可能會使用@solana/web3.js 和/或Anchor。我發現Anchor客戶端庫是我構建Solana程序的首選,因為我反正也在使用Anchor框架,而且我發現它比@solana/web3.js更容易理解。

其他協議

Radicle是一個建立在Git上的去中心化的代碼協作協議。它可以被認為是GitHub的一個去中心化版本。

Livepeer 是一個去中心化的視頻流媒體網絡。它是成熟的,並被廣泛使用,網絡上有超過70,000個GPU。

Chainlink是一個預言機,能够訪問真實世界的數據和鏈外計算,同時保持區塊鏈技術固有的安全性和可靠性保障。

總結

這篇文章將盡量保持更新,隨著我的學習、實驗和收集來自web3中構建的開發者的反饋,我將不斷地更新。

如果你有任何反饋或關於我在這裏遺漏的想法,請聯系並與我分享你的想法。看到圍繞web3發生的所有活動,讓人興奮不已,因為開發者們正在躍躍欲試地參與進來。雖然基礎設施仍在不斷發展,但建立真正的去中心化協議和應用程序的願景是非常重要的,它允許人們協調,而不必將權力和控制權交給大公司,我們正在接近實現這一願景。

我在構建web3應用文章中,闡述了如何使用 web3堆棧進行開發。

版权声明:本文为[翻譯小組]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201071435061178.html