Ubuntu下Truffle框架的搭建 2022年最新版

一、安装nodejs和npm

ubuntu中node和npm的卸载与安装_软件工程小施同学的博客-CSDN博客

二、安装

1.环境
本人已使用Ubuntu18.04,已安装如下:
g++安装,执行命令:sudo apt-get install g++
libssl-dev安装,执行命令:sudo apt-get install libssl-dev

nodejs安装,执行命令:sudo apt-get install nodejs

2. 还需要安装
solc安装:sudo snap install solc

不用装testrpc,已经废弃

testrpc安装:sudo npm install -g ethereumjs-testrpc


3.Truffle安装
Truffle的安装指令为:

sudo npm install -g truffle

 也不用装ganache了,已经有了

创建工程


创建一个空工程

truffle init



创建包含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图形版

  下载地址:https://www.trufflesuite.com/ganache。下载对应系统的版本,然后安装,这个就跳过不说话了。我们重点介绍一下truffle的设置。

       打开Ganache,如下图:

在这里插入图片描述

       左边的按钮是快速启动,它的数据不会保存,每次启动后都是全新的开发环境。右边的按钮是保存当前的数据到相应的工作空间中,可以有多个工作空间。我们选择右边的new workspace:
在这里插入图片描述

 这里可以将workspace取一个有意义的名字,左下角的添加工程先跳过,因为我们目前还没有truffle工程。

这个界面最上面一栏是导航菜单,接下来一行是各种信息,右边是切换工作空间和设置按钮。第三行是助记词,所有的地址都是根据它生成的。

       界面主体有10个账号,分别列出了每个账号的地址,余额,已经完成的交易数量、账号数组中的索引、显示私钥按钮等。点击那个钥匙图标,就会显示它的私钥。

       点击导航上的Blocks,可以看到目前Block是0。这是因为Ganache挖矿机制决定的,每一个交易产生一个block,所以一个block也只会有一笔交易(这是笔者的使用经验,有可能不对)。在我们交易后就会产生一个block,目前还没有。


————————————————
版权声明:本文为CSDN博主「Zero_Nothing」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39430411/article/details/104248037

在一系列配置结束之后,就可以使用Visual Studio Code打开项目文件夹了。如果没有安装Visual Studio Code,可以通过http://code.visualstudio.com 来进行下载。打开项目文件夹后,目录内容如下:

其中,

  • contract 文件夹用来保存开发的智能合约源代码。文件夹中的Migrations.sol 是Truffle 用来帮助部署Solidity智能合约的辅助代码,请不要随意改动。
  • mirgations 文件夹是用来保存部署、编译和测试合约的JavaScript 脚本代码的文件夹。
  • test文件夹内保存单元测试源代码。
  • Truffle-config.js 和truffle.js 文件是保存Truffle Framework 配置文件信息的,其实两个文件中的内容一样,truffle.js 文件用于macOS 和Linux操作系统。在Windows下,为了避免重名,改用truffle-config.js作为配置文件。

编译和部署合约


Ganache 默认运行在本地 7545 端口,运行后默认创建10个账号,每个账号里有100ETH的余额。

修改truffle.js

要部署到链上,需要把IP、端口、网络ID告诉truffle。修改truffle.js:

module.exports = {  
    networks: {  
        development: {  
            host: 'localhost',  
            port: '7545',  
            network_id: '*' // Match any network id  
        }  
    }  
}; 


编译和部署

truffle compile  

 如合约改动,truffle compile仅对改动的合约进行编译,如需强制编译整体合约,可使用 truffle compile --compile-all。


truffle migrate

migrations/2_deploy_contracts.js 

 若需要带参数

module.exports = function(deployer) {
  deployer.deploy(Greeter,"Hello, World!");//"参数在第二个变量携带"
};
var Voting = artifacts.require("./Voting.sol");
module.exports = function(deployer) {
deployer.deploy(Voting, ['Alice', 'Bob', 'Cary'], {gas:
290000});
};

从上面可以看出,部署者希望第一个参数为合约名,跟在构造函数参数后面。

在我们的例子中,只有一个参数,就是一个候选者数组。第三个参数是一个哈希,我们用来指定部署代码所需的 gas。gas 数量会随着你的合约大小而变化。对于投票合约, 290000 就足够了。

合约地址 

测试合约


测试内容

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

可以使用

js调用测试,也可以使用再写一个sol合约测试 


————————————————
版权声明:本文为CSDN博主「MyHerux」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/MyHerux/article/details/80340095


 

猜你喜欢

转载自blog.csdn.net/u013288190/article/details/123840776
今日推荐