truffle ,命令
1.truffle 网站找到box下的webpack,本地新建文件下cmd进入dos命令窗口,输入truffle unbox webpack 下载webpack包。
2.目录内容
- contracts: 存放只能合约,默认创建一个Migrations.sol合约
- migrations :存放部署脚本
- test: 存放测试脚本
- truffle.js :truffle的配置文件
3.编译智能合约
truffle compile会生成build文件夹,build文件夹下会有智能合约对应的json文件;json文件会包含ABI接口,包括合约中定义的函数,变量等。
4.部署智能合约
truffle migrate
在migrations中编写部署智能合约的脚本,以webpack中部署脚本为例,
//编写部署脚本2_deploy_contracts.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);
};
// 配置truffle.js
// Allow us to use ES6 in our migrations and tests
require('babel-register')
module.exports = {
networks: {
development :{
host : '127.0.0.1',
port: 7545,
network_id:'*'
}
}
}
5.运行Dapp
npm run dev
6. 区块链客户端
ganache 私有区块链环境,是以太坊节点仿真器,可以看到账户,区块,以及交易信息和日志。
ganache开启后监听网络,默认是http://127.0.0.1:7545,将显示前10个账户以及用于创建这些账户的助记符、
Truffle develop, 是内置于truffle 的开发区块链环境,无需安装,只需要在终端输入truffle develop即可,运行在根据truffle.js 配置的网络和端口,将显示前10个账户以及用于创建这些账户的助记符;truffle develop 提供了一个控制台,可以
在控制台终端输入truffle的所有命令,并且不需要truffle前缀,比如在终端输入truffle compile,在develop控制台只需要输入
compile.
7.truffle 命令参考
truffle compile [--all] [--network <name>] 编译合约,缺省[--all] 仅编译变化的合约,--network <name> 指定使用的网络,该网络必须在truffle.js中配置
truffle console [--network <name> ] [--verbose -rpc] 与合同交互的控制台,可指定网络,--verbose-rpc :记录Truffle 和以太坊客户端之间的通信。truffle develop 生成本地开发区块链,允许通过命令行与合同交互。
truffle create (contract | migration | test) <ArtifactName> 创建合约(contracts/ArtifactName.sol),部署文件(migrations/###########_artifact_name.js),测试文件(tests/artifact_name.js),<ArtifactName>新工件的名称。
truffle debug <transaction_hash> 在特定事务上启动调试命令,<transaction_hash>: 用于调试的事务ID
truffle exec <script.js> [--network <name>] 执行JS文件
truffle init 初始化空的项目
truffle install [package_name]<@version> 安装在ETHPM上注册的安装包, package_name 是包名,<@version>指定安装包的版本
truffle migrate [--reset] [-f <number>] [--network <name>] [--compile-all] [--verbose-rpc] ,如果缺省表示从上次完成的部署开始
-f <number> 部署特定的合约,number是部署脚本文件名前面的数字,--network <name> 指定网络;
--compile-all 编译所有合约,--verbose-rpc 记录truffle和以太坊客户端之间的通信
truffle networks [--clean ] 显示所有网络,--clean 表示删除与命名网络无关的所有网络工作,一般用于发布包之前清楚无关网络,
truffle opcode <contract_name> 打印给定合同的已编译操作码,必须是合约名称不是文件名
truffle publish 将包发布到ETHPM。
truffle serve [ -p <port>] [--network <name> ] 根据需要提供构建的应用程序,重建和重新部署更改。
truffle test <test_file> [--compile-all] [ --nertwork <name> ] [ --verbose-rpc ] 测试文件,<test_file> :要运行的测试文件,如果当前目录中不存在文件,可以包含路径信息。
truffle unbox <box_name> 下载truffle 提供小项目
truffle version 查看版本
truffle watch 监视文件系统的进行更改并自动重建项目。此命令将启动对合同,应用程序和配置文件更改的监视。如果有更改,它将根据需要重建应用程序。类似于truffle serve ,但是没有Web服务组件。
API
truffle 有两种API: Contract Abstraction API合约抽象API和Contract Instance API合约实例API。合约实例API是根据合约源文件中可用的函数创建的,合约抽象API是一组存在于所有合约中的函数。
合约抽象API
MyContract.new([arg1, arg2, ...],[tx params]) 根据MyContract的构造函数参数[arg1, arg2, ...]创建一个合约实例并部署到网络。
MyContract.at(address) 合约地址创建合约实例
MyContract.deployed() 创建表示合约所在地址的合约抽象的实例,当地址设置时,truffle 会保存地址,以便可以从所使用的给定以太网网络推断部署的地址。这允许你引用已经部署的合约编写代码而不用自己管理地址。
MyContract.setProvider(provider) 设置合约抽象将用来做交易的web3服务器
MyContract.setNetwork(network_id) 设置合约所代表的网络
MyContract.hasNetwork(network_id) 合约抽象是否表明一个特定网络
//继续翻译https://github.com/trufflesuite/truffle-contract
合约实例API
每个合约实例根据solidity不同动态创建