eth Interactive Console
In order to interact with the client you have two options. If you have no client running, you can start one and provide the -i
argument, which will start a client with the interactive console. Alternatively, if you already have a client running, and you started it with the -j
flag, you can just run ethconsole
, which will give you exactly the same environment without running a second client.
The interactive console is a javascript console which contains a subset of the JSON-RPC api plus some administration functions. To see all available functions type web3
in the console prompt and press enter. For only the administrative functions type web3.admin
.
Network connectivity
Querying network information
To figure out if you have any peers and if you are properly connected to the network you can type web3.net
. This will conveniently provide something like:
> web3.net
{
listening: true,
getListening: [Function],
peerCount: 2,
getPeerCount: [Function]
}
To query any individual value you can just call it. For example:
> web3.net.peerCount
2
Interacting with the network
If you would like to interact with the network you can use the network admin functions. You can query them with web3.admin.net
.
> web3.admin.net
{
start: [Function],
stop: [Function],
connect: [Function],
peers: [Function],
nodeInfo: [Function]
}
Starting the network
If the client is not connected to the network you can start listening with web3.admin.net.start()
> web3.net.listening
false
> web3.admin.net.start()
⚡ 12:52:24|p2p Worker stopping 17126 ms
⚡ 12:52:24|ethsync Worker stopping 17146 ms
ℹ 12:52:24|p2p UPnP device not found.
> true
> web3.net.listening
true
Stopping the network
In the same spirit you can stop listening with web3.admin.net.stop()
> web3.net.listening
true
> web3.admin.net.stop()
true
> web3.net.listening
false
>
Getting a list of peers
If you would like to obtain a list with information on the peers you are connected to you can use web3.admin.net.peers()
.
> web3.admin.net.peers()
[{
caps: {
eth: 61
},
clientVersion: 'Geth/v1.0.2-4591ae56/linux/go1.4.2',
host: '52.16.188.185',
id: 'a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c',
lastPing: 41,
notes: {
ask: 'nothing',
manners: 'nice',
sync: 'ongoing'
},
port: 0
}, {
caps: {
eth: 61
},
clientVersion: '++eth-v0.9.40-a1e4483e/Gav's Node//RelWithDebInfo-Linux/g++/int',
host: '92.51.165.126',
id: '5374c1bff8df923d3706357eeb4983cd29a63be40a269aaa2296ee5f3b2119a8978c0ed68b8f6fc84aad0df18790417daadf91a4bfbb786a16c9b0a199fa254a',
lastPing: 18,
notes: {
ask: 'nothing',
manners: 'nice',
sync: 'holding'
},
port: 30300
}]
>
Getting your node information
To obtain your node ID along with other information acout your node's address in the network then use web3.admin.net.nodeInfo()
> web3.admin.net.nodeInfo()
{
address: '209.131.41.48',
enode: 'enode://5bf4613faca50a0ff181915b2d8e5f0a87c82ed5a57dabc9812937bdacb167cf1420652930143a743d6238e0279bd91862c72f9d1d0cbb73b86c4ca1cf966432@209.131.41.48:30303',
id: '5bf4613faca50a0ff181915b2d8e5f0a87c82ed5a57dabc9812937bdacb167cf1420652930143a743d6238e0279bd91862c72f9d1d0cbb73b86c4ca1cf966432',
listenAddr: '209.131.41.48:30303',
name: '++eth-v0.9.41-cb61d09d/Lefteris'\ node//RelWithDebInfo-Linux/g++/int',
port: 30303
}
Connecting to other nodes
Sometimes, peer discovery may not work properly, or you may want to connect to a particular node in the network. In those cases you can use the web3.admin.net.connect()
function to manually connect to a peer.
> web3.admin.net.connect("5.1.83.226:30303")
true
If the above was succesfull we can see our new peer in the list:
> web3.admin.net.peers()
[{
caps: {
eth: 61
},
clientVersion: '++eth-v0.9.40-7faadaf4/EthDEV Frontier//RelWithDebInfo-Linux/g++/JIT',
host: '5.1.83.226',
id: '979b7fa28feeb35a4741660a16076f1943202cb72b6af70d327f053e248bab9ba81760f39d0701ef1d8f89cc1fbd2cacba0710a12cd5314d5e0c9021aa3637f9',
lastPing: 31,
notes: {
ask: 'nothing',
manners: 'nice',
sync: 'holding'
},
port: 30303
}, {
caps: {
eth: 61
},
clientVersion: 'Geth/v1.0.2-4591ae56/linux/go1.4.2',
host: '52.16.188.185',
id: 'a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c',
lastPing: 41,
notes: {
ask: 'nothing',
manners: 'nice',
sync: 'ongoing'
},
port: 0
}, {
caps: {
eth: 61
},
clientVersion: '++eth-v0.9.40-a1e4483e/Gav's Node//RelWithDebInfo-Linux/g++/int',
host: '92.51.165.126',
id: '5374c1bff8df923d3706357eeb4983cd29a63be40a269aaa2296ee5f3b2119a8978c0ed68b8f6fc84aad0df18790417daadf91a4bfbb786a16c9b0a199fa254a',
lastPing: 17,
notes: {
ask: 'nothing',
manners: 'nice',
sync: 'ongoing'
},
port: 30300
}]
Mining
You can also start and stop mining using the interactive console. To start mining use web3.admin.eth.setMining(true)
> web3.admin.eth.setMining(true)
ℹ 13:48:01|miner0 Loading full DAG of seedhash: #b903bd76…
> web3.admin.eth.setMining(ttrue
DAG 13:48:01|miner0 Generating DAG file. Progress: 0 %
DAG 13:48:04|miner0 Generating DAG file. Progress: 1 %
DAG 13:48:07|miner0 Generating DAG file. Progress: 2 %
⚡ 13:48:08|eth Stop worker 249 ms
⚡ 13:48:09|eth Stop worker 479 ms
⚡ 13:48:09|eth pause 480 ms
⚡ 13:48:09|eth Stop worker 480 ms
⚡ 13:48:09|eth pause 480 ms
Then again to stop mining simply invoke web3.admin.eth.setMining(false)
Miscellaneous administration
Exiting the client
You can exit the client with a Ctrl-C
signal but you can also use web3.admin.exit()
> web3.admin.exit()
true
⚡ 13:36:50|eth Stop worker 510 ms
ℹ 13:36:50|eth Closing blockchain DB
ℹ 13:36:50|eth Closing state DB
⚡ 13:36:50|ethsync Worker stopping 582 ms
⚡ 13:36:50|p2p Worker stopping 581 ms
lefteris@archlenovo ~/ew/cpp-ethereum$
Changing the log verbosity
If you would like to see more log messages you can change the log verbosity by web3.admin.setVerbosity()
. This function takes a numeric argument from 0 to 99.
> web3.admin.setVerbosity(4)
true
⧎ ◌ 13:40:21|p2p|17417d7b…|Geth/v1.0.1-99216f4a/linux/go1.4.2 GetBlockHashesByNumber ( 119085 - 119596 )
⧎ ◌ 13:40:21|p2p|0c88df87…|Geth/Siberia19/v1.0.2-9fb7bc74/linux/go1.4.2 GetBlockHashesByNumber ( 116890 - 116890 )
⧎ ◌ 13:40:21|p2p|17417d7b…|Geth/v1.0.1-99216f4a/linux/go1.4.2 GetBlocks ( 16 entries)
⧎ ◌ 13:40:21|p2p|17417d7b…|Geth/v1.0.1-99216f4a/linux/go1.4.2 16 blocks known and returned; 0 blocks unknown; 0 blocks ignored
⧎ ◌ 13:40:22|p2p|0c88df87…|Geth/Siberia19/v1.0.2-9fb7bc74/linux/go1.4.2 GetBlockHashesByNumber ( 116430 - 116430 )
⧎ ◌ 13:40:22|p2p|0c88df87…|Geth/Siberia19/v1.0.2-9fb7bc74/linux/go1.4.2 GetBlockHashesByNumber ( 116660 - 116660 )
⧎ ◌ 13:40:22|p2p|0c88df87…|Geth/Siberia19/v1.0.2-9fb7bc74/linux/go1.4.2 GetBlockHashesByNumber ( 116545 - 116545 )
⧎ ◌ 13:40:22|p2p|0c88df87…|Geth/Siberia19/v1.0.2-9fb7bc74/linux/go1.4.2 GetBlockHashesByNumber ( 116487 - 116487 )
⧎ ◌ 13:40:22|p2p|0c88df87…|Geth/Siberia19/v1.0.2-9fb7bc74/linux/go1.4.2 GetBlockHashesByNumber ( 116516 - 116516 )
⧎ ◌ 13:40:22|p2p|0c88df87…|Geth/Siberia19/v1.0.2-9fb7bc74/linux/go1.4.2 GetBlockHashesByNumber ( 116530 - 116530 )
⧎ ◌ 13:40:23|p2p|0c88df87…|Geth/Siberia19/v1.0.2-9fb7bc74/linux/go1.4.2 GetBlockHashesByNumber ( 116523 - 116523 )
⧎ ◌ 13:40:23|p2p|0c88df87…|Geth/Siberia19/v1.0.2-9fb7bc74/linux/go1.4.2 GetBlockHashesByNumber ( 116526 - 116526 )
⧎ ◌ 13:40:23|p2p|0c88df87…|Geth/Siberia19/v1.0.2-9fb7bc74/linux/go1.4.2 GetBlockHashesByNumber ( 116524 - 116524 )
⧎ ◌ 13:40:23|p2p|0c88df87…|Geth/Siberia19/v1.0.2-9fb7bc74/linux/go1.4.2 GetBlockHashesByNumber ( 116525 - 116525 )
⧎ ◌ 13:40:23|p2p|0c88df87…|Geth/Siberia19/v1.0.2-9fb7bc74/linux/go1.4.2 GetBlockHashesByNumber ( 116525 - 117036 )
⧎ ◌ 13:40:23|p2p Hello: Geth/v1.0.1/linux/go1.4.2 V[ 4 ] ##55581d43… (eth,61) 0
⧎ ◌ 13:40:23|p2p|55581d43…|Geth/v1.0.1/linux/go1.4.2 Status: 61 / 1 / #95e83250… , TD: 582573549 = #a4f70ef1…
⧎ ◌ 13:40:23|p2p|55581d43…|Geth/v1.0.1/linux/go1.4.2 Disconnect (reason: Unknown reason. )
⧎ ◌ 13:40:23|p2p|55581d43…|Geth/v1.0.1/linux/go1.4.2 Closing peer session :-(
For a healthy logging level use the value of 1.