从零开始构建你的第一个以太坊DApp,Web3实战指南

OKX欧易app

OKX欧易app

欧易交易所app是全球排名第一的虚拟货币交易所,注册领取6万元盲盒礼包!

APP下载   官网注册

从零开始构建你的第一个以太坊DApp,Web3实战指南

从零开始构建你的第一个以太坊DApp,Web3实战指南

随着区块链技术的飞速发展,去中心化应用(DApps)正逐渐改变着我们与互联网交互的方式,以太坊作为全球最大的智能合约平台,为DApp的开发提供了强大的基础设施,而Web3.js(或其替代如Ethers.js)则是连接前端应用与以太坊区块链的桥梁,使得JavaScript开发者能够轻松与区块链进行交互,本文将通过一个简单的“待办事项(Todo List)”DApp实例,带你走进Web3和以太坊DApp开发的世界。

理解核心概念

在动手之前,我们首先要明确几个核心概念:

  1. 以太坊(Ethereum):一个开源的、有智能合约功能的公共区块链平台,它允许开发者构建和部署去中心化应用。
  2. 智能合约(Smart Contract):部署在以太坊区块链上的自动执行程序,它们在满足预定条件时会自动执行,不可篡改。
  3. DApp(Decentralized Application):结合了传统前端应用与后端智能合约的去中心化应用,前端通常运行在中心化服务器上,而后端逻辑则运行在区块链上。
  4. Web3.js:一个JavaScript库,它允许你的DApp与以太坊节点进行通信,从而读取区块链数据、发送交易、调用智能合约等。
  5. MetaMask:一款流行的浏览器钱包插件,它能让用户安全地管理其以太坊账户、私钥,并与DApp进行交互,充当DApp与以太坊网络之间的桥梁。

开发环境准备

在开始编码之前,我们需要准备好以下工具和环境:

  1. Node.js 和 npm/yarn:Node.js是JavaScript运行时环境,npm是Node.js的包管理器,从Node.js官网下载并安装LTS版本。
  2. 代码编辑器:如VS Code、Sublime Text等。
  3. MetaMask浏览器插件:在Chrome、Firefox等浏览器中安装MetaMask扩展,并创建一个测试账户。
  4. 以太坊测试网络:为了不消耗真实的以太币(ETH),我们使用测试网络,如Ropsten、Kovan或Goerli,你需要从某个“水龙头”(Faucet)网站获取测试ETH。
  5. Truffle框架:一个流行的以太坊开发框架,用于智能合约的编译、测试和部署。
  6. Ganache:一款个人以太坊区块链,可以让你在本地快速创建和运行区块链,方便开发和测试。

实战步骤:构建一个简单的Todo List DApp

我们将分步构建一个简单的Todo List DApp,包括智能合约编写、前端交互和部署。

步骤1:初始化项目与安装依赖

  1. 创建一个新的项目目录,并进入该目录:
    mkdir ethereum-dapp-tutorial
    cd ethereum-dapp-tutorial
  2. 使用Truffle初始化项目:
    truffle init

    这会创建一些标准目录,如contracts(存放智能合约)、migrations(部署脚本)、test(测试文件)等。

  3. 安装项目依赖:
    npm install --save truffle-hdwallet-provider @openzeppelin/contracts
    • truffle-hdwallet-provider:允许Truffle使用MetaMask的助记词或私钥进行部署,支持多个账户。
    • @openzeppelin/contracts:提供经过审计的、可重用的智能合约标准库,增强安全性。

步骤2:编写智能合约

在contracts目录下,创建一个新的智能合约文件TodoList.sol:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/access/Ownable.sol";
contract TodoList is Ownable {
    struct Task {
        uint id;
        string content;
        bool completed;
    }
    mapping(uint => Task) public tasks;
    uint public taskCount = 0;
    event TaskCreated(uint id, string content, bool completed);
    event TaskCompleted(uint id, bool completed);
    constructor() {
        // 创建一个初始任务作为示例
        createTask("Initial Task");
    }
    function createTask(string memory _content) public {
        taskCount++;
        tasks[taskCount] = Task(taskCount, _content, false);
        emit TaskCreated(taskCount, _content, false);
    }
    function toggleCompleted(uint _id) public {
        Task storage task = tasks[_id];
        require(task.id != 0, "Task does not exist"); // 简单检查任务是否存在
        task.completed = !task.completed;
        emit TaskCompleted(_id, task.completed);
    }
    function getTask(uint _id) public view returns (uint id, string memory content, bool completed) {
        Task storage task = tasks[_id];
        return (task.id, task.content, task.completed);
    }
}

这个合约实现了:

  • 添加任务(createTask)
  • 切换任务完成状态(toggleCompleted)
  • 获取任务信息(getTask)
  • 使用Ownable来限制某些操作(虽然本例中未严格限制,但是一个好习惯)

步骤3:配置Truffle部署文件

在项目根目录下,创建或修改truffle-config.js文件:

require('dotenv').config(); // 用于加载环境变量
const { HDWalletProvider } = require('@truffle/hdwallet-provider');
module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 7545, // Ganache默认端口
      network_id: "*", // 匹配任何network id
    },
    goerli: { // 使用Goerli测试网
      provider: () => new HDWalletProvider(
        process.env.MNEMONIC, // 你的MetaMask助记词或私钥
        `https://goerli.infura.io/v3/${process.env.INFURA_PROJECT_ID}` // 你的Infura项目ID
      ),
      network_id: 5, // Goerli的network id
      gas: 5500000,
      confirmations: 2,
      timeoutBlocks: 200,
      skipDryRun: true
    }
  },
  compilers: {
    solc: {
      version: "0.8.0", // 智能合约编译版本
      settings: {
        optimizer: {
          enabled: true,
          runs: 200
        }
      }
    }
  },
  mocha: {
    timeout: 100000
  }
};

你需要创建一个.env文件来存储敏感信息(如助记词和Infura项目ID),并在.gitignore中忽略.env文件。

步骤4:编写迁移脚本

在migrations目录下,创建一个新的迁移文件,例如2_deploy_todos.js:

const TodoList = artifacts.require("TodoList");
module.exports = function (deployer) {
  deployer.deploy(TodoList);
};

步骤5:编译和部署智能合约

  1. 编译:

    truffle compile

    这会在build/contracts目录下生成编译后的ABI(应用程序二进制接口)和字节码。

  2. 部署到本地开发网络(Ganache): 确保Ganache正在运行,然后执行:

    truffle migrate --network development

    这会将智能合约部署到你的本地Ganache区块链上。

  3. 部署到测试网络(如Goerli): 确保你的MetaMask账户有足够的测试ETH,并且.env文件中的配置正确。 然后执行:

    truffle migrate --network goerli --reset

    --reset会重新执行所有迁移脚本。

步骤6:开发前端应用

  1. 在项目根目录下创建一个client目录,并初始化一个React应用(或使用纯HTML/CSS/JS):

    npx create-react-app client
    cd client
    npm install web3
    # 或使用 ethers.js: npm install ethers
    cd ..
  2. 在client/src目录下,我们可以创建一个App.js文件来与智能合约交互:

    import React, { useState, useEffect } from 'react';
    import Web3 from 'web3';
    import TodoListContract from '../../build/contracts/TodoList.json'; // 导入编译后的合约ABI
    function App() {
      const [web3, setWeb3] = useState(null);
      const [account, setAccount] = useState(null);
      const [contract, setContract] = useState(null);
      const [tasks, setTasks] = useState([]);
      const [newTaskContent, setNewTaskContent] = useState('');
      useEffect(()

本文来自用户投稿,不代表币大大立场,如若转载,请注明出处:https://czxurui.com/jys/269006.html

上一篇 2026年07月25日
下一篇 2026年07月25日

相关推荐

  • 深度解析以太坊走势,当前市值几何,未来又将走向何方?

    深度解析以太坊走势,当前市值几何,未来又将走向何方? 在波澜壮阔的数字货币世界中,如果说比特币是当之无愧的“数字黄金”,那么以太坊(Ethereum, ETH)就是构建整个智能合约生态的“世界计算机”,它的每一次价格波动,都牵动着全球数亿投资者的神经,也深刻影响着去中心

    2026-11-14 02:10:01
    1 0
  • 海外交易员大举买入以太坊,机构青睐与市场信心如何共振?

    海外交易员大举买入以太坊,机构青睐与市场信心如何共振? 在全球加密货币市场波动加剧的背景下,以太坊(Ethereum)正吸引着越来越多国外交易员和机构的目光,从欧美大型投资银行的加密资产部门到对冲基金,再到个人高净值交易员,以太坊的持仓数据与市场情绪均显示出明显的

    2026-11-14 02:10:01
    1 0
  • 以太坊2025价格走势分析,技术革新与市场博弈下的多空交织

    以太坊2025价格走势分析,技术革新与市场博弈下的多空交织 以太坊(ETH)作为全球第二大加密货币,其2025年价格走势将受到技术迭代、宏观环境、市场情绪等多重因素影响,呈现“震荡上行但波动加剧”的特征,从核心驱动因素到潜在风险,具体分析如下: 核心驱动:技术升级与生态

    2026-11-14 02:10:01
    2 0
  • 比特币与以太坊,知乎上的数字货币双雄究竟谁更胜一筹?

    比特币与以太坊,知乎上的数字货币双雄究竟谁更胜一筹? 在当今这个数字浪潮席卷全球的时代,比特币(Bitcoin)和以太坊(Ethereum)无疑是加密货币领域中最受瞩目的“双雄”,无论是在全球市场,还是在像知乎这样的中文互联网知识分享平台上,关于这两大加密资产的讨论、分析

    2026-11-14 02:10:01
    3 0
  • 16年以太坊行情价格,从诞生到爆发的价值跃迁

    16年以太坊行情价格,从诞生到爆发的价值跃迁 2016年是以太坊(ETH)从概念走向实践的关键一年,作为全球第二大加密货币,以太坊在2016年的价格走势不仅记录了其技术价值的初步验证,更折射出区块链生态从“比特币时代”向“智能合约时代”的过渡,这一年,以太坊价格经历了从

    2026-11-14 02:10:01
    2 0
  • 云南以太坊价格,地域特色与市场动态的交织

    云南以太坊价格,地域特色与市场动态的交织 在中国西南边陲的云南,以太坊的价格波动不仅是全球加密货币市场的缩影,更因地域经济特征而呈现出独特的观察视角,作为连接南亚东南亚的辐射中心,云南的以太坊交易既受到国际行情的深度影响,也融入了本地投资者的行为逻辑。 从价

    2026-11-14 00:10:01
    4 0

发表回复

8206

评论列表(0条)

    暂无评论

binance币安交易所
已有2000万用户加入币安交易所

立即下载