0%

以太坊开发——Truffle的介绍与使用

最近在跟老师做区块链方向的项目,奈何自己的知识面太窄,没学过前端,对于常用的web3,JavaScript等都不够熟悉,在做项目过程中经常碰壁,还找不到解决方法,多番几次遇到无从下手的问题!ε=(´ο`*)))唉,心酸,终究自己现在还不是一个大佬。不管怎样,还是一项一项任务学习解决吧,不然可能花了大量时间,还一事无成!

接下来谈一谈在以太坊开发中Truffle的使用,加深一下自己的理解。


Truffle的简介

Truffle是目前最流行的以太坊DApp开发框架,使用了EVM的区块链的资产管理通道,它基于JavaScript,可以让在以太坊上的开发变得简单。Truffle有以下特点:

  • 内置的智能合约编译,链接,部署和二进制文件的管理。
  • 快速开发下的自动合约测试。
  • 脚本化的,可扩展的部署与发布框架。
  • 部署到不管多少的公网或私网的网络环境管理功能
  • 使用EthPM&NPM提供的包管理,使用ERC190标准。
  • 与合约直接通信的直接交互控制台(写完合约就可以命令行里验证了)。
  • 可配的构建流程,支持紧密集成。
  • 在Truffle环境里支持执行外部的脚本。

Truffle的客户端

我们在做项目时写的智能合约都必须部署在链上才能够进行测试,所以利用Truffle构建DApp也是必须选择一条链来部署。我们可以选用一些公共测试链如Rinkeby或者Ropsten,不过在部署过程中需要花费代币,代币可以从已有的免费水龙头网站中获取,但是速度慢,且不易实现(反正我是没有弄到代币(눈‸눈)。另外,也就是我们一般是采用部署到私链上(如何自己创建一条私链,下次进行补充)。Truffle客户端推荐使用以下两种客户端:

  • Ganache
  • truffle develop

Ganache的前身是testrpc,它可以为我们提供 10 个账户,每个账户有 100 个以太,为我们测试所用。这些账户可以当做存钱的银行账户,里面默认有10个货币,(以太(Ether,ETH)就是以太坊生态系统中的 钱/货币)。你需要用这个账户创建交易,发送/接收以太。而truffle develop是truffle内置的客户端,是以ganache为内核,跟命令行版本的Ganache类似,它也可以给我们提供10个账户,唯一注意的是在truffle develop里执行truffle命令时需要省略前面的“truffle“,比如“truffle compile”只需要敲“compile”就可以了。

部署环境

安装truffle+ganache开发和测试环境

truffle是开发环境,ganache是测试环境(部署合约),工作在64位Ubuntu中。

以下命令建议全部使用sudo运行


  • 安装git
    apt-get update
    apt-get install git

  • 安装nodejs环境

    apt-get install nodejs
    apt-get install npm

    (可以用以下命令将nodejs更新到最新版本

npm install -g n
n stable

  • 安装truffle

    npm install -g truffle

  • 安装ganache

    npm install -g ganache-cli


好了,基本配置暂时就到这里,我们接下来打开虚拟机终端,输入ganache-cli就可以得到10个默认账户和它的私钥了! 并注意看到ganache的监听的端口为8545!

创建工程

首先我们创建一个空目录,在下面创建一个truffle项目:

1
2
3
>mkdir test
>cd test
>truffle init

完成后,你将可以得到以下目录:

  • app/ : 你的应用文件运行的默认目录。这里面包括推荐的javascript文件和css样式文件目录,但你可以完全决定如何使用这些目录。
  • contracts/ :Truffle默认的合约文件存放地址。
  • migrations/ : 存放发布脚本文件
  • test/ :用来测试应用和合约的测试文件
  • truffle-config.js/ : Truffle的配置文件

这些是执行truffle init时在当前目录初始化的一个构建在以太坊内的代币demo应用, 我们可以使用这个工程来进行快速的学习,或者你也可以删除这些文件来创建一个你自己的工程。

但是,在此版本中,truffle init有问题,这里不推荐使用此种方式来初始化工程,我们一般这样操作

1
2
>npm install -g webpack
>truffle unbox webpack

这样我们就可以正确引入一个范例,其中truffle unbox是指直接下载一个truffle box ,即一个构建好的项目,就像一个封装好的一个盒子。unbox的过程会相对长一点,大约十几分钟左右。完成之后可以看到如下界面:

在以后我们开发以太坊DApp时也建议使用此种方法引入范例,然后根据自己的需求进行更改里面的源码。


我们打开contracts文件,可以看到里面存在3个合约,其中 Migrations.sol 是Truffle自己定义的一个合约文件,是用来管理应用合约的部署,因此请勿删除!另外两个合约是这个项目的有关代币发送的智能合约,我们可以根据自己需求进行更改或删除。

migrations文件夹,可以看到1_initial_migration.js2_deploy_contracts.js两个文件,其中第一个文件的作用是向区块链部署 Migrations 合约。 这个合约的作用是存储并跟踪已经部署的最新合约。每次运行脚本时,truffle就会向区块链查询获取已部署好的合约,然后部署新的合约。部署完成后,这个脚本会更新 Migrations 合约中的last_completed_migration 字段指向最新部署的合约。我们可以简单地把 Migrations 合约当成是一个数据库表,字段last_completed_migration 总是保持最新状态。所以我们想要部署一个文件时,可以按照它的模式写。 2_deploy_contracts.js呢?我们需要在里面部署我们自己的智能合约,它是在前面的文件执行完成后才调用自己。因为truffle在执行migrate操作时,首先会检查migrations文件夹,然后依次按照文件名的编号进行部署。

在部署我们的合约之前,我们需要先打开truffle-config.js配置文件,打开8545端口,如图:

一切准备就绪后,记得打开我们的ganache客户端,执行ganache-cli ,不要退出!然后我们依次进行:

1
2
3
4
>truffle compile
>truffle migrate
>cd app
>npm run dev

就可以通过来运行我们的范例!

当我们掌握以上步骤后,就可以开发简单的智能合约了。我们会在以后的使用中,会发现越来越多ganache和truffle的功能。

-------------本文结束感谢您的阅读-------------