8.4.5 部署合约

即使是最小的项目,也将与至少两个区块链交互:一个在开发人员的机器上,例如ethereumjs testrpc;另一个代表应用最终被部署到的网络,例如以太坊主网络或者私有联盟网络)。

因为合约抽象运行时自动检测网络,这意味着只需要部署应用或者前端一次。当应用运行时,正在运行的以太坊客户端将决定使用哪些artifacts,这将使应用非常灵活。

如果JavaScript文件中包含向以太坊网络部署合约的代码,那么此类文件称为移植文件。这些文件负责分步骤部署 任务,它们假定部署需求将随时间推进而改变——随着项目的推进,用户会创建新的migrations脚本以在区块链上继续。之前运行移植的历史通过一个特 殊的Migrations合约记录在区块链上。如果用户已经看见合约内容和build/contracts目录,或许就已经注意到了Migrations 合约。除了正常的编译或发布之外,不要修改这些合约。

1.移植文件

在migrations目录中,文件名的前缀是数字,例如1_initial_migration.js和2_deploy_contracts.js。前缀数字是为了记录移植是否能成功运行。

Migrations合约在last_completed_migration中存储一个数字,该数字与 migrations文件夹中最后应用的移植脚本相匹配。Migrations合约总是第一个被部署。编号方式是x_script_name.js,x从 1开始。应用合约一般从2开始。

这样,Migrations合约中就存储了最后部署的应用脚本的序号,truffle将不会再次运行这些脚本。另外,应用未来可能需要部署修改过的或新的合约。为此,需要创建一个新的脚本,其序号表示需要进行的步骤。待再次运行之后,它们将不会再次运行。

2.编写移植文件

在移植文件的起始部分,用artifacts.require()方法告诉truffle想和哪个合约交互。该方法类似于节点的require方法,但是在这里,它专门返回一个可以在部署脚本的其他部分使用的合约抽象。

所有移植必须通过module.exports导出函数。每个移植导出的函数都应当用deployer对象作为第一个 参数。该对象从两方面帮助部署:一是提供清晰的API部署智能合约,二是执行一些单调枯燥的任务,例如在artifacts文件中保存已部署的 artifacts供今后使用、接入库等。deployer对象是分阶段部署任务的主要界面。

deployer对象的方法如下。所有方法都是同步的:

·deployer.deploy(contractAbstraction,args...,options)。部 署合约抽象对象指明的特定合约,采用可选constructor实参。这对于单一合约很有用,这样你的DApp合约中只有一个实例存在。这将在部署之后设 置合约地址(即artifacts文件地址属性等同于新部署的地址),且将重写任何此前存储的地址。可以选择性地传送一个合约数组,或者多个数组中的一 个,以加快多个合约的部署进程。此外,最后一个实参是一个可选对象,其中包含单一密钥overwrite。如果overwrite设为false,则 deployer不部署合约(如果已经部署了一个合约)。该方法返回一个承诺。

·deployer.link(library,destinations)。将一个已经部署的库接入一个或者多个合 约。destinations实参可以是一个或者多个合约抽象的数组。如果目的地(destination)里的任何合约都不依赖于接入的 库,deployer就会忽略该合约。该方法返回一个承诺。

·deployer.then(function(){})。用于运行任意部署步骤。在移植中,用该方法调用特定合约函数,添加、修改和重新组织合约数据。在回调函数中,使用合约抽象API部署和接入合约。

根据被部署网络的情况,可以有条件地分步骤部署。这样就要编写移植,以接收第二个参数network。许多热门的库已经被部署到主网络中,因此在使用这些网络时,我们不会再次部署库,而只是接入它们。示例如下:

image.png

在项目中,有两个移植文件,即1_initial_migration.js和2_deploy_contracts.js。不要修改第一个文件,但可以对第二个文件进行修改。2_deploy_contracts.js文件的代码如下:

image.png

这里,首先为CovertLib库和MetaCoin合约创建抽象。无论使用哪个网络,先部署ConvertLib库,然后把库接入MetaCoin网络,最后部署MetaCoin网络。

为了运行移植文件,即部署该合约,运行如下命令:

image.png

上述代码表明truffle在开发网络上运行移植。如果不提供--network选项,则默认使用名为development的网络。

在运行前面的命令之后,会发现truffle将在artifacts文件中自动更新ConvertLib库和MetaCoin合约地址,并更新链接。

下面是可以提供给migrate子命令的一些其他重要选项:

·--reset。从最初开始运行所有移植(而非从上一个移植结束之后开始运行)。

·-f number。从一个特定移植运行合约。

可以使用truffle networks命令实时在不同的网络中发现项目的合约地址和库。


来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=535

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误可能是由于 Maven 仓库中没有找到 `io.minio:minio:8.4.5` 这个依赖项引起的。你可以尝试清理本地 Maven 仓库并重新构建项目,或者手动将依赖项添加到你的项目中。 如果你想手动添加依赖项,可以按照以下步骤操作: 1. 在 `pom.xml` 文件中添加以下内容: ```xml <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.4.5</version> </dependency> ``` 2. 保存文件并运行 `mvn install` 命令重新构建项目。 如果你已经添加了依赖项但仍然遇到此错误,请确保你的网络连接正常并且 Maven 仓库中确实存在这个依赖项。你可以尝试从 Maven 中央仓库手动下载该依赖项并将其添加到本地 Maven 仓库中。 ### 回答2: Maven的依赖报错 "io.minio:minio:8.4.5"未找到,可能有以下几种原因: 1. Maven中央仓库中没有这个版本的Minio依赖。首先,可以尝试更新Maven仓库的索引,使用以下命令: ``` mvn clean install -U ``` 如果还是找不到依赖,可能是因为该版本的Minio还没有发布到中央仓库。可以查看Minio官方文档或者其它资源库,看看是否有别的可用版本。 2. Maven配置了私有或定制的仓库,并且上述版本的Minio在该仓库中找不到。可以检查项目的pom.xml文件,查看是否配置了私有或特定的仓库,然后确认是否在仓库中有该版本的Minio依赖。 3. 如果该版本的Minio是开发中的版本或者不存在,也有可能是由于输入错误或者笔误。建议仔细检查输入,确保依赖的坐标和版本号都没有错误。 总结:在Maven构建项目时,报错"io.minio:minio:8.4.5"未找到的原因可能是:版本未发布到中央仓库、配置了私有或定制的仓库中找不到、输入错误或者笔误等。你可以尝试更新Maven仓库索引、查看其它资源库或者检查配置,找到适合的Minio依赖版本。 ### 回答3: 出现该错误是因为在Maven的依赖中无法找到所需的MinIO版本。 要解决这个问题,首先需要确保Maven的仓库中存在该版本的MinIO依赖。 请按照以下步骤操作: 1. 检查pom.xml文件中是否正确指定了MinIO的依赖。请确保以下代码片段存在于pom.xml文件的<dependencies>标签中: ```xml <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.4.5</version> </dependency> ``` 2. 检查网络连接。确保你的电脑可以正常连接到Maven的中央仓库。 3. 执行Maven的清理和编译命令。可以通过在命令行中进入项目根目录,并执行以下命令来清理和编译项目: ``` mvn clean compile ``` 4. 检查Maven的本地仓库是否已正确下载和安装所需的MinIO依赖。你可以在本地仓库的路径中寻找并确认是否存在以下目录: ``` ~/.m2/repository/io/minio/minio/8.4.5 ``` 如果该目录不存在,则表示Maven的依赖没有正确下载和安装。 5. 尝试切换到其他可用的MinIO版本。如果当前指定的MinIO版本无法找到,你可以尝试更改版本号或选择其他可用的版本。 通过以上步骤,你应该能够解决"Maven Dependency 'io.minio:minio:8.4.5' not found"的问题。如果问题仍然存在,请参考Maven的官方文档或寻求进一步的技术支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值