本文给出当下web3
产品级应用的技术栈推荐,可供置身于去中心事业的科技从业人员参考。
预备知识
有关于本文的内容,默认读者已经具备基本的去中心相关的知识点,下面系列文章可供大家提前预习:
- 《从web 1.0到web 3.0》
- 《DApp一日通——web3.js、Truffle与Dfinity篇》
- 《智能合约一日通——Solidity篇》
- 《NFT一日通——Azuki的ERC721A》
- 《数字货币一日通——OpenZeppelin的ERC20》
架构摘要
EVM兼容架构选型推荐
- 编程语言:
- 前端:TypeScript/JavaScript
- 跨平台:ReactNative
- 后端:TypeScript/JavaScript
- 合约端:Solidity
- 链端:Go
- 框架或工作流:
非EVM兼容或其它备选架构选型
- 编程语言:
- 框架或工作流:
推荐解构
前端
React
生态可以很方便结合ReactNative
跨平台,外加其本身坐拥JS生态的资源,有非常丰富的三方库和框架来辅助我们开发。在EVM兼容的链内,不少Provider/Signer也是支持JS体系的,所以这里推荐这个框架。编程语言的话,既然是JavaScript体系,那当然可以选择TypeScript
这款更好的JS,无论是React
还是Next.js
都有TS模板。TS有一个现代的类型系统,支持ADT和一些很强大的高阶类型,强类型可以帮助我们避免很多的错误,把危险即时扼杀在摇篮里,相信你会喜欢上这款微软出品的JS语言的。
使用React再配合Wagmi
和dotenv
,是一套已经可以构建工业级产品的选择。
后端
Node.js
可以让我们用JS写后端,这样可以将维护成本降低,与前端一体成型,这是一个低成本的方案。当然如果可以追求安全性的话,Rust也是一个热门的选择,尤其是区款链生态当中。传统的方案就是Java/Scala生态,如果你的后端很复杂,或者干脆只是一个传统个web2链改项目,那么用传统的方外加丰富的中间件确实是一个好选择。
合约端
如果是EVM生态,没什么好说的,就是Hardhat
+ Solidity
的工作流。选择新型的Cairo
也不错,Solana/Dfinity则提供了Rust这个选项,Dfinity甚至还有自己的Motoko
编程语言。作为推荐,还是优先考虑资产更丰富的以太坊,优先支持Solidity吧。
Provider/Signer
这个没什么好推荐,目前主流的能用哪个算哪个,一般我们可以不需要裸写Provider的逻辑。选用了React框架后,Hardhat集成了ether.js,React可以选用Wagmi,其它的方案也大同小异。
Relay
结点服务自然首选Infura
,a16z投资的Alchemy
也可以纳入考虑。
Oracle
以太坊区块链是完全确定性(deterministic)的。也就是说,当我们拿到整个网络的历史,并且在我们自己的电脑上重放,我们总能在一个正确的状态结束。但是互联网是非确定性的,每次重放所有的网络上面的事务,总是会遇到一个不同的结果。也因此,以太坊上面实现随机数和像普通的网路一样调用API获取结果变得困难,这一点和纯函数的编程语言(Haskell)有类似之处,状态和过程分离了。但是获取一些数据是很重要的能力,至少我们可以更加方便,比如创建一个去中心的数字货币交易所,数字货币的价格是需要通过外部获取的,这就要借助Oracle
的能力(不是那个数据库公司)。这里推荐Chainlink。
数据端
如果要发布NFT,或者要做一个去中心的Gmail,类似的这种需要存储方案的,目前推荐IPFS
,你可以用Pinata的服务,Infura支持IPFS。Mirror.xyz使用了Arweave
,也可以作为备选。