zoukankan      html  css  js  c++  java
  • 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相关的命令)

  • 相关阅读:
    UVA 408 (13.07.28)
    linux概念之用户,组及权限
    Java实现 蓝桥杯 历届试题 网络寻路
    Java实现 蓝桥杯 历届试题 约数倍数选卡片
    Java实现 蓝桥杯 历届试题 约数倍数选卡片
    Java实现 蓝桥杯 历届试题 约数倍数选卡片
    Java实现 蓝桥杯 历届试题 约数倍数选卡片
    Java实现 蓝桥杯 历届试题 约数倍数选卡片
    Java实现 蓝桥杯 历届试题 九宫重排
    Java实现 蓝桥杯 历届试题 九宫重排
  • 原文地址:https://www.cnblogs.com/Mrfanl/p/10160979.html
Copyright © 2011-2022 走看看