Truffle

12/6/2023 BlockchainTool

摘要

有些事,想多了头疼,想通了心疼。所以,想不开就别想,得不到就别要,干嘛要委屈自己。放下包袱,忘却一切烦恼,开心度过每一天。

# 一:在 Windows 下安装

  1. 安装特定版本 Truffle
npm install -g truffle -registry=https://registry.npm.taobao.org
1

可能遇到的报错

  1. 提示没有安装 Python,解决方法:本地安装 Python (opens new window)
  2. 提示 visual c++ build Tools 20xx 没有安装,解决方法:使用小工具一键补全环境 (opens new window)
  3. 提示 node-gyp 相关错误,解决方法:npm install -g node-gyp
  4. 提示 request 相关错误,解决方法:npm install -g request
  5. 如果使用 powershell 可能遇到没权限相关错误,解决方法:set-executionpolicy remotesigned 然后选择 A
  6. 如果报其他错误,且无法解决,则可以试试 手动创建 (opens new window) 后续需要的文件夹和配置文件等。

-g:表示在全局范围内安装

  1. 验证
truffle version
1

# 二:使用 Truffle 进行开发

使用 Truffle 非常简单。Truffle 在默认情况下提供大量的脚手架代码和配置。只需要重新配置一些开箱即用的配置选项,并专注于编写合约。使用步骤如下:

  1. 创建一个项目目录,该目录将包含所有该项目相关和 Truffle 生成的工件。

  1. 转到该目录并输入 init 命令。init 命令用于 Truffle 的启动和初始化。它将在该目录中生成适当的子目录、代码文件、配置和链接,如下所示:

  • contracts 目录包含一个名为 migrations.sol 的文件。该文件包含一个负责将自定义合约部署到以太坊网络上的合约。任何自定义合约都应放置在此目录中。
  • migrations 目录包含多个用于执行合约部署过程的 JavaScript 文件。这些 JavaScript 文件应该被修改以确保所有自定义合约对 Truffle 可见,Truffle 可以按照适当的顺序对合约进行链接和部署。这些 JavaScript 脚本以数字为前缀并以从 1 为前缀的脚本开始连续顺序执行。
  • test 目录是空的,但是任何自定义测试脚本都应放到该目录中。
  1. 打开 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
  1. 创建一个名为 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
  1. 创建一个名为 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
  1. 创建一个名为 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
  1. 编译
truffle.cmd compile
1

  1. 部署
truffle.cmd migrate
1

# 三:使用 Truffle 进行测试

测试可以使用 JavaScript 也可以使用 Solidity 编写。使用 Solidity 编写测试是通过创作合约文件来进行的。合约的名字应该以 Test 为前缀,每个合约数应该以 test 为前缀。请注意这里的大小写区分。

  1. 创建一个名为 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
  1. 使用 test 命令进行测试
truffle.cmd test
1

# 四:参考文献

  • 《Solidity编程 构建以太坊和区块链智能合约的初学者指南 - 瑞提什·莫迪》
最后更新: 12/12/2023, 5:32:22 PM