Truffle 是以太坊生态著名的智能合约开发工具,提供编译,链接,测试,部署等实用功能,为广大 Solidity 开发者所喜爱。Conflux 作为新一代高性能公链,不仅在完全去中心化的前提下实现了两个量级的性能提升,还实现了跟 EVM 兼容的虚拟机, 意味着 Dapp 开发者不用学习新开发语言即可以在 Conflux 网络上开发应用。为了提升 Conflux 的合约开发体验,官方最近也对 Truffle 进行了迁移改造,打造了 Conflux-Truffle,使之能够支持 Conflux 的合约开发。
// 全局安装cfxtruffle
npm install -g conflux-truffle
// 初始化一个项目
cfxtruffle init project-name
// 添加合约
cfxtruffle create contract contract-name
// 安装@openzeppelin/contracts以引入需要的合约
npm install @openzeppelin/contracts
// 编译写好的合约
// 编译完成后会生成一个build文件夹
// 里面有合约相关的json文件
// 想要重新编译所有文件可以使用 cfxtruffle compile --all
cfxtruffle compile
// 配置truffle-config.js文件
// 通过远程节点将合约部署到Conflux主网
module.exports = {
networks: {
Tethys: {
url: "https://main.confluxrpc.com", // Conflux主网rpc
network_id: "1029", // 主网id
/**
* 用于发送交易部署合约的账户私钥
* 需要预先在账户里放一些cfx
* 部署合约的费用通常在11-14cfx
*/
privateKeys: [""],
},
},
// 在此处指定solc编译器版本,即你要部署的合约所使用的版本
compilers: {
solc: {
// Note: 也可以不指定,使用 version: "pragma" 来自动检测编译器版本
version: "^0.8.0", // Fetch exact version from solc-bin (default: truffle's version)
// docker: true, // Use "0.5.1" you've installed locally with docker (default: false)
// settings: { // See the solidity docs for advice about optimization and evmVersion
// optimizer: {
// enabled: false,
// runs: 200
// },
// evmVersion: "byzantium"
// }
}
},
}
// 添加合约部署脚本
cfxtruffle create migration contract-name
/**
* Note:
* 创建部署脚本后需要将其重命名,按照所有合约部署的历史顺序
* 如初始化后预设的第一个脚本名称是 1_initial_migration.js
* 那么如果你现在要部署自己的合约
* 则应该创建一个名称为 2_any_maybe_your_new_contract_name.js
* 的部署脚本
*/
// 在部署脚本中加入以下代码
const any = artifacts.require("contract-name");
module.exports = function(_deployer, network) {
// Use deployer to state migration tasks.
_deployer.deploy(any)
/**
* Note:
* _deployer.deploy() 的参数由你的合约构造器 constructor() 的参数决定
* 此处 _deployer.deploy(any) 假设 constructor() 不需要额外参数
* 如果你的合约在部署的时候需要额外传入参数给构造器,比如
* constructor(
string memory name_,
string memory symbol_,
string memory uri_
)
* 那么就需要把参数按顺序传给 deploy 函数,像这样
* _deployer.deploy(any, 'arg1', 'arg2', 'arg3', ......)
* 如果没有在部署的时候正确传入参数,就会产生如下报错
* "Invalid number of parameters for "undefined". Got 0 expected 3!"
*/
};
/**
* 运行部署命令
* --reset用于重新部署所有合约
* --network指定使用的网络,默认使用development网络
*/
cfxtruffle deploy --reset --network Testnet
// deploy命令执行完成之后,会输出部署的结果
// 比如交易hash,合约地址,花费的费用等
// 可以在conflux浏览器 https://confluxscan.net/ 复制合约地址来查看