创建工程
创建一个空目录
mkdir d:\work\geth\metacoin
新版本truffle引入了box的概念,所有的示例代码都以box的形式提供。下载metacoin的示例代码:
truffle unbox metacoin
工程结构
工程结构如图:
contracts 目录中包含 Solidity 合约代码,其中 Migrations.sol 是必须的,其他的是合约代码(这里是示例的 MetaCoin 代码)。
migrations 目录中包含合约部署脚本, 1_initial_migration.js 用来部署 Migrations.sol ,其他的脚本会按照顺序依次执行。
test 目录中是测试代码。
MetaCoin
MetaCoin的代码主要实现了三个接口:发币,查看余额,查看Eth余额。(合约代码解释可以见下方的参考处)
contract MetaCoin {
mapping (address => uint) balances;
event Transfer(address indexed _from, address indexed _to, uint256 _value);
function MetaCoin() public {
balances[tx.origin] = 10000;
}
function sendCoin(address receiver, uint amount) public returns(bool sufficient) {
if (balances[msg.sender] < amount) return false;
balances[msg.sender] -= amount;
balances[receiver] += amount;
Transfer(msg.sender, receiver, amount);
return true;
}
function getBalanceInEth(address addr) public view returns(uint){
return ConvertLib.convert(getBalance(addr),2);
}
function getBalance(address addr) public view returns(uint) {
return balances[addr];
}
}
安装以太坊客户端Ganache 如前。
智能合约必须要部署到链上进行测试。可以选择部署到一些公共的测试链比如 Rinkeby 或者 Ropsten 上,缺点是:部署和测试时间比较长,需要申请一些假的代币。所以对于开发者,最好的方式是部署到私链上。
Ganache是您以太坊开发的个人区块链。他的前身是 testRPC ,很多旧的教程介绍的都是 testRPC 。
修改truffle.js
要部署到链上,需要把IP、端口、网络ID告诉truffle。修改truffle.js为truffle-config.js, 如果文件夹里两个文件都有,把truffle.js删掉,要不会会自动打开该文件然后报.JS错误.
module.exports = {
networks: {
development: {
host: 'localhost',
port: '8545',
network_id: '*' // Match any network id
}
}
};
编译和部署,之前需要打开客户端,用第二个窗口ganache-cli打开客户端
truffle compile
truffle migrate
同时客户端会产生部署的日志。
测试合约
测试内容
MetaCoin的示例代码里已经把测试代码写好了,主要测试 MetaCoin 的接口是否可用:
contract TestMetacoin {
function testInitialBalanceUsingDeployedContract() public {
MetaCoin meta = MetaCoin(DeployedAddresses.MetaCoin());
uint expected = 10000;
Assert.equal(meta.getBalance(tx.origin), expected, "Owner should have 10000 MetaCoin initially");
}
function testInitialBalanceWithNewMetaCoin() public {
MetaCoin meta = new MetaCoin();
uint expected = 10000;
Assert.equal(meta.getBalance(tx.origin), expected, "Owner should have 10000 MetaCoin initially");
}
测试合约
直接输入测试合约的命令:
truffle test
结果显示5个测试都通过:
参考:
https://blog.csdn.net/MyHerux/article/details/80340095
https://www.cnblogs.com/zwb121/p/8979473.html
https://www.jianshu.com/p/2e2b3b12eb0e?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation