FuhuiChen
2022年5月15日
1.什麼是Web3.0?
Web3(也稱為 Web 3.0)指的是第三代網際網路,它圍繞著去中心化和基於代幣的經濟學等概念展開並利用各種去中心化技術,包括(但不限於)區塊鏈技術。
相較於Web2.0, 使用者不需要再透過Google、Facebook、Twitter、亞馬遜等大型公司留下個資、使用紀錄、網路足跡…,不再讓主導權掌握在政府、或少數企業上,真正把所有權還給使用者。核心概念為區塊鏈的「去中心化」。 讓將網際網路轉化為一個大型資料庫,透過人工智慧發展建構出網路虛擬世界生態系。區塊鏈、大數據、虛擬實境、人工智慧等,是構成Web 3.0的重要技術。
現在爆紅的NFT,元宇宙都和Web3扯上關系,開發者們對於這股熱潮也是不容錯過,Web3直接面向使用者的就是各個DApp(例如各個去中心化交易所, NFT交易平台Opensea ..等),我們可以從理解DApp使用的技術和過去Web2.0有何不同開始進入新的開發領域。
2.DApp所用的技術
Dapp 的全名是去中心化應用程式(Decentralized Application),相對於過往運行在中心化服務器的 App,Dapp 的程式部署在分佈式的網絡上,所有的數據皆公開透明且不可篡改。
如同以前的網站分為前後端,前端網頁只需要知道後端提供的API(應用程式介面)即可,DApp要做的事就是讓前端(通常是Web)與智能合約溝通,網頁前端透過ABI(Application Binary Interface 應用程式二進制介面)和區塊鏈上的智能合約溝通。和區塊鏈上的智能合約溝通的過程稱為transaction(交易),使用二進制介面溝通不太方便,因此通常開發DApp時會使用諸如web3.js 或Ethjs等函式庫提供的API來簡化與智能合約的溝通。這麼一來開發DApp的體驗其實與開發一般網頁應用已經相當接近。目前並沒有對Web3精確的定義,但大致上可以分出幾個技術類別:
(1) 智能合約:通常指代運行在 EVM 兼容網絡中的 Solidity 或其他合約語言代碼,他們負責與用戶交易我們發行的資產並儲存 DApp 的鏈上狀態。
(2) DApp前端: 目前大部份是Web, 可以用流行的框架像React,Vue等開發。
(3)Web3 Provider:負責與區塊鏈進行通信,並進行合約讀寫操作,但Metamask就是一個流行的InjectProvider。
(4) RPC節點: 隱藏在Provider是真正負責與區塊鏈溝通的節點,可能是本地節點或是遠端節點,也可以使用Relay Network像是Alchemy, infura或是Morails等服務。
以下會再詳細介紹各個技術:
3.關於智能合約
從智能合約的原始碼到使用智能合約,大概包含幾個步驟:
撰寫智能合約的原始碼(一般為 Solidity )。
編譯智能合約的原始碼成可在 EVM 上執行的 bytecode(binary code)。同時可以透過編譯取得智能合約的 ABI。
部署智能合約,透過 transaction把 bytecode 儲存在鏈上,並取得一個專屬這個合約的地址。
呼叫智能合約時,透過 transaction把資料發送到這個合約的地址。
所以我們知道合約地址/ABI後,就可以透過RPC(或是透過Web3.js)去呼叫合約,下節會說明RPC及Web3.js的原理為何
以下是對於新手學習的提示
但無疑的新入門必學的就是Solidity, 可以從官網的範例教學開始:
可以使用Remix做為為開發工具
可以使用EtherScan看合約ABI,也可以看到合約的source code
合約開發及整合測試可以使用
4. Web3 Provider & JSON-RPC節點
以太坊使用了JSON-RPC做為通訊方式,JSON-RPC是一個無狀態且輕量級的遠端過程呼叫(RPC)傳送協議,其傳遞內容通過 JSON 為主, 詳細定義可以看這,所以DApp需要做為JSON-RPC客戶端與處於區塊鏈的JSON-RPC服務器溝通以使用區塊鏈的功能。
在區塊鏈術語中,服務器通常被稱為節點。因此,當涉及到加密貨幣和區塊鏈世界時,我們需要一個節點來使用 JSON-RPC。這些節點有時也稱為 RPC 節點,它們允許我們讀取區塊鏈數據並將交易發送到不同的網絡。這意味著JSON-RPC節點對於使我們的應用程序正常運行至關重要。如果無法發送 RPC調用,我們就不能讓我們的 DApp 與我們選擇的區塊鏈進行交互。
web3.js是一組用來和本地或遠程以太坊節點進行連接的js庫(JSON-RPC客戶端封裝),以便讓 DApps 能夠訪問區塊鏈上的數據。在底層的實現上,它是通過 RPC 協議與節點通信,web3.js可以與任何對外公開 RPC 介面 的區塊鏈節點連接(JSON-RPC節點)
web3.js針對RPC 協議的封裝稱為Provider, 而要使用區塊鏈的功能則Provider需要指定某個區塊鏈節點,其實常用的 Ethereum 瀏覽器錢包 — MetaMask也有提供 web3 provider,當你成功連接錢包時,Metamask會對browser注入window.ethereum物件,Web3可以偵測並使用Metamask Provider,使用它來初始化Web3就可以連上 MetaMask 提供的節點(MetaMask使用Infura作為節點提供者)。
5. 為什麼要使用Relay Network
雖然也可以使用MetaMask或是本地節點,但因為效能及IP存取限約,我們會希望DApp能有一個自己的區塊鏈節點,但運行和維護自託管節點可能是區塊鏈開發人員的第一痛點,原因如下
(1) 費用昂貴,維護人力高
(2) 它可能不可靠 節點平均每 5 天出現一次問題:CPU 峰值、內存洩漏、磁盤問題 不一致的對等,損壞的內部數據庫,交易廣播問題,頻繁的錯誤+回歸
就像我們我們在雲服務使用AWS,Azure等服務一樣,在Web3的領域也有一些平台提供了很容易使用且穩定性高的節點服務,我們稱之為Relay Network。
下面列出幾個比較具代表性的Relay Network:
Infura 是世界上最早和最大的以太坊 Relay Network,它提供一些公開的 Gateway 節點,但一般來說,我們需要獲取屬於自己的 DApp Access Key並為這些訪問權限設置 origin 和 IP 限制,以提升使用我們自己的 DApp 用戶的訪問速度體驗。Infura 目前支持 ETH,ETH2 網絡,以及 IPFS 和 Filecoin 兩個分布式儲存方案。
Alchemy 也是一個非常流行的 Relay Network,它在 Infura 的功能上更進一步,為開發者提供了相當多實用的功能,例如調試工具,區塊狀態推送與豐富的 Webhooks。
Moralis 他們的定位是 Web3 的 Firebase,集成了許多 FaaS 的功能到他們的 Relay Network 中,這使得你可以快速在服務端訪問區塊鏈的狀態,而不需要反覆調用第三方網絡的 API,這是一個非常有趣而實用的方案。
市面上目前Relay Network非常多,有的提供功能更多的JSON-RPC Method, 有的提供DApp服務所需要的伺服器端功能,但無疑的,使用這些服務,可以很多程度加速我們開發的時間,也省去很多維護的費用及心力,相對的,該使用哪個服務以及如何去使用是更重要的點。
關於兌心科技 Insight Software
最懂你的雲端合作夥伴 — We know what you want
兌心科技的專業橫跨多個領域,雲端架構、遊戲製作、區塊鏈技術、去中心化金融、醫療資訊和物聯網服務等,致力於成為企業Web2.0到Web3.0的領航員,提供雲服務、線路、區塊鏈、金庫等解決方案。
不僅孵化區塊鏈新創,且經過嚴謹的過濾驗證,將值得信任、可靠的項目加入生態系中,進而推廣給使用者。