使用 EthPM 包管理工具

使用 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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • 【本文目标】 通过本文的学习和时间,你将熟悉以太坊开发框架Truffle的配置和运行,并借助Truffle完成一...
    笔名辉哥阅读 13,017评论 8 55
  • 这个Dapp教程会分为三部分。从简单的投票功能开始,慢慢熟悉Dapp的开发环境与生态圈,后面再慢慢加入ERC20 ...
    youclavier阅读 4,411评论 1 3
  • 不知道是一时冲动还是内心深处确实有点儿想法,稀里糊涂就报名参加了写作班....唉什么都不会弄.....后悔去吧! ...
    凡人灵菱阅读 175评论 0 0
  • 妈妈是家里的长女,姐弟三个,不多!比小舅舅大很多岁!外婆在在小舅舅还未断奶时便撒手而去!那时妈妈已经嫁给我爸爸了。...
    山猫猫阅读 667评论 6 6
  • 生活忙于奔波 忙于应付别人的节奏 忙于用笑容去附和别人 忙于听别人聊天,吵闹 忙于不知道每天都在忙什么 你说这就是...
    雨夏rain阅读 126评论 0 0