truffle使用详解

Posted mrfanl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了truffle使用详解相关的知识,希望对你有一定的参考价值。

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使用详解的主要内容,如果未能解决你的问题,请参考以下文章

验证使用 Truffle 部署的智能合约代码

用 Truffle 插件自动在Etherscan上验证合约代码

Truffle框架环境搭建

14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足19.class文件--文件结构--魔数20.文件结构--常量池21.文件结构访问标志(2个字节)22.类加载机制概(代码片段

Python中verbaim标签使用详解

使用 truffle 在solidity 中调用函数时出现新的 BigNumber() 错误。如何修复错误?