1.登录infura官网注册,获取API-KEY
Infura是一个托管的以太坊节点集群,可以将你编写的以太坊智能合约部署到infura提供的节点上,而无需自己搭建以太坊节点。
https://infura.io/
2.安装HDWalletProvider
Infura的HDWalletProvider是一个独立的npm软件包,切换到truffle工程目录使用如下命令安装
npm install truffle-hdwallet-provider
然后修改truffle.js或truffle-config.js文件内容如下:
// 定义HDWalletProvider对象
var HDWalletProvider = require("truffle-hdwallet-provider");
// 提供助记词(mnemonic)或私钥 来导入你的账户
var mnemonic = "topic foster find apple famous have bonus month remain middle funny smart";
// 添加Ropsten测试网络定义
module.exports = {
networks: {
ropsten: {
provider: function() {
// 定义以太坊节点 https://ropsten.infura.io/your-api-key
return new HDWalletProvider(mnemonic, "https://ropsten.infura.io/503fc5af65d64cdaa090d2873201bc5a")
},
network_id: 3
}
}
};
3. 增加配置文件.env
Dotenv是一个零依赖模块,用于从".env"文件中导入环境变量到 process.env,对DAPP来说,这样就可以不用上传钱包助记词等核心机密到GITHUB,便于资产安全。
.env file
mnemonic=topic foster find apple famous have bonus month remain middle funny smart
infurakey=xxxxxxxxxxxxxxxxxxxxxxxxxx
prakey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
这样上面代码如下:
// 定义HDWalletProvider对象
var HDWalletProvider = require("truffle-hdwallet-provider");
const reselt=require('dotenv').config(); // 默认读取项目根目录下的.env文件,用process.env.调用
if (result.error) {
throw result.error;
}
console.log(result.parsed);
module.exports = {
networks: {
ropsten: {
provider: function() {
// 定义以太坊节点 https://ropsten.infura.io/your-api-key
return new HDWalletProvider(process.env.mnemonic, "https://ropsten.infura.io/"+ process.env.infurakey);
},
network_id: 3
}
}
};
4.部署到以太坊网络
执行如下命令,部署到以太坊测试网络ropsten
truffle migrate --network ropsten
若部署时出现 network up to date 原因由于合约移植是懒编译的,如果发现已经发布过,且发布的版本号没有变化就不会再发布,所以使用--reset。使用truffle migrate --reset来强制重编译并发布所有合约.
若部署时候出现类似 node_modules\node-sss\ventor not found 等出错信息 首先安装 npm install node-sss --save ,如果还是出现 用npm rebuild node-sass --save 重建生成即可。