《Solidity 简易速速上手小册》第2章:搭建 Solidity 开发环境(2024 最新版)

news/发布时间2024/5/14 12:08:33

在这里插入图片描述

文章目录

  • 2.1 安装和配置 Solidity
    • 2.1.1 基础知识解析
      • 安装 Solidity 编译器
      • 配置开发环境
      • 熟悉命令行工具
    • 2.1.2 重点案例:配置本地开发环境
      • 案例 Demo:配置本地 Solidity 环境
      • 案例代码:HelloWorld.sol
    • 2.1.3 拓展案例 1:设置 Remix IDE
      • 案例 Demo:在 Remix IDE 中编写和测试智能合约
      • 案例代码:Greeter.sol
    • 2.1.4 拓展案例 2:使用 Truffle 框架
      • 案例 Demo:使用 Truffle 创建和测试一个智能合约
      • 案例代码:SimpleStorage.sol
      • 迁移脚本:2_deploy_contracts.js
      • 测试用例:simplestorage_test.js
  • 2.2 开发工具和 IDE 简介
    • 2.2.1 基础知识解析
      • 集成开发环境(IDE)的重要性
      • 常用的 Solidity 开发工具
      • 选择适合的工具
    • 2.2.2 重点案例:使用 Visual Studio Code 开发 Solidity
      • 案例 Demo:在 VS Code 中开发一个简单的智能合约
      • 案例代码:HelloWorld.sol
      • 测试和运行合约
    • 2.2.3 拓展案例 1:使用 Remix IDE 进行快速原型开发
      • 案例 Demo:在 Remix IDE 中创建和测试一个智能合约
      • 案例代码:SimpleStorage.sol
      • 在 Remix 中测试合约
    • 2.2.4 拓展案例 2:使用 Truffle 和 Ganache 进行开发和测试
      • 案例 Demo:在 Truffle 和 Ganache 环境中开发和测试智能合约
      • 案例代码:SimpleStorage.sol
      • 迁移脚本:2_deploy_contracts.js
      • 测试脚本:simplestorage.test.js
  • 2.3 测试和调试工具
    • 2.3.1 基础知识解析
      • 测试的重要性
      • 测试类型
      • 常用的测试工具
      • 调试工具
    • 2.3.2 重点案例:使用 Truffle 进行智能合约测试
      • 案例 Demo:在 Truffle 中测试智能合约
      • 案例代码:MyContract.sol
      • 迁移脚本:2_deploy_contracts.js
      • 测试脚本:mycontract_test.js
    • 2.3.3 拓展案例 1:使用 Mocha 和 Chai 进行单元测试
      • 案例 Demo:使用 Mocha 和 Chai 测试 Solidity 合约
      • 案例代码:Calculator.sol
      • 测试脚本:calculator_test.js
    • 2.3.4 拓展案例 2:使用 Remix 进行交互式测试和调试
      • 案例 Demo:在 Remix IDE 中进行交互式测试和调试
      • 案例代码:Counter.sol
      • 在 Remix 中进行调试:

2.1 安装和配置 Solidity

欢迎来到 Solidity 的世界,一个充满奇幻和机遇的新大陆!让我们从基础开始,一步步搭建起你的 Solidity 开发环境。

2.1.1 基础知识解析

欢迎来到搭建 Solidity 开发环境的第一步!这就像是你准备登陆一个新星球,首先需要确保你的太空船设备就绪。让我们来详细了解一下如何开始这一激动人心的旅程。

安装 Solidity 编译器

1. 使用 npm 安装: Solidity 的主流安装方式是通过 npm。在你的命令行工具中输入 npm install -g solc 即可全局安装 Solidity 编译器。这个命令会将 Solidity 安装到你的机器上,使得它可以在任何项目中使用。

2. 版本管理: Solidity 版本更新频繁,每个版本都可能带来新功能或语法改变。你可以通过命令 solcjs --version 查看当前安装的版本。为了确保与教程或项目的兼容性,你可能需要安装特定版本的 Solidity。

配置开发环境

1. 选择 IDE: 选择一个合适的集成开发环境(IDE)对提高开发效率至关重要。对于初学者,Remix IDE 是一个优秀的在线选择,它提供了编写、编译、部署和测试智能合约的一体化体验。而对于更习惯于本地开发的人,Visual Studio Code 加上 Solidity 插件是个不错的选择。

2. 安装必要插件: 在 Visual Studio Code 中,你可以通过安装 Solidity 插件来获得语法高亮、代码自动完成和格式化等功能。这些插件将大大提高你的编码效率。

3. 配置编译器: 不同的 IDE 对编译器的配置方式可能有所不同。在 Visual Studio Code 中,你可能需要在项目的设置中指定 Solidity 编译器的路径或版本。而在 Remix 中,你可以直接在网页界面上选择不同版本的编译器。

熟悉命令行工具

虽然许多 IDE 提供了图形界面来简化操作,但了解如何通过命令行使用 Solidity 编译器仍然很重要。学会使用命令行工具将使你能更灵活地控制编译过程,并更好地理解背后的过程。

就像每位太空探险者都需要了解自己的太空船一样,每位 Solidity 开发者也需要熟悉自己的开发环境。通过掌握这些基础知识,你将能够顺利地开始你的 Solidity 开发之旅,探索智能合约的无限可能性。

2.1.2 重点案例:配置本地开发环境

假设你是一名热衷于区块链技术的开发者,希望在本地机器上配置一个功能齐全的 Solidity 开发环境。这将使你能够高效地编写、测试和部署智能合约。

案例 Demo:配置本地 Solidity 环境

  1. 安装 Node.js 和 npm:

    • 访问 Node.js 官网,下载并安装 Node.js。这通常会自动安装 npm。
    • 安装完成后,在命令行中运行 node -vnpm -v 来确认它们已正确安装。
  2. 安装 Solidity 编译器(solc):

    • 在命令行中运行 npm install -g solc 安装 Solidity 编译器。
    • 使用 solcjs --version 命令来验证安装。
  3. 配置 Visual Studio Code:

    • 下载并安装 Visual Studio Code。
    • 打开 VS Code,搜索并安装 Solidity 插件,如 Juan Blanco's Solidity 插件,以获得语法高亮和代码智能提示。
  4. 安装 Truffle Framework:

    • Truffle 是一个流行的开发框架,用于编写、测试和部署智能合约。在命令行中运行 npm install -g truffle 来安装它。
    • 使用 truffle version 来确认安装。
  5. 创建和测试一个简单的智能合约:

    • 创建一个新的目录作为你的项目文件夹,并在其中运行 truffle init 初始化一个新的 Truffle 项目。
    • contracts 目录下创建一个新的 Solidity 文件,如 HelloWorld.sol,并编写一个简单的智能合约。
    • migrations 目录下创建一个迁移脚本来部署你的合约。
    • 运行 truffle develop 开启一个内置的 Ethereum 测试网络,并在该环境下运行 compilemigrate 命令来编译和部署你的合约。
    • 编写测试脚本并在 Truffle 开发环境中运行 test 命令来测试你的合约。

案例代码:HelloWorld.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract HelloWorld {string public greeting = "Hello, World!";function setGreeting(string memory _greeting) public {greeting = _greeting;}function getGreeting() public view returns (string memory) {return greeting;}
}

在这个案例中,我们配置了一个完整的本地开发环境,可以用于创建和测试 Solidity 项目。使用这样的环境,你可以高效地开发复杂的 DApps 和智能合约。

恭喜你!现在你已经配置好了自己的 Solidity 开发环境。这就像是为你的宇宙探索之旅装配了一个先进的太空船。现在,你已经准备好进入智能合约和区块链技术的奇妙世界,进行你的创新之旅了!

2.1.3 拓展案例 1:设置 Remix IDE

假设你是一位初入区块链领域的新手,希望通过一个简单、直观的方式开始你的 Solidity 学习之旅。Remix IDE 是一个完美的起点,它是一个基于浏览器的 Solidity 集成开发环境,适合快速开始和原型开发。

案例 Demo:在 Remix IDE 中编写和测试智能合约

  1. 访问 Remix IDE:

    • 打开浏览器,访问 Remix IDE 官网。
  2. 创建新文件:

    • 在 Remix IDE 中,点击左侧的“文件浏览器”图标,然后点击“新建文件”图标。
    • 命名新文件为 Greeter.sol
  3. 编写智能合约:

    • Greeter.sol 文件中编写一个简单的问候合约。这个合约包含一个可以存储和更改问候语的功能。
  4. 编译合约:

    • 点击左侧的“Solidity 编译器”图标。
    • 选择合适的编译器版本,然后点击“编译 Greeter.sol”。
  5. 部署和运行合约:

    • 点击左侧的“部署和运行交易”图标。
    • 选择一个环境(如 JavaScript VM)。
    • 点击“部署”来部署你的合约到虚拟环境中。
    • 一旦部署,你就可以与合约交互,尝试调用它的函数。

案例代码:Greeter.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract Greeter {string public greeting;constructor(string memory _initialGreeting) {greeting = _initialGreeting;}function setGreeting(string memory _newGreeting) public {greeting = _newGreeting;}function greet() public view returns (string memory) {return greeting;}
}

在这个案例中,我们创建了一个简单的 Greeter 合约,它允许用户设置和检索一个问候语。通过 Remix IDE,我们可以轻松编写、编译、部署和测试智能合约,无需复杂的配置。

使用 Remix IDE,你就像是在一个安全的沙盒环境中进行实验,它为你提供了学习和探索 Solidity 的理想场所。现在,你已经准备好用这个强大的工具来探索更多智能合约的奇妙世界了!

2.1.4 拓展案例 2:使用 Truffle 框架

假设你已经熟悉了基本的 Solidity 编程,现在准备进一步探索更复杂的项目。Truffle 框架是一个完善的开发环境,它提供了编译、部署、测试智能合约的强大工具。对于希望进行全面区块链开发的人来说,Truffle 是一个理想的选择。

案例 Demo:使用 Truffle 创建和测试一个智能合约

  1. 安装 Truffle:

    • 在命令行中运行 npm install -g truffle,全局安装 Truffle。
    • 安装完成后,使用 truffle version 来确认安装成功。
  2. 初始化 Truffle 项目:

    • 创建一个新的目录作为你的项目文件夹,例如命名为 MyTruffleProject
    • 在该目录下打开命令行,运行 truffle init 初始化一个新的 Truffle 项目。
  3. 创建智能合约:

    • contracts 文件夹中创建一个新的 Solidity 文件,例如 SimpleStorage.sol
    • 编写一个基础的智能合约,用于存储和检索一个数值。
  4. 编译合约:

    • 在项目根目录下,运行 truffle compile 编译智能合约。
  5. 编写迁移脚本:

    • migrations 目录下创建一个新的迁移脚本,例如 2_deploy_contracts.js,用于部署你的智能合约。
  6. 测试智能合约:

    • test 文件夹中创建一个 JavaScript 或 Solidity 测试文件,例如 simplestorage_test.js
    • 编写测试用例来测试智能合约的功能。
    • 运行 truffle test 在测试网络上执行测试。

案例代码:SimpleStorage.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract SimpleStorage {uint256 private storedData;function set(uint256 x) public {storedData = x;}function get() public view returns (uint256) {return storedData;}
}

迁移脚本:2_deploy_contracts.js

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

测试用例:simplestorage_test.js

const SimpleStorage = artifacts.require("SimpleStorage");contract("SimpleStorage", () => {it("should store the value 89.", async () => {const storage = await SimpleStorage.deployed();await storage.set(89);const storedData = await storage.get();assert.equal(storedData, 89, "The value 89 was not stored.");});
});

在这个案例中,我们使用 Truffle 框架创建了一个名为 SimpleStorage 的智能合约,它简单地存储和检索一个数值。我们编写了迁移脚本来部署合约,并添加了测试用例来验证其功能。

通过使用 Truffle 框架,你可以体验到更专业和全面的智能合约开发过程。从编写和编译合约到测试和部署,Truffle 为你提供了一站式的解决方案。现在,你已经准备好用这个强大的框架来挑战更复杂的区块链项目了!

现在你已经了解了如何搭建和配置你的 Solidity 开发环境。无论是选择轻便的在线 IDE 还是配置全功能的本地环境,记得选择最适合你项目需求的工具。就像每个航海家都需要适合自己的航海图一样,每个 Solidity 开发者也需要适合自己的开发环境。现在,让我们扬帆起航,进入 Solidity 的奇妙世界吧!

2.2 开发工具和 IDE 简介

嘿,区块链的朋友们!让我们深入探索 Solidity 的神奇世界。要开始这趟旅程,你需要一些强大的工具。就像选择最佳的潜水装备一样,选择合适的开发工具和 IDE 对于编写高效、无错误的智能合约至关重要。

2.2.1 基础知识解析

开发 Solidity 智能合约就像是进行一次宇宙探索,你需要装备最先进的工具和技术。让我们深入了解一下这些工具,确保你的编程之旅顺利无阻。

集成开发环境(IDE)的重要性

  1. 功能集成: IDE 集成了编写、编译、测试和调试智能合约所需的所有工具。这就像是你的太空舱,提供了一切生存和探索所需的设备。

  2. 代码高效编写: 大多数 IDE 提供语法高亮、代码自动完成、错误提示等功能,使编写代码更加高效、准确。

  3. 错误检测与调试: IDE 能够帮助你快速定位代码中的错误,并提供调试工具来测试和优化代码。

常用的 Solidity 开发工具

  1. Remix IDE:

    • 适用场景: 快速原型开发、学习和小型项目。
    • 特点: 基于浏览器,无需安装,支持即时编译和部署。
  2. Visual Studio Code(VS Code):

    • 适用场景: 广泛的项目类型,从初学者到专业开发。
    • 特点: 高度可定制,丰富的插件生态,如 Solidity 插件。
  3. Truffle Suite:

    • 组件: 包括 Truffle、Ganache 和 Drizzle。
    • 适用场景: 复杂的 DApp 开发和测试。
    • 特点: 提供了编译、部署、测试智能合约的完整工具链。

选择适合的工具

选择 IDE 和工具时,考虑以下因素:

  • 项目需求: 不同的项目可能需要不同的工具。例如,简单的学习项目可能只需要 Remix,而大型复杂项目可能会从 Truffle Suite 中受益。

  • 个人喜好: 一些开发者可能更喜欢具有丰富功能和可定制性的环境,比如 VS Code,而其他人可能更倾向于简单易用的在线工具,如 Remix。

  • 学习曲线: 对于初学者来说,开始时使用简单直观的工具可能更容易上手。随着经验的积累,可以逐渐过渡到更复杂的工具和环境。

2.2.2 重点案例:使用 Visual Studio Code 开发 Solidity

想象一下,你正站在智能合约的大门前,准备使用 Visual Studio Code(VS Code)这把钥匙来解锁这扇门。VS Code 是一个功能强大的编辑器,通过合适的设置和插件,它可以成为开发 Solidity 的理想环境。

案例 Demo:在 VS Code 中开发一个简单的智能合约

  1. 安装 Visual Studio Code:

    • 访问 Visual Studio Code 官网,下载并安装 VS Code。
  2. 安装 Solidity 插件:

    • 打开 VS Code,转到扩展市场,搜索并安装一个 Solidity 插件,例如由 Juan Blanco 开发的插件。
  3. 配置 Solidity 环境:

    • 在 VS Code 中,通过设置(通常在文件 > 首选项 > 设置中)确保 Solidity 编译器配置正确。
    • 你可以设置默认的 Solidity 编译器版本,以确保与你的项目兼容。
  4. 创建和编写智能合约:

    • 在 VS Code 中创建一个新的项目文件夹,例如命名为 MySolidityProject
    • 在该文件夹中创建一个新的 Solidity 文件,如 HelloWorld.sol
    • 编写一个简单的智能合约,比如一个可以存储和返回问候语的合约。
  5. 编译智能合约:

    • 使用 VS Code 的集成终端运行 Solidity 编译器(solc),或者通过插件提供的功能编译你的合约。

案例代码:HelloWorld.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract HelloWorld {string private greeting;constructor(string memory _greeting) {greeting = _greeting;}function setGreeting(string memory _greeting) public {greeting = _greeting;}function getGreeting() public view returns (string memory) {return greeting;}
}

在这个简单的 HelloWorld 合约中,我们设置了一个可以更改的问候语。这个合约展示了 Solidity 的基本结构,包括构造函数、状态变量、函数和可见性修饰符。

测试和运行合约

  • 虽然 VS Code 本身不直接运行 Solidity 合约,但你可以使用 Truffle 或其他框架来测试和部署你的合约。
  • 编写测试脚本,并使用 Truffle 在本地或测试网络上部署和测试合约。

通过使用 Visual Studio Code,你已经迈出了成为 Solidity 开发者的第一步。现在,你拥有了编写、测试和完善智能合约所需的所有工具。

2.2.3 拓展案例 1:使用 Remix IDE 进行快速原型开发

想象你正站在一个巨大的乐高玩具箱前,准备开始你的创造之旅。Remix IDE 就像这样一个充满乐趣的工具箱,让你快速开始 Solidity 开发,无需复杂的配置或安装过程。

案例 Demo:在 Remix IDE 中创建和测试一个智能合约

  1. 访问 Remix IDE:

    • 打开浏览器,访问 Remix IDE。
  2. 创建新的 Solidity 文件:

    • 在 Remix 中,点击左侧的“文件浏览器”图标,然后点击“新建文件”图标。
    • 命名新文件为 SimpleStorage.sol
  3. 编写智能合约:

    • SimpleStorage.sol 文件中编写一个基本的智能合约,例如一个可以存储和检索数字的合约。
  4. 编译合约:

    • 点击左侧的“Solidity 编译器”图标。
    • 选择合适的编译器版本,然后点击“编译 SimpleStorage.sol”。
  5. 部署和测试合约:

    • 点击左侧的“部署和运行交易”图标。
    • 选择一个环境(例如 JavaScript VM)。
    • 点击“部署”来部署你的合约。
    • 一旦部署完成,使用 Remix 提供的界面与合约交互。

案例代码:SimpleStorage.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract SimpleStorage {uint256 private storedData;function set(uint256 x) public {storedData = x;}function get() public view returns (uint256) {return storedData;}
}

在这个 SimpleStorage 合约中,我们定义了两个函数:set 用于存储一个数字,get 用于检索存储的数字。这个合约展示了 Solidity 的基本功能,非常适合作为初学者的第一个项目。

在 Remix 中测试合约

  • 通过 Remix 的界面,你可以调用 set 函数存储一个数字,然后调用 get 函数来查看存储的结果。
  • Remix 提供了一个简单直观的方式来与你的合约进行交互,让测试过程变得轻松愉快。

使用 Remix IDE,你可以轻松跳入 Solidity 开发的大海,开始你的编程之旅。它是一个完美的学习工具,让你在没有任何压力的情况下实验和探索智能合约的世界。

2.2.4 拓展案例 2:使用 Truffle 和 Ganache 进行开发和测试

假如你是一个热衷于探索和创新的开发者,渴望在一个更接近真实环境的模拟场景中测试你的智能合约。在这里,Truffle 和 Ganache 就像是你的探险装备,帮助你在安全的环境中模拟真实的区块链操作。

案例 Demo:在 Truffle 和 Ganache 环境中开发和测试智能合约

  1. 安装 Truffle 和 Ganache:

    • 使用 npm 安装 Truffle:在命令行中运行 npm install -g truffle
    • 下载并安装 Ganache,一个个人的以太坊区块链用于开发。
  2. 初始化 Truffle 项目:

    • 创建一个新的目录,例如 MyTruffleProject
    • 在该目录下,运行 truffle init 初始化一个新的 Truffle 项目。
  3. 编写智能合约:

    • contracts 目录中创建一个新的 Solidity 文件,如 SimpleStorage.sol
    • 编写一个智能合约,例如用于存储和检索数值的合约。
  4. 编写迁移脚本:

    • migrations 目录中创建一个新的迁移脚本,如 2_deploy_contracts.js,用于部署智能合约。
  5. 配置 Truffle 以使用 Ganache:

    • 在 Truffle 的配置文件 truffle-config.js 中设置 Ganache 作为开发环境。
  6. 编译和部署合约:

    • 在命令行中运行 truffle compile 编译智能合约。
    • 然后运行 truffle migrate 将合约部署到 Ganache。
  7. 编写和运行测试:

    • test 目录下创建测试脚本,例如 simplestorage.test.js
    • 编写测试用例,然后使用 truffle test 运行测试。

案例代码:SimpleStorage.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract SimpleStorage {uint256 private storedData;function set(uint256 x) public {storedData = x;}function get() public view returns (uint256) {return storedData;}
}

迁移脚本:2_deploy_contracts.js

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

测试脚本:simplestorage.test.js

const SimpleStorage = artifacts.require("SimpleStorage");contract("SimpleStorage", () => {it("should store and retrieve a value", async () => {const storage = await SimpleStorage.deployed();await storage.set(10);const storedData = await storage.get();assert.equal(storedData, 10, "The value 10 was not stored.");});
});

在这个案例中,我们使用 Truffle 创建了一个 SimpleStorage 智能合约,它可以存储和检索一个数值。通过 Ganache,我们可以在一个个人的模拟区块链上进行部署和测试,这提供了一个安全和控制的开发环境。

通过使用 Truffle 和 Ganache,你将能体验到一个接近实际的区块链开发环境。这样的工具使你能够在安全的沙盒中测试你的合约,为将来的部署到主网做好准备。开始你的开发之旅,享受创造的乐趣吧!

好了,现在你已经了解了 Solidity 开发的各种工具和 IDE。不论你是刚入门的新手还是经验丰富的开发者,总有一款工具适合你。现在,拿起你的工具,开始创造属于你的智能合约世界吧!

2.3 测试和调试工具

开发智能合约就像是在未知星球上建造一座建筑,测试和调试工具就是你的安全网和工具箱,确保一切按计划进行,没有意外发生。

2.3.1 基础知识解析

在 Solidity 开发的宇宙中,测试和调试工具是你的导航系统和维修工具包。它们确保你的智能合约能够在广阔的区块链宇宙中平稳航行,避免遭遇意外的陨石撞击。

测试的重要性

  1. 保障合约安全: 测试是确保智能合约代码安全、高效且按预期工作的关键步骤。合约一旦部署,就无法更改,因此前期的测试至关重要。

  2. 减少漏洞风险: 通过全面的测试,可以识别并修复可能导致安全漏洞的代码问题,这对于防止攻击和保护用户资产至关重要。

测试类型

  1. 单元测试: 检查智能合约中的单个函数或组件。这就像检查你的太空船的每个小部件是否正常工作。

  2. 集成测试: 测试合约之间的交互,确保它们作为一个整体协同工作。

  3. 端到端测试: 模拟用户与合约的交互,确保整个系统从开始到结束都能如预期运行。

常用的测试工具

  1. Truffle: 提供了一套完整的开发环境,包括用于测试的框架。Truffle 测试通常用 JavaScript 或 Solidity 编写。

  2. Ganache: 作为 Truffle Suite 的一部分,Ganache 是一个个人区块链,可用于快速开发和测试智能合约。

  3. Mocha 和 Chai: 这两个 JavaScript 测试库常与 Truffle 结合使用,提供了灵活的测试结构和丰富的断言功能。

调试工具

  1. Remix IDE: 提供了一个交互式的 Solidity 调试器,使得查看交易执行步骤和状态变化成为可能。

  2. Truffle Debugger: 一个命令行工具,允许开发者在执行时检查交易和跟踪代码。

掌握这些基础知识,你就可以像一个经验丰富的太空工程师一样,确保你的智能合约在任何环境下都表现出色。记住,良好的测试和调试不仅能够保护你的合约免受外部威胁,还能提升用户对你项目的信心。准备好了吗?让我们开始测试之旅,确保你的智能合约是无懈可击的!

2.3.2 重点案例:使用 Truffle 进行智能合约测试

假设你是一个区块链开发者,正在开发一个智能合约并希望确保其稳定性和安全性。使用 Truffle 进行测试是个非常好的选择。Truffle 不仅是一个开发框架,它还提供了强大的测试功能。

案例 Demo:在 Truffle 中测试智能合约

  1. 安装 Truffle:

    • 在命令行中运行 npm install -g truffle 安装 Truffle。
  2. 初始化 Truffle 项目:

    • 创建一个新目录,如 TruffleTesting
    • 在该目录中运行 truffle init 初始化 Truffle 项目。
  3. 编写智能合约:

    • contracts 目录下创建一个新的 Solidity 文件,如 MyContract.sol
    • 编写一个简单的智能合约。例如,一个可以存储和检索数字的合约。
  4. 编写迁移脚本:

    • migrations 目录下创建一个新的迁移脚本,如 2_deploy_contracts.js,用于部署智能合约。
  5. 编写测试脚本:

    • test 目录下创建一个 JavaScript 测试脚本,如 mycontract_test.js
    • 使用 JavaScript 和 Truffle 提供的断言库编写测试用例。
  6. 运行测试:

    • 在项目根目录下运行 truffle test,执行测试脚本。

案例代码:MyContract.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract MyContract {uint256 private number;function storeNumber(uint256 _number) public {number = _number;}function retrieveNumber() public view returns (uint256) {return number;}
}

迁移脚本:2_deploy_contracts.js

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

测试脚本:mycontract_test.js

const MyContract = artifacts.require("MyContract");contract("MyContract", () => {it("should store and retrieve a value", async () => {const myContract = await MyContract.deployed();await myContract.storeNumber(10);const retrievedNumber = await myContract.retrieveNumber();assert.equal(retrievedNumber, 10, "The value 10 was not stored.");});
});

在这个案例中,我们使用 Truffle 编写了 MyContract 合约,并创建了相应的测试脚本。通过这些测试,我们可以确保合约的主要功能 —— 存储和检索一个数字 —— 按预期工作。

通过使用 Truffle 进行智能合约测试,你就像是给你的太空船安装了一套先进的检测系统。这些测试确保你的合约能够在各种条件下正常工作,为最终的发射做好准备。

2.3.3 拓展案例 1:使用 Mocha 和 Chai 进行单元测试

设想你是一名致力于精确和高效率的开发者,正在寻找一种方法来确保你的智能合约中的每个函数都按预期工作。在这种情况下,Mocha 和 Chai 这两个 JavaScript 测试框架和断言库将是你理想的伙伴。

案例 Demo:使用 Mocha 和 Chai 测试 Solidity 合约

  1. 准备 Truffle 项目:

    • 确保你已经有一个使用 Truffle 框架的项目。如果没有,可以按照上一个案例中的步骤创建。
  2. 安装 Mocha 和 Chai:

    • 通常,Truffle 项目已经包含 Mocha 和 Chai,因此你不需要单独安装。如果需要,可以使用 npm 安装:npm install mocha chai
  3. 编写智能合约:

    • contracts 目录下,创建一个新的 Solidity 文件,比如 Calculator.sol
    • 编写一个简单的计算器合约,它能进行基本的数学运算。
  4. 编写测试用例:

    • test 目录下,创建一个 JavaScript 测试文件,比如 calculator_test.js
    • 使用 Mocha 定义测试套件,并使用 Chai 的断言进行测试。
  5. 运行测试:

    • 在命令行中运行 truffle test 来执行测试。

案例代码:Calculator.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract Calculator {function add(uint256 a, uint256 b) public pure returns (uint256) {return a + b;}function subtract(uint256 a, uint256 b) public pure returns (uint256) {return a - b;}
}

测试脚本:calculator_test.js

const Calculator = artifacts.require("Calculator");
const { assert } = require("chai");contract("Calculator", () => {let calculator;before(async () => {calculator = await Calculator.deployed();});it("should correctly add two numbers", async () => {const result = await calculator.add(2, 3);assert.equal(result.toNumber(), 5, "The sum of 2 and 3 should be 5");});it("should correctly subtract two numbers", async () => {const result = await calculator.subtract(5, 3);assert.equal(result.toNumber(), 2, "The difference of 5 and 3 should be 2");});
});

在这个案例中,我们创建了一个 Calculator 合约,它包含两个基本的数学运算函数。通过编写对应的 Mocha 测试用例,并使用 Chai 的断言,我们能够验证这些函数是否按预期工作。

通过结合使用 Mocha 和 Chai,你可以对智能合约的每个功能进行细致入微的测试。这就像是给你的太空船的每个部件都进行了精确的工程检查,确保在真正启航之前,一切都运行完美。

2.3.4 拓展案例 2:使用 Remix 进行交互式测试和调试

设想你是一名刚入门的 Solidity 开发者,正在寻找一种直观、易于使用的方式来测试和调试你的智能合约。Remix IDE 提供了一个完美的平台,它不仅支持交互式的代码编写和编译,还提供了强大的测试和调试功能。

案例 Demo:在 Remix IDE 中进行交互式测试和调试

  1. 访问 Remix IDE:

    • 使用浏览器打开 Remix IDE。
  2. 创建新的 Solidity 文件:

    • 在 Remix 的“文件浏览器”中创建一个新文件,比如命名为 Counter.sol
  3. 编写智能合约:

    • Counter.sol 文件中,编写一个简单的计数器合约,包含增加和读取计数的功能。
  4. 编译合约:

    • 使用 Remix 中的编译器编译你的合约。
  5. 部署合约到 JavaScript VM:

    • 在“部署和运行交易”面板中,选择 JavaScript VM 环境。
    • 部署你的合约。
  6. 交互式测试合约:

    • 在部署后的合约界面中,尝试调用合约的不同函数,如增加计数器值。
  7. 使用 Remix 的调试功能:

    • 如果有必要,可以使用 Remix 的调试工具来检查交易执行情况和合约状态。

案例代码:Counter.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract Counter {uint public count;function increment() public {count += 1;}function getCount() public view returns (uint) {return count;}
}

在这个 Counter 合约中,我们定义了一个简单的计数器。你可以使用 Remix 的界面来调用 increment 函数,然后检查 getCount 函数的返回值是否如预期那样增加。

在 Remix 中进行调试:

  • 使用 Remix 的交易记录功能,你可以找到每次函数调用的详细信息。
  • 如果需要,可以点击交易记录旁的“调试”按钮,进入调试模式,逐步检查合约执行的每个步骤。

使用 Remix IDE 进行交互式测试和调试,对于初学者来说是一个非常友好的选择。它不仅使测试过程简单化,还提供了直观的反馈和强大的调试工具。

通过掌握这些测试和调试工具,你就能确保你的智能合约像在严苛环境下经过测试的宇航服一样,既安全又可靠。测试可能看起来是漫长的旅程,但为了你的合约能在广阔的区块链宇宙中稳定飞行,这一切都是值得的!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/hBYI/1065.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

OpenHarmony—UIAbility组件间交互(设备内)

UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时,会涉及到启动特定的UIAbility,该UIAbility可以是应用内的其他UIAbility,也可以是其他应用的UIAbility(例如启动三方支付UIAbility)。 本章节将从如下场…

PDF合并工具

简单的PDF合并工具 简述 为了帮助同事做报销,就临时用 Python 使用 PDF 库打包了一个PDF文件合并工具,这个虽然对于很多程序员来说都是很简单的事情,但是对于一些不是很了解计算机技术的人确实是一个很尴尬的功能。 很多 PDF 编辑软件的这个…

《汇编语言》- 读书笔记 - 实验 10 编写子程序

《汇编语言》- 读书笔记 - 实验 10 编写子程序 1. 显示字符串问题子程序描述 show_str提示结果演示 2. 解决除法溢出的问题问题子程序描述 divdw提示结果演示 3. 数值显示问题子程序描述 dtoc提示结果演示 在这次实验中,我们将要编写3个子程序,通过它们来…

【MySQL】多表关系的基本学习

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-3oES1ZdkKIklfKzq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

【GO语言卵细胞级别教程】05.项目创建和函数讲解

感谢!点点赞和评论呀!我将继续更新 目录: 感谢!点点赞和评论呀!我将继续更新0.创建项目1.函数的引入2.注意事项3.详细介绍3.1 形参介绍 4.导入包4.1 基本知识4.2 注意事项 5.init函数6.匿名函数 0.创建项目 创建目录 …

以太坊 Dencun 升级与潜在机会

撰文:Biteye 核心贡献者 Fishery Isla 文章来源Techub News专栏作者,搜Tehub News下载查看更多Web3资讯。 以太坊网络升级 Dencun 测试网版本在 2024 年 1 月 17 日上线了 Goerli 测试网,1 月 30 日成功上线了 Sepolia 测试网,D…

拼夕夕 拼多多关键词恢复供应,欢迎骚扰

API接口(Application Programming Interface)是一种定义了软件组件之间交互的规范。它允许不同的软件系统之间进行通信和数据交换,使得开发者可以利用已有的功能和服务来构建自己的应用程序。 API接口可以分为不同的类型,包括Web…

[计算机网络]---UDP协议

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、端口号…

《剑指 Offer》专项突破版 - 面试题 47 : 二叉树剪枝(C++ 实现)

题目链接:LCR 047. 二叉树剪枝 - 力扣(LeetCode) 题目: 一棵二叉树的所有节点的值要么是 0 要么是 1,请剪除该二叉树中所有节点的值全都是 0 的子树。例如,在剪除下图 (a) 中二叉树中所有节点值都为 0 的…

多模态基础---BERT

1. BERT简介 BERT用于将一个输入的句子转换为word_embedding,本质上是多个Transformer的Encoder堆叠在一起。 其中单个Transformer Encoder结构如下: BERT-Base采用了12个Transformer Encoder。 BERT-large采用了24个Transformer Encoder。 2. BERT的…

集群聊天项目

不懂的一些东西 (const TcpConnectionPtr&)作为形参啥意思:接收一个常量引用,函数内部不允许修改该指针所指向的对象。 客户端与服务器如何联系? 优势 1.网络层与业务层分离:通过网络层传来的id,设计一个map存储id以及对印的业务处理器,处理器bind绑定处理函数,…

【PyQt】12-滑块、计数控件

文章目录 前言一、滑块控件 QSlider运行结果 二、计数器控件 QSpinBox运行结果 总结 前言 1、滑块控件 2、计数控件 一、滑块控件 QSlider #Author :susocool #Creattime:2024/2/15 #FileName:28-滑块控件 #Description: 通过滑块选择字体大小 import sys from PyQ…

基于java的企业校园招聘平台的设计与实现

分享一个自己的毕业设计,想要获取源码的同学加V:qq2056908377 链接:https://pan.baidu.com/s/1It0CnXUvc9KVr1kDcHWvEw 提取码:1234 摘要: 摘要:本毕业设计旨在设计和实现一个企业校园招聘平台&#xf…

MIT-BEVFusion系列九--CUDA-BEVFusion部署2 create_core之参数设置

目录 加载命令行参数main 函数中的 create_core图像归一化参数体素化参数稀疏卷积网络参数真实世界几何空间参数 (雷达坐标系下体素网格的参数)解码后边界框的参数构建 bevfusion::Core 存储推理时需要的参数 本章开始,我们将一起看CUDA-BEVFusion的代码流程&#x…

微信小程序view设置margin-top和margin-button无效的解决方案

微信小程序view设置margin-top和margin-button无效的解决方案 问题发现解决过程解决问题正确办法综上所述,position、overflow、border属性都可以解决这个问题 制作不易,感谢三联,谢谢大家了 问题发现 当我新建一个微信小程序项目时&#xf…

适配器模式:接口转换的艺术,让不匹配成为过去式

适配器模式(Adapter Pattern)是一种结构型设计模式,它通过将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以一起工作。在Java中,适配器模式可以通过实现一个适配器类来实现两个不兼容接口之间的转…

Android Studio安装SDK失败解决办法

Android Studio安装SDK失败解决办法 安装SDK时界面会显示安装的连接,同时在你选择的安装SDK的文件夹里面会生成一些目录和文件,在你选择放SDK的目录下有一个叫做.temp的文件夹,里面放的就是下载的临时文件。 .temp内部的文件夹里面能看到下…

平时积累的FPGA知识点(7)

平时在FPGA群聊等积累的FPGA知识点,第七期: 11 描述扇出的xilinx官方文档是? 解释:ug949 12 在BD中如何指定某个IP用global,其他的用OOC模式?因为某个模块引用的IP带着XPM,综合不了 解释&am…

DS:栈和队列的相互实现

创作不易,感谢友友们三连!! 一、前言 栈和队列的相互实现是用两个栈去实现队列或者是用两个队列去实现栈,这样其实是把问题复杂化的,实际中没有什么应用价值,但是通过他们的相互实现可以让我们更加深入地理…

ChatGPT绘图指南:DALL.E3玩法大全(一)

一、 DALLE.3 模型介绍 1、什么是 DALLE.3 模型? DALLE-3模型,是一种由OpenAI研发的技术,它是一种先进的生成模型,可以将文字描述转化为清晰的图片。这种模型的名称"DALLE"实际上是"Deep Auto-regressive Latent …
推荐文章