目录

一、环境准备

1. 安装 Node.js 和 npm

2. 安装 Truffle 和 Ganache

二、创建 Truffle 项目

三、编写智能合约

四、配置 Truffle

五、编译智能合约

六、部署智能合约

七、与智能合约交互

八、编写测试用例

九、总结


在以太坊生态系统中,Truffle 和 Ganache 是两款广受欢迎的开发工具。Truffle 提供了完整的智能合约开发框架,而 Ganache 则为开发者提供了一个本地的以太坊区块链环境,方便进行测试和调试。本文将通过一个简单的示例,带你从零开始,体验使用 Truffle 和 Ganache 开发、部署智能合约的全过程。


一、环境准备

1. 安装 Node.js 和 npm

请确保您的开发环境中已安装 Node.js 和 npm。可通过以下命令检查:

node -v
npm -v

如未安装,请前往 Node.js 官网 下载并安装。

2. 安装 Truffle 和 Ganache

使用 npm 安装 Truffle:

npm install -g truffle

Ganache 提供了桌面版和命令行版(ganache-cli),可根据需要选择安装。

  • 桌面版:前往 Ganache 官网 下载并安装。

  • 命令行版:

npm install -g ganache


二、创建 Truffle 项目

在终端中执行以下命令,初始化一个新的 Truffle 项目:

mkdir my-truffle-project
cd my-truffle-project
truffle init

该命令会生成以下目录结构:


my-truffle-project/
├── contracts/           // 存放 Solidity 合约文件
├── migrations/          // 合约部署脚本
├── test/                // 测试脚本
├── truffle-config.js    // Truffle 配置文件


三、编写智能合约

在 contracts/ 目录下创建一个名为 SimpleStorage.sol 的文件,内容如下:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SimpleStorage {
    uint256 private data;

    function set(uint256 _data) public {
        data = _data;
    }

    function get() public view returns (uint256) {
        return data;
    }
}

该合约提供了两个函数:set 用于设置数据,get 用于读取数据。


四、配置 Truffle

在 truffle-config.js 文件中,添加 Ganache 的网络配置:

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",     // Ganache 默认地址
      port: 7545,            // Ganache 默认端口
      network_id: "*",       // 匹配任何网络 id
    },
  },
  compilers: {
    solc: {
      version: "0.8.0",      // 指定 Solidity 编译器版本
    },
  },
};

确保 Ganache 已经启动,并监听在上述配置的地址和端口上。


五、编译智能合约

在项目根目录下执行以下命令,编译智能合约:

truffle compile

编译成功后,生成的 ABI 和字节码将存放在 build/contracts/ 目录下。


六、部署智能合约

在 migrations/ 目录下创建一个新的部署脚本 2_deploy_contracts.js,内容如下:(learnblockchain.cn)

const SimpleStorage = artifacts.require("SimpleStorage");

module.exports = function (deployer) {
  deployer.deploy(SimpleStorage);
};

然后执行以下命令,部署合约到 Ganache:

truffle migrate --network development

部署成功后,终端会显示合约的部署地址和交易哈希。


七、与智能合约交互

Truffle 提供了一个交互式控制台,方便与部署的合约进行交互。

truffle console --network development

在控制台中,执行以下命令:

// 获取合约实例
let instance = await SimpleStorage.deployed();

// 设置数据
await instance.set(42);

// 获取数据
let value = await instance.get();
value.toString(); // 输出: '42'

通过上述操作,我们成功地与部署在 Ganache 上的智能合约进行了交互。


八、编写测试用例

在 test/ 目录下创建一个测试文件 simpleStorage.test.js,内容如下:

const SimpleStorage = artifacts.require("SimpleStorage");

contract("SimpleStorage", (accounts) => {
  it("should store and retrieve the correct value", async () => {
    const instance = await SimpleStorage.deployed();
    await instance.set(100);
    const result = await instance.get();
    assert.equal(result.toString(), "100", "The value 100 was not stored.");
  });
});

执行以下命令运行测试:

truffle test

如果测试通过,终端会显示测试成功的信息。


九、总结

本文通过一个简单的示例,演示了如何使用 Truffle 和 Ganache 开发、部署以太坊智能合约的全过程。从环境搭建、合约编写、部署到测试,每一步都进行了详细的说明。掌握这些基础知识,将为你进一步开发复杂的去中心化应用(DApp)打下坚实的基础。


Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐