从头到尾使用Geth的说明-2-cli可用命令-有2个地方标红,之后查查源码后看看能不能解决

geth - the go-ethereum command line interface 以太坊命令行接口

格式:

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节点之间传输整个目录或其中的单个键是安全的。
确保你定期备份你的钥匙。

userdeMacBook-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...]

选项:

userdeMacBook-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参数指定的目录下)

打印所有帐户的简短摘要

举例:

userdeMacBook-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...]

选项:

userdeMacBook-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标记直接指定密码:
⚠️注意,这仅用于测试,将密码保存为文件或以任何其他方式公开是一个坏主意。

举例:

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

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

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指定你密码存储的文件

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

3>import

格式:

geth account import [options] <keyfile>

选项:

userdeMacBook-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 非交互式密码输入中使用的密码文件

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

假设<keyfile>密钥文件包含十六进制格式的未加密私钥。得到的帐户将以加密格式(即得到个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 <address>

选项:

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的使用

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

geth account update [options] <address>

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

举例:

更改上面生成的新账户:

userdeMBP: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...]

选项:

ETHEREUM 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

然后查看日志信息:

userdeMBP: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有httpwsipc三种方式连接,看你配置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连接:

userdeMBP: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,并发布:

4.copydb

格式:

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

选项:

ETHEREUM 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

要先初始化创世区块:

userdeMBP: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

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

userdeMBP: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

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

还有这样的错误:

ERROR[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: <nil> 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 [<blockHash> | <blockNum>]

选项:

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

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

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

举例:

有一个本地环境如下:

userdeMBP: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

输出第二个区块的信息:

userdeMBP: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

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

userdeMBP: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

但是中间有报另一个错:

userdeMBP: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的所有选项,这些选项可以改变配置的对应值的信息

举例:

得到所有的配置信息

userdeMBP: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...]

选项:

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

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

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

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

举例:

userdeMBP: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可执行文件,里面内容为:

f901 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...]

选项:

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

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

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

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

举例:

userdeMBP: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可执行文件,里面内容为:

”䝎—<naìèùΫ°þO)º

9.import

格式:

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

选项:

ETHEREUM 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文件导入失败,处理也将继续。

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

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

userdeMBP: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...]

选项:

ETHEREUM 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的区块链文件:

userdeMBP:~ 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:

userdeMBP: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:

userdeMBP: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文件作为参数。

举例:

userdeMBP: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> [jsfile...]

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

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

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

举例:

生成一个test.js文件:

console.log("hello")

然后运行:

userdeMBP: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: <nil> 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

举例:

userdeMBP:~ 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 <http://www.gnu.org/licenses/>.

14.makecache

格式:

geth makecache <block number> <outputdir>

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

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

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

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

 15.makedag

格式:

geth makedag <block number> <outputdir>

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

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

 举例:

userdeMBP: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控制台

userdeMBP: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"两个文件夹中的数据删除

userdeMBP: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$ 

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

18.version

举例:

userdeMBP: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

> 
原文地址:https://www.cnblogs.com/wanghui-garcia/p/10252260.html