以太坊 DAPP 最佳開發實踐-工具篇

版權聲明


本文作者:苑風 請注意:轉載請聯繫作者獲得授權;轉載時請保留以上版權聲明…

“`

—————————————–
隨着最近 Fomo3d 的興起,基於以太坊的 DApp 開發受到越來越多人的關注。但如何開發一款 DApp,其基本開發環境是什麼?如何測試,部署,都是一個很大問題。網上的資料分散且陳舊,缺少一個實時的更新和梳理。筆者部署過 100+合約到鏈上,接觸各類型的合約,親歷幾款 DApp 的開發,對此略有心得,摸索出比較靠譜的環境和開發流程,特意分享給大家,希望能探討出更加合理的流程。

DApp 介紹

DApp(Decentralization Application): 分佈式應用。區別於基於 Android 或者 iOS 的 App 關鍵在於 D 字。我們一般指基於區塊鏈的應用,現在最流行的是基於以太坊的應用。當然由於 EOS 的性能卓越,也逐漸興起。我們接下來談 DApp 就特指基於以太坊的應用。

這種應用的特點在於,核心數據存儲在以太坊上,只需要一個前端的應用展示。所以,它可以做到 Serverless。傳統的後端數據全部在以太坊上,前端 js 通過以太坊提供的 web3.js 提供的接口去讀寫合約,發起交易。

Tips: 命名爲 web3.js 是有講究的,對比與傳統的 web2.0, 它意味一種全新的 web 應用

當然,作爲一個更加純粹的 DApp,我們甚至可以把前端都部署在區塊鏈上,比如大熱的 IPFS。這樣,所有的數據,連基本的靜態文件存儲都在鏈上,基本上是一個永久存在的應用。但目前受限於基礎條件,還很難做到這一點,區塊鏈的存儲還無法應付大規模的訪問。

工具集合

Pairty

parity 作爲以太坊的一個節點,可以用來部署私鏈,開發鏈,主鏈等不同網絡類型。用在開發,測試,部署的不同環節。其 UI 流程,交互方便。可以方便進行賬戶轉賬,合約部署和執行等各種操作。具體的版本,建議用 1.8.x。最新的 2.0 在原來的基礎上套了一個殼,極其難用,整個連接的跳轉全部丟失,千萬別用。1.9.x 系列也改的非常奇怪。真有一種每況愈下的感覺,感覺整個 Parity 團隊都去搞新項目 Polkadot,沒用心做下去。

Truffle

truffle 提供了一整套 DApp 的開發腳手架,有很多不錯的工程框架可以直接 unbox 下來。建議大家把他的文檔 :

https://truffleframework.com/docs/truffle/overview

從頭到尾仔細讀一遍。具體的使用流程可以參考他們的文檔,非常值得研究,可以把上面的示例都跟着做一遍。

**
**

zeppelin

這是一個基於 solidity 的合約開發組件。他的意義有兩個:

1. 把合約開發一些通用的組件開發出來,可以方便地複用

2. 合約組件經過嚴格的測試,至今爲出現漏洞

各位寫合約,特別是寫發幣的合約,一定要多參考他們家。今年年中有兩家因爲合約漏洞導致代幣歸零的項目,就是沒有好好使用 zeppelin 上的安全函數,也不會直接繼承已經成熟的 ERC20 代碼。這真是十億級別的大教訓。

MetaMask

人稱小狐狸。它是一款基於瀏覽器插件的錢包。有了 MetaMask,DApp 中在發起交易的時候可以直接拉起 DApp,然後把交易上鍊。整個流程才能打通。如果沒有這個,每次交易的時候,需要用各種其他手段,比如找一個錢包掃碼,然後通過手機錢包應用把交易上鍊,整個體驗是中斷的。而且 truffle 提供了完整的 Metamask 的接入流程,直接參考下面的文檔即可:

https://truffleframework.com/docs/truffle/getting-started/truffle-with-metamask

年初的以太貓應用,通過 MetaMask 的使用,給大家提供很好的範例。通過這種方式的結合原來可以把 DApp 做得如此絲滑流暢。當然,這套體驗流程目前在 PCWeb 上是沒問題的,在手機上就很麻煩。手機瀏覽器不存在類似的插件。

爲此有些錢包提供商爲提供類似的解決方案,能解決用戶在手機上也能玩 DApp 的問題。筆者所在的團隊正在做類似的事情,有需求可以聯繫。

**
**

VSCode

編輯器方面我嚴重推薦 VSCode。微軟在開發編輯器的能力實屬業內一流。此款編輯支持各種語言,對 Solidity 的支持也非常棒。重要的是,打開很多文件都是飛速,定製能力也強。

Infura

Infura 項目非常牛氣。看下圖:



以太坊 DAPP 最佳開發實踐-工具篇



簡單來說他就是以太坊的接入網關。目前可以接入以太坊的不同網絡,包括主網和各種測試網。當然,他們還支持 IPFS。他們一天訪問超過 10Billion。真的很嚇人。但有些人可能不信,你分析下 Fomo3d 的前端就知道了,每 5s 的樣子就的去刷新一下接口,通過 infura 訪問以太坊上的數據。我們在實際部署 DApp 時,就可以直接用他們提供的服務。

當然爲了加速,也可以自己部署線上的以太坊節點。筆者作爲錢包服務商,有打算閒來時,提供一套更爲完備的節點網關,出了以太坊,涵蓋所有的主流公鏈。

etherscan.io

搞區塊鏈的不知道這個網站實屬恥辱。它已經是我使用頻次最高的網站。每次補完合約或者轉賬完都會去刷新一下,看看有沒有上鍊。合約部署完成之後也會上去提交下源碼。另外,它還提供了很多其他豐富的功能,大家多用,多研究,肯定能挖掘出很多有意思的東西。

區塊鏈上的數據,一切都是公開透明的,數據的背後,有太多隱藏的祕密!

Solidity

以太坊合約的開發其實是可以使用多種語言的,但目前來看 Solidity 已經成爲事實的標準。大家在用它去學合約,在這一塊也積累了大量有益的實踐經驗,特別是安全方面的。所以,可以重點掌握一下這門語言。他也有很多有意思的特性。

其他

筆者在上面特意精選 DApp 開發過程中用到的。初次之外,各位在學習 DApp 開發的過程中會遇到一些其他的軟件,我簡單介紹下,然後說明爲啥不用,或者應急情況下也可以湊合用用。

Remix

我初次接入合約開發的時候,能看到很多地方討論這個東西。地址 :

https://remix.ethereum.org/

可以直接訪問這個網站,也可以在本地起一個服務。我推薦後者,能穩定快速點。

這東西看着功能強大,豐富。好像還能調試的樣子,但它調試起來經常跳,沒法定位到具體的代碼。但界面實在醜陋。在上面寫代碼,幹事情,眼睛都要花掉。

部署完合約,在讀寫合約方面操作起來,太不方便。你用過 Parity 的合約讀寫操作,會很享受那種酸爽的感覺,在也不會用 remix。

geth/mist

官方提供的錢包,但除了轉轉帳,體驗一下 web3 的那些接口。在合約部署上,跟 parity 比相差太遠。我曾經還被它坑死過一次,花了兩天,最後找到原因,是它的一個 bug。找誰說理去。

上面也可以看出,對於 Parity 我是不惜各種溢美之詞。誰用誰知道,下文會正對一個具體的應用,我們在 parity 做一個詳細的使用介紹。敬請期待!