{"content":{"title":"第5节：DAPP技术栈","body":"> 本文收录于我的开源项目：https:\/\/github.com\/dukedaily\/solidity-expert ，欢迎star转发，文末加V入群。\r\n\r\n在web3世界，万物皆可fork（可以理解为抄袭），因为主流协议都会代码开源，经过了市场的检验，用户才敢把自己花真金白银购买的token交给你。\r\n\r\n也正因为fork是如此容易，所以各种土狗协议（抄袭主流协议，换个皮，以圈钱为目的项目）才会层出不穷，那些不明就里的新人往往深受其害。所以了解必要的web3技术对我们避坑有大有裨益。\r\n\r\n# 技术栈\r\n\r\n[web3的技术栈](https:\/\/learnblockchain.cn\/article\/3390)并不复杂，传统的互联网后端技术对于web3开发是非必须的，而是作为可选项，你需要掌握：\r\n\r\n1. **区块链基本知识**：地址、token、非对称加密、哈希、共识；\r\n2. **Solidity**：编写智能合约，这是整个dapp最核心部分；\r\n3. **nodejs**：这部分必须手到擒来，因为框架、单测、脚本等都是使用js来操作的（js是最主流的，python、java等也有）；\r\n4. **web3 sdk**：主流的web3库为web3.js或ethers.js，所有与链上交互的操作都是通过这两个库进行的；\r\n5. **Subgraph**: 这是一个三方基建服务，可以在链下对事件进行捕捉（扫链、计算、存储postgres），从而对进行数据整合，被前端调用，快速返回数据，极大的方便了开发者。\r\n6. **前端**：react（大项目使用，知名协议原生支持的库更全面）、vue\r\n7. **后端**（**可选项**）：机器人、周期性调用合约、监听扫链（钱包）、其他需求\r\n\r\n\r\n![web3-remix-arch.png](https:\/\/img.learnblockchain.cn\/attachments\/2022\/08\/SqbZ28Ov630b8bf98460d.png)\r\n**最小技术栈**：solidity、nodejs、web3、subgraph、前端。（默认你是开发者，linux等就不说了）\r\n\r\n这几部分是写dapp的最小技术栈。掌握了这些技能，读写dapp的基本功就具备了，但是这还远远不够，掌握了技术才刚刚开始，具体细分业务才是我们更加需要关注的重点，业务才会让你成为细分领域专家，技术永远只搬砖的份儿，对于这部分我们后续专门讲解，不要着急。\r\n\r\n\r\n\r\n# 开发工具\r\n\r\n经过多年发展，开发工具也在不断变化，具体如下：\r\n\r\n- 基本：remix、solidity、vscode、metamask、etherscan\r\n- 框架：hardhat、truffle\r\n- 早期2018年工具链：solidity + truffle + infura + web3.js + nodejs\r\n- **目前2022年工具链**：solidity + hardhat + alchemy + ethers.js + ts，\r\n  - 点击查看最新工具链使用demo：https:\/\/github.com\/dukedaily\/solidity-hardhat-kit\r\n\r\n\r\n\r\n**我常用的部分三方工具**：\r\n\r\n- 在线库工具：https:\/\/web3playground.io\/（web3\/ethers）\r\n- 常用基础库：https:\/\/github.com\/OpenZeppelin（有npm包）\r\n- tender：https:\/\/dashboard.tenderly.co\/explorer （模拟真实交易、告警）\r\n\r\n\r\n\r\n# 团队构成\r\n\r\ndapp开发只需要很小的团队，一般4~5个人就足够了，具体分工：\r\n\r\n- Contract（1~2）\r\n- Subgraph（1）\r\n- Sdk（1）(Optional)\r\n- Frontend（1~2）（多）\r\n- QA（会代码）\r\n\r\n\r\n\r\n前端需要多一点人，因为往往合约写半天，前端需要写一周，这就是爱吧。\r\n\r\n一定要重视QA的存在，而且不仅仅要在页面上端对端测试，也要直接对合约的接口进行逐个测试，这才能最大限度保证安全。\r\n\r\n\r\n\r\n# 开发流程\r\n\r\n需求分析->开发->联调-> **测试网测试**->主网测试->**合约审计**->上线->合约升级\r\n\r\n\r\n\r\n# 设计原则\r\n\r\n- 相比于高效率更注重确定性（不可篡改）\r\n  - 数据与逻辑分离，方便升级\r\n- 代码开源，数据完全公开（透明）\r\n  - 拒绝链上存储任何敏感信息（包括修饰为private的字段）\r\n  - 逻辑清晰，做好权限控制\r\n  - 单元测试\r\n- 随时准备应对攻击（安全性）\r\n  - 总假设合约是被攻击成功的，有补救措施（紧急暂停、储备金）\r\n  - 不重复造车轮子，使用经过检验的代码（类似于加密算法）\r\n- 交互付费（写数据时）\r\n  - 非必要的数据不要上链（on-chain vs off-chain)\r\n\r\n\r\n\r\n掌握好基本的工具链是万里长征第一步，web3世界瞬息万变，业务层出不穷，但掌握技术永远是最重要的一环，加油，动起来吧！\r\n\r\n\r\n\r\n加V入群：Adugii，公众号：阿杜在新加坡，一起抱团拥抱web3，下期见！\r\n\r\n\r\n\r\n> 关于作者：国内第一批区块链布道者；2017年开始专注于区块链教育(btc, eth, fabric)，目前base新加坡，专注海外defi,dex,元宇宙等业务方向。"},"author":{"user":"https:\/\/learnblockchain.cn\/people\/3162","address":null},"history":"QmXsckomyDefEx38H5zdGQaWqrseCPxygEjvuMPvydrNod","timestamp":1661765273,"version":1}