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 ***开发之旅中,这将是一个有用的资源!