一、安装nodejs和npm
ubuntu中node和npm的卸载与安装_软件工程小施同学的博客-CSDN博客
二、安装
1.环境
本人已使用Ubuntu18.04,已安装如下:g++安装,执行命令:sudo apt-get install g++
libssl-dev安装,执行命令:sudo apt-get install libssl-devnodejs安装,执行命令: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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)