Awesome
ethereal
A command-line tool for managing common tasks in Ethereum.
Table of Contents
Install
Binaries
Binaries for the latest version of ethereal
can be obtained from the releases page.
Docker
You can obtain the latest version of ethereal
using docker with:
docker pull wealdtech/ethereal
Source
ethereal
is a standard Go program which can be installed with:
go install github.com/wealdtech/ethereal/v2@latest
Note that ethereal
requires at least version 1.13 of go to operate. The version of go can be found with go version
.
The docker image can be built locally with:
docker build -t ethereal .
You can run ethereal
using docker after that. Example:
docker run -it ethereal --help
Note that that many ethereal
commands connect to an Ethereum node to obtain information or send transactions. If the Ethereum 1 node is running directly on the server this requires the --network=host
command, for example:
docker run --network=host etheral chain status
Alternatively, if the Ethereum node is running in a separate docker container a shared network can be created with docker network create eth2
and accessed by adding --network=eth
added to both the beacon node and ethereal
containers.
Usage
Ethereal contains a large number of features that are useful for day-to-day interactions with the Ethereum blockchain.
Access to local wallets
Ethereal works with Geth, MIST and Parity wallets in the standard locations. A simple way to check the addresses that can be seen by Ethereal is to run ethereal account list
which will list all accounts that Ethereal can see. If you expect an address to show up and it doesn't then please raise an issue with the relevant details.
If you use Parity and want to import a private key or a wallet from another system please see https://github.com/paritytech/parity/wiki/Backing-up-&-Restoring#restoring-options
If you use Geth and want to import a private key or a wallet from another system please see https://github.com/ethereum/go-ethereum/wiki/Managing-your-accounts
When accessing local wallets a --passphrase
option is required to unlock the account. Note that this is not shown in the examples
Alternatively you can use a private key directly with the --privatekey
option, although be aware that this can leave your private key in command history.
Access to Ethereum networks
Ethereal supports all main Ethereum networks It auto-detects the network by querying the connected node for the network ID. The connection should be geth-compatible, so either geth itself or parity with the --geth
flag to enable geth compatibility mode. The connection could be a local node or a network service such as Infura.
Ethereal contains default connections via Infura to most major networks that can be defined by the --network
argument. Supported neworks are mainnet, sepolia and holesky. Alternatively a connection to a custom node can be created using the --connection
argument. For example a local IPC node might use --connection=/home/ethereum/.ethereum/geth.ipc
or --connection=http://localhost:8545/
The Infura key for Ethereal is shared among all users. If you are going to carry out a lot of queries of chain data please either use a local node or your own Infura account.
Configuration file
Ethereal supports a configuration file; by default in the user's home directory but changeable with the --config
argument on the command line. The configuration file provides values that override the defaults but themselves can be overridden with command-line arguments.
The default file name is .ethereal.json
or .ethereal.yml
depending on the encoding used (JSON or YAML, respectively). An example .ethereal.json
file is shown below:
{
"timeout": "20s",
"verbose": true,
"network": "ropsten",
"passphrase": "my secret passphrase"
}
Output and exit status
If set, the --quiet
argument will suppress all output.
If set, the --verbose
argument will output additional information related to the command. Details of the additional information is command-specific and explained in the command help below.
If set, the --debug
argument will output additional information about the operation of Ethereal as it carries out its work.
Commands will have an exit status of 0 on success and 1 on failure. The specific definition of success is specified in the help for each command. For commands that generate transactions and wait for them to be mined there is an additional exit status of 2 which means the transaction has been submitted but not mined within the requested time limit.
Transactions
Many Ethereal commands generate Ethereum transactions. These commands have a number of settings.
The --priority-fee-per-gas
argument sets the tip for the transaction, for example --priority-fee-per-gas="2 gwei"
. If not supplied it defaults to 1.5 Gwei.
The --max-fee-per-gas
argument sets the maximum combined fee plus priority fee for the transaction, for example --max-fee-per-gas=100gwei
. If not supplied it defaults to 200 Gwei.
The --gaslimit
argument hardcodes the maximum gas for the transaction, for example --gas=100000"
. If not supplied the gas price will be automatically calculated.
The --nonce
argument hardcodes the nonce for the transaction, for example --nonce=123"
. If not supplied the nonce will be retrieved automatically from the blockchain.
The --passphrase
argument supplies the passphrase to unlock the submitting account, for example --passphrase="my secret passphrase"
.
The --privatekey
argument supplies the private key to obtain and submitting account, for example --privatekey=0x0000000000000000000000000000000000000000000000000000000000000001
.
Note that information such as the passphrase and private key might be stored in your command line history. If this is an issue the values can be provided in the Ethereal configuration file as described above.
By default Ethereal will return once the transaction has been submitted. The --wait
argument makes the command wait for the transaction to be mined as well. If waiting should be limited this can be specified with the --limit
argument, for example --wait --limit=60s
.
Logging
Any time Ethereal broadcasts a transaction it logs the details in a file. By default the file is ethereal.log
in the user's home directory, with each line being a JSON object with the relevant fields. The log file location can be changed with the --log
argument.
ENS
Ethereal fully supports ENS. Wherever an address is seen in the examples below an ENS name can be used instead.
Ethereal will always return addresses as ENS names if ENS reverse resolution is configured.
account
commands
Account commands focus on information about local accounts, generally those used by Geth and Parity but also those from hardware devices.
checksum
ethereal account checksum
generates or verifies the EIP-55 checksum for a provided account address. With the --check
flag it checks if the supplied address is correctly checksummed, otherwise it generates a correctly checksummed version of the supplied address. For example:
$ ethereal account checksum --address=0x7e5f4552091a69125d5dfcb7b8c2659029395bdf --check
Checksum is incorrect
$ ethereal account checksum --address=0x7e5f4552091a69125d5dfcb7b8c2659029395bdf
0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
$ ethereal account checksum --address=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf --check
Checksum is correct
keys
ethereal account keys
shows the private key, public key and Ethereum address for a given account or private key. For example:
$ ethereal account keys --privatekey=0x0000000000000000000000000000000000000000000000000000000000000001
Private key: 0x00000000000000000000000000000001
Public key: 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8
Ethereum address: 0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
list
ethereal account list
shows the Ethereum addresses of known accounts on the local computer. For example:
$ ethereal account list
0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF
0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69
0x1efF47bc3a10a45D4B230B5d10E37751FE6AA718
0x003F53E95e293D08dc34C69ABcAbF5b577E50Cf5
With the --verbose
flag this will provide the location of the keystore, current Ether funds and next nonce. For example:
$ ethereal account list --verbose
Location: keystore:///home/ethereum/.ethereum/keystore/UTC--2019-03-12T10-12-47.585144239Z--7e5f4552091a69125d5dfcb7b8c2659029395bdf
Address: 0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
Balance: 0
Next nonce: 243
...
nonce
ethereal account nonce
shows the next nonce of an Ethereum address. For example:
$ ethereal account nonce --address=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
243
beacon
commands
Beacon commands focus on interactions with the Ethereum 2 beacon deposit contract.
deposit
ethereal beacon deposit
creates and sends an Ethereum 2 beacon deposit contract transaction. For example:
$ ethereal beacon deposit --data=deposit.json --eth2network=mainnet --from=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
Note that ethereal
obtains the information about the amount of Ether to send with deposits from the supplied deposit data.
ethereal beacon deposit
has a number of options to control deposits. It carries out as many checks as possible given the information to ensure the deposit is valid, correct and unique, and as such in non-standard deposit situations these options may be required to ensure the deposit is processed.
block
commands
Block commands focus on information about specific blocks.
info
ethereal block info
provides information about a block. For example:
$ ethereal block info --block=5188504
Number: 5188504
Hash: 0x01262b8549472c95714993135f9aa1cb09685bd33076541522e3db0481f63fe7
Block time: 1552386092 (2019-03-12 10:21:32 +0000 GMT)
Gas limit: 8000000
Gas used: 7983831 (99.80%)
Uncles: 0
Transactions: 66
With the --verbose
flag this will provide information about the miner. For example:
$ ethereal block info --block=5188504 --verbose
Number: 5188504
Hash: 0x01262b8549472c95714993135f9aa1cb09685bd33076541522e3db0481f63fe7
Block time: 1552386092 (2019-03-12 10:21:32 +0000 GMT)
Mined by: 0x6212Dd88f890FefE0Af24D1404d96aDF488e4E3B
Extra: geth�go1.10.4�linux
Difficulty: 2232415661
Gas limit: 8000000
Gas used: 7983831 (99.80%)
Transactions: 66
Note that --block=latest
will provide information on the latest mined block.
overview
ethereal block overview
provides high-level statistics about the last few mined blocks. For example:
$ ethereal block overview
Block Gas used/Gas limit Block time Gap Coinbase
5188514 7882080/ 8000000 19/03/12 10:24:00 0xCd626bc764E1d553e0D75a42f5c4156B91a63F23
5188513 7994026/ 8000000 19/03/12 10:23:58 2s 0xCd626bc764E1d553e0D75a42f5c4156B91a63F23
5188512 7964126/ 8000029 19/03/12 10:23:48 10s 0x635B4764D1939DfAcD3a8014726159abC277BecC
5188511 7981224/ 8000000 19/03/12 10:23:43 5s 0x6212Dd88f890FefE0Af24D1404d96aDF488e4E3B
5188510 7958922/ 8000000 19/03/12 10:23:35 8s 0x6212Dd88f890FefE0Af24D1404d96aDF488e4E3B
With the --verbose
flag this will provide column headers. For example:
$ ethereal block overview --verbose
Block Gas used/Gas limit Block time Gap Coinbase
5188514 7882080/ 8000000 19/03/12 10:24:00 0xCd626bc764E1d553e0D75a42f5c4156B91a63F23
5188513 7994026/ 8000000 19/03/12 10:23:58 2s 0xCd626bc764E1d553e0D75a42f5c4156B91a63F23
5188512 7964126/ 8000029 19/03/12 10:23:48 10s 0x635B4764D1939DfAcD3a8014726159abC277BecC
5188511 7981224/ 8000000 19/03/12 10:23:43 5s 0x6212Dd88f890FefE0Af24D1404d96aDF488e4E3B
5188510 7958922/ 8000000 19/03/12 10:23:35 8s 0x6212Dd88f890FefE0Af24D1404d96aDF488e4E3B
The number of blocks displayed in the overview can be altered using the --blocks
parameter.
contract
commands
Contract commands focus on deploying and interacting with Ethereum smart contracts.
The examples of the commands below use the following contract at SampleContract.sol
:
pragma solidity ^0.5.0;
contract SampleContract {
uint256 private value;
constructor(uint256 _value) public {
value = _value;
}
function getValue() public view returns (uint256) {
return value;
}
function setValue(uint256 _value) public {
value = _value;
}
}
which is compiled using the command line:
$ solc --optimize --combined-json=bin,abi SampleContract.sol >SampleContract.json
Note that best results the names of the files should be the same as the name of the contract (ignoring the suffix), as per the example above.
call
ethereal contract call
calls a contract function locally on the connected node. For example:
$ ethereal contract call --contract=0x3c24F71e826D3762f5145f6a27d41545A7dfc8cF --json=SampleContract.json --call='getValue()' --from=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
5
deploy
ethereal contract deploy
deploys a contract to the Ethereum blockchain.
The binary to deploy can be supplied in two different ways. The simplest is to compile the contract using the --combined-json=abi,json
option of solc
to provide a JSON file containing both the binary data and the contract's ABI and deploy using that. For example:
$ ethereal contract deploy --json=SampleContract.json --constructor='constructor(5)' --from=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
Alternatively the binary data and constructor arguments can be supplied directly on the command-line. For example:
$ BIN=`solc --optimize --bin SampleContract.sol | egrep -A 2 SampleContract.sol:SampleContract | tail -1`
$ CONSTRUCTORARGS=`0000000000000000000000000000000000000000000000000000000000000005`
$ ethereal contract deploy --data="${BIN}${CONSTRUCTORARGS}" --from=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
send
ethereal contract send
sends a contract transaction to the Ethereum blockchain. For example:
$ ethereal contract send --contract=0x3c24F71e826D3762f5145f6a27d41545A7dfc8cF --json=SampleContract.json --call='setValue(6)' --from=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
storage
ethereal contract storage
accesses contract storage directly. Key values depend on the value stored; for more details see this article.
$ ethereal contract storage --contract=0x3c24F71e826D3762f5145f6a27d41545A7dfc8cF --key=0x00
0x0000000000000000000000000000000000000000000000000000000000000006
dns
commands
DNS commands focus on interacting with the EthDNS system to allow DNS records to be stored on Ethereum.
Getting and setting DNS records works on the basis of a DNS resource record set. A resource record set is defined by the tuple (domain,name,resource record type) for example (ehdns.xyz,www.ethdns.xyz,A) would return all 'A' (address) records help for www.ethdns.xyz in the domain ethdns.xyz.
clear
ethereal dns clear
clears all resource records for a DNS zone.
get
ethereal dns get
obtains a single resource record set for the (domain,name,resource record type) tuple. For example:
$ ethereal dns get --domain=ethdns.xyz --name=www --resource=CNAME
www.ethdns.xyz. 21600 IN CNAME ethdns.xyz.
Resource record sets on the root domain can be fetched by omitting the name
argument. For example:
$ ethereal dns get --domain=ethdns.xyz --resource=NS
ethdns.xyz. 43200 IN NS ns1.ethdns.xyz.
ethdns.xyz. 43200 IN NS ns2.ethdns.xyz.
set
ethereal dns set
sets a single resource record set for the (domain,name,resource record type) tuple. For example:
$ ethereal dns set --domain=ethdns.xyz --name=www --resource=CNAME --record="ethdns.xyz."
Resource record sets with multiple values can be supplied by separating them with "&&". For example:
$ ethereal dns set --domain=ethdns.xyz --resource=NS --record="ns1.ethdns.xyz&&ns2.ethdns.xyz"
ens
commands
ENS commands focus on interacting with the Ethereum Name Service contracts that address resources using human-readable names.
address clear
ethereal ens address clear
removes an address associated with an ENS domain. For example:
$ ethereal ens address clear --domain=mydomain.eth
address get
ethereal ens address get
gets the address associated with an ENS domain. For example:
$ ethereal ens address get --domain=mydomain.eth
0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
address set
ethereal ens address set
sets the address associated with an ENS domain. For example:
$ ethereal ens address set --domain=mydomain.eth --address=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
contenthash clear
ethereal ens contenthash clear
clears the contenthash associated with an ENS domain. For example:
$ ethereal ens contenthash clear --domain=mydomain.eth
contenthash get
ethereal ens contenthash get
gets the contenthash associated with an ENS domain. For example:
$ ethereal ens contenthash get --domain=mydomain.eth
/swarm/d1de9994b4d039f6548d191eb26786769f580809256b4685ef316805265ea162
contenthash set
ethereal ens contenthash set
sets the contenthash associated with an ENS domain. For example:
$ ethereal ens contenthash set --domain=mydomain.eth --content=/swarm/d1de9994b4d039f6548d191eb26786769f580809256b4685ef316805265ea162
Valid content hash codecs are "ipfs" and "swarm".
controller get
ethereal ens controller get
gets the controller of the domain. For example:
$ ethereal ens controller get --domain=mydomain.eth
0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF
controller set
ethereal ens controller set
sets the controller of the domain. For example:
$ ethereal ens controller set --domain=mydomain.eth --owner=0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF
domain clear
ethereal ens domain clear
clears the ENS reverse resolution domain of an address. For example:
$ ethereal ens domain clear --address=0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69
domain get
ethereal ens domain get
gets the ENS reverse resolution domain of an address. For example:
$ ethereal ens domain get --address=0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69
mydomain.eth
domain set
ethereal ens domain set
sets the ENS reverse resolution domain of an address. For example:
$ ethereal ens domain set --address=0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69 --domain=mydomain.eth
expiry
etheral ens expiry
obtains the date at which a domain expires. For example:
$ ethereal ens expire --domain=mydomain.eth
info
ethereal ens info
obtains various information about a domain. For example:
$ ethereal ens info --domain=mydomain.eth
Registrant is mydomain.eth (0x388Ea662EF2c223eC0B047D41Bf3c0f362142ad5)
Registration expires at 2020-03-30 19:04:48 +0100 BST
Controller is mydomain.eth (0x388Ea662EF2c223eC0B047D41Bf3c0f362142ad5)
Resolver is 0x4C641FB9BAd9b60EF180c31F56051cE826d21A9A
Domain resolves to 0xe8E98228Ca36591952Efdf6F645C5B229E6Cf688
Address resolves to mydomain.eth
With the --verbose
flag this will provide more information about the domain. For example:
$ ethereal ens info --domain=mydomain.eth --verbose
Normalised domain is mydomain.eth
Top-level domain is eth
Domain level is 1
Name hash is 0xf6180603ce45d5470887aff0a135e31c00b5676ac13e1095d394b378df2fe532
Label is mydomain
Label hash is 0x53759ad0a707437a18aaaf314dda5a4f9bbd6dabd605c777ebaf354ac934f3c3
Domain registered on permanent registrar
Registrant is mydomain.eth (0x388Ea662EF2c223eC0B047D41Bf3c0f362142ad5)
Registration expires at 2020-03-30 19:04:48 +0100 BST
Controller is mydomain.eth (0x388Ea662EF2c223eC0B047D41Bf3c0f362142ad5)
Resolver is 0x4C641FB9BAd9b60EF180c31F56051cE826d21A9A
Domain resolves to 0xe8E98228Ca36591952Efdf6F645C5B229E6Cf688
Address resolves to mydomain.eth
migrate
ethereal ens migrate
migrates a domain from the temporary registrar to the permanent registrar. For example:
$ ethereal ens migrate --domain=mydomain.eth
pubkey get
ethereal ens pubkey get
gets the public key associated with an ENS domain. For example:
$ ethereal ens pubkey get --domain=mydomain.eth
(0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f,0x1f1e1d1c1b1a191817161514131211100f0e0d0b0c0a09080706050403020100)
pubkey set
ethereal ens pubkey set
sets the public key associated with an ENS domain. For example:
$ ethereal ens pubkey set --domain=mydomain.eth --key='(0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f,0x1f1e1d1c1b1a191817161514131211100f0e0d0b0c0a09080706050403020100)'
register
ethereal ens register
registers a new ENS domain. For example:
$ ethereal ens register --domain=mydomain.eth
Registration is a two-stage process. The first stage sends a transaction committing to claim the domain, and the second stage sends a transaction revealing the commitment and obtaining the domain. To avoid frontrunning there needs to be a delay between these two transactions of at least 10 minutes, and by default the command will send the first transaction, wait for the required time period, then send the second transaction.
--period
is the amount of time for which the registration will be rented; use ethereal ens rent
to find out how much it will cost to rent the domain.
release
ethereal ens release
releases a domain, returning the name to the available pool. If the domain is registered with the temporary registrary then any funds locked in the registration deed will be returned. For example:
$ ethereal ens release --domain=mydomain.eth
resolver clear
ethereal ens resolver clear
clears the resolver contract for the domain. For example:
$ ethereal ens resolver clear --domain=mydomain.eth
resolver get
ethereal ens resolver get
gets the address of the resolver contract for the domain. For example:
$ ethereal ens resolver get --domain=mydomain.eth
0x5FfC014343cd971B7eb70732021E26C35B744cc4
resolver set
ethereal ens resolver set
sets the resolver contract for the domain. If the standard public resolver (found at resolver.eth
) is required then just the domain is required to set it. For example:
$ ethereal ens resolver set --domain=mydomain.eth
If a non-standard resolver is required it can be supplied with the --resolver
argument. For example:
$ ethereal ens resolver set --domain=mydomain.eth --resolver=0x4d9b7D10e3a42E81659A90fDbaB51Bf19DD9bba7
subdomain create
ethereal ens subdomain create
creates a subdomain of an existing ENS domain. For example:
$ ethereal ens subdomain create --domain=mydomain.eth --subdomain=mysub
The subdomain will be owned by the domain owner.
text clear
ethereal ens text clear
clears the text for a given key for the domain. For example:
$ ethereal ens text clear --domain=mydomain.eth --key="My info"
text get
ethereal ens text get
gets the text for a given key for the domain. For example:
$ ethereal ens text get --domain=mydomain.eth --key="My info"
Information goes here
text set
ethereal ens text set
sets the text for a given key for the domain. For example:
$ ethereal ens text set --domain=mydomain.eth --key="My info" --text="Information goes here"
transfer
ethereal ens transfer
transfers registration of a name to another address. For example:
$ ethereal ens transfer --domain=mydomain.eth --newregistrant=0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF
ether
commands
Ether commands focus on information about and movement of Ether.
balance
ethereal ether balance
provides the Ether balance of an address. For example:
$ ethereal ether balance --address=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
5189.916425903288395771 Ether
If required the balance can be supplied in Wei with the --wei
option. For example:
$ ethereal ether balance --address=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf --wei
5189916425903288395771
sweep
ethereal ether sweep
sweeps all Ether from one address to another, leaving 0 behind. For example:
$ ethereal ether sweep --from=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf --to=0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF
transfer
ethereal ether transfer
transfers a set amount of Ether from one address to another. For example:
$ ethereal ether transfer --from=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf --to=0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF --amount="1.2 Ether"
gas
commands
price
ethereal gas price
calaculates a gas price from historical information that should allow a transaction to be included within a certain number of blocks. For example:
$ ethereal gas price
5.229829545 GWei
The value is the average of the values of the 9th decile of transactions in each block when each block's transactions are ordered by gas price. If the absolute lowest value is required instead the --lowest
argument can be used. The number of blocks over which to take the average can be supplied with the --blocks
argument.
By default this command does not consider gas used when calculating the price. Commonly the gas price for high gas transactions is higher due to them needing to be included in a block earlier to fit. The --gas
argument can supply an amount of gas, in which case the value returned will be the average of the gas price required to fit a transaction with the supplied gas in to the blocks.
hd
commands
keys
ethereal hd keys
shows the private key, public key and Ethereum address for a given hierarchical deterministic seed and path. For example:
$ ethereal hd keys --seed="yellow yellow yellow yellow yellow yellow yellow yellow yellow yellow yellow yellow" --path="m/44'/60'/0'/0/0"
Private key: 0x1b48e04041e23c72cacdaa9b0775d31515fc74d6a6d3c8804172f7e7d1248529
Public key: 0x04c4755e0a7a0f7082749bf46cdae4fcddb784e11428446a01478d656f588f94c17d02f3312b43364a0c480d628483c4fb4e3e9f687ac064717d90fdc42cfb6e0e
Ethereum address: 0xA27DF20E6579aC472481F0Ea918165d24bFb713b
network
commands
blocktime
ethereal network blocktime
calculates the average blocktime over a number of blocks. For example:
$ ethereal network blocktime --blocks=30
11.76s
Instead of using --blocks
it is possible to specify the time over which to calculate the blocktime. For example:
$ ethereal network blocktime --time=24h
11.52s
With the --verbose
flag this will provide more information about the start and end block for the calculation. For example:
$ ethereal network blocktime --time=2h --verbose
Block 7370164 mined at 2019-03-14 23:48:53 +0000 GMT
Block 7369614 mined at 2019-03-14 21:49:28 +0000 GMT
13.02s
gps
ethereal network gps
provides a gas-per-second metric for the Ethereum network over a number of blocks. For example:
$ ethereal network gps --blocks=20
339950
With the --verbose
flag this will provide more information about each block. For example:
$ ethereal network gps --blocks=5 --verbose
Block 7370156 used 7407093 gas in 2 seconds
Block 7370155 used 6831267 gas in 9 seconds
Block 7370154 used 7787059 gas in 2 seconds
Block 7370153 used 219751 gas in 4 seconds
Block 7370152 used 1113156 gas in 6 seconds
1015579
id
ethereal network id
provides the ID of the Ethereum network. For example:
$ ethereal network id
1
tps
ethereal network tps
provides a transactions-per-second metric for the Ethereum network over a number of blocks. For example:
$ ethereal network tps --blocks=20
4.72
With the --verbose
flag this will provide more information about each block. For example:
$ ethereal network tps --blocks=5 --verbose
Block 7373054 processed 143 transactions in 13 seconds
Block 7373053 processed 149 transactions in 36 seconds
Block 7373052 processed 172 transactions in 7 seconds
Block 7373051 processed 92 transactions in 6 seconds
Block 7373050 processed 50 transactions in 5 seconds
9.04
usage
ethereal network usage
provides a % usage metric for the Ethereum network over a number of blocks in terms of gas used/gas limit
. For example:
$ ethereal network usage --blocks=20
97.37%
With the --verbose
flag this will provide more information about each block. For example:
$ ethereal network usage --blocks=5 --verbose
Block 7495042 used 70.37% of gas limit (5629676/8000000)
Block 7495041 used 99.82% of gas limit (7985401/8000000)
Block 7495040 used 99.81% of gas limit (7992790/8007811)
Block 7495039 used 99.92% of gas limit (7993641/8000000)
Block 7495038 used 99.76% of gas limit (7980625/8000029)
93.94%
node
commands
Node commands focus on the state of the Ethereum nodes as specified in the connection.
sync
ethereal node sync
obtains the synchronisation state of the node as defined by the connection
option. For example:
$ ethereal node sync --connection=/home/ethereum/.ethereum/sepolia/geth.ipc
Node is at block 1157120, syncing to block 1165105
registry
commands
Ether commands focus on use of the ERC-1820 registry.
implementer get
ethereal registry implementer get
gets the contract that implements a specified interface for a specified address. For example:
$ ethereal registry implementer get --interface="ERC777Token" --address=0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF
0x3c24F71e826D3762f5145f6a27d41545A7dfc8cF
implementer set
ethereal registry implementer set
sets the contract that implements a specified interface for a specified address. For example:
$ ethereal registry implementer set --interface="ERC777TokensSender" --address=0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF --implementer=0x3c24F71e826D3762f5145f6a27d41545A7dfc8cF
implements
ethereal registry implements
checks if a contract implements a specified interface. For example:
$ ethereal registry implements --interface="ERC777TokensSender" --address=0x62284ed69b907af90ecba2feef0bf12a99563563
Yes
manager get
ethereal registry manager get
gets the manager for a specified address. For example:
$ ethereal registry manager get --address=0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF
0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69
Note that if there is no manager set for the address then this will return the provided address. For example:
$ ethereal registry manager get --address=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
manager set
ethereal registry manager set
sets the manager for a specified address. For example:
$ ethereal registry manager set --address=0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF --manager=0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69
signature
commands
Signature commands focus on generation and verification of signatures within Ethereum.
signature sign
ethereal signature sign
signs provided data. For example:
$ ethereal signature sign --data="false,2,0x5FfC014343cd971B7eb70732021E26C35B744cc4" --types="bool,uint256,address" --signer=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
08140077a94642919041503caf5cc1795b23ecf256578655de186858540a45ba44fddebfb97ba6f74d12611263a97174f5ac1ee9db30a79fe16c9a2346ef23b301
There are two types of information that can be signed: text and data. A text string is a simple value for data, for example:
$ ethereal signature sign --data="Hello, world" --signer=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
fdb006b0359c64152f36022662b3ecd2c315e88c937444f337dabf18208cc111063b100ada7dc86647a8337d50c819cac7e04f90f1b2ea509ccd3a0ae82e7de700
Data is a set of comma-separated values with types supplied in the --types
argument. In this situation the data is turned in to an ABI-encoded value; by default the data is encoded in full but can be encoded packed with the --packed
argument.
By default the data is hashed prior to being signed; this can be overridden by supplying the --nohash
argument. For example:
$ ethereal signature sign --data="Hello, world" --nohash --signer=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
16f7a3ddacbffa12a1c416c72b4d3aed54fe605490c48bbca1cdf6ff2b3c3b122102a40374587a963968fae5cf75dda47f97f8f2e5992144edd59b1e7827821500
After hashing but before being signed the data has the standard Ethereum header added to it. This is the data prepended with the standard Ethereum signing message of "\x19Ethereum Signed Message:\n" followed by the number of bytes in the data and finally the data itself, for example in the prior example this would be "\x19Ethereum Signed Message:\n12Hello, world".
signature signer
ethereal signature signer
obtains the address of the signer given a signature and the related data. For example:
$ ethereal signature signer --data="Hello, world" --nohash --signature=16f7a3ddacbffa12a1c416c72b4d3aed54fe605490c48bbca1cdf6ff2b3c3b122102a40374587a963968fae5cf75dda47f97f8f2e5992144edd59b1e7827821500
0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
The same rules apply to ethereal signature signer
as those in ethereal signature sign
above.
signature verify
ethereal signature verify
verifies the address of the signer given an address, signature and the related data. For example:
$ ethereal signature verify --data="false,2,0x5FfC014343cd971B7eb70732021E26C35B744cc4" --types="bool,uint256,address" --signature=08140077a94642919041503caf5cc1795b23ecf256578655de186858540a45ba44fddebfb97ba6f74d12611263a97174f5ac1ee9db30a79fe16c9a2346ef23b301 --signer=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf
The same rules apply to ethereal signature verify
as those in ethereal signature sign
above.
token
commands
Token commands focus on information and management of ERC-20 and ERC-777 tokens.
transaction
commands
Transaction commands focus on information and management of Ethereum transactions.
cancel
ethereal transaction cancel
cancels a pending transaction. For example:
$ ethereal transaction cancel --transaction="0x19f5c8369d49bf96e82941e938d3978f4ce9bf20e09598cf16e7c55018006f4e"
0x4dada7ddd3841d9e754fa1caa4232155d1a6d976fef610da5c3c0d00025bd0c1
Note that in reality Ethereum has no notion of cancelling transactions so instead the transaction is replaced with a new transaction that does nothing. For this command to succeed transaction's maximum base fee and priority fee must both be increased by 10% over that of the existing transaction; this will happen automatically.
info
ethereal transaction info
provides information about an Ethereum transaction. For example:
$ ethereal transaction info --transaction=0x581560df6b07612293996772a40966e8b85f70af2d53eee624513324fad8a99a
Type: Mined transaction
Result: Succeeded
Block: 7380609
From: 0x2B5634C42055806a59e9107ED44D43c426E58258
To: 0xf3db7560E820834658B590C96234c333Cd3D5E5e
Gas used: 37081
Gas price: 15.176 GWei
Value: 0
Data: transfer(0x7755B69903BcbCc419260dBb65772412E0C4ad2b,3903811515500000000000)
With the --verbose
flag this will provide more information about the transaction. For example:
$ ethereal transaction info --transaction=0x581560df6b07612293996772a40966e8b85f70af2d53eee624513324fad8a99a --verbose
Type: Mined transaction
Result: Succeeded
Block: 7380609
From: 0x2B5634C42055806a59e9107ED44D43c426E58258
To: 0xf3db7560E820834658B590C96234c333Cd3D5E5e
Nonce: 1382943
Gas limit: 76351
Gas used: 37081
Gas price: 15.176 GWei
Value: 0
Data: transfer(0x7755B69903BcbCc419260dBb65772412E0C4ad2b,3903811515500000000000)
Logs:
0:
From: 0xf3db7560E820834658B590C96234c333Cd3D5E5e
Event: Transfer(0x2B5634C42055806a59e9107ED44D43c426E58258,0x7755B69903BcbCc419260dBb65772412E0C4ad2b,3903811515500000000000)
send
ethereal transaction send
sends a transaction. For example:
$ ethereal transaction send --from=0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf --to=0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF --amount="1 Ether" --data=0x010203
up
ethereal transaction up
increases the gas price of an existing pending transaction. For example:
$ ethereal transaction up --transaction=0x581560df6b07612293996772a40966e8b85f70af2d53eee624513324fad8a99a
For this command to succeed transaction's maximum base fee and priority fee must both be increased by 10% over that of the existing transaction; this will happen automatically.
wait
ethereal transaction wait
waits for a pending transaction to be mined. For example:
$ ethereal transaction wait --transaction=0x581560df6b07612293996772a40966e8b85f70af2d53eee624513324fad8a99a
By default this waits forever; if a timeout is required it can be supplied with the --limit
argument.
version
ethereal version
provides the current version of Ethereal. For example:
$ ethereal version
2.0.889
Maintainers
Jim McDonald: @mcdee.
Contribute
Contributions welcome. Please check out the issues.
License
Apache-2.0 © 2017-2019 Weald Technology Trading Ltd