https://zhuanlan.zhihu.com/p/82411709
引言
介紹
在本系列中,我們將構建一個簡單的dApp(分布式應用)。我們會介紹用於構建dApp的所有技術棧和工具。dApp允許任何用戶在以太坊中發起交易
- 任何擁有以太坊帳戶的用戶都可以按要求在以太坊中發起交易
- 任何用戶都可以提交帶有證據的交易
- 交易發起者可以接受支付的履行
前提
1.你是軟件工程師,黑客,了解軟件編程的系統、結構以及基礎知識
2.了解區塊鏈的概念和以太坊的基本知識。如果還不太清楚,沒關系,可以觀看“25分鍾入門以太坊”視頻,閱讀以太坊白皮書,以及ETH 101系列
資料來源:
本系列中所有教程都附帶了代碼示例,你可以在下面的github倉庫找到:
kauri-io/kauri-fullstack-dapp-tutorial-series
dApp開發工具
本文將向你介紹開發一個簡單的dApp所需的相關工具,具體如下:
- 智能合約編程語言
- Web3庫
- 開發框架
- IDE
- Development blockchains
- 以太坊網絡
- 錢包(密鑰存儲)
- SaaS / Cloud Infra
- 數據存儲
智能合約編程語言
智能合約是以字節碼的形式部署在區塊鏈上的,EVM** 編譯器**附帶的任何語言都可用於編寫智能合約。沒人真想寫字節碼!
Solidity
目前,***Solidity ***是為以太坊平台編寫智能合約的首選/最常用語言,因此有很多示例,教程和參考資料。它是智能合約開發人員的首選。
Solidity 是一種受C ++和Javascript影響很深的靜態類型語言,這也節省了開發人員熟悉這些語言的功夫。
https://github.com/ethereum/solidity
文檔:http://solidity.readthedocs.io/en/v0.4.24/
LLL
***LLL **(**Low-level Lisp-Like Language ***)是編寫智能合約的另一種語言。顧名思義,它是一種相比Solidity 更低級的語言。
LLL 能夠直接轉換為EVM 的操作代碼(Opcode ),開發人員可以直接訪問內存並存儲。
Vyper
Vyper是一種還處於測試階段的語言。為了提高智能合約的安全性和可審核性,Vyper 增加了嚴格的規則。
注意: Vyper 仍然是測試軟件,目前不建議用它編寫軟件開發的智能合約。
https://github.com/ethereum/vyper
文檔:https://vyper.readthedocs.io/en/latest/installing-vyper.html
Web3 庫
以太坊節點開放了JSON-RPC API(無狀態輕量級遠程過程調用)協議,客戶端可以使用該協議與節點進行交互。
JSON-RPC 協議提供了一個接口,你能選擇一種語言與以太坊節點進行交互。Web3庫將這一協議封裝了。
在本系列的后面部分,我們將看到如何用web3庫構建一個用戶可以與dApp交互的客戶端/ UI。
https://github.com/ethereum/wiki/wiki/JSON-RPC
下面是web3 庫列表,你可以根據自己最常用的語言選擇版本:
Javascript
WEB3.js
https://github.com/ethereum/web3.js/
文檔:https://web3js.readthedocs.io/en/1.0/
ETHERS.js
https://github.com/ethers-io/ethers.js/
文檔:https://docs.ethers.io/ethers.js/html/
Java
WEB3J
https://github.com/web3j/web3j
Python
WEB3.PY
https://github.com/ethereum/web3.py
文檔:https://web3py.readthedocs.io/en/stable/
.net
Nethereum
https://github.com/Nethereum/Nethereum
文檔:https://nethereum.readthedocs.io/en/latest/
開發框架
開發dApp,特別是編寫智能合約時會有很多重復性工作,例如編譯源代碼、生成ABI、測試和部署。開發框架幫你解決了這些麻煩,從而讓你專注於開發dApp 和靈感。
Truffle
基於節點的框架,目前使用最多且維護最頻繁。
文檔:https://truffleframework.com/docs
Embark
基於節點的框架
文檔:https://embark.status.im/docs/
Populous
基於Python的框架
https://github.com/ethereum/populus
文檔:https://populus.readthedocs.io/en/latest/
就像在學編寫HTML前不要用rail 一樣,當你剛入門智能合約時,先不要着急使用框架,直到你能夠理解這些框架提供的價值。最簡單的就是用Remix(https://remix.ethereum.org/)體驗這些語言和想法。
IDE
開發者都有自己最順手的IDE。插件可以在開發dApps時讓你如虎添翼!
REMIX
由以太坊基金會開發和維護的在線***IDE ***。 這個開發環境易於使用,無需安裝和設置。在這可以快速構建原型與體驗智能合約。
ETHERATOM(ATOM PLUGIN)
https://github.com/0mkara/etheratom
INTELLIJ-SOLIDITY(INTELLIJ PLUGIN)
https://github.com/intellij-solidity/intellij-solidity
SOLIDITY(可視化擴展)
https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity
個人版以太坊區塊鏈
適用於開發dApp,尤其是在本地開發環境中編寫智能合約。啟動個人版以太坊區塊鏈后,你可以在上面快速部署合約並運行測試,同時控制鏈的運行方式。
Ganache
作為Truffle Suite 的一部分,ganache 允許你在本地計算機上快速運行個人版以太坊區塊鏈。 它分為兩部分:
- ganache-cli :正式名稱是***testrpc ***,一個基於Node.js 的以太坊客戶端
- ganache :基於Node.js 的客戶端前端,它提供了一個區塊鏈瀏覽器,將部署到測試客戶端的交易、區塊與合約可視化。
https://truffleframework.com/ganache
以太坊網絡
主網mainnet
以太坊的主要網絡,也是生產網絡。ETH在這里有真實價值。
測試網絡
由於這些是測試網絡,ETH在這里沒有真正的法定價值。你可以使用faucet 的鏈接在網上募集測試所需的ETH。
#### Rinkeby
僅支持Geth 客戶端的測試網絡,大概是最可靠和最穩定的
#### Kovan
僅支持parity 客戶端的測試網絡
https://github.com/kovan-testnet/faucet
#### Ropsten
基於POW 機制的基礎以太坊測試網絡。這個網絡大概是這3種里最不穩定的
dApp瀏覽器
Metamask
Metamask是一個加密錢包,允許你在瀏覽器中運行以太坊dApp而無需運行完整以太坊節點。
文檔:https://metamask.github.io/metamask-docs/
Toshi(Coinbase Wallet)
可以存儲多種不同Token 的加密錢包。
Cipher 瀏覽器
以太坊的移動Web3 dApp瀏覽器和錢包。
https://www.cipherbrowser.com/
SaaS / Cloud Infra
**Infura **
公共托管的以太坊節點集群,通過API提供對其節點的訪問。
Graph
一套使用GraphQL構建dApp的協議。
https://thegraph.com/
數據存儲
**IPFS **
IPFS(InterPlanetary File System)是用於分布式存儲文件的對等協議。可以把它想象成一個基於bt 和git* *思想、內容可尋址且不可篡改的的文件系統。
SWARM
***Swarm ***是在以太坊生態系統中開發的分布式存儲網絡,類似於IPFS。但它使用了不同的協議,通過提供激勵層,以鼓勵節點無限期地持久存儲數據。
https://swarm-gateways.net/bzz:/theswarm.eth(https://swarm-gateways.net/bzz:/theswarm.eth/))
文檔:https://swarm-guide.readthedocs.io/en/latest/introduction.html
閱讀Swarm和IPFS的對比(https://github.com/ethersphere/go-ethereum/wiki/IPFS-&-SWARM)
以太坊開發者工具列表
***Consensys Labs **和以太坊開發社區一直在整合開源工具、框架和組件,以幫助開發者在以太坊上大展身手。在你的**dApp ***開發之旅中,這將是一個有用的資源!