主页 > imtoken官网下载 > 第23课如何将TRUFFLE智能合约部署到以太坊主网(以宠物店为例)
第23课如何将TRUFFLE智能合约部署到以太坊主网(以宠物店为例)
一、总结
通过《第六课,如何开发DAPP区块链应用(以宠物店为例)》的学习,大家已经掌握了DAPP的编程和以太坊私测环境的调试。 本文将做进一步的技术研究。
【本文目的】
(1) 通过INFURA配置的方式将智能合约部署到ROPSTEN测试网络;
(2) 通过INFURA配置将智能合约部署到以太坊主网;
(3) 了解如何使用.env配置将助记词保存到本地,防止泄露;
【先决条件】
本文假设您已经完成《第六课:如何开发DAPP区块链应用(以宠物店为例)》的学习,在UBUTU环境下成功编译智能合约,通过浏览器运行宠物店程序然后点击收养宠物成功。
二、操作内容
2.1 注册infura获取API-KEY
地址:
辉哥注册后得到API KEY:8ce5ebd357144bef8dceae3de1915e29
2.2 添加配置文件.env
Dotenv 是一个零依赖模块,用于将环境变量从“.env”文件导入到 process.env 中。 对于DAPP,无需将钱包助记词等核心机密上传到GITHUB,便于资产安全。
META MASK的助记词如何获取
META MASK 的助记词用于原始帐户。 在TRUFFLE框架下,默认使用最先创建的ACCOUNT1进行部署操作。
2.获取种子KEY
如何获取imToken钱包的助记词
imToken钱包的助记词一般在你创建钱包的时候就已经备份好了狗狗币钱包导出私钥,后面会删除。 钱包此时只能导出私钥或keystore。
2.3 添加配置文件truffle.js的ROSPTEN和MAINNET环境配置
修改配置文件配置文件truffle.js,增加ROSPTEN和MAINNET环境配置内容。
/*读取.env环境配置的文件变量定义*/
const dotenv = require('dotenv');
常量结果 = dotenv.config();
如果(结果。错误){
扔结果。 错误;
}
console.log(result.parsed);
var NonceTrackerSubprovider = require("web3-provider-engine/subproviders/nonce-tracker");
var HDWalletProvider = require("truffle-hdwallet-provider");
/*访问注册后得到的api-key*/
var infura_apikey = "8ce5ebd357144bef8dceae3de1915e29";
/*读取.env文件中配置的助记词*/
var mnemonic_ropsten = process.env.mnemonic_ropsten;
var mnemonic_mainnet = process.env.mnemonic_mainnet;
模块.exports = {
//看
// 自定义您的 Truffle 配置!
网络:{
发展: {
主机:“127.0.0.1”,
端口:7545,
network_id: "*", // 匹配任意网络id
气体:4500000
},
当地的: {
主机:“127.0.0.1”,
端口:8545,
network_id: "*", // 匹配任意网络id
//气体:4300000
},
ropsten: {
提供商:new HDWalletProvider(mnemonic_ropsten, "https://ropsten.infura.io/"+infura_apikey),
network_id:3,
煤气:3012388,
天然气价格:30000000000
},
主网:{
供应商:功能(){
var wallet = new HDWalletProvider(mnemonic_mainnet, "https://mainnet.infura.io/Np7IGWoN2UOb0tgRWx55");
var nonceTracker = new NonceTrackerSubprovider();
wallet.engine._providers.unshift(nonceTracker);
nonceTracker.setEngine(wallet.engine);
归还钱包;
},
气体:6000000,
network_id: 1,
gasPrice: 10 * 1000000000
}
}
};
2.4 上传代码
辉哥假设你已经创建了宠物店的代码,完成了第六课的练习。
如果没有,可以加入辉哥知识星球下载本案例的代码工程,或者加个专门的微信群交流技术问题。
将DAPP项目上传到UBUNTU的ETH环境。 记得把WINDOWS下的main.env文件改成.env文件,方便运行环境读取。
3.修改配置文件.png
2.5 安装truffle-hdwallet-provider
Infura 组织是 MetaMask 背后的以太坊提供商。 Infura 提供了一个托管的以太坊节点集群,您可以将自己开发的以太坊智能合约部署到 Infura 提供的节点上,而无需构建自己的以太坊节点。
Infura 不保存您的私钥,Infura 可以使用 HDWalletProvider 签署交易。 该服务处理交易签名和与以太坊网络的连接。
在宠物商店根目录下运行命令:
npm install truffle-hdwallet-provider
成功输出参考如下:
duncanwang@ubuntu:~/work/dapp-guide-pet-shop$ npm install truffle-hdwallet-provider > scrypt@6.0.3 preinstall /home/duncanwang/work/dapp-guide-pet-shop/node_modules/scrypt > node node-scrypt-preinstall.js ... npm WARN truffle-hdwallet-provider@0.0.6 requires a peer of truffle@4.x but none is installed. You must install peer dependencies yourself. npm WARN pet-shop@1.0.0 No description npm WARN pet-shop@1.0.0 No repository field. npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.1.3 (node_modules/fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"ia32"}) + truffle-hdwallet-provider@0.0.6 added 566 packages from 381 contributors in 188.892s
辉哥在安装truffle-hdwallet-provider的时候遇到了巨大的坑。 一开始我怀疑是墙的问题。 尝试了各种方法,终于发现是没有安装C/C++编译器。 欢迎大家参考本文“3、常见问题及解决方法”进行解决。
2.6 安装dotenv
npm install dotenv
安装成功的输入如下:
duncanwang@ubuntu:~/work/dapp-guide-pet-shop$ npm install dotenv npm WARN truffle-hdwallet-provider@0.0.6 requires a peer of truffle@4.x but none is installed. You must install peer dependencies yourself. npm WARN pet-shop@1.0.0 No description npm WARN pet-shop@1.0.0 No repository field. npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.1.3 (node_modules/fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"ia32"}) + dotenv@6.0.0 added 1 package from 1 contributor in 15.671s
如果安装失败,请参考本文“3、常见问题及解决方法”进行解决。
2.7 将智能合约部署到 ROPSTEN 测试网络
(1)、在宠物商店根目录下运行命令:
truffle migrate --network ropsten --reset --compile-all
重新编译成功后,会部署到ropsetn测试环境。 成功输出内容参考:
duncanwang@ubuntu:~/work/dapp-guide-pet-shop$ truffle migrate --network ROPSTEN --reset --compile-all ... Writing artifacts to ./build/contracts Using network 'ropsten'. Running migration: 1_initial_migration.js Deploying Migrations... ... 0xe9a11fa0cb23c1c87068c97719b1400285bb56c1d6592415104d794657c23e36 Migrations: 0x4c6475632bd8101727d0b4bcce8f9fbc5eef43f0 Saving successful migration to network... ... 0xe04d70b45866abfae901396d76d8509c39c747dee203e979b60ec324d2bf3179 Saving artifacts... Running migration: 2_deploy_contracts.js Deploying Adoption... ... 0x824322568f00e51b7b707d212da9f9c1a2f56a1bdb9a2734ea5ce6c544f7bb2a Adoption: 0xa65fc2fbbfb0c74a984144df3174853fe74e2179 Saving successful migration to network... ... 0xe209420af44a028590408aff402829e746ef9abb109db808b75ff8aa1ec28ac3 Saving artifacts...
提取合约地址狗狗币钱包导出私钥,点击查看部署成功的合约链接:
(2)这次因为不需要本地环境,所以不需要启动ganache-cli环境,但是需要在单独的环境窗口安装并运行lite-server环境才能访问pet商店网页。
输入命令:
npm install lite-server --save-dev npm run dev
安装成功输出参考:
duncanwang@ubuntu:~/work/dapp-guide-pet-shop$ npm install lite-server --save-dev npm WARN truffle-hdwallet-provider@0.0.6 requires a peer of truffle@4.x but none is installed. You must install peer dependencies yourself. npm WARN pet-shop@1.0.0 No description npm WARN pet-shop@1.0.0 No repository field. npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules/fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"ia32"}) + lite-server@2.4.0 added 19 packages from 24 contributors, removed 19 packages and updated 40 packages in 41.6s
lite-server运行成功参考:
> pet-shop@1.0.0 dev /home/duncanwang/work/dapp-guide-pet-shop > lite-server ** browser-sync config ** { injectChanges: false, files: [ './**/*.{html,htm,css,js}' ], watchOptions: { ignored: 'node_modules' }, server: { baseDir: [ './src', './build/contracts' ], middleware: [ [Function], [Function] ] } } [Browsersync] Access URLs: -------------------------------------- Local: http://localhost:3000 External: http://192.168.2.209:3000 -------------------------------------- UI: http://localhost:3001 UI External: http://192.168.2.209:3001 -------------------------------------- [Browsersync] Serving files from: ./src [Browsersync] Serving files from: ./build/contracts [Browsersync] Watching files...
(3)网页访问宠物店
辉哥服务器地址页面地址::3000
4.首页
(4) 领养一只宠物狗
点击领养的过程与第六课以太坊私有环境的操作相同。
5.点击领养.png
点击查看辉哥本次操作的成功交易记录:
2.8 将智能合约部署到以太坊主网
记得把带有以太坊余额的助记词配置到.env文件中。
运行命令:
truffle migrate --network mainnet --reset --compile-all
成功运行结果参考:
duncanwang@ubuntu:~/work/dapp-guide-pet-shop$truffle migrate --network mainnet --reset --compile-all ... Writing artifacts to ./build/contracts Using network 'mainnet'. Running migration: 1_initial_migration.js Deploying Migrations... ... 0xa31fa855a85808c974f49d894b2116d6bdd916c52118026bb3ab02fbcbe765c9 Migrations: 0x71636b5d2ee99a251b511226e17a27d79d73276f Saving successful migration to network... ... 0xb36f92716e38e28dcb0c9e4f8fa13e54a1ab0ddd81a8ac70c8384aa680a5cb10 Saving artifacts... Running migration: 2_deploy_contracts.js Deploying Adoption... ... 0x047ef9057c76aac9929ff2a2d72426170b12bd513452a05281b14dbd7414a37f Adoption: 0xe2202412f3a6c8ce4fedd1bcad5890444416a524 Saving successful migration to network... ... 0x709859af998907ee1b17815f621430dc4cfdc663a5f3f4ad78517c8675c15016 Saving artifacts...
点击查看辉哥部署合约的合约地址链接:
运行宠物商店 URL 可以做同样的事情。
:3000/
辉哥终于取消了交易,就不用花这个痛心的钱了。
1.主网后交易.png
三、常见问题及解决方法
3.1 安装truffle-hdwallet-provider失败
【输出说明】
Error: Error: Command failed: ./configure configure: error: in `/home/duncanwang/work/cet-token/node_modules/scrypt/scrypt/scrypt-1.2.0': configure: error: no acceptable C compiler found in $PATH See `config.log' for more details ...
【解决方案】
为了解决这个问题,辉哥走了很多弯路,包括VPN,安装GCC“npm install -g gcc”,“npm rebuild”都没有解决。 终于通过运行命令解决了。
sudo apt-get install build-essential
3.2 部署到主网失败
【输出说明】
Running migration: 1_initial_migration.js Deploying Migrations... Error encountered, bailing. Network state unknown. Review successful transactions manually. insufficient funds for gas * price + value
【解决方案】
(1)辉哥忘记在.env中配置mnemonic_mainnet助记词,提示也是这个。
(2)后来灰哥用METAMASK导出的助记词配置mnemonic_mainnet,也导入了主网ETH足够的账户到METAMASK,但还是提示错误。 后来确认导入账号的助记词无法从METAMASK导出。 得到正确的助记符就可以了。
4.参考
(1)【区块链】部署智能合约到以太坊主网(truffle+infura)
(二)dotenv简介