一、安装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
?
|