编写、编译智能合约

本章学习如何使用 Harthat 编写、编译智能合约。

推特@Hita_DAO    DiscordHitaDAO

1. 编写智能合约

首先,新建一个智能合约目录,名称为 contracts

我们可以在 vscode 中创建:

 

也可以通过命令行创建:

mkdir contracts

然后,在 contracts 目录下,创建名称为 Calculator.sol 的合约文件,用于实现一个计算器。

Calculator.sol 的代码如下:

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

contract Calculator {
    // 加法
    function add(uint256 a, uint256 b) external pure returns(uint256) {
        return a+b;
    }
    // 减法
    function sub(uint256 a, uint256 b) external pure returns(uint256) {
        return a-b;
    }
}

2. 编译智能合约

vscode 终端或者在当前目录下的命令行中,执行合约编译命令:

npx hardhat compile

编译成功后会输出:

Compiled 1 Solidity file successfully

编译生成的结果会存放在 artifacts 目录中。如果合约有错误,就会输出错误提示信息,修改后可以重新进行编译。

在合约没有改动的情况下,再次输入编译命令,并不会执行编译,而是直接输出:

Nothing to compile

如果改动了合约文件的内容,或者删除了 artifacts 目录,就会再次执行编译。

我们还可以在命令中加入 --force 选项,强行进行编译:

npx hardhat compile --force

3. 交互式调试智能合约

我们可以在命令行或者 shell 中,启动交互式终端,以交互方式来调试编译成功的合约。

使用交互式终端来调试智能合约的方式,并不常用,我们只需要了解即可。

最常用的调试和测试智能合约的方式,是通过自动化脚本进行,我们会在后面的章节中讲解。

启动交互式终端的命令如下:

npx hardhat console

运行后,就会进入交互式终端。如果我们要退出交互式终端,需要输入命令 .exit,然后回车即可。

我们可以在交互式终端上,使用 JavaScript 语句来部署合约,以及执行合约的方法。

比如,下面是一段 JavaScript 语句脚本,我们可以依次输入执行,并查看执行结果:

const Calculator = await ethers.getContractFactory("Calculator"); // 获取合约工厂
const calculator = await Calculator.deploy(); // 部署合约
console.log(calculator.target); // 获得部署合约的地址
const addResult = await calculator.add(5, 3); // 调用5+3执行加法运算
console.log(addResult); // 打印加法结果
const subResult = await calculator.add(11, 4); // 调用10-4执行减法运算
console.log(subResult); // 打印减法结果
.exit // 退出交互