truffle使用详解

1.truffle是什么

tuffle是基于以太坊的solidity语言的一套开发框架,本身基于javascript。

2.Truffle测试环境

truffle有很多优秀的客户端,推荐使用Ganache CLI .当开发基于truffle的应用时,它会在你设备的内存中创建一个完整的区块链,它在执行交易的时候是实时返回的。详情可以参考Ganache CLI

3.安装truffle

npm install -g truffle

4.truffle项目结构解析

首先,我们以MetaCoin这个官方项目来解析一下目录结构

mkdir MetaCoin
cd MetaCoin
truffle unbox metacoin

结构目录大概是这样的(README.md是我自己加的)

contract/:solidity智能合约所在的目录

migrations/:移植文件所在的目录

test/:测试文件所在的目录

truffle.js:truffle项目的配置文件

5.文件编译

truffle compile

当你第一次编译的时候,所有的文件都会被编译。之后,truffle只会编译最近一次编译之后改动过的文件。如果你想编译所有文件可以使用--all选项

当你编译之后你的文件目录会多一个build文件夹,里面是编译之后的json文件。

6.truffle的配置文件

module.exports = {
// See <http://truffleframework.com/docs/advanced/configuration>
// to customize your Truffle configuration!
};

刚开始你的配置文件是这样的,你可以参考上面的地址配置你自己的文件,下面是一个简单的示例:

  module.exports = {
// See <http://truffleframework.com/docs/advanced/configuration>
// to customize your Truffle configuration!
networks:{
development:{
host:"127.0.0.1",
port:8545,
network_id:"*"
}
}
};

指的是使用127.0.0.1:8545来将你的合约部署到区块链中,这里我使用的是上面提到的ganache-gli,在内存中建立开发用的完整区块链。

你用ganache-gli命令在内存建立区块链后,就可以执行下面的移植(部署)命令了。

7.移植

移植就是将你的程序部署到区块链当中:

truffle migrate

运行上面的移植命令,就是运行migrations文件夹下的文件,你可以将文件夹内的内容看做是一系列部署脚本文件,与编译命令相类似,该命令也只会从上次移植命令之后运行,如果你想重新部署,可以使用--reset选项

注意,migration的文件名以数字为前缀,以描述为后缀。为了记录迁移是否成功运行,需要编号前缀。后缀是纯粹为了人类的可读性和理解力

我们可以来看看migration文件夹中的.js文件

var ConvertLib = artifacts.require("./ConvertLib.sol");
var MetaCoin = artifacts.require("./MetaCoin.sol"); module.exports = function(deployer) {
deployer.deploy(ConvertLib);
deployer.link(ConvertLib, MetaCoin);
deployer.deploy(MetaCoin);

};

开始是一个artifacts.require(),这相当于在js中的require,我们需要通过这行代码告诉truffle我们要部署哪些文件,它返回的是合约的抽象,我们可以在下面的代码中使用它。这里需要特别注意的是: 这里的名字必须与合约的名字相同

接下来是module.exports ,所有的migrations文件必须通过module.exports抛出一个方法,这个方法的第一个参数是deployer对象。该对象通过提供用于部署智能契约的清晰语法,以及执行一些部署的普通职责(例如保存已部署的工件以备以后使用),来辅助部署。

上面使用的deployer.deploy(contract)指的是部署合约,deployer.link(library, destinations)是指:将已部署的库链接到契约或多个契约。这里的库是solidity中的概念,详情可以参考solidity的官方文档。deployer还有一些API,这里不详述,可以参考这里

还有一个初始的migration的文件,我们注意到,在contract文件夹中有Migrations.sol文件,在migration/文件夹中有1_initial_migration.js文件。truffle要求我们有一个移植合约--Migrations.sol来使用移植的功能,如果你使用的是truffle init来初始化你的项目。那么就在contract文件夹和migration/文件夹中只会包含这两个文件,没有示例程序,如下图:

这个Migrations.sol必须在移植中先被移植,对应的就是1_initial_migration.js文件,一帮来说你并不需要改动这两的文件(当然你也可以改动),这里提出来是为了提醒不要误删

8.与合约进行交互

当你将合约通过上面的过程部署到区块链中,你就可以和合约进行交互了。使用下面的命令打开控制台:

truffle console

比如下面:

关于与合约交互的一些API可以参考其他一些资料(如web3相关的命令)

truffle使用详解的更多相关文章

  1. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  2. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  3. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  4. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  5. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  6. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  7. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  8. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  9. Node.js npm 详解

    一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...

随机推荐

  1. 事务(进程 ID 64)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。

    访问频率比较高的app接口,在后台写的异常日志会偶尔出现以下错误. 事务(进程 ID 64)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品.请重新运行该事务 实所有的死锁最深层的原因就是一个 ...

  2. bootstrap实现去点列表、内联列表、水平定义列表

    内联列表:通过添加类名“.list-inline”来实现内联列表,简单点说就是把垂直列表换成水平列表,而且去掉项目符号(编号),保持水平显示. 去点列表:通过给无序列表添加一个类名“.list-uns ...

  3. 如何注册facebook应用

    最近项目中要做第三方登录,其中就有facebook的,下面讲解一下如何在facebook中创建应用 1.登录facebook的开发者平台(https://developers.facebook.com ...

  4. mongodb密码忘了怎么办

    自己电脑上mongodb好长时间没上了,密码竟然给忘了,悲剧啊! 修改auth为false,然后重新启动mongodb 这时候可以不用登陆直接进入 db.changeUserPassword('use ...

  5. RabbitMQ的四种ExChange

    在message到达Exchange后,Exchange会根据route规则进入对应的Queue中,message可能进入一个Queue也可能进入对应多个Queue,至于进入哪个Queue或者是说哪个 ...

  6. javascript总结19:javascript 使用概述

    1 JS作用 1.验证表单(以前的网速慢)`` 2.页面特效(PC端的网页效果) 3.移动端(移动web和app) 4.异步和服务器交互(AJAX) 5.服务端开发(nodejs) 2 浏览器的主要构 ...

  7. 基于Xcode5的本地化

    一.程序名国际化   1.首先添加应用对多语言支持的国际化文件   点击工程根目录,然后选择PROJECT下的项目,然后选择Info选项卡,在底部可以看到Localizations,点击“+”号,可以 ...

  8. 【转】Android - 线程同步

    什么是线程同步? 当使用多个线程来访问同一个数据时,非常容易出现线程安全问题(比如多个线程都在操作同一数据导致数据不一致),所以我们用同步机制来解决这些问题. 实现同步机制有两个方法: 1.同步代码块 ...

  9. Android 画指南针

    1.无意看到了一个指南针的UI,在这里简单的模仿了一下.其实就是第画布的一些变化而已. 别人的效果图是: 3.简单说一下思路: 1)首先是画一个黑色圆盘 2) 然后画圆盘上的刻度(就是对Canvas一 ...

  10. 关于获取客户端Mac地址

    private static string GetClientMAC() { string mac_dest = string.Empty; try { string strClientIP = Ht ...