0 前言
本章我们主要学习 以太坊开发环境的搭建,并运行一个 Demo — 通代码来转账 ETH。
1 开发环境介绍
以太坊的开发环境分成三大类
- 本地测试环境: Local Test Network
- 线上测试环境包括:
- Ropsten Test Network
- Rinkeby Test Network
- Kovan Test Network
- Goerli Test Network
- 线上生产环境:Mainnet Network( 以太坊主网 )
一般情况下,我们的项目开发流程是
本地测试环境
--> 线上测试环境
--> 生产环境
但是,本文得讲解过程推荐先快速跑通 Ropsten 环境,然后跑通本地开发环境。
原因是按照我提供的 ethereum-demo 来跑通 Ropsten 环境会相对容易,整个过程接近我们平时的转账,因此更容易了解以太坊的运作流程。
2 Ropsten 环境快速开始
2.1 生成随机账户
访问 助记词生成页面,生成助12个助记词,作为测试开发使用。
保存好随机生成的助记词
记下第一个地址 Account[0]
,下面要给 Account[0]
领取测试 ETH
2.2 领取测试 ETH
在 Ropsten 网络中获得测试 ETH 是非常的方便,只要到 Ropsten Ethereum Faucet 上填入你的以太坊地址,测试环境就会为你提供 1ETH
。
填入 Account[0]
地址,申请 1ETH
2.3 注册 Infura
我们平时用的以太坊钱包,TrustWallet、Metamask、MyEtherWallet 等,都要通过发送 JSON-RPC 才能够接入到以太坊的网络中。 因此我们需要一个可以提供 RPCURL 的平台 – Infura。
- 访问 https://infura.io/, 注册一个帐号
- 记住
wss://ropsten.infura.io/v3/xxxxx
这串,后面要使用。( ENDPOINTS 选择 ROPSTEN)
2.4 运行代码
我准备了一个 ethereum-demo ,来帮助大家快速 Setup;
Repo 地址:https://github.com/netpi/ethereum-demo;
#1
git clone https://github.com/netpi/ethereum-demo.git
#2
cd ethereum-demo
#3
npm install
# nodejs v8.17.0 (web3.js@1.x 目前支持 NODE_MODULE_VERSION 57 )
修改 ropsten.config.js 文件,把第一步中生成的助记词和 infura.io 中申请的 RPC-URL 地址填入。
// ropsten.config.js
module.exports = {
mnemonic: "你的助记词",
rpcurl: "RPC 地址" // 格式如:wss://ropsten.infura.io/ws , 可访问 infura.io 注册申请
}
执行 transforEth.js
上一步中,我们领取的 Ropsten 环境 1ETH 应该已经到账了。
transforEth.js 做的事情是:Account[0]
转账 0.01ETH 到 Account[1]
node transferEth.js
如果看到控制台打印出以下内容,说明转账成功
{ blockHash: '0x47a243a7d3cf9e1a82d2dfb16bb4db65c248ebd8b5188510ae39be3ddfb80633',
blockNumber: 8008669,
contractAddress: null,
cumulativeGasUsed: 412061,
from: '0x15e35634f38f416830aaf09e35b323b516af6d36',
gasUsed: 21000,
logs: [],
logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
status: true,
to: '0x75d60374fd1740d1bcdc033084deaaa57a7d8321',
transactionHash: '0x2bf9563c4b094d09ad252bce7ffca5f93438ee0797b3c94be5513e9cc77422d8',
transactionIndex: 8 }
最后可以访问 https://ropsten.etherscan.io/ 搜索 transactionHash 来查看转账详情
例如:我在演示中转账成功的 transactionHash 查询地址: 点击查看
至此 Ropsten Test Network 就跑通了,我们成功的在以太坊网络中通过代码完成了一次 0.01ETH 的价值转移。
3 配置本地环境
按照上述步骤 Ropsten 环境已经配置成功,那么接下来配置本地开发就非常容易了。
3.1 使用 Ganache
本地环境中,提供 JSON-RPC 服务的是,ganache-cli。
访问 https://www.trufflesuite.com/ganache 下载 Ganache 客户端;
运行 Ganache,在 设置
--> ACCOUNTS & KEYS
中 配置好你的助记词,点击右上角的 SAVE AND RESTART
这样你就 Setup 好了一个本地的 JSON-RPC 环境了。
3.2 本地环境运行代码
我们来配置一下本地环境,拷贝 RPC SERVER (我默认的地址是:http://127.0.0.1:7545)
修改 local.config.js
文件
// local.config.js
module.exports = {
mnemonic: "你的助记词",
rpcurl: "http://127.0.0.1:7545"
}
切换 transferEth.js
引用的 local.config.js
文件
const Web3 = require('web3');
// const config = require('./ropsten.config.js'); // ropsten test network
const config = require('./local.config.js'); // local test network
const HDWalletProvider = require("@truffle/hdwallet-provider");
const mnemonic = config.mnemonic;
...
执行 tranferEth.js
node tranferEth.js
同样的,看到如下输出说明成功
{ transactionHash: '0xdd6c68c8ac4071fa1cc5f39d0954d8240b8fcf272dd2dca2765c09cfb93180b1',
transactionIndex: 0,
blockHash: '0x9fadfcf19571d574e03cb410e10c0c817fe76a1e4a1339ff89c2f03afcd5c14e',
blockNumber: 1,
from: '0x15e35634f38f416830aaf09e35b323b516af6d36',
to: '0x75d60374fd1740d1bcdc033084deaaa57a7d8321',
gasUsed: 21000,
cumulativeGasUsed: 21000,
contractAddress: null,
logs: [],
status: true,
logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' }
3.3 通过 Ganache 查看本地链上信息
这时再看 Ganache,Account[0] 账户余额变成了 99.99ETH,Account[1]的余额变成了 100.01ETH,说明转账成功。
我们还可以在 Ganache TRANSACTION 中查看 TX 的细节
至此我们在本地环境中完成了一次价值转移,本地环境搭建成功。
总结
通过本章的实践,我们成功跑通了 Ropsten Test Network
和 Local Test Network
,并用通过运行代码完成了 ETH 交易。
下一章节中,我们将主要学习本章中 transferEth.js
里所涉及的知识点 — Web3.js 工作原理
,助记词原理详解
。 以及智能合约的编写、调试与发布
等。
本文转自我的个人播客系列文章
第2天,搭建开发环境,用 Node.js 转账 ETH | 5天掌握以太坊 dApp 开发
欢迎你来,一起技术讨论
牛逼,都发过来吧
@i5ting 😄
楼主加油,很好的入门指导;
看了下楼主的代码主要是使用@truffle/hdwallet-provider
和 web3.eth.sendTransaction
;
建议学习时候,不要用@truffle/hdwallet-provider
,可以了解下web3.eth.accounts.decrypt
,web3.eth.accounts.signTransaction
,web3.eth.sendSignedTransaction
;
发送成功后使用web3.eth.getTransaction
,web3.eth.getBlock
这些,感觉这样会让学习的人更容易理解ETH网络的运行原理。
以前开发我也是用gannache,不过我用的是gannache-cli,现在都是Rinkeby
网络,直接怼😄,反正不要钱,网络也不堵。
加油!!!
@Broszhu 谢谢你的建议 使用 @truffle/hdwallet-provider,用户会更快的上手跑通 demo。
web3.eth.getTransaction
,web3.eth.getBlock
这些方法属于 web3.js 的具体使用方式了,想着在后续章节里单独详解 web3.js 的
gannache-cli
和 testrpc
都可以在 terminal 下使用,也是为了便于初学者快速开始,所以选择了用 Gannache
。
Rinkeby 还是作为线上的测试环境比较好,本地测试环境用 Rinkeby 速度还是跟不上的,尤其是生产环境要跑测试脚本的情况下,一次 npm run test
就要消耗 好多个ETH。这种情况下还是本地的 Testrpc
或者 Rinkeby
更方便。
还是感谢你的建议 :)