编写、编译智能合约
本章学习如何使用 Harthat
编写、编译智能合约。
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 // 退出交互