# jLab：郭宇的Web3开发最佳实践阅读笔记-1

### jLab：郭宇的最佳实践阅读笔记-1

#### 概述

阅读大牛郭宇的文章

https://guoyu.mirror.xyz/RD-xkpoxasAU7x5MIJmiCX4gll3Cs0pAd5iM258S1Ek

研发实践：迭代周期=合约编写，单元测试，工作流自动化，前端与客户端方面等

许多问题，涵盖开发一个 DApp所有内容。

如图：

1. Smart contract：主要指EVM和兼容EVM的区块链的Solidity或其他语言上的合约，负责和区块链交互（发布合约/Token，查询，修改数据）
2. DApp：基于智能合约为基础的产品，包括合约可调用接口，用户接口/界面，一般基于Web，用React/Vue
3. Provider,Signer: Remix 有很多，典型的就是Metamask，提供了InjectProvider，它的好处是会暴露交互行为给客户在Web界面选择
4. Relay：中继者，扮演了用中心化服务提供从客户的Web/DApp的到链上节点的连接，目前是多用于DApp的后端直接和这些Relay代码后台交互，例如Infura等等
5. Server：DApp可以没有中心化Server，但是多数时候，复杂的数据整合、传输、存储、计算，多系统的连接和交互，中心化服务器是最擅长的。据说（郭宇说）深度整合区块链的Moralis（我没用过）可以试试，多数时候DApp，都是自己写服务，架设中心服务

#### 架构技术栈

##### Solidity

1. 一天搞定：https://solidity-by-example.org/
2. 持续参考：https://docs.soliditylang.org/en/v0.8.13/

##### 前端

1. 优秀React hooks：https://wagmi.sh/，基于ether.js，增加了Provider交互函数
2. 当然，可以基于https://docs.ethers.io/v5/，直接构建

##### 多Provider/网络

1. 多支持：https://apeboard.finance/，提供跨区块链的数据展现
2. 托管钱包：https://web3auth.io/，https://magic.link/，Web2登录中心化服务体验更好

##### Relay

1. Infura 目前支持 ETH，ETH2 网络，以及 IPFS 和 Filecoin 两个分布式储存方案，级别最大最稳定的Relay解决方案商
2. Alchemy提供更多的服务，也更中心化，如专用工具，WebHooks集合等，看大家的选择
3. Morails，郭宇推荐的，集成了许多Faas服务，等于在中继层又叠加了一层中心化的FaaS服务，我猜测因为函数服务是原子的，Restful的，可替代的，中心化程度反而不高

##### 服务器

1. 多数人使用Node，Go或者Rust

2. 主要是存储非必要上链的链下数据，或者场景、成本限制，必须链下的应用场景

3. 如果使用FaaS服务，可以用Morails（深度集成区块链）或者Google的Firebase，据说未来Google也会提供类似的Web3 Relay或者FaaS

   
















