1.作用:为以太坊提供开发环境,测试框架等,使得以太坊开发测试更加方便。
2.功能
一.安装 npm install -g truffle
二.新建turffle目录
三.mkdir 0_init
四.初始化
truffle init
目录结构
创建合约
编译:truffle compile
再打开一个终端
部署迁移
3.1artifacts.require:告诉truffle,要和哪个合约进行交互,返回一个合约抽象。Require参数可以是合约名称,也可以是 合约文件,但是由于一个合约文件中可能会存在多个合约,所以一般不要使用合约文件作为参数。
3.2module.exports:导出一个函数,被导出的函数会接受deployer对象作为第一个参数
3.3Migration.sol:特定合约,一般来说只有在第一次部署迁移的时候才会被部署,不要去做修改。
3.4Deployer:部署器,组织部署任务,同步执行,另外deployer每个函数都会返回一个Promise,可以通过promise把有执 行顺序依赖关系的部署任务组成一个队列。
3.5Deploy api:
3.5.1 Deploy(CONTRACT,AREGS…,OPTIONS):合约部署,可以同时部署多个合约
3.5.1.1 Contract:合约名称
3.5.1.2 ARGS:如果合约有构造函数,这里代码构造函数的参数
3.5.1.3 Deployer.deploy(contract, arg1, arg2)
3.5.1.4 Deployer.deploy([[A, arg1,arg2…],[B,arg1],C])
3.5.1.5 OPTIONS:可选参数,形式{overview:true/false}:判断在当前合约已经部署的情况下,是否还要 再次部署
3.5.2 Deployer.link(LIBRARY,DEST):链接:把一个已经部署好的库链接到一个或者多个合约里面
3.5.2.1 Deployer.deploy(a);deployer.link(a,b);deployer.deploy(b);
3.5.2.2 连接库到多个合约:
3.5.2.3 Deployer.link(LIBA,[B,C,D]);
3.5.3 Deployer.then():类似于nodejs的promise,通过该函数可以操作合约中的数据。
4. 合约抽象:javascript和以太坊合约交互的黏合济,主要用于封装合约代码,不用关心合约的实现细节。
npm init
npm install –save [email protected]
5.合约交互:以太坊向以太坊网络写入数据以及从以太坊网络中读取的过程叫做交互
6. Truffle unbox :在truffle应用中,通过已有的框架可以简化开发,测试,运行
7. 合约调试
8.truffle develop 和truffle console
9.执行外部文件:truffle exec
10.网络相关 :可以在配置文件配置多个网络,通过truffle migrate –network
基础目录:/Users/yves/ethereum/truffle
操作系统:Mac OS
1:新建目录mcoin并进入;
mkdir mcoin && cd mcoin
2: 使用truffle unbox构建metacoin项目;
truffle unbox metacoin
3:编辑truffle.js文件,主要设置网络节点的地址,端口与网络编号,我本地用的是Ganache客户端支持,分别如图
4:在mcoin目录下,执行npm init形成node环境构建
npm init
5:添加依赖web3 truffle-contract,后package.json文件如下截图:
npm install web3@^0.18.4–-save
npm install truffle-contract@^3.0.5–-save
6:编译部署
truffle compile
truffle migrate
7:编写index.js文件 注意本地两账号要根据ganache 测试账号更改
var Web3= require("web3"); //添加以太坊web3.js支持
var contract = require("truffle-contract"); //对node或浏览器端来说,更佳的以太坊合约抽象
//本地Ganache节点支持
var provider = new Web3.providers.HttpProvider("http://127.0.0.1:7545");
//源MetaCoin合约
var SimpleNameRegistry = contract(require("./build/contracts/MetaCoin.json"));
SimpleNameRegistry.setProvider(provider);//合约提供注册
SimpleNameRegistry.setNetwork(5777);//rpcport
//本地Ganache两账号
var account_one = "0x71D1d7371a618fA8Bb9B935Ada72994CD52Ad9d8"; // first address
var account_two = "0xB94cf76E109BEE4b798898aD28EA475AbcfB5308"; // another address
//instance of metacoin
var meta;
SimpleNameRegistry.deployed().then(function(instance) {
meta = instance;
//send 10 metacoin from account_one to account_two
returnmeta.sendCoin(account_two, 10,{from: account_one});
}).then(function(result){
//query balance of metacoin of account one
returnmeta.getBalance.call(account_one,{from:account_one});
}).then(reslut=>{
console.info("balance of account_one:" + reslut); //info
}).catch(function(e) {
// There was an error! Handle it.
console.log(e);
})
编译 truffle compile
部署 truffle migrate
执行 node index.js
结果: