以太坊之使用truflle和infura部署以太坊合约|猿创征文

╰つ栺尖篴夢ゞ
iOS领域优质创作者
博客专家认证
2022-07-03 14:45:34

## 一、前言
- Infura 是一个托管的以太坊节点集群,可以将你开发的以太坊智能合约部署到 infura 提供的节点上,而无需搭建自己的以太坊节点。
- 出于安全原因,Infura 不管理你的私钥,这意味着 Infura 不能代表你签署交易。但是,Infura 可以通过使用
 HDWalletProvider 来签署交易。该服务可以处理事务签名以及与以太坊网络的连接。

## 二、安装 HDWalletProvider
- Infura 的 HDWalletProvider 是一个独立的 npm 软件包, 如下安装:

```cpp
npm install truffle-hdwallet-provider
```
- 如果在 Windows 上安装并且遇到 MSBUILD 错误,则可能需要安装 Windows 构建工具。在具有管理员权限的控制台中, 运行 npm install -g windows-build-tools 然后再次尝试安装。

## 三、注册 Infura
- 在使用 Infura 之前,需要注册Infura访问令牌,填写并提交表格后你就可以收到访问令牌。
- 相关信息将显示在屏幕上并发送到你提供的电子邮件,需要记录下来这个访问令牌并确保它不被别人看到。

## 四、配置 Truffle 项目
- 接下来是编辑你的 truffle.js 文件来启用 HDWalletProvider,并为部署到 Ropsten 进行必要的配置。
- 首先,在配置文件中定义 HDWalletProvider 对象,在 truffle.js 文件 的顶部添加以下代码:

```cpp
var HDWalletProvider = require("truffle-hdwallet-provider");
```
- 接下来,提供助记词(mnemonic)来生成你的账户:

```cpp
varmnemonic = "orange apple banana ...";
```
- 在此过程中,建议将助记符存储在另一个(秘密)文件中,以降低助记符泄漏风险。如果有人知道助记符,他们将拥有你所有的地址和私钥。
- 添加 Ropsten 网络定义:

```cpp
module.exports = {
    networks: {
        ropsten: {
            provider: function() {
                return new HDWalletProvider(mnemonic,"https://ropsten.infura.io/<INFURA_Access_Token>")
                },
            network_id: 3
        }
    }
};
```
- 注意事项:
- - 虽然该示例仅定义了单个网络,但你可以像往常一样定义多个网络。
- - ropsten 网络定义中的 provider 将使用实例化的 HDWalletProvider。
- - HDWalletProvider 以助记符和期望的网络为参数,Infura 主页上提供 Infura 支持的网络列表。
- - 确保使用前面拿到的 Infura 访问令牌替换。
- provider 值被封装在一个函数中,这可以确保它在需要之前不会被初始化。如果连接到多个网络,这一点尤为重要。
- 默认情况下,由助记符产生的第一个账户将负责执行合约迁移任务。但如果需要的话,你可以传入参数以指定使用的帐户。例如,要使用第三个帐户:

```cpp
new HDWalletProvider(mnemonic, "https://ropsten.infura.io/<Infura_Access_Token>", 2);
```
- 账户索引是从零开始的,所以 2 表示第三个地址。
## 五、使用 Faucet 获取 ether
- 确保你的帐户有足够的账户余额来进行部署,可以通过称 Faucet 的服务在 Ropsten 网络上获取 Ether。
- 虽然在那里有多个 Faucet 网站,推荐的一个服务是在 EthTools 上托管的:
- - 导航至 EthTools 的 Ether Faucet;
- - 输入你的助记符, 并选择你想要多少 ether(最多 5 个);
- - Faucet 将链接到你的第一个帐户,点击“Request Ether” 提交请求。
- - 很快,你的账户将获得请求的 ether。

## 六、部署合约
- 编译项目:

```cpp
truffle compile
```
- 部署到 Ropsten 网络:

```cpp
truffle migrate --network ropsten
```
- 如果一切顺利,应该可以看到类似于以下内容的输出:

```cpp
Using network 'ropsten'.
Running migration: 1_initial_migration.js
 Deploying Migrations...
  ...0xd79bc3c5a7d338a7f85db9f86febbee738ebdec9494f49bda8f9f4c90b649db7
  Migrations: 0x0c6c4fc8831755595eda4b5724a61ff989e2f8b9
Saving successful migration to network...
  ...0xc37320561d0004dc149ea42d839375c3fc53752bae5776e4e7543ad16c1b06f0
Saving artifacts...
Running migration: 2_deploy_contracts.js
  Deploying MyContract...
  ...0x7efbb3e4f028aa8834d0078293e0db7ff8aff88e72f33960fc806a618a6ce4d3
  MyContract: 0xda05d7bfa5b6af7feab7bd156e812b4e564ef2b1
Saving successful migration to network...
  ...0x6257dd237eb8b120c8038b066e257baee03b9c447c3ba43f843d1856de1fe132
Saving artifacts...
```
- 需要提醒的是,你的交易 ID 将与上面的不同。
- 注意:如果收到错误Error: Exceeds block gas limit,你可能需要为合约手动设置油量上限(gas limit)。
- 如果想验证合约是否已成功部署,可以在 Etherscan 的 Ropsten 部分进行检查。在搜索字段中,输入部署交易 ID。在上面的例子中,交易 ID 是:

```cpp
0x7efbb3e4f028aa8834d0078293e0db7ff8aff88e72f33960fc806a618a6ce4d3
```
- 你应该可以看到有关交易的详细信息,包括交易受到保护的区块号。
- 恭喜,你已经使用 Infura 和 truffle 的组合将合约部署到 Ropsten 上了。
 

...全文
111 回复 打赏 收藏 举报
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复
发帖
Ethereum中文社区

183

社区成员

这里是由区块链、以太坊、Web3.0、元宇宙等相关技术组成的国内最大的开发者聚集地,帮助社区成员快速获得更全面、更深度的技术信息,链接更多资源,让开发者更好地入门学习、成长与应用实践。
以太坊区块链web3.py 开源
社区管理员
  • ETHPlanet
  • kkkuntor
  • 活动助手
加入社区
帖子事件
创建了帖子
2022-07-03 14:45
社区公告

Hi,欢迎加入我们!

 

在这里你可以:

  • 获取最官方最新最全的区块链、以太坊、Web3.0学习内容与资源
  • 获取行业内更有价值的研讨会、公开课资源,或参与社区发起的主题活动课程
  • 获得专业的以太坊、区块链、Web3.0相关技术资深专家/讲师的回复或指导,突破学习瓶颈
  • 进行学习打卡、提问或回答问题,提高个人或在社区的影响力,将有机会与各大技术官方深度合作
  • 参与丰富的社区活动,获得更多学习资源、行业资源等
  • 结识更多行业伙伴,参与线上/线下课程、交流会,拓展行业交流圈

 

【最新活动】:

1、6月1日21:00-21:30,DappLearning Infura AMA(线上)点击查看详情