使用 Truffle 和 Ganache 搭建本地以太坊开发环境并部署一个简单智能合约

使用 Truffle 和 Ganache 搭建本地以太坊开发环境并部署一个简单智能合约的详细步骤:

一、环境搭建

  1. 安装 Node.js 和 npm

    • Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,npm 是 Node.js 的包管理器。可以从 Node.js 官方网站下载安装程序,建议选择 LTS(Long-Term Support)版本。

    • 安装完成后,在命令行中运行以下命令验证安装是否成功

      复制代码
      node -v
      npm -v
  2. 安装 Truffle

    • Truffle 是一个用于以太坊开发的框架,提供了一套工具和库,帮助开发者更轻松地开发、测试和部署智能合约。在命令行中运行以下命令安装 Truffle

      复制代码
      npm install -g truffle
  3. 安装 Ganache

    • Ganache 是一个用于本地开发和测试以太坊应用程序的个人区块链,提供了一个模拟的以太坊网络环境。可以从 Ganache 官网下载安装文件。

    • 安装完成后,启动 Ganache,它会默认在本地创建一个开发用的区块链网络,通常监听 http://127.0.0.1:7545

二、创建项目并编写智能合约

  1. 创建项目目录并初始化

    • 创建一个新的项目目录,并初始化 Truffle 项目

      复制代码
      mkdir mydapp
      cd mydapp
      truffle init
    • 这将生成项目模板文件,包括 contractsmigrationstest 目录,以及 truffle-config.js 配置文件。

  2. 编写智能合约

    • contracts 目录下创建一个新的 Solidity 智能合约文件,例如 SimpleStorage.sol,并编写以下代码:

      solidity

      复制代码
      // SPDX-License-Identifier: MIT
      pragma solidity ^0.8.0;
      
      contract SimpleStorage {
          uint public storedData;
      
          function set(uint x) public {
              storedData = x;
          }
      
          function get() public view returns (uint) {
              return storedData;
          }
      }
    • 这个合约包含一个 set 函数用于存储数据,一个 get 函数用于获取存储的数据。

三、配置 Truffle 并部署智能合约

  1. 更新 Truffle 配置文件

    • 打开 truffle-config.js 文件,修改网络配置以连接到 Ganache:

      JavaScript

      复制代码
      module.exports = {
        networks: {
          development: {
            host: "127.0.0.1",
            port: 7545,
            network_id: "*" // Match any network id
          }
        },
        solc: {
          optimizer: {
            enabled: true,
            runs: 200
          }
        }
      };
    • 确保 hostportnetwork_id 与 Ganache 的配置一致。

  2. 创建迁移脚本

    • migrations 目录中创建文件 2_deploy_contracts.js,内容如下:

      JavaScript

      复制代码
      var SimpleStorage = artifacts.require("./SimpleStorage.sol");
      
      module.exports = function(deployer) {
        deployer.deploy(SimpleStorage);
      };
    • 这个脚本告诉 Truffle 如何部署 SimpleStorage 合约。

  3. 编译和部署智能合约

    • 在项目根目录下运行以下命令编译智能合约

      复制代码
      truffle compile
    • 编译成功后,运行以下命令部署智能合约到 Ganache

      复制代码
      truffle migrate
    • 如果一切正常,你将看到合约部署成功的消息,包括合约地址。

四、与智能合约交互

  1. 使用 Truffle 控制台与合约交互

    • 启动 Truffle 控制台

      javascript 复制代码
      truffle console
    • 获取合约实例

      javascript 复制代码
      SimpleStorage.deployed().then(function(instance) { app = instance; });
    • 获取账户列表

      javascript 复制代码
      web3.eth.getAccounts().then(accounts => {
        console.log(accounts);
      });
    • 设置存储值

      javascript 复制代码
      web3.eth.getAccounts().then(accounts => {
        app.set(42, { from: accounts[0] });
      });
    • 获取存储值

      javascript 复制代码
      app.get().then(function(value) { console.log(value.toString()); });
    • 这将设置存储值为 42,并获取存储的值。

  2. 使用 Web3.js 与合约交互

    • 创建一个名为 interact.js 的文件,并用以下代码填充它:

      JavaScript

      javascript 复制代码
      const { Web3 } = require('web3');
      const fs = require('fs');
      const path = require('path');
       
      
      const web3 = new Web3('http://127.0.0.1:7545');
      
      // 加载合约的 ABI 和字节码
      const contractData = require('./build/contracts/SimpleStorage.json');
      const abi = contractData.abi;
      const bytecode = contractData.bytecode;
      
      // 创建合约实例
      const myContract = new web3.eth.Contract(abi);
      
      async function interact() {
        try {
          // 获取账户列表
          const accounts = await web3.eth.getAccounts();
          console.log('Accounts:', accounts);
      
          // 部署合约
          const contract = await myContract.deploy({ data: bytecode }).send({ from: accounts[0], gas: 1000000 });
          console.log('Contract deployed at address:', contract.options.address);
      
          // 调用合约方法
          await contract.methods.set(42).send({ from: accounts[0] });
          const value = await contract.methods.get().call();
          console.log('Stored value:', value);
        } catch (error) {
          console.error('Error:', error);
        }
      }
      
      interact();
    • 运行以下命令与合约交互

      复制代码
      node interact.js

通过以上步骤,你就可以使用 Truffle 和 Ganache 搭建本地以太坊开发环境,并部署和交互一个简单的智能合约。

相关推荐
老程序员刘飞14 小时前
hardhat 搭建智能合约
开发语言·php·智能合约
许强0xq7 天前
Gas优化大师目录
web3·区块链·智能合约·solidity·foundry·ethernaut·gas优化
Joy T10 天前
Solidity智能合约开发入门攻略
web3·区块链·智能合约·solidity·以太坊·共识算法
Joy T10 天前
Solidity智能合约存储与数据结构精要
数据结构·区块链·密码学·智能合约·solidity·合约function
友莘居士13 天前
Java基于Web3j调用智能智能合约案例
java·web3·智能合约
安当加密15 天前
智能合约在分布式密钥管理系统中的应用
分布式·智能合约
RainWeb322 天前
Hardhat3-node-npm-基础版安装-V1
程序员·智能合约
天涯学馆1 个月前
Solidity多重签名合约:打造超安全的区块链投票机制
智能合约·solidity
木西1 个月前
React Native DApp 开发全栈实战·从 0 到 1 系列(完结篇)
react native·web3·智能合约
木西1 个月前
React Native DApp 开发全栈实战·从 0 到 1 系列(跨链转账-合约部分)
web3·智能合约·solidity