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

在这里插入图片描述

文章目录

  • 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.mzph.cn/news/692526.shtml

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

相关文章

【MySQL】Navicat/SQLyog连接Ubuntu中的数据库(MySQL)

🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》 🛸学无止境,不骄不躁,知行合一 文章目录 前言一、安装…

Burp常见问题

前言 本文举例了几个常见的软件工具使用问题,文末会提供一些我自己整理和使用的工具资料 。 "在追逐零 Bug 的路上,我们不断学习、改进,更加坚定自己的技术信念。让我们相信,每一个 Bug 都是我们成长的机会。" 一、VM…

2 F. Greetings(离散化+树状数组)

题目链接 F. Greetings 题意 题解 由于两个人的速度是一样的,所以到达终点之前两个人是不会相遇的,考虑一下什么情况两个人会相遇,其中一个人到达终点时,另一个人,终点所在地的前面,并且它的终点在更右边…

模式匹配这么好,Java语法里有吗?

这篇文章我们借助新版Java来理解模式匹配,Rust版的模式匹配稍后就端上来,各位先尝尝Java这杯老咖啡还香不香😄。 什么是模式匹配? 下图直观的表达了模式匹配的概念。 所谓模式类似上图中木盒的各种形状的洞洞,我们…

Unable to make field private JavacProcessingEnvironment$DiscoveredPro报错解决办法

maven项目打包报错 报错信息 Unable to make field private com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs accessible: module jdk.compiler does not &q…

proxysql

这里是引用 mysql 安装 mysql-3307 mysql -P 3307 -u root -proot -h 10.211.55.8create database db1; CREATE TABLE db1.tab_20240102 (id INT PRIMARY KEY,name VARCHAR(50),email VARCHAR(50),age INT ); CREATE TABLE db1.tab_20240103 (id INT PRIMARY KEY,name V…

2.20总结

根据这周的学习任务在学习KMP算法和哈希算法,这两种算法主要都用于字符串,而且学习起来都有一定的难度,刚开始的时候一个视频要看好几遍才能弄懂,但是经过这两天的学习也有了一定的收KMP 我通过一小段简单的代码来强化我对于KMP算法的理解&a…

postgis sde表在geoserver中服务发布

文章目录 简要说明maven依赖样例代码 简要说明 利用开源工具geoserver-manager&#xff0c;对postgresql的空间表进行地图服务发布 maven依赖 <dependency><groupId>com.github.dov-vlaanderen</groupId><artifactId>geoserver-manager</artifact…

【MySQL】 多表查询与笛卡尔积深入学习

推荐一款AI网站 AI写作与AI绘画智能创作平台 - 海鲸AI | 智能AI助手&#xff0c;可以免费领取GPT3.5无限卡 在数据库操作中&#xff0c;多表查询是一项基础而重要的技能。它允许我们从多个表中检索数据&#xff0c;以便进行复杂的数据分析和报告。本文将深入探讨MySQL中的多表查…

model.train()和model.eval()两种模式的原理

1. model.train() 在使用 pytorch 构建神经网络的时候&#xff0c;训练过程中会在程序上方添加一句model.train()&#xff0c;作用是 启用 batch normalization 和 dropout 。 如果模型中有BN层&#xff08;Batch Normalization&#xff09;和 Dropout &#xff0c;需要在 训练…

3. B. Milena and Admirer(贪心、小结论、思维)

题目链接 B. Milena and Admirer 题意 给一个长度为 n n n的序列&#xff0c;我们通过操作使这个序列变成非递减序列 操作&#xff1a;对 a [ i ] a[i] a[i]&#xff0c;我们将 a [ i ] a[i] a[i]删除&#xff0c;将 a [ i ] − x 、 x a[i]-x、x a[i]−x、x插入原位置&…

Oracle19c | 操作归纳

本篇目录 1. PDB 可插拔数据库1.1 创建 PDB 1. PDB 可插拔数据库 1.1 创建 PDB # oralce 19c 创建 pdb CREATE PLUGGABLE DATABASE pdb_name ADMIN USER username IDENTIFIED BY password; # oralce 19c 启用数据库 ALTER PLUGGABLE DATABASE pdb_name OPEN; # 切换 pdb alte…

【感知算法】Dempster-Shafer理论(下)

尝试DS理论应用到自动驾驶地图众包更新。 地图特征变化判断 a mass function is applied to quantify the evidence of the existence. existence state: existenct、non-existent、tenative、conflict ∃ ∄ Ω ϕ \exist \\ \not\exist \\ \Omega \\ \phi ∃∃Ωϕ ma…

对 babel 的了解,几个 stage 代表的意思

What is Babel? Babel Babel 是一个广泛使用的 JavaScript 编译器&#xff0c;它主要用于将 ECMAScript 2015&#xff08;ES6&#xff09;代码转换为向后兼容的 JavaScript 版本&#xff0c;以便在不同浏览器和环境中运行。Babel 具有强大的插件系统&#xff0c;可以通过插件…

阿里云服务器多少钱?2024年阿里云服务器价格配置表出炉!

2024年阿里云服务器租用价格表更新&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服…

docker的底层原理六: 联合文件系统(UnionFS)

Docker的底层存储原理基于联合文件系统&#xff08;UnionFS&#xff09;。 联合文件系统&#xff08;UnionFS&#xff09;是一种特殊的文件系统&#xff0c;它允许独立地叠加多个目录层&#xff0c;呈现给用户的是这些目录层的联合视图。这种结构使得在Docker中&#xff0c;不…

【xlwings】结合pandas做类似vlookup的功能

参考自CSDN 导入模块 import pandas as pd import xlwings as xw创建sheet #创建excel文档wb xw.Book() # 创建一个Excel进程App, 并在App中新建一个Book,Book下自动创建一个Sheetwb.save(文件)##excel表显示设定appxw.App(visibleFalse,add_bookFalse)app.display_alertsF…

jmeter 命令行启动 动态参数化

[Jmeter命令行参数] 一、在linux中&#xff0c;使用非gui的方式执行jmeter。若需更改参数&#xff0c;必须先编辑jmx文件&#xff0c;找到对应的变量进行修改&#xff0c;比较麻烦。因此&#xff0c;可以参数化一些常用的变量&#xff0c;直接在Jmeter命令行进行设置 二、参数…

尚硅谷ES基础 - RESTful JSON基本概念倒排索引HTTP

RESTful & JSON REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。 Web 应用程序最重要的 REST 原则是&#xff0c;客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。…

自动驾驶中之定位总结

1 前言2 典型的单个定位方式2.1 基于通信的定位方法2.1.1 GNSS 全球卫星导航系统2.1.1.1 gnss的优点与缺点2.1.1.2 gnss定位技术2.1.1.2.1 RTK定位技术2.1.1.2.2 PPP定位技术 2.1.1.2 gnss定位技术总结 2.1.2 车联网定位 2.1 基于航位推算的定位方法2.1.1 惯性测试单元定位IMU2…