在学习 web3 开发之前,我们先来学习如何搭建环境,以及不同环境的用途。
1. 测试环境搭建
1.1. Ganache
Ganache 是一个在本地运行测试区块链的工具,可以在 trufflesuite.com/ganache/ 这里下载。 下载安装完成以后,启动 Ganache,将会在本地运行一个测试区块链,后续开发等将在测试区块链进行测试运行。
一个启动好的 Ganache 如下:
其中,上面会列出来链内的账号、区块、交易等信息,并显示 rpc server 的地址和端口,在右侧设置的地方可以设置端口等信息(端口的用处后面讲)。
1.2. Remix
为了简化初学者的使用成本,可以直接在 Remix 网站下载已经打包好的桌面版本,该工具主要是为了开发智能合约使用。如果不使用 Remix,也可以使用 vscode 插件等,但是此处主要介绍 Remix IDE。
下载完成后,安装即可。
安装后,打开,常用功能介绍如下:
- 我们的工作区,智能合约代码等在此处编写
- workspace,可以自己新建,不多介绍
- 搜索文件
- 可以选择编译的 Solidity 版本,以及是否自动编译等选项
- 用于智能合约的部署、运行等使用
- 智能合约调试使用
- 测试使用
- 在此处可以选择运行智能合约的网络,选项中有一些公共的以太坊测试网络,比如伦敦等,我们在本地测试主要连 Ganache 的网络,所以选择 Ganache Provider,选择后弹出填写 Ganache 启动的网络地址端口,在上面讲 Ganache 的时候其实和端口填进来即可
- 当测试一个合约时,部署该合约的地址
- 选择具体要运行的合约
当完成上述配置,就可以在本地开发和测试智能合约了。
2. 以太坊公网客户端
2.1. Geth
以太坊公网客户端一般使用 Geth,Geth 是一个遵循以太坊协议,使用 go 语言实现的客户端。下载地址为: geth.ethereum.org/downloads ,使用文档参考:github.com/ethereum/go…
直接执行 geth,会在本地启动以太坊节点,我们先来介绍一下 geth 相关目录: 启动的时候,会打印诸如:database=/Users/xxx/Library/Ethereum/xxx 这样的目录,该目录存放的是区块链相关的数据,我们到 Ethereum 目录下:
- keystore 目录存储的是以太坊的账户信息,一般是一个秘钥文件,我们最好备份这个文件,如果这个目录下面本来有账户文件,那么就会读取这个文件作为当前账户,当然也可以使用 geth 的命令生成一个账户,我们查看文件下面的 address 字段,就是你的以太坊地址
- history 文件,记录了执行 geth 的历史命令
- geth 目录下面的 chaindata 等都是同步或者计算的区块信息,不同 geth 启动的模式,下面的区块信息完整度不一样
geth 启动参数介绍(可以保存成 geth 启动脚本):
#! /bin/zsh
# syncmode: full/snap/light 分别表示全量同步区块、只同步区块的 header 和 body、仅获取当前区块
# --mine 表示打开挖矿 --miner.threads value 表示 cpu 线程数
# 启动 http 表示打开远程调用,指定远程调用地址,在 attach 的时候或者远程 json rpc 调用的时候有用
geth --syncmode snap --http --http.addr 0.0.0.0
一些常用的 Geth 命令介绍:
# 列出当前的账户列表
geth account list
# 创建新账户
geth account new
# 从私钥导入账户,其中 privateKey.txt 存储的是账户的私钥
geth account import privateKey.txt
geth attach 模式:
我们使用上述启动脚本启动 geth 后,可以在另外一个终端窗口内使用 attach 模式通过 web3.js 远程调用当前节点:
# 打开连接到当前节点的 js 交互式窗口
geth attach http://0.0.0.0:8545
在交互式窗口下可以执行如下:
# 列出当前账户
eth.accounts
# 查看账户余额,传参为以太坊地址
eth.getBalance("0xxxxx")
# 开始挖矿
miner.start()
# 停止挖矿
miner.stop()
更多交互式命令可以参考官方文档。
2.2. 答疑解惑
Q:我的地址怎么区分是以太坊公网地址还是我内部测试的私有地址?
实际上,没有所谓公网地址还是私有地址的概念,你拥有一个公钥和私钥对,这个公钥和私钥对无论是在什么网上都可以使用,比如你可以往公网地址的这个公钥地址里面充钱,那这个地址里面就有了相应的资产,因为你有私钥,而别人没有,所以这里的资产只有你能支配,及所谓的「属于你」的概念,一旦别人拿到私钥,那这个资产也属于别人。
每个公钥地址里面的资产都是透明的,比如我的:etherscan.io/address/0x4…
如果你很想给我充值,那就往 0x40d534fb053DEABe53697e2224Ce2E8ebF070bb2 这个地址里面疯狂转账就好了。
Q:怎么管理我的公网资产?
初学者先使用一个最广泛使用的钱包吧:MetaMask:metamask.io/ 这个钱包可以安装浏览器插件、手机 APP 等,安装上根据提示操作即可。