Dapp开发与应用的最佳实践

  • 木西
  • 发布于 1天前
  • 阅读 246

前言本文旨在汇总开发一款DApp应用的最佳实践方案,涵盖技术栈选择、开发工作流推荐、工具包使用以及相关资源推荐,帮助开发者高效构建去中心化应用。完整DApp应用技术栈前端:应用界面例如:(ReactorReactNative)服务端(可选):传统的服务端开发提供服务端api

前言

本文旨在汇总开发一款DApp应用的最佳实践方案,涵盖技术栈选择、开发工作流推荐、工具包使用以及相关资源推荐,帮助开发者高效构建去中心化应用。

完整DApp应用技术栈

  • 前端:应用界面 例如:(React or React Native)
  • 服务端(可选): 传统的服务端开发提供服务端api 例如Node
  • 智能合约:例如:Solidity
  • Provider/Signer:负责与区块链进行通信 例如:(wgami / ethers.js /web3.js)
  • Relay:与区块链的某一个节点同步状态的服务器集群 例如:(Infura)

    开发工作流推荐

  • Hardhat:编写solidity合约一站式开发、测试、部署全流程;
  • Scaffold-ETH 2:快速构建一个DApp,包含前端 、合约;

    开发工作流使用

  • Hardhat使用
    # 说明有前端基础hardhat比较好上手一些
    # 操作步骤
    1 mkdir hardhat-tutorial(创建项目目录) 
    2 cd hardhat-tutorial (进入工程目录)
    3 npm init 项目初始化
    4 npm install --save-dev hardhat (安装hardhat)
    5 npx hardhat init (hardhat初始化项目选择项目模板)
    6 npm install --save-dev @nomicfoundation/hardhat-toolbox (下载对应的工具包 修改hardhat.config 处理项目报错问题)
    # 项目常用指令
    npx hardhat compile (合约编译)
    npx hardhat test XXX (合约测试)
    npx hardhat deploy (合约部署全部)
    npx hardhat run xxx(部署指定合约)
    npx hardhat node (启动节点)
  • Scaffold-ETH 2使用
    # 说明快速搭建一站式 前端、合约Dapp项目
    # 操作步骤
    npx create-eth@latest xxx(创建项目)
    cd xxx
    # 启动指令
    yarn chain (启动节点)
    yarn start (前端项目启动)
    yarn deploy (合约部署)

    钱包登录工具包推荐

    RainbowKit:可以使用默认也可以自定钱包<br> thirdweb:综合工具不单单钱包集成

    钱包工具包使用

    RainbowKit

  • 下载对应的包
    npm install @rainbow-me/rainbowkit wagmi viem@2.x @tanstack/react-query (包下载)
  • 导入对应的包
    import '@rainbow-me/rainbowkit/styles.css'; 
    import { getDefaultConfig, RainbowKitProvider, } from '@rainbow-me/rainbowkit'; 
    import { WagmiProvider } from 'wagmi'; 
    import { mainnet, polygon, optimism, arbitrum, base, } from 'wagmi/chains'; 
    import { QueryClientProvider, QueryClient, } from "@tanstack/react-query";
  • config配置

const config = getDefaultConfig({

appName: 'My RainbowKit App',

projectId: 'YOUR_PROJECT_ID',//通用WalletConnect Cloud获取项目id

chains: [mainnet, polygon, optimism, arbitrum, base],

ssr: true, // If your dApp uses server side rendering (SSR)

});

* 包装提供者

const queryClient = new QueryClient(); const App = () => { return ( <WagmiProvider config={config}> <QueryClientProvider client={queryClient}> <RainbowKitProvider> {/ Your App /} </RainbowKitProvider> </QueryClientProvider> </WagmiProvider> ); }; //链接按钮组件 import { ConnectButton } from '@rainbow-me/rainbowkit';

export const YourApp = () => {

return <ConnectButton />;

};


# 合约开发
以Solidity为例,相关内容已在作者的专栏 [《Web3相关知识分享》](https://juejin.cn/column/7448061806239367194) 中进行了详细阐述。该专栏包含关于合约开发、测试、部署的实践案例,以及合约开发常用工具的汇总,有兴趣的读者可以前往查阅。
# 服务端
在服务端开发中,构建API的过程与传统Web服务端开发基本相同。主要区别在于,DApp的服务端需要通过第三方库(例如ethers.js)与智能合约进行交互,从而实现与区块链的通信。
# 前端
在DApp开发中,前端部分与传统Web2开发在技术栈上基本一致,但新增了与智能合约交互以及钱包连接的功能。具体来说,开发者需要引入Web3.js、ethers.js、wagmi等工具库,以便实现与区块链的交互和钱包的集成
# 补充
### 去中心化储存方案
*  **IPFS**:最早和最流行的去中心化储存网络。 
*  **Filecoin**:以 IPFS 为基础的储存网络。
*  **Arweave(AR)**:去中心化的永存网络,一次写入付费,读数据免费。你正在阅读的这篇文章即由 Mirror 代为保存在 AR 上。
### 对开发者的高级包装储存服务
-   **Web3.storage** 基于 Filecoin 的免费储存服务。
-   **NFT.storage Web3.storage** 提供的 NFT 元数据针对性储存服务,提供网页界面上传与 SDK。
-   **Filebase** 整合了多个去中心化储存网络的服务,接口类似 AWS S3,提供丰富的 SDK 与 API,支持信用卡付费。
-   **Bundlr** 基于 Arweave 构建的永久储存服务,支持用多链 token 结算。
### 关于Hardhat 插件推荐
* **hardhat-gas-reporter**:帮助开发者了解运行单元测试中部署和执行合约方法消耗的 gas 费用
* **solidity-coverage**:单元测试覆盖率报告
* **nomiclabs/hardhat-etherscan**: 将所发布合约的源码和 ABI 都展示在合约地址页面
* **tenderly/hardhat-tenderly**:监控线上合约的状态并提供 debug 建议
# 总结
以上内容总结了开发一款DApp应用所涉及的技术构成以及常用的工具和资源。
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
木西
木西
江湖只有他的大名,没有他的介绍。