本文主要讲述使用Truffle framework部署的第一个Solidity合约
一.前置工作:
1.安装Solidity的开发框架Truffle
npm install -g truffle
环境要求:NodeJS 5.0+
2.安装开发客户端(geth)
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
当新版本的geth发布后,可以直接通过APT完成geth版本升级。
sudo apt-get update
Sudo apt-get upgrade
二.部署合约
1. 创建工程目录
在你想放工程的任何位置,创建一个文件夹(/1110/demo1),来做为你的工程根目录。
mkdir 1110
cd 1110
mkdir demo1
cd demo1
注:mkdir (选项)(参数)命令用来创建一个目录或一个级联目录。
选项:
-m<目标属性>或–mode<目标属性>建立目录的同时设置目录的权限;
-p或–parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
2. 初始化框架
进入到工程根目录下(现在应该是个空目录),并执行truffle init命令。
正确执行后,我们通过atom编辑器将得到下面这样的目录结构(命令 atom ./):
目录结构简单说明如下:
- app/ - 你的应用文件运行的默认目录。这里面包括推荐的
- javascript文件和css样式文件目录,但你可以完全决定如何使用这些目录。
- contract/ - Truffle默认的合约文件存放地址。
- migrations/ - 存放发布脚本文件。
- test/ - 用来测试应用和合约的测试文件。
- truffle.js - Truffle的配置文件。
3.放入自己的合约
删除./contract目录下的自带demo合约,切记不要删除./contract/Migrations.sol合约,它是Truffle用来帮助部署的。
pragma solidity ^0.4.0;
contract Greeter
{
address creator;
string greeting;
function Greeter(string _greeting) public
{
creator = msg.sender;
greeting = _greeting;
}
function greet() constant returns (string)
{
return greeting;
}
function setGreeting(string _newgreeting)
{
greeting = _newgreeting;
}
/**********
Standard kill() function to recover funds
**********/
function kill()
{
if (msg.sender == creator)
suicide(creator); // kills this contract and sends remaining funds back to creator
}
}
4. 修改发布脚本
将./migrations/1_initial_migration.js下的内容由
var Migrations = artifacts.require("./Migrations.sol");
module.exports = function(deployer) {
deployer.deploy(Migrations);
};
修改为:
var HellowWorld = artifacts.require("./HellowWorld.sol");
module.exports = function(deployer) {
deployer.deploy(HellowWorld);
};
目的是去掉原有自带的Demo部署流程,修改为要部署的合约。修改完后,记得保存,不然发布时会报错,找不到相关合约。
5. 部署sol合约,并编译
部署命令:truffle develop(4.0版本)
编译命令:compile(4.0版本,3.0版本命令truffle compile)
注:警告错误原因为当用户从外部调用一个view函数,是不需要支付一分 gas 的。
这是因为 view 函数不会真正改变区块链上的任何数据 - 它们只是读取。因此用 view 标记一个函数,意味着告诉 web3.js,运行这个函数只需要查询你的本地以太坊节点,而不需要在区块链上创建一个事务(事务需要运行在每个节点上,因此花费 gas)。解决办法加contract.test1.call()。
6. 部署/迁移
命令行命令:migrate
注:遇到错误,解决办法,就是将程序根目录下的build文件夹删除,然后重新truffle compile、truffle migrate即可。(或migrate reset)。
到这里我们就应该自己能够编写合约的部署代码了。
调用test()方法: