Linux 挖数字货币(挖ETH)

最近数字货币很热门,但币圈一天,人间一年,炒币亏成狗,不敢再赌了,看着BTC暴涨又寂寞难耐,于是关注起挖矿,正好有闲置的PC,但挖矿软件大多偷币而且不安全,正好看到linux下方便挖矿,关注了一下波场和ETH。

波场TRON

https://www.jianshu.com/p/ed42f061e341

https://www.jianshu.com/p/44102e5be5db

方便的https://github.com/tronprotocol/java-tron/blob/develop/quickstart.md

主要是要申请创建超级节点要花大概1500RMB还不一定能搞成,遂放弃。

ETH

有用CPU挖,有用GPU挖,GPU是主流,看了很多文章大多是建私有链进行开发的都不是很实用,先记下来再试验吧

先说说CPU挖,主要是用geth这个软件,可以用docker运行ETH公有链,参考https://github.com/ethereum/go-ethereum/wiki/Running-in-Docker或者https://blog.csdn.net/ddffr/article/details/75250661

其是在Ubuntu上安装最简单参考https://luren5.gitbooks.io/dapp-develop/content/21-ubuntu下安装.html我是在Centos7上实验安装geth,参考https://blog.csdn.net/cowfishy/article/details/80211116但导入已有eth地址出现问题,而且geth用不来,geth用法参考https://blog.csdn.net/zqq_2016/article/details/87802888

账户操作

eth.accounts //查看账户
personal.listAccounts                    //查看账户
personal.newAccount("***")  //新建账户
personal.unlockAccount("**********")  //解锁账户
personal.lockAccount("**********")    //锁定账户

代币操作

eth.getBalance()   //查看余额
web3.fromWei()   //单位换算

节点操作

  • net模块
net.listening             //查看节点状态 
net.peerCount             // 查看节点链接的数量
  • admin模块
admin.nodeInfo          //查看节点信息
admin.addPeer()           //添加节点
admin.peers             //查看添加的节点的信息

一些设置命令

miner.setEtherbase(eth.accounts[n]) //etherbase地址并不需要一定是本机上
miner.setEtherbase(addr) 设置主账户
miner.setExtra("zhou")    //写一些额外信息
eth.getBlock(n)  //查看区块信息
miner.start(1) 启动挖矿 
miner.stop() 停止挖矿 
eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value:amount}) 交易 
eth.getBalance(addr) 查询账户余额 
eth.blockNumber 查看区块总数 
eth.getTransaction(“transactionAddr”) 查看交易 
eth.getBlock(blockNumber) 通过区块号查看区块

总结主要步骤(详细过程参考http://wangxiaoming.com/blog/2016/07/15/e19/)

同步以太坊,配置rpc地址

mkdir /opt/blockchain
nohup geth --syncmode "fast" --cache=1024 --maxpeers 30 --datadir /opt/blockchain --rpc --rpcapi db,eth,net,web3,personal,admin,miner --rpcport 8545 --rpcaddr 0.0.0.0 --rpccorsdomain "*" &
curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc": "2.0", "method": "web3_clientVersion", "params": [], "id": 1}'  http://127.0.0.1:8545

或者以轻量节点启动并同步主链

> geth -rpc --rpcaddr "0.0.0.0" --rpcapi "personal,db,eth,net,web3" --syncmode “light”

会同步很久,然后Geth客户端连接控制台(在连接Geth客户端时保持同步窗口开着,另起一个控制台),导入已有地址并解

> geth attach http://127.0.0.1:8545
> miner.setEtherbase(0xdfdfdfdfdf********)
> personal.lockAccount(eth.accounts[0])  

GPU挖矿

硬件包括NVIDA显卡及驱动

软件包括geth和ethminer

安装参考https://askubuntu.com/questions/921321/how-can-i-install-ethminer-on-ubuntu-17-04

总结主要步骤(详细过程参考http://wangxiaoming.com/blog/2016/07/18/e20/)

先执行 ethminer -G --list-devices 查看Gpu数量,我的机器是8Gpu,执行命令后

1 首先启动geth节点
    geth --port 33333 --rpc --rpcapi eth --rpcaddr 192.168.10.176 --rpcport 8888 console
2 启动ethminer
    ethminer -G -P http://127.0.0.1:1234 --opencl-device 0 --opencl-platform 1

注意:只需要执行以上两步操作,不要添加其他参数或者启动后执行miner.start()操作

-G:启动GPU挖矿(通过opencl调用GPU挖矿)
-P:geth地址

--opencl-device x :x代表启动的Gpu数量,默认全部启动
注意:启动GPU挖矿需要geth节点设置为挖矿节点才可以启动挖矿,并且geth的disk IO速度应该足够快,否则数据同步速度不能跟上主网区块产生速度,也无法挖矿

格式:

geth [options] command [command options] [arguments...]

 

支持的命令:

account    管理账户
attach     启动交互式JavaScript环境(连接到节点)
bug        上报bug Issues
console    启动交互式JavaScript环境
copydb     从目标chaindata文件夹创建本地链
dump       Dump(分析)一个特定的块存储
dumpconfig 显示配置值
export     导出区块链到文件
import     导入一个区块链文件
init       启动并初始化一个新的创世纪块
js         执行指定的JavaScript文件(多个)
license    显示许可信息
makecache  生成ethash验证缓存(用于测试)
makedag    生成ethash 挖矿DAG(用于测试)
monitor    监控和可视化节点指标
removedb   删除区块链和状态数据库
version    打印版本号
wallet     管理Ethereum预售钱包
help,h     显示一个命令或帮助一个命令列表

geth命令说明:

1.account

管理账户,列举所有已存在的账户信息,导入一个私钥来生成一个新账户,创建新账户或更新存在的账户

它支持交互模式(即当提示输入密码时)和非交互模式(通过给定密码文件提供密码。非交互模式仅用于在测试网络或已知的安全环境中进行脚本化使用。
确保您在创建新帐户(使用新帐户或导入帐户)时记住您给出的密码。没有它,你就不能解锁你的账户。

注意,不支持以未加密格式导出密钥。
密钥存储在/keystore下。通过简单的复制,在ethereum节点之间传输整个目录或其中的单个键是安全的。
确保你定期备份你的钥匙。

serdeMacBook-Pro:~ user$ geth account -h
NAME:
geth account -

USAGE:
geth account command [command options] [arguments...]

COMMANDS:
list Print summary of existing accounts 打印现有账户摘要
new Create a new account 创建新账户
update Update an existing account 更新现有账户
import Import a private key into a new account 将私钥导入生成新帐户

OPTIONS:
--help, -h show help

1> list

格式:

list [command options] [arguments...]

选项:

serdeMacBook-Pro:~ user$ geth account list -h

ETHEREUM OPTIONS:
--datadir "/Users/user/Library/Ethereum" Data directory for the databases and keystore 指明数据库和密钥存储文件的数据目录
--keystore Directory for the keystore (default = inside the datadir) 密钥存储文件的数据目录(默认在--datadir参数指定的目录下)

打印所有帐户的简短摘要

举例:

serdeMacBook-Pro:~ user$ geth account list --datadir './today2/data0'
INFO [12-29|17:49:51] Maximum peer count ETH=25 LES=0 total=25
Account #0: {3b896fb3e31fc9b91921d19b8c7271d1c3af5b35} keystore:///Users/user/today2/data0/keystore/UTC--2018-07-12T06-48-20.253726408Z--3b896fb3e31fc9b91921d19b8c7271d1c3af5b35
Account #1: {39f03934f1d9afbff39a395364416e71eae375cd} keystore:///Users/user/today2/data0/keystore/UTC--2018-09-25T09-15-10.502888824Z--39f03934f1d9afbff39a395364416e71eae375cd

打印的是部署在./today2/data0目录下的所有账户信息

2>  new

格式:

geth account new [command options] [arguments...]

选项:

serdeMacBook-Pro:~ user$ geth account new -h

ETHEREUM OPTIONS: 以太坊选项
--datadir "/Users/user/Library/Ethereum" Data directory for the databases and keystore 指明数据库和密钥存储文件的数据目录
--keystore Directory for the keystore (default = inside the datadir) 密钥存储文件的数据目录(默认在--datadir参数指定的目录下)
--lightkdf Reduce key-derivation RAM & CPU usage at some expense of KDF strength
以牺牲KDF的强度为代价,减少键派生中RAM和CPU的使用

ACCOUNT OPTIONS:账户选项
--password value Password file to use for non-interactive password input 非交互式密码输入中使用的密码文件

创建一个新帐户并打印地址,帐户将以加密格式(即得到个UTC文件)保存,提示您输入密码。你必须记住这个密码才能在将来解锁你的账户。
对于非交互式使用,可以使用--password标记直接指定密码:
⚠️注意,这仅用于测试,将密码保存为文件或以任何其他方式公开是一个坏主意。

举例:

一开始在本地环境中有两个账户,如图:

Linux 挖数字货币(挖ETH)_第1张图片

 然后现在我们使用上面的命令生成一个新的账户:

userdeMBP:today2 user$ geth account new --datadir ./data0 --password ./password
INFO [01-10|16:09:36] Maximum peer count                       ETH=25 LES=0 total=25
Address: {d3f19f6c7cb02787c06792456351851f242a935b}

--datadir指定你是通过连接当前目录下的/data0/geth.ipc来连接这个geth客户端的,--password指定你密码存储的文件

然后可见成功生成了一个新的账户:

Linux 挖数字货币(挖ETH)_第2张图片

 

3>import

格式:

geth account import [options] 

选项:

serdeMacBook-Pro:~ user$ geth account import -h

ETHEREUM OPTIONS: 以太坊选项
--datadir "/Users/user/Library/Ethereum" Data directory for the databases and keystore 指明数据库和密钥存储文件的数据目录
--keystore Directory for the keystore (default = inside the datadir) 密钥存储文件的数据目录(默认在--datadir参数指定的目录下)
--lightkdf Reduce key-derivation RAM & CPU usage at some expense of KDF strength
以牺牲KDF的强度为代价,减少键派生中RAM和CPU的使用

ACCOUNT OPTIONS:账户选项
--password value Password file to use for non-interactive password input 非交互式密码输入中使用的密码文件

导入一个未加密的私钥,并创建一个新帐户,并打印的地址。

假设密钥文件包含十六进制格式的未加密私钥。得到的帐户将以加密格式(即得到个UTC文件)保存,提示你输入密码。
⚠️你必须记住这个密码才能在将来解锁你的账户。

举例说明:

geth account import --datadir '/Users/geth-environment/data0/' --password '/Users/geth-environment/password' /Users/user/geth-environment/coinbase.key

该命令的意思就是导入并生成一个账户的UTC文件到--datadir参数指定的geth客户端的目录的/keystore中,其密码从--password参数指定的文件夹中读取,/Users/user/geth-environment/coinbase.key文件中记录着该账户的私钥,然后你就能看见在/Users/geth-environment/data0/keystore文件夹中生成了对应的一个UTC文件

也可以不使用--password参数,然后他就会进行进入交互模式,终端提示输入密码

4>update

格式:

update [command options] [arguments...]

    geth account update 

选项:

THEREUM OPTIONS: 以太坊选项
--datadir "/Users/user/Library/Ethereum" Data directory for the databases and keystore 指明数据库和密钥存储文件的数据目录
--keystore Directory for the keystore (default = inside the datadir) 密钥存储文件的数据目录(默认在--datadir参数指定的目录下)
--lightkdf Reduce key-derivation RAM & CPU usage at some expense of KDF strength
以牺牲KDF的强度为代价,减少键派生中RAM和CPU的使用

更新现有帐户。
该帐户以加密格式保存在最新版本中,提示您输入一个密码来解锁该帐户,另一个密码来保存更新后的文件。
因此,可以使用相同的命令将弃用的格式的帐户迁移到最新的格式或更改帐户的密码。
对于非交互式使用,可以使用--password标志指定密码:

geth account update [options] 

由于只能给出一个密码,因此只能执行格式更新,因此只能交互式地更改密码。所以update不使用--password参数

举例:

更改上面生成的新账户:

serdeMBP:today2 user$ geth account update --datadir ./data0 d3f19f6c7cb02787c06792456351851f242a935b
INFO [01-10|16:27:31] Maximum peer count ETH=25 LES=0 total=25
Unlocking account d3f19f6c7cb02787c06792456351851f242a935b | Attempt 1/3
Passphrase: //旧的密码
INFO [01-10|16:27:38] Unlocked account address=0xd3F19F6C7cB02787C06792456351851f242a935B
Please give a new password. Do not forget this password.
Passphrase: //新的设置的密码
Repeat passphrase:

2.attach

格式:

geth attach [command options] [arguments...]

选项:

THEREUM OPTIONS:
--datadir "/Users/user/Library/Ethereum" 数据库和keystore的数据目录

API AND CONSOLE OPTIONS:
--jspath loadScript loadScript命令调用的JavaScript根路径 (默认为: ".")
--exec value 要执行JavaScript语句
--preload value 要预加载到控制台的JavaScript文件的逗号分隔列表

该命令允许在运行的geth节点上打开控制台

Geth控制台是一个在JavaScript运行环境中的交互式shell,用于暴露节点管理界面以及Ðapp JavaScript API。
详情见https://github.com/ethereum/go-ethereum/wiki/JavaScript-Console。

首先你要已经将geth运行起来了,geth.toml中的配置可见从头到尾使用Geth的说明-3-geth参数说明和环境配置:

userdeMBP:today2 user$ geth --config geth.toml 2>>geth.log

然后查看日志信息:

serdeMBP:today2 user$ tail -f geth.log
INFO [01-10|17:08:10] Regenerated local transaction journal transactions=0 accounts=0
WARN [01-10|17:08:10] Blockchain not empty, fast sync disabled
INFO [01-10|17:08:10] Starting P2P networking
INFO [01-10|17:08:11] UDP listener up self=enode://14a6c2c3c78951126326bbaa11f1c863347567f66273ffe663d1b351ebb96f2b315d4603f4ce13cc664a5ace0b290909c0e69c394114018a64b040ff2f4cdb10@10.240.100.98:61911
INFO [01-10|17:08:11] RLPx listener up self=enode://14a6c2c3c78951126326bbaa11f1c863347567f66273ffe663d1b351ebb96f2b315d4603f4ce13cc664a5ace0b290909c0e69c394114018a64b040ff2f4cdb10@10.240.100.98:61911
INFO [01-10|17:08:11] IPC endpoint opened url=/Users/user/today2/data0/geth.ipc
INFO [01-10|17:08:11] HTTP endpoint opened url=http://127.0.0.1:8202 cors=* vhosts=localhost
INFO [01-10|17:08:11] WebSocket endpoint opened url=ws://127.0.0.1:8546
INFO [01-10|17:08:11] Mapped network port proto=udp extport=61911 intport=61911 interface=NAT-PMP(192.168.199.1)
INFO [01-10|17:08:11] Mapped network port proto=tcp extport=61911 intport=61911 interface=NAT-PMP(192.168.199.1)

可见已经成功启动,然后就能够使用attach来连接这个geth客户端了

1)geth attach有http\ws\ipc三种方式连接,看你配置geth.toml开启了哪种方式,如:

$ geth attach ipc:/some/custom/path
$ geth attach http://191.168.1.1:8545
$ geth attach ws://191.168.1.1:8546

下面使用ipc连接:

serdeMBP:today2 user$ geth attach --datadir ./data0
Welcome to the Geth JavaScript console!

instance: Geth/v1.8.3-stable/darwin-amd64/go1.10.1
coinbase: 0x3b896fb3e31fc9b91921d19b8c7271d1c3af5b35
at block: 6486 (Thu, 10 Jan 2019 11:37:33 CST)
datadir: /Users/user/today2/data0
modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

>

--datadir指明geth所在目录,将会自动连接当前目录的/data0/geth.ipc,然后进入控制台

2)如果你只是想要执行某个命令,并不想要进入控制台的话,可以使用--exec:

userdeMBP:today2 user$ geth attach --datadir ./data0 --exec "eth.accounts" 
["0x3b896fb3e31fc9b91921d19b8c7271d1c3af5b35", "0x39f03934f1d9afbff39a395364416e71eae375cd", "0xd3f19f6c7cb02787c06792456351851f242a935b"]

可见上面的例子得到了所有账户address的信息

3)--preload用于将定制的JavaScript文件下载到控制台中,它可以将经常使用的函数下载进去,用于建立合约等,如:

geth --preload "/my/scripts/folder/utils.js,/my/scripts/folder/contracts.js" console

然后你就能够在geth控制台调用文件的函数了

或者你也可以使用--jspath--exec结合实现类似上面的功能,如:

$ geth --jspath "/tmp" --exec 'loadScript("checkbalances.js")' attach http://123.123.123.123:8545

--jspath指定文件所在的目录,--exec执行loadScript("js脚本文件"),然后该文件就下载到了geth客户端

 或者:

geth --exec “personal.newAccount(‘password’)“ attach rpc:http://127.0.0.1:61911

该命令的意思就是attach通过rpc接口连接某个正在打开的区块链,并在区块链中运行语句personal.newAccount(‘password’)

3.bug

格式:

geth bug [arguments...]

上报bug

举例:

在终端运行:

userdeMBP:today2 user$ geth bug

然后就会在浏览器中弹出下面的界面,用于填写你遇见的bug,并发布:

Linux 挖数字货币(挖ETH)_第3张图片

4.copydb

格式:

geth copydb [command options] [arguments...]

选项:

THEREUM OPTIONS:
--datadir "/Users/user/Library/Ethereum" 数据库和keystore的数据目录
--syncmode "fast" 区块链同步模式 ("fast", "full", or "light")
--testnet 说明连接的是Ropsten network: 预配置的工作量证明的测试网络
--rinkeby 说明连接的是Rinkeby network: 预配置的股权证明的测试网络

PERFORMANCE TUNING OPTIONS:性能调优选项
--cache value 分配给内部缓存的内存的兆字节 (默认值为: 1024)

LOGGING AND DEBUGGING OPTIONS:日志记录和调试选项
--fakepow 禁用工作量证明验证

第一个参数必须是包含要从其中下载的区块链的目录,如我本地的geth区块链目录

举例:

首先再建一个要将复制得到的数据存放的新区块链目录:

userdeMBP:~ user$ mkdir testCopy
userdeMBP:~ user$ cd testCopy/
userdeMBP:testCopy user$ mkdir data0

要先初始化创世区块:

serdeMBP:testCopy user$ geth --datadir ./data0 init genesis.json
INFO [01-11|11:04:14] Maximum peer count ETH=25 LES=0 total=25
INFO [01-11|11:04:14] Allocated cache and file handles database=/Users/user/testCopy/data0/geth/chaindata cache=16 handles=16
INFO [01-11|11:04:14] Writing custom genesis block
INFO [01-11|11:04:14] Persisted trie from memory database nodes=0 size=0.00B time=8.482µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [01-11|11:04:14] Successfully wrote genesis state database=chaindata hash=a0e580…a5e82e
INFO [01-11|11:04:14] Allocated cache and file handles database=/Users/user/testCopy/data0/geth/lightchaindata cache=16 handles=16
INFO [01-11|11:04:14] Writing custom genesis block
INFO [01-11|11:04:14] Persisted trie from memory database nodes=0 size=0.00B time=1.893µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [01-11|11:04:14] Successfully wrote genesis state database=lightchaindata hash=a0e580…a5e82e

然后复制today1的数据:

userdeMBP:testCopy user$ geth --datadir ./data0 copydb /Users/user/geth/data0/

会得到下面的错误:

Genesis not found in chain

这是因为复制的区块链目录写错了,应该改成:

serdeMBP:testCopy user$ geth --datadir ./data0 copydb /Users/user/geth/data0/geth/chaindata
INFO [01-11|11:04:19] Maximum peer count ETH=25 LES=0 total=25
INFO [01-11|11:04:19] Allocated cache and file handles database=/Users/user/testCopy/data0/geth/chaindata cache=768 handles=1024
INFO [01-11|11:04:19] Disk storage enabled for ethash caches dir=/Users/user/testCopy/data0/geth/ethash count=3
INFO [01-11|11:04:19] Disk storage enabled for ethash DAGs dir=/Users/user/.ethash count=2
INFO [01-11|11:04:19] Loaded most recent local header number=0 hash=a0e580…a5e82e td=262144
INFO [01-11|11:04:19] Loaded most recent local full block number=0 hash=a0e580…a5e82e td=262144
INFO [01-11|11:04:19] Loaded most recent local fast block number=0 hash=a0e580…a5e82e td=262144
INFO [01-11|11:04:19] Allocated cache and file handles database=/Users/user/today1/data0/geth/chaindata cache=1024 handles=256
INFO [01-11|11:04:19] Block synchronisation started
INFO [01-11|11:04:20] Imported new chain segment blocks=7 txs=0 mgas=0.000 elapsed=1.055s mgasps=0.000 number=7 hash=5462f1…94d464 cache=1.09kB
INFO [01-11|11:04:22] Imported new chain segment blocks=1484 txs=186 mgas=50.173 elapsed=1.808s mgasps=27.745 number=1491 hash=6af9a8…27f4f1 cache=279.71kB
Database copy done in 2.989308101s
Compacting entire database...
Compaction done in 30.029904ms.

然后就能够看见geth下的data0/geth/chaindata数据下载到了/Users/user/testCopy/data0/目录下:

然后去两边的控制台中查看可见两边的数据已经成功同步,eth.blockNumber的数量都为3,详细比较eth.getBlock(1)等区块中的数据也是相同的:

⚠️这个过程并不是直接复制过去的,而是通过 downloader 模块里的 NewFakePeer 创建一个虚拟对等节点,然后再进行数据同步完成的。 

 

中间还有这样的错误:

resource temporarily unavailable

这可能是因为你要复制的区块链还在运行,记得停止运行,否则不能复制它的数据

还有这样的错误:

RROR[01-11|10:58:40]
########## BAD BLOCK #########
Chain config: {ChainID: 1 Homestead: 1150000 DAO: 1920000 DAOSupport: true EIP150: 2463000 EIP155: 2675000 EIP158: 2675000 Byzantium: 4370000 Constantinople: Engine: ethash}

Number: 1
Hash: 0xb1c860c895da7d1e912bba497d163e8f5e775362588520c1d6054b67dcfafd94


Error: unknown ancestor
##############################

WARN [01-11|10:58:40] Synchronisation failed, dropping peer peer=local err="retrieved hash chain is invalid"
WARN [01-11|10:58:40] Downloader wants to drop peer, but peerdrop-function is not set peer=local
retrieved hash chain is invalid

这是因为你必须先初始化你自己的创世区块,然后再去复制别人的chaindata

5.dump

格式:

geth dump [ | ]

选项:

ETHEREUM OPTIONS:
  --datadir "/Users/user/Library/Ethereum"  指明数据库和密钥存储文件的数据目录

PERFORMANCE TUNING OPTIONS: 性能调优选项
  --cache value  分配给内部缓存的内存的兆字节 (默认值为: 1024)

参数被解释为块号或块hash。
使用“ethereum dump 0”来得到genesis创世块。输出区块的信息

举例:

有一个本地环境如下:

serdeMBP:testCopy user$ geth --datadir ./data0 console 2>>geth.log
Welcome to the Geth JavaScript console!

instance: Geth/v1.8.3-stable/darwin-amd64/go1.10.1
coinbase: 0xe4029d8e973c6e61ece8f9ce03abb002fe4f29ba
at block: 2 (Fri, 11 Jan 2019 11:33:58 CST)
datadir: /Users/user/testCopy/data0
modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

> eth.blockNumber
2
> exit

输出第二个区块的信息:

serdeMBP:testCopy user$ geth --datadir ./data0 dump 2
INFO [01-11|11:41:52] Maximum peer count ETH=25 LES=0 total=25
INFO [01-11|11:41:52] Allocated cache and file handles database=/Users/user/testCopy/data0/geth/chaindata cache=768 handles=1024
INFO [01-11|11:41:52] Disk storage enabled for ethash caches dir=/Users/user/testCopy/data0/geth/ethash count=3
INFO [01-11|11:41:52] Disk storage enabled for ethash DAGs dir=/Users/user/.ethash count=2
INFO [01-11|11:41:52] Loaded most recent local header number=2 hash=84d34d…36d579 td=761209
INFO [01-11|11:41:52] Loaded most recent local full block number=2 hash=84d34d…36d579 td=761209
INFO [01-11|11:41:52] Loaded most recent local fast block number=2 hash=84d34d…36d579 td=761209
{
"root": "09eaf04aa8f7683f10f6e936300a60ef9c18b0fbd80319a9e99e872c64f3682e",
"accounts": {
"e4029d8e973c6e61ece8f9ce03abb002fe4f29ba": {
"balance": "6000000000000000000",
"nonce": 0,
"root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"codeHash": "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
"code": "",
"storage": {}
}
}
}
INFO [01-11|11:41:52] Database closed database=/Users/user/testCopy/data0/geth/chaindata

如果是一个不存在的区块,会报错:

serdeMBP:testCopy user$ geth --datadir ./data0 dump 1492
INFO [01-11|16:42:52] Maximum peer count ETH=25 LES=0 total=25
INFO [01-11|16:42:52] Allocated cache and file handles database=/Users/user/testCopy/data0/geth/chaindata cache=768 handles=1024
INFO [01-11|16:42:52] Disk storage enabled for ethash caches dir=/Users/user/testCopy/data0/geth/ethash count=3
INFO [01-11|16:42:52] Disk storage enabled for ethash DAGs dir=/Users/user/.ethash count=2
INFO [01-11|16:42:52] Loaded most recent local header number=2 hash=fdf89d…d6af3b td=761209
INFO [01-11|16:42:52] Loaded most recent local full block number=1491 hash=6af9a8…27f4f1 td=216562781
INFO [01-11|16:42:52] Loaded most recent local fast block number=2 hash=fdf89d…d6af3b td=761209
{}
Fatal: block not found

但是中间有报另一个错:

serdeMBP:testCopy user$ geth --datadir ./data0 dump 10
INFO [01-11|11:46:30] Maximum peer count ETH=25 LES=0 total=25
INFO [01-11|11:46:30] Allocated cache and file handles database=/Users/user/testCopy/data0/geth/chaindata cache=768 handles=1024
INFO [01-11|11:46:30] Disk storage enabled for ethash caches dir=/Users/user/testCopy/data0/geth/ethash count=3
INFO [01-11|11:46:30] Disk storage enabled for ethash DAGs dir=/Users/user/.ethash count=2
INFO [01-11|11:46:30] Loaded most recent local header number=2 hash=84d34d…36d579 td=761209
INFO [01-11|11:46:30] Loaded most recent local full block number=2 hash=84d34d…36d579 td=761209
INFO [01-11|11:46:30] Loaded most recent local fast block number=2 hash=84d34d…36d579 td=761209
Fatal: could not create new state: missing trie node af696276bd40988db6e69cb43231b378a6e802ff4230c8f79ed56e98ef94bc73 (path )

这个的对应代码是:

            state, err := state.New(block.Root(), state.NewDatabase(chainDb))
            if err != nil {
                utils.Fatalf("could not create new state: %v", err)

 好像是在区块验证过程中出现了错误

6.dumpconfig

格式:

geth dumpconfig [command options] [arguments...]

显示配置信息

选项:基本就是geth的所有选项,这些选项可以改变配置的对应值的信息

举例:

得到所有的配置信息

serdeMBP:testCopy user$ geth --datadir ./data0 dumpconfig
INFO [01-11|14:17:13] Maximum peer count ETH=25 LES=0 total=25
[Eth]
NetworkId = 1
SyncMode = "fast"
LightPeers = 100
DatabaseCache = 768
GasPrice = 18000000000
EnablePreimageRecording = false

[Eth.Ethash]
CacheDir = "ethash"
CachesInMem = 2
CachesOnDisk = 3
DatasetDir = "/Users/user/.ethash"
DatasetsInMem = 1
DatasetsOnDisk = 2
PowMode = 0

[Eth.TxPool]
NoLocals = false
Journal = "transactions.rlp"
Rejournal = 3600000000000
PriceLimit = 1
PriceBump = 10
AccountSlots = 16
GlobalSlots = 4096
AccountQueue = 64
GlobalQueue = 1024
Lifetime = 10800000000000

[Eth.GPO]
Blocks = 20
Percentile = 60

[Shh]
MaxMessageSize = 1048576
MinimumAcceptedPOW = 2e-01

[Node]
DataDir = "data0"
IPCPath = "geth.ipc"
HTTPPort = 8545
HTTPVirtualHosts = ["localhost"]
HTTPModules = ["net", "web3", "eth", "shh"]
WSPort = 8546
WSModules = ["net", "web3", "eth", "shh"]

[Node.P2P]
MaxPeers = 25
NoDiscovery = false
BootstrapNodes = ["enode://a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c@52.16.188.185:30303", "enode://3f1d12044546b76342d59d4a05532c14b85aa669704bfe1f864fe079415aa2c02d743e03218e57a33fb94523adb54032871a6c51b2cc5514cb7c7e35b3ed0a99@13.93.211.84:30303", "enode://78de8a0916848093c73790ead81d1928bec737d565119932b98c6b100d944b7a95e94f847f689fc723399d2e31129d182f7ef3863f2b4c820abbf3ab2722344d@191.235.84.50:30303", "enode://158f8aab45f6d19c6cbf4a089c2670541a8da11978a2f90dbf6a502a4a3bab80d288afdbeb7ec0ef6d92de563767f3b1ea9e8e334ca711e9f8e2df5a0385e8e6@13.75.154.138:30303", "enode://1118980bf48b0a3640bdba04e0fe78b1add18e1cd99bf22d53daac1fd9972ad650df52176e7c7d89d1114cfef2bc23a2959aa54998a46afcf7d91809f0855082@52.74.57.123:30303", "enode://979b7fa28feeb35a4741660a16076f1943202cb72b6af70d327f053e248bab9ba81760f39d0701ef1d8f89cc1fbd2cacba0710a12cd5314d5e0c9021aa3637f9@5.1.83.226:30303"]
BootstrapNodesV5 = ["enode://06051a5573c81934c9554ef2898eb13b33a34b94cf36b202b69fde139ca17a85051979867720d4bdae4323d4943ddf9aeeb6643633aa656e0be843659795007a@35.177.226.168:30303", "enode://0cc5f5ffb5d9098c8b8c62325f3797f56509bff942704687b6530992ac706e2cb946b90a34f1f19548cd3c7baccbcaea354531e5983c7d1bc0dee16ce4b6440b@40.118.3.223:30304", "enode://1c7a64d76c0334b0418c004af2f67c50e36a3be60b5e4790bdac0439d21603469a85fad36f2473c9a80eb043ae60936df905fa28f1ff614c3e5dc34f15dcd2dc@40.118.3.223:30306", "enode://85c85d7143ae8bb96924f2b54f1b3e70d8c4d367af305325d30a61385a432f247d2c75c45c6b4a60335060d072d7f5b35dd1d4c45f76941f62a4f83b6e75daaf@40.118.3.223:30307"]
StaticNodes = []
TrustedNodes = []
ListenAddr = ":30303"
EnableMsgEvents = false

[Dashboard]
Host = "localhost"
Port = 8080
Refresh = 5000000000

比如使用了--networkid 1500,对应的配置信息也会变化:

userdeMBP:testCopy user$ geth --datadir ./data0 --networkid 1500 dumpconfig
INFO [01-11|14:23:19] Maximum peer count                       ETH=25 LES=0 total=25
[Eth]
NetworkId = 1500
SyncMode = "fast"

7.export

格式:

geth export [command options] [arguments...]

选项:

THEREUM OPTIONS:
--datadir "/Users/user/Library/Ethereum" 数据库和keystore的数据目录

PERFORMANCE TUNING OPTIONS:性能调优选项
--cache value 分配给内部缓存的内存的兆字节 (默认值为: 1024)

DEPRECATED OPTIONS:弃用选项
--light 启用轻客户模式

用来导出一个区块链文件,即所有区块数据

举例:

serdeMBP:testCopy user$ geth --datadir ./data0 export
Fatal: This command requires an argument.

//后面要有参数,我猜测是导出文件的名字,这里命名为exportFile1
userdeMBP:testCopy user$ geth --datadir ./data0 export exportFile1
INFO [01-11|14:30:14] Maximum peer count ETH=25 LES=0 total=25
INFO [01-11|14:30:14] Allocated cache and file handles database=/Users/user/testCopy/data0/geth/chaindata cache=768 handles=1024
INFO [01-11|14:30:14] Disk storage enabled for ethash caches dir=/Users/user/testCopy/data0/geth/ethash count=3
INFO [01-11|14:30:14] Disk storage enabled for ethash DAGs dir=/Users/user/.ethash count=2
INFO [01-11|14:30:14] Loaded most recent local header number=2 hash=84d34d…36d579 td=761209
INFO [01-11|14:30:14] Loaded most recent local full block number=2 hash=84d34d…36d579 td=761209
INFO [01-11|14:30:14] Loaded most recent local fast block number=2 hash=84d34d…36d579 td=761209
INFO [01-11|14:30:14] Exporting blockchain file=exportFile1
INFO [01-11|14:30:14] Exporting batch of blocks count=3
INFO [01-11|14:30:14] Exported blockchain file=exportFile1
Export done in 409.624µs

然后就能在当前目录中看见生成了一个exportFile1可执行文件,里面内容为:

901 f9f9 01f4 a000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 00a0 1dcc 4de8 dec7 5d7a
ab85 b567 b6cc d41a d312 451b 948a 7413
f0a1 42fd 40d4 9347 9400 0000 0000 0000
0000 0000 0000 0000 0000 0000 00a0 56e8
1f17 1bcc 55a6 ff83 45e6 92c0 f86e 5b48
e01b 996c adc0 0162 2fb5 e363 b421 a056
e81f 171b cc55 a6ff 8345 e692 c0f8 6e5b
48e0 1b99 6cad c001 622f b5e3 63b4 21a0
56e8 1f17 1bcc 55a6 ff83 45e6 92c0 f86e
5b48 e01b 996c adc0 0162 2fb5 e363 b421
b901 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
...

8.export-preimages

格式:

export-preimages [command options] [arguments...]

选项:

THEREUM OPTIONS:
--datadir "/Users/user/Library/Ethereum" 数据库和keystore的数据目录

PERFORMANCE TUNING OPTIONS:性能调优选项
--cache value 分配给内部缓存的内存的兆字节 (默认值为: 1024)

DEPRECATED OPTIONS:弃用选项
--light 启用轻客户模式

将hash预镜像导出到RLP编码的流

举例:

serdeMBP:testCopy user$ geth --datadir ./data0 export-preimages exportPreImage
INFO [01-11|14:38:14] Maximum peer count ETH=25 LES=0 total=25
INFO [01-11|14:38:14] Allocated cache and file handles database=/Users/user/testCopy/data0/geth/chaindata cache=768 handles=1024
INFO [01-11|14:38:14] Exporting preimages file=exportPreImage
INFO [01-11|14:38:14] Exported preimages file=exportPreImage
Export done in 4.128379ms

然后就能在当前目录中看见生成了一个exportPreImage可执行文件,里面内容为:

”䎗

9.import

格式:

geth import [command options] [arguments...]

选项:

THEREUM OPTIONS:
--datadir "/Users/user/Library/Ethereum" 数据库和keystore的数据目录
--gcmode value 区块链垃圾收集模式 ("full", "archive") (default: "full")

PERFORMANCE TUNING OPTIONS:性能调优选项
--cache value 分配给内部缓存的内存的兆字节 (默认值为: 1024)
--cache.database value 用于数据库io的缓存内存预留百分比 (default: 75)
--cache.gc value 用于trie修剪的缓存内存预留百分比 (default: 25)

DEPRECATED OPTIONS:弃用选项
--light 启用轻客户模式

import命令从rlp编码的表单导入块。表单可以是一个包含几个rlp编码块的文件,也可以使用多个文件。
如果只使用一个文件,导入错误将导致失败。如果使用多个文件,即使出现单独的rlp文件导入失败,处理也将继续。

用来导入一个区块链文件,基本上相当于同步操作

举例,导入刚刚导出的数据:

serdeMBP:testCopy user$ geth --datadir ./data0 import exportFile1
INFO [01-11|14:43:09] Maximum peer count ETH=25 LES=0 total=25
INFO [01-11|14:43:09] Allocated cache and file handles database=/Users/user/testCopy/data0/geth/chaindata cache=768 handles=1024
INFO [01-11|14:43:09] Disk storage enabled for ethash caches dir=/Users/user/testCopy/data0/geth/ethash count=3
INFO [01-11|14:43:09] Disk storage enabled for ethash DAGs dir=/Users/user/.ethash count=2
INFO [01-11|14:43:09] Loaded most recent local header number=2 hash=84d34d…36d579 td=761209
INFO [01-11|14:43:09] Loaded most recent local full block number=2 hash=84d34d…36d579 td=761209
INFO [01-11|14:43:09] Loaded most recent local fast block number=2 hash=84d34d…36d579 td=761209
INFO [01-11|14:43:09] Importing blockchain file=exportFile1
INFO [01-11|14:43:09] Skipping batch as all blocks present batch=0 first=309fc9…1b7bde last=84d34d…36d579
INFO [01-11|14:43:09] Writing cached state to disk block=2 hash=84d34d…36d579 root=09eaf0…f3682e
INFO [01-11|14:43:09] Persisted trie from memory database nodes=0 size=0.00B time=33.291µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [01-11|14:43:09] Writing cached state to disk block=1 hash=309fc9…1b7bde root=a5122d…57851e
INFO [01-11|14:43:09] Persisted trie from memory database nodes=0 size=0.00B time=1.068µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [01-11|14:43:09] Blockchain manager stopped
Import done in 849.233µs.

Compactions
Level | Tables | Size(MB) | Time(sec) | Read(MB) | Write(MB)
-------+------------+---------------+---------------+---------------+---------------
0 | 5 | 0.00108 | 0.00000 | 0.00000 | 0.00000
1 | 1 | 0.61511 | 0.00000 | 0.00000 | 0.00000

Read(MB):0.15649 Write(MB):0.10170
Trie cache misses: 0
Trie cache unloads: 0

Object memory: 194.334 MB current, 194.111 MB peak
System memory: 405.694 MB current, 405.444 MB peak
Allocations: 0.017 million
GC pause: 305.935µs

Compacting entire database...
Compaction done in 152.183203ms.

Compactions
Level | Tables | Size(MB) | Time(sec) | Read(MB) | Write(MB)
-------+------------+---------------+---------------+---------------+---------------
0 | 0 | 0.00000 | 0.00119 | 0.00000 | 0.00021
1 | 1 | 0.61511 | 0.15276 | 1.23150 | 1.23021

Read(MB):1.23723 Write(MB):1.23117
INFO [01-11|14:43:09] Database closed database=/Users/user/testCopy/data0/geth/chaindata

10.import-preimages

格式:

geth import-preimages [command options] [arguments...]

选项:

THEREUM OPTIONS:
--datadir "/Users/user/Library/Ethereum" 数据库和keystore的数据目录

PERFORMANCE TUNING OPTIONS:性能调优选项
--cache value 分配给内部缓存的内存的兆字节 (默认值为: 1024)

DEPRECATED OPTIONS:弃用选项
--light 启用轻客户模式

从RLP编码的流导入hash预镜像

结合

import和export其实是结合起来使用的用于同步两个区块的数据

比如一开始我的testCopy目录中的数据只同步了2个区块,today1目录下的区块有1491个区块,同步两边区块的方法就是使用export导出today1下的区块链文件,然后将该区块链文件导入testCopy中,同步就完成了,执行如下:

1)首先export出today1的区块链文件:

serdeMBP:~ user$ cd today1
userdeMBP:today1 user$ geth --datadir ./data0 export exportFile
INFO [01-11|14:56:34] Maximum peer count ETH=25 LES=0 total=25
INFO [01-11|14:56:34] Allocated cache and file handles database=/Users/user/today1/data0/geth/chaindata cache=768 handles=1024
INFO [01-11|14:56:34] Disk storage enabled for ethash caches dir=/Users/user/today1/data0/geth/ethash count=3
INFO [01-11|14:56:34] Disk storage enabled for ethash DAGs dir=/Users/user/.ethash count=2
INFO [01-11|14:56:34] Loaded most recent local header number=1491 hash=6af9a8…27f4f1 td=216562781
INFO [01-11|14:56:34] Loaded most recent local full block number=1491 hash=6af9a8…27f4f1 td=216562781
INFO [01-11|14:56:34] Loaded most recent local fast block number=1491 hash=6af9a8…27f4f1 td=216562781
INFO [01-11|14:56:34] Exporting blockchain file=exportFile
INFO [01-11|14:56:34] Exporting batch of blocks count=1492
INFO [01-11|14:56:34] Exported blockchain file=exportFile
Export done in 222.88291ms

2)然后将导出的exportFile文件放到testCopy目录下,然后import:

serdeMBP:today1 user$ cd ..
userdeMBP:~ user$ cd testCopy/
userdeMBP:testCopy user$ geth --datadir ./data0 import exportFile
INFO [01-11|14:58:56] Maximum peer count ETH=25 LES=0 total=25
INFO [01-11|14:58:56] Allocated cache and file handles database=/Users/user/testCopy/data0/geth/chaindata cache=768 handles=1024
INFO [01-11|14:58:56] Disk storage enabled for ethash caches dir=/Users/user/testCopy/data0/geth/ethash count=3
INFO [01-11|14:58:56] Disk storage enabled for ethash DAGs dir=/Users/user/.ethash count=2
INFO [01-11|14:58:56] Loaded most recent local header number=2 hash=84d34d…36d579 td=761209
INFO [01-11|14:58:56] Loaded most recent local full block number=2 hash=84d34d…36d579 td=761209
INFO [01-11|14:58:56] Loaded most recent local fast block number=2 hash=84d34d…36d579 td=761209
INFO [01-11|14:58:56] Importing blockchain file=exportFile
INFO [01-11|14:58:56] Imported new chain segment blocks=1 txs=0 mgas=0.000 elapsed=2.528ms mgasps=0.000 number=1 hash=b1c860…fafd94 cache=200.00B
INFO [01-11|14:58:56] Imported new chain segment blocks=1490 txs=186 mgas=50.173 elapsed=494.983ms mgasps=101.362 number=1491 hash=6af9a8…27f4f1 cache=279.71kB
INFO [01-11|14:58:56] Writing cached state to disk block=1491 hash=6af9a8…27f4f1 root=ff8472…04736e
INFO [01-11|14:58:56] Persisted trie from memory database nodes=401 size=160.91kB time=1.697075ms gcnodes=4361 gcsize=829.44kB gctime=7.321206ms livenodes=632 livesize=118.81kB
INFO [01-11|14:58:56] Writing cached state to disk block=1490 hash=ea103c…e25dda root=036ca7…ab9892
INFO [01-11|14:58:56] Persisted trie from memory database nodes=4 size=766.00B time=55.975µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=628 livesize=118.04kB
INFO [01-11|14:58:56] Writing cached state to disk block=1364 hash=2a246d…f79e6c root=86c771…0d678a
INFO [01-11|14:58:56] Persisted trie from memory database nodes=32 size=4.73kB time=163.8µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=596 livesize=113.31kB
INFO [01-11|14:58:56] Blockchain manager stopped
Import done in 516.917879ms.

Compactions
Level | Tables | Size(MB) | Time(sec) | Read(MB) | Write(MB)
-------+------------+---------------+---------------+---------------+---------------
0 | 1 | 0.00023 | 0.00000 | 0.00000 | 0.00000
1 | 1 | 0.61511 | 0.00000 | 0.00000 | 0.00000

Read(MB):0.47825 Write(MB):1.77525
Trie cache misses: 0
Trie cache unloads: 0

Object memory: 205.098 MB current, 194.027 MB peak
System memory: 408.772 MB current, 404.944 MB peak
Allocations: 1.389 million
GC pause: 770.634µs

Compacting entire database...
Compaction done in 40.568772ms.

Compactions
Level | Tables | Size(MB) | Time(sec) | Read(MB) | Write(MB)
-------+------------+---------------+---------------+---------------+---------------
0 | 0 | 0.00000 | 0.01313 | 0.00000 | 0.77336
1 | 1 | 0.70644 | 0.01905 | 1.38869 | 0.70644

Read(MB):1.37347 Write(MB):3.25529
INFO [01-11|14:58:56] Database closed database=/Users/user/testCopy/data0/geth/chaindata

3)这个时候去查看testCopy控制台的区块数,果然变成了:

> eth.blockNumber
1491

4)这时候再导出testCopy的区块链文件,可以发现和today1的区块链文件的值是相同的L:

serdeMBP:testCopy user$ geth --datadir ./data0 export exportFile2
INFO [01-11|14:59:16] Maximum peer count ETH=25 LES=0 total=25
INFO [01-11|14:59:16] Allocated cache and file handles database=/Users/user/testCopy/data0/geth/chaindata cache=768 handles=1024
INFO [01-11|14:59:16] Disk storage enabled for ethash caches dir=/Users/user/testCopy/data0/geth/ethash count=3
INFO [01-11|14:59:16] Disk storage enabled for ethash DAGs dir=/Users/user/.ethash count=2
INFO [01-11|14:59:16] Loaded most recent local header number=2 hash=fdf89d…d6af3b td=761209
INFO [01-11|14:59:16] Loaded most recent local full block number=1491 hash=6af9a8…27f4f1 td=216562781
INFO [01-11|14:59:16] Loaded most recent local fast block number=2 hash=fdf89d…d6af3b td=761209
INFO [01-11|14:59:16] Exporting blockchain file=exportFile2
INFO [01-11|14:59:16] Exporting batch of blocks count=1492
INFO [01-11|14:59:16] Exported blockchain file=exportFile2
Export done in 130.764885ms

⚠️import和export运行的比较慢,因为区块上的所有交易都会被检查

11.init

格式:

geth init [command options] [arguments...]

选项:

ETHEREUM OPTIONS:
  --datadir "/Users/user/Library/Ethereum"  数据库和keystore的数据目录

DEPRECATED OPTIONS:弃用选项
  --light  启用轻客户模式

init命令初始化网络的新genesis块和定义。
这是一个破坏性的行为,会改变你所参与的网络。
它希望将genesis.json文件作为参数。

举例:

serdeMBP:testCopy user$ geth --datadir ./data0 init genesis.json
INFO [01-11|11:04:14] Maximum peer count ETH=25 LES=0 total=25
INFO [01-11|11:04:14] Allocated cache and file handles database=/Users/user/testCopy/data0/geth/chaindata cache=16 handles=16
INFO [01-11|11:04:14] Writing custom genesis block
INFO [01-11|11:04:14] Persisted trie from memory database nodes=0 size=0.00B time=8.482µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [01-11|11:04:14] Successfully wrote genesis state database=chaindata hash=a0e580…a5e82e
INFO [01-11|11:04:14] Allocated cache and file handles database=/Users/user/testCopy/data0/geth/lightchaindata cache=16 handles=16
INFO [01-11|11:04:14] Writing custom genesis block
INFO [01-11|11:04:14] Persisted trie from memory database nodes=0 size=0.00B time=1.893µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [01-11|11:04:14] Successfully wrote genesis state database=lightchaindata hash=a0e580…a5e82e

genesis.json类似:


"config": {
"chainId": 1500,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0,
"ByzantiumBlock": 0
},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x40000",
"extraData" : "",
"gasLimit" : "0xffffffff",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": {}
}

12.js

格式:

geth js  [jsfile...]

选项:基本就是geth的所有选项

JavaScript VM暴露节点管理界面以及Ðapp JavaScript API。参见https://github.com/ethereum/go-ethereum/wiki/JavaScript-Console

执行指定的JavaScript文件(可以为多个文件)

举例:

生成一个test.js文件:

console.log("hello")

然后运行:

serdeMBP:today2 user$ geth js test.js
INFO [01-11|15:35:10] Maximum peer count ETH=25 LES=0 total=25
INFO [01-11|15:35:10] Starting peer-to-peer node instance=Geth/v1.8.3-stable/darwin-amd64/go1.10.1
INFO [01-11|15:35:10] Allocated cache and file handles database=/Users/user/Library/Ethereum/geth/chaindata cache=768 handles=128
INFO [01-11|15:35:10] Initialised chain configuration config="{ChainID: 1 Homestead: 1150000 DAO: 1920000 DAOSupport: true EIP150: 2463000 EIP155: 2675000 EIP158: 2675000 Byzantium: 4370000 Constantinople: Engine: ethash}"
INFO [01-11|15:35:10] Disk storage enabled for ethash caches dir=/Users/user/Library/Ethereum/geth/ethash count=3
INFO [01-11|15:35:10] Disk storage enabled for ethash DAGs dir=/Users/user/.ethash count=2
INFO [01-11|15:35:10] Initialising Ethereum protocol versions="[63 62]" network=1
INFO [01-11|15:35:10] Loaded most recent local header number=654395 hash=410ec3…d5895e td=3904096205036238619
INFO [01-11|15:35:10] Loaded most recent local full block number=0 hash=d4e567…cb8fa3 td=17179869184
INFO [01-11|15:35:10] Loaded most recent local fast block number=652112 hash=18a7ea…21dbcf td=3886518230582438446
INFO [01-11|15:35:10] Loaded local transaction journal transactions=0 dropped=0
INFO [01-11|15:35:10] Regenerated local transaction journal transactions=0 accounts=0
INFO [01-11|15:35:10] Starting P2P networking
INFO [01-11|15:35:10] UDP listener up self=enode://0a6a3338224c1e12308ca3084b99f2661ef94f8ad228ce8d82879feb6eadb0fbc1d0fc8ca909342f3a68d66c94879888546bbdb638a51b0f9526e36b40333914@10.240.100.98:30303
INFO [01-11|15:35:10] RLPx listener up self=enode://0a6a3338224c1e12308ca3084b99f2661ef94f8ad228ce8d82879feb6eadb0fbc1d0fc8ca909342f3a68d66c94879888546bbdb638a51b0f9526e36b40333914@10.240.100.98:30303
INFO [01-11|15:35:10] IPC endpoint opened url=/Users/user/Library/Ethereum/geth.ipc
hello
INFO [01-11|15:35:10] IPC endpoint closed endpoint=/Users/user/Library/Ethereum/geth.ipc
INFO [01-11|15:35:10] Blockchain manager stopped
INFO [01-11|15:35:10] Stopping Ethereum protocol
INFO [01-11|15:35:10] Ethereum protocol stopped
INFO [01-11|15:35:10] Transaction pool stopped
INFO [01-11|15:35:10] Database closed database=/Users/user/Library/Ethereum/geth/chaindata
INFO [01-11|15:35:10] Mapped network port proto=udp extport=30303 intport=30303 interface=NAT-PMP(192.168.199.1)
INFO [01-11|15:35:11] Mapped network port proto=tcp extport=30303 intport=30303 interface=NAT-PMP(192.168.199.1)

目的是为了干啥??????

如果运行复杂一点的内容:

var ethers = require('ethers');
var customHttpProvider = new ethers.providers.JsonRpcProvider("http://localhost:8202");
console.log(customHttpProvider.getBalance("0x39f03934f1d9afbff39a395364416e71eae375cd"));

会报错:

Fatal: Failed to execute test.js: Error: Cannot find module 'ethers'

但是这个模块命名安装在today2目录里面,不懂??????

13.license

格式:

geth license

举例:

serdeMBP:~ user$ geth license
Geth is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Geth is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with geth. If not, see .

14.makecache

格式:

geth makecache  

makecache命令在中生成一个ethash验证缓存。
此命令用于在支持系统测试项目。
普通用户不需要执行它。

举例,对区块1生成ethash缓存:

userdeMBP:testCopy user$ geth --datadir data0 makecache 1 .

结果就是在当前目录下生成了一个如下图所示的cache-R23-0000000000000000文件:

Linux 挖数字货币(挖ETH)_第4张图片

 

 15.makedag

格式:

geth makedag  

makedag命令在中生成挖矿需要的 DAG 数据集。
此命令用于支持系统测试项目。
普通用户不需要执行它。

⚠️Ethash是PoW系统,它需要一个大约1GB的数据集,它就是DAG。这通常需要几个小时才能生成,所以我们倾向于在硬盘中存储它

 举例:

serdeMBP:testCopy user$ geth --datadir data0 makedag 1 .
INFO [01-11|16:01:19] Generating DAG in progress epoch=0 percentage=0 elapsed=1.322s
INFO [01-11|16:01:20] Generating DAG in progress epoch=0 percentage=1 elapsed=2.422s
INFO [01-11|16:01:21] Generating DAG in progress epoch=0 percentage=2 elapsed=3.490s
INFO [01-11|16:01:22] Generating DAG in progress epoch=0 percentage=3 elapsed=4.554s
INFO [01-11|16:01:23] Generating DAG in progress epoch=0 percentage=4 elapsed=5.692s
INFO [01-11|16:01:25] Generating DAG in progress epoch=0 percentage=5 elapsed=6.718s
INFO [01-11|16:01:26] Generating DAG in progress epoch=0 percentage=6 elapsed=7.752s
...
INFO [01-11|16:03:22] Generating DAG in progress epoch=0 percentage=98 elapsed=2m4.000s
INFO [01-11|16:03:24] Generating DAG in progress epoch=0 percentage=99 elapsed=2m5.783s
INFO [01-11|16:03:24] Generated ethash verification cache epoch=0 elapsed=2m5.786s

然后会在当前目录下生成full-R23-0000000000000000文件

⚠️一般我们在新生成一个私有网络时,当我们运行miner.start()要开始挖矿之前,都会先生成挖矿需要使用的DAG数据集,它是用于以太坊工作量证明PoW算法的数据集

16.monitor

格式:

geth monitor [command options] [arguments...]

选项:

MISC OPTIONS:
  --attach value   连接的API端点(default: "/Users/user/Library/Ethereum/geth.ipc")
  --rows value     图表网格中的最大行数(default: 5)
  --refresh value  刷新间隔(秒)(default: 3)

Geth monitor是一种工具,用于收集和可视化节点收集的各种内部指标,支持不同的图表类型以及同时显示多个指标的能力。

 举例:

userdeMBP:today2 user$ geth --datadir data0 monitor --attach=/Users/user/today2/data0/geth.ipc
Fatal: Unable to attach to geth node: dial unix /Users/user/today2/data0/geth.ipc: connect: connection refused

错误因为没有打开today2控制台

serdeMBP:today2 user$ geth --datadir data0 monitor --attach=/Users/user/today2/data0/geth.ipc
Fatal: No metrics specified.

Available:
- chain/inserts/AvgRate01Min
- chain/inserts/AvgRate05Min
- chain/inserts/AvgRate15Min
- chain/inserts/MeanRate
...
- txpool/queued/discard/Overall
- txpool/queued/nofunds/Overall
- txpool/queued/ratelimit/Overall
- txpool/queued/replace/Overall
- txpool/underpriced/Overall

有错:

Fatal: No metrics specified.

并不懂,可能是需要什么参数??????

17.removedb

格式:

geth removedb

选项:

ETHEREUM OPTIONS:
  --datadir "/Users/user/Library/Ethereum"  数据库和keystore的数据目录

DEPRECATED OPTIONS:弃用选项
  --light  启用轻客户模式

移除区块链和状态数据库,其实就是把"chaindata", "lightchaindata"两个文件夹中的数据删除

serdeMBP:testCopy user$ geth --datadir data0 removedb
INFO [01-11|17:00:17] Maximum peer count ETH=25 LES=0 total=25
/Users/user/testCopy/data0/geth/chaindata
Remove this database? [y/N] y
Remove this database? [y/N] y
INFO [01-11|17:00:21] Database successfully deleted database=chaindata elapsed=6.990ms
/Users/user/testCopy/data0/geth/lightchaindata
Remove this database? [y/N] y
Remove this database? [y/N] y
INFO [01-11|17:00:31] Database successfully deleted database=lightchaindata elapsed=574.6µs
userdeMBP:testCopy user$

然后就可以看见对应目录下的这两个文件就没了:

Linux 挖数字货币(挖ETH)_第5张图片

18.version

举例:

serdeMBP:today2 user$ geth version
Geth
Version: 1.8.3-stable
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.10.1
Operating System: darwin
GOPATH=/Users/user/go
GOROOT=/usr/local/opt/go/libexec

这个命令的输出应该是机器可读的

19.wallet

举例:

geth wallet import /path/to/my/presale.wallet

将提示您的密码,并导入您的以太预售帐户。
它可以与--password选项非交互式地使用,该选项将passwordfile作为参数,其中包含明文形式的钱包密码。

20.console

Geth控制台是一个交互式shell的JavaScript运行时环境暴露节点管理界面以及Ðapp JavaScript API。
见https://github.com/ethereum/go-ethereum/wiki/JavaScript-Console。

/将配置信息写入geth.toml文件中
userdeMBP:today2 user$geth --datadir data0 --networkid 1500 --port 61911 --rpc --rpcapi 'eth,net,web3,admin,personal,miner,debug' --rpccorsdomain '*' --rpcport 8202 dumpconfig > ./geth.toml

//然后使用--config指向配置文件来运行控制台,并将日志写到geth.log文件中
userdeMBP:today2 user$ geth --config geth.toml console 2>>geth.log
Welcome to the Geth JavaScript console!

instance: Geth/v1.8.3-stable/darwin-amd64/go1.10.1
coinbase: 0x3b896fb3e31fc9b91921d19b8c7271d1c3af5b35
at block: 6486 (Thu, 10 Jan 2019 11:37:33 CST)
datadir: /Users/user/today2/data0
modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

>

 

总结:

上面的都可以忽略,拷贝别人的用于学习下面说一下怎么在公链挖矿

1.安装NVIDIA驱动,安装Docker-ce安装ethminer这些不再赘述

2.使用Docker安装geth用CPU挖矿(低效配置复杂)

mkdir /opt/ethaddr

nano key.txt 把已有的eth地址密钥去掉前面的0x把后面的内容填上去,注意不是eth收款地址而是密钥,可以在钱包内导出

nano password 输入密码在password文本里

docker pull ethereum/client-go

docker run -it -v /opt/ethaddr:/root/.ethereum ethereum/client-go --password /root/.ethereum/password account import /root/.ethereum/key.txt

docker run -it -v /opt/ethaddr:/root/.ethereum -p 8545:8545 -p 30303:30303 ethereum/client-go --rpc --rpcapi "db,eth,net,web3,personal,miner" --rpcaddr "0.0.0.0" --rpccorsdomain "*" --targetgaslimit 0xffffffff --allow-insecure-unlock --syncmode "fast"  这个不能关闭(此处一直显示Error: authentication needed: password or unlock,在另开一个attach中不能正常解锁账户,但去掉rpc就不能用ethminer挖矿,这里一真是个关键问题加上--allow-insecure-unlock完美解决,在公网下别开--rpcaddr "0.0.0.0"会被黑的, networkid 设置成 1 启动的时候加上 --mine就接入主网开始挖矿了不需要在控制台里输入其他命令)

ethminer -G -P http://127.0.0.1:8545  启动ethminer挖矿一般不用任何机器上都可以使用只要地址池对的ethminer.exe -G -P http://192.168.1.50:8545

参考https://github.com/ethereum-mining/ethminer/blob/master/docs/POOL_EXAMPLES_ETH.md
docker run -it -v /opt/ethaddr:/root/.ethereum ethereum/client-go --ipcpath /root/.ethereum/geth.ipc attach

eth.accounts 
//查看账户
personal.listAccounts  
//查看账户
miner.setEtherbase("**钱包账户地址**")     
//设置主账户
personal.unlockAccount("**钱包账户地址**","*密码*")  
//解锁账户
personal.lockAccount("***钱包账户地址*")    
//锁定账户
eth.getBalance("**钱包账户地址***") 
//查看余额
net.listening 
//查看节点状态
net.peerCount 
// 查看节点链接的数量
#查看同步状态
eth.syncing
#查看同步高度
eth.blockNumber
#查看节点数
net.listening
net.peerCount
#同步以太坊区Geth长期节点
admin.peers
admin.addPeer("enode://f4642fa65af50cfdea8fa7414a5def7bb7991478b768e296f5e4a54e8b995de102e0ceae2e826f293c481b5325f89be6d207b003382e18a8ecba66fbaf6416c0@33.4.2.1:30303")
admin.peers.forEach(function(p) {console.log(p.network.remoteAddress);})
如果打印出的地址里面包括33.4.2.1说明已经连上

3.GPU挖矿(高效配置方便)

ethminer最新版使用命令参考https://blog.dreambreakerx.com/2018/05/ethminer-parameters/

nvidia-smi查看显存在够不够,一般要4G的显存

 pip install https://files.pythonhosted.org/packages/96/a7/1080d3b9e2273beaadf8b0cd7929dda1d5d01cc9a31b06dffe032aa314ec/ethproxy-1.0.3-py2.py3-none-any.whl
安装ethproxy用代理在矿池挖

 ethproxy -W 0xaa09c6cae9090f3c7c4f50115811c0199633542c开启你的钱包账户,莫认端口8080

ethminer --farm-recheck 200 --cl-local-work 64 -G --cl-global-work 16384 -P http://192.168.1.50:8080开挖

ethminer --farm-recheck 200  -G -P stratum+ssl://0xaa09c6cae9090f3c7c4f50115811c0199633542c.firebirds-B85MG@asia1.ethermine.org:5555不用代理直接挖
(可以是自己的矿池一般挖不到,最好是全球最大的矿池https://www.ethermine.org)

 


 

你可能感兴趣的:(Linux 挖数字货币(挖ETH))