Truffle是一个世界级的开发环境,测试框架,以太坊的资源管理通道,致力于让以太坊上的开发变得简单,Truffle有以下:
内置的智能合约编译,链接,部署和二进制文件的管理
快速开发下的自动合约测试
脚本化的,可扩展的部署与发布框架
部署到不管多少的公网或私网的网络环境管理功能
使用EthPM&NPM提供的包管理,使用ERC190标准
可配的构建流程,支持紧密集成
Truffle环境里支持执行外部的脚本
1.环境
本人使用Ubuntu16.04版本下进行Truffle环境的搭建,其依赖的编译环境如下:
g++安装,执行命令:sudo apt-get install g++
libssl-dev安装,执行命令:sudo apt-get install libssl-dev
nodejs安装,执行命令:sudo apt-get install nodejs
solc安装:sudo apt-get install solc
testrpc安装:npm install -g ethereumjs-testrpc
2.Truffle安装
Truffle的安装指令为:npm install -g truffle,执行该指令后,运行truffle version,出现如下图结果,则说明安装成功。
3.测试demo搭建
3.1.以太坊环境
testrpc是在本地使用内存模拟的一个以太坊环境。相对于 Geth私有链环境,testrpc它在执行交易时是实时返回,而不等待默认的出块时间,这样你可以快速验证你新写的代码,当出现错误时,也能即时反馈给你。下面先来在本端执行testrpc命令,创建一个以太坊的运行环境,其正确执行效果如下图:
3.2.创建测试demo
接下来另启一个窗口,创建一个demo目录,在该目录下执行truffle init命令,该目录下自动生成下述文件:
app/:nodejs运行环境
contracts/: 智能合约存放的目录,默认情况下已经帮你创建 Migrations.sol合约。
migrations/: 存放部署脚本
test/: 存放测试脚本
truffle.js: truffle的配置文件
3.3.合约编译
demo的合约代码存储在contracts目录下,编译该合约代码的指令 truffle compile,编译成功的结果如下图:
如合约改动,truffle compile仅对改动的合约进行编译,如需强制编译整体合约,可使用 truffle compile --compile-all。
3.4.合约部署
3.3中编译好的合约部署在testrpc创建的以太坊环境命令 truffle migrate,执行后结果如下:
在testrpc窗口显示合约部署成功,其界面如下图:
到此,合约编译并正确部署到以太坊上。
3.5.nodejs界面展示
在demo目录下运行 truffle serve 启动nodejs,成功如下图:
然后在网页打开 127.0.0.0:8080,出现如下界面:
用户可以通过这个界面给用户转账(具体可自行阅读contracts目录下的合约源码,了解其要实现的功能)。
到此,truffle搭建简单的以太坊开发框架已经搭建完成。
4.拓展
4.1.创建自己的合约
在./contract目录下创建一个自己的合约文件Greeter.sol,其代码如下:
contract Greeter
{
address creator;
string greeting;
function Greeter(string _greeting) public
{
creator = msg.sender;
greeting = _greeting;
}
function greet() public constant returns (string)
{
return greeting;
}
function setGreeting(string _newgreeting) public
{
greeting = _newgreeting;
}
/**********
Standard kill() function to recover funds
**********/
function kill()public
{
if (msg.sender == creator)
suicide(creator); // kills this contract and sends remaining funds back to creator
}
}
4.2.新建发布脚本
在./migrations/目录下修改 2_deploy_contracts.js 文件,增加发布代码如下:
module.exports = function(deployer) {
deployer.deploy(Greeter,"Hello, World!");//"参数在第二个变量携带"
};
之后就是 truffle compile编译合约;truffle migrate部署合约,效果如下:
4.3.通过控制台操作
我们可以运用 truffle console 命令进入控制台,通过控制台输入相关指令进行相关操作,效果如下:
通过输入指令进行相关操作:
我们也可以通过Truffle将合约部署到我们的以太坊私有链上,需要修改truffle.js的配置,如下:
module.exports = {
build: {
"index.html": "index.html",
"app.js": [
"javascripts/app.js"
],
"app.css": [
"stylesheets/app.css"
],
"images/": "images/"
},
rpc: {
host: "localhost", //修改IP,改为不是私有链的IP,要确保在同一网段
port: 8545 //修改端口号,如私有链端口号保持一致
}
};