Truffle开发框架

时间:2024-04-13 09:17:42

Web3.js

概念:与以太坊进行合约交互的javaScript的api

作用:以太坊节点只能识别一种JSON-RPC的语言,但JSON-RPC写起来很麻烦,也很容易出错,所以通过web3.js来进行封装,这样就只需要与web3.js进行交互就可以了。

英文文档:https://web3js.readthedocs.io/en/1.0/

Truffle开发框架

概念:Truffle是针对基于以太坊的Solidity语言的一套开发框架。本身基于Java。Truffle为以太坊提供了开发环境、测试框架和资产管道(pipeline),旨在使以太坊开发更容易,使用Truffle你会得到:内置智能合约编译、链接、部署和二进制字节码管理。针对快速迭代开发的自动化合约测试。可脚本化,可扩展的部署和迁移框架。网络管理,用于部署到任意数量的公共和私有网络。使用EthPM和NPM进行包安装管理。用于直接合约通信的交互式控制台。支持持续集成的可配置构建管道。外部脚本运行程序可以在Truffle环境中执行脚本。提供了合约抽象接口,可以直接通过var instance = Storage.deployed();拿到合约对象后,在Java中直接操作对应的合约函数。原理是使用了基于web3.js封装的Ether Pudding工具包。简化开发流程。提供了控制台,使用框架构建后,可以直接在命令行调用输出结果,可极大方便开发调试。

作用:为以太坊提供开发环境,测试框架等,使得以太坊开发测试更加方便。

功能:内置只能合约得编译,链接,部署等管理,可脚本化,可以扩展部署,迁移框架,网络管理,可以部署到任意的公共网络,私有网络,使用npm,ethpm进行包管理,用于直接与合约通信得交互式的控制台,可以在truffle环境中运行外部脚本。

提供合约抽象接口,var instance = Contract.deployed()的语句拿到合约的对象,然后就可以在javascript中操作对应的合约函数。

Truffle安装

首先需要安装nodejs

先下载源码tar包:https://nodejs.org/en/download/,打开网址点击source code。然后将下载好的tar包导入虚拟机中,然后解压,然后将解压好的文件放到/usr/local目录下(这一步很关键一定要放入这个目录下),然后进入解压好的文件输入命令:

./configure
make
make install

查看版本验证是否安装成功 

node -v 
npm -v

 安装truffle

npm install -g truffle

 

 查看是否安装成功

truffle -v

 

 Truffle开发框架

 

安装完成后就可以做个小案例

在home文件夹下建一个文件夹供自己做demo用

然后再在里面建一个data,然后进入data,truffle init

Truffle开发框架

你可以看到Compile:编译,migrate:迁移,test contracts 测试合约。

然后你用webstorm(http://www.jetbrains.com/webstorm/)打开这个data文件夹,然后进行编译。

Truffle开发框架

打开data文件你可以看到这些

目录结构:

Contracts :存放编写的合约脚本

Migcrations:存放迁移部署脚本

Test:存放测试脚本

truffle.js:truffle配置文件

Truffle-config.js:一般在windows下面使用,cmd下,truffle命令和truffle。js 有可能会冲突。

创建合约

在Contracts里面新建一个sol文件编写就可以。

pragma solidity ^0.4.18;

contract Storage{
     uint storageData;
     funtion set (uint data){
     
     storageData = data;
     }
     function get()constant returns(uint){
     return storageData;
     }
}

 

然后就可以编译合约;

直接在webstorm中打开终端然后编译:truffle compile

Truffle开发框架

 编译完成后,你可以看到多了一个build文件夹,文件夹中的文件就是我们想要的。

 

Truffle开发框架

然后我们就该部署了,部署之前需要安装ganache,npm install -g ganache

然后启动ganache-cli

Truffle开发框架

监听地址与端口号要与下面配置文件中的一致

注:如果要重启这个客户端,一定要删掉之前自动创建好的build文件夹,然后重新编译

我们编辑truffle.js配置文件。


module.exports = {
  networks :{
      development:{
          host : "127.0.0.1",
          prot : 8545,
          network_id : "*"

      }
  }
};

然后 在migrations中新建一个2_storage_migration.js(迁移脚本),文件开头一定是数字,因为文件的读取是根据数字来读的数字后边的可以随便写,规范化的写法:数字_合约名称_migration。

 

 

truffle migrate 执行所有在migrations目录下的迁移脚本,如果没有新的迁移脚本,则不会执行操作。如果迁移脚本更改,然后再truffle migrate 一样不会执行任何操作,这时应该, truffle migrate --reset 就会重新部署所有迁移脚本。

 

迁移脚本详解:

1.artifacts.require:告诉truffle,要和哪个合约进行交互,返回一个合约抽象。Require参数可以是合约名称,也可以是合约文件,但是由于一个合约文件中可能会存在多个合约,所以一般不要使用合约文件作为参数。

2.module.exports:导出一个函数,被导出的函数会接受deployer对象作为第一个参数。

3.Deployer:部署器,组织部署任务,同步执行,另外每个deployer文件都会返回一个Promise,可以通过promise把有执行顺序依赖关系的部署任务组成一个队列。

Contracts中的Migrations.sol(特定合约)文件,第一次部署之前可以更改,一经部署,就不要改动它,这里边产生的是一个记录。

Deploy api

Deploy(CONTRACT,AREGS ···,OPTIONS):合约部署 ,可以同时部署多个合约

Contract:合约名称

ARGS:如果合约中有构造函数,这里代表构造函数的参数。

Deployer.deploy(contract,arg1,arg2)

Deployer.deploy([[A,arg1,arg2...],[B,arg1],C])

OPTIONS:可选参数,形式{overview,true/false}:判断在当前合约已经部署的情况下,是否还要再次部署。

Deployer.link(LIBRARY.DEST):链接:把一个已经部署好的库链接到一个或者多个合约里面。

Deployer.deploy(a);a是库,Deployer.link(a,b);b是合约,Deployer.deploy(b)。

链接多个合约:

Deployer.link(a,[b,c,d]);

Deployer.then();类似于nodejs中的promise,通过该函数可以操作合约中的数据。会常用到。