上篇文档写了如何使用truffle的基本命令,这篇文档来教大家如何写迁移脚本和测试脚本。
一,迁移脚本(migrate)
首先我们应该理解为什么要使用迁移脚本,没有迁移脚本会怎么样?
迁移脚本可以有效地管理和自动化智能合约的部署流程,特别是在开发过程中以及在不同的以太坊网络(如本地测试网络、Ropsten测试网络等)之间进行部署。迁移脚本提供了一种结构化、版本控制且可重复的方式,确保智能合约的部署按照预期顺序进行,并且能够应对智能合约代码的更新或升级。
假设没有迁移脚本的话合约就难以按照我们的预想来执行,必须要手动的去部署智能合约,而且合约执行起来一旦我们想升级也会变的很麻烦。
理论讲完了,我们来讲讲如何编写迁移脚本吧!
我们先用一个简单的合约来举例子吧!
智能合约
这是一个非常简单的拥有get,set方法的合约。get用于获取num的值,set用于设置num的值。接下来我们来看看如何写他的迁移脚本。(一般情况我们的迁移脚本会用数字开头,这样是为了让程序识别执行脚本的顺序)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;
contract Cont{
uint256 private num;
function set(uint256 x) public {
num= x;
}
function get() public view returns (uint256) {
return num;
}
}
迁移脚本
迁移脚本是为了将我们的合约部署到以太坊的工具,而且没当我们部署的时候迁移脚本都会对先前的脚本进行记录在链上。
const Cont = artifacts.require("Cont");
module.exports = async function(deployer, network, accounts){
await deployer.deploy(Cont);
}
// 定义一个常量Cont ,用来存储我们的合约
// artifacts.require用于在迁移脚本文件中加载和创建编译后的智能合约对象
// module.exports定义了一个匿名的异步函数作为模块的输出,这样就能被外部调用执行
// async用