摘要
有些事,想多了头疼,想通了心疼。所以,想不开就别想,得不到就别要,干嘛要委屈自己。放下包袱,忘却一切烦恼,开心度过每一天。
# 一:在 Windows 下安装
- 安装特定版本 Truffle
npm install -g truffle -registry=https://registry.npm.taobao.org
1
可能遇到的报错
- 提示没有安装
Python
,解决方法:本地安装 Python (opens new window); - 提示
visual c++ build Tools 20xx
没有安装,解决方法:使用小工具一键补全环境 (opens new window); - 提示
node-gyp
相关错误,解决方法:npm install -g node-gyp
; - 提示
request
相关错误,解决方法:npm install -g request
; - 如果使用 powershell 可能遇到没权限相关错误,解决方法:
set-executionpolicy remotesigned
然后选择A
; - 如果报其他错误,且无法解决,则可以试试 手动创建 (opens new window) 后续需要的文件夹和配置文件等。
-g
:表示在全局范围内安装
- 验证
truffle version
1
# 二:使用 Truffle 进行开发
使用 Truffle 非常简单。Truffle 在默认情况下提供大量的脚手架代码和配置。只需要重新配置一些开箱即用的配置选项,并专注于编写合约。使用步骤如下:
- 创建一个项目目录,该目录将包含所有该项目相关和 Truffle 生成的工件。
- 转到该目录并输入 init 命令。init 命令用于 Truffle 的启动和初始化。它将在该目录中生成适当的子目录、代码文件、配置和链接,如下所示:
- contracts 目录包含一个名为 migrations.sol 的文件。该文件包含一个负责将自定义合约部署到以太坊网络上的合约。任何自定义合约都应放置在此目录中。
- migrations 目录包含多个用于执行合约部署过程的 JavaScript 文件。这些 JavaScript 文件应该被修改以确保所有自定义合约对 Truffle 可见,Truffle 可以按照适当的顺序对合约进行链接和部署。这些 JavaScript 脚本以数字为前缀并以从 1 为前缀的脚本开始连续顺序执行。
- test 目录是空的,但是任何自定义测试脚本都应放到该目录中。
- 打开 ganache-cli。修改 truffle-config.js 文件,通过 JSON-RPC 协议来部署合约。
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545,
network_id: "*"
}
},
mocha: {
},
compilers: {
solc: {
version: "0.8.13"
}
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- 创建一个名为 first.sol 的合约文件并将其保存在 contracts 目录中
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.13;
contract First {
int public mydata;
function GetDouble(int _data) public returns (int _output) {
mydata = _data * 2;
return _data * 2;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- 创建一个名为 second.sol 的合约文件并将其保存在 contracts 目录中
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.13;
import "./first.sol";
contract Second {
address firstAddress;
int public _data;
constructor(address _first) {
firstAddress = _first;
}
function SetData() public {
First h = First(firstAddress);
_data = h.GetDouble(21);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- 创建一个名为 2_Custome.js 的测试文件并将其保存在 migrations 目录中。
// 引用前面两个合约
var hw = artifacts.require("First");
var hw1 = artifacts.require("Second");
// 合约部署时被 Truffle 调用的一个函数
module.exports = function(deployer) {
deployer.deploy(hw).then(function() {
// 先部署一个合约,在第一个合约被成功部署以后,再部署第二个合约
return deployer.deploy(hw1, hw.address);
})
};
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
- 编译
truffle.cmd compile
1
- 部署
truffle.cmd migrate
1
# 三:使用 Truffle 进行测试
测试可以使用 JavaScript 也可以使用 Solidity 编写。使用 Solidity 编写测试是通过创作合约文件来进行的。合约的名字应该以 Test 为前缀,每个合约数应该以 test 为前缀。请注意这里的大小写区分。
- 创建一个名为 TestFirst.sol 的合约文件并将其保存在 test 目录中
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.13;
import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/first.sol";
contract TestFirst {
function testInitialBalanceUsingDeployedContract() public{
First meta = First(DeployedAddresses.First());
Assert.equal(meta.GetDouble(10), 20, "Positive input gives double value");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- 使用 test 命令进行测试
truffle.cmd test
1
# 四:参考文献
- 《Solidity编程 构建以太坊和区块链智能合约的初学者指南 - 瑞提什·莫迪》