# CLI Command

This section details the present commands, command flags in the EVMBuilder Edge, and how they're used.

**JSON OUTPUT SUPPORT**

The `--json` flag is supported on some commands. This flag instructs the command to print the output in JSON format

#### Startup Commands <a href="#startup-commands" id="startup-commands"></a>

| **Command** | **Description**                                                                                                                                                 |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| server      | The default command that starts the blockchain client, by bootstrapping all modules together                                                                    |
| genesis     | Generates a *genesis.json* file, which is used to set a predefined chain state before starting the client. The structure of the genesis file is described below |

**server flags**

***seal***

SyntaxExample

`server [--seal SHOULD_SEAL]`

Sets the flag indicating that the client should seal blocks. Default: `true`.

***

***data-dir***

SyntaxExample

server \[--data-dir DATA\_DIRECTORY]

Used to specify the data directory used for storing EVMBuilder Edge client data. Default: `./test-chain`.

***

***jsonrpc***

SyntaxExample

server \[--jsonrpc JSONRPC\_ADDRESS]

Sets the address and port for the JSON-RPC service `address:port`. If only port is defined `:10001` it will bind to all interfaces `0.0.0.0:10001`. If omitted the service will bind to the default `address:port`. Default address: `0.0.0.0:8545`.

***

***grpc***

SyntaxExample

server \[--grpc-address GRPC\_ADDRESS]

Sets the address and port for the gRPC service `address:port`. Default address: `127.0.0.1:9632`.

***

***libp2p***

SyntaxExample

server \[--libp2p LIBP2P\_ADDRESS]

Sets the address and port for the libp2p service `address:port`. Default address: `127.0.0.1:1478`.

***

***prometheus***

SyntaxExample

server \[--prometheus PROMETHEUS\_ADDRESS]

Sets the address and port for the prometheus server `address:port`. If only port is defined `:5001` the service will bind to all interfaces `0.0.0.0:5001`. If omitted the service will not be started.

***

***block-gas-target***

SyntaxExample

server \[--block-gas-target BLOCK\_GAS\_TARGET]

Sets the target block gas limit for the chain. Default (not enforced): `0`.

A more detailed explanation on the block gas target can be found in the TxPool section.

***

***max-peers***

SyntaxExample

server \[--max-peers PEER\_COUNT]

Sets the client's maximum peer count. Default: `40`.

Peer limit should be specified either by using `max-peers` or `max-inbound/outbound-peers` flag.

***

***max-inbound-peers***

SyntaxExample

server \[--max-inbound-peers PEER\_COUNT]

Sets the client's maximum inbound peer count. If `max-peers` is set, max-inbound-peer limit is calculated using the following formulae.

`max-inbound-peer = InboundRatio * max-peers`, where `InboundRatio` is `0.8`.

***

***max-outbound-peers***

SyntaxExample

server \[--max-outbound-peers PEER\_COUNT]

Sets the client's maximum outbound peer count. If `max-peers` is set, max-outbound-peer count is calculated using the following formulae.

`max-outbound-peer = OutboundRatio * max-peers`, where `OutboundRatio` is `0.2`.

***

***log-level***

SyntaxExample

server \[--log-level LOG\_LEVEL]

Sets the log level for console output. Default: `INFO`.

***

***log-to***

SyntaxExample

server \[--log-to LOG\_FILE]

Defines log file name that will hold all log output from the server command. By default, all server logs will be outputted to console (stdout), but if the flag is set, there will be no output to the console when running server command.

***

***chain***

SyntaxExample

server \[--chain GENESIS\_FILE]

Specifies the genesis file used for starting the chain. Default: `./genesis.json`.

***

***join***

SyntaxExample

server \[--join JOIN\_ADDRESS]

Specifies the address of the peer that should be joined.

***

***nat***

SyntaxExample

server \[--nat NAT\_ADDRESS]

Sets the external IP address without the port, as it can be seen by peers.

***

***dns***

SyntaxExample

server \[--dns DNS\_ADDRESS]

Sets the host DNS address. This can be used to advertise an external DNS. Supports `dns`,`dns4`,`dns6`.

***

***price-limit***

SyntaxExample

server \[--price-limit PRICE\_LIMIT]

Sets minimum gas price limit to enforce for acceptance into the pool. Default: `1`.

***

***max-slots***

SyntaxExample

server \[--max-slots MAX\_SLOTS]

Sets maximum slots in the pool. Default: `4096`.

***

***config***

SyntaxExample

server \[--config CLI\_CONFIG\_PATH]

Specifies the path to the CLI config. Supports `.json`.

***

***secrets-config***

SyntaxSecond Tab

server \[--secrets-config SECRETS\_CONFIG]

Sets the path to the SecretsManager config file. Used for Hashicorp Vault, AWS SSM and GCP Secrets Manager. If omitted, the local FS secrets manager is used.

***

***dev***

SyntaxExample

server \[--dev DEV\_MODE]

Sets the client to dev mode. Default: `false`.

***

***dev-interval***

SyntaxExample

server \[--dev-interval DEV\_INTERVAL]

Sets the client's dev notification interval in seconds. Default: `0`.

***

***no-discover***

SyntaxExample

server \[--no-discover NO\_DISCOVER]

Prevents the client from discovering other peers. Default: `false`.

***

***restore***

SyntaxExample

server \[--restore RESTORE]

Restore blocks from the specified archive file

***

***block-time***

SyntaxExample

server \[--block-time BLOCK\_TIME]

Sets block production time in seconds. Default: `2`

***

***ibft-base-timeout***

SyntaxExample

server \[--ibft-base-timeout IBFT\_BASE\_TIMEOUT]

Sets the base value of timeout on IBFT consensus. IBFT consensus timeout is calculated by `BaseTimeout + 2^(round)`, or `BaseTimeout * 30` where round exceeds 8. It needs to be larger than block time and `BlockTime * 5` is set if it's not specified.

***

***access-control-allow-origins***

SyntaxExample

server \[--access-control-allow-origins ACCESS\_CONTROL\_ALLOW\_ORIGINS]

Sets the authorized domains to be able to share responses from JSON-RPC requests. Add multiple flags `--access-control-allow-origins "https://example1.com" --access-control-allow-origins "https://example2.com"` to authorize multiple domains. If omitted Access-Control-Allow-Origins header will be set to `*` and all domains will be authorized.

***

**genesis flags**

***dir***

SyntaxExample

genesis \[--dir DIRECTORY]

Sets the directory for the EVMBuilder Edge genesis data. Default: `./genesis.json`.

***

***name***

SyntaxExample

genesis \[--name NAME]

Sets the name for the chain. Default: `polyton-edge`.

***

***pos***

SyntaxExample

genesis \[--pos IS\_POS]

Sets the flag indicating that the client should use Proof of Stake IBFT. Defaults to Proof of Authority if flag is not provided or `false`.

***

***epoch-size***

SyntaxExample

genesis \[--epoch-size EPOCH\_SIZE]

Sets the epoch size for the chain. Default `100000`.

***

***premine***

SyntaxExample

genesis \[--premine ADDRESS:VALUE]

Sets the premined accounts and balances in the format `address:amount`. The amount can be in either decimal or hex. Default premined balance: `0x3635C9ADC5DEA00000`.

***

***chainid***

SyntaxExample

genesis \[--chain-id CHAIN\_ID]

Sets the ID of the chain. Default: `100`.

***

***ibft-validators-prefix-path***

SyntaxExample

genesis \[--ibft-validators-prefix-path IBFT\_VALIDATORS\_PREFIX\_PATH]

Prefix path for validator folder directory. Needs to be present if the flag `ibft-validator` is omitted.

***

***ibft-validator***

SyntaxExample

genesis \[--ibft-validator IBFT\_VALIDATOR\_LIST]

Sets passed in addresses as IBFT validators. Needs to be present if the flag `ibft-validators-prefix-path` is omitted.

***

***block-gas-limit***

SyntaxExample

genesis \[--block-gas-limit BLOCK\_GAS\_LIMIT]

Refers to the maximum amount of gas used by all operations in a block. Default: `5242880`.

***

***consensus***

SyntaxExample

genesis \[--consensus CONSENSUS\_PROTOCOL]

Sets consensus protocol. Default: `pow`.

***

***bootnode***

SyntaxExample

genesis \[--bootnode BOOTNODE\_URL]

Multiaddr URL for p2p discovery bootstrap. This flag can be used multiple times. Instead of an IP address, the DNS address of the bootnode can be provided.

***

***max-validator-count***

SyntaxExample

genesis \[--max-validator-count MAX\_VALIDATOR\_COUNT]

The maximum number of stakers able to join the validator set in a PoS consensus. This number cannot exceed the value of MAX\_SAFE\_INTEGER (2^53 - 2).

***

***min-validator-count***

SyntaxExample

genesis \[--min-validator-count MIN\_VALIDATOR\_COUNT]

The minimum number of stakers needed to join the validator set in a PoS consensus. This number cannot exceed the value of max-validator-count. Defaults to 1.

***

#### Operator Commands <a href="#operator-commands" id="operator-commands"></a>

**Peer Commands**

| **Command**  | **Description**                                                                     |
| ------------ | ----------------------------------------------------------------------------------- |
| peers add    | Adds a new peer using their libp2p address                                          |
| peers list   | Lists all the peers the client is connected to through libp2p                       |
| peers status | Returns the status of a specific peer from the peers list, using the libp2p address |

**peers add flags**

***addr***

SyntaxExample

peers add --addr PEER\_ADDRESS

Peer's libp2p address in the multiaddr format.

***

***grpc-address***

SyntaxExample

peers add \[--grpc-address GRPC\_ADDRESS]

Address of the gRPC API. Default: `127.0.0.1:9632`.

**peers list flags**

***grpc-address***

SyntaxExample

peers list \[--grpc-address GRPC\_ADDRESS]

Address of the gRPC API. Default: `127.0.0.1:9632`.

**peers status flags**

***peer-id***

SyntaxExample

peers status --peer-id PEER\_ID

Libp2p node ID of a specific peer within p2p network.

***

***grpc-address***

SyntaxExample

peers status \[--grpc-address GRPC\_ADDRESS]

Address of the gRPC API. Default: `127.0.0.1:9632`.

**IBFT Commands**

| **Command**     | **Description**                                                                                       |
| --------------- | ----------------------------------------------------------------------------------------------------- |
| ibft snapshot   | Returns the IBFT snapshot                                                                             |
| ibft candidates | Queries the current set of proposed candidates, as well as candidates that have not been included yet |
| ibft propose    | Proposes a new candidate to be added/removed from the validator set                                   |
| ibft status     | Returns the overall status of the IBFT client                                                         |
| ibft switch     | Add fork configurations into genesis.json file to switch IBFT type                                    |

**ibft snapshot flags**

***number***

SyntaxExample

ibft snapshot \[--number BLOCK\_NUMBER]

The block height (number) for the snapshot.

***

***grpc-address***

SyntaxExample

ibft snapshot \[--grpc-address GRPC\_ADDRESS]

Address of the gRPC API. Default: `127.0.0.1:9632`.

**ibft candidates flags**

***grpc-address***

SyntaxExample

ibft candidates \[--grpc-address GRPC\_ADDRESS]

Address of the gRPC API. Default: `127.0.0.1:9632`.

**ibft propose flags**

***vote***

SyntaxExample

ibft propose --vote VOTE

Proposes a change to the validator set. Possible values: `[auth, drop]`.

***

***addr***

SyntaxExample

ibft propose --addr ETH\_ADDRESS

Address of the account to be voted for.

***

***grpc-address***

SyntaxExample

peers add \[--grpc-address GRPC\_ADDRESS]

Address of the gRPC API. Default: `127.0.0.1:9632`.

**ibft status flags**

***grpc-address***

SyntaxExample

peers list \[--grpc-address GRPC\_ADDRESS]

Address of the gRPC API. Default: `127.0.0.1:9632`.

**ibft switch flags**

***chain***

SyntaxExample

ibft switch \[--chain GENESIS\_FILE]

Specifies the genesis file to update. Default: `test`.

***

***type***

SyntaxExample

ibft switch \[--type TYPE]

Specifies the IBFT type to switch. Possible values: `[PoS]`.

***

***deployment***

SyntaxExample

ibft switch \[--deployment DEPLOYMENT]

Specifies the height of contract deployment. Only available with PoS.

***

***from***

SyntaxExample

ibft switch \[--from FROM]

***

***max-validator-count***

SyntaxExample

ibft switch \[--max-validator-count MAX\_VALIDATOR\_COUNT]

The maximum number of stakers able to join the validator set in a PoS consensus. This number cannot exceed the value of MAX\_SAFE\_INTEGER (2^53 - 2).

***

***min-validator-count***

SyntaxExample

ibft switch \[--min-validator-count MIN\_VALIDATOR\_COUNT]

The minimum number of stakers needed to join the validator set in a PoS consensus. This number cannot exceed the value of max-validator-count. Defaults to 1.

Specifies the beginning height of the fork.

**Transaction Pool Commands**

| **Command**      | **Description**                                |
| ---------------- | ---------------------------------------------- |
| txpool status    | Returns the number of transactions in the pool |
| txpool subscribe | Subscribes for events in the transaction pool  |

**txpool status flags**

***grpc-address***

SyntaxExample

txpool status \[--grpc-address GRPC\_ADDRESS]

Address of the gRPC API. Default: `127.0.0.1:9632`.

**txpool subscribe flags**

***grpc-address***

SyntaxExample

txpool subscribe \[--grpc-address GRPC\_ADDRESS]

Address of the gRPC API. Default: `127.0.0.1:9632`.

***

***promoted***

SyntaxExample

txpool subscribe \[--promoted LISTEN\_PROMOTED]

Subscribes for promoted tx events in the TxPool.

***

***dropped***

SyntaxExample

txpool subscribe \[--dropped LISTEN\_DROPPED]

Subscribes for dropped tx events in the TxPool.

***

***demoted***

SyntaxExample

txpool subscribe \[--demoted LISTEN\_DEMOTED]

Subscribes for demoted tx events in the TxPool.

***

***added***

SyntaxExample

txpool subscribe \[--added LISTEN\_ADDED]

Subscribes for added tx events to the TxPool.

***

***enqueued***

SyntaxExample

txpool subscribe \[--enqueued LISTEN\_ENQUEUED]

Subscribes for enqueued tx events in the account queues.

***

**Blockchain commands**

| **Command** | **Description**                                                                   |
| ----------- | --------------------------------------------------------------------------------- |
| status      | Returns the status of the client. The detailed response can be found below        |
| monitor     | Subscribes to a blockchain event stream. The detailed response can be found below |
| version     | Returns the current version of the client                                         |

**status flags**

***grpc-address***

SyntaxExample

status \[--grpc-address GRPC\_ADDRESS]

Address of the gRPC API. Default: `127.0.0.1:9632`.

**monitor flags**

***grpc-address***

SyntaxExample

monitor \[--grpc-address GRPC\_ADDRESS]

Address of the gRPC API. Default: `127.0.0.1:9632`.

***

#### Secrets Commands <a href="#secrets-commands" id="secrets-commands"></a>

| **Command**      | **Description**                                                                           |
| ---------------- | ----------------------------------------------------------------------------------------- |
| secrets init     | Initializes the private keys to the corresponding secrets manager                         |
| secrets generate | Generates a secrets manager configuration file which can be parsed by the EVMBuilder Edge |

**secrets init flags**

***config***

SyntaxExample

secrets init \[--config SECRETS\_CONFIG]

Sets the path to the SecretsManager config file. Used for Hashicorp Vault. If omitted, the local FS secrets manager is used.

***

***data-dir***

SyntaxExample

secrets init \[--data-dir DATA\_DIRECTORY]

Sets the directory for the EVMBuilder Edge data if the local FS is used.

**secrets generate flags**

***dir***

SyntaxExample

secrets generate \[--dir DATA\_DIRECTORY]

Sets the directory for the secrets manager configuration file Default: `./secretsManagerConfig.json`

***

***type***

SyntaxExample

secrets generate \[--type TYPE]

Specifies the type of the secrets manager \[`hashicorp-vault`]. Default: `hashicorp-vault`

***

***token***

SyntaxExample

secrets generate \[--token TOKEN]

Specifies the access token for the service

***

***server-url***

SyntaxExample

secrets generate \[--server-url SERVER\_URL]

Specifies the server URL for the service

***

***name***

SyntaxExample

secrets generate \[--name NODE\_NAME]

Specifies the name of the node for on-service record keeping. Default: `z-edge-node`

***

***namespace***

SyntaxExample

secrets generate \[--namespace NAMESPACE]

Specifies the namespace used for the Hashicorp Vault secrets manager. Default: `admin`

***

#### Responses <a href="#responses" id="responses"></a>

**Status Response**

The response object is defined using Protocol Buffers.

minimal/proto/system.proto

Copy

```
message ServerStatus {
    int64 network = 1;

    string genesis = 2;

    Block current = 3;

    string p2pAddr = 4;

    message Block {
        int64 number = 1;
        string hash = 2;
    }
}
```

**Monitor Response**

minimal/proto/system.proto

Copy

```
message BlockchainEvent {
    // The "repeated" keyword indicates an array
    repeated Header added = 1;
    repeated Header removed = 2;

    message Header {
        int64 number = 1;
        string hash = 2;
    }
}
```

#### Utilities <a href="#utilities" id="utilities"></a>

**loadbot flags**

***tps***

SyntaxExample

loadbot \[--tps NUMBER\_OF\_TXNS\_PER\_SECOND]

The number of transactions per second to send. Default: `100`.

***

***mode***

SyntaxExample

loadbot \[--mode MODE]

Sets the loadbot run mode \[`transfer`, `deploy`]. Default: `transfer`.

***

***chain-id***

SyntaxExample

loadbot \[--chain-id CHAIN\_ID]

Sets the network chain ID for transactions. Default: `100`.

***

***gas-price***

SyntaxExample

loadbot \[--gas-price GAS\_PRICE]

The gas price that should be used for the transactions. If omitted, the average gas price is fetched from the network.

***

***gas-limit***

SyntaxExample

loadbot \[--gas-limit GAS\_LIMIT]

The gas limit that should be used for the transactions. If omitted, the gas limit is estimated before starting the loadbot.

***

***grpc-address***

SyntaxExample

loadbot --grpc-address GRPC\_ADDRESS

The GRPC endpoint used to send transactions

***

***detailed***

SyntaxExample

loadbot \[--detailed DETAILED]

Flag indicating if the error logs should be shown. Default: `false`.

***

***contract***

SyntaxExample

loadbot \[--contract CONTRACT\_PATH]

The path to the contract JSON artifact containing the bytecode. If omitted, a default contract is used.

***

***sender***

SyntaxExample

loadbot \[--sender ADDRESS]

Address of the sender account.

***

***receiver***

SyntaxExample

loadbot \[--receiver ADDRESS]

Address of the receiver account.

***

***jsonrpc***

SyntaxExample

loadbot \[--jsonrpc ENDPOINT]

A JSON RPC endpoint used to send transactions.

***

***count***

SyntaxExample

loadbot \[--count COUNT]

The total number of transactions to send. Default: `1000`.

***

***value***

SyntaxExample

loadbot \[--value VALUE]

The value to send in each transaction.

***

***max-conns***

SyntaxExample

loadbot \[--max-conns MAX\_CONNECTIONS\_COUNT]

Sets the maximum no.of connections allowed per host. Default: `2*tps`.

***

**backup flags**

***grpc-address***

SyntaxExample

backup \[--grpc-address GRPC\_ADDRESS]

Address of the gRPC API. Default: `127.0.0.1:9632`.

***

***out***

SyntaxExample

backup \[--out OUT]

Path of archive file to save.

***

***from***

SyntaxExample

from \[--from FROM]

The beginning height of blocks in archive. Default: 0.

***

***to***

SyntaxExample

to \[--to TO]

The end height of blocks in archive.

***

#### Genesis Template <a href="#genesis-template" id="genesis-template"></a>

The genesis file should be used to set the initial state of the blockchain (ex. if some accounts should have a starting balance).

The following *./genesis.json* file is generated:

Copy

```
{
    "name": "example",
    "genesis": {
        "nonce": "0x0000000000000000",
        "gasLimit": "0x0000000000001388",
        "difficulty": "0x0000000000000001",
        "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "coinbase": "0x0000000000000000000000000000000000000000",
        "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
    },
    "params": {
        "forks": {},
        "chainID": 100,
        "engine": {
            "pow": {}
        }
    },
    "bootnodes": []
}
```

**Data Directory**

When executing the *data-dir* flag, a **test-chain** folder is generated. The folder structure consists of the following sub-folders:

* **blockchain** - Stores the LevelDB for blockchain objects
* **trie** - Stores the LevelDB for the Merkle tries
* **keystore** - Stores private keys for the client. This includes the libp2p private key and the sealing/validator private key
* **consensus** - Stores any consensus information that the client might need while working

#### Resources <a href="#resources" id="resources"></a>

* [**Protocol Buffers**](https://developers.google.com/protocol-buffers)
