infura提供了托管的以太坊节点,如何将智能合约部署到infura提供的托管节点?本教程介绍配置truffle将智能合约经过infura发布到以太坊网络上。git
Infura是一个托管的以太坊节点集群,能够将你开发的以太坊智能合约部署到infura提供的节点上,而无需搭建本身的以太坊节点。github
可能你还不了解Infura,但若是你使用过MetaMask,那么就已经接触过Infura了,由于它是MetaMask背后的以太坊供应商。npm
出于安全缘由,Infura无论理你的私钥,这意味着Infura不能表明你签署交易。windows
可是,Infura能够经过使用HDWalletProvider
来签署交易。 该服务能够处理事务签名以及与以太坊网络的链接。 点击这里了解更多关于HDWalletProvider的信息 。安全
本教程将向你展现如何使用Infura将现有的dapp迁移到Infura支持的以太坊网络。 在这个特定的例子中,咱们将迁移到Ropsten测试网络。 咱们假设你已经有了一个dapp, 若是须要一个测试dapp,可使用Truffle提供的宠物店dapp。网络
Infura的HDWalletProvider是一个独立的npm软件包,以下安装:并发
npm install truffle-hdwallet-provider
注意 :若是你在Windows上安装而且遇到MSBUILD错误,则可能须要安装Windows构建工具。 在具备管理员权限的控制台中,运行
npm install -g windows-build-tools
而后再次尝试安装。app
在使用Infura以前,须要注册Infura访问令牌 。ide
填写并提交表格后你就能够收到访问令牌。 相关信息将显示在屏幕上并发送到你提供的电子邮件。 须要记录下来这个访问令牌并确保它不被别人看到!函数
下一步是编辑你的truffle.js文件来启用HDWalletProvider并为部署到Ropsten进行必要的配置。
STEP 1:首先,在配置文件中定义HDWalletProvider对象。 在truffle.js文件的顶部添加如下代码:
var HDWalletProvider = require("truffle-hdwallet-provider");
STEP 2:接下来,提供助记词(mnemonic
)来生成你的帐户。
var mnemonic = "orange apple banana ... ";
警告 :在此过程当中,咱们强烈建议将助记符存储在另外一个(秘密)文件中,以下降助记符泄漏风险。 若是有人知道你的助记符,他们将拥有你全部的地址和私钥!
STEP 3:添加Ropsten网络定义:
module.exports = { networks: { ropsten: { provider: function() { return new HDWalletProvider(mnemonic, "https://ropsten.infura.io/<INFURA_Access_Token>") }, network_id: 3 } } };
注意事项:
new HDWalletProvider(mnemonic, "https://ropsten.infura.io/<Infura_Access_Token>", 2);
帐户索引是从零开始的,因此2表示第三个地址。
确保你的账户有足够的帐户余额来进行部署。 能够经过称Faucet的服务在Ropsten网络上获取Ether。 虽然在那里有多个Faucet网站,咱们推荐的一个服务是在EthTools上托管的 。
注意 :也能够经过MetaMask申请ether。 在Ropsten上链接你的账户,而后点击“Buy”按钮,该按钮将提供MetaMask的Ropsten测试Faucet的连接,它的工做方式与上述相似。
咱们如今能够开始将合约部署到Ropsten上了!
STEP 1: 编译项目:
truffle compile
STEP 2:部署到Ropsten网络:
truffle migrate --network ropsten
若是一切顺利,应该能够看到相似于如下内容的输出:
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
)。 有关详细信息,请参阅Truffle配置文档。
STEP 3:若是想验证合约是否已成功部署,能够在Etherscan的Ropsten部分进行检查。 在搜索字段中,输入部署交易ID。 在上面的例子中,交易ID是:
0x7efbb3e4f028aa8834d0078293e0db7ff8aff88e72f33960fc806a618a6ce4d3
你应该能够看到有关交易的详细信息,包括交易受到保护的区块号。
恭喜! 你已经使用Infura和truffle的组合将合约部署到Ropsten上了!
推荐两个以太坊相关的实战教程:
更多的内容能够访问博客:http://blog.hubwiz.com/2018/04/01/truffle-infura-deploy-contract/