环境:ubuntu 18
安装nodejs和npm
sudo apt install nodejs
sudo apt install npm
安装truffle
npm -g参数是安装到全局的node_modules目录
sudo npm install -g truffle
sudo npm install -g ethereumjs-testrpc
我的truffle版本是v5.0.41
其它参照下面的文章:
Truffle入门到实战
https://www.jianshu.com/p/e697313d9e9a
truffle官方文档
https://www.trufflesuite.com/docs
创建一个工程
1、创建工程目录
mkdir MetaCoin
cd MetaCoin
2、下载(unbox)MetaCoin box
truffle unbox metacoin
注意:a、可以使用truffle unbox <box-name>命令下载其它的truffle box
b、使用truffle init创建一个干净的truffle项目
c、可以在上面的两个命令中添加--force参数,无视当前目录状态,覆盖已有内容。
工程目录下的目录:
contracts/: Solidity合约文件目录
migrations/: 部署脚本目录
test/: 应用程序和合约的测试文件目录
truffle-config.js: Truffle配置文件
编译合约
contracts目录下有个Migrations.sol文件,它是在部署中提供帮助。
编译
在工程目录根部输入truffle compile。第一次编译时会全部编译,再次编译,只编修改过的。添加--all参数可以全部编译。
编译的问题
Error: Truffle is currently using solc 0.5.8, but one or more of your contracts specify "pragma solidity ^0.4.24".
安装其它版本的solidity编译器(不管用)
npm install -g solc@0.4.24
修改工程目录下的truffle-config.js
module.exports = {
compilers: {
solc: {
version: "0.4.24",
}
}
};
改完编译ok。编译输出目录build/contracts/。
依懒(Dependencies)
import某个文件
import "./AnotherContract.sol";
import其它包中的文件,truffle支持import通过 EthPM 和 NPM 安装的包.
import "somepackage/SomeContract.sol";
运行部署?(RUNNING MIGRATIONS)
Migrations是些JavaScript文件,用来帮你部署合约到Ethereum网络.
命令 truffle migrate
简单来说,migrations是管理部署脚本的集合。它每次只会执行新的migrations,可以添加--reset参数从头开始执行。
一个简单的migration文件如下:
Filename: 4_example_migration.js
var MyContract = artifacts.require("MyContract");
module.exports = function(deployer) {
// deployment steps
deployer.deploy(MyContract);
};
文件名包含数字和描述两部分。
artifacts.require 告知truffle我们要搞那个合约(指定合约名,返回contract abstraction合约的抽象)
module.exports 所有migrations必须通过module.exports导出一个函数,函数的第一个参数是deployer,部署过程中需要用到它。
Initial migration
Truffle要求我们要有个Migrations的合约,以便能使用Migrations的功能。这个合约必须包含一个特别的接口,而你可以自由编辑它。对大多数工程,这个合约会作为最先部署的并且不再作修改。truffle init会默认创建这个文件contracts/Migrations.sol。
Deployer 使用deployer安排部署任务。
// Deploy A, then deploy B, passing in A's newly deployed address
deployer.deploy(A).then(function() {
return deployer.deploy(B, A.address);
});
Deployer API
1、deployer.deploy(contract, args..., options)
2、deployer.link(library, destinations)
3、deployer.then(function() {...})
Network considerations基于网络来写不同的部署
与合约交互(合约调用)INTERACTING WITH YOUR CONTRACTS
调试合约
truffle debug <transaction hash>
命令与gdb差不多。https://www.trufflesuite.com/docs/truffle/getting-started/debugging-your-contracts
使用truffle develop和终端
Truffle Console: 一个基本的可连接到任何的以太坊客户端的交互终端。可以连接到Ganache或者geth等;还可以选择测试网或者主网;和选择自己的账号。
Truffle Develop: 一个自带blockchain的终端。在测试阶段,不用去部署;用默认账号;不用安装和维护blockchain客户端。
truffle console可以使用--network <name>指定网络。
遇到问题再来记录。。。