eth搭建本地开发环境

eth搭建本地开发环境_第1张图片

环境

Geth
Version: 1.10.21-stable
Architecture: amd64
Go Version: go1.18.4
Operating System: darwin
GOPATH=
GOROOT=go

node
v16.16.0

npm
8.11.0

开发工具

https://remix.ethereum.org/
MetaMask 谷歌插件

需要提前做的事情

提前安装go,node,npm,geth,web3.js(通过npm安装)
创建工作并进入目录,后续所有的命令都在工作目录中完成

$ mkdir ~/my_chain
$ cd ~/my_chain

step1. 创建账户

在开启本地私链时可以指定账户和初始余额,所以在开启前首先创建一个账号。需要注意的是,创建账号会生成一个keystore文件,为了能让账号可以被将要启动的私链识别,需要将生成的文件放到私链工作目录中。运行如下创建账户命令后会要求输入两次密码,完成后会在~/my_chain/keystore目录下生成【UTC–】开头的文件,该文件为keystore(私钥=keystore+密码)。当然我们可以创建多个账户

$ geth account new --keystore ./keystore

文件名称示例:UTC–2022-08-19T12-05-39.441584000Z–6aeb37cf3eabe984b36cbb5e7196e19ef36a70b3
(需要说明的是最后一个中划线后边的一串前面加上0x就是地址,我们姑且称它为尾地址

step2. 启动私链

  1. 首先我们需要在工作目录下创建配置文件Genesis.json,内容如下
  • chainId 私链id,自己随便取值
  • alloc 配置初始化账户的余额balance,单位为wei,前面那一串为尾地址
{
  "config": {
    "chainId": 911,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0
  },
  "difficulty": "1000",
  "gasLimit": "2100000",
  "alloc": {
    "6aeb37cf3eabe984b36cbb5e7196e19ef36a70b3": { "balance": "20000000000000000000000" }
  }
}
  1. 初始化并启动私链,注意911为配置文件中的chainId
  • -http 需要注意这个参数,没有它就不能使用web3.js访问
  • –allow-insecure-unlock,没有这个参数我们不能解锁账户,不能解锁账户就不能用Remix工具
  • personal.unlockAccount 该命令在geth命令窗口中执行,用户解锁账户,参数分别是(地址,密码,时间)
$ geth --datadir ./ init Genesis.json
$ geth --networkid 911 -http --http.corsdomain="*" --datadir . console --allow-insecure-unlock
$ personal.unlockAccount("0x6Aeb37cF3eABe984b36CBB5e7196e19EF36A70b3", "***", 60)

执行结果如图
eth搭建本地开发环境_第2张图片

step3. 验证结果

运行如下命令可以查到账户余额

$ eth.getBalance(eth.accounts[0])

效果图,有币就好办了
在这里插入图片描述

step4. 开启处理请求

不开启处理请求命令没发执行,所以我们需要开启,获得所得的费用会转到私链第一个账户,也就是刚才创建的账户中
以下命令分别是开始和停止,都需要再geth命令窗口中执行

$ miner.start(1)
$ miner.stop()

step4. 获取私钥

为了使用MetaMask,我们需要导出私钥,keystore导入会导致卡死,目前使用私钥导入,但是我们需要通过keystore获取私钥,方法是创建web3.js文件,内容如下。然运行 node web3.js

  • 第一个参数,keystore文件内容
  • 第二个参数,密码
const Web3 = require('web3');
const web3 = new Web3('http://localhost:8545');
console.log(web3.eth.accounts.decrypt("第一个参数",'密码'));//第二个参数是密码

输出如下,privateKey为我们要的私钥
eth搭建本地开发环境_第3张图片

step5. 配置MetaMask

点击箭头指向的地方,然后点击添加网络会出现如下表单

  • 网络名称,自己随便填
  • 新增RPC URL (http://127.0.0.1:8545)
  • 链 ID,私链id(911)
  • 货币符号 (PCTT),这个目前还不知道为什么不是eth
    eth搭建本地开发环境_第4张图片
    上述配置完成后可以导入账号了输入上个步骤获取的私钥,导入完成
    eth搭建本地开发环境_第5张图片

step6. 配置remix.ethereum.org

打开 http://remix.ethereum.org
选择External Http Provider,然后点击OK,完事。注意如果使用过程中出现账号锁定的情况,在geth窗口执行解锁命令(personal.unlockAccount(“0x6Aeb37cF3eABe984b36CBB5e7196e19EF36A70b3”, “***”, 60))
eth搭建本地开发环境_第6张图片
有问题大家随时留言,必要的话建群交流

-----------------------------------常见问题汇总-----------------------------------

  1. the method personal_listAccounts does not exist/is not available
    启动geth时没有指定服务,参照(https://geth.ethereum.org/docs/rpc/server),增加如下参数解决
    $ geth --http --http.api personal,eth,net,web3

你可能感兴趣的:(web3.0,区块链,智能合约)