区块链(八)windows Truffle入门实战(metacoin)

创建工程

创建一个空目录

mkdir d:\work\geth\metacoin

新版本truffle引入了box的概念,所有的示例代码都以box的形式提供。下载metacoin的示例代码:

truffle unbox metacoin

工程结构

工程结构如图:

区块链(八)windows Truffle入门实战(metacoin)_第1张图片

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

区块链(八)windows Truffle入门实战(metacoin)_第2张图片

truffle migrate

区块链(八)windows Truffle入门实战(metacoin)_第3张图片

同时客户端会产生部署的日志。

区块链(八)windows Truffle入门实战(metacoin)_第4张图片

测试合约

测试内容

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个测试都通过:

区块链(八)windows Truffle入门实战(metacoin)_第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 

用Solidity在Truffle上构建一个HelloWorld智能合约

教程 | 以太坊开发演练,Part-2:Truffle,Ganache,Geth 和 Mist

你可能感兴趣的:(区块链(八)windows Truffle入门实战(metacoin))