使用 EthPM 包管理工具

EthPM 是 Ethereum 提供的软件包注册表。它遵循ERC190规范来发布和使用智能合约包,
并获得了许多不同的Ethereum开发工具的广泛支持。为了表示我们的支持,我们将 Ethereum
公司的软件包注册表直接集成到 Truffle 中。

安装包

使用 EthPM 安装包和 NPM 类似。运行如下命令即可:

$ truffle install <package name>

你也可以通过指定版本号来安装:

$ truffle install <package name>@<version>

与NPM一样,EthPM版本遵循semver。您可以在Ethereum包注册表中找到所有可用包的列表。

安装依赖

你的项目定义一个 ethpm.json 文件,用来配置项目的依赖的包以及版本号(类似与npm的package.json)。
安装所有的依赖,运行如下命令行:

$ truffle install

更多 ethpm.json 请查看下面板块的包配置。

使用已经安装的合约

已经安装的合约都在工程目录下的 installed_contracts 目录中。如果文件夹不存在,将会自动创建这个文件夹。
把这个文件夹看作跟 node.js 中的 node_modules 文件夹一样,不要修改里面的东西。

安装好的包何以在测试、迁移以及智能合约中使用( import or require )。例如,solidity编写的智能合约,想要
owned 包中 import owned.sol

pragma solidity ^0.4.2;import "owned/woned.sol";contract MyContract is owned {// ...
}

类似的,迁移脚本中想要使用 ens 包中的 ens.sol

文件: ./migrations/2_deploy_contracts.js

var ENS = artifacts.require("ens/ENS");
var MyContract = artificats.require("MyContract");module.exports = function(deployer){deployer.deploy({overite: false}).then(function(){return deployer.deploy(MyContract, ENS.address);});
};

注意在上面的迁移文件中,我们使用ens包,并基于ens是否已经有一个地址集有条件地部署ens合约。
这是 deployer 提供给您的一种巧妙的技巧,它使根据网络工件的存在编写迁移变得更加容易。
在这种情况下,如果我们在Ropsten网络上运行我们的迁移,这个迁移不会部署ENS合约,
因为(在撰写本文时)Ropsten是规范的合约存在的地方——我们不希望部署我们自己的合约。
但是如果我们对不同的网络或者测试网络运行迁移,那么我们需要部署ENS契约,这样我们就有了一个依赖合约。

发布你自己的包

发布你自己的包和安装一样简单,但是像NPM一样,需要更多的配置。

Ropsten, Ropsten, Ropsten

Ethereum包注册表目前存在于Ropsten测试网络上。要发布到注册中心,我们需要设置自己的Ropsten配置,
因为我们将进行需要签名的交易。

在本例中,我们将使用 Infura 发布包,以及 truffle-hdwallet-provider NPM模块和一个12字的hd-wallet助记符,
该助记符表示我们在Ropsten网络上的 Ethereum 地址。首先,通过NPM在项目目录中安装truffle-hdwallet-provider:

$ npm install truffle-hdwallet-provider --save

然后编辑你的 truffle.js 配置文件,使用十二个字符的地址 添加 ropsten 网络:

文件 truffle.js

var HDWalletProvider = require("truffle-hdwallet-provider");var mnemonic = "opinion destroy betray ...";module.exports = {networks: {development: {host: "127.0.0.1",port: "8545",network_id: "*"},ropsten: {provier: new HDWAlletProvider(mnemonic, "https://ropsten.infura.io/");network_id: 3 // official id of the ropsten network}}
}

包配置

与NPM一样,EthPM的配置选项也包含在一个名为 ethpm.json 的单独JSON文件中。这个文件与Truffle配置放在一起
,它提供了发布软件包所需的所有信息。您可以在Configuration部分中看到可用选项的完整列表。

文件 ethpm.json

{"package_name": "adder","version": "0.0.3","description": "simpe contract to add two numbers","authors": ["Tim Coulter <tim.coulter@consensys.net>"],"keywords": ["ethereum","addition"],"dependencies": {"owned": "^0.0.1"},"license": "MIT"
}

命令

配置成功以后,发布包:

$ truffle publish

会有如下输出:

$ truffle publish
Gathering contracts...
Finding publishable artifacts...
Uploading sources and publishing to registry...
+ adder@0.0.3

发布之前

当使用默认开发网络(如配置为匹配任何Ethereum客户端(如Ganache或Truffle development))这样的网络时,
您肯定会有不希望发布的网络工件。在发布包之前,考虑运行以下命令来删除任何无关的网络构件:

$ truffle networks --clean

查看命令行参考文档,获取更多信息

使用 EthPM 包管理工具相关推荐

  1. Python包管理工具Distribute的安装

    Python包管理工具Distribute的安装 Python的包管理工具常见的有easy_install, setuptools, 还有pip, distribute,那麽这几个工具有什么关系呢,看 ...

  2. pip包管理工具-install执行流程简单查看

    pip概述 pip是python提供的包管理工具,该工具提供了对python包的查找.下载.安装与卸载等功能的工具,当前是python中比较主流的管理工具. pip下载安装包的概述 pip工具的本质通 ...

  3. Python的包管理工具Pip

    接触了Ruby,发现它有个包管理工具RubyGem非常好用,而且有非常完备的文档系统http://rdoc.info 发现Python下也有相同的工具,包含easy_install和Pip.只是,我没 ...

  4. Java基础-Eclipse第三方安装包管理工具之Maven

    Java基础-Eclipse第三方安装包管理工具之Maven 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 玩过Linux的小伙伴应该都知道yum吧,我们只要把搭建好的yum仓库配 ...

  5. Pipenv – 超好用的 Python 包管理工具

    pipenv 是什么 pipenv 是 python 官方推荐的包管理工具,集成了 virtualenv.pyenv 和 pip 三者的功能于一身,类似于 php 中的 composer. 我们知道, ...

  6. Python 包管理工具解惑

    本文转载自http://zengrong.net/post/2169.htm,感谢原作者. 一.困惑 作为一个 Python 初学者,我在包管理上感到相当疑惑(嗯,是困惑).主要表现在下面几个方面: ...

  7. Helm包管理工具(简介、安装、方法)

    认识Helm 每次我们要部署一个应用都需要写一个配置清单(维护一套yaml文件),但是每个环境又不一样.部署一套新的环境成本是真的很高.如果我们能够使用类似于yum的工具来安装我们的应用的话那就太好了 ...

  8. npm nodejs包管理工具 简介

    NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器下载并 ...

  9. 节省磁盘空间的新一代包管理工具PNPM

    在使用前端工具时,yarn.npm都是大家常用的包管理器,但是如果有多个项目使用了同一个依赖的时候,就会在硬盘里保存相应的副本,一旦这个多个项目变得数字很大,那么这个硬盘空间也是会逐渐吓人的. 所以今 ...

最新文章

  1. 生信服务器 | 更改 CentOS/RHEL 6/7 中的时区
  2. CRM User Status profile中Business Transaction字段的用途
  3. 比特币和比特币现金就隐私保护展开辩论
  4. Xamarin Essentials教程数据处理传输数据
  5. 企业网络推广——企业网络推广专员如何预估网站优化流量的增长?
  6. 洛谷P2221 [HAOI2012]高速公路(线段树+概率期望)
  7. iar烧录程序步骤_STM8入门以及程序编译、烧录、IAR使用方法(扫盲篇...
  8. java改文字乱码快捷键,java.util.Properties读取中文内容(UTF-8格式)的配置文件,发生中文乱码...
  9. rocksdb原理_[转]Rocksdb Compaction原理
  10. android是java_为什么大家都用JAVA写android程序
  11. 设计模式——命令模式
  12. office2010下压缩图片没有效果解决方案
  13. python使用dbm持久字典详解
  14. jieba 中文分词
  15. WEBMAX官方帮助手册 惊艳登场
  16. 佛系前端面试题记录--第一周
  17. 如何通过局域网共享本机网页
  18. PhotoShop CS6实现照片背景虚化效果
  19. 猪猪女孩有多蠢,猫爪杯就有多火
  20. mysql根据中文拼音分组_【改进篇】使用MySql实现好友昵称按拼音排序或分组

热门文章

  1. Axure RP9 自学之路2-基础操作篇
  2. Django rest_framework 认证源码流程
  3. Patchwork间谍组织将目标扩大至政府
  4. Python(Dict和Set类型)
  5. MongoDB 是如何鼓励和激励开发者社区的
  6. 乔春洋:网上品牌战略
  7. Tokyo Tyrant基本规范(4)--协议
  8. Cocos2d-x之绘制线条
  9. arcgis server for flex中文乱码问题(转)
  10. 道家遁甲式(又名道家奇门)