用 Node.js 转账 ETH
发布于 4 年前 作者 netpi 5209 次浏览 来自 分享

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

领取1eth

2.3 注册 Infura

我们平时用的以太坊钱包,TrustWalletMetamaskMyEtherWallet 等,都要通过发送 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 NetworkLocal Test Network,并用通过运行代码完成了 ETH 交易。

下一章节中,我们将主要学习本章中 transferEth.js 里所涉及的知识点 — Web3.js 工作原理助记词原理详解。 以及智能合约的编写、调试与发布等。

本文转自我的个人播客系列文章

第2天,搭建开发环境,用 Node.js 转账 ETH | 5天掌握以太坊 dApp 开发

欢迎你来,一起技术讨论

4 回复

牛逼,都发过来吧

楼主加油,很好的入门指导; 看了下楼主的代码主要是使用@truffle/hdwallet-providerweb3.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.getTransactionweb3.eth.getBlock 这些方法属于 web3.js 的具体使用方式了,想着在后续章节里单独详解 web3.js 的

gannache-clitestrpc 都可以在 terminal 下使用,也是为了便于初学者快速开始,所以选择了用 Gannache

Rinkeby 还是作为线上的测试环境比较好,本地测试环境用 Rinkeby 速度还是跟不上的,尤其是生产环境要跑测试脚本的情况下,一次 npm run test 就要消耗 好多个ETH。这种情况下还是本地的 Testrpc 或者 Rinkeby 更方便。

还是感谢你的建议 :)

回到顶部