1、注册infura获取API-KEY
我们为什么要使用infura?
我们使用truffle部署只能部署到我们本地运行的网络,不管是测试网络,还是你运行ETH主网,都需要部署到本地运行的节点上。因为Infura是一个托管的以太坊节点集群,可以将你开发的以太坊智能合约部署到infura提供的节点上,而无需搭建自己的以太坊节点。可能你还不了解Infura,但如果你使用过MetaMask,那么就已经接触过Infura了,因为它是MetaMask背后的以太坊供应商。
注册登陆后步骤如下:
我们新建一个项目,起名为TEST,然后会自动生成API key和秘钥,以及网络地址,这些在truffle.js 里需要配置的。
在这个例子中,我们将迁移到Ropsten测试网络,所以我们要把ENDPOINT 选项中选择ROPSTEN网络。
2、truffle 部分
新建文件加truffle,然后cd 到这个文件夹内,在命令行窗口输入命令truffle init
初始化项目,就能看到turffle文件夹内出现了一些文件和文件夹,详情请看教程十六,上有截图
我们还是通过那个简单的HelloWorld合约,来熟悉Truffle框架的合约网络部署
1、在contracts文件夹内新建一个HelloWrold.sol合约,合约内容如下
pragma solidity ^0.4.24;
contract HelloWorld{
uint i = 8;
function getI ()public view returns(uint){
return i;
}
function addI (uint s)public view returns(uint){
return (i+s);
}
}
2、编辑你的truffle.js文件来启用HDWalletProvider并为部署到Ropsten进行必要的配置,我们需要下载HDWalletProvider 插件
在控制台中使用命令npm install truffle-hdwallet-provider
下载完成后truffle文件夹内会出现一个 node_modules 文件夹,里面就是我们下载的插件
3、修改tuffle.js文件,这里我们就要用到infura 注册后创建新项目得到的那些。
var HDWalletProvider = require("truffle-hdwallet-provider");
// infura 注册后获取的api-key
// var infura_apikey = "306de3600a284848a8d211bda70b9d5b";
// 接下来,提供助记词(mnemonic)来生成你的账户。 進入 MetaMask -> Settings -> reveal seed words 复制到这里
//警告 :在此过程中,我们强烈建议将助记符存储在另一个(秘密)文件中,以降低助记符泄漏风险。 如果有人知道你的助记符,他们将拥有你所有的地址和私钥!我这个地址是测试地址,没有主网的ETH代币,所以无所谓!
var mnemonic = "section achieve bright crowd garage similar couple plate check fury okay utility";
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 7545,
network_id: "*"
},
private: {
host: "localhost",
port: 8545,
network_id: "*" // Match any network id
},
ropsten: {
provider: new HDWalletProvider(mnemonic, "https://ropsten.infura.io/v3/306de3600a284848a8d211bda70b9d5b"),
network_id: 3,
gas: 3012388,
gasPrice: 30000000000
},
main: {
provider: new HDWalletProvider(mnemonic, "https://ropsten.infura.io/v3/306de3600a284848a8d211bda70b9d5b"),
network_id: 3,
gas: 3012388,
gasPrice: 1000000000
}
}
};
4、开始编译我们写的合约 通过命令 truffle compile
编译合约,编译完成后生成一个build文件夹,编译好的文件在这个文件夹里
5、在migrations 文件夹内新建一个文件2_initial_helloworl.js ,内容如下
var HelloWorld = artifacts.require("./HelloWorld.sol");
module.exports = function(deployer) {
deployer.deploy(HelloWorld);
};
目前我们的目录结构如下
6、迁徙合约到Ropsten网络 truffle migrate --network ropsten
,若显示 Network up to date. 则需要用truffle migrate --reset --network ropsten
命令
我们可以将上面的txHash :0xb600ae8ffb76cc2dee81db89d54027c697c94310bc1c383a29a1af13a4acf6c1 放到Ropsten查看。
https://ropsten.etherscan.io/tx/0xb600ae8ffb76cc2dee81db89d54027c697c94310bc1c383a29a1af13a4acf6c1
可以看到,我们浏览器中的合约地址和命令行中的地址是一样的
现在我们就将我们的合约通过truffle 部署到以太坊的Ropsten测试网络上了。而我们在本地并没有运行Ropsten的节点,同时可以看到我们的部署合约的账户上的Ropsten代币也相应的有减少。。。