geth安装与基本使用

时间:2021-08-01
本文章向大家介绍geth安装与基本使用,主要包括geth安装与基本使用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

安装准备:go,git

  • 通过PPAs安装geth
1 $ sudo add-apt-repository -y ppa:ethereum/ethereum
2 $ sudo apt-get update
3 $ sudo apt-get install ethereum
  • 创建自己的私有链

   创建创世文件

  创建一个genesis.json文件,官网配置文件如下:https://github.com/ethereum/go-ethereum,其中,chainId是私有链的id,注意不要和现有的主链(1)和测试链的id相同(2,3,42),例如:500,666等;alloc代表初始资产配置,在该区块链产生时,就预先赋予这些账户一定数额的wei,可以将metamask中的地址写入,分配以太币,注意单位是wei;difficulty 定义了每次挖矿时,最终确定nonce 的难度;nonce预定一个随机数,这是一个与PoW 机制有关的值;coinbase 每挖出一个区块,都会获得奖励,该值指定默认情况下把奖励给到哪个账户,实际上,我们每次挖矿开始之前,都会自己指定;gasLimit 规定该区块链中,gas 的上限。

 1 {
 2   "config": {
 3     "chainId": <arbitrary positive integer>,
 4     "homesteadBlock": 0,
 5     "eip150Block": 0,
 6     "eip155Block": 0,
 7     "eip158Block": 0,
 8     "byzantiumBlock": 0,
 9     "constantinopleBlock": 0,
10     "petersburgBlock": 0,
11     "istanbulBlock": 0,
12     "berlinBlock": 0
13   },
14   "alloc": {},
15   "coinbase": "0x0000000000000000000000000000000000000000",
16   "difficulty": "0x20000",
17   "extraData": "",
18   "gasLimit": "0x2fefd8",
19   "nonce": "0x0000000000000042",
20   "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
21   "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
22   "timestamp": "0x00"
23 }

   初始化创建私有链

  创建myChain文件夹,用来指定数据存储的位置,使用以下命令初始化私有链。

1 mkdir myChain
2 # 指定数据存储位置
3 geth --datadir myChain/ init genesis.json

   私有链启动

    Networkid与配置文件中的id相同

1 geth --datadir mychain/ networkid 666

   info输出重定向

    上面的命令启动私有链,时不时就会出现info消息,影响我们输入geth命令,因此我们将info输出重定向到一个log文件,使用使用下面命令启动。可以新开一个命令行终端输入以下命令查看日志:tail -f geth.log。

1 geth --datadir mychain/ --networkid 666 console 2>geth.log

   创建完成

    可以使用exit和ctrl-d退出。

   启动脚本创建

    创建一个启动rungeth.sh命令脚本,之后运行脚本,私有链就启动了,其中指定了数据存储位置,私有链网络id,开放端口,rpc端口,rpc地址,rpc方法,允许HTTP通道解锁账户,info重定向等命令,请大家根本自身的实际情况进行修改,脚本具体内容如下。(相关的参数的涉及可能在后面给出原因)

1 #!/bin/bash
2 geth --datadir . --networkid 666 --port 30303 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpcapi 'db,net,eth,web3,personal' --allow-insecure-unlock --rpccorsdomain '*' console 2>1.log

   赋予rungeth.sh脚本权限

1 chmod 755 rungeth.sh

   运行脚本

1 # 在rungeth.sh文件夹下执行该命令
2 ./rungeth.sh

   启动命令参数说明

    使用最新版本geth客户,当执行personal.unlockAccount()或在程序中调用personal_unlockAccount接口时,会出现:account unlock with HTTP access is forbidden异常。新版本geth,出于安全考虑,默认禁止了HTTP通道解锁账户。在启动命令中添加“--allow-insecure-unlock”参数进行打开操作。

  • 安装metamask

  MetaMask是一款在谷歌浏览器Chrome上使用的插件类型的以太坊钱包,该钱包不需要下载,只需要在谷歌浏览器添加对应的扩展程序即可,非常轻量级,使用起来也非常方便。

   Chrome的安装

   进入到Chrome的网上应用商店下载metamask

   MetaMask使用

    可以参考:https://zhuanlan.zhihu.com/p/112285438?from_voters_page=true

  • Metamask连接自己的私有链(win10下的Ubuntu18.04虚拟机)

   私有链启动时命令参数包含rpc和rpcaddr

    其中rpcaddr "0.0.0.0",指定任何一个ip地址都可以访问,rpc默认端口是8545。

   查看虚拟机IP地址

    ifconfig查看虚拟机的ip地址,此处你的虚拟机要是桥接模式,不然不会有自己的ip。

   metamask连接

    在metamask上自定义rpc,网络名称可以随意取,URL地址为http://虚拟机ip:8545,,链ID为私有链id看,保存即可以连上虚拟机上的私有链。

   MetaMask/外部账户导入到Geth私链(可以在初始化私有链的配置文件中就加上metamask账户地址)

    • 获取MetaMask上账户的私钥:点击账户详情,导出私钥。
    • 拿到私钥以后,在虚拟机中创建一个文本文件例如fk.txt放进去
    • 输入geth account import 你的私钥文件路径
    • 提示你输入密码,这个密码是在geth控制台使用的密码
    • 发现生成的账户地址就是在MetaMask上的账户地址。
    • 查看当前生成密钥文件位置:geth account list
    • 找到对应账户后面的存储位置,把文件放到项目中的keystore文件夹中即可。(keystore文件夹的位置为geth启动命令是指定的数据存储位置参数,即datadir)
    • 在geth控制台中输入eth.accounts查看
    • 导入完成

   完成metamask账户地址的添加到私有链中,稍后进行转账,即可看到账户余额。

  •  基本命令

  下面的命令均在geth控制台中输入,即输入启动私有链命令后。

 1 # 创建一个新的账户,输入两遍密码后,生成账户地址。以同样的方式,可创建多个账户。
 2 personal.newAccount()
 3 # 查看账户
 4 eth.accounts
 5 # 查看账户余额
 6 eth.getBalance(eth.accounts[0])
 7 # 启动挖矿,其中 start 的参数表示挖矿使用的线程数。第一次启动挖矿会先生成挖矿所需的 DAG 文件,这个过程有点慢,等进度达到 100% 后,就会开始挖矿,此时屏幕会被挖矿信息刷屏。
 8 miner.start(1)
 9 # 停止挖矿
10 miner.stop()
11 # 检查挖矿是否已经停止,eth.mining 输出为false时表示挖矿已经停止
12 eth.mining
13 # 当新区块挖出后,挖矿即可结束。
14 miner.start(1);admin.sleepBlocks(1);miner.stop();
15 # 挖到一个区块会奖励以太币,挖矿所得的奖励会进入矿工的账户,这个账户叫做 coinbase,默认情况下 coinbase 是本地账户中的第一个账户,可以通过 miner.setEtherbase() 将其他账户设置成 coinbase。
16 
17 # 从账户 0 向账户 1 转账,先解锁账户 0,才能发起交易,部署智能合约时,同样需要先解锁。未解锁返回的报错信息为:Error: authentication needed: password or unlock undefined。
18 personal.unlockAccount(eth.accounts[0])
19 # 发送交易,账户 0 -> 账户 1:
20 amount = web3.toWei(5,'ether')
21 eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
22 # 此时如果没有挖矿,用 txpool.status 命令可以看到本地交易池中有一个待确认的交易,可以使用 eth.getBlock("pending", true).transactions查看当前待确认交易。使用下面命令开始挖矿。
23 miner.start(1);admin.sleepBlocks(1);miner.stop();
24 # 新区块挖出后,挖矿结束,查看账户 1 的余额,已经收到了账户 0 的以太币:
25 web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
26 # 查看当前区块总数
27 eth.blockNumber
28 # 通过区块号查看区块
29 eth.getBlock(4)
30 # 通过交易 Hash 查看交易(Hash 值包含在上面交易返回值中)
31 eth.getTransaction("0x9f5e61f3d686f793e2df6378d1633d7a9d1df8ec8c597441e1355112d102a6ce")
  • 参考文章

https://blog.csdn.net/weixin_43584346/article/details/114792707

https://zhuanlan.zhihu.com/p/112285438?from_voters_page=true

https://www.cnblogs.com/soowin/p/14328195.html

https://blog.csdn.net/wo541075754/article/details/98847308

https://blog.csdn.net/youlinhuanyan/article/details/99574782

https://blog.csdn.net/u014439239/article/details/79347389

https://blog.csdn.net/mingrizhixin/article/details/111407758

https://blog.csdn.net/weixin_43988498/article/details/108394012

https://www.jianshu.com/p/9fa31e4cdf4d

https://github.com/ethereum/go-ethereum

原文地址:https://www.cnblogs.com/shizhe99/p/15087068.html