diff --git a/DCO.md b/DCO.md index 53600ccc..b6463584 100644 --- a/DCO.md +++ b/DCO.md @@ -2,7 +2,7 @@ Developer Certificate of Origin =============================== Per section 13.a of the -[Hyperledger Charter](https://www.hyperledger.org/about/charter), all code +[Hyperledger Charter](https://www.hyperledger.org/about/charter-2), all code submitted to the Hyperledger Foundation needs to have a [Developer Certificate of Origin](http://developercertificate.org/) (DCO) sign-off. diff --git a/docs/Concepts/ArchitectureOverview.md b/docs/Concepts/ArchitectureOverview.md deleted file mode 100644 index d52388c8..00000000 --- a/docs/Concepts/ArchitectureOverview.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -description: Hyperledger Besu architecture ---- - -# Hyperledger Besu architecture - -The following diagram outlines the Hyperledger Besu high-level architecture. - -![Architecture](../images/Architecture.png) - -For more information about the Hyperledger Besu architecture, contact us on the -[Besu channel on Hyperledger Discord](https://discord.gg/hyperledger). diff --git a/docs/Concepts/Mining.md b/docs/Concepts/Mining.md deleted file mode 100644 index 40aaf7fa..00000000 --- a/docs/Concepts/Mining.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: Mining overview ---- - -# Mining - -Hyperledger Besu supports CPU and GPU mining, which are -[configured using command line options](../HowTo/Configure/Configure-Mining.md). - -GPU mining support testing used [Ethminer](https://github.com/ethereum-mining/ethminer) with the -`stratum+tcp` and `getwork` schemes. - -Ethminer has been used with Hyperledger Besu to mine blocks on the [Ropsten testnet](https://ropsten.etherscan.io/address/0x2f14582947E292a2eCd20C430B46f2d27CFE213c#mine), -[ETC Mainnet (uncle block only)](https://etc.tokenview.com/en/uncleblock/10555173) and Mordor ETC testnet. - -!!! note - Some mining software supports the `getwork` scheme as the `http` scheme. diff --git a/docs/Concepts/Network-vs-Node.md b/docs/Concepts/Network-vs-Node.md deleted file mode 100644 index 5f0d75b7..00000000 --- a/docs/Concepts/Network-vs-Node.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -description: Configuring Besu at the network level compared to the node level ---- - -# Network vs node configuration - -You can configure Besu at the network level and the node level. - -Specify network-wide settings in the [genesis file](../Reference/Config-Items.md). For example, -include `evmStackSize` or specify the -[consensus mechanism](Consensus-Protocols/Overview-Consensus.md). - -Specify node settings on the command line or in the -[node configuration file](../HowTo/Configure/Using-Configuration-File.md). For example, enable -[JSON-RPC API methods](../Reference/API-Methods.md) or specify the -[data directory](../Reference/CLI/CLI-Syntax.md#data-path) for the node. diff --git a/docs/Concepts/Protocol-Upgrades.md b/docs/Concepts/Protocol-Upgrades.md deleted file mode 100644 index 2c0fa731..00000000 --- a/docs/Concepts/Protocol-Upgrades.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -description: Protocol upgrades ---- - -# Network upgrades in private networks - -Network upgrades are the mechanism for upgrading the Ethereum protocol. The time when the protocol -upgrade occurs is the network upgrade. - -For the Ethereum Mainnet and public testnets (for example, Rinkeby), the milestone block -definitions are in Hyperledger Besu. Upgrading your Besu client applies the network upgrade. - -For private networks, all network participants must agree on the protocol upgrades and then -coordinate the network upgrades. The genesis file specifies the -[milestone block](../Reference/Config-Items.md#milestone-blocks) at which to apply the -[protocol upgrade](../HowTo/Upgrade/Upgrade-Protocol.md). - -## Backward compatibility - -Some protocol upgrades include changes that might break existing contracts (for example, gas cost -changes). Before upgrading your protocol, review included EIPs for possible impact. A -[meta EIP](https://eips.ethereum.org/meta) for each protocol upgrade lists included EIPs. For -example, [Istanbul](https://eips.ethereum.org/EIPS/eip-1679). - -!!! tip - - For compatibility with future protocol upgrades, do not hardcode any gas price assumptions. - - Implementing upgradeable contracts enables contracts to be upgraded if a protocol upgrade does - include breaking changes. diff --git a/docs/Concepts/Pruning.md b/docs/Concepts/Pruning.md deleted file mode 100644 index 172e6835..00000000 --- a/docs/Concepts/Pruning.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -description: Pruning concept information. ---- - -# Pruning - -In Besu, pruning reduces the storage required by removing state trie nodes that are unreachable -from [recent blocks](../Reference/CLI/CLI-Syntax.md#pruning-blocks-retained). - -Pruning is disabled by default, and can be enabled with the -[`--pruning-enabled`](../Reference/CLI/CLI-Syntax.md#pruning-enabled) command line option. - -!!! Important - - Using pruning with [private transactions](Privacy/Privacy-Overview.md) is not supported. - -Pruning might increase block import times, but it does not affect the ability of nodes to stay in -sync. - -!!! Important - - Pruning is being deprecated for [Bonsai Tries](Data-Storage-Formats.md#bonsai-tries) and is currently not being updated. diff --git a/docs/Concepts/TLS.md b/docs/Concepts/TLS.md deleted file mode 100644 index 7432a41b..00000000 --- a/docs/Concepts/TLS.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -description: TLS overview ---- - -# TLS communication - -Hyperledger Besu supports TLS to secure client and server communication, or [secure P2P communication] between nodes. - -!!! important - - To secure client and server communication, you also need to configure the client ([EthSigner](https://docs.ethsigner.consensys.net/en/latest/Concepts/TLS/)) - or server ([Tessera](https://docs.tessera.consensys.net/HowTo/Configure/TLS/)) for TLS. - -The following diagram displays an example client and server TLS configuration. - -![Besu client and server TLS](../images/Besu_TLS.png) - -You must store private keys and certificates in password-protected PKCS12 keystore files. - -Use the command line options to [enable and configure](../HowTo/Configure/TLS/Configure-TLS.md) TLS. - -[secure P2P communication]: ../HowTo/Configure/TLS/P2P-TLS.md diff --git a/docs/HowTo/Deploy/Bootnodes.md b/docs/HowTo/Deploy/Bootnodes.md deleted file mode 100644 index 3635091b..00000000 --- a/docs/HowTo/Deploy/Bootnodes.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -description: Configuring bootnodes in production networks ---- - -# Configuring bootnodes in a production network - -A network must have at least one operating bootnode. To allow for continuity in the event of -failure, configure two or more bootnodes. - -We do not recommend putting bootnodes behind a load balancer because the -[enode](../../Concepts/Node-Keys.md#enode-url) relates to the node public key, IP address, and -discovery ports. Any changes to a bootnode enode prevents other nodes from being able to establish -a connection with the bootnode. This is why we recommend putting more bootnodes on the network -itself. - -To ensure that a bootnode enode does not change when recovering from a complete bootnode failure: - -1. Create the [node key pair](../../Concepts/Node-Keys.md) (that is, the private and public key) - before starting the bootnode. -1. When creating bootnodes in the cloud (for example, AWS and Azure), attempt to assign a static IP - address to them. If your network is: - - * Publicly accessible, assign an elastic IP. - * Internal only, specify a private IP address when you create the instance and record this IP - address. - -We recommend that you store the bootnode configuration under source control. - -## Specifying bootnodes - -To allow for failure, specify all bootnodes on the command line (even to the bootnodes themselves). - -!!! example - - If your network has two bootnodes, pass the following parameter to all nodes, including the - bootnodes. - - ```bash - --bootnodes=enode://@:30303,@:30303 - ``` - -!!! tip - - Having each bootnode list the other bootnodes increases the speed of discovery. Nodes ignore - their own enode in the bootnodes list so it is not required to specify different bootnode lists - to the bootnodes themselves. - -## Adding and removing bootnodes - -Adding new bootnodes is a similar process to creating bootnodes. After creating the bootnodes and -adding them to the network,update the [`--bootnodes`](../../Reference/CLI/CLI-Syntax.md#bootnodes) -command line option for each node to include the new bootnodes. - -When adding bootnodes, you do not need to restart running nodes. By updating the -[`--bootnodes`](../../Reference/CLI/CLI-Syntax.md#bootnodes) option, the next time you restart the -nodes (for example, when [upgrading](../Upgrade/Upgrade-Node.md)), the nodes connect to the new -bootnodes. diff --git a/docs/HowTo/Deploy/Production.md b/docs/HowTo/Deploy/Production.md deleted file mode 100644 index e95291c7..00000000 --- a/docs/HowTo/Deploy/Production.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -description: Deploying Hyperledger Besu permissioning management dapp for production ---- - -# Deploying the Hyperledger Besu permissioning management dapp for production - -To deploy the permissioning management dapp for production: - -1. Retrieve the most recent release (tarball or zip) from the [projects release page]. - -1. Unpack the distribution into a directory available to your Web server. - -1. In the root of the unpack directory, add a file called `config.json` replacing the placeholders - shown below. - - !!!example "`config.json`" - - ```json - - { - "accountIngressAddress": "
", - "nodeIngressAddress": "
", - "networkId": "" - } - ``` - -1. On your Web server, host the contents of the directory as static files and direct root requests - to `index.html`. - -## Starting a production permissioned network - -Follow the procedure as for [Getting started with onchain permissioning], but do not perform the -steps using `yarn` to install, build, and start the development server. Instead, follow the -procedure above to deploy the permissioning management dapp to your Web server. - - -[projects release page]: https://github.com/ConsenSys/permissioning-smart-contracts/releases/latest -[Getting started with onchain permissioning]: ../../Tutorials/Permissioning/Getting-Started-Onchain-Permissioning.md diff --git a/docs/HowTo/Find-and-Connect/Bootnodes.md b/docs/HowTo/Find-and-Connect/Bootnodes.md deleted file mode 100644 index 96e35238..00000000 --- a/docs/HowTo/Find-and-Connect/Bootnodes.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -description: Configuring bootnodoes ---- - -# Bootnodes - -You can use bootnodes to initially discover peers. -Bootnodes are regular nodes used to discover other nodes. - -!!! tip - - Bootnodes and static nodes are parallel methods for finding peers. Depending on your use case, - you can use only bootnodes, only static nodes, or both bootnodes and statics nodes. For - example, you run multiple nodes on Mainnet (discovery using bootnodes), but want to ensure your - nodes are always connected (using static nodes). - - To find peers, configure one or more bootnodes as described below. To configure a specific set - of peer connections, use [static nodes](Static-Nodes.md). - -## Mainnet and public testnets - -For Mainnet and the Rinkeby, Ropsten, Sepolia, and Goerli testnets, Hyperledger Besu has an internal list of -enode URLs and uses this list automatically when you specify the -[`--network`](../../Reference/CLI/CLI-Syntax.md#network) option. - -## Private networks - -In private networks for development or testing purposes, specify at least one bootnode. - -In production networks, [configure two or more nodes as bootnodes](../Deploy/Bootnodes.md). - -### Specify a bootnode - -To start a node, specifying a bootnode [enode](../../Concepts/Node-Keys.md) for P2P discovery, -using the [`--bootnodes`](../../Reference/CLI/CLI-Syntax.md#bootnodes) option. - -!!! example - - ```bash - besu --genesis-file=privateNetworkGenesis.json --data-path=nodeDataPath --bootnodes=enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb99bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@127.0.0.1:30303 - ``` - -The default host and port advertised to other peers for P2P discovery is `127.0.0.1:30303`. To -specify a different host or port, use the -[`--p2p-host`](../../Reference/CLI/CLI-Syntax.md#p2p-host) and -[`--p2p-port`](../../Reference/CLI/CLI-Syntax.md#p2p-port) options. - -By default, peer discovery listens on all available network interfaces. If the device Besu is -running on must bind to a specific network interface, specify the interface using the -[`--p2p-interface`](../../Reference/CLI/CLI-Syntax.md#p2p-interface) option. diff --git a/docs/HowTo/Find-and-Connect/Configuring-Ports.md b/docs/HowTo/Find-and-Connect/Configuring-Ports.md deleted file mode 100644 index 7c45fe83..00000000 --- a/docs/HowTo/Find-and-Connect/Configuring-Ports.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -description: To enable communication you must expose Hyperledger Besu ports appropriately ---- - -# Configuring ports - -To enable communication you must expose Hyperledger Besu ports appropriately. The following shows -an example port configuration for a Besu node on AWS. - -![Port Configuration](../../images/PortConfiguration.png) - -When running Besu from the [Docker image](../Get-Started/Installation-Options/Run-Docker-Image.md), -[expose ports](../Get-Started/Installation-Options/Run-Docker-Image.md#exposing-ports). - -!!! tip - - Besu supports [UPnP](Specifying-NAT.md) for home or small office environments where a wireless - router or modem provides NAT isolation. - -## P2P networking - -To enable peer discovery, the P2P UDP port must be open for inbound connections. Specify the P2P -port using the [`--p2p-port`](../../Reference/CLI/CLI-Syntax.md#p2p-port) option. The default is -`30303`. - -We also recommend opening the P2P TCP port for inbound connections. This is not strictly required -because Besu attempts to open outbound TCP connections. But if no nodes on the network are -accepting inbound TCP connections, nodes cannot communicate. - -Combine the P2P port with the values for the -[`--p2p-host`](../../Reference/CLI/CLI-Syntax.md#p2p-host) and -[`--p2p-interface`](../../Reference/CLI/CLI-Syntax.md#p2p-interface) options when specifying the -[P2P host](../../Reference/CLI/CLI-Syntax.md#p2p-host) and -[P2P network interface](../../Reference/CLI/CLI-Syntax.md#p2p-interface). - -!!! info - - By default, peer discovery listens on `0.0.0.0:30303` (all interfaces). If the device Besu is - running on must bind to a specific network interface, specify the interface using the - [`--p2p-interface`](../../Reference/CLI/CLI-Syntax.md#p2p-interface) option. - -## JSON-RPC API - -To enable access to the [JSON-RPC API](../Interact/APIs/Using-JSON-RPC-API.md), open the HTTP -JSON-RPC and WebSockets JSON-RPC ports to the intended users of the JSON-RPC API on TCP. - -Specify the HTTP and WebSockets JSON-RPC ports using the -[`--rpc-http-port`](../../Reference/CLI/CLI-Syntax.md#rpc-http-port) and -[`--rpc-ws-port`](../../Reference/CLI/CLI-Syntax.md#rpc-ws-port) options. The defaults are `8545` -and `8546`. - -## Metrics - -To enable -[Prometheus to access Besu](../Monitor/Metrics.md#monitor-node-performance-using-prometheus), open -the metrics port or metrics push port to Prometheus or the Prometheus push gateway on TCP. - -Specify the ports for Prometheus and Prometheus push gateway using the -[`--metrics-port`](../../Reference/CLI/CLI-Syntax.md#metrics-port) and -[`--metrics-push-port`](../../Reference/CLI/CLI-Syntax.md#metrics-push-port) options. The defaults -are `9545` and `9001`. diff --git a/docs/HowTo/Get-Started/Installation-Options/Options.md b/docs/HowTo/Get-Started/Installation-Options/Options.md deleted file mode 100644 index c171e67b..00000000 --- a/docs/HowTo/Get-Started/Installation-Options/Options.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Installation options -description: Options for getting started with Hyperledger Besu ---- - -# Options for getting started - -## New to Hyperledger Besu? - -Get started with the [Developer Quickstart](../../../Tutorials/Developer-Quickstart.md). -Use the quickstart to rapidly generate local blockchain networks. - -## Installation options - -* [Docker image](Run-Docker-Image.md) -* [Binaries](Install-Binaries.md) -* [Build from source](Build-from-source.md) diff --git a/docs/HowTo/Get-Started/migrate-to-besu.md b/docs/HowTo/Get-Started/migrate-to-besu.md deleted file mode 100644 index ea8f6e4d..00000000 --- a/docs/HowTo/Get-Started/migrate-to-besu.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: Migrate to Besu guide ---- - -# Migrate to Besu - -Migrate from a different Ethereum [execution client](../../Concepts/Merge.md#execution-and-consensus-clients) -to Besu to contribute to [client diversity](https://clientdiversity.org/). - -When migrating from a different client, you are [configuring Besu as an execution client](../Upgrade/Prepare-for-The-Merge.md#configure-besu-as-an-execution-client) -and connecting your [consensus client](../../Concepts/Merge.md#consensus-clients) to Besu instead of your original execution client. - -To minimize downtime while [Besu syncs](../../Concepts/Node-Types.md) and avoid downtime penalties, -you can sync Besu with a new consensus layer instance. -Once Besu has fully synced you can connect it to your existing consensus client. - -Find guides to switch from specific clients on the [client diversity website](https://clientdiversity.org/#switch). diff --git a/docs/HowTo/Limit-Access/Specify-Perm-Version.md b/docs/HowTo/Limit-Access/Specify-Perm-Version.md deleted file mode 100644 index 49e79074..00000000 --- a/docs/HowTo/Limit-Access/Specify-Perm-Version.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -description: Specify the permissioning interface version ---- - -# Specify the permissioning contract interface version - -Use the [`--permissions-nodes-contract-version`](../../Reference/CLI/CLI-Syntax.md#permissions-nodes-contract-version) -command line option to specify the version of the [permissioning contract interface](../../Concepts/Permissioning/Onchain-Permissioning.md#permissioning-contracts). -The default is 1. - -Specify the contract interface version that maps to the version of the [Enterprise Ethereum Alliance Client Specification](https://entethalliance.org/technical-specifications/) -the contract interface implements. - -| | EEA Client Specification | Contract interface | -|:--------|:-------------------------|:-------------------| -| Version | 5 | 1 | -| Version | 6 | 2 | - -The permissioning contracts in the [`ConsenSys/permissioning-smart-contracts`](https://github.com/ConsenSys/permissioning-smart-contracts) -repository implement the version 2 contract interface. diff --git a/docs/HowTo/Limit-Access/Updating-Permission-Lists.md b/docs/HowTo/Limit-Access/Updating-Permission-Lists.md deleted file mode 100644 index cd88222a..00000000 --- a/docs/HowTo/Limit-Access/Updating-Permission-Lists.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -description: Updating Hyperledger Besu onchain allowlists ---- - -# Updating nodes and accounts allowlists - -When using [onchain permissioning](../../Concepts/Permissioning/Onchain-Permissioning.md), you can update -[nodes](#update-nodes-allowlist) and [accounts](#update-accounts-allowlist) allowlists. - -## Update nodes allowlist - -To add a node to the Hyperledger Besu nodes allowlist: - -1. On the **Nodes** tab of the [permissioning management dapp](../../Tutorials/Permissioning/Getting-Started-Onchain-Permissioning.md), - select **Add Node**. - The **Add Node** window displays. -2. Enter the [enode URL](../../Concepts/Node-Keys.md#enode-url) of the node you are adding and select **Add Node**. - -!!! tip - - If your node has two different IP addresses for ingress and egress - (for example, if you use Kubernetes implementing a load balancer for ingress and a NAT gateway IP address for egress), - add both addresses to the allowlist, using the same public key for each IP address. This will allow the node to connect. - -!!! important - - Node allowlists [support domain names] in enode URLs as an experimental feature. Use the `--Xdns-enabled` option - to enable domain name support. - - If using Kubernetes, enable domain name support and use the `--Xdns-update-enabled` option to ensure that Besu can - connect to a container after being restarted, even if the IP address of the container changes. - -To remove a node from the nodes allowlist: - -1. On the **Nodes** tab of the permissioning management dapp, hover over the row of the - node you are removing. A trash can displays. -1. Select the trash can. - -!!! tip - - If you add a running node, the node does not attempt to reconnect to the bootnode and - synchronize until peer discovery restarts. To add an allowlisted node as a peer without waiting - for peer discovery to restart, use - [`admin_addPeer`](../../Reference/API-Methods.md#admin_addpeer). - - If you add the node to the allowlist before starting the node, using `admin_addPeer` is not - required because peer discovery is run on node startup. - -!!! tip - - If nodes are not connecting as expected, set the [log level to `TRACE`](../../Reference/CLI/CLI-Syntax.md#logging) - and search for messages containing `Node permissioning` to identify the issue. - - Ensure the [`--p2p-host`](../../Reference/CLI/CLI-Syntax.md#p2p-host) command line option has been - correctly configured for all nodes with the - externally accessible address. - - If you change your network configuration, you may need to update the node allowlist. - -## Update accounts allowlist - -To add an account to the accounts allowlist: - -1. On the **Accounts** tab of the [permissioning management dapp](../../Tutorials/Permissioning/Getting-Started-Onchain-Permissioning.md), - select **Add Account**. The **Add Account** window displays. -1. Enter the account address in the **Account Address** field and select **Add Account**. - -To remove an account from the accounts allowlist: - -1. On the **Accounts** tab of the permissioning management dapp, hover over the row of - the account you are removing. A trash can displays. -1. Select the trash can. - -## Update admins - -You can add or remove admins in the same way as [accounts](#update-accounts-allowlist), except on the **Admins** tab. - -[support domain names]: ../../Concepts/Node-Keys.md#domain-name-support diff --git a/docs/HowTo/Send-Transactions/Account-Management.md b/docs/HowTo/Send-Transactions/Account-Management.md deleted file mode 100644 index 7ef58459..00000000 --- a/docs/HowTo/Send-Transactions/Account-Management.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -description: Using third party wallets for account management with Hyperledger Besu ---- - -# Using wallets for key management - -Hyperledger Besu does not support key management inside the client. Use: - -* [EthSigner](http://docs.ethsigner.consensys.net/en/latest/) with Besu to provide access to your - key store and sign transactions. -* Third-party tools (for example, [MetaMask](https://metamask.io/) and [web3j](https://web3j.io/)) - for creating accounts. - -In Besu, you can use the JSON-RPC methods: - -* [`eth_getBalance`](../../Reference/API-Methods.md#eth_getbalance) to retrieve the account balance. -* [`eth_sendRawTransaction`](../../Reference/API-Methods.md#eth_sendrawtransaction) to transfer - ether or create and interact with contracts. For more information, see - [Transactions](Transactions.md#transactions)). -* [`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction) to send - [private transactions](Creating-Sending-Private-Transactions.md). - -!!! tip - - [EthSigner](http://docs.ethsigner.consensys.net/en/latest/) implements - [`eth_sendTransaction`](http://docs.ethsigner.consensys.net/en/latest/Using-EthSigner/Using-EthSigner/#eth_sendtransaction) - and [`eea_sendTransaction`](http://docs.ethsigner.consensys.net/en/latest/Using-EthSigner/Using-EthSigner/#eea_sendtransaction). diff --git a/docs/HowTo/Troubleshoot/Trace-Transactions.md b/docs/HowTo/Troubleshoot/Trace-Transactions.md deleted file mode 100644 index d295be71..00000000 --- a/docs/HowTo/Troubleshoot/Trace-Transactions.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -description: How to trace transactions ---- - -# Trace transactions - -To get detailed information about transaction processing, use the -[`TRACE` API](../../Reference/API-Methods.md#trace-methods). -Enable the `TRACE` API using the -[`--rpc-http-api`](../../Reference/CLI/CLI-Syntax.md#rpc-http-api) or -[`--rpc-ws-api`](../../Reference/CLI/CLI-Syntax.md#rpc-ws-api) command line options. - -The `TRACE` API has two sets of trace calls, [ad-hoc tracing APIs](#ad-hoc-tracing-apis) and -[transaction-trace filtering APIs](#transaction-trace-filtering-apis). - -## Ad-hoc tracing APIs - -These APIs allow different diagnostic options when tracing calls or transactions. -The options are [`trace`, `vmTrace`, or `stateDiff`](../../Reference/Trace-Types.md). - -To use the ad-hoc tracing APIs, the requested block or transaction must be within the -number of [blocks retained](../../Reference/CLI/CLI-Syntax.md#pruning-blocks-retained) with [pruning enabled](../../Reference/CLI/CLI-Syntax.md#pruning-enabled) -(by default, 1024). - -The ad-hoc tracing APIs are: - -* [trace_call](../../Reference/API-Methods.md#trace_call) -* [trace_callMany](../../Reference/API-Methods.md#trace_callmany) -* [trace_rawTransaction](../../Reference/API-Methods.md#trace_rawtransaction) -* [trace_replayBlockTransactions](../../Reference/API-Methods.md#trace_replayblocktransactions) - -## Transaction-trace filtering APIs - -These APIs allow you to filter and search by specific information such as the block, address, or transaction. -These APIs only use the [`trace` type](../../Reference/Trace-Types.md#trace). - -To use the transaction-trace filtering APIs, your node must be an archive node -(that is, synchronized without pruning or fast sync) or the -requested block or transaction must be within the -number of [blocks retained](../../Reference/CLI/CLI-Syntax.md#pruning-blocks-retained) with [pruning enabled](../../Reference/CLI/CLI-Syntax.md#pruning-enabled) -(by default, 1024). - -The transaction-trace filtering APIs are: - -* [trace_block](../../Reference/API-Methods.md#trace_block) -* [trace_filter](../../Reference/API-Methods.md#trace_filter) -* [trace_get](../../Reference/API-Methods.md#trace_get) -* [trace_transaction](../../Reference/API-Methods.md#trace_transaction) diff --git a/docs/HowTo/Upgrade/Upgrade-Protocol.md b/docs/HowTo/Upgrade/Upgrade-Protocol.md deleted file mode 100644 index cdb0ceaf..00000000 --- a/docs/HowTo/Upgrade/Upgrade-Protocol.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -description: Upgrading protocol versions ---- - -# Upgrading your protocol in a private network - -To [upgrade the protocol](../../Concepts/Protocol-Upgrades.md) (also known as a hard fork) in a -private network: - -1. Review included EIPs for breaking changes. A [meta EIP](https://eips.ethereum.org/meta) for each - protocol upgrade lists included EIPs. For example, - [Istanbul](https://eips.ethereum.org/EIPS/eip-1679). -1. Network participants agree on the block number at which to - [upgrade](../../Concepts/Protocol-Upgrades.md). -1. For each node in the network: - - a. Add the - [milestone block number](../../Reference/Config-Items.md#milestone-blocks) to the genesis - file. - b. Restart the node before reaching milestone block. - -!!! caution - - To avoid a forked network, all network participants must update their genesis file to include - the agreed on milestone block and restart their node before reaching the milestone block. diff --git a/docs/Reference/Resources.md b/docs/Reference/Resources.md deleted file mode 100644 index ea260d4c..00000000 --- a/docs/Reference/Resources.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -description: Hyperledger Besu resources including blog posts, webinars, and meetup recordings. ---- - -# Hyperledger Besu resources - -## Blog posts - -[ConsenSys Quorum Blog] - -[Understanding Proof of Authority via Clique and IBFT 2.0 Private Networks] - -[Security Challenges for Enterprise Blockchain Solutions] - -[Why We Rebuilt Ethereum from Scratch] - -[Why Java for Blockchain] - -[Case Study: How Poste Italiane brings value to loyalty with Hyperledger Besu] - -## Webinars - -[Besu Plugin API: Learn How to Leverage Plugin APIs on Hyperledger Besu] - -[Permissioning in Blockchain: A Technical Look at Benefits and Best Practices] - -[Privacy in Besu: How PegaSys Redefined Blockchain for Enterprises] - -[The Final Word: IBFT 2.0 and Enterprise Consensus] - -[De-Mystifying Besu: Understanding an Ethereum Codebase] - -[Getting Started with Besu] - - -[Consensys Quorum Blog]: https://consensys.net/quorum/blog/ -[Understanding Proof of Authority via Clique and IBFT 2.0 Private Networks]: https://consensys.net/blog/quorum/hyperledger-besu-understanding-proof-of-authority-via-clique-and-ibft-2-0-private-networks-part-1/ -[Security Challenges for Enterprise Blockchain Solutions]: https://consensys.net/blog/enterprise-blockchain/how-pegasys-orchestrate-solves-4-key-security-challenges-for-enterprise-blockchain-solutions/ -[Why We Rebuilt Ethereum from Scratch]: https://media.consensys.net/why-we-rebuilt-ethereum-from-scratch-9e38b6ebd4a2 -[Why Java for Blockchain]: https://media.consensys.net/why-java-for-blockchain-73f1b444c2d -[Besu Plugin API: Learn How to Leverage Plugin APIs on Hyperledger Besu]: https://youtu.be/78sa2WuA1rg -[Permissioning in Blockchain: A Technical Look at Benefits and Best Practices]: https://www.youtube.com/watch?v=CD0pHtNDqZs -[Privacy in Besu: How PegaSys Redefined Blockchain for Enterprises]: https://www.youtube.com/watch?v=8l7SSZLyFL8 -[The Final Word: IBFT 2.0 and Enterprise Consensus]: https://www.youtube.com/watch?v=YmTUP_dWfME -[De-Mystifying Besu: Understanding an Ethereum Codebase]: https://www.youtube.com/watch?v=OJfib9kTK7U&feature=youtu.be -[Getting Started with Besu]: https://www.youtube.com/watch?v=OKWBr94J9rY&t=1s -[Case Study: How Poste Italiane brings value to loyalty with Hyperledger Besu]: https://www.hyperledger.org/learn/publications/posteitaliane-case-study diff --git a/docs/global/concepts/Network-vs-Node.md b/docs/global/concepts/Network-vs-Node.md new file mode 100644 index 00000000..82d16099 --- /dev/null +++ b/docs/global/concepts/Network-vs-Node.md @@ -0,0 +1,16 @@ +--- +description: Configuring Besu at the network level compared to the node level +--- + +# Network vs node configuration + +You can configure Besu at the network level and the node level. + +Specify network-wide settings in the [genesis file](../../public-networks/reference/genesis-items.md). For example, +include `evmStackSize` or specify the +[consensus mechanism](../../private-networks/how-to/configure/consensus/index.md). + +Specify node settings on the command line or in the +[node configuration file](../../public-networks/how-to/configuration-file.md). For example, enable +[JSON-RPC API methods](../../public-networks/reference/api/index.md) or specify the +[data directory](../../public-networks/reference/cli/options.md#data-path) for the node. diff --git a/docs/global/concepts/Pruning.md b/docs/global/concepts/Pruning.md new file mode 100644 index 00000000..fa26c392 --- /dev/null +++ b/docs/global/concepts/Pruning.md @@ -0,0 +1,22 @@ +--- +description: Pruning concept information. +--- + +# Pruning + +In Besu, pruning reduces the storage required by removing state trie nodes that are unreachable +from [recent blocks](../../public-networks/reference/cli/options.md#pruning-blocks-retained). + +Pruning is disabled by default, and can be enabled with the +[`--pruning-enabled`](../../public-networks/reference/cli/options.md#pruning-enabled) command line option. + +!!! Important + +Using pruning with [private transactions] is not supported. + +Pruning might increase block import times, but it does not affect the ability of nodes to stay in +sync. + +!!! Important + +Pruning is being deprecated for [Bonsai Tries] and is currently not being updated. diff --git a/docs/HowTo/Troubleshoot/Troubleshooting.md b/docs/global/how-to/troubleshoot/Troubleshooting.md similarity index 73% rename from docs/HowTo/Troubleshoot/Troubleshooting.md rename to docs/global/how-to/troubleshoot/Troubleshooting.md index 8b602d21..a38d5d95 100644 --- a/docs/HowTo/Troubleshoot/Troubleshooting.md +++ b/docs/global/how-to/troubleshoot/Troubleshooting.md @@ -10,18 +10,18 @@ If Hyperledger Besu is not working as expected, here are some things to check or If a `Supplied genesis block does not match stored chain data` error occurs, use the genesis file matching the genesis block of the data directory, or use the -[`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path) option to specify a different data +[`--data-path`](../../../public-networks/reference/cli/options.md#data-path) option to specify a different data directory. ## Invalid block header -If a `TimeStampMoreRecentThanParent | Invalid block header` error occurs, the [genesis file](../Configure/Genesis-File.md) of the new node is specifying a higher -[`blockperiodseconds`](../Configure/Consensus-Protocols/IBFT.md#block-time) than the imported chain. +If a `TimeStampMoreRecentThanParent | Invalid block header` error occurs, the [genesis file](../../../public-networks/concepts/genesis-file.md) of the new node is specifying a higher +[`blockperiodseconds`](../../../private-networks/how-to/configure/consensus/ibft.md#block-time) than the imported chain. The imported chain makes new blocks faster than the genesis file allows and Besu rejects them with this error. This error most often occurs when importing chains from older versions of Besu. -To correct this error, decrease the `blockperiodseconds` in the new [IBFT 2.0 genesis file](../Configure/Consensus-Protocols/IBFT.md#genesis-file) -or [QFBT genesis file](../Configure/Consensus-Protocols/QBFT.md#genesis-file) to a lower value that satisfies the block header validation. +To correct this error, decrease the `blockperiodseconds` in the new [IBFT 2.0 genesis file](../../../private-networks/how-to/configure/consensus/ibft.md#genesis-file) +or [QFBT genesis file](../../../private-networks/how-to/configure/consensus/qbft.md#genesis-file) to a lower value that satisfies the block header validation. !!! example @@ -29,26 +29,26 @@ or [QFBT genesis file](../Configure/Consensus-Protocols/QBFT.md#genesis-file) to decrease the `blockperiodseconds` from 4 seconds to 3 seconds to match the imported chain. After you have updated the new genesis file, if the imported chain has a `blockperiodseconds` value set lower than you prefer, you can adjust it by configuring the block time on an -[existing IBFT 2.0](../Configure/Consensus-Protocols/IBFT.md#configure-block-time-on-an-existing-network-deployment) -or [existing QBFT](../Configure/Consensus-Protocols/QBFT.md#configure-block-time-on-an-existing-network) network. +[existing IBFT 2.0](../../../private-networks/how-to/configure/consensus/ibft.md#configure-block-time-on-an-existing-network-deployment) +or [existing QBFT](../../../private-networks/how-to/configure/consensus/qbft.md#configure-block-time-on-an-existing-network) network. ## Host not authorized If a `Host not authorized` error occurs when attempting to access the JSON-RPC API, ensure -[`--host-allowlist`](../../Reference/CLI/CLI-Syntax.md#host-allowlist) includes the host you are +[`--host-allowlist`](../../../public-networks/reference/cli/options.md#host-allowlist) includes the host you are sending the RPC from, or `*`. ## Peers fail to connect If nodes are not communicating, ensure the -[required ports are open](../../HowTo/Find-and-Connect/Configuring-Ports.md). +[required ports are open](../../../public-networks/how-to/connect/configure-ports.md). If your nodes are running in AWS, check you have appropriate `SecurityGroups` to allow access to the required ports. -Check that the [enode URLs](../../Concepts/Node-Keys.md#enode-url) specified for -[bootnodes](../Find-and-Connect/Bootnodes.md) or -[static nodes](../Find-and-Connect/Static-Nodes.md) match the enode URLs displayed when starting the +Check that the [enode URLs](../../../public-networks/concepts/node-keys.md#enode-url) specified for +[bootnodes](../../../private-networks/how-to/configure/bootnodes.md) or +[static nodes](../../../public-networks/how-to/connect/static-nodes.md) match the enode URLs displayed when starting the remote nodes. ## Mining @@ -68,23 +68,23 @@ On non-mining nodes, log messages indicate importing blocks. ``` To confirm the block number is increasing, use the -[`eth_blockNumber`](../../Reference/API-Methods.md#eth_blocknumber) JSON-RPC API method. +[`eth_blockNumber`](../../../public-networks/reference/api/index.md#eth_blocknumber) JSON-RPC API method. -If there is no block creating in [Clique](../Configure/Consensus-Protocols/Clique.md#extra-data) -or [IBFT 2.0](../Configure/Consensus-Protocols/IBFT.md#extra-data) networks, ensure the validator +If there is no block creating in [Clique](../../../private-networks/how-to/configure/consensus/clique.md#extra-data) +or [IBFT 2.0](../../../private-networks/how-to/configure/consensus/ibft.md#extra-data) networks, ensure the validator addresses in the genesis file match running nodes. ## Transactions are not mined If you add a transaction to the -[transaction pool](../../Concepts/Transactions/Transaction-Pool.md) and the transaction hash +[transaction pool](../../../public-networks/concepts/transactions/pool.md) and the transaction hash returns, but the transaction is never mined, check the -[`--min-gas-price`](../../Reference/CLI/CLI-Syntax.md#min-gas-price) option on mining nodes. If the -`gasPrice` on a [transaction](../Send-Transactions/Transactions.md) is lower than the +[`--min-gas-price`](../../../public-networks/reference/cli/options.md#min-gas-price) option on mining nodes. If the +`gasPrice` on a [transaction](../../../public-networks/how-to/send-transactions.md) is lower than the `min-gas-price` for the mining node, the transaction will never mine. -In [free gas networks](../Configure/FreeGas.md), you must set -[`--min-gas-price`](../../Reference/CLI/CLI-Syntax.md#min-gas-price) to zero. +In [free gas networks](../../../private-networks/how-to/configure/free-gas.md), you must set +[`--min-gas-price`](../../../public-networks/reference/cli/options.md#min-gas-price) to zero. ## Genesis milestone @@ -101,11 +101,11 @@ hyphens. ## Logging Restart Besu with the command line option -[`--logging=TRACE`](../../Reference/CLI/CLI-Syntax.md#logging) and look at the log files. +[`--logging=TRACE`](../../../public-networks/reference/cli/options.md#logging) and look at the log files. ## Pending State Nodes not decreasing for a full node in Grafana -During [fast synchronization](../../Concepts/Node-Types.md#run-a-full-node) for a full node, the +During [fast synchronization](../../../public-networks/how-to/connect/sync-node.md#run-a-full-node) for a full node, the Pending State Nodes count is the number of nodes yet to be downloaded, and it should change constantly. Pending State Nodes trend to 0 during fast synchronization and then goes to 0. @@ -115,7 +115,7 @@ In the following example the Pivot Block is 0 (zero) and the Pending State Nodes This means the node isn't syncing against any peers. The fact that state nodes have been downloaded means at some stage it was syncing. -![Fast synchronization](../../images/fastsync.png) +![Fast synchronization](../../../images/fastsync.png) The easiest solution in this scenario is to restart fast synchronization to obtain a new pivot block. @@ -172,7 +172,7 @@ sudo mount /dev/urandom /dev/random -o bind ## Quorum Developer Quickstart not working on Apple M1 chip -The [Quorum Developer Quickstart](../../Tutorials/Developer-Quickstart.md) does not currently support +The [Quorum Developer Quickstart](../../../private-networks/tutorials/quickstart.md) does not currently support the Apple M1 chip. The quickstart starts up on machines that use the chip, but may show the following symptoms: @@ -188,7 +188,7 @@ following symptoms: ## Unsupported address exception while running from Docker -While [running Besu from a Docker image](../../HowTo/Get-Started/Installation-Options/Run-Docker-Image.md), you might get the following exception: +While [running Besu from a Docker image], you might get the following exception: ```bash Unsupported address type exception when connecting to peer {}, this is likely due to ipv6 not being enabled at runtime. diff --git a/docs/index.md b/docs/index.md index 8e10656d..b52bc56c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -5,7 +5,10 @@ description: Besu is an open-source Ethereum client developed under the Apache 2 networks. --- -# Besu Ethereum client +# Hyperledger Besu Ethereum client + +Hyperledger Besu is an open source Ethereum client developed under the Apache 2.0 license and written in Java. +It runs on public and private networks:
@@ -13,51 +16,31 @@ description: Besu is an open-source Ethereum client developed under the Apache 2 --- - You can run Besu as an execution client on Ethereum Mainnet and Ethereum public testnets, such as Goerli and Sepolia. + Run Besu as an execution client on Ethereum Mainnet and Ethereum public testnets, such as Goerli and Sepolia. - [:octicons-arrow-right-24: Getting started](HowTo/Get-Started/System-Requirements/System-Requirements-Public.md) + [:octicons-arrow-right-24: Get started](public-networks/index.md) * :material-book-lock-outline: __Private networks__ --- - You can create or join a network not connected to Mainnet or a public testnet. Use private networks to develop enterprise applications requiring secure, high-performance transaction processing. + Create or join a private, permissioned network. Use private networks to develop enterprise applications requiring secure, high-performance transaction processing. - [:octicons-arrow-right-24: Getting started](HowTo/Get-Started/System-Requirements/System-Requirements-Private.md) + [:octicons-arrow-right-24: Get started](private-networks/index.md)
-## What is Hyperledger Besu? - -Hyperledger Besu is an open-source Ethereum client developed under the Apache 2.0 license and written in Java. -It runs on Ethereum Mainnet, private networks, and test networks such as Rinkeby, Ropsten, Goerli, and the Merge testnet. -Besu serves as an [execution client](Concepts/Merge.md) on Ethereum Mainnet and the Merge testnet. - -Besu implements proof of authority (QBFT, IBFT 2.0, and Clique) and proof of work (Ethash) consensus mechanisms. - -You can use Besu to develop enterprise applications requiring secure, high-performance transaction -processing in a private network. - -Besu supports enterprise features including privacy and permissioning. - ## What can you do with Besu? -Besu includes a [command line interface](Reference/CLI/CLI-Syntax.md) and -[JSON-RPC API](HowTo/Interact/APIs/API.md) for running, maintaining, debugging, and monitoring -nodes in an Ethereum network. You can use the API via RPC over HTTP or via WebSockets. Besu also +Besu includes a [command line interface](public-networks/reference/cli/options.md) and +[JSON-RPC API](public-networks/how-to/use-besu-api/index.md) for running, maintaining, debugging, and monitoring +nodes in an Ethereum network. You can use the API via RPC over HTTP or via WebSocket. Besu also supports Pub/Sub. The API supports typical Ethereum functionalities such as: * Ether mining. * Smart contract development. * Decentralized application (dapp) development. -## New to Ethereum? - -Get started with the [Developer Quickstart](Tutorials/Developer-Quickstart.md). Use the quickstart -to rapidly generate local blockchain networks. - -Learn more about [use cases for Ethereum](https://consensys.net/blockchain-use-cases/case-studies/). - ## What does Besu support? The Besu client supports common smart contract and dapp development, deployment, and operational @@ -65,6 +48,15 @@ use cases, using tools such as [Truffle](http://truffleframework.com/), [Remix](https://github.com/ethereum/remix), and [web3j](https://web3j.io/). The client supports common JSON-RPC API methods such as `eth`, `net`, `web3`, `debug`, and `miner`. -Besu doesn't support [key management](HowTo/Send-Transactions/Account-Management.md) inside the +Besu doesn't support [key management](public-networks/how-to/send-transactions.md) inside the client. You can use [EthSigner](http://docs.ethsigner.consensys.net/en/latest/) with Besu to access your key store and sign transactions. + +## Besu architecture + +The following diagram outlines the Besu high-level architecture. + +![Architecture](images/Architecture.png) + +If you have any questions about Besu or its architecture, contact us on the +[Besu channel on Hyperledger Discord](https://discord.gg/hyperledger). diff --git a/docs/private-networks/concepts/index.md b/docs/private-networks/concepts/index.md new file mode 100644 index 00000000..d026f5c2 --- /dev/null +++ b/docs/private-networks/concepts/index.md @@ -0,0 +1,19 @@ +--- +description: private networks concepts overview +--- + +# Concepts + +This section provides background information and context about private network features. + +The following features are shared with [public networks](../../public-networks/index.md) and the +content can be found in the public networks section: + +- Transactions: + - [Transaction types](../../public-networks/concepts/transactions/types.md) + - [Transaction pool](../../public-networks/concepts/transactions/pool.md) + - [Transaction validation](../../public-networks/concepts/transactions/validation.md) +- [Network ID and chain ID](../../public-networks/concepts/network-and-chain-id.md) +- [Events and logs](../../public-networks/concepts/events-and-logs.md) +- [Genesis file](../../public-networks/concepts/genesis-file.md) +- [Node keys](../../public-networks/concepts/node-keys.md) diff --git a/docs/Concepts/Permissioning/Permissioning-Overview.md b/docs/private-networks/concepts/permissioning/index.md similarity index 78% rename from docs/Concepts/Permissioning/Permissioning-Overview.md rename to docs/private-networks/concepts/permissioning/index.md index 88c882a8..2c3a67ba 100644 --- a/docs/Concepts/Permissioning/Permissioning-Overview.md +++ b/docs/private-networks/concepts/permissioning/index.md @@ -16,13 +16,13 @@ specified nodes and accounts to access the network. action to prevent the bad actor adding to the chain but they cannot prevent the bad actor from allowing access to the chain. - Besu also implements [privacy](../Privacy/Privacy-Overview.md). + Besu also implements [privacy](../privacy/index.md). ## Node permissioning Use node permissioning to restrict access to known participants only. -![Node Permissioning](../../images/node-permissioning-bad-actor.png) +![Node Permissioning](../../../images/node-permissioning-bad-actor.png) ## Account permissioning @@ -33,15 +33,15 @@ Use account permissioning to: * Exclude broken contracts using a denylist. * Restrict the actions an account can perform. -![Account Permissioning](../../images/enterprise-ethereum-account-permissioning.png) +![Account Permissioning](../../../images/enterprise-ethereum-account-permissioning.png) -## Specifying permissioning +## Specify permissioning You can specify permissioning [locally](#local) or [onchain](#onchain). ### Local -[Local permissioning](../../HowTo/Limit-Access/Local-Permissioning.md) works at the node level. +[Local permissioning](../../how-to/use-permissioning/local.md) works at the node level. Each node in the network has a [permissions configuration file]. Local permissioning affects your node but not the rest of the network. Use local permissioning to @@ -53,7 +53,7 @@ immediately to protect your node. Your rules are not enforced in blocks produced ### Onchain -[Onchain permissioning](Onchain-Permissioning.md) works through a smart contract on the network. +[Onchain permissioning](onchain.md) works through a smart contract on the network. Specifying permissioning onchain enables all nodes to read and update permissioning configuration from one location. @@ -66,7 +66,7 @@ by the updated rules. For example, blocked accounts can no longer add transactio The following diagram illustrates applying local and onchain permissioning rules. -![Permissioning Flow](../../images/PermissioningFlow.png) +![Permissioning Flow](../../../images/PermissioningFlow.png) -[permissions configuration file]: ../../HowTo/Limit-Access/Local-Permissioning.md#permissions-configuration-file +[permissions configuration file]: ../../how-to/use-permissioning/local.md#permissions-configuration-file diff --git a/docs/Concepts/Permissioning/Onchain-Permissioning.md b/docs/private-networks/concepts/permissioning/onchain.md similarity index 75% rename from docs/Concepts/Permissioning/Onchain-Permissioning.md rename to docs/private-networks/concepts/permissioning/onchain.md index d8c96e33..423f4da5 100644 --- a/docs/Concepts/Permissioning/Onchain-Permissioning.md +++ b/docs/private-networks/concepts/permissioning/onchain.md @@ -4,7 +4,7 @@ description: Onchain permissioning # Onchain permissioning -Onchain [permissioning](Permissioning-Overview.md) uses smart contracts to store and administer the node, account, and admin +Onchain [permissioning](index.md) uses smart contracts to store and administer the node, account, and admin allowlists. Using onchain permissioning enables all nodes to read the allowlists from a single source, the blockchain. @@ -43,8 +43,7 @@ The permissioning smart contracts provided in the The permissioning contract has multiple interfaces, and each interface maps to a specific version of the [Enterprise Ethereum Alliance Client Specification](https://entethalliance.org/technical-specifications/). - Ensure that you specify the [permissioning contract interface](../../HowTo/Limit-Access/Specify-Perm-Version.md) - being used when starting Besu. + Ensure that you [specify the permissioning contract interface] being used when starting Besu. ## Permissioning management dapp @@ -61,20 +60,20 @@ Permissioning implements three allowlists: !!! caution "Using account permissioning and privacy" Account permissioning is incompatible with - [random key signing](../../HowTo/Use-Privacy/Sign-Privacy-Marker-Transactions.md) for - [privacy marker transactions](../Privacy/Private-Transaction-Processing.md). + [random key signing](../../how-to/use-privacy/sign-pmts.md) for + [privacy marker transactions](../privacy/private-transactions/processing.md). If using account permissioning and privacy, a signing key must be specified using the - [`--privacy-marker-transaction-signing-key-file`](../../Reference/CLI/CLI-Syntax.md#privacy-marker-transaction-signing-key-file) + [`--privacy-marker-transaction-signing-key-file`](../../reference/cli/options.md#privacy-marker-transaction-signing-key-file) command line option and the corresponding public key included in the accounts allowlist. !!! tip - If nodes are not connecting as expected, set the [log level to `TRACE`](../../Reference/CLI/CLI-Syntax.md#logging) + If nodes are not connecting as expected, set the [log level to `TRACE`](../../../public-networks/reference/cli/options.md#logging) and search for messages containing `Node permissioning` to identify the issue. - Ensure the [`--p2p-host`](../../Reference/CLI/CLI-Syntax.md#p2p-host) command line option has been + Ensure the [`--p2p-host`](../../../public-networks/reference/cli/options.md#p2p-host) command line option has been correctly configured for all nodes with the externally accessible address. @@ -82,7 +81,7 @@ Permissioning implements three allowlists: ## Bootnodes -When a node joins the network, the node connects to the [bootnodes](../../HowTo/Find-and-Connect/Bootnodes.md) until it +When a node joins the network, the node connects to the [bootnodes](../../how-to/configure/bootnodes.md) until it synchronizes to the chain head, regardless of node permissions. After synchronization, the Account Rules and Node Rules smart contracts apply the permissioning rules. @@ -94,5 +93,6 @@ bootnodes to rediscover peers. All bootnodes must be on the nodes allowlist. -[permissioning management dapp]: ../../Tutorials/Permissioning/Getting-Started-Onchain-Permissioning.md -[`--privacy-marker-transaction-signing-key-file`]: ../../Reference/CLI/CLI-Syntax.md#privacy-marker-transaction-signing-key-file +[permissioning management dapp]: ../../how-to/use-permissioning/onchain.md#deploy-the-permissioning-management-dapp +[`--privacy-marker-transaction-signing-key-file`]: ../../../public-networks/reference/cli/options.md#privacy-marker-transaction-signing-key-file +[specify the permissioning contract interface]: ../../how-to/use-permissioning/onchain.md#specify-the-permissioning-contract-interface-version diff --git a/docs/Concepts/Permissioning/Plugin-Permissioning.md b/docs/private-networks/concepts/permissioning/plugin.md similarity index 90% rename from docs/Concepts/Permissioning/Plugin-Permissioning.md rename to docs/private-networks/concepts/permissioning/plugin.md index cb95a171..fc4935b3 100644 --- a/docs/Concepts/Permissioning/Plugin-Permissioning.md +++ b/docs/private-networks/concepts/permissioning/plugin.md @@ -4,7 +4,7 @@ description: Plugin based permissioning # Permissioning plugin -You can define complex [permissioning](Permissioning-Overview.md) solutions by [building a plugin](../Plugins.md) that +You can define complex [permissioning](index.md) solutions by building a plugin that extends Hyperledger Besu functionality. The plugin API provides a `PermissioningService` interface that currently supports connection permissioning and @@ -19,7 +19,7 @@ Use connection permissioning when deciding whether to restrict node access to kn Use message permissioning to propagate different types of devP2P messages to particular nodes. For example, this can be used to prevent pending transactions from being forwarded to other nodes. -## Registering your plugin +## Register your plugin To enable permissioning in your plugin, implement the `PermissioningService` interface and register your providers. diff --git a/docs/Concepts/PKI.md b/docs/private-networks/concepts/pki.md similarity index 90% rename from docs/Concepts/PKI.md rename to docs/private-networks/concepts/pki.md index b5b6cd92..039ed010 100644 --- a/docs/Concepts/PKI.md +++ b/docs/private-networks/concepts/pki.md @@ -26,7 +26,7 @@ authorized nodes in the network. When receiving connection requests, the incoming connection must be from another authorized node. Similarly, when connecting to a node the initiator ensures that the remote node is authorized to participate in the network. -[Configure TLS for the P2P communication using the Besu command line options](../HowTo/Configure/TLS/P2P-TLS.md). +[Configure TLS for the P2P communication using the Besu command line options](../how-to/configure/tls/p2p.md). ## Block proposal permissioning @@ -39,7 +39,7 @@ network. The block hash is signed by the validator private certificate and inclu as a [CMS (Cryptographic Message Syntax)]. This is used by other validators to verify that the proposer is authorized to create a block in the network. -[Configure block proposal permissioning using the Besu command line options](../HowTo/Configure/Block-Proposal-Permissioning.md). +[Configure block proposal permissioning using the Besu command line options](../how-to/configure/block-proposal-permissioning.md). -[QBFT consensus protocol]: ../HowTo/Configure/Consensus-Protocols/QBFT.md +[QBFT consensus protocol]: ../how-to/configure/consensus/qbft.md [CMS (Cryptographic Message Syntax)]: https://en.wikipedia.org/wiki/Cryptographic_Message_Syntax diff --git a/docs/Concepts/Plugins.md b/docs/private-networks/concepts/plugins.md similarity index 90% rename from docs/Concepts/Plugins.md rename to docs/private-networks/concepts/plugins.md index 6d9eab68..64b5f97d 100644 --- a/docs/Concepts/Plugins.md +++ b/docs/private-networks/concepts/plugins.md @@ -18,9 +18,9 @@ third-party application. The API exposes data about the following components: * Logs * Syncing state. -![Besu plugin API](../images/Hyperledger-Besu-Plugin-API.png) +![Besu plugin API](../../images/Hyperledger-Besu-Plugin-API.png) -The plugin API provides access to [interfaces](../Reference/Plugin-API-Interfaces.md) allowing you +The plugin API provides access to [interfaces](../reference/plugin-api-interfaces.md) allowing you to build the plugin. !!! tip diff --git a/docs/Concepts/Consensus-Protocols/Comparing-PoA.md b/docs/private-networks/concepts/poa.md similarity index 96% rename from docs/Concepts/Consensus-Protocols/Comparing-PoA.md rename to docs/private-networks/concepts/poa.md index 04220e1e..3f41017d 100644 --- a/docs/Concepts/Consensus-Protocols/Comparing-PoA.md +++ b/docs/private-networks/concepts/poa.md @@ -2,9 +2,9 @@ description: Besu proof of authority consensus protocols comparison --- -# Comparing proof of authority consensus protocols +# Proof of authority consensus -Besu implements the QBFT, IBFT 2.0, and Clique proof of authority (PoA) [consensus protocols](Overview-Consensus.md). +Besu implements the QBFT, IBFT 2.0, and Clique proof of authority (PoA) [consensus protocols](../how-to/configure/consensus/index.md). PoA consensus protocols work when participants know each other and there is a level of trust between them. For example, in a permissioned consortium network. diff --git a/docs/Concepts/Privacy/Flexible-PrivacyGroups.md b/docs/private-networks/concepts/privacy/flexible-privacy.md similarity index 80% rename from docs/Concepts/Privacy/Flexible-PrivacyGroups.md rename to docs/private-networks/concepts/privacy/flexible-privacy.md index e5a0724e..ce8377f9 100644 --- a/docs/Concepts/Privacy/Flexible-PrivacyGroups.md +++ b/docs/private-networks/concepts/privacy/flexible-privacy.md @@ -10,8 +10,8 @@ description: Flexible privacy groups Read our [Orion to Tessera migration guide](https://docs.orion.consensys.net/en/latest/Tutorials/Migrating-from-Orion-to-Tessera/) and about all the [new Tessera features](https://consensys.net/blog/quorum/tessera-the-privacy-manager-of-choice-for-consensys-quorum-networks). -Flexible [privacy groups](Privacy-Groups.md) use smart contracts to store and maintain the group membership. -You can [add and remove members to and from flexible privacy groups](../../HowTo/Use-Privacy/Use-FlexiblePrivacy.md). +Flexible [privacy groups](privacy-groups.md) use smart contracts to store and maintain the group membership. +You can [add and remove members to and from flexible privacy groups](../../how-to/use-privacy/flexible.md). !!! tip @@ -27,7 +27,7 @@ You can [add and remove members to and from flexible privacy groups](../../HowTo group functionality in future versions. We don't recommended creating flexible privacy groups in a chain with existing - [offchain privacy groups](Privacy-Groups.md). + [offchain privacy groups](privacy-groups.md). ## Group management contracts @@ -51,7 +51,7 @@ the management contract, must be signed by the same key that signed the group cr When creating a flexible privacy group, generate the privacy group ID for the group outside of Besu and pass the ID as a parameter. -The [web3js-quorum library](../../HowTo/Use-Privacy/Use-FlexiblePrivacy.md) generates a unique privacy +The [web3js-quorum library](../../how-to/use-privacy/flexible.md) generates a unique privacy group ID and passes the ID to Besu when creating a privacy group. !!! caution @@ -64,14 +64,14 @@ group ID and passes the ID to Besu when creating a privacy group. ## Multi-tenancy -When using [multi-tenancy](Multi-Tenancy.md) with flexible privacy groups, each user provides a JSON Web Token (JWT) +When using [multi-tenancy](multi-tenancy.md) with flexible privacy groups, each user provides a JSON Web Token (JWT) which allows Besu to check that the user has access to functionality and data associated with a privacy group. -Using multi-tenancy with flexible privacy groups is more complex than with [offchain privacy groups](Privacy-Groups.md) +Using multi-tenancy with flexible privacy groups is more complex than with [offchain privacy groups](privacy-groups.md) because users may be added and removed from flexible privacy groups. When a user is added to a privacy group, they get access to all existing data in the privacy group. After being removed from a privacy group, a user retains access to already existing data in the privacy group, up to the -block containing the [privacy marker transaction (PMT)](Private-Transaction-Processing.md) that removed them (the +block containing the [privacy marker transaction (PMT)](private-transactions/processing.md) that removed them (the removal block). A removed user doesn't have access to data in the privacy group that happens after they were removed. @@ -80,23 +80,23 @@ but later removed from, Besu allows the user access to the following functionali group: - Private transactions using `priv_getTransaction` and private transaction receipts using - [`priv_getTransactionReceipt`](../../Reference/API-Methods.md#priv_gettransactionreceipt) from blocks up to (and + [`priv_getTransactionReceipt`](../../../public-networks/reference/api/index.md#priv_gettransactionreceipt) from blocks up to (and including) the removal block. - + !!! note A removed group member may have access to some private transactions after the removal PMT in the same block. - -- Using [`priv_call`](../../Reference/API-Methods.md#priv_call) on blocks up to (and including) the removal block. - -- Private logs using [`priv_getLogs`](../../Reference/API-Methods.md#priv_getlogs) for blocks up to (and including) the + +- Using [`priv_call`](../../../public-networks/reference/api/index.md#priv_call) on blocks up to (and including) the removal block. + +- Private logs using [`priv_getLogs`](../../../public-networks/reference/api/index.md#priv_getlogs) for blocks up to (and including) the removal block. When the `toBlock` is greater than the removal block, `priv_getLogs` still returns logs up to the removal block. - + !!! note When a user is removed from a privacy group, any [log filters](../../HowTo/Interact/Filters#filters-for-private-contracts) they've created are also removed and can't be accessed. A user can only create and access filters for a privacy group they are currently a member of. -All other [`PRIV` API methods](../../Reference/API-Methods.md#priv-methods) fail for the removed group member. +All other [`PRIV` API methods](../../../public-networks/reference/api/index.md#priv-methods) fail for the removed group member. diff --git a/docs/Concepts/Privacy/Privacy-Overview.md b/docs/private-networks/concepts/privacy/index.md similarity index 81% rename from docs/Concepts/Privacy/Privacy-Overview.md rename to docs/private-networks/concepts/privacy/index.md index 6d856bb0..928764cf 100644 --- a/docs/Concepts/Privacy/Privacy-Overview.md +++ b/docs/private-networks/concepts/privacy/index.md @@ -18,27 +18,27 @@ participants. Other participants cannot access the transaction content or list o For production environments requiring private transactions: * We recommend using a network with a consensus mechanism supporting transaction finality. For - example, [IBFT 2.0](../../HowTo/Configure/Consensus-Protocols/IBFT.md). + example, [IBFT 2.0](../../how-to/configure/consensus/ibft.md). * Tessera must be [highly available and run in a separate instance to Besu]. - Using private transactions with [pruning](../Pruning.md) or - [fast sync](../../Reference/CLI/CLI-Syntax.md#sync-mode) is not supported. + Using private transactions with [pruning] or + [fast sync](../../../public-networks/reference/cli/options.md#sync-mode) is not supported. ## Private transaction manager Besu uses a private transaction manager, [Tessera](https://docs.tessera.consensys.net/), to implement privacy. -Each Besu node that sends or receives [private transactions](Private-Transactions.md) requires an +Each Besu node that sends or receives [private transactions](private-transactions/index.md) requires an associated Tessera node. -![Tessera Nodes](../../images/TesseraNodes.png) +![Tessera Nodes](../../../images/TesseraNodes.png) Private transactions pass from the Besu node to the associated Tessera node. The Tessera node encrypts and directly distributes (that is, point-to-point) the private transaction to the Tessera nodes participating in the transaction. By default, each participant in a privacy-enabled network uses its own Besu and Tessera node. -[Multi-tenancy](Multi-Tenancy.md) allows more than one participant to use the same Besu and Tessera +[Multi-tenancy](multi-tenancy.md) allows more than one participant to use the same Besu and Tessera node. !!! tip @@ -47,7 +47,7 @@ node. ## Privacy-enabled networks -When enabling privacy in a [private network](../../HowTo/Get-Started/System-Requirements/System-Requirements-Private.md), +When enabling privacy in a [private network](../../get-started/system-requirements.md), there's an assumed level of trust among the node operators, since all are members of the private network. @@ -79,4 +79,5 @@ Do not use private transactions in production environments using consensus mecha occur. -[highly available and run in a separate instance to Besu]: ../../HowTo/Use-Privacy/Run-Tessera-With-Besu.md +[highly available and run in a separate instance to Besu]: ../../how-to/use-privacy/tessera.md +[pruning]: ../../../public-networks/concepts/data-storage-formats.md diff --git a/docs/Concepts/Privacy/Multi-Tenancy.md b/docs/private-networks/concepts/privacy/multi-tenancy.md similarity index 78% rename from docs/Concepts/Privacy/Multi-Tenancy.md rename to docs/private-networks/concepts/privacy/multi-tenancy.md index 5473c2e8..52c892a2 100644 --- a/docs/Concepts/Privacy/Multi-Tenancy.md +++ b/docs/private-networks/concepts/privacy/multi-tenancy.md @@ -18,10 +18,10 @@ is a _tenant_, and the operator is the _owner_ of the Besu and Tessera node. !!! important The operator is responsible for - [configuring multi-tenancy](../../Tutorials/Privacy/Configuring-Multi-Tenancy.md), and has + [configuring multi-tenancy](../../tutorials/privacy/multi-tenancy.md), and has access to all tenant data. -![Multi-tenancy](../../images/Multi-tenancy.png) +![Multi-tenancy](../../../images/Multi-tenancy.png) !!! important @@ -31,8 +31,8 @@ is a _tenant_, and the operator is the _owner_ of the Besu and Tessera node. If not configured to allow access only by the multi-tenant Besu node, other Tessera clients, including other Besu nodes, might be able to access tenant data. - To secure access, you can [configure TLS between Besu and Tessera](../TLS.md) with the - [`WHITELIST`](https://docs.tessera.consensys.net/en/stable/HowTo/Configure/TLS/#whitelist) + To secure access, you can [configure TLS between Besu and Tessera](../../how-to/configure/tls/client-and-server.md) + with the [`WHITELIST`](https://docs.tessera.consensys.net/en/stable/HowTo/Configure/TLS/#whitelist) trust mode. Multi-tenancy validates that tenants have permission to use the specified HTTP or WebSocket @@ -40,4 +40,4 @@ JSON-RPC requests, and the tenant has access to the requested privacy data. Private data is isolated and each tenant uses a JSON Web Token (JWT) for authentication. You can -[create the JWT either externally or internally](../../HowTo/Interact/APIs/Authentication.md). +[create the JWT either externally or internally](../../../public-networks/how-to/use-besu-api/authenticate.md). diff --git a/docs/Concepts/Privacy/Plugin-Privacy.md b/docs/private-networks/concepts/privacy/plugin.md similarity index 89% rename from docs/Concepts/Privacy/Plugin-Privacy.md rename to docs/private-networks/concepts/privacy/plugin.md index 7698e1a5..f800842b 100644 --- a/docs/Concepts/Privacy/Plugin-Privacy.md +++ b/docs/private-networks/concepts/privacy/plugin.md @@ -4,7 +4,7 @@ description: Privacy plugin # Privacy plugin -You can define your own strategy for private transactions by [building a plugin](../Plugins.md) that extends +You can define your own strategy for private transactions by building a plugin that extends Hyperledger Besu functionality. The plugin can take many forms, but it must provide Besu with a private transaction when required. @@ -18,7 +18,7 @@ The plugin can take many forms, but it must provide Besu with a private transact Enable the privacy plugin by starting Besu and including the `--Xprivacy-plugin-enabled` command line option. The registered plugin must implement the `PrivacyPluginPayloadProvider` interface. -## Using the payload provider interface +## Use the payload provider interface The privacy plugin must define the [privacy marker transaction (PMT)] payload. Use the payload to retrieve the contents of the private transaction which could be a link to a location in @@ -27,11 +27,11 @@ an enclave, or an encrypted form of the private payload itself. Besu doesn't need to know how the private transaction is distributed, it just needs to know what the private transaction for the PMT is. -### Sending transactions +### Send transactions -When submitting a private transaction using [`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction), +When submitting a private transaction using [`eea_sendRawTransaction`](../../../public-networks/reference/api/index.md#eea_sendrawtransaction), the signed transaction must be sent to `0x000000000000000000000000000000000000007a` to indicate which -[privacy precompiled contract](../Privacy/Private-Transaction-Processing.md) is being used. +[privacy precompiled contract](private-transactions/processing.md) is being used. The transaction flow is as follows: @@ -43,12 +43,12 @@ The transaction flow is as follows: 5. The private transaction handler creates a PMT for the private transaction, and propagates the PMT using devP2P in the same way as a public Ethereum transaction. -### Mining transactions +### Mine transactions The process of mining transactions happens in reverse to sending transactions. 1. The Mainnet transaction processor processes the PMT in the same way as - any other public transaction. On nodes containing the [privacy precompile contract](../../Reference/API-Methods.md#priv_getprivacyprecompileaddress) + any other public transaction. On nodes containing the [privacy precompile contract](../../../public-networks/reference/api/index.md#priv_getprivacyprecompileaddress) specified in the `to` attribute of the PMT, the Mainnet transaction processor passes the PMT to the privacy precompile contract. !!! note @@ -72,9 +72,9 @@ The extension allows you to use a more dynamic approach, for example different k Your plugin needs to register the `PrivateMarkerTransactionFactory` interface which is called before submitting a PMT to the transaction pool. The responsibility then lies with the plugin to sign and serialize the PMT. -[privacy marker transaction (PMT)]: ../../HowTo/Use-Privacy/Access-Private-Transactions.md +[privacy marker transaction (PMT)]: ../../how-to/use-privacy/access-private-transactions.md -## Registering your plugin +## Register your plugin To enable Besu to use your privacy plugin, you must implement the `PrivacyPluginService` interface and you must call `setPayloadProvider`. diff --git a/docs/Concepts/Privacy/Privacy-Groups.md b/docs/private-networks/concepts/privacy/privacy-groups.md similarity index 93% rename from docs/Concepts/Privacy/Privacy-Groups.md rename to docs/private-networks/concepts/privacy/privacy-groups.md index 678a1f08..6d76d931 100644 --- a/docs/Concepts/Privacy/Privacy-Groups.md +++ b/docs/private-networks/concepts/privacy/privacy-groups.md @@ -22,7 +22,7 @@ state. The privacy group implementations described below are offchain privacy groups and cannot have their group membership updated. - [Flexible privacy groups are an early access feature](Flexible-PrivacyGroups.md). + [Flexible privacy groups are an early access feature](flexible-privacy.md). ## Privacy types @@ -35,7 +35,7 @@ Besu implements two types of privacy: Both privacy types create privacy groups and store private transactions with their privacy group in Tessera. -![Privacy Groups](../../images/PrivacyGroups.png) +![Privacy Groups](../../../images/PrivacyGroups.png) !!! note @@ -83,7 +83,7 @@ provided by Tessera. ### Besu-extended privacy The Besu-extended privacy implementation creates a privacy group using -[`priv_createPrivacyGroup`](../../Reference/API-Methods.md#priv_createprivacygroup) with private +[`priv_createPrivacyGroup`](../../../public-networks/reference/api/index.md#priv_createprivacygroup) with private transactions sent to the privacy group ID. !!! example @@ -101,5 +101,5 @@ transactions sent to the privacy group ID. ## Multi-tenancy -When using [multi-tenancy](Multi-Tenancy.md) with privacy groups, each user provides a JSON Web Token (JWT) which +When using [multi-tenancy](multi-tenancy.md) with privacy groups, each user provides a JSON Web Token (JWT) which allows Besu to check that the user has access to functionality and data associated with a privacy group. diff --git a/docs/Concepts/Privacy/Private-Transactions.md b/docs/private-networks/concepts/privacy/private-transactions/index.md similarity index 80% rename from docs/Concepts/Privacy/Private-Transactions.md rename to docs/private-networks/concepts/privacy/private-transactions/index.md index 827128cc..41b84f8d 100644 --- a/docs/Concepts/Privacy/Private-Transactions.md +++ b/docs/private-networks/concepts/privacy/private-transactions/index.md @@ -15,7 +15,7 @@ Private transactions have the same parameters as public Ethereum transactions, w * `privateFrom` - The Tessera public key of the transaction sender. * One of the following: * `privateFor` - The Tessera public keys of the transaction recipients. - * `privacyGroupId` - [The privacy group to receive the transaction](Privacy-Groups.md). + * `privacyGroupId` - [The privacy group to receive the transaction](../privacy-groups.md). * `restriction` - Whether the private transaction is `restricted` or `unrestricted`: * `restricted` - Only the nodes participating in the transaction receive and store the payload of the private transaction. @@ -26,23 +26,23 @@ Private transactions have the same parameters as public Ethereum transactions, w Besu implements `restricted` private transactions only. -The `gas` and `gasPrice` are used by the [privacy marker transaction (PMT)](Private-Transaction-Processing.md), +The `gas` and `gasPrice` are used by the [privacy marker transaction (PMT)](processing.md), not the private transaction itself. !!! warning Because gas isn't required in private transactions, inefficient contracts deployed accidentally or deliberately can cause performance issues in privacy-enabled networks. - Ensure your network has a mechanism to [establish trust offchain](Privacy-Overview.md#privacy-enabled-networks). + Ensure your network has a mechanism to [establish trust offchain](../index.md#privacy-enabled-networks). -You can [create and send private transactions](../../HowTo/Send-Transactions/Creating-Sending-Private-Transactions.md). +You can [create and send private transactions](../../../how-to/send-transactions/private-transactions.md). ## Besu and Tessera keys Besu and Tessera nodes both have public/private key pairs identifying them. A Besu node sending a private transaction to a Tessera node signs the transaction with the Besu node private key. The `privateFrom` and `privateFor` parameters specified in the RLP-encoded transaction string for -[`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction) are the public keys of the Tessera +[`eea_sendRawTransaction`](../../../reference/api/index.md#eea_sendrawtransaction) are the public keys of the Tessera nodes sending and receiving the transaction. !!! important @@ -54,7 +54,7 @@ nodes sending and receiving the transaction. A nonce is the number of previous transactions made by the sender. -[Private transaction processing](Private-Transaction-Processing.md) involves two transactions: +[Private transaction processing](processing.md) involves two transactions: the private transaction distributed to involved participants, and the privacy marker transaction (PMT) included on the public blockchain. Each of these transactions has its own nonce. @@ -62,20 +62,20 @@ Since the PMT is a public transaction, the PMT nonce is the public nonce for the ### Private transaction nonce -Besu maintains separate private states for each [privacy group](../../Concepts/Privacy/Privacy-Groups.md). +Besu maintains separate private states for each [privacy group](../privacy-groups.md). The private transaction nonce for an account is specific to the privacy group. That is, the nonce for account A for privacy group ABC is different to the nonce for account A for privacy group AB. ### Private nonce validation -Unlike public transactions, private transactions are not submitted to the [transaction pool](../Transactions/Transaction-Pool.md). +Unlike public transactions, private transactions are not submitted to the [transaction pool](../../../../public-networks/concepts/transactions/pool.md). The private transaction is distributed directly to the participants in the transaction, and the PMT is submitted to the transaction pool. -Unlike [public transaction nonces](../Transactions/Transaction-Validation.md), private transaction nonces aren't +Unlike [public transaction nonces](../../../../public-networks/concepts/transactions/validation.md), private transaction nonces aren't validated when the private transaction is submitted. If a private transaction has an incorrect nonce, the PMT is still valid and is added to a block. -However, in this scenario, the private transaction execution fails when [processing the PMT](Private-Transaction-Processing.md) +However, in this scenario, the private transaction execution fails when [processing the PMT](processing.md) for the private transaction with the incorrect nonce. The following private transaction flow illustrates when nonce validation occurs: @@ -83,7 +83,7 @@ The following private transaction flow illustrates when nonce validation occurs: 1. Submit a private transaction with a [nonce value](#private-transaction-nonce). 1. The private transaction is distributed to all participants in the privacy group. 1. The PMT is created and submitted to the transaction pool with a nonce of `0` if using one-time accounts. - If using a specific account with [`--privacy-marker-transaction-signing-key-file`](../../Reference/CLI/CLI-Syntax.md#privacy-marker-transaction-signing-key-file), + If using a specific account with [`--privacy-marker-transaction-signing-key-file`](../../../reference/cli/options.md#privacy-marker-transaction-signing-key-file), the public nonce for that account is obtained and used for the PMT. 1. The PMT is mined and included in the block. 1. After the block containing the PMT is imported, and the PMT is processed, the private transaction is retrieved from @@ -94,8 +94,8 @@ The following private transaction flow illustrates when nonce validation occurs: ### Private nonce management -In Besu, you call [`eth_getTransactionCount`](../../Reference/API-Methods.md#eth_gettransactioncount) to get a nonce, -then use that nonce with [`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction) to send a +In Besu, you call [`eth_getTransactionCount`](../../../../public-networks/reference/api/index.md#eth_gettransactioncount) to get a nonce, +then use that nonce with [`eea_sendRawTransaction`](../../../reference/api/index.md#eea_sendrawtransaction) to send a private transaction. However, when you send multiple transactions in row, if a subsequent call to `getTransactionCount` happens before a @@ -114,12 +114,12 @@ You can manage private nonces in multiple ways: You must wait until the private transaction's corresponding PMT is included in a block. * Manage the nonce yourself, by keeping track of and providing the nonce at each call. - We recommend this if you're [sending many transactions that are independent of each other](../../HowTo/Send-Transactions/Concurrent-Private-Transactions.md). + We recommend this if you're [sending many transactions that are independent of each other](../../../how-to/send-transactions/concurrent-private-transactions.md). !!! note - You can use [`priv_getTransactionCount`](../../Reference/API-Methods.md#priv_gettransactioncount) or - [`priv_getEeaTransactionCount`](../../Reference/API-Methods.md#priv_geteeatransactioncount) to get the nonce for + You can use [`priv_getTransactionCount`](../../../reference/api/index.md#priv_gettransactioncount) or + [`priv_getEeaTransactionCount`](../../../reference/api/index.md#priv_geteeatransactioncount) to get the nonce for an account for the specified privacy group or participants. * Use [Orchestrate](https://docs.orchestrate.consensys.net/en/stable/) for nonce management. @@ -128,5 +128,5 @@ You can manage private nonces in multiple ways: !!! tip The [web3js-quorum library includes an example](https://github.com/ConsenSys/web3js-quorum/blob/9a0f9eb1b91a4a0d93801f77782b509ae2e7314c/example/concurrentPrivateTransactions/concurrentPrivateTransactions.js) - of nonce management when [sending concurrent private transactions](../../HowTo/Send-Transactions/Concurrent-Private-Transactions.md). + of nonce management when [sending concurrent private transactions](../../../how-to/send-transactions/concurrent-private-transactions.md). The example calculates the correct nonces for the private transactions and PMTs outside of Besu. diff --git a/docs/Concepts/Privacy/Private-Transaction-Processing.md b/docs/private-networks/concepts/privacy/private-transactions/processing.md similarity index 76% rename from docs/Concepts/Privacy/Private-Transaction-Processing.md rename to docs/private-networks/concepts/privacy/private-transactions/processing.md index 98f182a0..74871133 100644 --- a/docs/Concepts/Privacy/Private-Transaction-Processing.md +++ b/docs/private-networks/concepts/privacy/private-transactions/processing.md @@ -2,7 +2,7 @@ description: Private transaction processing --- -# Processing private transactions +# Private transaction processing !!! warning @@ -10,22 +10,22 @@ description: Private transaction processing Read our [Orion to Tessera migration guide](https://docs.orion.consensys.net/en/latest/Tutorials/Migrating-from-Orion-to-Tessera/) and about all the [new Tessera features](https://consensys.net/blog/quorum/tessera-the-privacy-manager-of-choice-for-consensys-quorum-networks). -Processing [private transactions](Private-Transactions.md) involves the following: +Processing [private transactions](index.md) involves the following: * **Precompiled contract**: A smart contract compiled from the source language to EVM bytecode and stored by an Ethereum node for later execution. * **Privacy marker transaction (PMT)**: A public Ethereum transaction with a payload of the enclave key. The enclave key is a pointer to the private transaction in Tessera. - The `to` attribute of the PMT is the [address of the privacy precompiled contract](../../Reference/API-Methods.md#priv_getprivacyprecompileaddress). + The `to` attribute of the PMT is the [address of the privacy precompiled contract](../../../reference/api/index.md#priv_getprivacyprecompileaddress). The PMT is [signed with a random key or the key specified on the command line]. Private transaction processing is illustrated and described in the following diagram. -![Processing Private Transactions](../../images/PrivateTransactionProcessing.png) +![Processing Private Transactions](../../../../images/PrivateTransactionProcessing.png) -1. Submit a private transaction using [`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction). +1. Submit a private transaction using [`eea_sendRawTransaction`](../../../reference/api/index.md#eea_sendrawtransaction). The signed transaction includes transaction parameters specific to private transactions, including: * `privateFor` or `privacyGroupId`, which specifies the list of recipients. @@ -49,13 +49,13 @@ Private transaction processing is illustrated and described in the following dia !!! tip If you want to sign the PMT outside of Besu, use - [`priv_distributeRawTransaction`](../../HowTo/Send-Transactions/Creating-Sending-Private-Transactions.md#priv_distributerawtransaction) - instead of [`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction). + [`priv_distributeRawTransaction`](../../../how-to/send-transactions/private-transactions.md#priv_distributerawtransaction) + instead of [`eea_sendRawTransaction`](../../../reference/api/index.md#eea_sendrawtransaction). 1. Besu mines the PMT into a block and the PMT is distributed to all Ethereum nodes in the network. 1. The Mainnet Transaction Processor processes the PMT in the same way as any other public transaction. - On nodes containing the [privacy precompile contract](../../Reference/API-Methods.md#priv_getprivacyprecompileaddress) + On nodes containing the [privacy precompile contract](../../../reference/api/index.md#priv_getprivacyprecompileaddress) specified in the `to` attribute of the PMT, the Mainnet Transaction Processor passes the PMT to the privacy precompile contract. @@ -75,12 +75,13 @@ Private transaction processing is illustrated and described in the following dia !!! important * We recommend using a network with a consensus mechanism supporting transaction finality. For example, - [IBFT 2.0](../../HowTo/Configure/Consensus-Protocols/IBFT.md). - * Tessera must be [highly available and run in a separate instance to Besu](../../HowTo/Use-Privacy/Run-Tessera-With-Besu.md). + [IBFT 2.0](../../../how-to/configure/consensus/ibft.md). + * Tessera must be [highly available and run in a separate instance to Besu](../../../how-to/use-privacy/tessera.md). - Using private transactions with [pruning](../Pruning.md) or [fast sync](../../Reference/CLI/CLI-Syntax.md#sync-mode) + Using private transactions with [pruning] or [fast sync](../../../../public-networks/reference/cli/options.md#sync-mode) is not supported. -[signed with a random key or the key specified on the command line]: ../../HowTo/Use-Privacy/Sign-Privacy-Marker-Transactions.md -[highly available and run in a separate instance to Besu]: ../../HowTo/Use-Privacy/Run-Tessera-With-Besu.md +[signed with a random key or the key specified on the command line]: ../../../how-to/use-privacy/sign-pmts.md +[highly available and run in a separate instance to Besu]: ../../../how-to/use-privacy/tessera.md +[pruning]: ../../../../public-networks/concepts/data-storage-formats.md diff --git a/docs/HowTo/Get-Started/Installation-Options/Install-Binaries.md b/docs/private-networks/get-started/install/binary-distribution.md similarity index 100% rename from docs/HowTo/Get-Started/Installation-Options/Install-Binaries.md rename to docs/private-networks/get-started/install/binary-distribution.md diff --git a/docs/private-networks/get-started/install/index.md b/docs/private-networks/get-started/install/index.md new file mode 100644 index 00000000..ea314a24 --- /dev/null +++ b/docs/private-networks/get-started/install/index.md @@ -0,0 +1,29 @@ +--- +title: Installation options +description: Options for getting started with Hyperledger Besu +--- + +# Options for getting started + +## New to Hyperledger Besu? + +Get started with the [Developer Quickstart](../../../private-networks/tutorials/quickstart.md). +Use the quickstart to rapidly generate local blockchain networks. + +## Installation options + +* [Docker image](run-docker-image.md) +* [Binaries](binary-distribution.md) + +## Build from source + +If you want to use the latest development version of Hyperledger Besu or a specific commit, +build from source. Otherwise, use the [binary] or [Docker image] for more stable +versions. + +View the [Hyperledger Wiki] for instructions to install Hyperledger Besu from source. + + +[Hyperledger Wiki]: https://wiki.hyperledger.org/display/BESU/Building+from+source +[binary]: binary-distribution.md +[Docker image]: run-docker-image.md diff --git a/docs/private-networks/get-started/install/run-docker-image.md b/docs/private-networks/get-started/install/run-docker-image.md new file mode 100644 index 00000000..4edb0a3f --- /dev/null +++ b/docs/private-networks/get-started/install/run-docker-image.md @@ -0,0 +1,138 @@ +--- +description: Run Hyperledger Besu using the official docker image +--- + +# Run Besu from a Docker image + +Hyperledger Besu provides a Docker image to run a Besu node in a Docker container. + +Use this Docker image to run a single Besu node without installing Besu. + +## Prerequisites + +* [Docker](https://docs.docker.com/install/) + +* MacOS or Linux + +!!! important + + The Docker image does not run on Windows. + +## Default node for Mainnet + +To run a Besu node in a container connected to the Ethereum Mainnet: + +```bash +docker run hyperledger/besu:latest +``` + +!!! note + + https://hub.docker.com/r/hyperledger/besu/tags lists the available tags for the image. + + If you previously pulled `latest`, Docker runs the cached version. + + To ensure your image is up to date, pull the `latest` version again using `docker pull hyperledger/besu:latest`. + +## Expose ports + +Expose ports for P2P discovery, GraphQL, metrics, and HTTP and WebSocket JSON-RPC. You need +to expose the ports to use the default ports or the ports specified using +[`--rpc-http-port`](../../../public-networks/reference/cli/options.md#rpc-http-port), +[`--p2p-port`](../../../public-networks/reference/cli/options.md#p2p-port), +[`--rpc-ws-port`](../../../public-networks/reference/cli/options.md#rpc-ws-port), +[`--metrics-port`](../../../public-networks/reference/cli/options.md#metrics-port), +[`--graphql-http-port`](../../../public-networks/reference/cli/options.md#graphql-http-port), and +[`--metrics-push-port`](../../../public-networks/reference/cli/options.md#metrics-push-port) options. + +To run Besu exposing local ports for access: + +```bash +docker run -p :8545 -p :8546 -p :30303 hyperledger/besu:latest --rpc-http-enabled --rpc-ws-enabled +``` + +!!! note + + The examples on this page expose TCP ports only. + To expose UDP ports, specify `/udp` at the end of the argument for the `-p` Docker subcommand option: + + ```bash + docker run -p :/udp + ``` + + See the [`docker run -p` documentation](https://docs.docker.com/engine/reference/commandline/run/#publish-or-expose-port--p---expose). + +!!! example + + To enable JSON-RPC HTTP calls to `127.0.0.1:8545` and P2P discovery on `127.0.0.1:13001`: + + ```bash + docker run -p 8545:8545 -p 13001:30303 hyperledger/besu:latest --rpc-http-enabled + ``` + +## Start Besu + +!!! important + + Don't mount a volume at the default data path (`/opt/besu`). Mounting a volume at the default + data path interferes with the operation of Besu and prevents Besu from safely launching. + + To run a node that maintains the node state (key and database), + [`--data-path`](../../../public-networks/reference/cli/options.md#data-path) must be set to a location other + than `/opt/besu` and a storage volume mounted at that location. + + When running in a Docker container, [`--nat-method`](../../../public-networks/how-to/connect/specify-nat.md) + must be set to `DOCKER` or `AUTO` (default). Don't set + [`--nat-method`](../../../public-networks/how-to/connect/specify-nat.md) to `NONE` or `UPNP`. + +You can specify +[Besu environment variables](../../../public-networks/reference/cli/options.md#besu-environment-variables) with the +Docker image instead of the command line options. + +!!! example + + ```bash + docker run -p 30303:30303 -p 8545:8545 -e BESU_RPC_HTTP_ENABLED=true -e BESU_NETWORK=goerli hyperledger/besu:latest + ``` + +### Run a node for testing + +To run a node that mines blocks at a rate suitable for testing purposes with WebSockets enabled: + +```bash +docker run -p 8546:8546 --mount type=bind,source=/,target=/var/lib/besu hyperledger/besu:latest --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-ws-enabled --network=dev --data-path=/var/lib/besu +``` + +### Run a node on Rinkeby testnet + +To run a node on Rinkeby: + +```bash +docker run -p 30303:30303 --mount type=bind,source=/,target=/var/lib/besu hyperledger/besu:latest --network=rinkeby --data-path=/var/lib/besu +``` + +### Run a node on Ethereum Mainnet + +To run a node on Ethereum Mainnet with the HTTP JSON-RPC service enabled: + +```bash +docker run -p 8545:8545 --mount type=bind,source=/,target=/var/lib/besu -p 30303:30303 hyperledger/besu:latest --rpc-http-enabled --data-path=/var/lib/besu +``` + +## Stop Besu and clean up resources + +When done running nodes, you can shut down the node container without deleting resources or you can +delete the container after stopping it. Run `docker container ls` and `docker volume ls` to get the +container and volume names. + +To stop a container: + +```bash +docker stop +``` + +To delete a container: + +```bash +docker rm +``` diff --git a/docs/private-networks/get-started/start-node.md b/docs/private-networks/get-started/start-node.md new file mode 100644 index 00000000..6b4b3cb5 --- /dev/null +++ b/docs/private-networks/get-started/start-node.md @@ -0,0 +1,222 @@ +--- +description: Starting Hyperledger Besu +--- + +# Start Besu + +Use the [`besu`](../reference/cli/options.md) command with the required command line options +to start a node. Alternatively, use the [launcher](#besu-launcher) to start Besu interactively +with the most common options. + +## Prerequisites + +[Besu installed](install/binary-distribution.md) + +## Local block data + +When connecting to a network other than the network previously connected to, you must either delete +the local block data or use the [`--data-path`](../../public-networks/reference/cli/options.md#data-path) option +to specify a different data directory. + +To delete the local block data, delete the `database` directory in the +`besu/build/distribution/besu-` directory. + +## Genesis configuration + +Besu specifies the genesis configuration, and sets the network ID and bootnodes when connecting to +[Ropsten](#run-a-node-on-ropsten-testnet), [Rinkeby](#run-a-node-on-rinkeby-testnet), +[Goerli](#run-a-node-on-goerli-testnet), [Kiln](#run-a-node-on-kiln-testnet), +[Sepolia](#run-a-node-on-sepolia-testnet), and [Mainnet](#run-a-node-on-ethereum-mainnet). + +When you specify [`--network=dev`](../../public-networks/reference/cli/options.md#network), Besu uses the +development mode genesis configuration with a fixed low difficulty. A node started with +[`--network=dev`](../../public-networks/reference/cli/options.md#network) has an empty bootnodes list by +default. + +The genesis files defining the genesis configurations are in the +[Besu source files](https://github.com/hyperledger/besu/tree/master/config/src/main/resources). + +To define a genesis configuration, create a genesis file (for example, `genesis.json`) and specify +the file using the [`--genesis-file`](../../public-networks/reference/cli/options.md#genesis-file) option. + +## Syncing and storage + +By default, Besu syncs to the current state of the blockchain using +[fast sync](../../public-networks/how-to/connect/sync-node.md#fast-synchronization) in: + +- Networks specified using [`--network`](../../public-networks/reference/cli/options.md#network) except for the `dev` + development network. +- Ethereum Mainnet. + +We recommend using [snap sync](../../public-networks/how-to/connect/sync-node.md#snap-synchronization) for a faster sync, by starting Besu +with [`--sync-mode=X_SNAP`](../../public-networks/reference/cli/options.md#sync-mode). + +By default, Besu stores data in the [Forest of Tries](../../public-networks/concepts/data-storage-formats.md#forest-of-tries) format. +We recommend using [Bonsai Tries](../../public-networks/concepts/data-storage-formats.md#bonsai-tries) for lower storage requirements, +by starting Besu with [`--data-storage-format=BONSAI`](../../public-networks/reference/cli/options.md#data-storage-format). + +## Confirm node is running + +If you started Besu with the +[`--rpc-http-enabled`](../../public-networks/reference/cli/options.md#rpc-http-enabled) option, use +[cURL](https://curl.haxx.se/) to call [JSON-RPC API methods](../reference/api/index.md) to +confirm the node is running. + +!!!example + + * `eth_chainId` returns the chain ID of the network. + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}' localhost:8545 + ``` + + * `eth_syncing` returns the starting, current, and highest block. + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' localhost:8545 + ``` + + For example, after connecting to Mainnet, `eth_syncing` will return something similar to: + + ```json + { + "jsonrpc" : "2.0", + "id" : 1, + "result" : { + "startingBlock" : "0x0", + "currentBlock" : "0x2d0", + "highestBlock" : "0x66c0" + } + } + ``` + +## Run a node for testing + +To run a node that mines blocks at a rate suitable for testing purposes: + +```bash +besu --network=dev --miner-enabled --miner-coinbase=0xfe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins="all" --host-allowlist="*" --rpc-ws-enabled --rpc-http-enabled --data-path=/tmp/tmpDatdir +``` + +You can also use the following [configuration file](../../public-networks/how-to/configuration-file.md) +on the command line to start a node with the same options as above: + +```toml +network="dev" +miner-enabled=true +miner-coinbase="0xfe3b557e8fb62b89f4916b721be55ceb828dbd73" +rpc-http-cors-origins=["all"] +host-allowlist=["*"] +rpc-ws-enabled=true +rpc-http-enabled=true +data-path="/tmp/tmpdata-path" +``` + +!!! caution + + The following settings are a security risk in production environments: + + * Enabling the HTTP JSON-RPC service + ([`--rpc-http-enabled`](../../public-networks/reference/cli/options.md#rpc-http-enabled)) and setting + [`--rpc-http-host`](../../public-networks/reference/cli/options.md#rpc-http-host) to 0.0.0.0 exposes the + RPC connection on your node to any remote connection. + * Setting [`--host-allowlist`](../../public-networks/reference/cli/options.md#host-allowlist) to `"*"` + allows JSON-RPC API access from any host. + * Setting + [`--rpc-http-cors-origins`](../../public-networks/reference/cli/options.md#rpc-http-cors-origins) to + `"all"` or `"*"` allows cross-origin resource sharing (CORS) access from any domain. + +## Run a node on Ropsten testnet + +To run a node on Ropsten: + +```bash +besu --network=ropsten +``` + +To run a node on Ropsten with the HTTP JSON-RPC service enabled and allow Remix to access the node: + +```bash +besu --network=ropsten --rpc-http-enabled --rpc-http-cors-origins "http://remix.ethereum.org" +``` + +## Run a node on Rinkeby testnet + +To run a node on Rinkeby specifying a data directory: + +```bash +besu --network=rinkeby --data-path=/ +``` + +Where `` and `` are the path and directory to save the Rinkeby chain data +to. + +## Run a node on Goerli testnet + +To run a node on [Goerli](https://github.com/goerli/testnet) specifying a data directory: + +```bash +besu --network=goerli --data-path=/ +``` + +Where `` and `` are the path and directory to save the Goerli chain data to. + +## Run a node on Sepolia testnet + +To run a node on [Sepolia](https://github.com/goerli/sepolia) specifying a data directory: + +```bash +besu --network=sepolia --data-path=/ +``` + +Where `` and `` are the path and directory to save the Sepolia chain data +to. + +## Run a node on Ethereum Mainnet + +To run a node on the Ethereum Mainnet: + +```bash +besu +``` + +To run a node on Mainnet with the HTTP JSON-RPC service enabled and available for localhost only: + +```bash +besu --rpc-http-enabled +``` + +## Besu launcher + +Use the Besu launcher to interactively configure and start a node with the most common options. The +launcher asks a series of questions and generates a [configuration file](../../public-networks/how-to/configuration-file.md). + +To run the Besu launcher: + +```bash +besu --Xlauncher +``` + +Answer each question, or press ++Enter++ to accept the default value. + +```bash +? Which Ethereum network would you like to use ? rinkeby +? Which synchronization mode? fast +? Do you want to enable pruning? no +? What is the data directory ? /Users/me/besu +? Do you want to enable the JSON-RPC HTTP service ? yes +? Do you want to configure the JSON-RPC options now ? yes +? What is the JSON RPC HTTP host address ? 127.0.0.1 +? What is the JSON RPC HTTP port ? 8545 +? Select the list of APIs to enable on JSON-RPC HTTP service [eth, net, web3] +? Do you want to enable the JSON-RPC Websocket service ? no +? Do you want to enable GraphQL functionality ? no +? Do you want to use Ethstats ? no +? Do you want to enable NAT ? no +? Do you want to enable mining ? no +``` + +If a configuration file is already present in the directory where the command is executed, +Besu will start and use the values in the configuration file. To force the launcher to interact +during a restart, use the `--Xlauncher-force` option, or delete the configuration +file. diff --git a/docs/HowTo/Get-Started/System-Requirements/System-Requirements-Private.md b/docs/private-networks/get-started/system-requirements.md similarity index 75% rename from docs/HowTo/Get-Started/System-Requirements/System-Requirements-Private.md rename to docs/private-networks/get-started/system-requirements.md index e341d4df..02586df3 100644 --- a/docs/HowTo/Get-Started/System-Requirements/System-Requirements-Private.md +++ b/docs/private-networks/get-started/system-requirements.md @@ -3,27 +3,24 @@ title: Hyperledger Besu system requirements description: System requirements to sync and run Besu --- -# System requirements for private networks - -A Hyperledger Besu private network is a network not connected to Ethereum Mainnet or an Ethereum testnet. -Private networks typically use a different [chain ID](../../../Concepts/NetworkID-And-ChainID.md) and -[consensus protocol](../../../Concepts/Consensus-Protocols/Overview-Consensus.md). -Participation in private networks is typically restricted in some way, so the volume of traffic is -much lower than Mainnet, resulting in lower system requirements. +# System requirements Private network system requirements depend on many factors, including: * Size of the world state for the network. * Number of transactions submitted to the network. -* [Block gas limit](../../../Reference/Config-Items.md#genesis-block-parameters). -* Number and complexity of [JSON-RPC](../../Interact/APIs/Using-JSON-RPC-API.md), - [PubSub](../../Interact/APIs/RPC-PubSub.md), or [GraphQL](../../Interact/APIs/GraphQL.md) queries +* [Block gas limit](../../public-networks/reference/genesis-items.md#genesis-block-parameters). +* Number and complexity of [JSON-RPC](../../public-networks/how-to/use-besu-api/json-rpc.md), + [PubSub](../../public-networks/how-to/use-besu-api/rpc-pubsub.md), or [GraphQL](../../public-networks/how-to/use-besu-api/graphql.md) queries handled by the node. +Participation in private networks is typically restricted in some way, so the volume of traffic is +much lower than on Mainnet, resulting in lower system requirements. + ## Determining system requirements To determine system requirements, check CPU and disk space requirements using -[Prometheus](../../Monitor/Metrics.md#monitor-node-performance-using-prometheus). Grafana provides a +[Prometheus](../../public-networks/how-to/monitor/metrics.md). Grafana provides a [sample dashboard](https://grafana.com/grafana/dashboards/10273) for Besu. ## Java Virtual Machine size @@ -50,7 +47,7 @@ We recommend you create a VM with the following attributes: * (Optional) You can create a shared directory to copy block files or genesis files from the host computer to the VM. For details on how to create a shared directory, see "Share Folders" in the [Oracle VirtualBox documentation]. - + ## Disk type Use [local SSD storage](https://cloud.google.com/compute/docs/disks) for high throughput nodes (validators and RPC nodes). diff --git a/docs/HowTo/Backup/Backup.md b/docs/private-networks/how-to/backup.md similarity index 78% rename from docs/HowTo/Backup/Backup.md rename to docs/private-networks/how-to/backup.md index 7ce305f8..ba6f2f6d 100644 --- a/docs/HowTo/Backup/Backup.md +++ b/docs/private-networks/how-to/backup.md @@ -2,7 +2,7 @@ description: Backing up and restoring Besu --- -# Backups +# Backup and restore Besu In a decentralized blockchain, data replicates between nodes so it's not lost. But backing up configuration and data ensures a smoother recovery from corrupted data or other failures. @@ -17,12 +17,12 @@ file under source control. If installed locally, the default data location is the Besu installation directory. We recommend mounting a -[separate volume to store data](../Get-Started/Installation-Options/Run-Docker-Image.md#starting-besu). Use the -[`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path) command line option to pass the path +[separate volume to store data](../get-started/install/run-docker-image.md). Use the +[`--data-path`](../../public-networks/reference/cli/options.md#data-path) command line option to pass the path to Besu. The default data location is the Besu installation directory, or `/opt/besu/database` if using the -[Besu Docker image](../Get-Started/Installation-Options/Run-Docker-Image.md). +[Besu Docker image](../get-started/install/run-docker-image.md). Having some data reduces the time to synchronize a new node. You can perform periodic backups of the data directory and send the data to your preferred backup mechanism. For example, `cron` job and @@ -46,10 +46,10 @@ If log messages signify a corrupt database, the cleanest way to recover is: 1. Restore the data from a [previous backup](#data-backups). 1. Restart the node. -## Finding peers after restarting +## Find peers after restarting The process for finding peers after restarting is the same as for [finding peers after upgrading and restarting]. -[finding peers after upgrading and restarting]: ../Upgrade/Upgrade-Node.md#finding-peers-on-restarting +[finding peers after upgrading and restarting]: ../../public-networks/how-to/upgrade-node.md#find-peers-on-restarting diff --git a/docs/HowTo/Configure/Block-Proposal-Permissioning.md b/docs/private-networks/how-to/configure/block-proposal-permissioning.md similarity index 95% rename from docs/HowTo/Configure/Block-Proposal-Permissioning.md rename to docs/private-networks/how-to/configure/block-proposal-permissioning.md index bedd46d7..ed0a62e9 100644 --- a/docs/HowTo/Configure/Block-Proposal-Permissioning.md +++ b/docs/private-networks/how-to/configure/block-proposal-permissioning.md @@ -10,7 +10,7 @@ description: Block proposal permissioning Block proposal permissioning is an early access feature, and functionality and options may be updated between releases. -You can configure [block proposal permissioning](../../Concepts/PKI.md#block-proposal-permissioning) +You can configure [block proposal permissioning](../../concepts/pki.md#block-proposal-permissioning) to ensure only authorized validator nodes can propose blocks in the network. Use certificates issued by a trusted authority to ensure validators are authorized to propose blocks. @@ -20,7 +20,7 @@ Use certificates issued by a trusted authority to ensure validators are authoriz **Prerequisites**: * A configured network. For example, - [see steps 1 to 5 in the QBFT tutorial](../../Tutorials/Private-Network/Create-QBFT-Network.md). + [see steps 1 to 5 in the QBFT tutorial](../../tutorials/qbft.md). * A keystore containing the certificate and key for each network node. * A truststore containing all the trusted certificates for the network. @@ -252,5 +252,5 @@ Text file containing the password to unlock the truststore file. PKI truststore type. Valid options are `JKS` and `PKCS12`. The default is `JKS`. -[QBFT consensus protocol]: ../../HowTo/Configure/Consensus-Protocols/QBFT.md +[QBFT consensus protocol]: /Consensus-Protocols/QBFT.md [certificate revocation list (CRL)]: https://www.securew2.com/blog/certificate-revocation-crl-explained diff --git a/docs/private-networks/how-to/configure/bootnodes.md b/docs/private-networks/how-to/configure/bootnodes.md new file mode 100644 index 00000000..cc8a0178 --- /dev/null +++ b/docs/private-networks/how-to/configure/bootnodes.md @@ -0,0 +1,89 @@ +--- +description: Configuring bootnodoes +--- + +# Configure bootnodes + +You can use bootnodes to initially discover peers. +Bootnodes are regular nodes used to discover other nodes. + +In private networks for development or testing purposes, specify at least one bootnode. + +In production networks, [configure two or more nodes as bootnodes](#configure-bootnodes-in-a-production-network). + +!!! tip + + Bootnodes and static nodes are parallel methods for finding peers. Depending on your use case, + you can use only bootnodes, only static nodes, or both bootnodes and statics nodes. + + To find peers, configure one or more bootnodes. To configure a specific set + of peer connections, use [static nodes](../../../public-networks/how-to/connect/static-nodes.md). + +!!! note "Mainnet and public testnets" + + For Mainnet and the Rinkeby, Ropsten, Sepolia, and Goerli testnets, Hyperledger Besu has an + internal list of enode URLs and uses this list automatically when you specify the + [`--network`](../../../public-networks/reference/cli/options.md#network) option. + +## Specify a bootnode + +To start a node, specify a bootnode [enode](../../../public-networks/concepts/node-keys.md) for P2P discovery, +using the [`--bootnodes`](../../../public-networks/reference/cli/options.md#bootnodes) option. + +!!! example + + ```bash + besu --genesis-file=privateNetworkGenesis.json --data-path=nodeDataPath --bootnodes=enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb99bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@127.0.0.1:30303 + ``` + +The default host and port advertised to other peers for P2P discovery is `127.0.0.1:30303`. To +specify a different host or port, use the +[`--p2p-host`](../../../public-networks/reference/cli/options.md#p2p-host) and +[`--p2p-port`](../../../public-networks/reference/cli/options.md#p2p-port) options. + +By default, peer discovery listens on all available network interfaces. If the device Besu is +running on must bind to a specific network interface, specify the interface using the +[`--p2p-interface`](../../../public-networks/reference/cli/options.md#p2p-interface) option. + +## Configure bootnodes in a production network + +A network must have at least one operating bootnode. To allow for continuity in the event of +failure, configure two or more bootnodes in a production network. + +We don't recommend putting bootnodes behind a load balancer because the +[enode](../../../public-networks/concepts/node-keys.md#enode-url) relates to the node public key, IP address, and +discovery ports. Any changes to a bootnode enode prevents other nodes from being able to establish +a connection with the bootnode. This is why we recommend putting more bootnodes on the network +itself. + +To ensure a bootnode enode doesn't change when recovering from a complete bootnode failure: + +1. Create the [node key pair](../../../public-networks/concepts/node-keys.md) (that is, the private and public key) + before starting the bootnode. +1. When creating bootnodes in the cloud (for example, AWS and Azure), attempt to assign a static IP + address to them. If your network is: + + * Publicly accessible, assign an elastic IP. + * Internal only, specify a private IP address when you create the instance and record this IP + address. + +We recommend storing the bootnode configuration under source control. + +To allow for failure, specify all bootnodes on the command line (even to the bootnodes themselves). + +!!! tip + + Having each bootnode list the other bootnodes increases the speed of discovery. + Nodes ignore their own enode in the bootnodes list so it isn't required to specify different + bootnode lists to the bootnodes themselves. + +## Add and remove bootnodes + +Adding new bootnodes is a similar process to creating bootnodes. After creating the bootnodes and +adding them to the network, update the [`--bootnodes`](../../../public-networks/reference/cli/options.md#bootnodes) +command line option for each node to include the new bootnodes. + +When adding bootnodes, you don't need to restart running nodes. By updating the +[`--bootnodes`](../../../public-networks/reference/cli/options.md#bootnodes) option, the next time you restart the +nodes (for example, when [upgrading](../../../public-networks/how-to/upgrade-node.md)), the nodes +connect to the new bootnodes. diff --git a/docs/HowTo/Troubleshoot/Add-Validators-Without-Voting.md b/docs/private-networks/how-to/configure/consensus/add-validators-without-voting.md similarity index 92% rename from docs/HowTo/Troubleshoot/Add-Validators-Without-Voting.md rename to docs/private-networks/how-to/configure/consensus/add-validators-without-voting.md index 57ffbc14..3510c0a5 100644 --- a/docs/HowTo/Troubleshoot/Add-Validators-Without-Voting.md +++ b/docs/private-networks/how-to/configure/consensus/add-validators-without-voting.md @@ -4,7 +4,7 @@ description: How to add or remove validators without voting # Add and remove validators without voting -[QBFT](../Configure/Consensus-Protocols/QBFT.md) or [IBFT 2.0](../Configure/Consensus-Protocols/IBFT.md) network +[QBFT](qbft.md) or [IBFT 2.0](ibft.md) network conditions might not allow voting to change validators. For example, if a majority of the current validators are no longer participating in the network, a vote to add or remove validators won't be successful. @@ -13,8 +13,8 @@ You can bypass voting and specify new validators using a transition in the genes !!! warning - In most cases, add or remove validators - [by voting or smart contract for QBFT](../Configure/Consensus-Protocols/QBFT.md#add-and-remove-validators); - or [by voting for IBFT 2.0](../Configure/Consensus-Protocols/IBFT.md#add-and-remove-validators). + [by voting or smart contract for QBFT](qbft.md#add-and-remove-validators); + or [by voting for IBFT 2.0](ibft.md#add-and-remove-validators). Use transitions only when voting isn't possible. Using transitions requires coordinating a rolling update of all the nodes in order to pick up the configuration at the correct block height. @@ -145,8 +145,8 @@ To add or remove validators without voting: 1. Restart all nodes in the network using the updated genesis file. You can make a rolling update of the nodes, as long as they're all up before the transition block is processed. 1. To verify the changes after the transition block, call - [`qbft_getValidatorsByBlockNumber`](../../Reference/API-Methods.md#qbft_getvalidatorsbyblocknumber) or - [`ibft_getValidatorsByBlockNumber`](../../Reference/API-Methods.md#ibft_getvalidatorsbyblocknumber), + [`qbft_getValidatorsByBlockNumber`](../../../reference/api/index.md#qbft_getvalidatorsbyblocknumber) or + [`ibft_getValidatorsByBlockNumber`](../../../reference/api/index.md#ibft_getvalidatorsbyblocknumber), specifying `latest`. !!! caution @@ -157,13 +157,13 @@ To add or remove validators without voting: ## Override smart contract validators When using -[QBFT contract validator selection](../Configure/Consensus-Protocols/QBFT.md#add-and-remove-validators-using-a-smart-contract), +[QBFT contract validator selection](qbft.md#add-and-remove-validators-using-a-smart-contract), if network conditions require it, you can bypass the smart contract and specify new validators in the genesis file. For example, you lose quorum for your current list of contract validators, and you can't perform a transaction to vote more in. This requires temporarily -[switching to block header validator selection mode](../Configure/Consensus-Protocols/QBFT.md#swap-validator-management-methods). +[switching to block header validator selection mode](qbft.md#swap-validator-management-methods). To bypass the smart contract and specify new validators: diff --git a/docs/HowTo/Configure/Consensus-Protocols/Clique.md b/docs/private-networks/how-to/configure/consensus/clique.md similarity index 77% rename from docs/HowTo/Configure/Consensus-Protocols/Clique.md rename to docs/private-networks/how-to/configure/consensus/clique.md index 15646d90..a1d763ac 100644 --- a/docs/HowTo/Configure/Consensus-Protocols/Clique.md +++ b/docs/private-networks/how-to/configure/consensus/clique.md @@ -4,9 +4,9 @@ path: blob/master/config/src/main/resources/ source: rinkeby.json --- -# Clique +# Configure Clique consensus -Besu implements the [Clique](https://eips.ethereum.org/EIPS/eip-225) proof of authority (PoA) [consensus protocol](../../../Concepts/Consensus-Protocols/Overview-Consensus.md). +Besu implements the [Clique](https://eips.ethereum.org/EIPS/eip-225) proof of authority (PoA) [consensus protocol](index.md). The Rinkeby and Goerli testnets uses Clique and private networks can also use Clique. !!! warning @@ -19,11 +19,11 @@ In Clique networks, approved accounts, known as signers, validate transactions a take turns to create the next block. Existing signers propose and vote to [add or remove signers](#add-and-remove-signers). -You can [create a private network using Clique](../../../Tutorials/Private-Network/Create-Private-Clique-Network.md). +You can [create a private network using Clique](../../../tutorials/clique.md). ## Genesis file -To use Clique in a private network, Besu requires a Clique [genesis file](../Genesis-File.md). When connecting to Rinkeby, +To use Clique in a private network, Besu requires a Clique [genesis file](../../../../public-networks/concepts/genesis-file.md). When connecting to Rinkeby, Besu uses the [`rinkeby.json`](https://github.com/hyperledger/besu/blob/750580dcca349d22d024cc14a8171b2fa74b505a/config/src/main/resources/rinkeby.json) genesis file in the `/besu/config/src/main/resources` directory. @@ -75,15 +75,15 @@ The `extraData` property consists of: !!! example "One initial signer" - ![One Initial Signer](../../../images/CliqueOneIntialSigner.png) + ![One Initial Signer](../../../../images/CliqueOneIntialSigner.png) !!! example "Two initial signers" - ![Two Initial Signers](../../../images/CliqueTwoIntialSigners.png) + ![Two Initial Signers](../../../../images/CliqueTwoIntialSigners.png) ### Post-Merge configuration -After [The Merge](../../../Concepts/Merge.md), the following block fields are modified or deprecated. +After [The Merge](../../../../public-networks/concepts/the-merge.md), the following block fields are modified or deprecated. Their fields **must** contain only the constant values from the following chart. | Field | Constant value | Comment | @@ -99,34 +99,34 @@ Additionally, [`extraData`](#extra-data) is limited to 32 bytes of vanity data a ## Connect to a Clique network To connect to the Rinkeby testnet, start Besu with the -[`--network=rinkeby`](../../../Reference/CLI/CLI-Syntax.md#network) command line option. To start a +[`--network=rinkeby`](../../../../public-networks/reference/cli/options.md#network) command line option. To start a node on a Clique private network, use the -[`--genesis-file`](../../../Reference/CLI/CLI-Syntax.md#genesis-file) option to specify the custom +[`--genesis-file`](../../../../public-networks/reference/cli/options.md#genesis-file) option to specify the custom genesis file. ## Add and remove signers Existing signers propose and vote to add or remove validators using the Clique JSON-RPC API methods. -Enable the HTTP interface with [`--rpc-http-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-enabled) or the -WebSocket interface with [`--rpc-ws-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-ws-enabled). +Enable the HTTP interface with [`--rpc-http-enabled`](../../../../public-networks/reference/cli/options.md#rpc-http-enabled) or the +WebSocket interface with [`--rpc-ws-enabled`](../../../../public-networks/reference/cli/options.md#rpc-ws-enabled). The Clique API methods are disabled by default. -To enable them, specify the [`--rpc-http-api`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-api) or -[`--rpc-ws-api`](../../../Reference/CLI/CLI-Syntax.md#rpc-ws-api) option and include `CLIQUE`. +To enable them, specify the [`--rpc-http-api`](../../../../public-networks/reference/cli/options.md#rpc-http-api) or +[`--rpc-ws-api`](../../../../public-networks/reference/cli/options.md#rpc-ws-api) option and include `CLIQUE`. The methods to add or remove signers are: -* [`clique_propose`](../../../Reference/API-Methods.md#clique_propose). -* [`clique_getSigners`](../../../Reference/API-Methods.md#clique_getsigners). -* [`clique_discard`](../../../Reference/API-Methods.md#clique_discard). +* [`clique_propose`](../../../reference/api/index.md#clique_propose). +* [`clique_getSigners`](../../../reference/api/index.md#clique_getsigners). +* [`clique_discard`](../../../reference/api/index.md#clique_discard). To view signer metrics for a specified block range, call -[`clique_getSignerMetrics`](../../../Reference/API-Methods.md#clique_getsignermetrics). +[`clique_getSignerMetrics`](../../../reference/api/index.md#clique_getsignermetrics). ### Add a signer To propose adding a signer to a Clique network, call -[`clique_propose`](../../../Reference/API-Methods.md#clique_propose), specifying the address of the proposed signer and `true`. +[`clique_propose`](../../../reference/api/index.md#clique_propose), specifying the address of the proposed signer and `true`. A majority of signers must execute the call. !!! example "JSON-RPC `clique_propose` request example" @@ -141,7 +141,7 @@ When more than 50% of the existing signers propose adding the signer, with their signer can begin signing blocks. To return a list of signers and confirm the addition of a proposed signer, call -[`clique_getSigners`](../../../Reference/API-Methods.md#clique_getsigners). +[`clique_getSigners`](../../../reference/api/index.md#clique_getsigners). !!! example "JSON-RPC `clique_getSigners` request example" @@ -150,7 +150,7 @@ To return a list of signers and confirm the addition of a proposed signer, call ``` To discard your proposal after confirming the addition of a signer, call -[`clique_discard`](../../../Reference/API-Methods.md#clique_discard) specifying the address of the proposed signer. +[`clique_discard`](../../../reference/api/index.md#clique_discard) specifying the address of the proposed signer. !!! example "JSON-RPC `clique_discard` request example" @@ -161,7 +161,7 @@ To discard your proposal after confirming the addition of a signer, call ### Remove a signer The process for removing a signer from a Clique network is the same as [adding a signer](#add-a-signer), except you -specify `false` as the second parameter of [`clique_propose`](../../../Reference/API-Methods.md#clique_propose). +specify `false` as the second parameter of [`clique_propose`](../../../reference/api/index.md#clique_propose). ### Epoch transition @@ -183,11 +183,11 @@ This may cause large, irresolvable forks in a network. !!! important - We recommend using a more updated consensus protocol such as [IBFT 2.0](IBFT.md) or [QBFT](QBFT.md). + We recommend using a more updated consensus protocol such as [IBFT 2.0](ibft.md) or [QBFT](qbft.md). ## Migrate from Clique to another consensus protocol -To migrate a network using Clique to a consensus protocol suitable for production such as [QBFT](QBFT.md), do one of the +To migrate a network using Clique to a consensus protocol suitable for production such as [QBFT](qbft.md), do one of the following: * Stop the Clique network and start the new network with the state at the time of migration. diff --git a/docs/HowTo/Configure/Consensus-Protocols/IBFT.md b/docs/private-networks/how-to/configure/consensus/ibft.md similarity index 87% rename from docs/HowTo/Configure/Consensus-Protocols/IBFT.md rename to docs/private-networks/how-to/configure/consensus/ibft.md index a4eef84a..22ec29fd 100644 --- a/docs/HowTo/Configure/Consensus-Protocols/IBFT.md +++ b/docs/private-networks/how-to/configure/consensus/ibft.md @@ -2,10 +2,10 @@ description: Hyperledger Besu IBFT 2.0 proof of authority (PoA) consensus protocol implementation --- -# IBFT 2.0 +# Configure IBFT 2.0 consensus -Besu implements the IBFT 2.0 proof of authority (PoA) [consensus protocol](../../../Concepts/Consensus-Protocols/Overview-Consensus.md). -IBFT 2.0 is supported for existing private networks, but [QBFT](QBFT.md) is the recommended enterprise-grade +Besu implements the IBFT 2.0 proof of authority (PoA) [consensus protocol](index.md). +IBFT 2.0 is supported for existing private networks, but [QBFT](qbft.md) is the recommended enterprise-grade consensus protocol for private networks. In IBFT 2.0 networks, approved accounts, known as validators, validate transactions and blocks. @@ -14,7 +14,7 @@ super-majority (greater than or equal to 2/3) of validators must first sign the Existing validators propose and vote to [add or remove validators](#add-and-remove-validators). -You can [create a private network using IBFT](../../../Tutorials/Private-Network/Create-IBFT-Network.md). +You can [create a private network using IBFT](../../../tutorials/ibft/index.md). !!! important @@ -25,11 +25,11 @@ You can [create a private network using IBFT](../../../Tutorials/Private-Network !!! tip You can use a plugin to securely store a validator's key using the - [`--security-module`](../../../Reference/CLI/CLI-Syntax.md#security-module) option. + [`--security-module`](../../../../public-networks/reference/cli/options.md#security-module) option. ## Genesis file -To use IBFT 2.0, Besu requires an IBFT 2.0 [genesis file](../Genesis-File.md). The genesis file defines properties +To use IBFT 2.0, Besu requires an IBFT 2.0 [genesis file](../../../../public-networks/concepts/genesis-file.md). The genesis file defines properties specific to IBFT 2.0. !!! example "Example IBFT 2.0 genesis file" @@ -82,7 +82,7 @@ The properties with specific values in the IBFT 2.0 genesis files are: block identification. To start a node on an IBFT 2.0 private network, use the -[`--genesis-file`](../../../Reference/CLI/CLI-Syntax.md#genesis-file) option to specify the custom +[`--genesis-file`](../../../../public-networks/reference/cli/options.md#genesis-file) option to specify the custom genesis file. ### Extra data @@ -107,7 +107,7 @@ Formally, `extraData` in the genesis block contains #### Generate extra data To generate the `extraData` RLP string for inclusion in the genesis file, use the -[`rlp encode`](../../../Reference/CLI/CLI-Subcommands.md#rlp) Besu subcommand. +[`rlp encode`](../../../../public-networks/reference/cli/subcommands.md#rlp) Besu subcommand. !!! example @@ -117,7 +117,7 @@ To generate the `extraData` RLP string for inclusion in the genesis file, use th Where the `toEncode.json` file contains a list of the initial validators, in ascending order. To write the validator address and copy it to the `toEncode.json` file, use the -[`public-key export-address`](../../../Reference/CLI/CLI-Subcommands.md#export-address) Besu subcommand. +[`public-key export-address`](../../../../public-networks/reference/cli/subcommands.md#export-address) Besu subcommand. For example: !!! example "One initial validator in `toEncode.json` file" @@ -171,7 +171,7 @@ To tune the block timeout for your network deployment: !!! tip - View [`TRACE` logs](../../../Reference/API-Methods.md#admin_changeloglevel) to see round change + View [`TRACE` logs](../../../../public-networks/reference/api/index.md#trace-methods) to see round change log messages. Use a [transition](#transitions) to update the `blockperiodseconds` in an existing network. @@ -180,7 +180,7 @@ Use a [transition](#transitions) to update the `blockperiodseconds` in an existi ### Post-Merge configuration -After [The Merge](../../../Concepts/Merge.md), the following block fields are modified or deprecated. +After [The Merge](../../../../public-networks/concepts/the-merge.md), the following block fields are modified or deprecated. Their fields **must** contain only the constant values from the following chart. | Field | Constant value | Comment | @@ -196,31 +196,31 @@ Additionally, [`extraData`](#extra-data) is limited to 32 bytes of vanity data a ## Add and remove validators Existing validators propose and vote to add or remove validators using the IBFT 2.0 JSON-RPC API methods. -Enable the HTTP interface with [`--rpc-http-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-enabled) or the -WebSocket interface with [`--rpc-ws-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-ws-enabled). +Enable the HTTP interface with [`--rpc-http-enabled`](../../../../public-networks/reference/cli/options.md#rpc-http-enabled) or the +WebSocket interface with [`--rpc-ws-enabled`](../../../../public-networks/reference/cli/options.md#rpc-ws-enabled). The IBFT 2.0 API methods are disabled by default. -To enable them, specify the [`--rpc-http-api`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-api) or -[`--rpc-ws-api`](../../../Reference/CLI/CLI-Syntax.md#rpc-ws-api) option and include `IBFT`. +To enable them, specify the [`--rpc-http-api`](../../../../public-networks/reference/cli/options.md#rpc-http-api) or +[`--rpc-ws-api`](../../../../public-networks/reference/cli/options.md#rpc-ws-api) option and include `IBFT`. The methods to add or remove validators are: -* [`ibft_getPendingVotes`](../../../Reference/API-Methods.md#ibft_getPendingVotes). -* [`ibft_proposeValidatorVote`](../../../Reference/API-Methods.md#ibft_proposeValidatorVote). -* [`ibft_discardValidatorVote`](../../../Reference/API-Methods.md#ibft_discardValidatorVote). +* [`ibft_getPendingVotes`](../../../reference/api/index.md#ibft_getpendingvotes). +* [`ibft_proposeValidatorVote`](../../../reference/api/index.md#ibft_proposevalidatorvote). +* [`ibft_discardValidatorVote`](../../../reference/api/index.md#ibft_discardvalidatorvote). To view validator metrics for a specified block range, use -[`ibft_getSignerMetrics`](../../../Reference/API-Methods.md#ibft_getsignermetrics). +[`ibft_getSignerMetrics`](../../../../public-networks/reference/api/index.md#ibft_getsignermetrics). !!! note If network conditions render it impossible to add and remove validators by voting, you can - [add and remove validators without voting](../../Troubleshoot/Add-Validators-Without-Voting.md). + [add and remove validators without voting](add-validators-without-voting.md). ### Add a validator To propose adding a validator to an IBFT 2.0 network, call -[`ibft_proposeValidatorVote`](../../../Reference/API-Methods.md#ibft_proposevalidatorvote), specifying the address of the +[`ibft_proposeValidatorVote`](../../../reference/api/index.md#ibft_proposevalidatorvote), specifying the address of the proposed validator and `true`. A majority of validators must execute the call. @@ -231,14 +231,14 @@ A majority of validators must execute the call. ``` When the validator proposes the next block, the protocol inserts one proposal received from -[`ibft_proposeValidatorVote`](../../../Reference/API-Methods.md#ibft_proposevalidatorvote) into the block. +[`ibft_proposeValidatorVote`](../../../reference/api/index.md#ibft_proposevalidatorvote) into the block. If blocks include all proposals, subsequent blocks proposed by the validator will not contain a vote. When more than 50% of the existing validators have published a matching proposal, the protocol adds the proposed validator to the validator pool and the validator can begin validating blocks. To return a list of validators and confirm the addition of a proposed validator, use -[`ibft_getValidatorsByBlockNumber`](../../../Reference/API-Methods.md#ibft_getvalidatorsbyblocknumber). +[`ibft_getValidatorsByBlockNumber`](../../../reference/api/index.md#ibft_getvalidatorsbyblocknumber). !!! example "JSON-RPC `ibft_getValidatorsByBlockNumber` request example" @@ -247,7 +247,7 @@ To return a list of validators and confirm the addition of a proposed validator, ``` To discard your proposal after confirming the addition of a validator, call -[`ibft_discardValidatorVote`](../../../Reference/API-Methods.md#ibft_discardvalidatorvote), +[`ibft_discardValidatorVote`](../../../reference/api/index.md#ibft_discardvalidatorvote), specifying the address of the proposed validator. !!! example "JSON-RPC `ibft_discardValidatorVote` request example" @@ -260,7 +260,7 @@ specifying the address of the proposed validator. The process for removing a validator from an IBFT 2.0 network is the same as [adding a validator](#add-a-validator) except you specify `false` as the second parameter of -[`ibft_proposeValidatorVote`](../../../Reference/API-Methods.md#ibft_proposevalidatorvote). +[`ibft_proposeValidatorVote`](../../../reference/api/index.md#ibft_proposevalidatorvote). ### Epoch transition @@ -360,7 +360,7 @@ To update an existing network with a new `blockperiodseconds`: 3. Restart all nodes in the network using the updated genesis file. 4. To verify the changes after the transition block, call - [`ibft_getValidatorsByBlockNumber`](../../../Reference/API-Methods.md#ibft_getvalidatorsbyblocknumber), specifying `latest`. + [`ibft_getValidatorsByBlockNumber`](../../../../public-networks/reference/api/index.md#ibft_getvalidatorsbyblocknumber), specifying `latest`. ### Configure block rewards on an existing network deployment diff --git a/docs/Concepts/Consensus-Protocols/Overview-Consensus.md b/docs/private-networks/how-to/configure/consensus/index.md similarity index 65% rename from docs/Concepts/Consensus-Protocols/Overview-Consensus.md rename to docs/private-networks/how-to/configure/consensus/index.md index cd96ebe4..824af837 100644 --- a/docs/Concepts/Consensus-Protocols/Overview-Consensus.md +++ b/docs/private-networks/how-to/configure/consensus/index.md @@ -6,19 +6,19 @@ description: Besu consensus protocols Besu supports the following consensus protocols: -* [QBFT](../../HowTo/Configure/Consensus-Protocols/QBFT.md) (proof of authority) - The recommended +* [QBFT](qbft.md) (proof of authority) - The recommended enterprise-grade consensus protocol for private networks. -* [IBFT 2.0](../../HowTo/Configure/Consensus-Protocols/IBFT.md) (proof of authority) - Supported for existing private networks. -* [Clique](../../HowTo/Configure/Consensus-Protocols/Clique.md) (proof of authority) - Not recommended for +* [IBFT 2.0](ibft.md) (proof of authority) - Supported for existing private networks. +* [Clique](clique.md) (proof of authority) - Not recommended for production use. - You can [migrate a network using Clique to another consensus protocol](../../HowTo/Configure/Consensus-Protocols/Clique.md#migrate-from-clique-to-another-consensus-protocol). + You can [migrate a network using Clique to another consensus protocol](clique.md#migrate-from-clique-to-another-consensus-protocol). * [Proof of stake](https://docs.teku.consensys.net/en/latest/Concepts/Proof-of-Stake/) - Used on Ethereum Mainnet - post-[Merge](../../Concepts/Merge.md) and can also be used on the [Merge testnet](../../Tutorials/Merge-Testnet.md). + post-[Merge](../../../../public-networks/concepts/the-merge.md) and can also be used on the [Merge testnet](../../../../public-networks/tutorials/merge-testnet.md). * [Ethash](https://ethereum.org/en/developers/docs/consensus-mechanisms/pow/) (proof of work) - Used on Ethereum Mainnet - pre-[Merge](../../Concepts/Merge.md) and can also be used in - [small development networks](../../Tutorials/Private-Network/Create-Private-Network.md). + pre-[Merge](../../../../public-networks/concepts/the-merge.md) and can also be used in + [small development networks](../../../tutorials/ethash.md). -See a [comparison of the proof of authority consensus protocols](Comparing-PoA.md). +See a [comparison of the proof of authority consensus protocols](../../../concepts/poa.md). The `config` property in the genesis file specifies the consensus protocol for a chain. diff --git a/docs/HowTo/Configure/Consensus-Protocols/QBFT.md b/docs/private-networks/how-to/configure/consensus/qbft.md similarity index 93% rename from docs/HowTo/Configure/Consensus-Protocols/QBFT.md rename to docs/private-networks/how-to/configure/consensus/qbft.md index 2ad5cddf..4eea296a 100644 --- a/docs/HowTo/Configure/Consensus-Protocols/QBFT.md +++ b/docs/private-networks/how-to/configure/consensus/qbft.md @@ -2,9 +2,9 @@ description: Hyperledger Besu QBFT proof of authority (PoA) consensus protocol implementation --- -# QBFT +# Configure QBFT consensus -Hyperledger Besu implements the QBFT proof of authority (PoA) [consensus protocol](../../../Concepts/Consensus-Protocols/Overview-Consensus.md). +Hyperledger Besu implements the QBFT proof of authority (PoA) [consensus protocol](index.md). QBFT is the recommended enterprise-grade consensus protocol for private networks. In QBFT networks, approved accounts, known as validators, validate transactions and blocks. @@ -13,7 +13,7 @@ super-majority (greater than or equal to 2/3) of validators must first sign the Existing validators propose and vote to [add or remove validators](#add-and-remove-validators). -You can [create a private network using QBFT](../../../Tutorials/Private-Network/Create-QBFT-Network.md). +You can [create a private network using QBFT](../../../tutorials/qbft.md). !!! important @@ -24,11 +24,11 @@ You can [create a private network using QBFT](../../../Tutorials/Private-Network !!! tip You can use a plugin to securely store a validator's key using the - [`--security-module`](../../../Reference/CLI/CLI-Syntax.md#security-module) option. + [`--security-module`](../../../../public-networks/reference/cli/options.md#security-module) option. ## Genesis file -To use QBFT, define a [genesis file](../Genesis-File.md) that contains the QBFT properties. +To use QBFT, define a [genesis file](../../../../public-networks/concepts/genesis-file.md) that contains the QBFT properties. The genesis file differs depending on the [validator management method](#add-and-remove-validators) you intend to use. @@ -164,7 +164,7 @@ The properties with specific values in the QBFT genesis files are: block identification. To start a node on a QBFT private network, use the -[`--genesis-file`](../../../Reference/CLI/CLI-Syntax.md#genesis-file) option to specify the custom +[`--genesis-file`](../../../../public-networks/reference/cli/options.md#genesis-file) option to specify the custom genesis file. ### Extra data @@ -200,7 +200,7 @@ Formally, `extraData` in the genesis block contains: #### Generate extra data To generate the `extraData` RLP string for inclusion in the genesis file, -use the [`rlp encode`](../../../Reference/CLI/CLI-Subcommands.md#rlp) Besu subcommand. +use the [`rlp encode`](../../../reference/cli/subcommands.md#rlp) Besu subcommand. !!! example @@ -210,7 +210,7 @@ use the [`rlp encode`](../../../Reference/CLI/CLI-Subcommands.md#rlp) Besu subco Where the `toEncode.json` file contains a list of the initial validators, in ascending order. To write the validator address and copy it to the `toEncode.json` file, use the -[`public-key export-address`](../../../Reference/CLI/CLI-Subcommands.md#export-address) Besu +[`public-key export-address`](../../../../public-networks/reference/cli/subcommands.md#export-address) Besu subcommand. For example: !!! example "Initial validators in `toEncode.json` file" @@ -270,7 +270,7 @@ To tune the block timeout for your network deployment: !!! tip - View [`TRACE` logs](../../../Reference/API-Methods.md#admin_changeloglevel) to see round change + View [`TRACE` logs](../../../../public-networks/reference/api/index.md#admin_changeloglevel) to see round change log messages. Use a [transition](#transitions) to update the `blockperiodseconds` in an existing network. @@ -279,7 +279,7 @@ Use a [transition](#transitions) to update the `blockperiodseconds` in an existi ### Post-Merge configuration -After [The Merge](../../../Concepts/Merge.md), the following block fields are modified or deprecated. +After [The Merge](../../../../public-networks/concepts/the-merge.md), the following block fields are modified or deprecated. Their fields **must** contain only the constant values from the following chart. | Field | Constant value | Comment | @@ -311,31 +311,31 @@ method are configured in the genesis file's `storage` section. ### Add and remove validators using block headers -Enable the HTTP interface with [`--rpc-http-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-enabled) or the -WebSockets interface with [`--rpc-ws-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-ws-enabled). +Enable the HTTP interface with [`--rpc-http-enabled`](../../../../public-networks/reference/cli/options.md#rpc-http-enabled) or the +WebSockets interface with [`--rpc-ws-enabled`](../../../../public-networks/reference/cli/options.md#rpc-ws-enabled). The QBFT API methods are disabled by default. -To enable them, specify the [`--rpc-http-api`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-api) or -[`--rpc-ws-api`](../../../Reference/CLI/CLI-Syntax.md#rpc-ws-api) option and include `QBFT`. +To enable them, specify the [`--rpc-http-api`](../../../../public-networks/reference/cli/options.md#rpc-http-api) or +[`--rpc-ws-api`](../../../../public-networks/reference/cli/options.md#rpc-ws-api) option and include `QBFT`. The methods to add or remove validators are: -* [`qbft_getPendingVotes`](../../../Reference/API-Methods.md#qbft_getpendingvotes). -* [`qbft_proposeValidatorVote`](../../../Reference/API-Methods.md#qbft_proposevalidatorvote). -* [`qbft_discardValidatorVote`](../../../Reference/API-Methods.md#qbft_discardvalidatorvote). +* [`qbft_getPendingVotes`](../../../reference/api/index.md#qbft_getpendingvotes). +* [`qbft_proposeValidatorVote`](../../../reference/api/index.md#qbft_proposevalidatorvote). +* [`qbft_discardValidatorVote`](../../../reference/api/index.md#qbft_discardvalidatorvote). To view validator metrics for a specified block range, use -[`qbft_getSignerMetrics`](../../../Reference/API-Methods.md#qbft_getsignermetrics). +[`qbft_getSignerMetrics`](../../../reference/api/index.md#qbft_getsignermetrics). !!! note If network conditions render it impossible to add and remove validators by voting, you can - [add and remove validators without voting](../../Troubleshoot/Add-Validators-Without-Voting.md). + [add and remove validators without voting](add-validators-without-voting.md). #### Add a validator To propose adding a validator, call -[`qbft_proposeValidatorVote`](../../../Reference/API-Methods.md#qbft_proposevalidatorvote), +[`qbft_proposeValidatorVote`](../../../reference/api/index.md#qbft_proposevalidatorvote), specifying the address of the proposed validator and `true`. A majority of validators must execute the call. @@ -346,7 +346,7 @@ the call. ``` When the validator proposes the next block, the protocol inserts one proposal received from -[`qbft_proposeValidatorVote`](../../../Reference/API-Methods.md#qbft_proposevalidatorvote) into the +[`qbft_proposeValidatorVote`](../../../reference/api/index.md#qbft_proposevalidatorvote) into the block. If blocks include all proposals, subsequent blocks proposed by the validator will not contain a vote. @@ -354,7 +354,7 @@ When more than 50% of the existing validators have published a matching proposal adds the proposed validator to the validator pool and the validator can begin validating blocks. To return a list of validators and confirm the addition of a proposed validator, use -[`qbft_getValidatorsByBlockNumber`](../../../Reference/API-Methods.md#qbft_getvalidatorsbyblocknumber). +[`qbft_getValidatorsByBlockNumber`](../../../reference/api/index.md#qbft_getvalidatorsbyblocknumber). !!! example "JSON-RPC `qbft_getValidatorsByBlockNumber` request example" @@ -363,7 +363,7 @@ To return a list of validators and confirm the addition of a proposed validator, ``` To discard your proposal after confirming the addition of a validator, call -[`qbft_discardValidatorVote`](../../../Reference/API-Methods.md#qbft_discardvalidatorvote), +[`qbft_discardValidatorVote`](../../../reference/api/index.md#qbft_discardvalidatorvote), specifying the address of the proposed validator. !!! example "JSON-RPC `qbft_discardValidatorVote` request example" @@ -376,7 +376,7 @@ specifying the address of the proposed validator. The process for removing a validator is the same as adding a validator except you specify `false` as the second parameter of -[`qbft_proposeValidatorVote`](../../../Reference/API-Methods.md#qbft_proposevalidatorvote). +[`qbft_proposeValidatorVote`](../../../reference/api/index.md#qbft_proposevalidatorvote). #### Epoch transition @@ -394,7 +394,7 @@ View the [example smart contract](https://github.com/ConsenSys/validator-smart-c create and deploy the smart contract. You can pre-deploy the validator smart contract in a new QBFT network by specifying the contract details in the -[genesis file](QBFT.md#genesis-file). For existing QBFT networks you need to compile and deploy the contract +[genesis file](qbft.md#genesis-file). For existing QBFT networks you need to compile and deploy the contract using a transaction, then obtain the contract address from the receipt and use that in a [transition](#swap-validator-management-methods). @@ -406,7 +406,7 @@ using a transaction, then obtain the contract address from the receipt and use t !!! note If network conditions render it impossible to add and remove validators using a smart contract, you can - [override smart contract validators](../../Troubleshoot/Add-Validators-Without-Voting.md#override-smart-contract-validators). + [override smart contract validators](add-validators-without-voting.md#override-smart-contract-validators). ### Minimum number of validators @@ -491,7 +491,7 @@ To update an existing network with a new `blockperiodseconds`: 3. Restart all nodes in the network using the updated genesis file. 4. To verify the changes after the transition block, call - [`qbft_getValidatorsByBlockNumber`](../../../Reference/API-Methods.md#ibft_getvalidatorsbyblocknumber), specifying `latest`. + [`qbft_getValidatorsByBlockNumber`](../../../reference/api/index.md#ibft_getvalidatorsbyblocknumber), specifying `latest`. ### Configure block rewards on an existing network deployment diff --git a/docs/HowTo/Configure/Contracts-in-Genesis.md b/docs/private-networks/how-to/configure/contracts.md similarity index 92% rename from docs/HowTo/Configure/Contracts-in-Genesis.md rename to docs/private-networks/how-to/configure/contracts.md index a8acddb9..20badad5 100644 --- a/docs/HowTo/Configure/Contracts-in-Genesis.md +++ b/docs/private-networks/how-to/configure/contracts.md @@ -2,9 +2,9 @@ description: Pre-deploying contracts in the genesis file --- -# Pre-deploying contracts in the genesis file +# Pre-deploy contracts in the genesis file -To pre-deploy contracts when starting Besu, specify the contract code in the [genesis file](Genesis-File.md). +To pre-deploy contracts when starting Besu, specify the contract code in the [genesis file](../../../public-networks/concepts/genesis-file.md). !!! example "Contract code in the genesis file" diff --git a/docs/HowTo/Configure/Alternative-EC-Curves.md b/docs/private-networks/how-to/configure/curves.md similarity index 86% rename from docs/HowTo/Configure/Alternative-EC-Curves.md rename to docs/private-networks/how-to/configure/curves.md index d0477a7c..5545eb2c 100644 --- a/docs/HowTo/Configure/Alternative-EC-Curves.md +++ b/docs/private-networks/how-to/configure/curves.md @@ -2,7 +2,7 @@ description: Using alternative elliptic curves in Besu --- -# Using alternative elliptic curves +# Configure alternative elliptic curves !!! caution @@ -12,7 +12,7 @@ By default, Besu uses the Ethereum standard `secp256k1` elliptic curve (EC). However, when running nodes in a private network, it is possible to configure an alternative elliptic curve. The configuration for what elliptic curve Besu will use is done in the network configuration section of genesis file, -using the [`ecCurve`](../../Reference/Config-Items.md#Configuration_Items) key: +using the [`ecCurve`](../../../public-networks/reference/genesis-items.md#Configuration_Items) key: ```bash { diff --git a/docs/HowTo/Configure/FreeGas.md b/docs/private-networks/how-to/configure/free-gas.md similarity index 89% rename from docs/HowTo/Configure/FreeGas.md rename to docs/private-networks/how-to/configure/free-gas.md index 9e9e411c..c1827aa1 100644 --- a/docs/HowTo/Configure/FreeGas.md +++ b/docs/private-networks/how-to/configure/free-gas.md @@ -2,7 +2,7 @@ description: Configuring free gas networks --- -# Free gas networks +# Configure free gas networks Transactions use computational resources so have an associated cost. Gas is the cost unit and the gas price is the price per gas unit. The transaction cost is the gas used * gas price. @@ -30,7 +30,7 @@ to limit resource use. In a free gas network, transactions still use gas but the gas price is zero, meaning the transaction cost is zero. Transaction cost = gas used * 0 (the gas price). -## Configuring free gas in Hyperledger Besu +## Configure free gas in Besu When gas is free, limiting block and contract sizes is less important. In free gas networks, we increase the block size limit and set the contract size limit to the maximum value. @@ -74,7 +74,7 @@ size (in bytes). ### 3. Start Besu with a minimum gas price of zero -When starting nodes, set the [minimum gas price](../../Reference/CLI/CLI-Syntax.md#min-gas-price) +When starting nodes, set the [minimum gas price](../../../public-networks/reference/cli/options.md#min-gas-price) to zero. === "Command Line" @@ -90,12 +90,12 @@ to zero. ``` !!! important - In a free gas network, ensure the [minimum gas price](../../Reference/CLI/CLI-Syntax.md#min-gas-price) + In a free gas network, ensure the [minimum gas price](../../../public-networks/reference/cli/options.md#min-gas-price) is set to zero for every node. Any node with a minimum gas price set higher than zero will silently drop transactions with a zero gas price. - You can query a node's gas configuration using [`eth_gasPrice`](../../Reference/API-Methods.md#eth_gasprice). + You can query a node's gas configuration using [`eth_gasPrice`](../../../public-networks/reference/api/index.md#eth_gasprice). -## Configuring free gas in Truffle +## Configure free gas in Truffle If using Truffle to develop on your free gas network, you also need to configure free gas in Truffle. @@ -106,7 +106,7 @@ gas limit in Truffle to the maximum possible. !!! important Besu does not support private key management. To use Besu with Truffle, you must configure - a [Truffle wallet](../Develop-Dapps/Truffle.md). + a [Truffle wallet](../../../public-networks/how-to/develop/truffle.md). ### Update `truffle-config.js` diff --git a/docs/HowTo/Configure/TLS/Configure-TLS.md b/docs/private-networks/how-to/configure/tls/client-and-server.md similarity index 67% rename from docs/HowTo/Configure/TLS/Configure-TLS.md rename to docs/private-networks/how-to/configure/tls/client-and-server.md index 6c51777a..41e93fe9 100644 --- a/docs/HowTo/Configure/TLS/Configure-TLS.md +++ b/docs/private-networks/how-to/configure/tls/client-and-server.md @@ -2,28 +2,32 @@ description: Configure TLS --- -# Configure TLS +# Configure client and server TLS Hyperledger Besu supports TLS for client and server communication. For example, you can -[configure TLS](../../../Concepts/TLS.md) for communication between +configure TLS for communication between [EthSigner](https://docs.ethsigner.consensys.net/en/latest/Concepts/TLS/) and Besu, and Besu and [Tessera](https://docs.tessera.consensys.net/HowTo/Configure/TLS/). +The following diagram displays an example client and server TLS configuration. + +![Besu client and server TLS](../../../../images/Besu_TLS.png) + Configure TLS communication from the command line. -**Prerequisites**: +## Prerequisites -* Besu's password-protected PKCS12 keystore. +* Besu's password-protected PKCS12 keystore * File containing the keystore password ## Configure client TLS Allow clients (for example a dapp, curl, or EthSigner) to send and receive secure HTTP JSON-RPCs. -**Client Prerequisites**: +**Client prerequisites**: * [Configure the client for TLS] -* Client's PKCS12 keystore information. +* Client's PKCS12 keystore information ### Create the known clients file @@ -62,36 +66,36 @@ besu --rpc-http-enabled --rpc-http-tls-enabled --rpc-http-tls-client-auth-enable The command line: * Enables the HTTP JSON-RPC service using the - [`--rpc-http-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-enabled) option. + [`--rpc-http-enabled`](../../../../public-networks/reference/cli/options.md#rpc-http-enabled) option. * Enables TLS for the HTTP JSON-RPC service using the - [`--rpc-http-tls-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-tls-enabled) option. + [`--rpc-http-tls-enabled`](../../../../public-networks/reference/cli/options.md#rpc-http-tls-enabled) option. * Enables TLS client authentication using the - [`--rpc-http-tls-client-auth-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-tls-client-auth-enabled) option. + [`--rpc-http-tls-client-auth-enabled`](../../../../public-networks/reference/cli/options.md#rpc-http-tls-client-auth-enabled) option. * Specifies the keystore using the - [`--rpc-http-tls-keystore-file`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-tls-keystore-file) + [`--rpc-http-tls-keystore-file`](../../../../public-networks/reference/cli/options.md#rpc-http-tls-keystore-file) option. * Specifies the file that contains the password to decrypt the keystore using the - [`--rpc-http-tls-keystore-password-file`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-tls-keystore-password-file) option. + [`--rpc-http-tls-keystore-password-file`](../../../../public-networks/reference/cli/options.md#rpc-http-tls-keystore-password-file) option. * [Specifies the clients](#create-the-known-clients-file) allowed to connect to Besu using the - [`--rpc-http-tls-known-clients-file`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-tls-known-clients-file) option. + [`--rpc-http-tls-known-clients-file`](../../../../public-networks/reference/cli/options.md#rpc-http-tls-known-clients-file) option. * specifies the Java cipher suites using the - [`--rpc-http-tls-cipher-suite`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-tls-cipher-suite) option. + [`--rpc-http-tls-cipher-suite`](../../../../public-networks/reference/cli/options.md#rpc-http-tls-cipher-suite) option. * specifies the TLS protocol version using the - [`--rpc-http-tls-protocol`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-tls-protocol) option. + [`--rpc-http-tls-protocol`](../../../../public-networks/reference/cli/options.md#rpc-http-tls-protocol) option. !!! note - Set [`--rpc-http-tls-ca-clients-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-tls-ca-clients-enabled) + Set [`--rpc-http-tls-ca-clients-enabled`](../../../../public-networks/reference/cli/options.md#rpc-http-tls-ca-clients-enabled) to `true` to allow access to clients with signed and trusted root CAs. ## Configure server TLS Allow Besu to securely communicate with the server (Tessera). -**Server Prerequisites**: +**Server prerequisites**: * [Configure the server to allow TLS communication] -* Server's certificate information. +* Server's certificate information ### Create the known servers file @@ -123,14 +127,14 @@ besu --privacy-tls-enabled --privacy-tls-keystore-file=/Users/me/my_node/keystor The command line: * Enables TLS with the server using the - [`--privacy-tls-enabled`](../../../Reference/CLI/CLI-Syntax.md#privacy-tls-enabled) option. + [`--privacy-tls-enabled`](../../../reference/cli/options.md#privacy-tls-enabled) option. * Specifies the keystore using the - [`--privacy-tls-keystore-file`](../../../Reference/CLI/CLI-Syntax.md#privacy-tls-keystore-file) + [`--privacy-tls-keystore-file`](../../../reference/cli/options.md#privacy-tls-keystore-file) option. * Specifies the file that contains the password to decrypt the keystore using the - [`--privacy-tls-keystore-password-file`](../../../Reference/CLI/CLI-Syntax.md#privacy-tls-keystore-password-file) option. + [`--privacy-tls-keystore-password-file`](../../../reference/cli/options.md#privacy-tls-keystore-password-file) option. * Specifies the trusted servers using the - [`--privacy-tls-known-enclave-file`](../../../Reference/CLI/CLI-Syntax.md#privacy-tls-known-enclave-file) option. + [`--privacy-tls-known-enclave-file`](../../../reference/cli/options.md#privacy-tls-known-enclave-file) option. [Configure the client for TLS]: https://docs.ethsigner.consensys.net/en/latest/HowTo/Configure-TLS/#server-tls-connection diff --git a/docs/HowTo/Configure/TLS/P2P-TLS.md b/docs/private-networks/how-to/configure/tls/p2p.md similarity index 97% rename from docs/HowTo/Configure/TLS/P2P-TLS.md rename to docs/private-networks/how-to/configure/tls/p2p.md index 0380d2c3..4ffa6402 100644 --- a/docs/HowTo/Configure/TLS/P2P-TLS.md +++ b/docs/private-networks/how-to/configure/tls/p2p.md @@ -2,7 +2,7 @@ description: Configure P2P TLS communication --- -# P2P TLS +# Configure P2P TLS You can configure TLS to secure the P2P communication between nodes by ensuring only authorized nodes can communicate with each other. Use certificates issued by a trusted authority to connect authorized nodes in the network. @@ -19,7 +19,7 @@ Besu supports PKCS11, PKCS12, and JKS keystore and truststore types for P2P TLS. **Prerequisites**: * A configured network. For example, - [see steps 1 to 5 in the QBFT tutorial](../../../Tutorials/Private-Network/Create-QBFT-Network.md). + [see steps 1 to 5 in the QBFT tutorial](../../../tutorials/qbft.md). * Each node requires a keystore that contains the node's certificate and key. * A truststore containing all the trusted certificates for the network. diff --git a/docs/HowTo/Deploy/Validators.md b/docs/private-networks/how-to/configure/validators.md similarity index 76% rename from docs/HowTo/Deploy/Validators.md rename to docs/private-networks/how-to/configure/validators.md index c5999085..1878c573 100644 --- a/docs/HowTo/Deploy/Validators.md +++ b/docs/private-networks/how-to/configure/validators.md @@ -2,11 +2,11 @@ description: Configuring validators in production networks --- -# Configuring validators in a production network +# Configure validators in a production network -As when [configuring bootnodes](Bootnodes.md): +As when [configuring bootnodes](bootnodes.md): -1. Create the [node key pair](../../Concepts/Node-Keys.md) (that is, the private and public key) +1. Create the [node key pair](../../../public-networks/concepts/node-keys.md) (that is, the private and public key) before starting the validator. 1. When creating validators in the cloud (for example, AWS or Azure), attempt to assign static IP addresses to them. If your network is: @@ -31,11 +31,11 @@ You can [vote validators in or out of the validator pool]. ## Validators as bootnodes -Validators can also be bootnodes. Other than the [usual configuration for bootnodes](Bootnodes.md), +Validators can also be bootnodes. Other than the [usual configuration for bootnodes](bootnodes.md), you do not need to specify any extra configuration when a validator is also a bootnode. If you remove a validator that is also a bootnode, ensure there are enough remaining bootnodes on the network. -[vote validators in or out of the validator pool]: ../Configure/Consensus-Protocols/IBFT.md#adding-and-removing-validators +[vote validators in or out of the validator pool]: consensus/ibft.md#add-and-remove-validators diff --git a/docs/HowTo/Deploy/Ansible.md b/docs/private-networks/how-to/deploy/ansible.md similarity index 85% rename from docs/HowTo/Deploy/Ansible.md rename to docs/private-networks/how-to/deploy/ansible.md index adbcb7f4..ee4f6a69 100644 --- a/docs/HowTo/Deploy/Ansible.md +++ b/docs/private-networks/how-to/deploy/ansible.md @@ -3,9 +3,9 @@ title: Deploy Hyperledger Besu with Ansible description: Deploying Hyperledger Besu with Ansible role on Galaxy --- -# Deploying Hyperledger Besu with Ansible +# Deploy Besu with Ansible -To deploy Hyperledger Besu using Ansible, use the +To deploy Besu using Ansible, use the [Hyperledger Besu role](https://galaxy.ansible.com/consensys/hyperledger_besu) published on Galaxy. For more information, see the "Read Me" button on the diff --git a/docs/HowTo/Deploy/Cloud.md b/docs/private-networks/how-to/deploy/cloud.md similarity index 84% rename from docs/HowTo/Deploy/Cloud.md rename to docs/private-networks/how-to/deploy/cloud.md index ed4aabd9..5e4fe35d 100644 --- a/docs/HowTo/Deploy/Cloud.md +++ b/docs/private-networks/how-to/deploy/cloud.md @@ -2,7 +2,7 @@ description: Deploying Besu to the cloud --- -# Deploying Hyperledger Besu to the cloud +# Deploy Besu to the cloud When deploying Besu to the cloud: @@ -10,4 +10,4 @@ When deploying Besu to the cloud: bootnodes and validators. * If your network is a multi-region network, consider using VPC Peering to reduce latency. * Where required, use VPNs to connect to your on premise systems, or single private chains. -* If deploying to Kubernetes, please refer to the [tutorial](../../Tutorials/Kubernetes/Overview.md). +* If deploying to Kubernetes, please refer to the [tutorial](../../tutorials/kubernetes/index.md). diff --git a/docs/HowTo/Deploy/Ethstats.md b/docs/private-networks/how-to/deploy/ethstats.md similarity index 80% rename from docs/HowTo/Deploy/Ethstats.md rename to docs/private-networks/how-to/deploy/ethstats.md index 156e63dc..cecd16bd 100644 --- a/docs/HowTo/Deploy/Ethstats.md +++ b/docs/private-networks/how-to/deploy/ethstats.md @@ -2,10 +2,10 @@ description: Ethstats network monitor --- -# Ethstats network monitor +# Connect to Ethstats network monitor Connect to [Ethstats](https://ethstats.net) to display real time and historical [statistics](#statistics) about the network and nodes. -You can connect to the Ethstats dashboard by [connecting to a client and server](#connecting-through-a-client-and-server) or by [connecting through the command line](#connecting-through-the-command-line). +You can connect to the Ethstats dashboard by [connecting to a client and server](#connect-through-a-client-and-server) or by [connecting through the command line](#connect-through-the-command-line). ## Components @@ -27,17 +27,17 @@ Statistics displayed by Ethstats include: - Node logs, which display the data sent by a node. - Block history, which provides the ability to go back in time and playback the block propagation through the nodes. -## Connecting through a client and server +## Connect through a client and server Refer to the external [Ethstats client](https://github.com/goerli/ethstats-client) and [Ethstats server](https://github.com/goerli/ethstats-server) documentation for installing those components and connecting to a dashboard. -## Connecting through the command line +## Connect through the command line You can use command line options to connect a node directly to a [dashboard](https://github.com/goerli/ethstats-client#available-dashboards), without using a client. -Start a node using the [`--ethstats`](../../Reference/CLI/CLI-Syntax.md#ethstats) option to specify the Ethstats server URL. -You can specify a contact email to send to the server using [`--ethstats-contact`](../../Reference/CLI/CLI-Syntax.md#ethstats-contact). +Start a node using the [`--ethstats`](../../../public-networks/reference/cli/options.md#ethstats) option to specify the Ethstats server URL. +You can specify a contact email to send to the server using [`--ethstats-contact`](../../../public-networks/reference/cli/options.md#ethstats-contact). !!! example @@ -51,4 +51,4 @@ You can specify a contact email to send to the server using [`--ethstats-contact Open the selected dashboard website. Find your node under the list of nodes to see the statistics for the node and the network. -![dashboard](../../images/dashboard.png) +![dashboard](../../../images/dashboard.png) diff --git a/docs/HowTo/Deploy/Kubernetes.md b/docs/private-networks/how-to/deploy/kubernetes.md similarity index 80% rename from docs/HowTo/Deploy/Kubernetes.md rename to docs/private-networks/how-to/deploy/kubernetes.md index cae8d75a..3327a0f6 100644 --- a/docs/HowTo/Deploy/Kubernetes.md +++ b/docs/private-networks/how-to/deploy/kubernetes.md @@ -3,12 +3,12 @@ title: Deploy a Hyperledger Besu private network with Kubernetes description: Deploying Hyperledger Besu with Kubernetes --- -# Deploying Hyperledger Besu with Kubernetes +# Deploy Besu with Kubernetes Use the [reference implementations](https://github.com/ConsenSys/quorum-kubernetes) to install private networks using Kubernetes (K8s). The repository has full support for cloud providers like AWS, Azure, GCP, and IBM, and has production setups that use of identities and cloud-native secret storage services like Azure KeyVault and AWS Secrets Manager. -Refer to the [tutorial](../../Tutorials/Kubernetes/Overview.md) and familiarize yourself with +Refer to the [tutorial](../../tutorials/kubernetes/index.md) and familiarize yourself with the reference implementations, and customize them to your requirements. diff --git a/docs/private-networks/how-to/index.md b/docs/private-networks/how-to/index.md new file mode 100644 index 00000000..8119a544 --- /dev/null +++ b/docs/private-networks/how-to/index.md @@ -0,0 +1,34 @@ +--- +description: private networks how to overview +--- + +# How to + +This section provides instructional content for private network features. + +The following features are shared with [public networks](../../public-networks/index.md) and the +content can be found in the public networks section: + +- Configuration: + - [Use a configuration file](../../public-networks/how-to/configuration-file.md) + - [Pass JVM options](../../public-networks/how-to/pass-jvm-options.md) + - [Configure high availability](../../public-networks/how-to/configure-ha/index.md) + - [Configure mining](../../public-networks/how-to/use-pow/mining.md) +- [Use the Besu API](../../public-networks/how-to/use-besu-api/index.md): + - [Use JSON-RPC over HTTP, WS, and IPC](../../public-networks/how-to/use-besu-api/json-rpc.md) + - [Use RPC Pub/Sub over WS](../../public-networks/how-to/use-besu-api/rpc-pubsub.md) + - [Use GraphQL over HTTP](../../public-networks/how-to/use-besu-api/graphql.md) + - [Authenticate JSON-RPC requests](../../public-networks/how-to/use-besu-api/authenticate.md) + - [Access logs using JSON-RPC API](../../public-networks/how-to/use-besu-api/access-logs.md) +- Find and connect to peers: + - [Configure static nodes](../../public-networks/how-to/connect/static-nodes.md) + - [Configure ports](../../public-networks/how-to/connect/configure-ports.md) + - [Manage peers](../../public-networks/how-to/connect/manage-peers.md) + - [Specify NAT method](../../public-networks/how-to/connect/specify-nat.md) +- Develop dapps: + - [Use Truffle](../../public-networks/how-to/develop/truffle.md) + - [Use client libraries](../../public-networks/how-to/develop/client-libraries.md) +- Troubleshoot: + - [Use EVM tool](../../public-networks/how-to/troubleshoot/evm-tool.md) + - [Use Java Flight Recorder](../../public-networks/how-to/troubleshoot/java-flight-recorder.md) + - [Trace transactions](../../public-networks/how-to/troubleshoot/trace-transactions.md) diff --git a/docs/HowTo/Monitor/Elastic-Stack.md b/docs/private-networks/how-to/monitor/elastic-stack.md similarity index 86% rename from docs/HowTo/Monitor/Elastic-Stack.md rename to docs/private-networks/how-to/monitor/elastic-stack.md index df726fd1..82bcd5d9 100644 --- a/docs/HowTo/Monitor/Elastic-Stack.md +++ b/docs/private-networks/how-to/monitor/elastic-stack.md @@ -2,10 +2,10 @@ description: Using Elastick Stack (ELK) with Hyperledger Besu --- -# Elastic Stack +# Use Elastic Stack [Elastic Stack] (ELK) is an open-source log management platform that is available when using the -[Developer Quickstart](../../Tutorials/Developer-Quickstart.md). +[Developer Quickstart](../../tutorials/quickstart.md). The [Filebeat] configuration ingests logs and the [Metricbeat] configuration collects metrics from the nodes at regular defined intervals and outputs them to Redis for storage. @@ -21,11 +21,11 @@ The [pipeline configuration] defines the JSON format used for Besu logs and auto To see the Besu Quickstart network logs in Kibana: -1. [Start the Developer Quickstart with Besu](../../Tutorials/Developer-Quickstart.md), selecting ELK monitoring. +1. [Start the Developer Quickstart with Besu](../../tutorials/quickstart.md), selecting ELK monitoring. 1. Open the [`Kibana logs address`](http://localhost:5601/app/kibana#/discover) listed by the sample networks `list.sh` script. The logs display in Kibana. - ![Kibana](../../images/KibanaQuickstart.png) + ![Kibana](../../../images/KibanaQuickstart.png) [Filebeat]: https://github.com/ConsenSys/quorum-dev-quickstart/blob/b72a0f64d685c851bf8be399a8e33bbdf0e09982/files/common/filebeat/filebeat.yml diff --git a/docs/private-networks/how-to/monitor/index.md b/docs/private-networks/how-to/monitor/index.md new file mode 100644 index 00000000..b076bf4d --- /dev/null +++ b/docs/private-networks/how-to/monitor/index.md @@ -0,0 +1,19 @@ +--- +description: Monitoring using metrics and logging +--- + +# Monitoring + +Use monitoring to identify node and network issues. In private networks, you can +[configure metrics and logging](../../../public-networks/how-to/monitor/index.md) as in public +networks. + +You can also use the following monitoring tools in private networks: + +- [Elastic Stack](elastic-stack.md) +- [Quorum Hibernate](quorum-hibernate.md) +- [Splunk](splunk.md) +- [OpenTelemetry](opentelemetry.md) + +For an overview of monitoring Hyperledger Besu, view +[this recording](https://www.youtube.com/watch?v=7BuutRe0I28&feature=youtu.be). diff --git a/docs/HowTo/Monitor/OpenTelemetry-Collector.md b/docs/private-networks/how-to/monitor/opentelemetry.md similarity index 94% rename from docs/HowTo/Monitor/OpenTelemetry-Collector.md rename to docs/private-networks/how-to/monitor/opentelemetry.md index 8fb0b007..4318d41a 100644 --- a/docs/HowTo/Monitor/OpenTelemetry-Collector.md +++ b/docs/private-networks/how-to/monitor/opentelemetry.md @@ -2,11 +2,11 @@ description: Collect Besu information with the OpenTelemetry Collector --- -# OpenTelemetry +# Use OpenTelemetry You can use the OpenTelemetry monitoring and tracing service to gather node metrics and traces. -To enable OpenTelemetry to access Hyperledger Besu, use the [`--metrics-enabled`](../../Reference/CLI/CLI-Syntax.md#metrics-enabled) -and [`--metrics-protocol=opentelemetry`](../../Reference/CLI/CLI-Syntax.md#metrics-protocol) options. +To enable OpenTelemetry to access Hyperledger Besu, use the [`--metrics-enabled`](../../../public-networks/reference/cli/options.md#metrics-enabled) +and [`--metrics-protocol=opentelemetry`](../../../public-networks/reference/cli/options.md#metrics-protocol) options. Use [Splunk](https://splunk.com) to visualize the collected data. A [Besu Sync example](https://github.com/splunk/splunk-connect-for-ethereum/tree/master/examples/besu-sync) is available. @@ -140,8 +140,8 @@ Download and install the [OpenTelemetry Collector](https://github.com/open-telem You can also refer to this [Docker-compose example](https://github.com/splunk/splunk-connect-for-ethereum/blob/989dc2ccae7d8235bf3ce2a83a18cf0cd1713294/examples/besu-sync/full-sync/docker-compose.yaml). -1. Start Besu with the [`--metrics-enabled`](../../Reference/CLI/CLI-Syntax.md#metrics-enabled) and - [`--metrics-protocol=opentelemetry`](../../Reference/CLI/CLI-Syntax.md#metrics-protocol) options. +1. Start Besu with the [`--metrics-enabled`](../../../public-networks/reference/cli/options.md#metrics-enabled) and + [`--metrics-protocol=opentelemetry`](../../../public-networks/reference/cli/options.md#metrics-protocol) options. For example, run the following command to start a single node: === "Syntax" diff --git a/docs/HowTo/Monitor/Quorum-Hibernate.md b/docs/private-networks/how-to/monitor/quorum-hibernate.md similarity index 95% rename from docs/HowTo/Monitor/Quorum-Hibernate.md rename to docs/private-networks/how-to/monitor/quorum-hibernate.md index 1a29474b..8af6ccff 100644 --- a/docs/HowTo/Monitor/Quorum-Hibernate.md +++ b/docs/private-networks/how-to/monitor/quorum-hibernate.md @@ -2,7 +2,7 @@ description: Use Quorum Hibernate with Hyperledger Besu --- -# Quorum Hibernate +# Use Quorum Hibernate [Quorum Hibernate] is a proxy that monitors a node's API traffic and hibernates the node when inactive. This reduces infrastructure costs by ensuring only nodes receiving API requests or nodes required to establish consensus diff --git a/docs/HowTo/Monitor/Splunk-Enterprise.md b/docs/private-networks/how-to/monitor/splunk.md similarity index 93% rename from docs/HowTo/Monitor/Splunk-Enterprise.md rename to docs/private-networks/how-to/monitor/splunk.md index 79ed663d..64080b7a 100644 --- a/docs/HowTo/Monitor/Splunk-Enterprise.md +++ b/docs/private-networks/how-to/monitor/splunk.md @@ -2,7 +2,7 @@ description: Send Hyperledger Besu logs to Splunk --- -# Splunk +# Use Splunk [Splunk](https://splunkbase.splunk.com/app/4866/) is a third-party monitoring solution compatible with Besu. A Splunk server can receive Besu logs and enable complex search, visualization, and analysis. @@ -21,7 +21,7 @@ Options for running Splunk and Besu are: To view the Quickstart network logs in Splunk: -1. [Start the Developer Quickstart with Besu](../../Tutorials/Developer-Quickstart.md), selecting Splunk monitoring. +1. [Start the Developer Quickstart with Besu](../../tutorials/quickstart.md), selecting Splunk monitoring. 1. Open the [Splunk UI](http://localhost:8000). ## Splunk Connect for Ethereum Docker Compose @@ -53,9 +53,9 @@ Docker Compose environment provided by Splunk. !!! note Splunk enterprise takes some time to start. - + Run `docker ps` and wait for the `STATUS` of the 3 containers to be `Up [number] seconds (healthy)`. - + ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 127600dd1173 splunkdlt/ethlogger:latest "ethlogger" 53 seconds ago Up 51 seconds (healthy) ethlogger @@ -65,10 +65,10 @@ Docker Compose environment provided by Splunk. ## Use Splunk Enterprise as a Docker container -### Requirements +### Prerequisites - [Docker](https://docs.docker.com/compose/install/) -- [Besu 1.4.4](https://github.com/hyperledger/besu/blob/750580dcca349d22d024cc14a8171b2fa74b505a/CHANGELOG.md#144) or later [installed](../Get-Started/Installation-Options/Install-Binaries.md) +- [Besu 1.4.4](https://github.com/hyperledger/besu/blob/750580dcca349d22d024cc14a8171b2fa74b505a/CHANGELOG.md#144) or later [installed](../../get-started/install/binary-distribution.md) !!! important @@ -77,9 +77,9 @@ Docker Compose environment provided by Splunk. !!! note - If running [Besu as a Docker container](../Get-Started/Installation-Options/Run-Docker-Image.md), consider using + If running [Besu as a Docker container](../../get-started/install/run-docker-image.md), consider using [Splunk Connect for Ethereum Docker Compose](#splunk-connect-for-ethereum-docker-compose) or - [Kubernetes](../Deploy/Kubernetes.md) instead of the Splunk Enterprise trial container. + [Kubernetes](../deploy/kubernetes.md) instead of the Splunk Enterprise trial container. ### Steps @@ -103,7 +103,7 @@ Docker Compose environment provided by Splunk. !!! tip To follow the logs of the Splunk container: - + ```bash docker logs -f splunk-demo ``` @@ -140,17 +140,17 @@ Docker Compose environment provided by Splunk. Congratulations! You can now play with the search and other Splunk features to explore your Besu logs. - ![Splunk search page](../../images/splunk-ui.png) + ![Splunk search page](../../../images/splunk-ui.png) 1. Stop Besu with ++ctrl+c++. Stop the Splunk container with `docker stop splunk-demo`. ## Run a Splunk Enterprise instance -### Requirements +### Prerequisites - [Splunk Enterprise license](https://www.splunk.com/) -- [Besu 1.4.4](https://github.com/hyperledger/besu/blob/master/CHANGELOG.md#144) or later [installed](../Get-Started/Installation-Options/Install-Binaries.md) +- [Besu 1.4.4](https://github.com/hyperledger/besu/blob/master/CHANGELOG.md#144) or later [installed](../../get-started/install/binary-distribution.md) ### Steps diff --git a/docs/HowTo/Send-Transactions/Concurrent-Private-Transactions.md b/docs/private-networks/how-to/send-transactions/concurrent-private-transactions.md similarity index 50% rename from docs/HowTo/Send-Transactions/Concurrent-Private-Transactions.md rename to docs/private-networks/how-to/send-transactions/concurrent-private-transactions.md index 304a2362..fec90730 100644 --- a/docs/HowTo/Send-Transactions/Concurrent-Private-Transactions.md +++ b/docs/private-networks/how-to/send-transactions/concurrent-private-transactions.md @@ -2,30 +2,30 @@ description: Creating and sending concurrent private transactions with Hyperledger Besu --- -# Sending concurrent private transactions +# Send concurrent private transactions Private transaction processing involves two transactions, the private transaction and the -[privacy marker transaction (PMT)](../../Concepts/Privacy/Private-Transaction-Processing.md). -The private transaction and the PMT each have their own [nonce](../../Concepts/Privacy/Private-Transactions.md#nonces). +[privacy marker transaction (PMT)](../../concepts/privacy/private-transactions/processing.md). +The private transaction and the PMT each have their own [nonce](../../concepts/privacy/private-transactions/index.md#nonces). If your private transaction rate requires sending private transactions without waiting for the previous -private transaction to be mined, using [`eth_getTransactionCount`](../../Reference/API-Methods.md#eth_gettransactioncount) -and [`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction) may result in -[incorrect nonces](../../Concepts/Privacy/Private-Transactions.md#private-nonce-management). +private transaction to be mined, using [`eth_getTransactionCount`](../../../public-networks/reference/api/index.md#eth_gettransactioncount) +and [`eea_sendRawTransaction`](../../reference/api/index.md#eea_sendrawtransaction) may result in +[incorrect nonces](../../concepts/privacy/private-transactions/index.md#private-nonce-management). -In this case, use [`priv_distributeRawTransaction`](Creating-Sending-Private-Transactions.md#priv_distributerawtransaction) -instead of [`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction). +In this case, use [`priv_distributeRawTransaction`](private-transactions.md#priv_distributerawtransaction) +instead of [`eea_sendRawTransaction`](../../reference/api/index.md#eea_sendrawtransaction). !!! note - You can use [`priv_getTransactionCount`](../../Reference/API-Methods.md#priv_gettransactioncount) or - [`priv_getEeaTransactionCount`](../../Reference/API-Methods.md#priv_geteeatransactioncount) to get the nonce for + You can use [`priv_getTransactionCount`](../../reference/api/index.md#priv_gettransactioncount) or + [`priv_getEeaTransactionCount`](../../reference/api/index.md#priv_geteeatransactioncount) to get the nonce for an account for the specified privacy group or participants. -Send the corresponding PMT using [`eth_sendRawTransaction`](../../Reference/API-Methods.md#eth_sendrawtransaction), +Send the corresponding PMT using [`eth_sendRawTransaction`](../../../public-networks/reference/api/index.md#eth_sendrawtransaction), specifying the public PMT nonce. This method allows you to create and send the PMT yourself rather than -[`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction) handling the PMT. +[`eea_sendRawTransaction`](../../reference/api/index.md#eea_sendrawtransaction) handling the PMT. !!! important @@ -37,6 +37,6 @@ This method allows you to create and send the PMT yourself rather than The [web3js-quorum library](https://github.com/ConsenSys/web3js-quorum/tree/master/example/concurrentPrivateTransactions) includes an example of how to send concurrent private transactions. - The example uses [offchain privacy groups](../../Concepts/Privacy/Privacy-Groups.md). - Use [`priv_getPrivacyPrecompileAddress`](../../Reference/API-Methods.md#priv_getprivacyprecompileaddress) to get the + The example uses [offchain privacy groups](../../concepts/privacy/privacy-groups.md). + Use [`priv_getPrivacyPrecompileAddress`](../../reference/api/index.md#priv_getprivacyprecompileaddress) to get the precompile address to specify in the `to` field when creating the PMT. diff --git a/docs/private-networks/how-to/send-transactions/index.md b/docs/private-networks/how-to/send-transactions/index.md new file mode 100644 index 00000000..5bc3b015 --- /dev/null +++ b/docs/private-networks/how-to/send-transactions/index.md @@ -0,0 +1,14 @@ +--- +description: private networks send transactions overview +--- + +# Create and send transactions + +In private networks, you can create and [send regular transactions](../../../public-networks/how-to/send-transactions.md) +as in public networks. + +You can also: + +- [Send private transactions](private-transactions.md). +- [Send concurrent private transactions](concurrent-private-transactions.md). +- [Include revert reason in transactions](revert-reason.md). diff --git a/docs/HowTo/Send-Transactions/Creating-Sending-Private-Transactions.md b/docs/private-networks/how-to/send-transactions/private-transactions.md similarity index 70% rename from docs/HowTo/Send-Transactions/Creating-Sending-Private-Transactions.md rename to docs/private-networks/how-to/send-transactions/private-transactions.md index 3acac924..0f6801c7 100644 --- a/docs/HowTo/Send-Transactions/Creating-Sending-Private-Transactions.md +++ b/docs/private-networks/how-to/send-transactions/private-transactions.md @@ -2,11 +2,11 @@ description: Creating and sending private transactions with Hyperledger Besu --- -# Creating and sending private transactions +# Create and send private transactions -Create and send [private transactions](../../Concepts/Privacy/Privacy-Overview.md) using: +Create and send [private transactions](../../concepts/privacy/index.md) using: -* [web3js-quorum client library](../Interact/Client-Libraries/web3js-quorum.md) or +* [web3js-quorum client library](../use-privacy/web3js-quorum.md) or [web3j client library](https://github.com/web3j/web3j) * [`eea_sendTransaction` with EthSigner](https://docs.ethsigner.consensys.net/en/latest/Using-EthSigner/Using-EthSigner/) * [`eea_sendRawTransaction`](#eea_sendrawtransaction) @@ -17,7 +17,7 @@ distributed. If any participants are offline when submitting the private transac transaction is not attempted and you must resubmit the transaction. The `gas` and `gasPrice` specified when sending a private transaction are used by the -[privacy marker transaction (PMT)](../../Concepts/Privacy/Private-Transaction-Processing.md), not the private transaction itself. +[privacy marker transaction (PMT)](../../concepts/privacy/private-transactions/processing.md), not the private transaction itself. !!! note @@ -26,40 +26,40 @@ The `gas` and `gasPrice` specified when sending a private transaction are used b ## `eea_sendRawTransaction` -[`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction) distributes the +[`eea_sendRawTransaction`](../../reference/api/index.md#eea_sendrawtransaction) distributes the private transaction to the participating nodes, and signs and submits the PMT, as described in -[Private transaction processing](../../Concepts/Privacy/Private-Transaction-Processing.md). +[Private transaction processing](../../concepts/privacy/private-transactions/processing.md). !!! note - If [sending concurrent transactions](Concurrent-Private-Transactions.md), you must use + If [sending concurrent transactions](concurrent-private-transactions.md), you must use [`priv_distributeRawTransaction`](#priv_distributerawtransaction) instead of - [`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction). + [`eea_sendRawTransaction`](../../reference/api/index.md#eea_sendrawtransaction). ## `priv_distributeRawTransaction` -Use [`priv_distributeRawTransaction`](../../Reference/API-Methods.md#priv_distributerawtransaction) instead of -[`eea_sendRawTransaction`](#eea_sendrawtransaction) when sending [concurrent private transactions](Concurrent-Private-Transactions.md). +Use [`priv_distributeRawTransaction`](../../reference/api/index.md#priv_distributerawtransaction) instead of +[`eea_sendRawTransaction`](#eea_sendrawtransaction) when sending [concurrent private transactions](concurrent-private-transactions.md). -[`priv_distributeRawTransaction`](../../Reference/API-Methods.md#priv_distributerawtransaction) +[`priv_distributeRawTransaction`](../../reference/api/index.md#priv_distributerawtransaction) distributes the private transaction to the participating nodes but does not sign and submit the PMT. -That is, it performs steps 1 to 5 of [Private Transaction Processing](../../Concepts/Privacy/Private-Transaction-Processing.md). +That is, it performs steps 1 to 5 of [private transaction processing](../../concepts/privacy/private-transactions/processing.md). If using -[`priv_distributeRawTransaction`](../../Reference/API-Methods.md#priv_distributerawtransaction) -instead of [`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction), use +[`priv_distributeRawTransaction`](../../reference/api/index.md#priv_distributerawtransaction) +instead of [`eea_sendRawTransaction`](../../reference/api/index.md#eea_sendrawtransaction), use the value returned by -[`priv_distributeRawTransaction`](../../Reference/API-Methods.md#priv_distributerawtransaction), +[`priv_distributeRawTransaction`](../../reference/api/index.md#priv_distributerawtransaction), which is the enclave key to the private transaction in [Tessera](https://docs.tessera.consensys.net/), in the `data` field of a call to -[`eth_sendRawTransaction`](../../Reference/API-Methods.md#eth_sendrawtransaction). +[`eth_sendRawTransaction`](../../../public-networks/reference/api/index.md#eth_sendrawtransaction). Use the value returned by -[`priv_getPrivacyPrecompileAddress`](../../Reference/API-Methods.md#priv_getprivacyprecompileaddress), which is the -address of the [privacy precompiled contract](../../Concepts/Privacy/Private-Transaction-Processing.md), in the `to` +[`priv_getPrivacyPrecompileAddress`](../../reference/api/index.md#priv_getprivacyprecompileaddress), which is the +address of the [privacy precompiled contract](../../concepts/privacy/private-transactions/processing.md), in the `to` field of the call. -By using the [public Ethereum transaction](Transactions.md), -[`eth_sendRawTransaction`](../../Reference/API-Methods.md#eth_sendrawtransaction), you are signing +By using the [public Ethereum transaction](../../how-to/send-transactions/index.md), +[`eth_sendRawTransaction`](../../../public-networks/reference/api/index.md#eth_sendrawtransaction), you are signing and submitting the PMT yourself instead of having it signed by the Besu node, giving you greater control over the PMT. !!! warning @@ -90,7 +90,7 @@ and submitting the PMT yourself instead of having it signed by the Besu node, gi } ``` - Send the enclave key in the `data` field, and the [privacy precompile address](../../Reference/API-Methods.md#priv_getprivacyprecompileaddress) in the `to` field of `eth_sendRawTransaction`: + Send the enclave key in the `data` field, and the [privacy precompile address](../../reference/api/index.md#priv_getprivacyprecompileaddress) in the `to` field of `eth_sendRawTransaction`: ```json { @@ -111,15 +111,15 @@ and submitting the PMT yourself instead of having it signed by the Besu node, gi To create an [EEA-compliant private transaction], specify `privateFor` when creating the signed transaction passed as an input parameter to -[`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction). +[`eea_sendRawTransaction`](../../reference/api/index.md#eea_sendrawtransaction). To create a [Besu-extended private transaction], specify a `privacyGroupId` when creating the signed transaction passed as an input parameter to -[`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction). +[`eea_sendRawTransaction`](../../reference/api/index.md#eea_sendrawtransaction). ## Unsigned and unencoded private transactions -The [`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction) parameter is +The [`eea_sendRawTransaction`](../../reference/api/index.md#eea_sendrawtransaction) parameter is a signed RLP-encoded private transaction. Shown below are examples of unsigned and unencoded private transactions to create a contract. @@ -158,10 +158,10 @@ private transactions to create a contract. !!! tip The `example` directory in the - [web3js-quorum client library](../Interact/Client-Libraries/web3js-quorum.md) contains examples of + [web3js-quorum client library](../use-privacy/web3js-quorum.md) contains examples of signing and encoding private transactions. -[EEA-compliant private transaction]: ../../Concepts/Privacy/Privacy-Groups.md#enterprise-ethereum-alliance-privacy -[Besu-extended private transaction]: ../../Concepts/Privacy/Privacy-Groups.md#besu-extended-privacy +[EEA-compliant private transaction]: ../../concepts/privacy/privacy-groups.md#enterprise-ethereum-alliance-privacy +[Besu-extended private transaction]: ../../concepts/privacy/privacy-groups.md#besu-extended-privacy diff --git a/docs/HowTo/Send-Transactions/Revert-Reason.md b/docs/private-networks/how-to/send-transactions/revert-reason.md similarity index 81% rename from docs/HowTo/Send-Transactions/Revert-Reason.md rename to docs/private-networks/how-to/send-transactions/revert-reason.md index 866deba3..a7e8bde0 100644 --- a/docs/HowTo/Send-Transactions/Revert-Reason.md +++ b/docs/private-networks/how-to/send-transactions/revert-reason.md @@ -33,29 +33,29 @@ client an optional string message containing information about the error. function withdraw() public { if (msg.sender != owner) revert Unauthorized(); - + payable(msg.sender).transfer(address(this).balance); } } ``` -## Enabling revert reason +## Enable revert reason -Use the [`--revert-reason-enabled`](../../Reference/CLI/CLI-Syntax.md#revert-reason-enabled) +Use the [`--revert-reason-enabled`](../../../public-networks/reference/cli/options.md#revert-reason-enabled) command line option to include the revert reason in the transaction receipt, -[`eth_estimateGas`](../../Reference/API-Methods.md#eth_estimategas) error, -[`eth_call`](../../Reference/API-Methods.md#eth_call) error, and -[`trace`](../../Reference/Trace-Types.md#trace) response in Hyperledger Besu. +[`eth_estimateGas`](../../../public-networks/reference/api/index.md#eth_estimategas) error, +[`eth_call`](../../../public-networks/reference/api/index.md#eth_call) error, and +[`trace`](../../../public-networks/reference/trace-types.md#trace) response in Hyperledger Besu. !!! caution Enabling revert reason may use a significant amount of memory. We do not recommend enabling revert reason when connected to public Ethereum networks. -## Where is the revert reason included +## Where the revert reason is included With revert reason enabled, the transaction receipt returned by -[`eth_getTransactionReceipt`](../../Reference/API-Methods.md#eth_gettransactionreceipt) includes +[`eth_getTransactionReceipt`](../../../public-networks/reference/api/index.md#eth_gettransactionreceipt) includes the revert reason as an ABI-encoded string. !!! important @@ -64,7 +64,7 @@ the revert reason as an ABI-encoded string. revert reason in the transactions receipt's root hash means the revert reason is only available to nodes that execute the transaction when importing the block. That is, the revert reason is not available if using fast synchronization - ([`--sync-mode=FAST`](../../Reference/CLI/CLI-Syntax.md#sync-mode)). + ([`--sync-mode=FAST`](../../../public-networks/reference/cli/options.md#sync-mode)). !!! example @@ -90,8 +90,8 @@ the revert reason as an ABI-encoded string. } ``` -The error returned by [`eth_estimateGas`](../../Reference/API-Methods.md#eth_estimategas) and -[`eth_call`](../../Reference/API-Methods.md#eth_call) includes the revert reason as an ABI-encoded string in the `data` field. +The error returned by [`eth_estimateGas`](../../../public-networks/reference/api/index.md#eth_estimategas) and +[`eth_call`](../../../public-networks/reference/api/index.md#eth_call) includes the revert reason as an ABI-encoded string in the `data` field. !!! example "Example of `eth_estimateGas` and `eth_call` error" @@ -107,10 +107,10 @@ The error returned by [`eth_estimateGas`](../../Reference/API-Methods.md#eth_est } ``` -The list items in the [`trace`](../../Reference/Trace-Types.md#trace) response returned by -[`trace_replayBlockTransactions`](../../Reference/API-Methods.md#trace_replayblocktransactions), -[`trace_block`](../../Reference/API-Methods.md#trace_block), and -[`trace_transaction`](../../Reference/API-Methods.md#trace_transaction) include the revert reason as an ABI-encoded string. +The list items in the [`trace`](../../../public-networks/reference/trace-types.md#trace) response returned by +[`trace_replayBlockTransactions`](../../../public-networks/reference/api/index.md#trace_replayblocktransactions), +[`trace_block`](../../../public-networks/reference/api/index.md#trace_block), and +[`trace_transaction`](../../../public-networks/reference/api/index.md#trace_transaction) include the revert reason as an ABI-encoded string. !!! example "Example of `trace` response list item" diff --git a/docs/private-networks/how-to/upgrade.md b/docs/private-networks/how-to/upgrade.md new file mode 100644 index 00000000..03f39b97 --- /dev/null +++ b/docs/private-networks/how-to/upgrade.md @@ -0,0 +1,45 @@ +--- +description: Upgrading protocol versions +--- + +# Network and protocol upgrades + +!!! important + + Node upgrades upgrade your Besu client to a later version. + In private networks, you can [upgrade your node](../../public-networks/how-to/upgrade-node.md) + as in public networks. + +Network upgrades are the mechanism for upgrading the Ethereum protocol. +Protocol upgrades occur during the network upgrades. + +For Ethereum Mainnet and public testnets, the milestone block definitions are included in Besu. +Upgrading your Besu client applies the network upgrade. + +For private networks, all network participants must agree on the protocol upgrades and coordinate +the network upgrades. +The genesis file specifies the milestone block at which to apply the protocol upgrade. + +## Upgrade the protocol + +To upgrade the protocol in a private network: + +1. Review included EIPs for breaking changes. + A [meta EIP](https://eips.ethereum.org/meta) for each protocol upgrade lists included EIPs. + For example, [Istanbul](https://eips.ethereum.org/EIPS/eip-1679). +1. Network participants agree on the block number at which to upgrade. +1. For each node in the network: + 1. Add the [milestone block number](../../public-networks/reference/genesis-items.md#milestone-blocks) to + the genesis file. + 1. Restart the node before reaching milestone block. + +!!! caution + + To avoid a forked network, all network participants must update their genesis file to include + the agreed on milestone block and restart their node before reaching the milestone block. + +!!! tip "Tips" + + - For compatibility with future protocol upgrades, don't hardcode any gas price assumptions. + - Implementing upgradeable contracts enables contracts to be upgraded if a protocol upgrade does + include breaking changes. diff --git a/docs/HowTo/Limit-Access/Local-Permissioning.md b/docs/private-networks/how-to/use-permissioning/local.md similarity index 69% rename from docs/HowTo/Limit-Access/Local-Permissioning.md rename to docs/private-networks/how-to/use-permissioning/local.md index 06ad3d50..e0724c88 100644 --- a/docs/HowTo/Limit-Access/Local-Permissioning.md +++ b/docs/private-networks/how-to/use-permissioning/local.md @@ -2,9 +2,9 @@ description: Hyperledger Besu local permissioning --- -# Local permissioning +# Use local permissioning -[Local permissioning](../../Concepts/Permissioning/Permissioning-Overview.md#local) supports node and account allowlisting. +[Local permissioning](../../concepts/permissioning/index.md#local) supports node and account allowlisting. ## Node allowlisting @@ -26,15 +26,15 @@ enabled, communication is only between nodes in the allowlist. Node allowlisting is at the node level. That is, each node in the network has a [permissions configuration file](#permissions-configuration-file) file in the -[data directory](../../Reference/CLI/CLI-Syntax.md#data-path) for the node. +[data directory](../../../public-networks/reference/cli/options.md#data-path) for the node. Local permissioning doesn't check that the node using the permissions configuration file is listed in the allowlist, it only checks that the remote end of the connection is in the allowlist. Use [onchain permissioning] if you need to check both ends of the connection. -### Specifying bootnodes in the allowlist +### Specify bootnodes in the allowlist -The nodes permissions list must include the [bootnodes](../Find-and-Connect/Bootnodes.md) or Hyperledger Besu doesn't +The nodes permissions list must include the [bootnodes](../configure/bootnodes.md) or Hyperledger Besu doesn't start with node permissions enabled. !!! example @@ -54,34 +54,34 @@ start with node permissions enabled. (for example, if you use Kubernetes implementing a load balancer for ingress and a NAT gateway IP address for egress), add both addresses to the allowlist, using the same public key for each IP address. This will allow the node to connect. -### Enabling node allowlisting +### Enable node allowlisting To enable node allowlisting, specify the -[`--permissions-nodes-config-file-enabled`](../../Reference/CLI/CLI-Syntax.md#permissions-nodes-config-file-enabled) +[`--permissions-nodes-config-file-enabled`](../../reference/cli/options.md#permissions-nodes-config-file-enabled) option when starting Besu. The `PERM` API methods are not enabled by default. To enable the `PERM` API methods, use the -[`--rpc-http-api`](../../Reference/CLI/CLI-Syntax.md#rpc-http-api) or -[`--rpc-ws-api`](../../Reference/CLI/CLI-Syntax.md#rpc-ws-api) options. +[`--rpc-http-api`](../../../public-networks/reference/cli/options.md#rpc-http-api) or +[`--rpc-ws-api`](../../../public-networks/reference/cli/options.md#rpc-ws-api) options. -### Updating the node allowlist +### Update the node allowlist To update the nodes allowlist while the node is running, use the following JSON-RPC API methods: -* [perm_addNodesToAllowlist](../../Reference/API-Methods.md#perm_addnodestoallowlist) -* [perm_removeNodesFromAllowlist](../../Reference/API-Methods.md#perm_removenodesfromallowlist) +* [perm_addNodesToAllowlist](../../reference/api/index.md#perm_addnodestoallowlist) +* [perm_removeNodesFromAllowlist](../../reference/api/index.md#perm_removenodesfromallowlist) You can also update the [`permissions_config.toml`](#permissions-configuration-file) file directly and then update the allowlist using the -[`perm_reloadPermissionsFromFile`](../../Reference/API-Methods.md#perm_reloadpermissionsfromfile) +[`perm_reloadPermissionsFromFile`](../../reference/api/index.md#perm_reloadpermissionsfromfile) method. Updates to the permissions configuration file persist across node restarts. -### Viewing the node allowlist +### View the node allowlist To view the nodes allowlist, use the -[perm_getNodesAllowlist](../../Reference/API-Methods.md#perm_getnodesallowlist) method. +[perm_getNodesAllowlist](../../reference/api/index.md#perm_getnodesallowlist) method. !!! note @@ -111,22 +111,22 @@ permissioning accepts transactions only from accounts in the accounts allowlist. Account allowlisting is at the node level. That is, each node in the network has a [permissions configuration file](#permissions-configuration-file) in the -[data directory](../../Reference/CLI/CLI-Syntax.md#data-path) for the node. +[data directory](../../../public-networks/reference/cli/options.md#data-path) for the node. !!! caution "Using account permissioning and privacy" Account permissioning is incompatible with - [random key signing](../Use-Privacy/Sign-Privacy-Marker-Transactions.md) for - [privacy marker transactions](../../Concepts/Privacy/Private-Transaction-Processing.md). + [random key signing](../use-privacy/sign-pmts.md) for + [privacy marker transactions](../../concepts/privacy/private-transactions/processing.md). If using account permissioning and privacy, a signing key must be specified using the - [`--privacy-marker-transaction-signing-key-file`](../../Reference/CLI/CLI-Syntax.md#privacy-marker-transaction-signing-key-file) + [`--privacy-marker-transaction-signing-key-file`](../../reference/cli/options.md#privacy-marker-transaction-signing-key-file) command line option and the corresponding public key included in the accounts allowlist. Transaction validation against the accounts allowlist occurs at the following points: * Submitted by JSON-RPC API method - [`eth_sendRawTransaction`](../../Reference/API-Methods.md#eth_sendrawtransaction) + [`eth_sendRawTransaction`](../../../public-networks/reference/api/index.md#eth_sendrawtransaction) * Received via propagation from another node * Added to a block by a mining node @@ -136,7 +136,7 @@ transactions from accounts that are not on the accounts allowlist of that node. The following diagram illustrates applying local and onchain permissioning rules. -![Permissioning Flow](../../images/PermissioningFlow.png) +![Permissioning Flow](../../../images/PermissioningFlow.png) !!! example "Example of different account allowlists" @@ -162,60 +162,60 @@ The following diagram illustrates applying local and onchain permissioning rules by Node B to which it's propagated if the account is not in the Node B allowlist. We recommend each node in the network has the same accounts allowlist. -### Enabling account allowlisting +### Enable account allowlisting To enable account allowlisting, specify the -[`--permissions-accounts-config-file-enabled`](../../Reference/CLI/CLI-Syntax.md#permissions-accounts-config-file-enabled) +[`--permissions-accounts-config-file-enabled`](../../reference/cli/options.md#permissions-accounts-config-file-enabled) option when starting Besu. The `PERM` API methods are not enabled by default. To enable the `PERM` API methods, use the -[`--rpc-http-api`](../../Reference/CLI/CLI-Syntax.md#rpc-http-api) or -[`--rpc-ws-api`](../../Reference/CLI/CLI-Syntax.md#rpc-ws-api) options. +[`--rpc-http-api`](../../../public-networks/reference/cli/options.md#rpc-http-api) or +[`--rpc-ws-api`](../../../public-networks/reference/cli/options.md#rpc-ws-api) options. -### Updating the account allowlist +### Update the account allowlist To update the accounts allowlist when the node is running, use the JSON-RPC API methods: -* [`perm_addAccountsToAllowlist`](../../Reference/API-Methods.md#perm_addaccountstoallowlist) -* [`perm_removeAccountsFromAllowlist`](../../Reference/API-Methods.md#perm_removeaccountsfromallowlist). +* [`perm_addAccountsToAllowlist`](../../reference/api/index.md#perm_addaccountstoallowlist) +* [`perm_removeAccountsFromAllowlist`](../../reference/api/index.md#perm_removeaccountsfromallowlist). You can also update the [`permissions_config.toml`](#permissions-configuration-file) file directly and use the -[`perm_reloadPermissionsFromFile`](../../Reference/API-Methods.md#perm_reloadpermissionsfromfile) +[`perm_reloadPermissionsFromFile`](../../reference/api/index.md#perm_reloadpermissionsfromfile) method to update the allowlists. Updates to the permissions configuration file persist across node restarts. -### Viewing the account allowlist +### View the account allowlist To view the accounts allowlist, use the -[`perm_getAccountsAllowlist`](../../Reference/API-Methods.md#perm_getaccountsallowlist) method. +[`perm_getAccountsAllowlist`](../../reference/api/index.md#perm_getaccountsallowlist) method. ## Permissions configuration file The permissions configuration file contains the nodes and accounts allowlists. If the -[`--permissions-accounts-config-file`](../../Reference/CLI/CLI-Syntax.md#permissions-accounts-config-file) -and [`--permissions-nodes-config-file`](../../Reference/CLI/CLI-Syntax.md#permissions-nodes-config-file) +[`--permissions-accounts-config-file`](../../reference/cli/options.md#permissions-accounts-config-file) +and [`--permissions-nodes-config-file`](../../reference/cli/options.md#permissions-nodes-config-file) options are not specified, the name of the permissions configuration file must be [`permissions_config.toml`](#permissions-configuration-file) and must be in the -[data directory](../../Reference/CLI/CLI-Syntax.md#data-path) for the node. +[data directory](../../../public-networks/reference/cli/options.md#data-path) for the node. You can specify the accounts and nodes allowlists in the same file or in separate files for accounts and nodes. To specify a permissions configuration file (or separate files for accounts and nodes) in any location, use the -[`--permissions-accounts-config-file`](../../Reference/CLI/CLI-Syntax.md#permissions-accounts-config-file) +[`--permissions-accounts-config-file`](../../reference/cli/options.md#permissions-accounts-config-file) and -[`--permissions-nodes-config-file`](../../Reference/CLI/CLI-Syntax.md#permissions-nodes-config-file) +[`--permissions-nodes-config-file`](../../reference/cli/options.md#permissions-nodes-config-file) options. !!!note - The [`--permissions-accounts-config-file`](../../Reference/CLI/CLI-Syntax.md#permissions-accounts-config-file) - and [`permissions-nodes-config-file`](../../Reference/CLI/CLI-Syntax.md#permissions-nodes-config-file) + The [`--permissions-accounts-config-file`](../../reference/cli/options.md#permissions-accounts-config-file) + and [`permissions-nodes-config-file`](../../reference/cli/options.md#permissions-nodes-config-file) options are not used when running Besu from the - [Docker image](../Get-Started/Installation-Options/Run-Docker-Image.md). Use a bind mount to + [Docker image](../../get-started/install/run-docker-image.md). Use a bind mount to [specify a permissions configuration file with Docker]. !!! example "Sample permissions configuration file" @@ -227,6 +227,6 @@ options. ``` -[specify a permissions configuration file with Docker]: ../Get-Started/Installation-Options/Run-Docker-Image.md#permissions-configuration-file -[support domain names]: ../../Concepts/Node-Keys.md#domain-name-support -[onchain permissioning]: ../../Concepts/Permissioning/Onchain-Permissioning.md +[specify a permissions configuration file with Docker]: ../../get-started/install/run-docker-image.md +[support domain names]: ../../../public-networks/concepts/node-keys.md#domain-name-support +[onchain permissioning]: ../../concepts/permissioning/onchain.md diff --git a/docs/private-networks/how-to/use-permissioning/onchain.md b/docs/private-networks/how-to/use-permissioning/onchain.md new file mode 100644 index 00000000..85b37d02 --- /dev/null +++ b/docs/private-networks/how-to/use-permissioning/onchain.md @@ -0,0 +1,128 @@ +--- +description: Updating Hyperledger Besu onchain allowlists +--- + +# Use onchain permissioning + +When using [onchain permissioning](../../concepts/permissioning/onchain.md), you can update +[nodes](#update-nodes-allowlist) and [accounts](#update-accounts-allowlist) allowlists using the +Besu [permissioning management dapp](#deploy-the-permissioning-management-dapp). + +## Deploy the permissioning management dapp + +To deploy the permissioning management dapp for production: + +1. Retrieve the most recent release (tarball or zip) from the [projects release page]. + +1. Unpack the distribution into a directory available to your Web server. + +1. In the root of the unpack directory, add a file called `config.json` replacing the placeholders + shown below. + + !!! example "`config.json`" + + ```json + + { + "accountIngressAddress": "
", + "nodeIngressAddress": "
", + "networkId": "" + } + ``` + +1. On your Web server, host the contents of the directory as static files and direct root requests + to `index.html`. + +!!! note "Start a production permissioned network" + + To start a production permissioned network, follow the [onchain permissioning tutorial], but don't + perform the steps using `yarn` to install, build, and start the development server. + Instead, follow the steps in this section to deploy the permissioning management dapp to your Web server. + +## Update nodes allowlist + +To add a node to the Hyperledger Besu nodes allowlist: + +1. On the **Nodes** tab of the permissioning management dapp, select **Add Node**. + The **Add Node** window displays. +2. Enter the [enode URL](../../../public-networks/concepts/node-keys.md#enode-url) of the node you are adding and select **Add Node**. + +!!! tip + + If your node has two different IP addresses for ingress and egress + (for example, if you use Kubernetes implementing a load balancer for ingress and a NAT gateway IP address for egress), + add both addresses to the allowlist, using the same public key for each IP address. This will allow the node to connect. + +!!! important + + Node allowlists [support domain names] in enode URLs as an experimental feature. Use the `--Xdns-enabled` option + to enable domain name support. + + If using Kubernetes, enable domain name support and use the `--Xdns-update-enabled` option to ensure that Besu can + connect to a container after being restarted, even if the IP address of the container changes. + +To remove a node from the nodes allowlist: + +1. On the **Nodes** tab of the permissioning management dapp, hover over the row of the + node you are removing. A trash can displays. +1. Select the trash can. + +!!! tip + + If you add a running node, the node does not attempt to reconnect to the bootnode and + synchronize until peer discovery restarts. To add an allowlisted node as a peer without waiting + for peer discovery to restart, use + [`admin_addPeer`](../../../public-networks/reference/api/index.md#admin_addpeer). + + If you add the node to the allowlist before starting the node, using `admin_addPeer` is not + required because peer discovery is run on node startup. + +!!! tip + + If nodes are not connecting as expected, set the [log level to `TRACE`](../../../public-networks/reference/cli/options.md#logging) + and search for messages containing `Node permissioning` to identify the issue. + + Ensure the [`--p2p-host`](../../../public-networks/reference/cli/options.md#p2p-host) command line option has been + correctly configured for all nodes with the + externally accessible address. + + If you change your network configuration, you may need to update the node allowlist. + +## Update accounts allowlist + +To add an account to the accounts allowlist: + +1. On the **Accounts** tab of the permissioning management dapp, select **Add Account**. + The **Add Account** window displays. +1. Enter the account address in the **Account Address** field and select **Add Account**. + +To remove an account from the accounts allowlist: + +1. On the **Accounts** tab of the permissioning management dapp, hover over the row of + the account you are removing. A trash can displays. +1. Select the trash can. + +## Update admins + +You can add or remove admins in the same way as [accounts](#update-accounts-allowlist), except on the **Admins** tab. + +## Specify the permissioning contract interface version + +Use the [`--permissions-nodes-contract-version`](../../reference/cli/options.md#permissions-nodes-contract-version) +command line option to specify the version of the [permissioning contract interface](../../concepts/permissioning/onchain.md#permissioning-contracts). +The default is 1. + +Specify the contract interface version that maps to the version of the [Enterprise Ethereum Alliance Client Specification](https://entethalliance.org/technical-specifications/) +the contract interface implements. + +| | EEA Client Specification | Contract interface | +|:--------|:-------------------------|:-------------------| +| Version | 5 | 1 | +| Version | 6 | 2 | + +The permissioning contracts in the [`ConsenSys/permissioning-smart-contracts`](https://github.com/ConsenSys/permissioning-smart-contracts) +repository implement the version 2 contract interface. + +[support domain names]: ../../../public-networks/concepts/node-keys.md#domain-name-support +[projects release page]: https://github.com/ConsenSys/permissioning-smart-contracts/releases/latest +[onchain permissioning tutorial]: ../../tutorials/permissioning/onchain.md diff --git a/docs/HowTo/Use-Privacy/Access-Private-Transactions.md b/docs/private-networks/how-to/use-privacy/access-private-transactions.md similarity index 68% rename from docs/HowTo/Use-Privacy/Access-Private-Transactions.md rename to docs/private-networks/how-to/use-privacy/access-private-transactions.md index 6e64d1ee..b500a5d3 100644 --- a/docs/HowTo/Use-Privacy/Access-Private-Transactions.md +++ b/docs/private-networks/how-to/use-privacy/access-private-transactions.md @@ -3,7 +3,7 @@ description: Methods for accessing and managing private transactions and privacy Hyperledger Besu --- -# Accessing private and privacy marker transactions +# Access private and privacy marker transactions !!! warning @@ -12,7 +12,7 @@ description: Methods for accessing and managing private transactions and privacy and about all the [new Tessera features](https://consensys.net/blog/quorum/tessera-the-privacy-manager-of-choice-for-consensys-quorum-networks). A Hyperledger Besu private transaction creates a -[privacy marker transaction](../../Concepts/Privacy/Private-Transaction-Processing.md) and +[privacy marker transaction](../../concepts/privacy/private-transactions/processing.md) and the private transaction itself. ## Transaction receipts @@ -21,9 +21,9 @@ With the transaction hash returned when submitting the private transaction, to g receipt for the: * Private transaction, use - [`priv_getTransactionReceipt`](../../Reference/API-Methods.md#priv_gettransactionreceipt). + [`priv_getTransactionReceipt`](../../reference/api/index.md#priv_gettransactionreceipt). * Privacy marker transaction, use - [`eth_getTransactionReceipt`](../../Reference/API-Methods.md#eth_gettransactionreceipt). + [`eth_getTransactionReceipt`](../../../public-networks/reference/api/index.md#eth_gettransactionreceipt). The transaction receipt includes a `status` indicating if the transaction failed (`0x0`), succeeded (`0x1`), or was invalid (`0x2`). @@ -31,7 +31,7 @@ was invalid (`0x2`). !!! example "Private transaction failure example" To deploy a private contract, you submit a transaction using - [`eea_sendRawTransaction`](../Send-Transactions/Creating-Sending-Private-Transactions.md). If + [`eea_sendRawTransaction`](../send-transactions/private-transactions.md). If contract deployment fails because of insufficient gas, the privacy marker transaction receipt has a status of success and the private transaction receipt has a status of failure. @@ -40,6 +40,6 @@ was invalid (`0x2`). With the transaction hash returned when submitting the private transaction, to get the: * Private transaction, use - [`priv_getPrivateTransaction`](../../Reference/API-Methods.md#priv_getprivatetransaction). + [`priv_getPrivateTransaction`](../../reference/api/index.md#priv_getprivatetransaction). * Privacy marker transaction, use - [`eth_getTransactionByHash`](../../Reference/API-Methods.md#eth_gettransactionbyhash). + [`eth_getTransactionByHash`](../../../public-networks/reference/api/index.md#eth_gettransactionbyhash). diff --git a/docs/HowTo/Use-Privacy/Privacy.md b/docs/private-networks/how-to/use-privacy/besu-extended.md similarity index 65% rename from docs/HowTo/Use-Privacy/Privacy.md rename to docs/private-networks/how-to/use-privacy/besu-extended.md index 0e4e31bf..32a7f93b 100644 --- a/docs/HowTo/Use-Privacy/Privacy.md +++ b/docs/private-networks/how-to/use-privacy/besu-extended.md @@ -2,7 +2,7 @@ description: Hyperledger Besu-extended privacy --- -# Using Hyperledger Besu-extended privacy +# Use Besu-extended privacy !!! warning @@ -11,26 +11,26 @@ description: Hyperledger Besu-extended privacy and about all the [new Tessera features](https://consensys.net/blog/quorum/tessera-the-privacy-manager-of-choice-for-consensys-quorum-networks). Hyperledger Besu provides an extended implementation of privacy allowing you to -[create a privacy group for a set of participants](../../Concepts/Privacy/Privacy-Groups.md). You +[create a privacy group for a set of participants](../../concepts/privacy/privacy-groups.md). You must specify the privacy group ID when sending private transactions. -To enable the [`PRIV` API methods](../../Reference/API-Methods.md#priv-methods), use the -[`--rpc-http-api`](../../Reference/CLI/CLI-Syntax.md#rpc-http-api) or -[`--rpc-ws-api`](../../Reference/CLI/CLI-Syntax.md#rpc-ws-api) command line options. +To enable the [`PRIV` API methods](../../reference/api/index.md#priv-methods), use the +[`--rpc-http-api`](../../../public-networks/reference/cli/options.md#rpc-http-api) or +[`--rpc-ws-api`](../../../public-networks/reference/cli/options.md#rpc-ws-api) command line options. To create the privacy group containing the recipients of a private transaction, use -[`priv_createPrivacyGroup`](../../Reference/API-Methods.md#priv_createprivacygroup). +[`priv_createPrivacyGroup`](../../reference/api/index.md#priv_createprivacygroup). To create an EEA-compliant private transaction, specify `privacyGroupId` when creating the signed transaction passed as an input parameter to -[`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction). +[`eea_sendRawTransaction`](../../reference/api/index.md#eea_sendrawtransaction). ## Privacy group type Privacy groups created using -[`priv_createPrivacyGroup`](../../Reference/API-Methods.md#priv_createprivacygroup) +[`priv_createPrivacyGroup`](../../reference/api/index.md#priv_createprivacygroup) have a `BESU` privacy group type when returned by -[`priv_findPrivacyGroup`](../../Reference/API-Methods.md#priv_findprivacygroup). +[`priv_findPrivacyGroup`](../../reference/api/index.md#priv_findprivacygroup). !!! example diff --git a/docs/HowTo/Use-Privacy/EEA-Compliant.md b/docs/private-networks/how-to/use-privacy/eea-compliant.md similarity index 71% rename from docs/HowTo/Use-Privacy/EEA-Compliant.md rename to docs/private-networks/how-to/use-privacy/eea-compliant.md index 1c36c896..26c6b213 100644 --- a/docs/HowTo/Use-Privacy/EEA-Compliant.md +++ b/docs/private-networks/how-to/use-privacy/eea-compliant.md @@ -2,7 +2,7 @@ description: Hyperledger Besu JSON-RPC methods to use for EEA-compliant privacy --- -# Using EEA-compliant privacy +# Use EEA-compliant privacy !!! warning @@ -10,23 +10,23 @@ description: Hyperledger Besu JSON-RPC methods to use for EEA-compliant privacy Read our [Orion to Tessera migration guide](https://docs.orion.consensys.net/en/latest/Tutorials/Migrating-from-Orion-to-Tessera/) and about all the [new Tessera features](https://consensys.net/blog/quorum/tessera-the-privacy-manager-of-choice-for-consensys-quorum-networks). -When using Hyperledger Besu [EEA-compliant privacy](../../Concepts/Privacy/Privacy-Groups.md), the +When using Hyperledger Besu [EEA-compliant privacy](../../concepts/privacy/privacy-groups.md), the group of nodes specified by `privateFrom` and `privateFor` form a privacy group, to which Tessera assigns a unique privacy group ID. -To enable the [`EEA` API methods](../../Reference/API-Methods.md#eea-methods), use the -[`--rpc-http-api`](../../Reference/CLI/CLI-Syntax.md#rpc-http-api) or -[`--rpc-ws-api`](../../Reference/CLI/CLI-Syntax.md#rpc-ws-api) command line options. +To enable the [`EEA` API methods](../../reference/api/index.md#eea-methods), use the +[`--rpc-http-api`](../../../public-networks/reference/cli/options.md#rpc-http-api) or +[`--rpc-ws-api`](../../../public-networks/reference/cli/options.md#rpc-ws-api) command line options. To create an EEA-compliant private transaction, specify `privateFor` when creating the signed transaction passed as an input parameter to -[`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction). +[`eea_sendRawTransaction`](../../reference/api/index.md#eea_sendrawtransaction). ## Privacy group type Privacy groups created when specifying `privateFrom` and `privateFor` have a `LEGACY` privacy group type when returned by -[`priv_findPrivacyGroup`](../../Reference/API-Methods.md#priv_findprivacygroup). +[`priv_findPrivacyGroup`](../../reference/api/index.md#priv_findprivacygroup). !!! example diff --git a/docs/HowTo/Use-Privacy/Use-FlexiblePrivacy.md b/docs/private-networks/how-to/use-privacy/flexible.md similarity index 68% rename from docs/HowTo/Use-Privacy/Use-FlexiblePrivacy.md rename to docs/private-networks/how-to/use-privacy/flexible.md index e0280da9..18295d69 100644 --- a/docs/HowTo/Use-Privacy/Use-FlexiblePrivacy.md +++ b/docs/private-networks/how-to/use-privacy/flexible.md @@ -2,7 +2,7 @@ description: Use flexible privacy groups --- -# Using flexible privacy groups +# Use flexible privacy groups !!! warning @@ -11,7 +11,7 @@ description: Use flexible privacy groups and about all the [new Tessera features](https://consensys.net/blog/quorum/tessera-the-privacy-manager-of-choice-for-consensys-quorum-networks). Use the [`web3js-quorum` library](https://github.com/ConsenSys/web3js-quorum) to create and update -membership of [flexible privacy groups](../../Concepts/Privacy/Flexible-PrivacyGroups.md). +membership of [flexible privacy groups](../../concepts/privacy/flexible-privacy.md). !!! tip @@ -20,7 +20,7 @@ membership of [flexible privacy groups](../../Concepts/Privacy/Flexible-PrivacyG !!! important - [Flexible privacy groups](../../Concepts/Privacy/Flexible-PrivacyGroups.md) are an early access + [Flexible privacy groups](../../concepts/privacy/flexible-privacy.md) are an early access feature. Don't use in production networks. The flexible privacy group interfaces may change between releases. There might not be an @@ -28,20 +28,20 @@ membership of [flexible privacy groups](../../Concepts/Privacy/Flexible-PrivacyG group functionality in future versions. We don't recommend creating flexible privacy groups in a chain with existing - [offchain privacy groups](../../Concepts/Privacy/Privacy-Groups.md). + [offchain privacy groups](../../concepts/privacy/privacy-groups.md). -## Enabling flexible privacy groups +## Enable flexible privacy groups -Use the [`--privacy-flexible-groups-enabled`](../../Reference/CLI/CLI-Syntax.md#privacy-flexible-groups-enabled) -command line option to enable [flexible privacy groups](../../Concepts/Privacy/Flexible-PrivacyGroups.md). -When flexible privacy groups are enabled, the [`priv_createPrivacyGroup`](../../Reference/API-Methods.md#priv_createprivacygroup), -[`priv_deletePrivacyGroup`](../../Reference/API-Methods.md#priv_deleteprivacygroup), -and [`priv_findPrivacyGroup`](../../Reference/API-Methods.md#priv_findprivacygroup) methods for -[offchain privacy groups](../../Concepts/Privacy/Privacy-Groups.md) are disabled. +Use the [`--privacy-flexible-groups-enabled`](../../reference/cli/options.md#privacy-flexible-groups-enabled) +command line option to enable [flexible privacy groups](../../concepts/privacy/flexible-privacy.md). +When flexible privacy groups are enabled, the [`priv_createPrivacyGroup`](../../reference/api/index.md#priv_createprivacygroup), +[`priv_deletePrivacyGroup`](../../reference/api/index.md#priv_deleteprivacygroup), +and [`priv_findPrivacyGroup`](../../reference/api/index.md#priv_findprivacygroup) methods for +[offchain privacy groups](../../concepts/privacy/privacy-groups.md) are disabled. ## Simple flexible privacy group example -To create and find a [flexible privacy group](../../Concepts/Privacy/Flexible-PrivacyGroups.md) using +To create and find a [flexible privacy group](../../concepts/privacy/flexible-privacy.md) using the [`web3js-quorum` library](https://github.com/ConsenSys/web3js-quorum): 1. Update the `example/keys.js` file to match your network configuration. @@ -62,9 +62,9 @@ the [`web3js-quorum` library](https://github.com/ConsenSys/web3js-quorum): expected behavior because private transactions check offchain and onchain to find the privacy group for a private transaction. -## Adding and removing members +## Add and remove members -To add and remove members from a [flexible privacy group](../../Concepts/Privacy/Flexible-PrivacyGroups.md), +To add and remove members from a [flexible privacy group](../../concepts/privacy/flexible-privacy.md), use the `addTo` and `removeFrom` methods in the [`web3js-quorum` library](https://github.com/ConsenSys/web3js-quorum) client library. diff --git a/docs/HowTo/Use-Privacy/Use-GoQuorum-compatible-privacy.md b/docs/private-networks/how-to/use-privacy/goquorum-compatible.md similarity index 84% rename from docs/HowTo/Use-Privacy/Use-GoQuorum-compatible-privacy.md rename to docs/private-networks/how-to/use-privacy/goquorum-compatible.md index 3e505957..3c01d0d8 100644 --- a/docs/HowTo/Use-Privacy/Use-GoQuorum-compatible-privacy.md +++ b/docs/private-networks/how-to/use-privacy/goquorum-compatible.md @@ -2,7 +2,7 @@ description: Use GoQuorum-compatible privacy --- -# Using GoQuorum-compatible privacy +# Use GoQuorum-compatible privacy GoQuorum-compatible privacy mode enables interoperable private transactions between Hyperledger Besu and [GoQuorum clients] using the Tessera private transaction manager. @@ -10,10 +10,10 @@ Besu and [GoQuorum clients] using the Tessera private transaction manager. This mode requires both networks to run an interoperable consensus algorithm such as [QBFT] to work. To run your Besu nodes in GoQuorum-compatible privacy mode, add the `isQuorum:true` flag to your -[genesis file](../Configure/Genesis-File.md). +[genesis file](../../../public-networks/concepts/genesis-file.md). While in GoQuorum-compatible privacy mode and using Tessera, disable [`orion` mode](https://docs.tessera.consensys.net/en/stable/HowTo/Configure/Orion-Mode/) -by removing `"mode": "orion",` from the [Tessera configuration file](../../Tutorials/Privacy/Configuring-Multi-Tenancy.md#3-update-the-tessera-configuration-file). +by removing `"mode": "orion",` from the [Tessera configuration file](../../tutorials/privacy/multi-tenancy.md#3-update-the-tessera-configuration-file). ## GoQuorum-compatible private transactions @@ -26,5 +26,5 @@ The following documentation explains [the transaction lifecycle] in GoQuorum-com [GoQuorum clients]: https://consensys.net/docs/goquorum/en/stable/ -[QBFT]: ../Configure/Consensus-Protocols/QBFT.md +[QBFT]: ../configure/consensus/qbft.md [the transaction lifecycle]: https://consensys.net/docs/goquorum/en/stable/concepts/privacy/private-transaction-lifecycle/ diff --git a/docs/HowTo/Use-Privacy/Performance-Best-Practices.md b/docs/private-networks/how-to/use-privacy/performance-best-practices.md similarity index 98% rename from docs/HowTo/Use-Privacy/Performance-Best-Practices.md rename to docs/private-networks/how-to/use-privacy/performance-best-practices.md index 0cfc38a5..0acd469c 100644 --- a/docs/HowTo/Use-Privacy/Performance-Best-Practices.md +++ b/docs/private-networks/how-to/use-privacy/performance-best-practices.md @@ -1,4 +1,4 @@ -# Private transaction performance best practices +# Performance best practices This document collects deployment and usage tips to help you achieve high performance for private transactions. If transaction throughput or latency is not meeting your expectations, please consider the following before raising an issue. @@ -26,7 +26,7 @@ When submitting a private transaction using [web3js-quorum](https://github.com/C This limits the throughput to at most one private transaction per block when submitting from a single thread. To increase throughput, use web3js-quorum from multiple concurrent threads or processes. -### Colocate Besu and Tessera +### Co-locate Besu and Tessera Besu has to talk to its local Tessera node frequently while handling a block. While we do not recommend running them on the same node, minimizing the latency between Besu and Tessera will improve block processing times. diff --git a/docs/HowTo/Use-Privacy/Create-Manage-Privacy-Groups.md b/docs/private-networks/how-to/use-privacy/privacy-groups.md similarity index 56% rename from docs/HowTo/Use-Privacy/Create-Manage-Privacy-Groups.md rename to docs/private-networks/how-to/use-privacy/privacy-groups.md index c8916b15..18394276 100644 --- a/docs/HowTo/Use-Privacy/Create-Manage-Privacy-Groups.md +++ b/docs/private-networks/how-to/use-privacy/privacy-groups.md @@ -13,13 +13,13 @@ description: Create and manage privacy groups with Hyperledger Besu Hyperledger Besu-extended privacy provides JSON-RPC API methods for creating and managing privacy groups: -* [`priv_createPrivacyGroup`](../../Reference/API-Methods.md#priv_createprivacygroup) -* [`priv_findPrivacyGroup`](../../Reference/API-Methods.md#priv_findprivacygroup) -* [`priv_deletePrivacyGroup`](../../Reference/API-Methods.md#priv_deleteprivacygroup). +* [`priv_createPrivacyGroup`](../../reference/api/index.md#priv_createprivacygroup) +* [`priv_findPrivacyGroup`](../../reference/api/index.md#priv_findprivacygroup) +* [`priv_deletePrivacyGroup`](../../reference/api/index.md#priv_deleteprivacygroup). !!! tip You can find and delete - [EEA-compliant privacy groups](../../Concepts/Privacy/Privacy-Groups.md) using - [`priv_findPrivacyGroup`](../../Reference/API-Methods.md#priv_findprivacygroup) and - [`priv_deletePrivacyGroup`](../../Reference/API-Methods.md#priv_deleteprivacygroup). + [EEA-compliant privacy groups](../../concepts/privacy/privacy-groups.md) using + [`priv_findPrivacyGroup`](../../reference/api/index.md#priv_findprivacygroup) and + [`priv_deletePrivacyGroup`](../../reference/api/index.md#priv_deleteprivacygroup). diff --git a/docs/HowTo/Use-Privacy/Sign-Privacy-Marker-Transactions.md b/docs/private-networks/how-to/use-privacy/sign-pmts.md similarity index 51% rename from docs/HowTo/Use-Privacy/Sign-Privacy-Marker-Transactions.md rename to docs/private-networks/how-to/use-privacy/sign-pmts.md index cfa19668..7417c8ee 100644 --- a/docs/HowTo/Use-Privacy/Sign-Privacy-Marker-Transactions.md +++ b/docs/private-networks/how-to/use-privacy/sign-pmts.md @@ -2,11 +2,11 @@ description: How to sign a privacy marker transaction with Hyperledger Besu --- -# Signing privacy marker transactions +# Sign privacy marker transactions -You can sign privacy marker transactions with either a random key or a specified key. To sign +You can sign privacy marker transactions (PMTs) with either a random key or a specified key. To sign privacy marker transactions with a specified private key, use -[`--privacy-marker-transaction-signing-key-file`](../../Reference/CLI/CLI-Syntax.md#privacy-marker-transaction-signing-key-file) +[`--privacy-marker-transaction-signing-key-file`](../../reference/cli/options.md#privacy-marker-transaction-signing-key-file) when starting Hyperledger Besu. !!! note @@ -18,23 +18,23 @@ when starting Hyperledger Besu. In networks where you pay gas, you must specify a key and the associated account must contain adequate funds. -In [free gas networks](../../HowTo/Configure/FreeGas.md), to provide further anonymity by signing +In [free gas networks](../configure/free-gas.md), to provide further anonymity by signing each privacy marker transaction with a different random key, exclude the -[`--privacy-marker-transaction-signing-key-file`](../../Reference/CLI/CLI-Syntax.md#privacy-marker-transaction-signing-key-file) +[`--privacy-marker-transaction-signing-key-file`](../../reference/cli/options.md#privacy-marker-transaction-signing-key-file) command line option when starting Besu. !!! caution "Using account permissioning and privacy" - You cannot use [Account permissioning] with random key signing. + You can't use [account permissioning] with random key signing. If using account permissioning and privacy, a signing key must be specified using the - [`--privacy-marker-transaction-signing-key-file`](../../Reference/CLI/CLI-Syntax.md#privacy-marker-transaction-signing-key-file) + [`--privacy-marker-transaction-signing-key-file`](../../reference/cli/options.md#privacy-marker-transaction-signing-key-file) command line option and the corresponding public key included in the accounts allowlist. !!! note Besu signs privacy marker transactions during the - [private transaction process](../../Concepts/Privacy/Private-Transaction-Processing.md). + [private transaction process](../../concepts/privacy/private-transactions/processing.md). -[Account permissioning]: ../../Concepts/Permissioning/Permissioning-Overview.md#account-permissioning +[account permissioning]: ../../concepts/permissioning/index.md#account-permissioning diff --git a/docs/HowTo/Use-Privacy/Run-Tessera-With-Besu.md b/docs/private-networks/how-to/use-privacy/tessera.md similarity index 84% rename from docs/HowTo/Use-Privacy/Run-Tessera-With-Besu.md rename to docs/private-networks/how-to/use-privacy/tessera.md index e65226de..51254043 100644 --- a/docs/HowTo/Use-Privacy/Run-Tessera-With-Besu.md +++ b/docs/private-networks/how-to/use-privacy/tessera.md @@ -10,22 +10,21 @@ description: Running ConsenSys Quorum Tessera with Hyperledger Besu Read our [Orion to Tessera migration guide](https://docs.orion.consensys.net/en/latest/Tutorials/Migrating-from-Orion-to-Tessera/) and about all the [new Tessera features](https://consensys.net/blog/quorum/tessera-the-privacy-manager-of-choice-for-consensys-quorum-networks). -To enable [privacy functionality](../../Concepts/Privacy/Privacy-Overview.md) in production +To enable [privacy functionality](../../concepts/privacy/index.md) in production systems, [Tessera](https://docs.tessera.consensys.net/) must be [highly available](#high-availability) and [run in a separate instance](#separate-instances) to Hyperledger Besu. -![Besu-Tessera-High-Availability](../../images/Besu-Tessera-High-Availability.png) +![Besu-Tessera-High-Availability](../../../images/Besu-Tessera-High-Availability.png) !!! note - You can also [configure Besu for high availability](../Configure/Configure-HA/High-Availability.md) using load - balancers. + You can also [configure Besu for high availability] using load balancers. ## High availability Privacy requires you to [configure Tessera for high availability]. Tessera also requires [`orion` mode](https://docs.tessera.consensys.net/en/stable/HowTo/Configure/Orion-Mode/) -to be enabled if **not** running Besu in [GoQuorum compatible privacy mode](../../HowTo/Use-Privacy/Use-GoQuorum-compatible-privacy.md). +to be enabled if **not** running Besu in [GoQuorum compatible privacy mode](goquorum-compatible.md). To successfully distribute a private transaction, all private transaction participants must be online. If any participants are offline when submitting the private transaction, the transaction is diff --git a/docs/HowTo/Interact/Client-Libraries/web3js-quorum.md b/docs/private-networks/how-to/use-privacy/web3js-quorum.md similarity index 90% rename from docs/HowTo/Interact/Client-Libraries/web3js-quorum.md rename to docs/private-networks/how-to/use-privacy/web3js-quorum.md index 3e2d463f..7378c5e3 100644 --- a/docs/HowTo/Interact/Client-Libraries/web3js-quorum.md +++ b/docs/private-networks/how-to/use-privacy/web3js-quorum.md @@ -2,7 +2,7 @@ description: web3js-quorum client library --- -# web3js-quorum client library +# Use the web3js-quorum client library The [web3js-quorum library](https://github.com/ConsenSys/web3js-quorum) adds a property to your web3 instance by extending [web3](https://github.com/ethereum/web3.js/). Use the library to create and @@ -35,8 +35,8 @@ npm install web3js-quorum Initialize your client where: * `` is the JSON-RPC HTTP endpoint of your Hyperledger Besu node. Specified - by the [`--rpc-http-host`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-host) and - [`--rpc-http-port`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-port) command line options. + by the [`--rpc-http-host`](../../../public-networks/reference/cli/options.md#rpc-http-host) and + [`--rpc-http-port`](../../../public-networks/reference/cli/options.md#rpc-http-port) command line options. !!! example @@ -60,7 +60,7 @@ Initialize your client where: When migrating from web3js-eea to web3js-quorum, use `Web3Quorum`. The constructor doesn't require the chain ID anymore. Chain ID is automatically retrieved from the chain using the specified JSON-RPC HTTP endpoint. -## Deploying a contract with `generateAndSendRawTransaction` +## Deploy a contract with `generateAndSendRawTransaction` To deploy a private contract, you need the contract binary. You can use [Solidity](https://solidity.readthedocs.io/en/develop/using-the-compiler.html) to get the diff --git a/docs/private-networks/index.md b/docs/private-networks/index.md new file mode 100644 index 00000000..a1ae006d --- /dev/null +++ b/docs/private-networks/index.md @@ -0,0 +1,21 @@ +--- +description: Private networks overview +--- + +# Hyperledger Besu for private networks + +You can use Besu to develop enterprise applications requiring secure, high-performance transaction +processing in a private network. + +A private network is a network not connected to Ethereum Mainnet or an Ethereum testnet. +Private networks typically use a different [chain ID](../public-networks/concepts/network-and-chain-id.md) and +proof of authority consensus ([QBFT](how-to/configure/consensus/qbft.md), +[IBFT 2.0](how-to/configure/consensus/ibft.md), or [Clique](how-to/configure/consensus/clique.md)). + +You can also [create a local development network](tutorials/ethash.md) using proof of work (Ethash). + +Besu supports enterprise features including [privacy](concepts/privacy/index.md) and +[permissioning](concepts/permissioning/index.md). + +Get started with the [Developer Quickstart](tutorials/quickstart.md) to rapidly generate local +blockchain networks. diff --git a/docs/Reference/Accounts-for-Testing.md b/docs/private-networks/reference/accounts-for-testing.md similarity index 79% rename from docs/Reference/Accounts-for-Testing.md rename to docs/private-networks/reference/accounts-for-testing.md index d71b0f7c..222f87c6 100644 --- a/docs/Reference/Accounts-for-Testing.md +++ b/docs/private-networks/reference/accounts-for-testing.md @@ -9,7 +9,7 @@ network. Hyperledger Besu also provides predefined accounts for use in developme ## Development mode -When you start Besu with the [`--network=dev`](CLI/CLI-Syntax.md#network) command line option, Besu +When you start Besu with the [`--network=dev`](../../public-networks/reference/cli/options.md#network) command line option, Besu uses the `dev.json` genesis file by default. The `dev.json` genesis file defines the following accounts used for testing. @@ -23,4 +23,4 @@ network. For an example of how to define accounts in the genesis file, see [`dev.json`](https://github.com/hyperledger/besu/blob/750580dcca349d22d024cc14a8171b2fa74b505a/config/src/main/resources/dev.json). To start Besu with the genesis file defining the existing accounts, use the -[`--genesis-file`](CLI/CLI-Syntax.md#genesis-file) command line option . +[`--genesis-file`](../../public-networks/reference/cli/options.md#genesis-file) command line option . diff --git a/docs/private-networks/reference/api/index.md b/docs/private-networks/reference/api/index.md new file mode 100644 index 00000000..11a16b45 --- /dev/null +++ b/docs/private-networks/reference/api/index.md @@ -0,0 +1,2159 @@ +--- +description: Hyperledger Besu private network JSON-RPC API methods reference +--- + +# Private network API methods + +!!! attention + + * This reference contains API methods that apply to only private networks. + For API methods that apply to both private and public networks, see the + [public network API reference](../../../public-networks/reference/api/index.md). + * All JSON-RPC HTTP examples use the default host and port endpoint `http://127.0.0.1:8545`. If + using the [--rpc-http-host](../../../public-networks/reference/cli/options.md#rpc-http-host) or + [--rpc-http-port](../../../public-networks/reference/cli/options.md#rpc-http-port) options, update the endpoint. + +## `CLIQUE` methods + +The `CLIQUE` API methods provide access to the [Clique](../../how-to/configure/consensus/clique.md) consensus engine. + +!!! note + + The `CLIQUE` API methods are not enabled by default for JSON-RPC. To enable the `CLIQUE` API + methods use the [`--rpc-http-api`](../../../public-networks/reference/cli/options.md#rpc-http-api) + or [`--rpc-ws-api`](../../../public-networks/reference/cli/options.md#rpc-ws-api) options. + +### `clique_discard` + +Discards a proposal to [add or remove a signer with the specified address]. + +#### Parameters + +`address`: *string* - 20-byte address of proposed signer + +#### Returns + +`result`: *boolean* - indicates if the proposal is discarded + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"clique_discard","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73"], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"clique_discard","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73"], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc" : "2.0", + "id" : 1, + "result" : true + } + ``` + +### `clique_getSigners` + +Lists [signers for the specified block]. + +#### Parameters + +`blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, +`earliest`, or `pending`, as described in +[Block Parameter](../../../public-networks/how-to/use-besu-api/json-rpc.md#block-parameter) + +#### Returns + +`result`: *array* of *string* - list of 20-byte addresses of signers + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"clique_getSigners","params":["latest"], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"clique_getSigners","params":["latest"], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc" : "2.0", + "id" : 1, + "result" : [ "0x42eb768f2244c8811c63729a21a3569731535f06", "0x7ffc57839b00206d1ad20c69a1981b489f772031", "0xb279182d99e65703f0076e4812653aab85fca0f0" ] + } + ``` + +### `clique_getSignerMetrics` + +Provides the following validator metrics for the specified range: + +* Number of blocks from each validator + +* Block number of the last block proposed by each validator (if any proposed in the specified + range) + +* All validators present in the last block + +#### Parameters + +* `fromBlockNumber`: *string* - integer representing a block number or the string tag `earliest`, as described + in [Block Parameter](../../../public-networks/how-to/use-besu-api/json-rpc.md#block-parameter) + +* `toBlockNumber`: *string* - integer representing a block number or one of the string tags `latest` or + `pending`, as described in + [Block Parameter](../../../public-networks/how-to/use-besu-api/json-rpc.md#block-parameter) + +If you specify: + +* No parameters, the call provides metrics for the last 100 blocks, or all blocks if there are less + than 100 blocks. + +* Only the first parameter, the call provides metrics for all blocks from the block specified to + the latest block. + +#### Returns + +`result`: *array* of *objects* - list of validator objects + +!!! note + + The proposer of the genesis block has address `0x0000000000000000000000000000000000000000`. + +!!! example + + === "curl HTTP" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"clique_getSignerMetrics","params":["1", "100"], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS" + + ```bash + {"jsonrpc":"2.0","method":"clique_getSignerMetrics","params":["1", "100"], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": [ + { + "address": "0x7ffc57839b00206d1ad20c69a1981b489f772031", + "proposedBlockCount": "0x21", + "lastProposedBlockNumber": "0x61" + }, + { + "address": "0x42eb768f2244c8811c63729a21a3569731535f06", + "proposedBlockCount": "0x21", + "lastProposedBlockNumber": "0x63" + }, + { + "address": "0xb279182d99e65703f0076e4812653aab85fca0f0", + "proposedBlockCount": "0x21", + "lastProposedBlockNumber": "0x62" + } + ] + } + ``` + +### `clique_getSignersAtHash` + +Lists signers for the specified block. + +#### Parameters + +`hash`: *string* - 32-byte block hash + +#### Returns + +`result`: *array* of *string* - list of 20-byte addresses of signers + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"clique_getSignersAtHash","params":["0x98b2ddb5106b03649d2d337d42154702796438b3c74fd25a5782940e84237a48"], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"clique_getSignersAtHash","params":["0x98b2ddb5106b03649d2d337d42154702796438b3c74fd25a5782940e84237a48"], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc" : "2.0", + "id" : 1, + "result" : [ "0x42eb768f2244c8811c63729a21a3569731535f06", "0x7ffc57839b00206d1ad20c69a1981b489f772031", "0xb279182d99e65703f0076e4812653aab85fca0f0" ] + } + ``` + +### `clique_proposals` + +Returns +[current proposals](../../how-to/configure/consensus/clique.md#add-and-remove-signers). + +#### Parameters + +None + +#### Returns + +`result`: *map* of *strings* to *booleans* - map of account addresses to corresponding boolean values indicating the +proposal for each account (if `true`, the proposal is to add a signer; if `false`, the proposal is to +remove a signer.) + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"clique_proposals","params":[], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"clique_proposals","params":[], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": { + "0x42eb768f2244c8811c63729a21a3569731535f07": false, + "0x12eb759f2222d7711c63729a45c3585731521d01": true + } + } + ``` + +### `clique_propose` + +Proposes to [add or remove a signer with the specified address]. + +#### Parameters + +* `address`: *string* - 20-byte address + +* `proposal`: *boolean* - `true` to propose adding signer or `false` to propose removing signer + +#### Returns + +`result`: *boolean* - `true` + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"clique_propose","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73", true], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"clique_propose","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73", true], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc" : "2.0", + "id" : 1, + "result" : true + } + ``` + +## `EEA` methods + +The `EEA` API methods provide functionality for [private transactions](../../concepts/privacy/private-transactions/index.md) and +[privacy groups](../../concepts/privacy/privacy-groups.md). + +!!! note + + The `EEA` API methods are not enabled by default for JSON-RPC. To enable the `EEA` API methods, + use the [`--rpc-http-api`](../../../public-networks/reference/cli/options.md#rpc-http-api) or + [`--rpc-ws-api`](../../../public-networks/reference/cli/options.md#rpc-ws-api) options. + +### `eea_sendRawTransaction` + +Distributes the +[private transaction](../../how-to/send-transactions/private-transactions.md), +generates the [privacy marker transaction](../../concepts/privacy/private-transactions/processing.md) +and submits it to the transaction pool, and returns the transaction hash of the +[privacy marker transaction](../../concepts/privacy/private-transactions/processing.md). + +The signed transaction passed as an input parameter includes the `privateFrom`, +[`privateFor` or `privacyGroupId`](../../how-to/send-transactions/private-transactions.md#eea-compliant-or-besu-extended-privacy), +and `restriction` fields. + +The `gas` and `gasPrice` are used by the [privacy marker transaction](../../concepts/privacy/private-transactions/processing.md) +not the private transaction itself. + +To avoid exposing your private key, create signed transactions offline and send the signed +transaction data using `eea_sendRawTransaction`. + +!!! important + + For production systems requiring private transactions, use a network with a consensus mechanism + supporting transaction finality to make sure the private state does not become inconsistent + with the chain. For example, [IBFT 2.0](../../how-to/configure/consensus/ibft.md) + and [QBFT](../../how-to/configure/consensus/qbft.md) provide the required finality. + + Using private transactions with [pruning](../../../public-networks/how-to/connect/sync-node.md) or + [fast sync](../../../public-networks/reference/cli/options.md#sync-mode) is not supported. + + Besu doesn't implement + [`eea_sendTransaction`](../../how-to/send-transactions/private-transactions.md). + + [EthSigner](https://docs.ethsigner.consensys.net/en/latest/) provides transaction signing and + implements [`eea_sendTransaction`](https://docs.ethsigner.consensys.net/en/latest/Using-EthSigner/Using-EthSigner/#eea_sendtransaction). + +#### Parameters + +`transaction`: *string* - signed RLP-encoded private transaction + +#### Returns + +`result`: *string* - 32-byte transaction hash of the +[privacy marker transaction](../../concepts/privacy/private-transactions/processing.md) + +!!! tip + + If creating a contract, use [priv_getTransactionReceipt](#priv_gettransactionreceipt) to + retrieve the contract address after the transaction is finalized. + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"eea_sendRawTransaction","params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"eea_sendRawTransaction","params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id":1} + ``` + + === "JSON result" + + ```json + { + "id":1, + "jsonrpc": "2.0", + "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" + } + ``` + +## `IBFT` 2.0 methods + +The `IBFT` API methods provide access to the [IBFT 2.0](../../how-to/configure/consensus/ibft.md) consensus engine. + +!!! note + + The `IBFT` API methods are not enabled by default for JSON-RPC. To enable the `IBFT` API + methods, use the [`--rpc-http-api`](../../../public-networks/reference/cli/options.md#rpc-http-api) or + [`--rpc-ws-api`](../../../public-networks/reference/cli/options.md#rpc-ws-api) options. + +### `ibft_discardValidatorVote` + +Discards a proposal to [add or remove a validator] with the specified address. + +#### Parameters + +`address`: *string* - 20-byte address of proposed validator + +#### Returns + +`result`: *boolean* - indicates if the proposal is discarded + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"ibft_discardValidatorVote","params":["0xef1bfb6a12794615c9b0b5a21e6741f01e570185"], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"ibft_discardValidatorVote","params":["0xef1bfb6a12794615c9b0b5a21e6741f01e570185"], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc" : "2.0", + "id" : 1, + "result" : true + } + ``` + +### `ibft_getPendingVotes` + +Returns [votes](../../how-to/configure/consensus/ibft.md#add-and-remove-validators) cast in the current +[epoch](../../how-to/configure/consensus/ibft.md#genesis-file). + +#### Parameters + +None + +#### Returns + +`result`: *map* of *strings* to *booleans* - map of account addresses to corresponding boolean values indicating the +vote for each account; if `true`, the vote is to add a validator. If `false`, the proposal is to +remove a validator. + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"ibft_getPendingVotes","params":[], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"ibft_getPendingVotes","params":[], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": { + "0xef1bfb6a12794615c9b0b5a21e6741f01e570185": true, + "0x42d4287eac8078828cf5f3486cfe601a275a49a5": true + } + } + ``` + +### `ibft_getSignerMetrics` + +Provides the following validator metrics for the specified range: + +* Number of blocks from each validator + +* Block number of the last block proposed by each validator (if any proposed in the specified + range) + +* All validators present in the last block of the range + +#### Parameters + +* `fromBlockNumber`: *string* - integer representing a block number or the string tag `earliest` as described + in [Block Parameter](../../../public-networks/how-to/use-besu-api/json-rpc.md#block-parameter) + +* `toBlockNumber`: *string* - integer representing a block number or one of the string tags `latest` or + `pending`, as described in + [Block Parameter](../../../public-networks/how-to/use-besu-api/json-rpc.md#block-parameter) + +If you specify: + +* No parameters, the call provides metrics for the last 100 blocks, or all blocks if there are less + than 100 blocks. + +* Only the first parameter, the call provides metrics for all blocks from the block specified to + the latest block. + +#### Returns + +`result`: *array* of *objects* - list of validator objects + +!!! note + + The proposer of the genesis block has address `0x0000000000000000000000000000000000000000`. + +!!! example + + === "curl HTTP" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"ibft_getSignerMetrics","params":["1", "100"], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS" + + ```bash + {"jsonrpc":"2.0","method":"ibft_getSignerMetrics","params":["1", "100"], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": [ + { + "address": "0x7ffc57839b00206d1ad20c69a1981b489f772031", + "proposedBlockCount": "0x21", + "lastProposedBlockNumber": "0x61" + }, + { + "address": "0x42eb768f2244c8811c63729a21a3569731535f06", + "proposedBlockCount": "0x21", + "lastProposedBlockNumber": "0x63" + }, + { + "address": "0xb279182d99e65703f0076e4812653aab85fca0f0", + "proposedBlockCount": "0x21", + "lastProposedBlockNumber": "0x62" + } + ] + } + ``` + +### `ibft_getValidatorsByBlockHash` + +Lists the validators defined in the specified block. + +#### Parameters + +`block`: *string* - 32-byte block hash + +#### Returns + +`result`: *array* of *strings* - list of validator addresses + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"ibft_getValidatorsByBlockHash","params":["0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256"], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"ibft_getValidatorsByBlockHash","params":["0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256"], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": [ + "0x42d4287eac8078828cf5f3486cfe601a275a49a5", + "0xb1b2bc9582d2901afdc579f528a35ca41403fa85", + "0xef1bfb6a12794615c9b0b5a21e6741f01e570185" + ] + } + ``` + +### `ibft_getValidatorsByBlockNumber` + +Lists the validators defined in the specified block. + +#### Parameters + +* `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, + `earliest`, or `pending`, as described in + [Block Parameter](../../../public-networks/how-to/use-besu-api/json-rpc.md#block-parameter) + +#### Returns + +`result`: *array* of *strings* - list of validator addresses + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"ibft_getValidatorsByBlockNumber","params":["latest"], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"ibft_getValidatorsByBlockNumber","params":["latest"], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": [ + "0x42d4287eac8078828cf5f3486cfe601a275a49a5", + "0xb1b2bc9582d2901afdc579f528a35ca41403fa85", + "0xef1bfb6a12794615c9b0b5a21e6741f01e570185" + ] + } + ``` + +### `ibft_proposeValidatorVote` + +Proposes to [add or remove a validator] with the specified address. + +#### Parameters + +* `address`: *string* - account address + +* `proposal`: *boolean* - `true` to propose adding validator or `false` to propose removing validator + +#### Returns + +`result`: *boolean* - `true` + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"ibft_proposeValidatorVote","params":["42d4287eac8078828cf5f3486cfe601a275a49a5",true], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"ibft_proposeValidatorVote","params":["42d4287eac8078828cf5f3486cfe601a275a49a5",true], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc" : "2.0", + "id" : 1, + "result" : true + } + ``` + +## `PERM` (Permissioning) methods + +The `PERM` API methods provide permissioning functionality. +Use these methods for [local permissioning](../../how-to/use-permissioning/local.md) only. + +!!! important + + The `PERM` API methods are not enabled by default for JSON-RPC. To enable the `PERM` API + methods, use the [`--rpc-http-api`](../../../public-networks/reference/cli/options.md#rpc-http-api) or + [`--rpc-ws-api`](../../../public-networks/reference/cli/options.md#rpc-ws-api) CLI options. + +### `perm_addAccountsToAllowlist` + +Adds accounts (participants) to the +[accounts permission list](../../how-to/use-permissioning/local.md#account-permissioning). + +#### Parameters + +`addresses`: *array* of *strings* - list of account addresses + +!!! note + + The parameters list contains a list which is why the account addresses are enclosed by double + square brackets. + +#### Returns + +`result`: *string* - `Success` or `error` (errors include attempting to add accounts already on the +allowlist and including invalid account addresses.) + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"perm_addAccountsToAllowlist","params":[["0xb9b81ee349c3807e46bc71aa2632203c5b462032", "0xb9b81ee349c3807e46bc71aa2632203c5b462034"]], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"perm_addAccountsToAllowlist","params":[["0xb9b81ee349c3807e46bc71aa2632203c5b462032", "0xb9b81ee349c3807e46bc71aa2632203c5b462034"]], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": "Success" + } + ``` + +### `perm_addNodesToAllowlist` + +Adds nodes to the +[nodes allowlist](../../how-to/use-permissioning/local.md#node-allowlisting). + +To use domain names in enode URLs, ensure you [enable DNS support](../../../public-networks/concepts/node-keys.md#domain-name-support) +to avoid receiving a `request contains an invalid node` error. + +!!! warning + + Enode URL domain name support is an experimental feature. + +#### Parameters + +`enodes`: *array* of *strings* - list of [enode URLs](../../../public-networks/concepts/node-keys.md#enode-url) + +!!! note + + The parameters list contains a list which is why the enode URLs are enclosed by double + square brackets. + +#### Returns + +`result`: *string* - `Success` or `error`; errors include attempting to add nodes already on the allowlist or +including invalid enode URLs. + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"perm_addNodesToAllowlist","params":[["enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303","enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304"]], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"perm_addNodesToAllowlist","params":[["enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303","enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304"]], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": "Success" + } + ``` + +### `perm_getAccountsAllowlist` + +Lists accounts (participants) in the +[accounts permissions list](../../how-to/use-permissioning/local.md#account-permissioning). + +#### Parameters + +None + +#### Returns + +`result`: *array* of *strings* - list of accounts (participants) in the accounts allowlist + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"perm_getAccountsAllowlist","params":[], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"perm_getAccountsAllowlist","params":[], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": [ + "0x0000000000000000000000000000000000000009", + "0xb9b81ee349c3807e46bc71aa2632203c5b462033" + ] + } + ``` + +### `perm_getNodesAllowlist` + +Lists nodes in the +[nodes allowlist](../../how-to/use-permissioning/local.md#node-allowlisting). + +#### Parameters + +None + +#### Returns + +`result`: *array* of *strings* - [enode URLs](../../../public-networks/concepts/node-keys.md#enode-url) +of nodes in the nodes allowlist + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"perm_getNodesAllowlist","params":[], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"perm_getNodesAllowlist","params":[], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": [ + "enode://7b61d5ee4b44335873e6912cb5dd3e3877c860ba21417c9b9ef1f7e500a82213737d4b269046d0669fb2299a234ca03443f25fe5f706b693b3669e5c92478ade@127.0.0.1:30305", + "enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304" + ] + } + ``` + +### `perm_reloadPermissionsFromFile` + +Reloads the accounts and nodes allowlists from the [permissions configuration file]. + +#### Parameters + +None + +#### Returns + +`result`: *string* - `Success`, or `error` if the permissions configuration file is not valid + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"perm_reloadPermissionsFromFile","params":[], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"perm_reloadPermissionsFromFile","params":[], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": "Success" + } + ``` + +### `perm_removeAccountsFromAllowlist` + +Removes accounts (participants) from the +[accounts permissions list](../../how-to/use-permissioning/local.md#account-permissioning). + +#### Parameters + +`addresses`: *array* of *strings* - list of account addresses + +!!! note + + The parameters list contains a list which is why the account addresses are enclosed by double + square brackets. + +#### Returns + +`result`: *string* - `Success` or `error` (errors include attempting to remove accounts not on the allowlist +and including invalid account addresses.) + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"perm_removeAccountsFromAllowlist","params":[["0xb9b81ee349c3807e46bc71aa2632203c5b462032", "0xb9b81ee349c3807e46bc71aa2632203c5b462034"]], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"perm_removeAccountsFromAllowlist","params":[["0xb9b81ee349c3807e46bc71aa2632203c5b462032", "0xb9b81ee349c3807e46bc71aa2632203c5b462034"]], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": "Success" + } + ``` + +### `perm_removeNodesFromAllowlist` + +Removes nodes from the +[nodes allowlist](../../how-to/use-permissioning/local.md#node-allowlisting). + +#### Parameters + +`enodes`: *array* of *strings* - list of [enode URLs](../../../public-networks/concepts/node-keys.md#enode-url) + +!!! note + + The parameters list contains a list which is why the enode URLs are enclosed by double square + brackets. + +#### Returns + +`result`: *string* - `Success` or `error` (errors include attempting to remove nodes not on the allowlist +and including invalid enode URLs.) + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"perm_removeNodesFromAllowlist","params":[["enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303","enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304"]], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"perm_removeNodesFromAllowlist","params":[["enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303","enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304"]], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": "Success" + } + ``` + +## `PRIV` methods + +The `PRIV` API methods provide functionality for [private transactions](../../concepts/privacy/private-transactions/index.md) and +[privacy groups](../../concepts/privacy/privacy-groups.md). + +!!! note + + The `PRIV` API methods are not enabled by default for JSON-RPC. To enable the `PRIV` API + methods, use the [`--rpc-http-api`](../../../public-networks/reference/cli/options.md#rpc-http-api) or + [`--rpc-ws-api`](../../../public-networks/reference/cli/options.md#rpc-ws-api) options. + +### `priv_call` + +Invokes a private contract function locally and does not change the privacy group state. + +For private contracts, `priv_call` is the same as [`eth_call`](../../../public-networks/reference/api/index.md#eth_call) +for public contracts. + +#### Parameters + +* `privacyGroupId`: *string* - 32-byte [privacy Group ID](../../concepts/privacy/privacy-groups.md) + +* `call`: *object* - [transaction call object](../../../public-networks/reference/api/objects.md#transaction-call-object) + +* `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, + `earliest`, or `pending`, as described in + [Block Parameter](../../../public-networks/how-to/use-besu-api/json-rpc.md#block-parameter) + +#### Returns + +`result`: *data* - return value of the executed contract + +!!! example + + === "curl HTTP" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"priv_call","params":["tb8NVyQqZnHNegf/3mYsyB+HEud4SPWn90rz3GoskRw=", {"to":"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13","data": "0x3fa4f245"}, "latest"],"id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS" + + ```bash + {"jsonrpc":"2.0","method":"priv_call","params":["tb8NVyQqZnHNegf/3mYsyB+HEud4SPWn90rz3GoskRw=", {"to":"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13","data": "0x3fa4f245"}, "latest"],"id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + ``` + + === "curl GraphQL" + + ```bash + curl -X POST -H "Content-Type: application/json" --data '{ "query": "{block {number call (data : {from : \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", to: \"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\", data :\"0x12a7b914\"}){data status}}}"}' http://localhost:8547/graphql + ``` + + === "GraphQL" + + ```bash + { + block { + number + call(data: {from: "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", to: "0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13", data: "0x12a7b914"}) { + data + status + } + } + } + ``` + + === "GraphQL result" + + ```json + { + "data" : { + "block" : { + "number" : 17449, + "call" : { + "data" : "0x", + "status" : 1 + } + } + } + } + ``` + +### `priv_createPrivacyGroup` + +Creates a group of nodes, specified by their [Tessera](https://docs.tessera.consensys.net/) public key. + +#### Parameters + +`options`: *object* - request options object with the following fields: + +* `addresses`: *array* of *strings* - list of nodes specified by + [Tessera](https://docs.tessera.consensys.net/) public keys + +* `name`: *string* - (optional) privacy group name + +* `description`: *string* - (optional) privacy group description + +#### Returns + +`result`: *string* - privacy group ID + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method": "priv_createPrivacyGroup", "params": [{"addresses":["sTZpbQhcOfd9ZaFDnC00e/N2Ofv9p4/ZTBbEeVtXJ3E=","quhb1pQPGN1w8ZSZSyiIfncEAlVY/M/rauSyQ5wVMRE="],"name":"Group A","description":"Description Group A"}],"id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method": "priv_createPrivacyGroup", "params": [{"addresses":["sTZpbQhcOfd9ZaFDnC00e/N2Ofv9p4/ZTBbEeVtXJ3E=","quhb1pQPGN1w8ZSZSyiIfncEAlVY/M/rauSyQ5wVMRE="],"name":"Group A","description":"Description Group A"}],"id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": "ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk=" + } + ``` + +### `priv_debugGetStateRoot` + +Returns the state root of the specified privacy group at the specified block. + +#### Parameters + +* `privacyGroupId`: *string* - 32-byte [privacy Group ID](../../concepts/privacy/privacy-groups.md) + +* `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, + `earliest`, or `pending`, as described in + [Block Parameter](../../../public-networks/how-to/use-besu-api/json-rpc.md#block-parameter) + +#### Returns + +`result`: *string* - 32-byte state root + +!!! example + + === "curl HTTP" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"priv_debugGetStateRoot","params":["xJdxvWOEmrs2MCkKWlgArTzWIXFfU/tmVxI3EKssVTk=","latest"],"id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS" + + ```bash + {"jsonrpc":"2.0","method":"priv_debugGetStateRoot","params":["xJdxvWOEmrs2MCkKWlgArTzWIXFfU/tmVxI3EKssVTk=","latest"],"id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc" : "2.0", + "id" : 1, + "result" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" + } + + ``` + +### `priv_deletePrivacyGroup` + +Deletes the specified privacy group. + +#### Parameters + +`privacyGroupId`: *string* - privacy group ID + +#### Returns + +`result`: *string* - deleted privacy group ID + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"priv_deletePrivacyGroup","params":["ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk="],"id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"priv_deletePrivacyGroup","params":["ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk="],"id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 53, + "result": "ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk=" + } + ``` + +### `priv_distributeRawTransaction` + +Distributes a signed, RLP encoded +[private transaction](../../how-to/send-transactions/private-transactions.md). + +!!! tip + + If you want to sign the [privacy marker transaction](../../how-to/use-privacy/sign-pmts.md) + outside of Besu, use [`priv_distributeRawTransaction`](../../how-to/send-transactions/private-transactions.md#priv_distributerawtransaction) + instead of [`eea_sendRawTransaction`](#eea_sendrawtransaction). + +#### Parameters + +`transaction`: *string* - signed RLP-encoded private transaction + +#### Returns + +`result`: *string* - 32-byte enclave key (the enclave key is a pointer to the private transaction in +[Tessera](https://docs.tessera.consensys.net/).) + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"priv_distributeRawTransaction","params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"priv_distributeRawTransaction","params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": "0xfd0d90ab824574abc19c0776ca0210e764561d0ef6d621f2bbbea316eccfe56b" + } + ``` + +### `priv_findPrivacyGroup` + +Returns a list of privacy groups containing only the listed members. For example, if the listed +members are A and B, a privacy group containing A, B, and C is not returned. + +#### Parameters + +`members`: *array* of *strings* - members specified by [Tessera](https://docs.tessera.consensys.net/) public keys + +#### Returns + +`result`: *array* of *objects* - privacy group objects containing only the specified members; privacy groups are +[EEA-compliant](../../concepts/privacy/privacy-groups.md#enterprise-ethereum-alliance-privacy) +or [Besu-extended](../../concepts/privacy/privacy-groups.md#besu-extended-privacy) with types: + +* `LEGACY` for EEA-compliant groups. + +* `PANTHEON` for Besu-extended groups. + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc": "2.0","method": "priv_findPrivacyGroup","params": [["negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=", "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw="]],"id": 1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc": "2.0","method": "priv_findPrivacyGroup","params": [["negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=", "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw="]],"id": 1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": [ + { + "privacyGroupId": "GpK3ErNO0xF27T0sevgkJ3+4qk9Z+E3HtXYxcKIBKX8=", + "name": "Group B", + "description": "Description of Group B", + "type": "PANTHEON", + "members": [ + "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=", + "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=" + ] + } + ] + } + ``` + +### `priv_getCode` + +Returns the code of the private smart contract at the specified address. Compiled smart contract code +is stored as a hexadecimal value. + +#### Parameters + +* `privacyGroupId`: *string* - 32-byte [privacy Group ID](../../concepts/privacy/privacy-groups.md) + +* `address`: *string* - 20-byte contract address + +* `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, + or `pending`, as described in [Block Parameter](../../../public-networks/how-to/use-besu-api/json-rpc.md#block-parameter) + +#### Returns + +`result`: *data* - code stored at the specified address + +!!! example + + === "curl HTTP" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"priv_getCode","params":["1lJxSIP4JOp6uRn9wYsPeWwqoOP1c4nPQjylB4FExUA=", "0xeaf1c1bd00ef0bec5e39fba81740f1c5d05aa201", "latest"],"id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS" + + ```bash + {"jsonrpc":"2.0","method":"priv_getCode","params":["1lJxSIP4JOp6uRn9wYsPeWwqoOP1c4nPQjylB4FExUA=", "0xeaf1c1bd00ef0bec5e39fba81740f1c5d05aa201", "latest"],"id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": "0x60806040526004361060485763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fa4f2458114604d57806355241077146071575b600080fd5b348015605857600080fd5b50605f6088565b60408051918252519081900360200190f35b348015607c57600080fd5b506086600435608e565b005b60005481565b60008190556040805182815290517f199cd93e851e4c78c437891155e2112093f8f15394aa89dab09e38d6ca0727879181900360200190a1505600a165627a7a723058209d8929142720a69bde2ab3bfa2da6217674b984899b62753979743c0470a2ea70029" + } + ``` + +### `priv_getEeaTransactionCount` + +Returns the private transaction count for the specified account and +[group of sender and recipients]. + +!!! important + + If sending more than one transaction to be mined in the same block (that is, you are not + waiting for the transaction receipt), you must calculate the private transaction nonce outside + Besu instead of using `priv_getEeaTransactionCount`. + +#### Parameters + +* `address`: *string* - account address + +* `sender`: *string* - base64-encoded Tessera address of the sender + +* `recipients`: *array* of *strings* - base64-encoded Tessera addresses of recipients + +#### Returns + +`result`: *string* - integer representing the number of private transactions sent from the address to the +specified group of sender and recipients + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"priv_getEeaTransactionCount","params":["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", "GGilEkXLaQ9yhhtbpBT03Me9iYa7U/mWXxrJhnbl1XY=", ["KkOjNLmCI6r+mICrC6l+XuEDjFEzQllaMQMpWLl4y1s=","eLb69r4K8/9WviwlfDiZ4jf97P9czyS3DkKu0QYGLjg="]], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"priv_getEeaTransactionCount","params":["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", "GGilEkXLaQ9yhhtbpBT03Me9iYa7U/mWXxrJhnbl1XY=", ["KkOjNLmCI6r+mICrC6l+XuEDjFEzQllaMQMpWLl4y1s=","eLb69r4K8/9WviwlfDiZ4jf97P9czyS3DkKu0QYGLjg="]], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": "0x1" + } + ``` + +### `priv_getFilterChanges` + +Polls the specified filter for a private contract and returns an array of changes that have occurred +since the last poll. + +Filters for private contracts can only be created by [`priv_newFilter`](#priv_newfilter) so unlike +[`eth_getFilterChanges`](../../../public-networks/reference/api/index.md#eth_getfilterchanges), +`priv_getFilterChanges` always returns an array of log objects or an empty list. + +#### Parameters + +* `privacyGroupId`: *string* - 32-byte [privacy Group ID](../../concepts/privacy/privacy-groups.md) + +* `filterId`: *string* - filter ID + +#### Returns + +`result`: *array* of *objects* - list of [log objects](../../../public-networks/reference/api/objects.md#log-object), +or an empty list if nothing has changed since the last poll + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc": "2.0","method": "priv_getFilterChanges","params": ["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc": "2.0","method": "priv_getFilterChanges","params": ["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": [ + { + "logIndex": "0x0", + "removed": false, + "blockNumber": "0x4d0", + "blockHash": "0x1c8200667a869e99b945374c37277b5ee7a7ae67943e13c82563381387553dbb", + "transactionHash": "0xb1966b9b372ba68952f48f3a3e78f036f5ae82ceca2de972a782d07fb88f6d88", + "transactionIndex": "0x0", + "address": "0x991cc548c154b2953cc48c02f782e1314097dfbb", + "data": "0x", + "topics": [ + "0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410", + "0x0000000000000000000000000000000000000000000000000000000000000002" + ] + } + ] + } + ``` + +### `priv_getFilterLogs` + +Returns an array of [logs](../../../public-networks/concepts/events-and-logs.md) for the specified filter for a private +contract. + +For private contracts, `priv_getFilterLogs` is the same as +[`eth_getFilterLogs`](../../../public-networks/reference/api/index.md#eth_getfilterlogs) for public +contracts except there's no [automatic log bloom caching](../../../public-networks/reference/cli/options.md#auto-log-bloom-caching-enabled) +for private contracts. + +!!! note + + `priv_getFilterLogs` is only used for filters created with [`priv_newFilter`](#priv_newfilter). + To specify a filter object and get logs without creating a filter, use [`priv_getLogs`](#priv_getlogs). + +#### Parameters + +* `privacyGroupId`: *string* - 32-byte [privacy Group ID](../../concepts/privacy/privacy-groups.md) + +* `filterId`: *string* - filter ID + +#### Returns + +`result`: *array* of *objects* - list of [log objects](../../../public-networks/reference/api/objects.md#log-object) + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc": "2.0","method": "priv_getFilterLogs","params":["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc": "2.0","method": "priv_getFilterLogs","params":["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": [ + { + "logIndex": "0x0", + "removed": false, + "blockNumber": "0x493", + "blockHash": "0xd9cb3a852e1e02c95f035a2e32d57f82c10cab61faa3e8f5c010adf979bb4786", + "transactionHash": "0x78866dc51fdf189d8cca74f6a8fe54f172348fbd2163bbe80fa8b106cfc7deb4", + "transactionIndex": "0x0", + "address": "0x991cc548c154b2953cc48c02f782e1314097dfbb", + "data": "0x", + "topics": [ + "0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ] + }, + { + "logIndex": "0x0", + "removed": false, + "blockNumber": "0x4d0", + "blockHash": "0x1c8200667a869e99b945374c37277b5ee7a7ae67943e13c82563381387553dbb", + "transactionHash": "0xb1966b9b372ba68952f48f3a3e78f036f5ae82ceca2de972a782d07fb88f6d88", + "transactionIndex": "0x0", + "address": "0x991cc548c154b2953cc48c02f782e1314097dfbb", + "data": "0x", + "topics": [ + "0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410", + "0x0000000000000000000000000000000000000000000000000000000000000002" + ] + } + ] + } + ``` + +### `priv_getLogs` + +Returns an array of [logs](../../../public-networks/concepts/events-and-logs.md) matching a specified filter object. + +For private contracts, `priv_getLogs` is the same as [`eth_getLogs`](../../../public-networks/reference/api/index.md#eth_getlogs) +for public contracts except there is no [automatic log bloom caching](../../../public-networks/reference/cli/options.md#auto-log-bloom-caching-enabled) +for private contracts. + +#### Parameters + +* `privacyGroupId`: *string* - 32-byte [privacy Group ID](../../concepts/privacy/privacy-groups.md) + +* `filterOptions`: *object* - [filter options object](../../../public-networks/reference/api/objects.md#filter-options-object) + +#### Returns + +`result`: *array* of *objects* - list of [log objects](../../../public-networks/reference/api/objects.md#log-object) + +!!! example + + === "curl HTTP" + + ```bash + curl -X POST --data '{"jsonrpc": "2.0","method": "priv_getLogs","params":["vGy/TZgO6y8VPMVeJAQ99MF1NaTf5ohA3TFfzoEF71k=",{"fromBlock": "earliest","toBlock": "latest","addresses": ["0x630c507ff633312087dc33c513b66276abcd2fc3"],"topics": ["0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410"]}],"id": 1}' http://127.0.0.1:8545 + ``` + + === "wscat WS" + + ```bash + {"jsonrpc": "2.0","method": "priv_getLogs","params":["vGy/TZgO6y8VPMVeJAQ99MF1NaTf5ohA3TFfzoEF71k=",{"fromBlock": "earliest","toBlock": "latest","addresses": ["0x630c507ff633312087dc33c513b66276abcd2fc3"],"topics": ["0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410"]}],"id": 1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": [ + { + "logIndex": "0x0", + "removed": false, + "blockNumber": "0x342", + "blockHash": "0xf5954f068fa2f2f7741281e8c753a8e92047e27ab3c4971836d2c89fab86d92b", + "transactionHash": "0xa9ba5cffde9d4ad8997c5c4352d5d49eeea0e9def8a4ea69991b8837c49d4e4f", + "transactionIndex": "0x0", + "address": "0x630c507ff633312087dc33c513b66276abcd2fc3", + "data": "0x", + "topics": [ + "0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ] + }, + { + "logIndex": "0x0", + "removed": false, + "blockNumber": "0x383", + "blockHash": "0x91b73a47d53e3a88d62ed091a89a4be7557ad91b552e7ff7d86bf78977d5d45d", + "transactionHash": "0xc2a185faf00e87434e55b7f70cc4c38be354c2128b4b96b5f5def0b54a2173ec", + "transactionIndex": "0x0", + "address": "0x630c507ff633312087dc33c513b66276abcd2fc3", + "data": "0x", + "topics": [ + "0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410", + "0x0000000000000000000000000000000000000000000000000000000000000002" + ] + } + ] + } + ``` + +### `priv_getPrivacyPrecompileAddress` + +Returns the address of the +[privacy precompiled contract](../../concepts/privacy/private-transactions/processing.md). +The address +is derived and based on the value of the +[`privacy-flexible-groups-enabled`](../cli/options.md#privacy-flexible-groups-enabled) option. + +#### Parameters + +None + +#### Returns + +`result`: *string* - address of the privacy precompile + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"priv_getPrivacyPrecompileAddress","params":[], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"priv_getPrivacyPrecompileAddress","params":[], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": "0x000000000000000000000000000000000000007e" + } + ``` + +### `priv_getPrivateTransaction` + +Returns the private transaction if you are a participant, otherwise, `null`. + +#### Parameters + +`transaction`: *string* - transaction hash returned by [`eea_sendRawTransaction`](#eea_sendrawtransaction) or +[`eea_sendTransaction`](https://docs.ethsigner.consensys.net/en/latest/Using-EthSigner/Using-EthSigner/#eea_sendtransaction). + +#### Returns + +`result`: *object* - [private transaction object](objects.md#private-transaction-object), or `null` if not +a participant in the private transaction + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"priv_getPrivateTransaction","params":["0x623c4ce5275a87b91f4f1c521012d39ca19311c787bde405490f4c0426a71498"], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"priv_getPrivateTransaction","params":["0x623c4ce5275a87b91f4f1c521012d39ca19311c787bde405490f4c0426a71498"], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": { + "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", + "gas": "0x2dc6c0", + "gasPrice": "0x0", + "hash": "0x623c4ce5275a87b91f4f1c521012d39ca19311c787bde405490f4c0426a71498", + "input": "0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610221806100606000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f2451461005c5780636057361d1461008757806367e404ce146100b4575b600080fd5b34801561006857600080fd5b5061007161010b565b6040518082815260200191505060405180910390f35b34801561009357600080fd5b506100b260048036038101908080359060200190929190505050610115565b005b3480156100c057600080fd5b506100c96101cb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000600254905090565b7fc9db20adedc6cf2b5d25252b101ab03e124902a73fcb12b753f3d1aaa2d8f9f53382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a18060028190555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050905600a165627a7a723058208efaf938851fb2d235f8bf9a9685f149129a30fe0f4b20a6c1885dc02f639eba0029", + "nonce": "0x0", + "to": null, + "value": "0x0", + "v": "0xfe8", + "r": "0x654a6a9663ca70bb13e27cca14b3777cc92da184e19a151cdeef2ccbbd5c6405", + "s": "0x5dd4667b020c8a5af7ae28d4c3126f8dcb1187f49dcf0de9d7a39b1651892eef", + "privateFrom": "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=", + "privateFor": [ + "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=" + ], + "restriction": "restricted" + } + } + ``` + +### `priv_getTransactionCount` + +Returns the private transaction count for specified account and privacy group. + +!!! important + + If sending more than one transaction to be mined in the same block (that is, you are not + waiting for the transaction receipt), you must calculate the private transaction nonce outside + Besu instead of using `priv_getTransactionCount`. + +#### Parameters + +* `address`: *string* - account address + +* `privacyGroupId`: *string* - privacy group ID + +#### Returns + +`result`: *string* - integer representing the number of private transactions sent from the address to the +specified privacy group + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"priv_getTransactionCount","params":["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", "kAbelwaVW7okoEn1+okO+AbA4Hhz/7DaCOWVQz9nx5M="], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"priv_getTransactionCount","params":["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", "kAbelwaVW7okoEn1+okO+AbA4Hhz/7DaCOWVQz9nx5M="], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": "0x1" + } + ``` + +### `priv_getTransactionReceipt` + +Returns information about the private transaction after mining the transaction. Receipts for +pending transactions are not available. + +#### Parameters + +`transaction`: *string* - 32-byte hash of a transaction + +#### Returns + +`result`: *object* - [private Transaction receipt object](objects.md#private-transaction-receipt-object), +or `null` if no receipt found + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"priv_getTransactionReceipt","params":["0xf3ab9693ad92e277bf785e1772f29fb1864904bbbe87b0470455ddb082caab9d"],"id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"priv_getTransactionReceipt","params":["0xf3ab9693ad92e277bf785e1772f29fb1864904bbbe87b0470455ddb082caab9d"],"id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": { + "blockHash": "0xe7212a92cfb9b06addc80dec2a0dfae9ea94fd344efeb157c41e12994fcad60a", + "blockNumber": "0x50", + "contractAddress": "0x493b76031593402e24e16faa81f677b58e2d53f3", + "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", + "logs": [], + "to": "0xf17f52151ebef6c7334fad080c5704d77216b732", + "transactionHash": "0x36219e92b5f53d4150aa9ef7d2d793118cced523de6724100da5b534e3ceb4b8", + "transactionIndex": "0x0", + "output": "0x6080604052600436106049576000357c010000000000000000000000000000000000000000000 + 0000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b3480156059 + 57600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b + 50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b8060008190555050560 + 0a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c00360029", + "commitmentHash": "0x79b9e6b0856db398ad7dc208f15b1d38c0c0b0c5f99e4a443a2c5a85510e96a5", + "status": "0x1", + "privateFrom": "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=", + "privacyGroupId": "cD636RZlcqVSpoxT/ExbkWQfBO7kPAZO0QlWHErNSL8=", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + } + ``` + +### `priv_newFilter` + +Creates a [log filter](../../../public-networks/concepts/events-and-logs.md) for a private contract. +To poll for logs associated with the created filter, use [`priv_getFilterChanges`](#priv_getfilterchanges). +To get all logs associated with the filter, use [`priv_getFilterLogs`](#priv_getfilterlogs). + +For private contracts, `priv_newFilter` is the same as [`eth_newFilter`](../../../public-networks/reference/api/index.md#eth_newfilter) +for public contracts. + +#### Parameters + +* `privacyGroupId`: *string* - 32-byte [privacy Group ID](../../concepts/privacy/privacy-groups.md) + +* `filterOptions`: *object* - [filter options object](../../../public-networks/reference/api/objects.md#filter-options-object) + +!!! note + + `fromBlock` and `toBlock` in the filter options object default to `latest`. + +#### Returns + +`result`: *string* - filter ID + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc": "2.0","method": "priv_newFilter","params": ["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=",{"fromBlock": "earliest","toBlock": "latest","addresses": ["0x991cc548c154b2953cc48c02f782e1314097dfbb"],"topics": ["0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410"]}],"id": 1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc": "2.0","method": "priv_newFilter","params": ["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=",{"fromBlock": "earliest","toBlock": "latest","addresses": ["0x991cc548c154b2953cc48c02f782e1314097dfbb"],"topics": ["0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410"]}],"id": 1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": "0x4a35b92809d73f4f53a2355d62125442" + } + ``` + +### `priv_uninstallFilter` + +Uninstalls a filter for a private contract with the specified ID. When a filter is no longer required, +call this method. + +Filters time out when not requested by [`priv_getFilterChanges`](#priv_getfilterchanges) or +[`priv_getFilterLogs`](#priv_getfilterlogs) for 10 minutes. + +For private contracts, `priv_uninstallFilter` is the same as +[`eth_uninstallFilter`](../../../public-networks/reference/api/index.md#eth_uninstallfilter) +for public contracts. + +#### Parameters + +* `privacyGroupId`: *string* - 32-byte [privacy group ID](../../concepts/privacy/privacy-groups.md) + +* `filterId`: *string* - filter ID + +#### Returns + +`result`: *boolean* - indicates if the filter is successfully uninstalled + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc": "2.0","method": "priv_uninstallFilter","params":["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc": "2.0","method": "priv_uninstallFilter","params":["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": true + } + ``` + +## `QBFT` methods + +The `QBFT` API methods provide access to the [QBFT](../../how-to/configure/consensus/qbft.md) consensus engine. + +!!! note + + The `QBFT` API methods are not enabled by default for JSON-RPC. To enable the `QBFT` API + methods, use the [`--rpc-http-api`](../../../public-networks/reference/cli/options.md#rpc-http-api) or + [`--rpc-ws-api`](../../../public-networks/reference/cli/options.md#rpc-ws-api) options. + +### `qbft_discardValidatorVote` + +Discards a proposal to +[add or remove a validator](../../how-to/configure/consensus/qbft.md#add-and-remove-validators) with +the specified address. + +#### Parameters + +`address`: *string* - 20-byte address of proposed validator + +#### Returns + +`result`: *boolean* - indicates if the proposal is discarded + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"qbft_discardValidatorVote","params":["0xef1bfb6a12794615c9b0b5a21e6741f01e570185"], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"qbft_discardValidatorVote","params":["0xef1bfb6a12794615c9b0b5a21e6741f01e570185"], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc" : "2.0", + "id" : 1, + "result" : true + } + ``` + +### `qbft_getPendingVotes` + +Returns [votes](../../how-to/configure/consensus/qbft.md#add-and-remove-validators) cast in the current +[epoch](../../how-to/configure/consensus/qbft.md#genesis-file). + +#### Parameters + +None + +#### Returns + +`result`: *map* of *strings* to *booleans* - map of account addresses to corresponding boolean values indicating the +vote for each account; if `true`, the vote is to add a validator. If `false`, the proposal is to +remove a validator. + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"qbft_getPendingVotes","params":[], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"qbft_getPendingVotes","params":[], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": { + "0xef1bfb6a12794615c9b0b5a21e6741f01e570185": true, + "0x42d4287eac8078828cf5f3486cfe601a275a49a5": true + } + } + ``` + +### `qbft_getSignerMetrics` + +Provides the following validator metrics for the specified range: + +* Number of blocks from each validator + +* Block number of the last block proposed by each validator (if any proposed in the specified + range) + +* All validators present in the last block of the range + +#### Parameters + +* `fromBlockNumber`: *string* - integer representing a block number or the string tag `earliest` as described + in [Block Parameter](../../../public-networks/how-to/use-besu-api/json-rpc.md#block-parameter) + +* `toBlockNumber`: *string* - integer representing a block number or one of the string tags `latest` or + `pending`, as described in + [Block Parameter](../../../public-networks/how-to/use-besu-api/json-rpc.md#block-parameter) + +If you specify: + +* No parameters, the call provides metrics for the last 100 blocks, or all blocks if there are less + than 100 blocks. + +* Only the first parameter, the call provides metrics for all blocks from the block specified to + the latest block. + +#### Returns + +`result`: *array* of *objects* - list of validator objects + +!!! note + + The proposer of the genesis block has address `0x0000000000000000000000000000000000000000`. + +!!! example + + === "curl HTTP" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"qbft_getSignerMetrics","params":["1", "100"], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS" + + ```bash + {"jsonrpc":"2.0","method":"qbft_getSignerMetrics","params":["1", "100"], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": [ + { + "address": "0x7ffc57839b00206d1ad20c69a1981b489f772031", + "proposedBlockCount": "0x21", + "lastProposedBlockNumber": "0x61" + }, + { + "address": "0x42eb768f2244c8811c63729a21a3569731535f06", + "proposedBlockCount": "0x21", + "lastProposedBlockNumber": "0x63" + }, + { + "address": "0xb279182d99e65703f0076e4812653aab85fca0f0", + "proposedBlockCount": "0x21", + "lastProposedBlockNumber": "0x62" + } + ] + } + ``` + +### `qbft_getValidatorsByBlockHash` + +Lists the validators defined in the specified block. + +#### Parameters + +`block`: *string* - 32-byte block hash + +#### Returns + +`result`: *array* of *strings* - list of validator addresses + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"qbft_getValidatorsByBlockHash","params":["0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256"], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"qbft_getValidatorsByBlockHash","params":["0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256"], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": [ + "0x42d4287eac8078828cf5f3486cfe601a275a49a5", + "0xb1b2bc9582d2901afdc579f528a35ca41403fa85", + "0xef1bfb6a12794615c9b0b5a21e6741f01e570185" + ] + } + ``` + +### `qbft_getValidatorsByBlockNumber` + +Lists the validators defined in the specified block. + +#### Parameters + +* `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, + `earliest`, or `pending`, as described in + [Block Parameter](../../../public-networks/how-to/use-besu-api/json-rpc.md#block-parameter) + +#### Returns + +`result`: *array* of *strings* - list of validator addresses + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"qbft_getValidatorsByBlockNumber","params":["latest"], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"qbft_getValidatorsByBlockNumber","params":["latest"], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc": "2.0", + "id": 1, + "result": [ + "0x42d4287eac8078828cf5f3486cfe601a275a49a5", + "0xb1b2bc9582d2901afdc579f528a35ca41403fa85", + "0xef1bfb6a12794615c9b0b5a21e6741f01e570185" + ] + } + ``` + +### `qbft_proposeValidatorVote` + +Proposes to +[add or remove a validator](../../how-to/configure/consensus/qbft.md#add-and-remove-validators) with +the specified address. + +#### Parameters + +* `address`: *string* - account address + +* `proposal`: *boolean* - `true` to propose adding validator or `false` to propose removing validator + +#### Returns + +`result`: *boolean* - `true` + +!!! example + + === "curl HTTP request" + + ```bash + curl -X POST --data '{"jsonrpc":"2.0","method":"qbft_proposeValidatorVote","params":["42d4287eac8078828cf5f3486cfe601a275a49a5",true], "id":1}' http://127.0.0.1:8545 + ``` + + === "wscat WS request" + + ```bash + {"jsonrpc":"2.0","method":"qbft_proposeValidatorVote","params":["42d4287eac8078828cf5f3486cfe601a275a49a5",true], "id":1} + ``` + + === "JSON result" + + ```json + { + "jsonrpc" : "2.0", + "id" : 1, + "result" : true + } + ``` + + +[add or remove a signer with the specified address]: ../../how-to/configure/consensus/clique.md#add-and-remove-signers +[signers for the specified block]: ../../how-to/configure/consensus/clique.md#adding-and-removing-signers +[add or remove a validator]: ../../how-to/configure/consensus/ibft.md#add-and-remove-validators +[permissions configuration file]: ../../how-to/use-permissioning/local.md#permissions-configuration-file +[group of sender and recipients]: ../../concepts/privacy/privacy-groups.md#enterprise-ethereum-alliance-privacy + +*[EEA]: Enterprise Ethereum Alliance diff --git a/docs/private-networks/reference/api/objects.md b/docs/private-networks/reference/api/objects.md new file mode 100644 index 00000000..ed99a79d --- /dev/null +++ b/docs/private-networks/reference/api/objects.md @@ -0,0 +1,55 @@ +--- +description: Hyperledger Besu private network API objects reference +--- + +# Private network API objects + +The following objects are parameters for or returned by Besu private network API methods. + +!!! attention + + This reference contains API objects that apply to only private networks. + For API objects that apply to both private and public networks, see the + [public network API objects reference](../../../public-networks/reference/api/objects.md). + +## Private transaction object + +Returned by [`priv_getPrivateTransaction`](index.md#priv_getprivatetransaction). + +| Key | Type | Value | +|-----|:----:|-------| +| **from** | Data, 20 bytes | Address of the sender. | +| **gas** | Quantity | Gas provided by the sender. | +| **gasPrice** | Quantity | Gas price, in Wei, provided by the sender. | +| **input** | Data | The data to create or invoke a contract. | +| **nonce** | Quantity | Number of transactions made by the sender to the privacy group before this one. | +| **to** | Data, 20 bytes | `null` if a contract creation transaction, otherwise, the contract address. | +| **value** | Quantity | `null` because private transactions cannot transfer Ether. | +| **v** | Quantity | ECDSA Recovery ID. | +| **r** | Data, 32 bytes | ECDSA signature r. | +| **s** | Data, 32 bytes | ECDSA signature s. | +| **privateFrom** | Data, 32 bytes | [Tessera](https://docs.tessera.consensys.net/) public key of the sender. | +| **privateFor** | Array of Data, 32 bytes each | [Tessera](https://docs.tessera.consensys.net/) public keys of recipients. Not returned if using `privacyGroupId` to [send the transaction](../../../private-networks/concepts/privacy/privacy-groups.md#privacy-types). | +| **privacyGroupId** | Data, 32 bytes | [Tessera](https://docs.tessera.consensys.net/) privacy group ID of recipients. Not returned if using `privateFor` to [send the transaction](../../../private-networks/concepts/privacy/privacy-groups.md#privacy-types). | +| **restriction** | String | Must be [`restricted`](../../../private-networks/concepts/privacy/private-transactions/index.md). | + +## Private transaction receipt object + +Returned by [`priv_getTransactionReceipt`](index.md#priv_gettransactionreceipt). + +| Key | Type | Value | +|-----|:----:|-------| +| **blockHash** | Data, 32 bytes | Hash of block containing this transaction. | +| **blockNumber** | Quantity | Block number of block containing this transaction. | +| **contractAddress** | Data, 20 bytes | Contract address created if a contract creation transaction, otherwise, `null`. A failed contract creation transaction still produces a contract address value. | +| **from** | Data, 20 bytes | Address of the sender. | +| **logs** | Array | Array of [log objects](#log-object) generated by this private transaction. | +| **to** | Data, 20 bytes | Address of the receiver, if sending ether, otherwise, null. | +| **transactionIndex** | Quantity, Integer | Index position of transaction in the block. | +| **revertReason** | String | ABI-encoded string that displays the [reason for reverting the transaction](../../../private-networks/how-to/send-transactions/revert-reason.md). Only available if revert reason is [enabled](../cli/options.md#revert-reason-enabled). | +| **output** | Data | RLP-encoded return value of a contract call if a value returns, otherwise, `null`. | +| **commitmentHash** | Data, 32 bytes | Hash of the privacy marker transaction. | +| **status** | Quantity | Either `0x1` (success) or `0x0` (failure). | +| **privateFrom** | Data, 32 bytes | [Tessera](https://docs.tessera.consensys.net/) public key of the sender. | +| **privateFor** or **privacyGroupId** | Array or Data, 32 bytes | [Tessera](https://docs.tessera.consensys.net/) public keys or privacy group ID of the recipients. | +| **logsBloom** | Data, 256 bytes | Bloom filter for light clients to quickly retrieve related logs. | diff --git a/docs/private-networks/reference/cli/options.md b/docs/private-networks/reference/cli/options.md new file mode 100644 index 00000000..0e0a5b0a --- /dev/null +++ b/docs/private-networks/reference/cli/options.md @@ -0,0 +1,640 @@ +--- +description: Hyperledger Besu private networks CLI reference +--- + +# Private network command line options + +This reference describes the syntax of the Hyperledger Besu private network command line interface +(CLI) options. + +!!! attention + + This reference contains options that apply to only private networks. + For options that apply to both private and public networks, see the + [public network options reference](../../../public-networks/reference/cli/options.md). + +## Specify options + +You can specify Besu options: + +* On the command line. + + ```bash + besu [OPTIONS] [SUBCOMMAND] + ``` + +* As an environment variable. + For each command line option, the equivalent environment variable is: + * Uppercase. + * `_` replaces `-`. + * Has a `BESU_` prefix. + + For example, set `--miner-coinbase` using the `BESU_MINER_COINBASE` environment variable. + +* In a [configuration file](../../../public-networks/how-to/configuration-file.md). + +If you specify an option in more than one place, the order of priority is command line, environment +variable, configuration file. + +If using Bash or Z shell, you can view option suggestions by entering `--` and pressing the Tab key twice. + +```bash +besu --Tab+Tab +``` + +## Options + +### `permissions-accounts-config-file` + +=== "Syntax" + + ```bash + --permissions-accounts-config-file= + ``` + +=== "Example" + + ```bash + --permissions-accounts-config-file=/home/me/me_configFiles/myPermissionsFile + ``` + +=== "Environment variable" + + ```bash + BESU_PERMISSIONS_ACCOUNTS_CONFIG_FILE=/home/me/me_configFiles/myPermissionsFile + ``` + +=== "Configuration file" + + ```bash + permissions-accounts-config-file="/home/me/me_configFiles/myPermissionsFile" + ``` + +The [accounts permissions configuration file]. The default is the `permissions_config.toml` file in +the [data directory](../../../public-networks/reference/cli/options.md#data-path). + +!!! tip + + `--permissions-accounts-config-file` and + [`--permissions-nodes-config-file`](#permissions-nodes-config-file) can use the same file. + +### `permissions-accounts-config-file-enabled` + +=== "Syntax" + + ```bash + --permissions-accounts-config-file-enabled[=] + ``` + +=== "Example" + + ```bash + --permissions-accounts-config-file-enabled=true + ``` + +=== "Environment variable" + + ```bash + BESU_PERMISSIONS_ACCOUNTS_CONFIG_FILE_ENABLED=true + ``` + +=== "Configuration file" + + ```bash + permissions-accounts-config-file-enabled=true + ``` + +Enables or disables file-based account level permissions. The default is `false`. + +### `permissions-accounts-contract-address` + +=== "Syntax" + + ```bash + --permissions-accounts-contract-address= + ``` + +=== "Example" + + ```bash + --permissions-accounts-contract-address=xyz + ``` + +=== "Environment variable" + + ```bash + BESU_PERMISSIONS_ACCOUNTS_CONTRACT_ADDRESS=xyz + ``` + +=== "Configuration file" + + ```bash + permissions-accounts-contract-address=xyz + ``` + +The contract address for +[onchain account permissioning](../../concepts/permissioning/onchain.md). + +### `permissions-accounts-contract-enabled` + +=== "Syntax" + + ```bash + --permissions-accounts-contract-enabled[=] + ``` + +=== "Example" + + ```bash + --permissions-accounts-contract-enabled=true + ``` + +=== "Environment variable" + + ```bash + BESU_PERMISSIONS_ACCOUNTS_CONTRACT_ENABLED=true + ``` + +=== "Configuration file" + + ```bash + permissions-accounts-contract-enabled=true + ``` + +Enables or disables contract-based +[onchain account permissioning](../../concepts/permissioning/onchain.md). The default +is `false`. + +### `permissions-nodes-config-file` + +=== "Syntax" + + ```bash + --permissions-nodes-config-file= + ``` + +=== "Example" + + ```bash + --permissions-nodes-config-file=/home/me/me_configFiles/myPermissionsFile + ``` + +=== "Environment variable" + + ```bash + BESU_PERMISSIONS_NODES_CONFIG_FILE=/home/me/me_configFiles/myPermissionsFile + ``` + +=== "Configuration file" + + ```bash + permissions-nodes-config-file="/home/me/me_configFiles/myPermissionsFile" + ``` + +The [nodes permissions configuration file]. The default is the `permissions_config.toml` file in +the [data directory](../../../public-networks/reference/cli/options.md#data-path). + +!!! tip + + `--permissions-nodes-config-file` and + [`--permissions-accounts-config-file`](#permissions-accounts-config-file) can use the same + file. + +### `permissions-nodes-config-file-enabled` + +=== "Syntax" + + ```bash + --permissions-nodes-config-file-enabled[=] + ``` + +=== "Example" + + ```bash + --permissions-nodes-config-file-enabled=true + ``` + +=== "Environment variable" + + ```bash + BESU_PERMISSIONS_NODES_CONFIG_FILE_ENABLED=true + ``` + +=== "Configuration file" + + ```bash + permissions-nodes-config-file-enabled=true + ``` + +Enables or disables file-based node level permissions. The default is `false`. + +### `permissions-nodes-contract-address` + +=== "Syntax" + + ```bash + --permissions-nodes-contract-address= + ``` + +=== "Example" + + ```bash + --permissions-nodes-contract-address=xyz + ``` + +=== "Environment variable" + + ```bash + BESU_PERMISSIONS_NODES_CONTRACT_ADDRESS=xyz + ``` + +=== "Configuration file" + + ```bash + permissions-nodes-contract-address=xyz + ``` + +The contract address for +[onchain node permissioning](../../concepts/permissioning/onchain.md). + +### `permissions-nodes-contract-enabled` + +=== "Syntax" + + ```bash + --permissions-nodes-contract-enabled[=] + ``` + +=== "Example" + + ```bash + --permissions-nodes-contract-enabled=true + ``` + +=== "Environment variable" + + ```bash + BESU_PERMISSIONS_NODES_CONTRACT_ENABLED=true + ``` + +=== "Configuration file" + + ```bash + permissions-nodes-contract-enabled=true + ``` + +Enables or disables contract-based +[onchain node permissioning](../../concepts/permissioning/onchain.md). The default is +`false`. + +### `permissions-nodes-contract-version` + +=== "Syntax" + + ```bash + --permissions-nodes-contract-version= + ``` + +=== "Example" + + ```bash + --permissions-nodes-contract-version=2 + ``` + +=== "Environment variable" + + ```bash + BESU_PERMISSIONS_NODES_CONTRACT_VERSION=2 + ``` + +=== "Configuration file" + + ```bash + permissions-nodes-contract-version=2 + ``` + +Version of the EEA [node permissioning interface](../../how-to/use-permissioning/onchain.md#specify-the-permissioning-contract-interface-version). +The default is 1. + +### `privacy-enabled` + +=== "Syntax" + + ```bash + --privacy-enabled[=] + ``` + +=== "Example" + + ```bash + --privacy-enabled=false + ``` + +=== "Environment variable" + + ```bash + BESU_PRIVACY_ENABLED=false + ``` + +=== "Configuration file" + + ```bash + privacy-enabled=false + ``` + +Enables or disables [private transactions](../../concepts/privacy/index.md). The default +is `false`. + +!!! important + + Using private transactions with [pruning](../../../public-networks/concepts/data-storage-formats.md) + or [fast sync](../../../public-networks/reference/cli/options.md#sync-mode) is not supported. + +### `privacy-marker-transaction-signing-key-file` + +=== "Syntax" + + ```bash + --privacy-marker-transaction-signing-key-file= + ``` + +=== "Example" + + ```bash + --privacy-marker-transaction-signing-key-file=/home/me/me_node/myPrivateKey + ``` + +=== "Environment variable" + + ```bash + BESU_PRIVACY_MARKER_TRANSACTION_SIGNING_KEY_FILE=/home/me/me_node/myPrivateKey + ``` + +=== "Configuration file" + + ```bash + privacy-marker-transaction-signing-key-file="/home/me/me_node/myPrivateKey" + ``` + +`` is the name of the private key file used to +[sign privacy marker transactions](../../how-to/use-privacy/sign-pmts.md). + +!!! note + + This can be the same file used by [`--node-private-key-file`](../../../public-networks/reference/cli/options.md#node-private-key-file), + or a different key file to identify who signed the privacy marker transaction. + +You must specify this option if you're using: + +* a privacy network where you pay gas. Also, the associated account must contain adequate funds. +* [account permissioning] and privacy. You must include the corresponding public key in the + accounts allowlist. + +If you do not specify this option (for example, in a free gas network), Besu signs each transaction +with a different randomly generated key. + +### `privacy-multi-tenancy-enabled` + +=== "Syntax" + + ```bash + --privacy-multi-tenancy-enabled[=] + ``` + +=== "Example" + + ```bash + --privacy-multi-tenancy-enabled=false + ``` + +=== "Environment variable" + + ```bash + BESU_PRIVACY_MULTI_TENANCY_ENABLED=false + ``` + +=== "Configuration file" + + ```bash + privacy-multi-tenancy-enabled=false + ``` + +Enables or disables [multi-tenancy](../../concepts/privacy/multi-tenancy.md) for private +transactions. The default is `false`. + +### `privacy-flexible-groups-enabled` + +=== "Syntax" + + ```bash + --privacy-flexible-groups-enabled[=] + ``` + +=== "Example" + + ```bash + --privacy-flexible-groups-enabled=true + ``` + +=== "Environment variable" + + ```bash + BESU_PRIVACY_FLEXIBLE_GROUPS_ENABLED=true + ``` + +=== "Configuration file" + + ```bash + privacy-flexible-groups-enabled=true + ``` + +Enables or disables [flexible privacy groups](../../concepts/privacy/flexible-privacy.md). The default is `false`. + +Deprecated syntax for this option is `--privacy-onchain-groups-enabled`. + +### `privacy-public-key-file` + +=== "Syntax" + + ```bash + --privacy-public-key-file= + ``` + +=== "Example" + + ```bash + --privacy-public-key-file=Tessera/nodeKey.pub + ``` + +=== "Environment variable" + + ```bash + BESU_PRIVACY_PUBLIC_KEY_FILE=Tessera/nodeKey.pub + ``` + +=== "Configuration file" + + ```bash + privacy-public-key-file="Tessera/nodeKey.pub" + ``` + +The [public key of the Tessera node](https://docs.tessera.consensys.net/). + +!!! important + + You cannot specify `privacy-public-key-file` when + [`--privacy-multi-tenancy-enabled`](#privacy-multi-tenancy-enabled) is `true` + +### `privacy-tls-enabled` + +=== "Syntax" + + ```bash + --privacy-tls-enabled[=] + ``` + +=== "Example" + + ```bash + --privacy-tls-enabled=false + ``` + +=== "Environment variable" + + ```bash + BESU_PRIVACY_TLS_ENABLED=false + ``` + +=== "Configuration file" + + ```bash + privacy-tls-enabled=false + ``` + +Enables or disables [TLS on communication with the private transaction manager]. The default is +false. + +### `privacy-tls-keystore-file` + +=== "Syntax" + + ```bash + --privacy-tls-keystore-file= + ``` + +=== "Example" + + ```bash + --privacy--keystore-file=/home/me/me_node/key + ``` + +=== "Environment variable" + + ```bash + BESU_PRIVACY_TLS_KEYSTORE_FILE=/home/me/me_node/key + ``` + +=== "Configuration file" + + ```bash + privacy-tls-keystore-file="/home/me/me_node/key" + ``` + +The keystore file (in PKCS #12 format) containing the private key and the certificate presented +during authentication. + +You must specify `privacy-tls-keystore-file` if [`--privacy-tls-enabled`](#privacy-tls-enabled) is +`true`. + +### `privacy-tls-keystore-password-file` + +=== "Syntax" + + ```bash + --privacy-tls-keystore-password-file= + ``` + +=== "Example" + + ```bash + --privacy-tls-keystore-password-file=/home/me/me_node/password + ``` + +=== "Environment variable" + + ```bash + BESU_PRIVACY_TLS_KEYSTORE_PASSWORD_FILE=/home/me/me_node/password + ``` + +=== "Configuration file" + + ```bash + privacy-tls-keystore-password-file="/home/me/me_node/password" + ``` + +The path to the file containing the password to decrypt the keystore. + +### `privacy-tls-known-enclave-file` + +=== "Syntax" + + ```bash + --privacy-tls-known-enclave-file= + ``` + +=== "Example" + + ```bash + --privacy-tls-known-enclave-file=/home/me/me_node/knownEnclave + ``` + +=== "Environment variable" + + ```bash + BESU_PRIVACY_TLS_KNOWN_ENCLAVE_FILE=/home/me/me_node/knownEnclave + ``` + +=== "Configuration file" + + ```bash + privacy-tls-known-enclave-file="/home/me/me_node/knownEnclave" + ``` + +The path to the file containing the hostnames, ports, and SHA256 certificate fingerprints of the +[authorized privacy enclave](../../how-to/configure/tls/client-and-server.md#create-the-known-servers-file). + +### `privacy-url` + +=== "Syntax" + + ```bash + --privacy-url= + ``` + +=== "Example" + + ```bash + --privacy-url=http://127.0.0.1:8888 + ``` + +=== "Environment variable" + + ```bash + BESU_PRIVACY_URL=http://127.0.0.1:8888 + ``` + +=== "Configuration file" + + ```bash + privacy-url="http://127.0.0.1:8888" + ``` + +The URL on which the +[Tessera node](../../tutorials/privacy/index.md#3-create-tessera-configuration-files) is +running. + + +[accounts permissions configuration file]: ../../how-to/use-permissioning/local.md#permissions-configuration-file +[nodes permissions configuration file]: ../../how-to/use-permissioning/local.md#permissions-configuration-file +[account permissioning]: ../../concepts/permissioning/index.md#account-permissioning +[TLS on communication with the private transaction manager]: ../../concepts/privacy/index.md#private-transaction-manager diff --git a/docs/private-networks/reference/cli/subcommands.md b/docs/private-networks/reference/cli/subcommands.md new file mode 100644 index 00000000..61361ae3 --- /dev/null +++ b/docs/private-networks/reference/cli/subcommands.md @@ -0,0 +1,139 @@ +--- +description: Hyperledger Besu command line interface subcommands +--- + +# Private network subcommands + +This reference describes the syntax of the Hyperledger Besu private network command line interface +(CLI) subcommands. + +!!! attention + + This reference contains subcommands that apply to only private networks. + For subcommands that apply to both private and public networks, see the + [public network subcommands reference](../../../public-networks/reference/cli/subcommands.md). + +To start a Besu node using subcommands, run: + +```bash +besu [OPTIONS] [SUBCOMMAND] [SUBCOMMAND OPTIONS] +``` + +If using Bash or Z shell, you can view subcommand suggestions by pressing the Tab key twice. + +```bash +besu Tab+Tab +``` + +## `operator` + +Provides operator actions. + +### `generate-blockchain-config` + +=== "Syntax" + + ```bash + besu operator generate-blockchain-config --config-file= --to= [--genesis-file-name=] [--private-key-file-name=] [--public-key-file-name=] + ``` + +=== "Example" + + ```bash + besu operator generate-blockchain-config --config-file=config.json --to=myNetworkFiles + ``` +Generates an +[IBFT 2.0](../../how-to/configure/consensus/ibft.md#genesis-file) or +[QBFT](../../how-to/configure/consensus/qbft.md#genesis-file) genesis file. + +The configuration file has two nested JSON nodes. +The first is the `genesis` property defining the IBFT 2.0 or QBFT genesis file, except for the +`extraData` string. +The second is the `blockchain` property defining the number of key pairs to generate. + +## `rlp` + +Provides RLP related actions. + +### `encode` + +=== "Syntax" + + ```bash + besu rlp encode [--from=] [--to=] [--type=] + ``` + +=== "File example" + + ```bash + besu rlp encode --from=ibft_extra_data.json --to=extra_data_for_ibft_genesis.txt --type=IBFT_EXTRA_DATA + ``` + +=== "Standard input/output example" + + ```bash + cat extra_data.json | besu rlp encode > rlp.txt + ``` + +Encodes the RLP hexadecimal string for use in an [IBFT 2.0](../../how-to/configure/consensus/ibft.md#genesis-file) +or [QBFT](../../how-to/configure/consensus/qbft.md#genesis-file) genesis file. +The default type is `IBFT_EXTRA_DATA`. + +Supported types are: + +* `IBFT_EXTRA_DATA` - The IBFT 2.0 genesis file includes the `IBFT_EXTRA_DATA` type in the + [`extraData`](../../how-to/configure/consensus/ibft.md#extra-data) property. + +* `QBFT_EXTRA_DATA` - The QBFT genesis file includes the `QBFT_EXTRA_DATA` type in the + [`extraData`](../../how-to/configure/consensus/qbft.md#extra-data) property. + +???+ summary "IBFT 2.0 extra data" + + To generate the RLP encoded `extraData` string, specify a JSON input that is an array of + validator addresses in ascending order. + + ??? tip "JSON Schema for IBFT_EXTRA_DATA" + + Use the following JSON Schema to validate that your JSON data is well formed. + To validate your JSON content, use an online validation tool, such as + [JSON Schema Validator](https://www.jsonschemavalidator.net/). + + ```json + { + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://org.hyperledger.besu/cli_rlp_ibft_extra_data.json", + "type": "array", + "definitions": {}, + "title": "IBFT extra data", + "description":"JSON format used as input to generate an IBFT extra data RLP string", + "items": { + "$id": "#/address", + "type": "string", + "title": "Validator address", + "description":"The validator node address", + "default": "", + "examples": [ + "be068f726a13c8d46c44be6ce9d275600e1735a4", + "5ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193" + ], + "pattern":"^([0-9a-f]{40})$" + } + } + ``` + + !!! example "Example IBFT_EXTRA_DATA encoding" + + === "JSON input" + + ```json + [ + "be068f726a13c8d46c44be6ce9d275600e1735a4", + "5ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193" + ] + ``` + + === "RLP output" + + ``` + 0xf853a00000000000000000000000000000000000000000000000000000000000000000ea94be068f726a13c8d46c44be6ce9d275600e1735a4945ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193808400000000c0 + ``` diff --git a/docs/private-networks/reference/index.md b/docs/private-networks/reference/index.md new file mode 100644 index 00000000..60b8f6f8 --- /dev/null +++ b/docs/private-networks/reference/index.md @@ -0,0 +1,22 @@ +--- +description: private networks reference overview +--- + +# Reference + +This section provides reference material for private network features. + +The following features and resources are shared with [public networks](../../public-networks/index.md) +and the content can be found in the public networks section: + +- Besu command line: + - [Standard options](../../public-networks/reference/cli/options.md) + - [Standard subcommands](../../public-networks/reference/cli/subcommands.md) +- Besu API: + - [Standard Besu API methods](../../public-networks/reference/api/index.md) + - [Standard Besu API objects](../../public-networks/reference/api/objects.md) +- [Genesis file items](../../public-networks/reference/genesis-items.md) +- [EVM tool options](../../public-networks/reference/evm-tool.md) +- [Transaction trace types](../../public-networks/reference/trace-types.md) +- [Projects using Besu](../../public-networks/reference/projects-using-besu.md) +- [Security disclosure policy](../../public-networks/reference/disclosure.md) diff --git a/docs/Reference/Plugin-API-Interfaces.md b/docs/private-networks/reference/plugin-api-interfaces.md similarity index 98% rename from docs/Reference/Plugin-API-Interfaces.md rename to docs/private-networks/reference/plugin-api-interfaces.md index 6a4ad996..2ad22358 100644 --- a/docs/Reference/Plugin-API-Interfaces.md +++ b/docs/private-networks/reference/plugin-api-interfaces.md @@ -4,7 +4,7 @@ description: Plugin interfaces # Plugin API interfaces -API interfaces in Hyperledger Besu allow users to [build plugins](../Concepts/Plugins.md) to +API interfaces in Hyperledger Besu allow users to [build plugins](../concepts/plugins.md) to extend Besu functionality, such as the [Quorum Besu plugins](https://doc.quorumplugins.consensys.net/en/latest/Concepts/Besu-Plugins/Event-Streams/). For more information about the available interfaces, see the @@ -59,4 +59,4 @@ the `https://hyperledger.jfrog.io/hyperledger/besu-maven` repository and the `pl The `start` step can be ignored and your plugin module will be instantiated when the command line interface is parsed and available. -[privacy marker transactions]: ../Concepts/Privacy/Private-Transaction-Processing.md +[privacy marker transactions]: ../concepts/privacy/private-transactions/processing.md diff --git a/docs/Tutorials/Private-Network-Example-Azure.md b/docs/private-networks/tutorials/azure.md similarity index 89% rename from docs/Tutorials/Private-Network-Example-Azure.md rename to docs/private-networks/tutorials/azure.md index 598ddd66..bd7ab78c 100644 --- a/docs/Tutorials/Private-Network-Example-Azure.md +++ b/docs/private-networks/tutorials/azure.md @@ -21,9 +21,9 @@ endpoint `http:///jsonrpc`. The following is a high-level overview of the deployed network. -![Image landing](../images/sampleNetworks-poa.png) +![Image landing](../../images/sampleNetworks-poa.png) -## Deploying +## Deploy To deploy the private network example on Azure: @@ -34,12 +34,12 @@ To deploy the private network example on Azure: 1. Click **Get It Now** and **Continue**. The Quickstart landing page is displayed. - ![Image landing](../images/mp_0_landing.png) + ![Image landing](../../images/mp_0_landing.png) 1. Click **Create**. The **Basics** page is displayed. - ![Image basics](../images/mp_1_basics.png) + ![Image basics](../../images/mp_1_basics.png) 1. Enter: @@ -68,7 +68,7 @@ To deploy the private network example on Azure: To display the block explorer, open a new tab and enter either the IP of the VM or the DNS name. -![Image be](../images/mp_8_block_explorer.png) +![Image be](../../images/mp_8_block_explorer.png) ## Metrics @@ -80,12 +80,12 @@ To display the dashboard: 1. Click on home and select the Besu dashboard. - ![Grafana screenshot](../images/mp_9_grafana.png) + ![Grafana screenshot](../../images/mp_9_grafana.png) The dashboard provides a visual way to monitor your network and nodes as the chain progresses. Alerting can also be configured. -## Connecting to VM RPC endpoint +## Connect to VM RPC endpoint You can connect dapps or develop directly from the IDE by using VSCode and connecting to the VM RPC endpoint. The endpoint is the DNS name appended with `/jsonrpc`: `http:///jsonrpc`. @@ -102,6 +102,6 @@ ssh username@ To list all containers running, run `docker ps`. Find the complete setup in `/home//besu-quickstart`. -![Image ssh](../images/mp_10_ssh.png) +![Image ssh](../../images/mp_10_ssh.png) [Quorum Dev Quickstart on Azure Marketplace]: https://azuremarketplace.microsoft.com/en-us/marketplace/apps/consensys.quorum-dev-quickstart diff --git a/docs/Tutorials/Private-Network/Create-Private-Clique-Network.md b/docs/private-networks/tutorials/clique.md similarity index 75% rename from docs/Tutorials/Private-Network/Create-Private-Clique-Network.md rename to docs/private-networks/tutorials/clique.md index 83c490bd..ea802ebb 100644 --- a/docs/Tutorials/Private-Network/Create-Private-Clique-Network.md +++ b/docs/private-networks/tutorials/clique.md @@ -2,7 +2,7 @@ description: Hyperledger Besu private network using the Clique (proof of authority) consensus protocol --- -# Create a private network using the Clique (proof of authority) consensus protocol +# Create a private network using Clique A private network provides a configurable network for testing. This private network uses the [Clique (proof of authority) consensus protocol]. @@ -14,7 +14,7 @@ A private network provides a configurable network for testing. This private netw ## Prerequisites -* [Hyperledger Besu](../../HowTo/Get-Started/Installation-Options/Install-Binaries.md) +* [Hyperledger Besu](../get-started/install/binary-distribution.md) * [Curl (or similar webservice client)](https://curl.haxx.se/download.html). ## Steps @@ -24,7 +24,7 @@ Listed on the right-hand side of the page are the steps to create a private netw ### 1. Create directories Each node requires a data directory for the blockchain data. When the node starts, Besu saves the -[node key](../../Concepts/Node-Keys.md) in this directory. +[node key](../../public-networks/concepts/node-keys.md) in this directory. Create directories for your private network, each of the three nodes, and a data directory for each node: @@ -46,7 +46,7 @@ file. For this Clique network, we'll use Node-1 as the initial signer. This requ address for Node-1. To get the address for Node-1, in the `Node-1` directory, use the -[`public-key export-address`](../../Reference/CLI/CLI-Subcommands.md#export-address) subcommand to +[`public-key export-address`](../../public-networks/reference/cli/subcommands.md#export-address) subcommand to write the node address to the specified file (`node1Address` in this example). === "MacOS" @@ -65,7 +65,7 @@ write the node address to the specified file (`node1Address` in this example). The genesis file defines the genesis block of the blockchain (that is, the start of the blockchain). The -[Clique genesis file](../../HowTo/Configure/Consensus-Protocols/Clique.md#genesis-file) includes +[Clique genesis file](../how-to/configure/consensus/clique.md#genesis-file) includes the address of Node-1 as the initial signer in the `extraData` field. All nodes in a network must use the same genesis file. @@ -113,11 +113,12 @@ Copy the following genesis definition to a file called `cliqueGenesis.json` and !!! note - We recommend specifying the latest [milestone](../../Reference/Config-Items.md#milestone-blocks) when creating the configuration file for a private network. + We recommend specifying the latest [milestone](../../public-networks/reference/genesis-items.md#milestone-blocks) when creating + the genesis file for a private network. This ensures you are using the most up-to-date protocol and have access to the most recent opcodes. In `extraData`, replace `` with the -[address for Node-1](#2-get-address-for-node-1), excluding the 0x prefix. +[address for Node-1](#2-get-the-address-for-node-1), excluding the 0x prefix. !!! example @@ -153,15 +154,15 @@ Start Node-1: The command line enables: * The JSON-RPC API using the - [`--rpc-http-enabled`](../../Reference/CLI/CLI-Syntax.md#rpc-http-enabled) option + [`--rpc-http-enabled`](../../public-networks/reference/cli/options.md#rpc-http-enabled) option * The ETH, NET, and CLIQUE APIs using the - [`--rpc-http-api`](../../Reference/CLI/CLI-Syntax.md#rpc-http-api) option + [`--rpc-http-api`](../../public-networks/reference/cli/options.md#rpc-http-api) option * All-host access to the HTTP JSON-RPC API using the - [`--host-allowlist`](../../Reference/CLI/CLI-Syntax.md#host-allowlist) option + [`--host-allowlist`](../../public-networks/reference/cli/options.md#host-allowlist) option * All-domain access to the node through the HTTP JSON-RPC API using the - [`--rpc-http-cors-origins`](../../Reference/CLI/CLI-Syntax.md#rpc-http-cors-origins) option + [`--rpc-http-cors-origins`](../../public-networks/reference/cli/options.md#rpc-http-cors-origins) option -When the node starts, the [enode URL](../../Concepts/Node-Keys.md#enode-url) displays. +When the node starts, the [enode URL](../../public-networks/concepts/node-keys.md#enode-url) displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps. ![Node 1 Enode URL](../../images/EnodeStartup.png) @@ -186,14 +187,14 @@ enode URL copied when starting Node-1 as the bootnode: The command line specifies: * A different port to Node-1 for P2P discovery using the - [`--p2p-port`](../../Reference/CLI/CLI-Syntax.md#p2p-port) option. + [`--p2p-port`](../../public-networks/reference/cli/options.md#p2p-port) option. * A different port to Node-1 for HTTP JSON-RPC using the - [`--rpc-http-port`](../../Reference/CLI/CLI-Syntax.md#rpc-http-port) option. + [`--rpc-http-port`](../../public-networks/reference/cli/options.md#rpc-http-port) option. * The enode URL of Node-1 using the - [`--bootnodes`](../../Reference/CLI/CLI-Syntax.md#bootnodes) option. + [`--bootnodes`](../../public-networks/reference/cli/options.md#bootnodes) option. * The data directory for Node-2 using the - [`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path) option. -* Other options as for [Node-1](#5-start-first-node-as-bootnode). + [`--data-path`](../../public-networks/reference/cli/options.md#data-path) option. +* Other options as for [Node-1](#4-start-the-first-node-as-the-bootnode). ### 6. Start Node-3 @@ -215,18 +216,18 @@ enode URL copied when starting Node-1 as the bootnode: The command line specifies: * A different port to Node-1 and Node-2 for P2P discovery using the - [`--p2p-port`](../../Reference/CLI/CLI-Syntax.md#p2p-port) option. + [`--p2p-port`](../../public-networks/reference/cli/options.md#p2p-port) option. * A different port to Node-1 and Node-2 for HTTP JSON-RPC using the - [`--rpc-http-port`](../../Reference/CLI/CLI-Syntax.md#rpc-http-port) option. + [`--rpc-http-port`](../../public-networks/reference/cli/options.md#rpc-http-port) option. * The data directory for Node-3 using the - [`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path) option. -* The bootnode as for [Node-2](#6-start-node-2) -* Other options as for [Node-1](#5-start-first-node-as-bootnode). + [`--data-path`](../../public-networks/reference/cli/options.md#data-path) option. +* The bootnode as for [Node-2](#5-start-node-2). +* Other options as for [Node-1](#4-start-the-first-node-as-the-bootnode). ### 7. Confirm the private network is working Start another terminal, use curl to call the JSON-RPC API -[`net_peerCount`](../../Reference/API-Methods.md#net_peercount) method and confirm the nodes are +[`net_peerCount`](../../public-networks/reference/api/index.md#net_peercount) method and confirm the nodes are functioning as peers: ```bash @@ -253,15 +254,14 @@ Use the [Clique API to add] Node-2 or Node-3 as a signer. !!! note To add Node-2 or Node-3 as a signer you need the - [node address as when specifying Node-1](#2-get-address-for-node-1) as the initial signer. + [node address as when specifying Node-1](#2-get-the-address-for-node-1) as the initial signer. Import accounts to MetaMask and send transactions, as described in the -[Quickstart tutorial](../Developer-Quickstart.md#create-a-transaction-using-metamask). +[Quickstart tutorial](quickstart.md#create-a-transaction-using-metamask). !!! info - Besu does not support - [private key management](../../HowTo/Send-Transactions/Account-Management.md). + Besu doesn't support [private key management](../../public-networks/how-to/send-transactions.md). ## Stop the nodes @@ -270,8 +270,8 @@ When finished using the private network, stop all nodes using ++ctrl+c++ in each !!!tip To restart the Clique network in the future, start from - [4. Start First Node as Bootnode](#4-start-first-node-as-bootnode). + [4. Start First Node as Bootnode](#4-start-the-first-node-as-the-bootnode). -[Clique (proof of authority) consensus protocol]: ../../HowTo/Configure/Consensus-Protocols/Clique.md -[Clique API to add]: ../../HowTo/Configure/Consensus-Protocols/Clique.md#adding-and-removing-signers +[Clique (proof of authority) consensus protocol]: ../how-to/configure/consensus/clique.md +[Clique API to add]: ../how-to/configure/consensus/clique.md#add-and-remove-signers diff --git a/docs/Tutorials/Contracts/Deploying-Contracts.md b/docs/private-networks/tutorials/contracts/index.md similarity index 94% rename from docs/Tutorials/Contracts/Deploying-Contracts.md rename to docs/private-networks/tutorials/contracts/index.md index f7e2b448..1d832171 100644 --- a/docs/Tutorials/Contracts/Deploying-Contracts.md +++ b/docs/private-networks/tutorials/contracts/index.md @@ -2,18 +2,18 @@ description: deploying smart contracts --- -# Deploying smart contracts to an Ethereum chain +# Deploy smart contracts to an Ethereum chain This tutorial shows you how to deploy smart contracts as transactions to a network. ## Prerequisites This tutorial requires a local blockchain network. -You can use the [Developer Quickstart](../Developer-Quickstart.md) to rapidly generate one. +You can use the [Developer Quickstart](../quickstart.md) to rapidly generate one. If deploying a private contract, enable privacy on the network (public contracts can also be deployed on privacy-enabled networks). -## Using `eth_sendSignedTransaction` +## Use `eth_sendSignedTransaction` To deploy a smart contract using [`eth_sendSignedTransaction`](https://web3js.readthedocs.io/en/v1.2.0/web3-eth.html#sendsignedtransaction), use an @@ -30,7 +30,7 @@ smart contract as an example, create a new file called `compile.js` with the fol ```js const fs = require('fs').promises; const solc = require('solc'); - + async function main() { // Load the contract source code const sourceCode = await fs.readFile('SimpleStorage.sol', 'utf8'); @@ -40,7 +40,7 @@ smart contract as an example, create a new file called `compile.js` with the fol const artifact = JSON.stringify({ abi, bytecode }, null, 2); await fs.writeFile('SimpleStorage.json', artifact); } - + function compile(sourceCode, contractName) { // Create the Solidity Compiler Standard Input and Output JSON const input = { @@ -56,7 +56,7 @@ smart contract as an example, create a new file called `compile.js` with the fol bytecode: artifact.evm.bytecode.object, }; } - + main().then(() => process.exit(0)); ``` @@ -85,7 +85,7 @@ The Developer Quickstart provides an [example of a public transaction script](ht // use an existing account, or make an account const privateKey = "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63"; const account = web3.eth.accounts.privateKeyToAccount(privateKey); - + // read in the contracts const contractJsonPath = path.resolve(__dirname, 'SimpleStorage.json'); const contractJson = JSON.parse(fs.readFileSync(contractJsonPath)); @@ -94,10 +94,10 @@ The Developer Quickstart provides an [example of a public transaction script](ht const contractBin = fs.readFileSync(contractBinPath); // initialize the default constructor with a value `47 = 0x2F`; this value is appended to the bytecode const contractConstructorInit = "000000000000000000000000000000000000000000000000000000000000002F"; - + // get txnCount for the nonce value const txnCount = await web3.eth.getTransactionCount(account.address); - + const rawTxOptions = { nonce: web3.utils.numberToHex(txnCount), from: account.address, @@ -138,7 +138,7 @@ node public_tx.js This example code creates the transaction `tx`, signs it with the private key of the account, serializes it, then calls `eth_sendSignedTransaction` to deploy the contract. -## Using `eth_sendTransaction` +## Use `eth_sendTransaction` You can use [`eth_sendTransaction`](https://ethereum.github.io/execution-apis/api-documentation) as an alternative to `eth_sendSignedTransaction`. However, Hyperledger Besu does not support the `eth_sendTransaction` API call and keeps account management separate for @@ -146,13 +146,13 @@ stronger security. Configure [EthSigner](https://docs.ethsigner.consensys.net/en/stable/) with your Besu node to make the `eth_sendTransaction` API call. -An example can be found in the [Developer Quickstart](../Developer-Quickstart.md) where the RPC node is paired with EthSigner. +An example can be found in the [Developer Quickstart](../quickstart.md) where the RPC node is paired with EthSigner. Refer to the [EthSigner documentation](https://docs.ethsigner.consensys.net/) for configuration details. Pass the following parameters to the [`eth_sendTransaction`](https://docs.ethsigner.consensys.net/Reference/API-Methods/#eth_sendtransaction) call to EthSigner; EthSigner then converts the request to an -[`eth_sendRawTransaction`](../../Reference/API-Methods.md#eth_sendrawtransaction) call that Besu uses: +[`eth_sendRawTransaction`](../../../public-networks/reference/api/index.md#eth_sendrawtransaction) call that Besu uses: * `to` - address of the receiver. To deploy a contract, set to `null`. * `from` - address of the sender account. For example `0x9b790656b9ec0db1936ed84b3bea605873558198`. @@ -184,11 +184,11 @@ Make the request using `eth_sendTransaction`: curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{"from":"0x9b790656b9ec0db1936ed84b3bea605873558198", "to":null, "gas":"0x7600","gasPrice":"0x9184e72a000", "data":"0x608060405234801561001057600080fd5b5060405161014d38038061014d8339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806000819055505060f38061005a6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c80632a1afcd914604157806360fe47b114605d5780636d4ce63c146088575b600080fd5b604760a4565b6040518082815260200191505060405180910390f35b608660048036036020811015607157600080fd5b810190808035906020019092919050505060aa565b005b608e60b4565b6040518082815260200191505060405180910390f35b60005481565b8060008190555050565b6000805490509056fea2646970667358221220e6966e446bd0af8e6af40eb0d8f323dd02f771ba1f11ae05c65d1624ffb3c58264736f6c63430007060033"}], "id":1}' ``` -## Using `eea_sendRawTransaction` for private contracts with web3js-quorum +## Use `eea_sendRawTransaction` for private contracts with web3js-quorum -To deploy a private contract to another node or [privacy group](../../Concepts/Privacy/Privacy-Groups.md) member, use the +To deploy a private contract to another node or [privacy group](../../concepts/privacy/privacy-groups.md) member, use the [web3js-quorum](https://www.npmjs.com/package/web3js-quorum) library and -the [`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction) API call. +the [`eea_sendRawTransaction`](../../../public-networks/reference/api/index.md#eea_sendrawtransaction) API call. You must use this API call instead of [`eth_sendTransaction`](https://ethereum.github.io/execution-apis/api-documentation) because Hyperledger Besu keeps account management separate for stronger security. @@ -206,15 +206,15 @@ by running the following commands in a JavaScript console, or by including them ```js const Web3 = require('web3'); const Web3Quorum = require('web3js-quorum'); - + const bytecode="608060405234801561001057600080fd5b5060405161014d38038061014d8339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806000819055505060f38061005a6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c80632a1afcd914604157806360fe47b114605d5780636d4ce63c146088575b600080fd5b604760a4565b6040518082815260200191505060405180910390f35b608660048036036020811015607157600080fd5b810190808035906020019092919050505060aa565b005b608e60b4565b6040518082815260200191505060405180910390f35b60005481565b8060008190555050565b6000805490509056fea2646970667358221220e6966e446bd0af8e6af40eb0d8f323dd02f771ba1f11ae05c65d1624ffb3c58264736f6c63430007060033"; // initialize the default constructor with a value `47 = 0x2F`; this value is appended to the bytecode const contractConstructorInit = "000000000000000000000000000000000000000000000000000000000000002F"; - + const chainId = 1337; const web3 = new Web3(clientUrl); const web3quorum = new Web3Quorum(web3, chainId); - + const txOptions = { data: '0x'+bytecode+contractConstructorInit, privateKey: fromPrivateKey, @@ -224,7 +224,7 @@ by running the following commands in a JavaScript console, or by including them console.log("Creating contract..."); const txHash = await web3quorum.priv.generateAndSendRawTransaction(txOptions); console.log("Getting contractAddress from txHash: ", txHash); - + const privateTxReceipt = await web3quorum.priv.waitForTransactionReceipt(txHash); console.log("Private Transaction Receipt: ", privateTxReceipt); return privateTxReceipt; @@ -244,23 +244,23 @@ the contract's address. This example doesn't use a privacy group and makes a simple node-to-node transaction. To use a privacy group: - + * Create the privacy group using the public keys of the nodes in the group. * Specify the `privacyGroupId` instead of the `privateFor` option in the txOptions above and then send the transaction. - + The Developer Quickstart provides an [example of a private transaction with a privacy group](https://github.com/ConsenSys/quorum-dev-quickstart/blob/b72a0f64d685c851bf8be399a8e33bbdf0e09982/files/besu/smart_contracts/privacy/scripts/private_tx_privacy_group.js). -## Using `eea_sendRawTransaction` for private contracts with web3js-eea +## Use `eea_sendRawTransaction` for private contracts with web3js-eea !!! warning This web3js-eea library will be deprecated on December 31, 2021. Please use the [web3js-quorum](https://www.npmjs.com/package/web3js-quorum) library instead and refer to the previous section. -To deploy a private contract to another [privacy group](../../Concepts/Privacy/Privacy-Groups.md) member, use the +To deploy a private contract to another [privacy group](../../concepts/privacy/privacy-groups.md) member, use the [web3js-quorum](https://consensys.github.io/web3js-quorum/latest/index.html) library and -the [`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction) API call. +the [`eea_sendRawTransaction`](../../../public-networks/reference/api/index.md#eea_sendrawtransaction) API call. You must use this API call instead of [`eth_sendTransaction`](https://ethereum.github.io/execution-apis/api-documentation) because Hyperledger Besu keeps account management separate for stronger security. @@ -277,11 +277,11 @@ Use `eea_sendRawTransaction` by running the following commands in a JavaScript c ```js const Web3 = require('web3'); const EEAClient = require('web3-eea'); - + const bytecode="608060405234801561001057600080fd5b5060405161014d38038061014d8339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806000819055505060f38061005a6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c80632a1afcd914604157806360fe47b114605d5780636d4ce63c146088575b600080fd5b604760a4565b6040518082815260200191505060405180910390f35b608660048036036020811015607157600080fd5b810190808035906020019092919050505060aa565b005b608e60b4565b6040518082815260200191505060405180910390f35b60005481565b8060008190555050565b6000805490509056fea2646970667358221220e6966e446bd0af8e6af40eb0d8f323dd02f771ba1f11ae05c65d1624ffb3c58264736f6c63430007060033"; // initialize the default constructor with a value `47 = 0x2F`; this value is appended to the bytecode const contractConstructorInit = "000000000000000000000000000000000000000000000000000000000000002F"; - + const web3 = new Web3(clientUrl); const web3eea = new EEAClient(web3, 1337); const txOptions = { @@ -293,7 +293,7 @@ Use `eea_sendRawTransaction` by running the following commands in a JavaScript c console.log("Creating contract..."); const txHash = await web3eea.eea.sendRawTransaction(txOptions); console.log("Getting contractAddress from txHash: ", txHash); - + const privateTxReceipt = await web3.priv.getTransactionReceipt(txHash, fromPublicKey); // console.log("Private Transaction Receipt: ", privateTxReceipt); return privateTxReceipt; diff --git a/docs/Tutorials/Contracts/Calling-Contract-Functions.md b/docs/private-networks/tutorials/contracts/interact.md similarity index 95% rename from docs/Tutorials/Contracts/Calling-Contract-Functions.md rename to docs/private-networks/tutorials/contracts/interact.md index 49a9c036..94a8bb6f 100644 --- a/docs/Tutorials/Contracts/Calling-Contract-Functions.md +++ b/docs/private-networks/tutorials/contracts/interact.md @@ -2,16 +2,16 @@ description: calling smart contracts functions --- -# Interacting with deployed smart contracts +# Interact with deployed smart contracts -You can get started with the [Developer Quickstart](../Developer-Quickstart.md) to rapidly generate +You can get started with the [Developer Quickstart](../quickstart.md) to rapidly generate local blockchain networks. This tutorial shows you how to interact with smart contracts that have been deployed to a network. ## Prerequisites -* A network with a deployed smart contract as in the [deploying smart contracts tutorial](Deploying-Contracts.md) +* A network with a deployed smart contract as in the [deploying smart contracts tutorial](index.md) ## Interact with public contracts @@ -49,7 +49,7 @@ of these calls can be found in the [Developer Quickstart]. To perform a read operation, you need the address that the contract was deployed to and the contract's ABI. The contract's ABI can be obtained from compiling the contract; see the -[deploying smart contracts tutorial](Deploying-Contracts.md) for an example. +[deploying smart contracts tutorial](index.md) for an example. Use the [`web3.eth.Contract`](https://web3js.readthedocs.io/en/v1.3.4/web3-eth-contract.html) object to create a new instance of the smart contract, then make the `get` function call from the contract's list of methods, which will return the value stored: @@ -172,4 +172,4 @@ async function setValueAtAddress(clientUrl, address, value, contractAbi, fromPri To verify that a value has been updated, perform a `get` call after a `set` update call. -[Developer Quickstart]: ../Developer-Quickstart.md +[Developer Quickstart]: ../quickstart.md diff --git a/docs/Tutorials/Contracts/Account-Funds-Transfers.md b/docs/private-networks/tutorials/contracts/transfer-funds.md similarity index 92% rename from docs/Tutorials/Contracts/Account-Funds-Transfers.md rename to docs/private-networks/tutorials/contracts/transfer-funds.md index 27549b12..befdc3c2 100644 --- a/docs/Tutorials/Contracts/Account-Funds-Transfers.md +++ b/docs/private-networks/tutorials/contracts/transfer-funds.md @@ -2,22 +2,22 @@ description: funds transfer transactions --- -# Transferring funds between accounts in a transaction +# Transfer funds between accounts in a transaction -You can get started with the [Developer Quickstart](../Developer-Quickstart.md) to rapidly generate +You can get started with the [Developer Quickstart](../quickstart.md) to rapidly generate local blockchain networks. This tutorial shows you how to transfer funds (ETH) between accounts in a transaction. ## Prerequisites -* A [private network](../Developer-Quickstart.md) +* A [private network](../quickstart.md) -## Using `eth_sendSignedTransaction` +## Use `eth_sendSignedTransaction` The simplest way to transfer funds between externally-owned accounts is using [`eth_sendSignedTransaction`](https://web3js.readthedocs.io/en/v1.2.11/web3-eth.html#sendsignedtransaction). -This example uses `eth_sendSignedTransaction` and one of the [test accounts](../../Reference/Accounts-for-Testing.md) +This example uses `eth_sendSignedTransaction` and one of the [test accounts](../../reference/accounts-for-testing.md) to transfer funds to a newly created account. !!! critical "Do not use the test accounts on Ethereum Mainnet or any production network." @@ -80,7 +80,7 @@ console.log("Account B has an updatedbalance of: " + accountBBalance); A [full example](https://github.com/ConsenSys/quorum-dev-quickstart/blob/1e8cc281098923802845cd829ec20c88513c2e1c/files/besu/smart_contracts/privacy/scripts/eth_tx.js) can be found in the Developer Quickstart. -## Using `eth_sendTransaction` +## Use `eth_sendTransaction` An alternative to using `eth_sendSignedTransaction` is [`eth_sendTransaction`](https://web3js.readthedocs.io/en/v1.2.11/web3-eth.html#sendtransaction). @@ -88,7 +88,7 @@ However, Hyperledger Besu does not support the `eth_sendTransaction` API call an management separate for stronger security. Instead, Besu uses [EthSigner](https://docs.ethsigner.consensys.net/en/stable/) to make the `eth_sendTransaction` API call. -An example can be found in the [Developer Quickstart](../Developer-Quickstart.md) where the RPC +An example can be found in the [Developer Quickstart](../quickstart.md) where the RPC node is paired with EthSigner. Refer to the [EthSigner documentation](https://docs.ethsigner.consensys.net/en/stable/) configuration details. diff --git a/docs/Tutorials/Private-Network/Create-Private-Network.md b/docs/private-networks/tutorials/ethash.md similarity index 73% rename from docs/Tutorials/Private-Network/Create-Private-Network.md rename to docs/private-networks/tutorials/ethash.md index 1e0721ad..016a9922 100644 --- a/docs/Tutorials/Private-Network/Create-Private-Network.md +++ b/docs/private-networks/tutorials/ethash.md @@ -2,7 +2,7 @@ description: Hyperledger Besu private network using Ethash (proof of work) Consensus Protocol tutorial --- -# Create a private network using the Ethash (proof of work) consensus protocol +# Create a private network using Ethash A private network provides a configurable network for testing. By configuring a low difficulty and enabling mining, this allows for fast block creation. @@ -17,7 +17,7 @@ public testnets. ## Prerequisites -* [Hyperledger Besu](../../HowTo/Get-Started/Installation-Options/Install-Binaries.md) +* [Hyperledger Besu](../get-started/install/binary-distribution.md) * [Curl (or similar webservice client)](https://curl.haxx.se/download.html). ## Steps @@ -27,7 +27,7 @@ Listed on the right-hand side of the page are the steps to create a private netw ### 1. Create directories Each node requires a data directory for the blockchain data. When the node starts, Besu saves the -[node key](../../Concepts/Node-Keys.md) in this directory. +[node key](../../public-networks/concepts/node-keys.md) in this directory. Create directories for your private network, each of the three nodes, and a data directory for each node: @@ -49,7 +49,7 @@ blockchain). The genesis file includes entries for configuring the blockchain, s difficulty and initial accounts and balances. All nodes in a network must use the same genesis file. The -[network ID](../../Concepts/NetworkID-And-ChainID.md) defaults to the `chainID` in the genesis +[network ID](../../public-networks/concepts/network-and-chain-id.md) defaults to the `chainID` in the genesis file. The `fixeddifficulty` enables fast block mining. Copy the following genesis definition to a file called `privateNetworkGenesis.json` and save it in @@ -84,12 +84,13 @@ the `Private-Network` directory: !!! note - We recommend specifying the latest [milestone](../../Reference/Config-Items.md#milestone-blocks) when creating the configuration file for a private network. + We recommend specifying the latest [milestone](../../public-networks/reference/genesis-items.md#milestone-blocks) when creating + the genesis file for a private network. This ensures you are using the most up-to-date protocol and have access to the most recent opcodes. !!! warning - Do not use the accounts in `alloc` in the genesis file on Mainnet or any public network except + Don't use the accounts in `alloc` in the genesis file on Mainnet or any public network except for testing. The private keys display, which means the accounts are not secure. ### 3. Start the first node as a bootnode @@ -111,20 +112,20 @@ Start Node-1: The command line enables: * Mining and specifies the account to pay mining rewards to using the - [`--miner-enabled`](../../Reference/CLI/CLI-Syntax.md#miner-enabled) and - [`--miner-coinbase`](../../Reference/CLI/CLI-Syntax.md#miner-coinbase) options. -* JSON-RPC API using the [`--rpc-http-enabled`](../../Reference/CLI/CLI-Syntax.md#rpc-http-enabled) + [`--miner-enabled`](../../public-networks/reference/cli/options.md#miner-enabled) and + [`--miner-coinbase`](../../public-networks/reference/cli/options.md#miner-coinbase) options. +* JSON-RPC API using the [`--rpc-http-enabled`](../../public-networks/reference/cli/options.md#rpc-http-enabled) option. * All-host access to the HTTP JSON-RPC API using the - [`--host-allowlist`](../../Reference/CLI/CLI-Syntax.md#host-allowlist) option. + [`--host-allowlist`](../../public-networks/reference/cli/options.md#host-allowlist) option. * All-domain access to the node through the HTTP JSON-RPC API using the - [`--rpc-http-cors-origins`](../../Reference/CLI/CLI-Syntax.md#rpc-http-cors-origins) option. + [`--rpc-http-cors-origins`](../../public-networks/reference/cli/options.md#rpc-http-cors-origins) option. !!! info The miner coinbase account is one of the accounts defined in the genesis file. -When the node starts, the [enode URL](../../Concepts/Node-Keys.md#enode-url) displays. Copy the +When the node starts, the [enode URL](../../public-networks/concepts/node-keys.md#enode-url) displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps. ![Node 1 Enode URL](../../images/EnodeStartup.png) @@ -149,11 +150,11 @@ enode URL copied when starting Node-1 as the bootnode: The command line specifies: * A different port to Node-1 for P2P discovery using the - [`--p2p-port`](../../Reference/CLI/CLI-Syntax.md#p2p-port) option. + [`--p2p-port`](../../public-networks/reference/cli/options.md#p2p-port) option. * The enode URL of Node-1 using the - [`--bootnodes`](../../Reference/CLI/CLI-Syntax.md#bootnodes) option. + [`--bootnodes`](../../public-networks/reference/cli/options.md#bootnodes) option. * A data directory for Node-2 using the - [`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path) option. + [`--data-path`](../../public-networks/reference/cli/options.md#data-path) option. * A genesis file as for Node-1. ### 5. Start Node-3 @@ -177,13 +178,13 @@ The command line specifies: * A different port to Node-1 and Node-2 for P2P discovery. * A data directory for Node-3 using the - [`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path) option. + [`--data-path`](../../public-networks/reference/cli/options.md#data-path) option. * A bootnode and genesis file as for Node-2. ### 6. Confirm the private network is working Start another terminal, use curl to call the JSON-RPC API -[`net_peerCount`](../../Reference/API-Methods.md#net_peercount) method and confirm the nodes are +[`net_peerCount`](../../public-networks/reference/api/index.md#net_peercount) method and confirm the nodes are functioning as peers: ```bash @@ -204,20 +205,19 @@ Node-3): ## Next steps Import accounts to MetaMask and send transactions as described in the -[Quickstart tutorial](../Developer-Quickstart.md#create-a-transaction-using-metamask). +[Quickstart tutorial](quickstart.md#create-a-transaction-using-metamask). !!! info - Besu does not support - [private key management](../../HowTo/Send-Transactions/Account-Management.md). + Besu doesn't support [private key management](../../public-networks/how-to/send-transactions.md). Send transactions using `eth_sendRawTransaction` to -[send ether or, deploy or invoke contracts](../../HowTo/Send-Transactions/Transactions.md). +[send ether or, deploy or invoke contracts](../how-to/send-transactions/index.md). -Use the [JSON-RPC API](../../HowTo/Interact/APIs/Using-JSON-RPC-API.md). +Use the [JSON-RPC API](../../public-networks/how-to/use-besu-api/json-rpc.md). -Start a node with the [`--rpc-ws-enabled`](../../Reference/CLI/CLI-Syntax.md#rpc-ws-enabled) option -and use the [RPC Pub/Sub API](../../HowTo/Interact/APIs/RPC-PubSub.md). +Start a node with the [`--rpc-ws-enabled`](../../public-networks/reference/cli/options.md#rpc-ws-enabled) option +and use the [RPC Pub/Sub API](../../public-networks/how-to/use-besu-api/rpc-pubsub.md). ## Stop the nodes diff --git a/docs/Tutorials/Private-Network/Create-IBFT-Network.md b/docs/private-networks/tutorials/ibft/index.md similarity index 84% rename from docs/Tutorials/Private-Network/Create-IBFT-Network.md rename to docs/private-networks/tutorials/ibft/index.md index 5e174ce9..78dcb51b 100644 --- a/docs/Tutorials/Private-Network/Create-IBFT-Network.md +++ b/docs/private-networks/tutorials/ibft/index.md @@ -2,10 +2,10 @@ description: Hyperledger Besu private network using the IBFT 2.0 (Proof of Authority) consensus protocol --- -# Create a private network using the IBFT 2.0 (proof of authority) consensus protocol +# Create a private network using IBFT 2.0 A private network provides a configurable network for testing. This private network uses the -[IBFT 2.0 (proof of authority) consensus protocol](../../HowTo/Configure/Consensus-Protocols/IBFT.md). +[IBFT 2.0 (proof of authority) consensus protocol](../../how-to/configure/consensus/ibft.md). !!!important @@ -17,7 +17,7 @@ A private network provides a configurable network for testing. This private netw ## Prerequisites -* [Hyperledger Besu](../../HowTo/Get-Started/Installation-Options/Install-Binaries.md) +* [Hyperledger Besu](../../get-started/install/binary-distribution.md) * [Curl (or similar webservice client)](https://curl.haxx.se/download.html). ## Steps @@ -47,7 +47,7 @@ IBFT-Network/ ### 2. Create a configuration file The configuration file defines the -[IBFT 2.0 genesis file](../../HowTo/Configure/Consensus-Protocols/IBFT.md#genesis-file) and the +[IBFT 2.0 genesis file](../../how-to/configure/consensus/ibft.md#genesis-file) and the number of node key pairs to generate. The configuration file has two nested JSON nodes. The first is the `genesis` property defining @@ -105,7 +105,8 @@ in the `IBFT-Network` directory: !!! note - We recommend specifying the latest [milestone](../../Reference/Config-Items.md#milestone-blocks) when creating the configuration file for a private network. + We recommend specifying the latest [milestone](../../../public-networks/reference/genesis-items.md#milestone-blocks) + when creating the configuration file for a private network. This ensures you are using the most up-to-date protocol and have access to the most recent opcodes. !!! warning @@ -196,20 +197,20 @@ In the `Node-1` directory, start Node-1: The command line: * Specifies the data directory for Node-1 using the - [`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path) option. + [`--data-path`](../../../public-networks/reference/cli/options.md#data-path) option. * Enables the JSON-RPC API using the - [`--rpc-http-enabled`](../../Reference/CLI/CLI-Syntax.md#rpc-http-enabled) option. + [`--rpc-http-enabled`](../../../public-networks/reference/cli/options.md#rpc-http-enabled) option. * Enables the ETH, NET, and IBFT APIs using the - [`--rpc-http-api`](../../Reference/CLI/CLI-Syntax.md#rpc-http-api) option. + [`--rpc-http-api`](../../../public-networks/reference/cli/options.md#rpc-http-api) option. * Enables all-host access to the HTTP JSON-RPC API using the - [`--host-allowlist`](../../Reference/CLI/CLI-Syntax.md#host-allowlist) option. + [`--host-allowlist`](../../../public-networks/reference/cli/options.md#host-allowlist) option. * Enables all-domain access to the node through the HTTP JSON-RPC API using the - [`--rpc-http-cors-origins`](../../Reference/CLI/CLI-Syntax.md#rpc-http-cors-origins) option. + [`--rpc-http-cors-origins`](../../../public-networks/reference/cli/options.md#rpc-http-cors-origins) option. -When the node starts, the [enode URL](../../Concepts/Node-Keys.md#enode-url) displays. Copy the +When the node starts, the [enode URL](../../../public-networks/concepts/node-keys.md#enode-url) displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps. -![Node 1 Enode URL](../../images/EnodeStartup.png) +![Node 1 Enode URL](../../../images/EnodeStartup.png) ### 7. Start Node-2 @@ -231,13 +232,13 @@ enode URL copied when starting Node-1 as the bootnode: The command line specifies: * The data directory for Node-2 using the - [`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path) option. + [`--data-path`](../../../public-networks/reference/cli/options.md#data-path) option. * A different port to Node-1 for P2P discovery using the - [`--p2p-port`](../../Reference/CLI/CLI-Syntax.md#p2p-port) option. + [`--p2p-port`](../../../public-networks/reference/cli/options.md#p2p-port) option. * A different port to Node-1 for HTTP JSON-RPC using the - [`--rpc-http-port`](../../Reference/CLI/CLI-Syntax.md#rpc-http-port) option. + [`--rpc-http-port`](../../../public-networks/reference/cli/options.md#rpc-http-port) option. * The enode URL of Node-1 using the - [`--bootnodes`](../../Reference/CLI/CLI-Syntax.md#bootnodes) option. + [`--bootnodes`](../../../public-networks/reference/cli/options.md#bootnodes) option. * Other options as for [Node-1](#6-start-the-first-node-as-the-bootnode). ### 8. Start Node-3 @@ -260,11 +261,11 @@ enode URL copied when starting Node-1 as the bootnode: The command line specifies: * The data directory for Node-3 using the - [`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path) option. + [`--data-path`](../../../public-networks/reference/cli/options.md#data-path) option. * A different port to Node-1 and Node-2 for P2P discovery using the - [`--p2p-port`](../../Reference/CLI/CLI-Syntax.md#p2p-port) option. + [`--p2p-port`](../../../public-networks/reference/cli/options.md#p2p-port) option. * A different port to Node-1 and Node-2 for HTTP JSON-RPC using the - [`--rpc-http-port`](../../Reference/CLI/CLI-Syntax.md#rpc-http-port) option. + [`--rpc-http-port`](../../../public-networks/reference/cli/options.md#rpc-http-port) option. * The bootnode as for [Node-2](#7-start-node-2). * Other options as for [Node-1](#6-start-the-first-node-as-the-bootnode). @@ -288,18 +289,18 @@ enode URL copied when starting Node-1 as the bootnode: The command line specifies: * The data directory for Node-4 using the - [`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path) option. + [`--data-path`](../../../public-networks/reference/cli/options.md#data-path) option. * A different port to Node-1, Node-2, and Node-3 for P2P discovery using the - [`--p2p-port`](../../Reference/CLI/CLI-Syntax.md#p2p-port) option. + [`--p2p-port`](../../../public-networks/reference/cli/options.md#p2p-port) option. * A different port to Node-1, Node-2, and Node-3 for HTTP JSON-RPC using the - [`--rpc-http-port`](../../Reference/CLI/CLI-Syntax.md#rpc-http-port) option. + [`--rpc-http-port`](../../../public-networks/reference/cli/options.md#rpc-http-port) option. * The bootnode as for [Node-2](#7-start-node-2). * Other options as for [Node-1](#6-start-the-first-node-as-the-bootnode). ### 10. Confirm the private network is working Start another terminal, use curl to call the JSON-RPC API -[`ibft_getvalidatorsbyblocknumber`](../../Reference/API-Methods.md#ibft_getvalidatorsbyblocknumber) +[`ibft_getvalidatorsbyblocknumber`](../../reference/api/index.md#ibft_getvalidatorsbyblocknumber) method and confirm the network has four validators: ```bash @@ -338,7 +339,7 @@ Look at the logs to confirm Besu is producing blocks: ``` If the keys were not copied to the correct directory, Besu creates a key when starting up: - + ```bash 2020-12-21 07:33:11.458+10:00 | main | INFO | KeyPairUtil | Generated new public key 0x1a4a2ade5ebc0a85572e2492e0cdf3e96b8928c75fa55b4425de8849850cf9b3a8cad1e27d98a3d3afac326a5e8788dbe6cc40249715c92825aebb28abe3e346 and stored it to /IBFT-Network/Node-1/data/key ``` @@ -348,7 +349,7 @@ Look at the logs to confirm Besu is producing blocks: ## Next steps -Use the [IBFT API](../../Reference/API-Methods.md#ibft-20-methods) to remove or add validators. +Use the [IBFT API](../../reference/api/index.md#ibft-20-methods) to remove or add validators. !!! note @@ -360,12 +361,11 @@ Use the [IBFT API](../../Reference/API-Methods.md#ibft-20-methods) to remove or 2.0 requires four validators to be Byzantine fault tolerant. Import accounts to MetaMask and send transactions as described in the -[Quickstart tutorial](../Developer-Quickstart.md#create-a-transaction-using-metamask). +[Quickstart tutorial](../quickstart.md#create-a-transaction-using-metamask). !!! info - Besu does not support - [private key management](../../HowTo/Send-Transactions/Account-Management.md). + Besu doesn't support [private key management](../../../public-networks/how-to/send-transactions.md). ## Stop the nodes @@ -377,7 +377,7 @@ When finished using the private network, stop all nodes using ++ctrl+c++ in each [6. Start First Node as Bootnode](#6-start-the-first-node-as-the-bootnode). -[IBFT 2.0 (proof of authority)consensus protocol]: ../../HowTo/Configure/Consensus-Protocols/IBFT.md +[IBFT 2.0 (proof of authority)consensus protocol]: ../../how-to/configure/consensus/ibft.md *[Byzantine fault tolerant]: Ability to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers. diff --git a/docs/Tutorials/Private-Network/Adding-removing-IBFT-validators.md b/docs/private-networks/tutorials/ibft/validators.md similarity index 71% rename from docs/Tutorials/Private-Network/Adding-removing-IBFT-validators.md rename to docs/private-networks/tutorials/ibft/validators.md index 397b13d7..31d80d98 100644 --- a/docs/Tutorials/Private-Network/Adding-removing-IBFT-validators.md +++ b/docs/private-networks/tutorials/ibft/validators.md @@ -5,11 +5,11 @@ description: Adding and removing IBFT 2.0 validators # Add and remove IBFT 2.0 validators This example walks through -[adding and removing an IBFT 2.0 validator](../../HowTo/Configure/Consensus-Protocols/IBFT.md#add-and-remove-validators). +[adding and removing an IBFT 2.0 validator](../../how-to/configure/consensus/ibft.md#add-and-remove-validators). ## Prerequisites -* [IBFT 2.0 network as configured in the IBFT 2.0 tutorial](Create-IBFT-Network.md) +* [IBFT 2.0 network as configured in the IBFT 2.0 tutorial](index.md) ## Add a validator @@ -24,7 +24,7 @@ mkdir -p Node-5/data ### 2. Start the node Change into the working directory for the new Node-5 and start the node, specifying the -[Node-1 enode URL](Create-IBFT-Network.md#6-start-the-first-node-as-the-bootnode) as the bootnode: +[Node-1 enode URL](index.md#6-start-the-first-node-as-the-bootnode) as the bootnode: ```bash besu --data-path=data --genesis-file=../genesis.json --bootnodes= --p2p-port=30307 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8549 @@ -33,14 +33,14 @@ besu --data-path=data --genesis-file=../genesis.json --bootnodes=/explorer` -![`k8s-explorer`](../../images/kubernetes-explorer.png) +![`k8s-explorer`](../../../images/kubernetes-explorer.png) diff --git a/docs/Tutorials/Kubernetes/Create-Cluster.md b/docs/private-networks/tutorials/kubernetes/cluster.md similarity index 99% rename from docs/Tutorials/Kubernetes/Create-Cluster.md rename to docs/private-networks/tutorials/kubernetes/cluster.md index 25f2129b..9c08efb1 100644 --- a/docs/Tutorials/Kubernetes/Create-Cluster.md +++ b/docs/private-networks/tutorials/kubernetes/cluster.md @@ -80,7 +80,7 @@ The [template](https://github.com/ConsenSys/quorum-kubernetes/tree/master/aws) c infrastructure used to build the cluster and other resources in AWS. We also use some native services with the cluster for performance and best practices, these include: -* [Pod identities](hhttps://github.com/aws/amazon-eks-pod-identity-webhook). +* [Pod identities](https://github.com/aws/amazon-eks-pod-identity-webhook). * [Secrets Store CSI drivers](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html). * Dynamic storage classes backed by AWS EBS. The [volume claims](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims) are fixed @@ -174,7 +174,7 @@ that are specific to your deployment. 1. Optionally, deploy the [kubernetes dashboard](https://github.com/ConsenSys/quorum-kubernetes/tree/master/aws/templates/k8s-dashboard). -1. You can now use your cluster and you can deploy [Helm charts](./Deploy-Charts.md) to it. +1. You can now use your cluster and you can deploy [Helm charts](charts.md) to it. ### Azure Kubernetes Service @@ -262,4 +262,4 @@ To provision the cluster: ./scripts/bootstrap.sh "AKS_RESOURCE_GROUP" "AKS_CLUSTER_NAME" "AKS_MANAGED_IDENTITY" "AKS_NAMESPACE" ``` -1. You can now use your cluster and you can deploy [Helm charts](./Deploy-Charts.md) to it. +1. You can now use your cluster and you can deploy [Helm charts](charts.md) to it. diff --git a/docs/Tutorials/Kubernetes/Overview.md b/docs/private-networks/tutorials/kubernetes/index.md similarity index 95% rename from docs/Tutorials/Kubernetes/Overview.md rename to docs/private-networks/tutorials/kubernetes/index.md index 75e9524c..94d9014d 100644 --- a/docs/Tutorials/Kubernetes/Overview.md +++ b/docs/private-networks/tutorials/kubernetes/index.md @@ -3,7 +3,7 @@ title: Deploy a Hyperledger Besu private network with Kubernetes description: Deploying Hyperledger Besu with Kubernetes --- -# Deploying Hyperledger Besu with Kubernetes +# Deploy Besu using Kubernetes Use the [reference implementations](https://github.com/ConsenSys/besu-kubernetes) to install private networks using Kubernetes (K8s). Reference implementations are available using: @@ -67,12 +67,12 @@ Each node in turn uses NAT to configure the pods so that they reach other pods o This limits where they can reach but also more specifically what can reach them. For example, an external VM which must have custom routes does not scale well. -![without-CNI](../../images/kubernetes-1.jpeg) +![without-CNI](../../../images/kubernetes-1.jpeg) CNI, on the other hand, allows every pod to get a unique IP directly from the virtual subnet which removes this restriction. Therefore, it has a limit on the maximum number of pods that can be spun up, so you must plan ahead to avoid IP exhaustion. -![with-CNI](../../images/kubernetes-2.jpeg) +![with-CNI](../../../images/kubernetes-2.jpeg) ## Multi-cluster @@ -84,7 +84,7 @@ From that point on you can use static nodes and pods to communicate across the c The same setup also works to connect external nodes and business applications from other infrastructure, either in the cloud or on premise. -![multi-cluster](../../images/kubernetes-3.png) +![multi-cluster](../../../images/kubernetes-3.png) ## Concepts @@ -104,9 +104,9 @@ across namespaces don't need to be. Consider using StatefulSets instead of Deployments for Besu. The term 'client node' refers to bootnode, validator and member/RPC nodes. For Besu nodes, we only use CLI arguments to keep things consistent. -### Role Based Access Controls +### Role-based access controls -We encourage using RBACs for access to the private key of each node, that is, only a specific pod or statefulset is +We encourage using role-based access controls (RBACs) for access to the private key of each node, that is, only a specific pod or statefulset is allowed to access a specific secret. If you need to specify a Kube configuration file for each pod, use the KUBE_CONFIG_PATH variable. diff --git a/docs/Tutorials/Kubernetes/Maintenance.md b/docs/private-networks/tutorials/kubernetes/maintenance.md similarity index 94% rename from docs/Tutorials/Kubernetes/Maintenance.md rename to docs/private-networks/tutorials/kubernetes/maintenance.md index 2ff68cab..33932fc9 100644 --- a/docs/Tutorials/Kubernetes/Maintenance.md +++ b/docs/private-networks/tutorials/kubernetes/maintenance.md @@ -3,10 +3,14 @@ title: Besu Kubernetes Maintenance description: Maintenance for Besu on a Kubernetes cluster --- +# Maintenance + +You can perform maintenance for Besu on a Kubernetes cluster. + ## Prerequisites * Clone the [Quorum-Kubernetes](https://github.com/ConsenSys/quorum-kubernetes) repository -* A [running Kubernetes cluster](./Create-Cluster.md) with a [network](./Deploy-Charts.md) +* A [running Kubernetes cluster](cluster.md) with a [network](charts.md) * Install [Kubectl](https://kubernetes.io/docs/tasks/tools/) * Install [Helm3](https://helm.sh/docs/intro/install/) diff --git a/docs/Tutorials/Kubernetes/Nat-Manager-Kubernetes.md b/docs/private-networks/tutorials/kubernetes/nat-manager.md similarity index 86% rename from docs/Tutorials/Kubernetes/Nat-Manager-Kubernetes.md rename to docs/private-networks/tutorials/kubernetes/nat-manager.md index b88d1119..7c31f8cb 100644 --- a/docs/Tutorials/Kubernetes/Nat-Manager-Kubernetes.md +++ b/docs/private-networks/tutorials/kubernetes/nat-manager.md @@ -4,19 +4,19 @@ description: Tutorial to configure Kubernetes mode for Hyperledger Besu Nat Mana # Configure Kubernetes mode in NAT Manager -Use [`--nat-method=AUTO`](../../HowTo/Find-and-Connect/Specifying-NAT.md#auto) or -[`--nat-method=KUBERNETES`](../../HowTo/Find-and-Connect/Specifying-NAT.md#kubernetes) +Use [`--nat-method=AUTO`](../../../public-networks/how-to/connect/specify-nat.md#auto) or +[`--nat-method=KUBERNETES`](../../../public-networks/how-to/connect/specify-nat.md#kubernetes) CLI options to let the Besu node automatically configure its IP address and ports. -Use mode [`--nat-method=NONE`](../../HowTo/Find-and-Connect/Specifying-NAT.md#none) to be able to +Use mode [`--nat-method=NONE`](../../../public-networks/how-to/connect/specify-nat.md#none) to be able to set your Besu ports and IP address manually. -Default mode is [`AUTO`](../../HowTo/Find-and-Connect/Specifying-NAT.md#auto) but Besu will -fallback to [`NONE`](../../HowTo/Find-and-Connect/Specifying-NAT.md#none) +Default mode is [`AUTO`](../../../public-networks/how-to/connect/specify-nat.md#auto) but Besu will +fallback to [`NONE`](../../../public-networks/how-to/connect/specify-nat.md#none) mode if automatic configuration fails. !!!example - The following log shows fallback to [`NONE`](../../HowTo/Find-and-Connect/Specifying-NAT.md#none) + The following log shows fallback to [`NONE`](../../../public-networks/how-to/connect/specify-nat.md#none) mode after an automatic detection failure. ``` @@ -30,9 +30,9 @@ mode if automatic configuration fails. Follow 3 steps to configure Besu for automatic IP address and ports detection on Kubernetes: -1. [Create a load balancer](#1---create-a-load-balancer) -1. [Check if the load balancer is properly deployed](#2---check-if-the-load-balancer-is-properly-deployed) -1. [Deploy Besu](#3---deploy-besu) +1. [Create a load balancer](#1-create-a-load-balancer) +1. [Check if the load balancer is properly deployed](#2-check-if-the-load-balancer-is-properly-deployed) +1. [Deploy Besu](#3-deploy-besu) ### 1. Create a load balancer @@ -153,8 +153,8 @@ When steps 1 and 2 are completed, deploy Besu using the following YAML example: Automatic detection error messages do not prevent you to use Besu. - Try the fix indicated for each error or use [`--nat-method=KUBERNETES`](../../HowTo/Find-and-Connect/Specifying-NAT.md#kubernetes) CLI option - and [set IP address and port manually](../../HowTo/Find-and-Connect/Configuring-Ports.md). + Try the fix indicated for each error or use [`--nat-method=KUBERNETES`](../../../public-networks/how-to/connect/specify-nat.md#kubernetes) CLI option + and [set IP address and port manually](../../../public-networks/how-to/connect/configure-ports.md). Possible errors messages for Kubernetes automatic detection failure: @@ -184,7 +184,7 @@ Possible errors messages for Kubernetes automatic detection failure: to retrieve IP address and ports from the load balancer. - **Fix:** Give it the required permissions using [Role-based access control](https://kubernetes.io/docs/reference/access-authn-authz/rbac/). - If you can't manage permissions, define the IP address and ports manually with [`NONE`](../../HowTo/Find-and-Connect/Specifying-NAT.md#none) mode + If you can't manage permissions, define the IP address and ports manually with [`NONE`](../../../public-networks/how-to/connect/specify-nat.md#none) mode !!!example "Example error log" @@ -207,7 +207,7 @@ Possible errors messages for Kubernetes automatic detection failure: - **Error message:** `Nat manager failed to configure itself automatically due to the following reason Ingress not found. NONE mode will be used` - **Cause:** Load balancer did not finish to recover an IP address. -- **Fix:** [Check that the load balancer is properly deployed](#check-that-the-load-balancer-is-properly-deployed) before launching Besu. +- **Fix:** [Check that the load balancer is properly deployed](#2-check-if-the-load-balancer-is-properly-deployed) before launching Besu. !!!example "Example error log" diff --git a/docs/Tutorials/Kubernetes/Playground.md b/docs/private-networks/tutorials/kubernetes/playground.md similarity index 96% rename from docs/Tutorials/Kubernetes/Playground.md rename to docs/private-networks/tutorials/kubernetes/playground.md index 0e9a0047..c39c1b61 100644 --- a/docs/Tutorials/Kubernetes/Playground.md +++ b/docs/private-networks/tutorials/kubernetes/playground.md @@ -3,7 +3,7 @@ title: Deploy a Hyperledger Besu private network locally with Kubernetes description: Deploying a Hyperledger Besu private network locally with Kubernetes --- -# Deploy Besu with Kubernetes in a Local Environment +# Deploy in a local environment The [playground](https://github.com/ConsenSys/quorum-kubernetes/tree/master/playground) was created to provide an opportunity to deploy [quorum-kubernetes](https://github.com/ConsenSys/quorum-kubernetes/) in a local environment before @@ -12,7 +12,7 @@ Local deployment can be done with any local Kubernetes tool. Minikube and Rancher Desktop have been tested to work, but any complete Kubernetes solution with support for `kubectl` should suffice. -## How to deploy locally +## Steps 1. Navigate to the playground [`README`](https://github.com/ConsenSys/quorum-kubernetes/tree/master/playground). 1. Ensure that your system meets the requirements specified. diff --git a/docs/Tutorials/Kubernetes/Production.md b/docs/private-networks/tutorials/kubernetes/production.md similarity index 90% rename from docs/Tutorials/Kubernetes/Production.md rename to docs/private-networks/tutorials/kubernetes/production.md index f62e76fc..b37a5430 100644 --- a/docs/Tutorials/Kubernetes/Production.md +++ b/docs/private-networks/tutorials/kubernetes/production.md @@ -3,10 +3,14 @@ title: Besu Kubernetes - Getting ready for production description: Deploying Besu Helm Charts for production on a Kubernetes cluster --- +# Deploy for production + +You can deploy Besu for production on a Kubernetes cluster. + ## Prerequisites * Clone the [Quorum-Kubernetes](https://github.com/ConsenSys/quorum-kubernetes) repository -* A [running Kubernetes cluster](./Create-Cluster.md) +* A [running Kubernetes cluster](cluster.md) * [Kubectl](https://kubernetes.io/docs/tasks/tools/) * [Helm3](https://helm.sh/docs/intro/install/) @@ -29,7 +33,7 @@ the values in the `cluster` map as in the [Deploy](#deploy-the-network) section. ### Check that you can connect to the cluster with `kubectl` -Once you have a [cluster running](./Create-Cluster.md), verify `kubectl` is connected to cluster with: +Once you have a [cluster running](cluster.md), verify `kubectl` is connected to cluster with: ```bash kubectl version @@ -59,7 +63,7 @@ cluster: reclaimPolicy: Retain # set to either Retain or Delete; note that PVCs and PVs will still exist after a 'helm delete'. Setting to Retain will keep volumes even if PVCs/PVs are deleted in kubernetes. Setting to Delete will remove volumes from EC2 EBS when PVC is deleted ``` -Follow the steps outlined in the [deploy charts](./Deploy-Charts.md) tutorial to deploy the network. +Follow the steps outlined in the [deploy charts](charts.md) tutorial to deploy the network. ## Best practices @@ -74,7 +78,7 @@ Where possible, we recommend you use multiple bootnodes and static nodes to spee You can connect to APIs and services outside the cluster normally, but connecting into your network (such as adding an on-premise node to the network) might require more configuration. -Please check the [limitations](./Overview.md#limitations) and use CNI where possible. +Please check the [limitations](index.md#limitations) and use CNI where possible. To connect an external node to your cluster, the easiest way is to use a VPN as seen in the following [multi-cluster](#multi-cluster-support) setup. @@ -90,9 +94,9 @@ Ideally, you want to create two separate VPCs (or VNets) and make sure they have don't conflict. Once done, peer the VPCs together and update the subnet route table, so they are effectively a giant single network. -![multi-cluster](../../images/kubernetes-3.png) +![multi-cluster](../../../images/kubernetes-3.png) -When you [spin up clusters](./Create-Cluster.md), use [CNI](./Overview.md#limitations) and CIDR blocks to match the +When you [spin up clusters](cluster.md), use [CNI](index.md#limitations) and CIDR blocks to match the subnet's CIDR settings. Then deploy the genesis chart on one cluster and copy across the genesis file and static nodes config maps. Depending on your DNS settings, they might be fine as is or they might need to be actual IPs. diff --git a/docs/Tutorials/Kubernetes/Quorum-Explorer.md b/docs/private-networks/tutorials/kubernetes/quorum-explorer.md similarity index 81% rename from docs/Tutorials/Kubernetes/Quorum-Explorer.md rename to docs/private-networks/tutorials/kubernetes/quorum-explorer.md index 9f2e9787..d7ef8d0e 100644 --- a/docs/Tutorials/Kubernetes/Quorum-Explorer.md +++ b/docs/private-networks/tutorials/kubernetes/quorum-explorer.md @@ -3,15 +3,19 @@ title: Besu Kubernetes - Quorum Explorer description: Using the Quorum Explorer on a Kubernetes cluster --- +# Use the Quorum Explorer + +You can use the Quorum Explorer on a Kubernetes cluster. + ## Prerequisites * Clone the [Quorum-Kubernetes](https://github.com/ConsenSys/quorum-kubernetes) repository -* A [running Kubernetes cluster](./Create-Cluster.md) +* A [running Kubernetes cluster](cluster.md) * [Kubectl](https://kubernetes.io/docs/tasks/tools/) * [Helm3](https://helm.sh/docs/intro/install/) -* [Existing network](./Deploy-Charts.md) +* [Existing network](charts.md) -## Deploying the Quorum Explorer helm chart +## Deploy the Quorum Explorer helm chart [Quorum-Explorer](https://github.com/ConsenSys/quorum-explorer) as a lightweight blockchain explorer. The Quorum Explorer is **not** recommended for use in production and is intended for @@ -22,7 +26,7 @@ validators from the network, and demonstrates using the `SimpleStorage` smart co transactions between wallets in one interface. To use the explorer, update the [Quorum-Explorer values file](https://github.com/ConsenSys/quorum-kubernetes/blob/5920caff6dd15b4ca17f760ad9e4d7d2e43b41a1/helm/values/explorer-besu.yaml) -with your node details and endpoints, and then [deploy](./Deploy-Charts.md). +with your node details and endpoints, and then [deploy](charts.md). ## Nodes @@ -30,7 +34,7 @@ The **Nodes** page provides an overview of the nodes on the network. Select the with from the drop-down on the top right, and you'll get details of the node, block height, peers, queued transactions etc. -![`k8s-explorer`](../../images/kubernetes-explorer.png) +![`k8s-explorer`](../../../images/kubernetes-explorer.png) ## Validators @@ -44,7 +48,7 @@ Each node can call a discard on the voting process during or after the validator The vote calls made from non-validator nodes have no effect on overall consensus. -![`k8s-explorer-validators`](../../images/kubernetes-explorer-validators.png) +![`k8s-explorer-validators`](../../../images/kubernetes-explorer-validators.png) ## Explorer @@ -52,7 +56,7 @@ The **Explorer** page gives you the latest blocks from the chain and the latest occur on the network. In addition, you can search by block number or transaction hash using the respective search bar. -![`k8s-explorer-explorer`](../../images/kubernetes-explorer-explorer.png) +![`k8s-explorer-explorer`](../../../images/kubernetes-explorer-explorer.png) ## Contracts @@ -63,13 +67,13 @@ to add more contracts to that view. In this example, we deploy from `member-1` and select `member-1` and `member-3` in the **Private For** multi-select. Then click on `Compile` and `Deploy` -![`k8s-explorer-contracts-1`](../../images/kubernetes-explorer-contracts-1.png) +![`k8s-explorer-contracts-1`](../../../images/kubernetes-explorer-contracts-1.png) Once deployed, you can interact with the contract. As this is a new transaction, select `member-1` and `member-3` in **Interact** multi-select, and then click on the appropriate method call to `get` or `set` the value at the deployed contract address. -![`k8s-explorer-contracts-set`](../../images/kubernetes-explorer-contracts-set.png) +![`k8s-explorer-contracts-set`](../../../images/kubernetes-explorer-contracts-set.png) To test the private transaction functionality, select `member-2` from the drop-down on the top right, you'll notice that you are unable to interact with the contract because `member-2` was not part @@ -80,4 +84,4 @@ of the transaction. Only `members-1` and `member-3` responds correctly. The **Wallet** page gives you the functionality to send simple ETH transactions between accounts by providing the account's private key, the recipient's address, and transfer amount in Wei. -![`k8s-explorer-wallet`](../../images/kubernetes-explorer-wallet.png) +![`k8s-explorer-wallet`](../../../images/kubernetes-explorer-wallet.png) diff --git a/docs/Tutorials/Permissioning/Create-Permissioned-Network.md b/docs/private-networks/tutorials/permissioning/index.md similarity index 82% rename from docs/Tutorials/Permissioning/Create-Permissioned-Network.md rename to docs/private-networks/tutorials/permissioning/index.md index f3fb2ed9..274193ee 100644 --- a/docs/Tutorials/Permissioning/Create-Permissioned-Network.md +++ b/docs/private-networks/tutorials/permissioning/index.md @@ -14,7 +14,7 @@ uses the [IBFT 2.0 proof of authority consensus protocol]. ## Prerequisites -- [Hyperledger Besu](../../HowTo/Get-Started/Installation-Options/Install-Binaries.md) +- [Hyperledger Besu](../../get-started/install/binary-distribution.md) - [curl (or similar Web service client)](https://curl.haxx.se/download.html) ## Steps @@ -41,7 +41,7 @@ Permissioned-Network/ ### 2. Create the configuration file The configuration file defines the -[IBFT 2.0 genesis file](../../HowTo/Configure/Consensus-Protocols/IBFT.md#genesis-file) and the +[IBFT 2.0 genesis file](../../how-to/configure/consensus/ibft.md#genesis-file) and the number of node key pairs to generate. The configuration file has two nested JSON nodes. The first is the `genesis` property defining @@ -168,7 +168,7 @@ Permissioned-Network/ ### 6. Create the permissions configuration file -The [permissions configuration file](../../HowTo/Limit-Access/Local-Permissioning.md#permissions-configuration-file) +The [permissions configuration file](../../how-to/use-permissioning/local.md#permissions-configuration-file) defines the nodes and accounts allowlists. Copy the following permissions configuration to a file called `permissions_config.toml` and save a copy in the @@ -184,7 +184,7 @@ Copy the following permissions configuration to a file called `permissions_confi The permissions configuration file includes the first two accounts from the genesis file. -Use the [`perm_addNodesToAllowlist`](../../Reference/API-Methods.md#perm_addnodestoallowlist) JSON-RPC API method to add permissioned nodes after starting the nodes. +Use the [`perm_addNodesToAllowlist`](../../reference/api/index.md#perm_addnodestoallowlist) JSON-RPC API method to add permissioned nodes after starting the nodes. ### 7. Start Node-1 @@ -204,21 +204,21 @@ Use the following command: The command line allows you to enable: -- Nodes and accounts permissions using [`--permissions-nodes-config-file-enabled`](../../Reference/CLI/CLI-Syntax.md#permissions-nodes-config-file-enabled) - and [`--permissions-accounts-config-file-enabled`](../../Reference/CLI/CLI-Syntax.md#permissions-accounts-config-file-enabled). -- The JSON-RPC API using [`--rpc-http-enabled`](../../Reference/CLI/CLI-Syntax.md#rpc-http-enabled). +- Nodes and accounts permissions using [`--permissions-nodes-config-file-enabled`](../../reference/cli/options.md#permissions-nodes-config-file-enabled) + and [`--permissions-accounts-config-file-enabled`](../../reference/cli/options.md#permissions-accounts-config-file-enabled). +- The JSON-RPC API using [`--rpc-http-enabled`](../../../public-networks/reference/cli/options.md#rpc-http-enabled). - The `ADMIN`, `ETH`, `NET`, `PERM`, and `IBFT` APIs using - [`--rpc-http-api`](../../Reference/CLI/CLI-Syntax.md#rpc-http-api). + [`--rpc-http-api`](../../../public-networks/reference/cli/options.md#rpc-http-api). - All-host access to the HTTP JSON-RPC API using - [`--host-allowlist`](../../Reference/CLI/CLI-Syntax.md#host-allowlist). + [`--host-allowlist`](../../../public-networks/reference/cli/options.md#host-allowlist). - All-domain access to the node through the HTTP JSON-RPC API using - [`--rpc-http-cors-origins`](../../Reference/CLI/CLI-Syntax.md#rpc-http-cors-origins). + [`--rpc-http-cors-origins`](../../../public-networks/reference/cli/options.md#rpc-http-cors-origins). -When the node starts, the [enode URL](../../Concepts/Node-Keys.md#enode-url) displays. You need the +When the node starts, the [enode URL](../../../public-networks/concepts/node-keys.md#enode-url) displays. You need the enode URL to specify Node-1 as a peer and update the permissions configuration file in the following steps. -![Node 1 Enode URL](../../images/EnodeStartup.png) +![Node 1 Enode URL](../../../images/EnodeStartup.png) ### 8. Start Node-2 @@ -238,12 +238,12 @@ Start another terminal, change to the `Node-2` directory, and start Node-2: The command line specifies: -- A different port to Node-1 for P2P discovery using [`--p2p-port`](../../Reference/CLI/CLI-Syntax.md#p2p-port). -- A different port to Node-1 for HTTP JSON-RPC using [`--rpc-http-port`](../../Reference/CLI/CLI-Syntax.md#rpc-http-port). -- A data directory for Node-2 using [`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path). +- A different port to Node-1 for P2P discovery using [`--p2p-port`](../../../public-networks/reference/cli/options.md#p2p-port). +- A different port to Node-1 for HTTP JSON-RPC using [`--rpc-http-port`](../../../public-networks/reference/cli/options.md#rpc-http-port). +- A data directory for Node-2 using [`--data-path`](../../../public-networks/reference/cli/options.md#data-path). - Other options as for [Node-1](#7-start-node-1). -When the node starts, the [enode URL](../../Concepts/Node-Keys.md#enode-url) displays. You need +When the node starts, the [enode URL](../../../public-networks/concepts/node-keys.md#enode-url) displays. You need the enode URL to update the permissions configuration file in the following steps. ### 9. Start Node-3 @@ -264,12 +264,12 @@ Start another terminal, change to the `Node-3` directory, and start Node-3: The command line specifies: -- A different port to Node-1 and Node-2 for P2P discovery using [`--p2p-port`](../../Reference/CLI/CLI-Syntax.md#p2p-port). -- A different port to Node-1 and Node-2 for HTTP JSON-RPC using [`--rpc-http-port`](../../Reference/CLI/CLI-Syntax.md#rpc-http-port). -- A data directory for Node-3 using [`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path). +- A different port to Node-1 and Node-2 for P2P discovery using [`--p2p-port`](../../../public-networks/reference/cli/options.md#p2p-port). +- A different port to Node-1 and Node-2 for HTTP JSON-RPC using [`--rpc-http-port`](../../../public-networks/reference/cli/options.md#rpc-http-port). +- A data directory for Node-3 using [`--data-path`](../../../public-networks/reference/cli/options.md#data-path). - Other options as for [Node-1](#7-start-node-1). -When the node starts, the [enode URL](../../Concepts/Node-Keys.md#enode-url) displays. You need +When the node starts, the [enode URL](../../../public-networks/concepts/node-keys.md#enode-url) displays. You need the enode URL to update the permissions configuration file in the following steps. ### 10. Start Node-4 @@ -290,18 +290,18 @@ Start another terminal, change to the `Node-4` directory, and start Node-4: The command line specifies: -- A different port to Node-1, Node-2, and Node-3 for P2P discovery using [`--p2p-port`](../../Reference/CLI/CLI-Syntax.md#p2p-port). -- A different port to Node-1, Node-2, and Node-3 for HTTP JSON-RPC using [`--rpc-http-port`](../../Reference/CLI/CLI-Syntax.md#rpc-http-port). -- A data directory for Node-4 using [`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path). +- A different port to Node-1, Node-2, and Node-3 for P2P discovery using [`--p2p-port`](../../../public-networks/reference/cli/options.md#p2p-port). +- A different port to Node-1, Node-2, and Node-3 for HTTP JSON-RPC using [`--rpc-http-port`](../../../public-networks/reference/cli/options.md#rpc-http-port). +- A data directory for Node-4 using [`--data-path`](../../../public-networks/reference/cli/options.md#data-path). - Other options as for [Node-1](#7-start-node-1). -When the node starts, the [enode URL](../../Concepts/Node-Keys.md#enode-url) displays. You need +When the node starts, the [enode URL](../../../public-networks/concepts/node-keys.md#enode-url) displays. You need the enode URL to update the permissions configuration file in the following steps. ### 11. Add enode URLs for nodes to permissions configuration file Start another terminal and use the -[`perm_addNodesToAllowlist`](../../Reference/API-Methods.md#perm_addnodestoallowlist) JSON-RPC API +[`perm_addNodesToAllowlist`](../../reference/api/index.md#perm_addnodestoallowlist) JSON-RPC API method to add the nodes to the permissions configuration file for each node. Replace ``, ``, ``, and `` with the enode URL displayed when @@ -337,7 +337,7 @@ starting each node. ### 12. Add nodes as peers -Use the [`admin_addPeer`](../../Reference/API-Methods.md#admin_addpeer) JSON-RPC API method to add +Use the [`admin_addPeer`](../../../public-networks/reference/api/index.md#admin_addpeer) JSON-RPC API method to add Node-1 as a peer for Node-2, Node-3, and Node-4. Replace `` with the enode URL displayed when starting Node-1. @@ -390,7 +390,7 @@ Replace `` with the enode URL displayed when starting Node-3. #### Check peer count -Use curl to call the JSON-RPC API [`net_peerCount`](../../Reference/API-Methods.md#net_peercount) method and confirm the +Use curl to call the JSON-RPC API [`net_peerCount`](../../../public-networks/reference/api/index.md#net_peercount) method and confirm the nodes are functioning as peers: ```bash @@ -420,8 +420,7 @@ Import the first account from the genesis file into MetaMask and send transactio !!! info - Besu does not support - [private key management](../../HowTo/Send-Transactions/Account-Management.md). + Besu doesn't support [private key management](../../../public-networks/how-to/send-transactions.md). ### Try sending a transaction from an account not in the accounts allowlist @@ -454,7 +453,7 @@ Change to the `Node-5` directory and start Node-5 specifying the Node-1 enode UR ``` Start another terminal and use curl to call the JSON-RPC API -[`net_peerCount`](../../Reference/API-Methods.md#net_peercount) method: +[`net_peerCount`](../../../public-networks/reference/api/index.md#net_peercount) method: ```bash curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}' localhost:8549 @@ -477,8 +476,8 @@ window. !!!tip - To restart the permissioned network in the future, start from [step 5](#5-start-node-1). + To restart the permissioned network in the future, start from [step 7](#7-start-node-1). -[IBFT 2.0 proof of authority consensus protocol]: ../../HowTo/Configure/Consensus-Protocols/IBFT.md -[Private network example tutorial]: ../Developer-Quickstart.md#create-a-transaction-using-metamask +[IBFT 2.0 proof of authority consensus protocol]: ../../how-to/configure/consensus/ibft.md +[Private network example tutorial]: ../quickstart.md#create-a-transaction-using-metamask diff --git a/docs/Tutorials/Permissioning/Getting-Started-Onchain-Permissioning.md b/docs/private-networks/tutorials/permissioning/onchain.md similarity index 83% rename from docs/Tutorials/Permissioning/Getting-Started-Onchain-Permissioning.md rename to docs/private-networks/tutorials/permissioning/onchain.md index 70fd598e..175efeaa 100644 --- a/docs/Tutorials/Permissioning/Getting-Started-Onchain-Permissioning.md +++ b/docs/private-networks/tutorials/permissioning/onchain.md @@ -11,7 +11,7 @@ This tutorial configures permissioning on a [IBFT 2.0 proof of authority (PoA)] !!! note - Production environments require a Web server to [host the permissioning management dapp](../../HowTo/Deploy/Production.md). + Production environments require a Web server to [host the permissioning management dapp](../../how-to/use-permissioning/onchain.md). ## Prerequisites @@ -45,7 +45,7 @@ Permissioned-Network/ ### 2. Create the configuration file The configuration file defines the -[IBFT 2.0 genesis file](../../HowTo/Configure/Consensus-Protocols/IBFT.md#genesis-file) and the +[IBFT 2.0 genesis file](../../how-to/configure/consensus/ibft.md#genesis-file) and the number of node key pairs to generate. The configuration file has two nested JSON nodes. The first is the `genesis` property defining @@ -182,7 +182,7 @@ the `alloc` section of the contract: The permissioning contract has multiple interfaces, and each interface maps to a specific version of the [Enterprise Ethereum Alliance Client Specification](https://entethalliance.org/technical-specifications/). - Ensure that you specify the [permissioning contract interface](../../HowTo/Limit-Access/Specify-Perm-Version.md) + Ensure that you specify the [permissioning contract interface](../../how-to/use-permissioning/onchain.md) being used when starting Besu. ### 6. Copy the node private keys to the node directories @@ -245,7 +245,7 @@ Create the following environment variables and set to the specified values: To allow MetaMask to connect, the node must have JSON-RPC HTTP enabled, and have `--rpc-http-cors-origins` set to allow MetaMask. - If your network is not a [free gas network](../../HowTo/Configure/FreeGas.md), the account used + If your network is not a [free gas network](../../how-to/configure/free-gas.md), the account used to interact with the permissioning contracts must have a balance. Start the first node with command line options to enable onchain permissioning and the location of @@ -258,25 +258,25 @@ besu --data-path=data --genesis-file=../genesis.json --permissions-accounts-cont On the command line: * Enable onchain accounts permissioning using - [`--permissions-accounts-contract-enabled`](../../Reference/CLI/CLI-Syntax.md#permissions-accounts-contract-enabled). + [`--permissions-accounts-contract-enabled`](../../../public-networks/reference/cli/options.md#permissions-accounts-contract-enabled). * Set the address of the Account Ingress contract in the genesis file using - [`--permissions-accounts-contract-address`](../../Reference/CLI/CLI-Syntax.md#permissions-accounts-contract-address). + [`--permissions-accounts-contract-address`](../../../public-networks/reference/cli/options.md#permissions-accounts-contract-address). * Enable onchain nodes permissioning using - [`--permissions-nodes-contract-enabled`](../../Reference/CLI/CLI-Syntax.md#permissions-nodes-contract-enabled). + [`--permissions-nodes-contract-enabled`](../../../public-networks/reference/cli/options.md#permissions-nodes-contract-enabled). * Set the address of the Node Ingress contract in the genesis file using - [`--permissions-nodes-contract-address`](../../Reference/CLI/CLI-Syntax.md#permissions-nodes-contract-address). -* Set the version of the [permissioning contract interface](../../HowTo/Limit-Access/Specify-Perm-Version.md) - using [`--permissions-nodes-contract-version`](../../Reference/CLI/CLI-Syntax.md#permissions-nodes-contract-version). + [`--permissions-nodes-contract-address`](../../../public-networks/reference/cli/options.md#permissions-nodes-contract-address). +* Set the version of the [permissioning contract interface](../../how-to/use-permissioning/onchain.md#specify-the-permissioning-contract-interface-version) + using [`--permissions-nodes-contract-version`](../../../public-networks/reference/cli/options.md#permissions-nodes-contract-version). * Enable the JSON-RPC API using - [`--rpc-http-enabled`](../../Reference/CLI/CLI-Syntax.md#rpc-http-enabled). + [`--rpc-http-enabled`](../../../public-networks/reference/cli/options.md#rpc-http-enabled). * Enable the `ADMIN`, `ETH`, `NET`, `PERM`, and `IBFT` APIs using - [`--rpc-http-api`](../../Reference/CLI/CLI-Syntax.md#rpc-http-api). + [`--rpc-http-api`](../../../public-networks/reference/cli/options.md#rpc-http-api). * Allow all-host access to the HTTP JSON-RPC API using - [`--host-allowlist`](../../Reference/CLI/CLI-Syntax.md#host-allowlist). + [`--host-allowlist`](../../../public-networks/reference/cli/options.md#host-allowlist). * Allow all-domain access to the node through the HTTP JSON-RPC API using - [`--rpc-http-cors-origins`](../../Reference/CLI/CLI-Syntax.md#rpc-http-cors-origins). + [`--rpc-http-cors-origins`](../../../public-networks/reference/cli/options.md#rpc-http-cors-origins). -When the node starts, the [enode URL](../../Concepts/Node-Keys.md#enode-url) displays. Copy the +When the node starts, the [enode URL](../../../public-networks/concepts/node-keys.md#enode-url) displays. Copy the enode URL to use when starting Node-2, Node-3, and Node-4. ### 9. Clone the contracts and install dependencies @@ -324,7 +324,7 @@ The migration logs the addresses of the Admin and Rules contracts. !!! note Production environments require a Web server to - [host the permissioning management dapp](../../HowTo/Deploy/Production.md). + [host the permissioning management dapp](../../how-to/use-permissioning/onchain.md). 1. In the `permissioning-smart-contracts` directory, start the Web server serving the dapp: @@ -358,9 +358,9 @@ besu --data-path=data --genesis-file=../genesis.json --bootnodes= -[Node-1, Node-2, Node-3, and Node-4 to the allowlist]: ../../HowTo/Limit-Access/Updating-Permission-Lists.md#update-nodes-allowlist -[admin account]: ../../HowTo/Limit-Access/Updating-Permission-Lists.md#update-nodes-allowlist -[IBFT 2.0 proof of authority (PoA)]: ../../HowTo/Configure/Consensus-Protocols/IBFT.md +[Node-1, Node-2, Node-3, and Node-4 to the allowlist]: ../../how-to/use-permissioning/onchain.md#update-nodes-allowlist +[admin account]: ../../how-to/use-permissioning/onchain.md#update-nodes-allowlist +[IBFT 2.0 proof of authority (PoA)]: ../../how-to/configure/consensus/ibft.md diff --git a/docs/Tutorials/Permissioning/Upgrade-Permissioning-Contract.md b/docs/private-networks/tutorials/permissioning/upgrade-contracts.md similarity index 94% rename from docs/Tutorials/Permissioning/Upgrade-Permissioning-Contract.md rename to docs/private-networks/tutorials/permissioning/upgrade-contracts.md index fbef40c8..d6117f77 100644 --- a/docs/Tutorials/Permissioning/Upgrade-Permissioning-Contract.md +++ b/docs/private-networks/tutorials/permissioning/upgrade-contracts.md @@ -2,7 +2,7 @@ description: Upgrade the permissioning contracts for onchain permissioning --- -# Upgrade the permissioning contracts +# Upgrade permissioning contracts The following tutorial describes the steps to upgrade the onchain permissioning contracts to the latest version. @@ -108,7 +108,7 @@ the file must be in the `permissioning-smart-contracts` directory. RETAIN_ADMIN_CONTRACT=true RETAIN_NODE_RULES_CONTRACT=false RETAIN_ACCOUNT_RULES_CONTRACT=false - ``` + ``` ### 5. Deploy the contracts @@ -157,7 +157,7 @@ The dapp displays at [`http://localhost:3000`](http://localhost:3000). ### 7. Restart Besu nodes Restart the Besu nodes with the updated [`NodeIngress`](#5-deploy-the-contracts) -contract address and [permissioning contract interface](../../HowTo/Limit-Access/Specify-Perm-Version.md) +contract address and [permissioning contract interface](../../how-to/use-permissioning/onchain.md#specify-the-permissioning-contract-interface-version) version 2. !!! example @@ -166,4 +166,4 @@ version 2. ``` -[nodes to the allowlist]: ../../HowTo/Limit-Access/Updating-Permission-Lists.md#update-nodes-allowlist +[nodes to the allowlist]: ../../how-to/use-permissioning/onchain.md#update-nodes-allowlist diff --git a/docs/Tutorials/Privacy/Configuring-Privacy.md b/docs/private-networks/tutorials/privacy/index.md similarity index 88% rename from docs/Tutorials/Privacy/Configuring-Privacy.md rename to docs/private-networks/tutorials/privacy/index.md index 52e6189c..84398709 100644 --- a/docs/Tutorials/Privacy/Configuring-Privacy.md +++ b/docs/private-networks/tutorials/privacy/index.md @@ -14,9 +14,9 @@ Configuring a network that supports private transactions requires starting a [Te Hyperledger Besu node. Besu command line options associate the Besu node with the Tessera node. This tutorial assumes you have completed setting up an IBFT 2.0 network to the point where you have -[created the genesis file and copied the private keys](../Private-Network/Create-IBFT-Network.md#5-copy-the-node-private-keys-to-the-node-directories). +[created the genesis file and copied the private keys](../ibft/index.md#5-copy-the-node-private-keys-to-the-node-directories). If not, complete steps 1 to 5 of the -[Create an IBFT 2.0](../Private-Network/Create-IBFT-Network.md) tutorial before continuing. +[Create an IBFT 2.0](../ibft/index.md) tutorial before continuing. !!! important @@ -344,29 +344,29 @@ In the `Node-1` directory, start Besu Node-1: The command line specifies privacy options: -* [`--privacy-enabled`](../../Reference/CLI/CLI-Syntax.md#privacy-enabled) enables privacy -* [`--privacy-url`](../../Reference/CLI/CLI-Syntax.md#privacy-url) specifies the Q2T server address +* [`--privacy-enabled`](../../reference/cli/options.md#privacy-enabled) enables privacy +* [`--privacy-url`](../../reference/cli/options.md#privacy-url) specifies the Q2T server address of the Tessera node (`Q2T` in `tessera.conf`) -* [`--privacy-public-key-file`](../../Reference/CLI/CLI-Syntax.md#privacy-public-key-file) +* [`--privacy-public-key-file`](../../reference/cli/options.md#privacy-public-key-file) specifies the file containing Tessera node public key (created in [3. Generate Tessera Keys](#2-generate-tessera-keys)) -* [`--rpc-http-api`](../../Reference/CLI/CLI-Syntax.md#rpc-http-api) includes `EEA` and `PRIV` in +* [`--rpc-http-api`](../../../public-networks/reference/cli/options.md#rpc-http-api) includes `EEA` and `PRIV` in the list of JSON-RPC APIs to enable privacy JSON-RPC API methods. -* [`--min-gas-price`](../../Reference/CLI/CLI-Syntax.md#min-gas-price) is 0 for a - [free gas network](../../HowTo/Configure/FreeGas.md). +* [`--min-gas-price`](../../../public-networks/reference/cli/options.md#min-gas-price) is 0 for a + [free gas network](../../how-to/configure/free-gas.md). !!! note Use the - [`--privacy-marker-transaction-signing-key-file`](../../Reference/CLI/CLI-Syntax.md#privacy-marker-transaction-signing-key-file) + [`--privacy-marker-transaction-signing-key-file`](../../reference/cli/options.md#privacy-marker-transaction-signing-key-file) command line option to sign - [privacy marker transactions](../../Concepts/Privacy/Private-Transaction-Processing.md) using a + [privacy marker transactions](../../concepts/privacy/private-transactions/processing.md) using a supplied key. The command line option is mandatory in privacy-enabled paid gas networks. -When the node starts, the [enode URL](../../Concepts/Node-Keys.md#enode-url) displays. Copy the +When the node starts, the [enode URL](../../../public-networks/concepts/node-keys.md#enode-url) displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps. -![Node 1 Enode URL](../../images/EnodeStartup.png) +![Node 1 Enode URL](../../../images/EnodeStartup.png) ## 6. Start Besu Node-2 @@ -386,12 +386,12 @@ Node-1 as the bootnode: ``` The command line specifies the same options as for Node-1 with different ports and Tessera node URL. -The [`--bootnodes`](../../Reference/CLI/CLI-Syntax.md#bootnodes) option specifies the enode URL of Node-1. +The [`--bootnodes`](../../../public-networks/reference/cli/options.md#bootnodes) option specifies the enode URL of Node-1. -!!!note +!!! note - When running Besu from the [Docker image](../../HowTo/Get-Started/Installation-Options/Run-Docker-Image.md), - [expose ports](../../HowTo/Get-Started/Installation-Options/Run-Docker-Image.md#exposing-ports). + When running Besu from the [Docker image](../../get-started/install/run-docker-image.md), + [expose ports](../../get-started/install/run-docker-image.md#expose-ports). ## 7. Start Besu Node-3 @@ -411,7 +411,7 @@ Node-1 as the bootnode: ``` The command line specifies the same options as for Node-1 with different ports and Tessera node URL. -The [`--bootnodes`](../../Reference/CLI/CLI-Syntax.md#bootnodes) option specifies the enode URL of Node-1. +The [`--bootnodes`](../../../public-networks/reference/cli/options.md#bootnodes) option specifies the enode URL of Node-1. ## 8. Start Besu Node-4 @@ -431,7 +431,7 @@ Node-1 as the bootnode: ``` The command line specifies the same options as for Node-1 with different ports and Tessera node URL. -The [`--bootnodes`](../../Reference/CLI/CLI-Syntax.md#bootnodes) option specifies the enode URL of Node-1. +The [`--bootnodes`](../../../public-networks/reference/cli/options.md#bootnodes) option specifies the enode URL of Node-1. [Tessera]: https://docs.tessera.consensys.net/ diff --git a/docs/Tutorials/Privacy/Configuring-Multi-Tenancy.md b/docs/private-networks/tutorials/privacy/multi-tenancy.md similarity index 69% rename from docs/Tutorials/Privacy/Configuring-Multi-Tenancy.md rename to docs/private-networks/tutorials/privacy/multi-tenancy.md index d5c752ed..a0037946 100644 --- a/docs/Tutorials/Privacy/Configuring-Multi-Tenancy.md +++ b/docs/private-networks/tutorials/privacy/multi-tenancy.md @@ -11,10 +11,10 @@ description: Configure multi-tenancy and about all the [new Tessera features](https://consensys.net/blog/quorum/tessera-the-privacy-manager-of-choice-for-consensys-quorum-networks). You can configure Besu and associated Tessera node in a privacy-enabled network to host -[multiple tenants](../../Concepts/Privacy/Multi-Tenancy.md). +[multiple tenants](../../concepts/privacy/multi-tenancy.md). In this tutorial we'll add tenants to the `Node-1` Besu and Tessera node in a -[privacy-enabled network](Configuring-Privacy.md). +[privacy-enabled network](index.md). ```bash IBFT-Network/ @@ -39,13 +39,13 @@ IBFT-Network/ ## Prerequisites -* A [Privacy-enabled network](Configuring-Privacy.md). +* A [Privacy-enabled network](index.md). ## 1. Generate a private and public key pair In the `Node-1` directory, [generate the private and public key pair]. The key pair, which must be in `.pem` format, belongs to the operator who uses the key pair to authenticate the -[tenant JWTs](#7-generate-the-tenant-jwts). +[tenant JWTs](#6-generate-the-tenant-jwts). !!! note @@ -55,7 +55,7 @@ in `.pem` format, belongs to the operator who uses the key pair to authenticate ## 2. Generate Tessera keys In the `Node-1/Tessera` directory, -[generate a public/private key pair for each tenant](Configuring-Privacy.md#2-generate-tessera-keys). +[generate a public/private key pair for each tenant](index.md#2-generate-tessera-keys). !!! note @@ -132,13 +132,13 @@ In the `Node-1/Tessera` directory, update the `tessera.conf` file by adding the !!! note - If you are running Besu in [GoQuorum-compatible privacy mode](../../HowTo/Use-Privacy/Use-GoQuorum-compatible-privacy.md), + If you are running Besu in [GoQuorum-compatible privacy mode](../../how-to/use-privacy/goquorum-compatible.md), disable [`orion` mode](https://docs.tessera.consensys.net/en/stable/HowTo/Configure/Orion-Mode/) by removing the line `"mode": "orion",` from the Tessera configuration file. ## 4. Start Tessera -[Start the Tessera nodes](Configuring-Privacy.md#4-start-the-tessera-nodes) and specify +[Start the Tessera nodes](index.md#4-start-the-tessera-nodes) and specify the configuration file. ## 5. Start Besu Node-1 @@ -153,35 +153,35 @@ In the `Node-1` directory, start Besu Node-1: The command line specifies privacy options: -* [`--rpc-http-authentication-enabled`](../../Reference/CLI/CLI-Syntax.md#rpc-http-authentication-enabled) +* [`--rpc-http-authentication-enabled`](../../../public-networks/reference/cli/options.md#rpc-http-authentication-enabled) enables authentication for JSON-RPC APIs. -* [`--rpc-http-authentication-jwt-public-key-file`](../../Reference/CLI/CLI-Syntax.md#rpc-http-authentication-jwt-public-key-file) +* [`--rpc-http-authentication-jwt-public-key-file`](../../../public-networks/reference/cli/options.md#rpc-http-authentication-jwt-public-key-file) specifies the Operator's [public key file](#1-generate-a-private-and-public-key-pair). Used to - authenticate the [tenant JWTs](#7-generate-the-tenant-jwts). -* [`--privacy-enabled`](../../Reference/CLI/CLI-Syntax.md#privacy-enabled) enables privacy. -* [`--privacy-url`](../../Reference/CLI/CLI-Syntax.md#privacy-url) specifies the + authenticate the [tenant JWTs](#6-generate-the-tenant-jwts). +* [`--privacy-enabled`](../../reference/cli/options.md#privacy-enabled) enables privacy. +* [`--privacy-url`](../../reference/cli/options.md#privacy-url) specifies the [Quorum to Tessera (Q2T)] server address of the Tessera node (`Q2T` in `tessera.conf`). -* [`--privacy-multi-tenancy-enabled`](../../Reference/CLI/CLI-Syntax.md#privacy-multi-tenancy-enabled) +* [`--privacy-multi-tenancy-enabled`](../../reference/cli/options.md#privacy-multi-tenancy-enabled) enables multi-tenancy. !!! note - [`--rpc-http-authentication-jwt-public-key-file`](../../Reference/CLI/CLI-Syntax.md#rpc-http-authentication-jwt-public-key-file) + [`--rpc-http-authentication-jwt-public-key-file`](../../../public-networks/reference/cli/options.md#rpc-http-authentication-jwt-public-key-file) is only required when using [JWT public key authentication]. If using [username and password authentication], use - [`--rpc-http-authentication-credentials-file`](../../Reference/CLI/CLI-Syntax.md#rpc-http-authentication-credentials-file) + [`--rpc-http-authentication-credentials-file`](../../../public-networks/reference/cli/options.md#rpc-http-authentication-credentials-file) instead. -[Start the remaining Besu nodes](Configuring-Privacy.md#7-start-besu-node-2). +[Start the remaining Besu nodes](index.md#6-start-besu-node-2). ## 6. Generate the tenant JWTs -[Generate the JWT](../../HowTo/Interact/APIs/Authentication.md#2-create-the-jwt) for each tenant +[Generate the JWT](../../../public-networks/how-to/use-besu-api/authenticate.md#2-create-the-jwt) for each tenant and specify the [tenant's Tessera public key](#2-generate-tessera-keys) in the `privacyPublicKey` field. Ensure you apply the appropriate -[JSON-RPC API permissions](../../HowTo/Interact/APIs/Authentication.md#json-rpc-permissions) to the +[JSON-RPC API permissions](../../../public-networks/how-to/use-besu-api/authenticate.md#json-rpc-permissions) to the token. For example, ensure you enable the `PRIV` and `EEA` APIs for privacy. !!! note @@ -192,10 +192,10 @@ token. For example, ensure you enable the `PRIV` and `EEA` APIs for privacy. [Use the authentication token to make requests]. -[JWT public key authentication]: ../../HowTo/Interact/APIs/Authentication.md#jwt-public-key-authentication -[username and password authentication]: ../../HowTo/Interact/APIs/Authentication.md#username-and-password-authentication -[generate the private and public key pair]: ../../HowTo/Interact/APIs/Authentication.md#1-generate-a-private-and-public-key-pair -[Use the authentication token to make requests]: ../../HowTo/Interact/APIs/Authentication.md#using-an-authentication-token-to-make-requests +[JWT public key authentication]: ../../../public-networks/how-to/use-besu-api/authenticate.md#jwt-public-key-authentication +[username and password authentication]: ../../../public-networks/how-to/use-besu-api/authenticate.md#username-and-password-authentication +[generate the private and public key pair]: ../../../public-networks/how-to/use-besu-api/authenticate.md#1-generate-a-private-and-public-key-pair +[Use the authentication token to make requests]: ../../../public-networks/how-to/use-besu-api/authenticate.md#using-an-authentication-token-to-make-requests [Quorum to Tessera (Q2T)]: https://docs.tessera.consensys.net/Concepts/TesseraAPI/#quorum-to-tessera-api *[JWT]: JSON Web Token diff --git a/docs/Tutorials/Privacy/Privacy-Example.md b/docs/private-networks/tutorials/privacy/quickstart.md similarity index 88% rename from docs/Tutorials/Privacy/Privacy-Example.md rename to docs/private-networks/tutorials/privacy/quickstart.md index e591ef78..ef1b8ab3 100644 --- a/docs/Tutorials/Privacy/Privacy-Example.md +++ b/docs/private-networks/tutorials/privacy/quickstart.md @@ -5,13 +5,13 @@ description: Hyperledger Besu privacy-enabled private network tutorial # Create a privacy-enabled network using the Quorum Developer Quickstart You can create a privacy-enabled network using the -[Quorum Developer Quickstart](../Developer-Quickstart.md). +[Quorum Developer Quickstart](../quickstart.md). It runs a private Hyperledger Besu network that uses [Tessera](https://docs.tessera.consensys.net/en/stable/) as its private transaction manager. -You can use the [Block Explorer](../Developer-Quickstart.md#block-explorer), make -[JSON-RPC requests](../Developer-Quickstart.md#run-json-rpc-requests), and -[create transactions using MetaMask](../Developer-Quickstart.md#create-a-transaction-using-metamask). +You can use the [Block Explorer](../quickstart.md#block-explorer), make +[JSON-RPC requests](../quickstart.md#run-json-rpc-requests), and +[create transactions using MetaMask](../quickstart.md#create-a-transaction-using-metamask). This tutorial describes how to make private transactions between nodes, and perform read and write operations on private contracts. @@ -46,7 +46,7 @@ To create the docker-compose file and artifacts, run: npx quorum-dev-quickstart ``` -Follow the prompts displayed to run Hyperledger Besu, private transactions, and [logging with ELK](../../HowTo/Monitor/Elastic-Stack.md). +Follow the prompts displayed to run Hyperledger Besu, private transactions, and [logging with ELK](../../how-to/monitor/elastic-stack.md). Enter `n` for [Codefi Orchestrate](https://docs.orchestrate.consensys.net/en/stable/). ## Start the network @@ -85,9 +85,9 @@ For more information on the endpoints and services, refer to README.md in the in ## Deploy the private contract and interact with the nodes -To deploy a private contract to another [privacy group](../../Concepts/Privacy/Privacy-Groups.md) member, use the +To deploy a private contract to another [privacy group](../../concepts/privacy/privacy-groups.md) member, use the [web3js-quorum](https://consensys.github.io/web3js-quorum/latest/index.html) library and -the [`eea_sendRawTransaction`](../../Reference/API-Methods.md#eea_sendrawtransaction) API call. +the [`eea_sendRawTransaction`](../../../public-networks/reference/api/index.md#eea_sendrawtransaction) API call. You must use this API call instead of [`eth_sendTransaction`](https://ethereum.github.io/execution-apis/api-documentation) because Hyperledger Besu keeps account management separate for stronger security. @@ -147,11 +147,11 @@ The general contract deployment flow is: 1. Obtain the privacy transaction receipt from the transaction hash. 1. Use the contract address in the privacy transaction receipt to - [interact with the contract](../Contracts/Calling-Contract-Functions.md) from that point on. + [interact with the contract](../contracts/interact.md) from that point on. ## Further examples -View the [web3js-quorum client library example](web3js-quorum-Multinode-example.md) and view the +View the [web3js-quorum client library example](web3js-quorum.md) and view the [sample code examples](https://github.com/ConsenSys/web3js-quorum/tree/master/example). You can also test the erc20 token example by executing `erc20.js` which deploys diff --git a/docs/Tutorials/Privacy/web3js-quorum-Multinode-example.md b/docs/private-networks/tutorials/privacy/web3js-quorum.md similarity index 94% rename from docs/Tutorials/Privacy/web3js-quorum-Multinode-example.md rename to docs/private-networks/tutorials/privacy/web3js-quorum.md index dd4495df..c8265b55 100644 --- a/docs/Tutorials/Privacy/web3js-quorum-Multinode-example.md +++ b/docs/private-networks/tutorials/privacy/web3js-quorum.md @@ -11,11 +11,11 @@ description: web3js-quorum client library multi-node example and about all the [new Tessera features](https://consensys.net/blog/quorum/tessera-the-privacy-manager-of-choice-for-consensys-quorum-networks). To use the examples provided in the web3js-quorum library with -[your privacy network](Configuring-Privacy.md): +[your privacy network](index.md): !!! note - This example uses 3 of the 4 nodes configured in the [privacy tutorial](Configuring-Privacy.md). + This example uses 3 of the 4 nodes configured in the [privacy tutorial](index.md). 1. Clone the **ConsenSys/web3js-quorum** repository: @@ -33,7 +33,7 @@ To use the examples provided in the web3js-quorum library with * chain ID * Tessera node public keys * Hyperledger Besu node RPC URLs - * [Hyperledger Besu node private keys](../../Concepts/Node-Keys.md#node-private-key). + * [Hyperledger Besu node private keys](../../../public-networks/concepts/node-keys.md#node-private-key). 1. In the `example/multiNodeExample` directory, deploy the contract: @@ -58,7 +58,7 @@ To use the examples provided in the web3js-quorum library with !!! note If you receive a `Method not enabled` error, ensure you enabled the appropriate APIs - using the [`--rpc-http-api`](../../Reference/CLI/CLI-Syntax.md#rpc-http-api) + using the [`--rpc-http-api`](../../../public-networks/reference/cli/options.md#rpc-http-api) 1. Copy the contract address from the private transaction receipt and set the `CONTRACT_ADDRESS` environment variable: diff --git a/docs/Tutorials/Private-Network/Create-QBFT-Network.md b/docs/private-networks/tutorials/qbft.md similarity index 83% rename from docs/Tutorials/Private-Network/Create-QBFT-Network.md rename to docs/private-networks/tutorials/qbft.md index 651717f6..ff63ae12 100644 --- a/docs/Tutorials/Private-Network/Create-QBFT-Network.md +++ b/docs/private-networks/tutorials/qbft.md @@ -2,10 +2,10 @@ description: Hyperledger Besu private network using the QBFT (proof of authority) consensus protocol --- -# Create a private network using the QBFT (proof of authority) consensus protocol +# Create a private network using QBFT A private network provides a configurable network for testing. This private network uses the -[QBFT (proof of authority) consensus protocol](../../HowTo/Configure/Consensus-Protocols/QBFT.md). +[QBFT (proof of authority) consensus protocol](../how-to/configure/consensus/qbft.md). The QBFT network in this tutorial implements the [block header validator selection method] to manage validators. For a tutorial on how to implement the [contract validator selection method], follow the @@ -21,7 +21,7 @@ steps in the [example smart contract repository]. ## Prerequisites -* [Hyperledger Besu](../../HowTo/Get-Started/Installation-Options/Install-Binaries.md) +* [Hyperledger Besu](../get-started/install/binary-distribution.md) * [Curl (or similar webservice client)](https://curl.haxx.se/download.html). ## Steps @@ -51,7 +51,7 @@ QBFT-Network/ ### 2. Create a configuration file The configuration file defines the -[QBFT genesis file](../../HowTo/Configure/Consensus-Protocols/QBFT.md#genesis-file) and the +[QBFT genesis file](../how-to/configure/consensus/qbft.md#genesis-file) and the number of node key pairs to generate. The configuration file has two nested JSON nodes. The first is the `genesis` property defining @@ -109,7 +109,8 @@ in the `QBFT-Network` directory: !!! note - We recommend specifying the latest [milestone](../../Reference/Config-Items.md#milestone-blocks) when creating the configuration file for a private network. + We recommend specifying the latest [milestone](../../public-networks/reference/genesis-items.md#milestone-blocks) + when creating the genesis file for a private network. This ensures you are using the most up-to-date protocol and have access to the most recent opcodes. !!! warning @@ -200,17 +201,17 @@ In the `Node-1` directory, start Node-1: The command line: * Specifies the data directory for Node-1 using the - [`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path) option. + [`--data-path`](../../public-networks/reference/cli/options.md#data-path) option. * Enables the JSON-RPC API using the - [`--rpc-http-enabled`](../../Reference/CLI/CLI-Syntax.md#rpc-http-enabled) option. + [`--rpc-http-enabled`](../../public-networks/reference/cli/options.md#rpc-http-enabled) option. * Enables the ETH, NET, and QBFT APIs using the - [`--rpc-http-api`](../../Reference/CLI/CLI-Syntax.md#rpc-http-api) option. + [`--rpc-http-api`](../../public-networks/reference/cli/options.md#rpc-http-api) option. * Enables all-host access to the HTTP JSON-RPC API using the - [`--host-allowlist`](../../Reference/CLI/CLI-Syntax.md#host-allowlist) option. + [`--host-allowlist`](../../public-networks/reference/cli/options.md#host-allowlist) option. * Enables all-domain access to the node through the HTTP JSON-RPC API using the - [`--rpc-http-cors-origins`](../../Reference/CLI/CLI-Syntax.md#rpc-http-cors-origins) option. + [`--rpc-http-cors-origins`](../../public-networks/reference/cli/options.md#rpc-http-cors-origins) option. -When the node starts, the [enode URL](../../Concepts/Node-Keys.md#enode-url) displays. Copy the +When the node starts, the [enode URL](../../public-networks/concepts/node-keys.md#enode-url) displays. Copy the enode URL to specify Node-1 as the bootnode in the following steps. ![Node 1 Enode URL](../../images/EnodeStartup.png) @@ -235,13 +236,13 @@ enode URL copied when starting Node-1 as the bootnode: The command line specifies: * The data directory for Node-2 using the - [`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path) option. + [`--data-path`](../../public-networks/reference/cli/options.md#data-path) option. * A different port to Node-1 for P2P discovery using the - [`--p2p-port`](../../Reference/CLI/CLI-Syntax.md#p2p-port) option. + [`--p2p-port`](../../public-networks/reference/cli/options.md#p2p-port) option. * A different port to Node-1 for HTTP JSON-RPC using the - [`--rpc-http-port`](../../Reference/CLI/CLI-Syntax.md#rpc-http-port) option. + [`--rpc-http-port`](../../public-networks/reference/cli/options.md#rpc-http-port) option. * The enode URL of Node-1 using the - [`--bootnodes`](../../Reference/CLI/CLI-Syntax.md#bootnodes) option. + [`--bootnodes`](../../public-networks/reference/cli/options.md#bootnodes) option. * Other options as for [Node-1](#6-start-the-first-node-as-the-bootnode). ### 8. Start Node-3 @@ -264,11 +265,11 @@ enode URL copied when starting Node-1 as the bootnode: The command line specifies: * The data directory for Node-3 using the - [`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path) option. + [`--data-path`](../../public-networks/reference/cli/options.md#data-path) option. * A different port to Node-1 and Node-2 for P2P discovery using the - [`--p2p-port`](../../Reference/CLI/CLI-Syntax.md#p2p-port) option. + [`--p2p-port`](../../public-networks/reference/cli/options.md#p2p-port) option. * A different port to Node-1 and Node-2 for HTTP JSON-RPC using the - [`--rpc-http-port`](../../Reference/CLI/CLI-Syntax.md#rpc-http-port) option. + [`--rpc-http-port`](../../public-networks/reference/cli/options.md#rpc-http-port) option. * The bootnode as for [Node-2](#7-start-node-2). * Other options as for [Node-1](#6-start-the-first-node-as-the-bootnode). @@ -292,18 +293,18 @@ enode URL copied when starting Node-1 as the bootnode: The command line specifies: * The data directory for Node-4 using the - [`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path) option. + [`--data-path`](../../public-networks/reference/cli/options.md#data-path) option. * A different port to Node-1, Node-2, and Node-3 for P2P discovery using the - [`--p2p-port`](../../Reference/CLI/CLI-Syntax.md#p2p-port) option. + [`--p2p-port`](../../public-networks/reference/cli/options.md#p2p-port) option. * A different port to Node-1, Node-2, and Node-3 for HTTP JSON-RPC using the - [`--rpc-http-port`](../../Reference/CLI/CLI-Syntax.md#rpc-http-port) option. + [`--rpc-http-port`](../../public-networks/reference/cli/options.md#rpc-http-port) option. * The bootnode as for [Node-2](#7-start-node-2). * Other options as for [Node-1](#6-start-the-first-node-as-the-bootnode). ### 10. Confirm the private network is working Start another terminal, use curl to call the JSON-RPC API -[`qbft_getvalidatorsbyblocknumber`](../../Reference/API-Methods.md#qbft_getvalidatorsbyblocknumber) +[`qbft_getvalidatorsbyblocknumber`](../reference/api/index.md#qbft_getvalidatorsbyblocknumber) method and confirm the network has four validators: ```bash @@ -352,9 +353,9 @@ Look at the logs to confirm Besu is producing blocks: ## Next steps -Use the [QBFT API](../../Reference/API-Methods.md#qbft-methods) to remove or add validators, or import accounts +Use the [QBFT API](../reference/api/index.md#qbft-methods) to remove or add validators, or import accounts to MetaMask and send transactions as described in the -[Quickstart tutorial](../Developer-Quickstart.md#create-a-transaction-using-metamask). +[Quickstart tutorial](quickstart.md#create-a-transaction-using-metamask). !!! note @@ -362,8 +363,7 @@ to MetaMask and send transactions as described in the [created for each node](#3-generate-node-keys-and-a-genesis-file) has the node address as the name. - Besu does not support - [private key management](../../HowTo/Send-Transactions/Account-Management.md). + Besu doesn't support [private key management](../../public-networks/how-to/send-transactions.md). You can switch from the [block header validator selection method] configured here, to the [contract validator selection method] by updating the genesis file and [configuring a transition]. @@ -375,12 +375,12 @@ When finished using the private network, stop all nodes using ++ctrl+c++ in each !!!tip To restart the QBFT network in the future, start from - [6. Start First Node as Bootnode](#6-start-the-first-node-as-the-bootnode). + [step 6](#6-start-the-first-node-as-the-bootnode). -[block header validator selection method]: ../../HowTo/Configure/Consensus-Protocols/QBFT.md#add-and-remove-validators-using-block-headers -[contract validator selection method]: ../../HowTo/Configure/Consensus-Protocols/QBFT.md#add-and-remove-validators-using-a-smart-contract +[block header validator selection method]: ../how-to/configure/consensus/qbft.md#add-and-remove-validators-using-block-headers +[contract validator selection method]: ../how-to/configure/consensus/qbft.md#add-and-remove-validators-using-a-smart-contract [example smart contract repository]: https://github.com/ConsenSys/validator-smart-contracts -[configuring a transition]: ../../HowTo/Configure/Consensus-Protocols/QBFT.md#transitions +[configuring a transition]: ../how-to/configure/consensus/qbft.md#transitions *[Byzantine fault tolerant]: Ability to function correctly and reach consensus despite nodes failing or propagating incorrect information to peers. diff --git a/docs/Tutorials/Developer-Quickstart.md b/docs/private-networks/tutorials/quickstart.md similarity index 91% rename from docs/Tutorials/Developer-Quickstart.md rename to docs/private-networks/tutorials/quickstart.md index 332ead6b..4c0b09ee 100644 --- a/docs/Tutorials/Developer-Quickstart.md +++ b/docs/private-networks/tutorials/quickstart.md @@ -6,7 +6,7 @@ description: Rapidly generate local blockchain networks. # Developer Quickstart The Quorum Developer Quickstart uses the Hyperledger Besu Docker image to run a private -[IBFT 2.0](../HowTo/Configure/Consensus-Protocols/IBFT.md) network of Besu nodes managed by Docker Compose. +[IBFT 2.0](../how-to/configure/consensus/ibft.md) network of Besu nodes managed by Docker Compose. !!! warning @@ -41,14 +41,14 @@ To create the tutorial `docker-compose` files and artifacts, run: npx quorum-dev-quickstart ``` -Follow the prompts displayed to run Hyperledger Besu and [logging with ELK](../HowTo/Monitor/Elastic-Stack.md). +Follow the prompts displayed to run Hyperledger Besu and [logging with ELK](../how-to/monitor/elastic-stack.md). Enter `n` for [Codefi Orchestrate](https://docs.orchestrate.consensys.net/en/stable/) and -[private transactions](../Concepts/Privacy/Privacy-Overview.md). +[private transactions](../concepts/privacy/index.md). !!! note If you enter `y` for private transactions, you get three Besu nodes with corresponding Tessera nodes for privacy. - You can follow the [privacy walk-through](Privacy/Privacy-Example.md), which details how to send private + You can follow the [privacy walk-through](privacy/index.md), which details how to send private transactions and interact with deployed private contracts. ## Start the network @@ -92,13 +92,13 @@ When execution is successfully finished, the process lists the available service - Use the **Web block explorer address** to display the [block explorer Web application](http://localhost:25000). - Use the **Prometheus address** to access the [Prometheus dashboard](http://localhost:9090/graph). - [Read more about metrics](../HowTo/Monitor/Metrics.md). + [Read more about metrics](../../public-networks/how-to/monitor/metrics.md). - Use the **Grafana address** to access the [Grafana dashboard](http://localhost:3000/d/XE4V0WGZz/besu-overview?orgId=1&refresh=10s&from=now-30m&to=now&var-system=All). - [Read more about metrics](../HowTo/Monitor/Metrics.md). + [Read more about metrics](../../public-networks/how-to/monitor/metrics.md). - Use the **Kibana logs address** to access the [logs in Kibana](http://localhost:5601/app/kibana#/discover). - [Read more about log management](../HowTo/Monitor/Elastic-Stack.md). + [Read more about log management](../how-to/monitor/elastic-stack.md). To display the list of endpoints again, run: @@ -117,14 +117,14 @@ The block explorer displays a summary of the private network, indicating four pe Select the block number to the right of **Best Block** to display the block details: -![Block Details](../images/ExplorerBlockDetails.png) +![Block Details](../../images/ExplorerBlockDetails.png) You can explore blocks by selecting the blocks under **`Bk`** on the left-hand side. You can search for a specific block, transaction hash, or address by selecting the :mag: in the top left-hand corner. -![Explorer Search](../images/ExplorerSearch.png) +![Explorer Search](../../images/ExplorerSearch.png) ## Monitor nodes with Prometheus and Grafana @@ -135,11 +135,11 @@ You can directly access these tools from your browser at the addresses displayed - [Grafana dashboard](http://localhost:3000/d/XE4V0WGZz/besu-overview?orgId=1&refresh=10s&from=now-30m&to=now&var-system=All) For more details on how to configure and use these tools for your own nodes, see the -[performances monitoring documentation](../HowTo/Monitor/Metrics.md), +[performances monitoring documentation](../../public-networks/how-to/monitor/metrics.md), [Prometheus documentation](https://prometheus.io/docs/introduction/overview/) and [Grafana documentation](https://grafana.com/docs/). -![Grafana](../images/grafana.png) +![Grafana](../../images/grafana.png) ## Run JSON-RPC requests @@ -199,7 +199,7 @@ or skip ahead to [Create a transaction using MetaMask](#create-a-transaction-usi Peers are the other nodes connected to the node receiving the JSON-RPC request. -Poll the peer count using [`net_peerCount`](../Reference/API-Methods.md#net_peercount): +Poll the peer count using [`net_peerCount`](../../public-networks/reference/api/index.md#net_peercount): ```bash curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}' http://localhost:8545 @@ -217,7 +217,7 @@ The result indicates that there are four peers (the validators): ### Request the most recent block number -Call [`eth_blockNumber`](../Reference/API-Methods.md#eth_blockNumber) to retrieve the number of the most recently +Call [`eth_blockNumber`](../../public-networks/reference/api/index.md#eth_blockNumber) to retrieve the number of the most recently synchronized block: ```bash @@ -249,8 +249,7 @@ You can use [MetaMask](https://metamask.io/) to send a transaction on your priva !!! note - Besu doesn't incorporate - [account management](../HowTo/Send-Transactions/Account-Management.md). + Besu doesn't incorporate [account management](../../public-networks/how-to/send-transactions.md). To create your own account, you have to use a third-party tool, such as MetaMask. 1. After importing an existing test account, [create another test account from scratch] to use as the recipient for a @@ -269,7 +268,7 @@ You can use [MetaMask](https://metamask.io/) to send a transaction on your priva !!! tip - You can use a zero gas price here as this private test network is a [free gas network](../HowTo/Configure/FreeGas.md), + You can use a zero gas price here as this private test network is a [free gas network](../how-to/configure/free-gas.md), but the maximum amount of gas that can be used (the gas limit) for a value transaction must be at least 21000. 1. Refresh the Block Explorer page in your browser displaying the target test account. @@ -415,15 +414,15 @@ When you select **Adopt**, a MetaMask window pops up and requests your permissio After the transaction is complete and successful, the status of the pet you adopted shows **Success**. -![Dapp UI](../images/dapp-ui.png) +![Dapp UI](../../images/dapp-ui.png) You can also search for the transaction and view its details in the [Block Explorer](http://localhost:25000/). -![Dapp UI](../images/dapp-explorer-tx.png) +![Dapp UI](../../images/dapp-explorer-tx.png) The MetMask UI also keeps a record of the transaction. -![Dapp UI](../images/dapp-metamask-tx.png) +![Dapp UI](../../images/dapp-metamask-tx.png) ### Deploy your own dapp @@ -581,7 +580,7 @@ If the `nodekey.pub` is `4540ea...9c1d78` and the IP address is `172.16.239.41`, `"enode://4540ea...9c1d78@172.16.239.41:30303"`, which must be added to both files. Alternatively, call the -[`perm_addNodesToAllowlist`](../Reference/API-Methods.md#perm_addnodestoallowlist) API method on existing nodes to add +[`perm_addNodesToAllowlist`](../../public-networks/reference/api/index.md#perm_addnodestoallowlist) API method on existing nodes to add the new node without restarting. !!! note @@ -595,13 +594,13 @@ the new node without restarting. Once complete, start the network up with `./run.sh`. When using the smart contract you can either make changes via a [dapp](https://github.com/ConsenSys/permissioning-smart-contracts) -or via [RPC API calls](../Reference/API-Methods.md#perm_addnodestoallowlist). +or via [RPC API calls](../../public-networks/reference/api/index.md#perm_addnodestoallowlist). -[bootnodes]: ../HowTo/Deploy/Bootnodes.md -[permissions file]: ../HowTo/Limit-Access/Local-Permissioning.md -[static nodes]: ../HowTo/Find-and-Connect/Static-Nodes.md -[allow list]: ../HowTo/Limit-Access/Local-Permissioning.md#node-allowlisting +[bootnodes]: ../how-to/configure/bootnodes.md +[permissions file]: ../how-to/use-permissioning/local.md +[static nodes]: ../../public-networks/how-to/connect/static-nodes.md +[allow list]: ../how-to/use-permissioning/local.md#node-allowlisting [Import one of the existing accounts above into MetaMask]: https://metamask.zendesk.com/hc/en-us/articles/360015489331-Importing-an-Account-New-UI- [create another test account from scratch]: https://metamask.zendesk.com/hc/en-us/articles/360015289452-Creating-Additional-MetaMask-Wallets-New-UI- diff --git a/docs/Concepts/Data-Storage-Formats.md b/docs/public-networks/concepts/data-storage-formats.md similarity index 76% rename from docs/Concepts/Data-Storage-Formats.md rename to docs/public-networks/concepts/data-storage-formats.md index a538deda..cc783389 100644 --- a/docs/Concepts/Data-Storage-Formats.md +++ b/docs/public-networks/concepts/data-storage-formats.md @@ -14,7 +14,7 @@ In forest mode, each node in the trie is saved in a key-value store by hash. For with new nodes, leaf nodes, and a new state root. Old leaf nodes remain in the underlying data store. Data is accessed and stored by hash, which increases the size of the database and increases the resources and time needed to access account data. -![forest_of_tries](../images/forest_of_tries.png) +![forest_of_tries](../../images/forest_of_tries.png) ## Bonsai Tries @@ -24,21 +24,21 @@ read performance. Bonsai stores leaf values in a trie log, separate from the branches of the trie. Bonsai stores nodes by the location of the node instead of the hash of the node. Bonsai can access the leaf from the underlying storage directly using the account key. This greatly reduces the disk space needed for storage and allows for less resource-demanding -and faster read performance. Bonsai inherently [prunes](Pruning.md) orphaned nodes and old branches. +and faster read performance. Bonsai inherently prunes orphaned nodes and old branches. To run a node with Bonsai Tries data storage format, use the command line option -[`--data-storage-format=BONSAI`](../Reference/CLI/CLI-Syntax.md#data-storage-format). +[`--data-storage-format=BONSAI`](../reference/cli/options.md#data-storage-format). -![Bonsai_tries](../images/Bonsai_tries.png) +![Bonsai_tries](../../images/Bonsai_tries.png) ## Forest of Tries vs. Bonsai Tries ### Storage requirements Forest mode uses significantly more memory than Bonsai. -With an [archive node](Node-Types.md#run-an-archive-node), forest mode uses an estimated 12 TB of +With an [archive node](../how-to/connect/sync-node.md#run-an-archive-node), forest mode uses an estimated 12 TB of storage, while Bonsai uses an estimated 1100 GB of storage. -With a [full node](Node-Types.md#run-a-full-node), forest mode uses an estimated 7 TB of storage, +With a [full node](../how-to/connect/sync-node.md#run-a-full-node), forest mode uses an estimated 7 TB of storage, while Bonsai uses an estimated 790 GB of storage. ### Accessing data @@ -50,7 +50,7 @@ particularly if the blocks are more recent. However, Bonsai becomes increasingly more resource-intensive the further in history you try to read data. To prevent this, you can limit how far Bonsai looks back while reconstructing data. The default limit Bonsai looks back is 512. To change the parameter, use the -[`--bonsai-maximum-back-layers-to-load`](../Reference/CLI/CLI-Syntax.md#bonsai-maximum-back-layers-to-load) option. +[`--bonsai-maximum-back-layers-to-load`](../reference/cli/options.md#bonsai-maximum-back-layers-to-load) option. !!! note @@ -59,8 +59,8 @@ The default limit Bonsai looks back is 512. To change the parameter, use the ### Syncing nodes -The following table shows the ways you can [sync a full node](Node-Types.md#run-a-full-node) with the different data -storage formats using [fast](Node-Types.md#fast-synchronization) and [snap](Node-Types.md#snap-synchronization) sync. +The following table shows the ways you can [sync a full node](../how-to/connect/sync-node.md#run-a-full-node) with the different data +storage formats using [fast](../how-to/connect/sync-node.md#fast-synchronization) and [snap](../how-to/connect/sync-node.md#snap-synchronization) sync. | Data storage format | Sync mode | Storage estimate | Can other nodes sync to your node? | |---------------------|-----------|------------------|------------------------------------| diff --git a/docs/Concepts/Events-and-Logs.md b/docs/public-networks/concepts/events-and-logs.md similarity index 95% rename from docs/Concepts/Events-and-Logs.md rename to docs/public-networks/concepts/events-and-logs.md index 2e40427c..02288456 100644 --- a/docs/Concepts/Events-and-Logs.md +++ b/docs/public-networks/concepts/events-and-logs.md @@ -12,10 +12,10 @@ gas) so storing and accessing the required data in logs reduces the cost. For ex display all transfers made using a specific contract, but not the current state of the contract. A Dapp front end can either access logs using the -[JSON-RPC API filter methods](../HowTo/Interact/Filters/Accessing-Logs-Using-JSON-RPC.md) or -subscribe to logs using the [RPC Pub/Sub API](../HowTo/Interact/APIs/RPC-PubSub.md#logs). +[JSON-RPC API filter methods](../how-to/use-besu-api/access-logs.md) or +subscribe to logs using the [RPC Pub/Sub API](../how-to/use-besu-api/rpc-pubsub.md#logs). -Use [`admin_generateLogBloomCache`](../Reference/API-Methods.md#admin_generatelogbloomcache) to +Use [`admin_generateLogBloomCache`](../reference/api/index.md#admin_generatelogbloomcache) to improve log retrieval performance. ## Topics @@ -182,7 +182,7 @@ for event 2 is `keccak('Event2(uint256)')`. The hashes are: ## Topic filters -[Filter options objects](../Reference/API-Objects.md#filter-options-object) have a `topics` key to +[Filter options objects](../reference/api/objects.md#filter-options-object) have a `topics` key to filter logs by topics. Topics are order-dependent. A transaction with a log containing topics `[A, B]` matches with the diff --git a/docs/HowTo/Configure/Genesis-File.md b/docs/public-networks/concepts/genesis-file.md similarity index 77% rename from docs/HowTo/Configure/Genesis-File.md rename to docs/public-networks/concepts/genesis-file.md index 95053656..e2cf8ade 100644 --- a/docs/HowTo/Configure/Genesis-File.md +++ b/docs/public-networks/concepts/genesis-file.md @@ -2,21 +2,21 @@ description: Configuring a network using the genesis file --- -# Creating the Hyperledger Besu genesis file +# Genesis file The genesis file defines the first block in the chain, and the first block defines which chain you want to join. For Ethereum Mainnet and public testnets (for example, Rinkeby) the genesis configuration definition is in Besu and used when specifying a public network using the -[`--network`](../../Reference/CLI/CLI-Syntax.md#network) command line option. +[`--network`](../reference/cli/options.md#network) command line option. For private networks, [create a JSON genesis file](https://consensys.net/blog/quorum/hyperledger-besu-how-to-create-an-ethereum-genesis-file/), then specify the genesis file using the -[`--genesis-file`](../../Reference/CLI/CLI-Syntax.md#genesis-file) command line option. +[`--genesis-file`](../reference/cli/options.md#genesis-file) command line option. -The genesis file specifies the [network-wide settings](../../Reference/Config-Items.md), such as -those for a [free gas network](FreeGas.md), so all nodes in a network must use the same genesis +The genesis file specifies the [network-wide settings](../reference/genesis-items.md), such as +those for a [free gas network](../../private-networks/how-to/configure/free-gas.md), so all nodes in a network must use the same genesis file. !!! example "Example IBFT 2.0 genesis file" diff --git a/docs/Concepts/NetworkID-And-ChainID.md b/docs/public-networks/concepts/network-and-chain-id.md similarity index 82% rename from docs/Concepts/NetworkID-And-ChainID.md rename to docs/public-networks/concepts/network-and-chain-id.md index bb3564ab..8c697733 100644 --- a/docs/Concepts/NetworkID-And-ChainID.md +++ b/docs/public-networks/concepts/network-and-chain-id.md @@ -33,8 +33,8 @@ the same, with the network ID defaulting to the chain ID, as specified in the ge ``` Besu sets the chain ID (and by default the network ID) automatically, using either the -[`--genesis-file`](../Reference/CLI/CLI-Syntax.md#genesis-file) option or when specifying a -network using the [`--network`](../Reference/CLI/CLI-Syntax.md#network) option. The following +[`--genesis-file`](../reference/cli/options.md#genesis-file) option or when specifying a +network using the [`--network`](../reference/cli/options.md#network) option. The following table lists the available networks and their chain and network IDs. | Network | Chain | Chain ID | Network ID | Type | @@ -55,21 +55,21 @@ table lists the available networks and their chain and network IDs. Usually the network ID is the same as the chain ID, but if you want to separate specific nodes from the rest of the network so they can't connect or synchronize with other nodes, you can override the default network ID for those nodes using the -[`--network-id`](../Reference/CLI/CLI-Syntax.md#network-id) option. +[`--network-id`](../reference/cli/options.md#network-id) option. ## Start a new chain with a new chain ID If you update the chain ID (or network ID) of existing nodes, they can no longer peer with other nodes in the network. -Nodes need to have a matching [genesis file](../HowTo/Configure/Genesis-File.md), including the chain ID, in order to peer. +Nodes need to have a matching [genesis file](genesis-file.md), including the chain ID, in order to peer. In this case, you're effectively running two chains that can't communicate with each other. To change a chain ID and start a new chain: 1. Stop all your nodes using ++ctrl+c++ in each terminal window. -2. Update the [genesis file](../HowTo/Configure/Genesis-File.md) with the new chain ID. +2. Update the [genesis file](genesis-file.md) with the new chain ID. 3. Make sure all nodes have the same genesis file. 4. Delete the old data directory or point to a new location for each node. -5. [Restart the nodes](../Tutorials/Private-Network/Create-IBFT-Network.md#6-start-the-first-node-as-the-bootnode). +5. [Restart the nodes](../../private-networks/tutorials/ibft/index.md#6-start-the-first-node-as-the-bootnode). !!! important diff --git a/docs/Concepts/Node-Keys.md b/docs/public-networks/concepts/node-keys.md similarity index 75% rename from docs/Concepts/Node-Keys.md rename to docs/public-networks/concepts/node-keys.md index 099b4891..4c867e19 100644 --- a/docs/Concepts/Node-Keys.md +++ b/docs/public-networks/concepts/node-keys.md @@ -10,7 +10,7 @@ pair to sign and verify transactions, and the node address as an identifier for ## Node private key When starting Hyperledger Besu, if the -[`--node-private-key-file`](../Reference/CLI/CLI-Syntax.md#node-private-key-file) option is not +[`--node-private-key-file`](../reference/cli/options.md#node-private-key-file) option is not specified and a `key` file does not exist in the data directory for the node, Besu generates a node private key and writes it to the `key` file. @@ -27,7 +27,7 @@ The node public key displays in the log after starting Besu. Also referred to as node public key forms part of the enode URL of a node. You can export the node public key, either to standard output or to a specified file, using the -[`public-key export`](../Reference/CLI/CLI-Subcommands.md#public-key) subcommand. +[`public-key export`](../reference/cli/subcommands.md#public-key) subcommand. ## Node address @@ -35,11 +35,11 @@ Besu generates the node address by creating a hash of the node public key and us bytes of the hash as the node address. It is also displayed in the logs after starting Besu. You can export the node address, either to standard output or to a specified file, using the -[`public-key export-address`](../Reference/CLI/CLI-Subcommands.md#public-key) subcommand. +[`public-key export-address`](../reference/cli/subcommands.md#public-key) subcommand. -## Specifying a custom node private key file +## Specify a custom node private key file -Use the [`--node-private-key-file`](../Reference/CLI/CLI-Syntax.md#node-private-key-file) option to +Use the [`--node-private-key-file`](../reference/cli/options.md#node-private-key-file) option to specify a custom `key` file in any location. If the `key` file exists, the node starts with the private key in the `key` file. If the `key` file @@ -56,16 +56,16 @@ writes a generated private key to `privatekeyfile`. ## Enode URL -The enode URL identifies a node. For example, the [`--bootnodes`](../Reference/CLI/CLI-Syntax.md#bootnodes) option and -the [`perm_addNodesToAllowlist`](../Reference/API-Methods.md#perm_addnodestoallowlist) method specify nodes by +The enode URL identifies a node. For example, the [`--bootnodes`](../reference/cli/options.md#bootnodes) option and +the [`perm_addNodesToAllowlist`](../reference/api/index.md#perm_addnodestoallowlist) method specify nodes by enode URL. The enode URL format is `enode://@[?discport=]` where: * `` is the node public key, excluding the initial 0x. * `` is the host and TCP port the bootnode is listening on for P2P discovery. Specify - the host and TCP port using the [`--p2p-host`](../Reference/CLI/CLI-Syntax.md#p2p-host) and - [`--p2p-port`](../Reference/CLI/CLI-Syntax.md#p2p-port) options. The default host is `127.0.0.1` + the host and TCP port using the [`--p2p-host`](../reference/cli/options.md#p2p-host) and + [`--p2p-port`](../reference/cli/options.md#p2p-port) options. The default host is `127.0.0.1` and the default port is `30303`. !!! note @@ -83,25 +83,25 @@ The enode URL format is `enode://@[?discport=]` where: enode URL is `enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@10.3.58.6:30303?discport=30301` - If the [`--p2p-host`](../Reference/CLI/CLI-Syntax.md#p2p-host) or - [`--p2p-port`](../Reference/CLI/CLI-Syntax.md#p2p-port) options are not specified and the node + If the [`--p2p-host`](../reference/cli/options.md#p2p-host) or + [`--p2p-port`](../reference/cli/options.md#p2p-port) options are not specified and the node public key is `0xc35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f`, then the enode URL is `enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@127.0.0.1:30303` The enode URL displays when starting a Besu node. Use the -[`net_enode`](../Reference/API-Methods.md#net_enode) JSON-RPC API method to get the enode URL of +[`net_enode`](../reference/api/index.md#net_enode) JSON-RPC API method to get the enode URL of the node. The enode advertised to other nodes during discovery is the external IP address and port, as -defined by [`--nat-method`](../HowTo/Find-and-Connect/Specifying-NAT.md). +defined by [`--nat-method`](../how-to/connect/specify-nat.md). ### Domain name support !!! warning Enode URL domain name support is an experimental feature that you can use in private - [permissioned networks](Permissioning/Permissioning-Overview.md) only. + [permissioned networks](../../private-networks/concepts/permissioning/index.md) only. To use domain names in enode URLs: @@ -120,8 +120,8 @@ To use domain names in enode URLs: `--Xdns-enabled` and `--Xdns-update-enabled` options to ensure that Besu can connect to a container after restarting even if the IP address of the container changes. - Use the [`--Xhelp`](../Reference/CLI/CLI-Syntax.md#xhelp) command line option to view experimental options and their + Use the [`--Xhelp`](../reference/cli/options.md#xhelp) command line option to view experimental options and their descriptions. -If nodes are not connecting as expected, set the [log level to TRACE](../Reference/API-Methods.md#admin_changeloglevel) to +If nodes are not connecting as expected, set the [log level to TRACE](../reference/api/index.md#admin_changeloglevel) to help troubleshoot the issue. diff --git a/docs/Concepts/Merge.md b/docs/public-networks/concepts/the-merge.md similarity index 83% rename from docs/Concepts/Merge.md rename to docs/public-networks/concepts/the-merge.md index 6f822149..6d06b1fc 100644 --- a/docs/Concepts/Merge.md +++ b/docs/public-networks/concepts/the-merge.md @@ -10,8 +10,8 @@ Ethereum Mainnet, turning Mainnet into a combination of an The Merge transitions Mainnet from proof of work to [proof of stake consensus](https://docs.teku.consensys.net/en/stable/Concepts/Proof-of-Stake/). -Update and configure Besu to be [ready for The Merge](../HowTo/Upgrade/Prepare-for-The-Merge.md). -You can also test Besu with a consensus client such as [Teku] on the [Kiln Merge testnet](../Tutorials/Merge-Testnet.md). +Update and configure Besu to be [ready for The Merge](../how-to/prepare-for-the-merge.md). +You can also test Besu with a consensus client such as [Teku] on the [Kiln Merge testnet](../tutorials/merge-testnet.md). ## Execution and consensus clients @@ -20,14 +20,14 @@ After The Merge, a full Ethereum Mainnet node will be a combination of an execut called an [Ethereum 2.0](https://blog.ethereum.org/2022/01/24/the-great-eth2-renaming/) client). Execution and consensus clients communicate with each other using the -[Engine API](../HowTo/Interact/APIs/Engine-API.md). +[Engine API](../how-to/use-engine-api.md). -![Ethereum Merge node](../images/Execution-Consensus-Clients.png) +![Ethereum Merge node](../../images/Execution-Consensus-Clients.png) ### Execution clients Execution clients, such as Besu, manage the execution layer, including executing transactions and updating the world state. -Execution clients serve [JSON-RPC API](../Reference/Engine-API-Methods.md) requests and communicate with each other in a +Execution clients serve [JSON-RPC API](../reference/engine-api/index.md) requests and communicate with each other in a peer-to-peer network. ### Consensus clients @@ -42,7 +42,7 @@ communicate with each other in a peer-to-peer network. ## What happens during The Merge Before The Merge, the execution and consensus clients' configurations will be -[updated](../HowTo/Upgrade/Prepare-for-The-Merge.md#update-besu) to listen for a certain total terminal difficulty (TTD) +[updated](../how-to/prepare-for-the-merge.md#update-besu) to listen for a certain total terminal difficulty (TTD) to be reached. !!! info @@ -64,7 +64,7 @@ After The Merge, validators earn rewards for performing [fee recipients](https://docs.teku.consensys.net/en/latest/HowTo/Prepare-for-The-Merge/#configure-the-fee-recipient) will also earn rewards for the inclusion of execution layer transactions. -Update and configure Besu to be [ready for The Merge](../HowTo/Upgrade/Prepare-for-The-Merge.md). +Update and configure Besu to be [ready for The Merge](../how-to/prepare-for-the-merge.md). [Beacon Chain]: https://ethereum.org/en/upgrades/beacon-chain/ diff --git a/docs/Concepts/Transactions/Transaction-Pool.md b/docs/public-networks/concepts/transactions/pool.md similarity index 60% rename from docs/Concepts/Transactions/Transaction-Pool.md rename to docs/public-networks/concepts/transactions/pool.md index ff2939f1..8e325141 100644 --- a/docs/Concepts/Transactions/Transaction-Pool.md +++ b/docs/public-networks/concepts/transactions/pool.md @@ -8,22 +8,22 @@ All nodes maintain a transaction pool to store pending transactions before proce Options and methods for configuring and monitoring the transaction pool include: -* [`txpool_besuTransactions`](../../Reference/API-Methods.md#txpool_besutransactions) JSON-RPC API +* [`txpool_besuTransactions`](../../reference/api/index.md#txpool_besutransactions) JSON-RPC API method to list transactions in the transaction pool. -* [`--tx-pool-max-size`](../../Reference/CLI/CLI-Syntax.md#tx-pool-max-size) command line option to +* [`--tx-pool-max-size`](../../reference/cli/options.md#tx-pool-max-size) command line option to specify the maximum number of transactions in the transaction pool. -* [`--tx-pool-price-bump`](../../Reference/CLI/CLI-Syntax.md#tx-pool-price-bump) command line +* [`--tx-pool-price-bump`](../../reference/cli/options.md#tx-pool-price-bump) command line option to specify the price bump percentage to replace an existing transaction. -* [`--tx-pool-retention-hours`](../../Reference/CLI/CLI-Syntax.md#tx-pool-retention-hours) command +* [`--tx-pool-retention-hours`](../../reference/cli/options.md#tx-pool-retention-hours) command line option to specify the maximum number of hours to keep pending transactions in the transaction pool. -* [`newPendingTransactions`](../../HowTo/Interact/APIs/RPC-PubSub.md#pending-transactions) and - [`droppedPendingTransactions`](../../HowTo/Interact/APIs/RPC-PubSub.md#dropped-transactions) +* [`newPendingTransactions`](../../how-to/use-besu-api/rpc-pubsub.md#pending-transactions) and + [`droppedPendingTransactions`](../../how-to/use-besu-api/rpc-pubsub.md#dropped-transactions) RPC subscriptions to notify of transactions added to and dropped from the transaction pool. !!! important - When submitting [private transactions](../Privacy/Private-Transactions.md#nonce-validation), the - [privacy marker transaction](../Privacy/Private-Transaction-Processing.md) is submitted to the + When submitting [private transactions](../../../private-networks/concepts/privacy/private-transactions/index.md#nonce-validation), the + [privacy marker transaction](../../../private-networks/concepts/privacy/private-transactions/processing.md) is submitted to the transaction pool, not the private transaction itself. ## Dropping transactions when the transaction pool is full @@ -38,22 +38,22 @@ transactions. You can replace a pending transaction with a transaction that has the same sender and nonce but a higher gas price. -If sending a [legacy transaction](Transaction-Types.md#frontier-transactions), the old transaction is replaced if the +If sending a [legacy transaction](types.md#frontier-transactions), the old transaction is replaced if the new transaction has a gas price higher than the existing gas price by the percentage specified by -[`--tx-pool-price-bump`](../../Reference/CLI/CLI-Syntax.md#tx-pool-price-bump). +[`--tx-pool-price-bump`](../../reference/cli/options.md#tx-pool-price-bump). -If sending an [`EIP1559` transaction](Transaction-Types.md#eip1559-transactions), the old transaction is replaced if +If sending an [`EIP1559` transaction](types.md#eip1559-transactions), the old transaction is replaced if one of the following is true: * The new transaction's effective gas price is higher than the existing gas price by the percentage specified by - [`--tx-pool-price-bump`](../../Reference/CLI/CLI-Syntax.md#tx-pool-price-bump) AND the new effective priority fee is + [`--tx-pool-price-bump`](../../reference/cli/options.md#tx-pool-price-bump) AND the new effective priority fee is greater than or equal to the existing priority fee. - + * The new transaction's effective gas price is the equal to the existing gas price AND the new effective priority fee is higher than the existing priority fee by the percentage specified by - [`--tx-pool-price-bump`](../../Reference/CLI/CLI-Syntax.md#tx-pool-price-bump). + [`--tx-pool-price-bump`](../../reference/cli/options.md#tx-pool-price-bump). -The default value for [`--tx-pool-price-bump`](../../Reference/CLI/CLI-Syntax.md#tx-pool-price-bump) is 10%. +The default value for [`--tx-pool-price-bump`](../../reference/cli/options.md#tx-pool-price-bump) is 10%. ## Size of the transaction pool diff --git a/docs/Concepts/Transactions/Transaction-Types.md b/docs/public-networks/concepts/transactions/types.md similarity index 92% rename from docs/Concepts/Transactions/Transaction-Types.md rename to docs/public-networks/concepts/transactions/types.md index 9312f78f..08cfc3f6 100644 --- a/docs/Concepts/Transactions/Transaction-Types.md +++ b/docs/public-networks/concepts/transactions/types.md @@ -9,10 +9,10 @@ the `transactionType` parameter). The following API objects use a unique format for each `transactionType`: -- [Pending transaction object](../../Reference/API-Objects.md#pending-transaction-object) -- [Transaction object](../../Reference/API-Objects.md#transaction-object) -- [Transaction call object](../../Reference/API-Objects.md#transaction-call-object) -- [Transaction receipt object](../../Reference/API-Objects.md#transaction-receipt-object) +- [Pending transaction object](../../reference/api/objects.md#pending-transaction-object) +- [Transaction object](../../reference/api/objects.md#transaction-object) +- [Transaction call object](../../reference/api/objects.md#transaction-call-object) +- [Transaction receipt object](../../reference/api/objects.md#transaction-receipt-object) ## `FRONTIER` transactions diff --git a/docs/Concepts/Transactions/Transaction-Validation.md b/docs/public-networks/concepts/transactions/validation.md similarity index 93% rename from docs/Concepts/Transactions/Transaction-Validation.md rename to docs/public-networks/concepts/transactions/validation.md index a3d9a2d8..82f05897 100644 --- a/docs/Concepts/Transactions/Transaction-Validation.md +++ b/docs/public-networks/concepts/transactions/validation.md @@ -2,12 +2,12 @@ description: What transaction validation and when --- -# Validating transactions +# Transaction validation For transactions submitted and added to a block, Besu validates the transactions, as illustrated in the following diagram. -![Transaction Validation](../../images/transaction-validation.png) +![Transaction Validation](../../../images/transaction-validation.png) Besu repeats the set of transaction pool validations after propagating the transaction. Besu repeats the same set of validations when importing the block that includes the transaction, except diff --git a/docs/public-networks/get-started/install/binary-distribution.md b/docs/public-networks/get-started/install/binary-distribution.md new file mode 100644 index 00000000..1fc1f78d --- /dev/null +++ b/docs/public-networks/get-started/install/binary-distribution.md @@ -0,0 +1,83 @@ +--- +description: Install or upgrade Hyperledger Besu from binary distribution +--- + +# Install binary distribution + +## MacOS with Homebrew + +### Prerequisites + +* [Homebrew](https://brew.sh/) +* Java JDK + +!!!important + + Hyperledger Besu supports: + + * MacOS High Sierra 10.13 or later versions. + * Java 11+. + We recommend using at least Java 17 because that will be the minimum requirement in the next Besu version series. + You can install Java using `brew install openjdk`. Alternatively, you can manually install the + [Java JDK](https://www.oracle.com/java/technologies/downloads). + +### Install (or upgrade) using Homebrew + +To install Besu using Homebrew: + +```bash +brew tap hyperledger/besu +brew install hyperledger/besu/besu +``` + +To upgrade an existing Besu installation using Homebrew: + +```bash +brew upgrade hyperledger/besu/besu +``` + +!!! note + + If you've upgraded your MacOS version between installing and upgrading Besu, when running `brew upgrade + hyperledger/besu/besu` you may be prompted to reinstall command line tools with `xcode-select --install`. + +!!! note + + When upgrading Besu, you might be prompted to fix the remote branch names in Homebrew by using the command + `brew tap --repair`. + +To display the Besu version and confirm installation: + +```bash +besu --version +``` + +To display Besu command line help: + +```bash +besu --help +``` + +## Linux / Unix + +### Prerequisites + +* [Java JDK](https://www.oracle.com/java/technologies/downloads/) + +!!! note "Linux open file limit" + + If synchronizing to Mainnet on Linux or other chains with large data requirements, increase the + maximum number of open files allowed using `ulimit`. If the open files limit is not high + enough, a `Too many open files` RocksDB exception occurs. + +### Install from packaged binaries + +Download the Besu [packaged binaries](https://github.com/hyperledger/besu/releases). + +Unpack the downloaded files and change into the `besu-` directory. + +Display Besu command line help to confirm installation: + +```bash +bin/besu --help +``` diff --git a/docs/HowTo/Get-Started/Installation-Options/Build-from-source.md b/docs/public-networks/get-started/install/index.md similarity index 57% rename from docs/HowTo/Get-Started/Installation-Options/Build-from-source.md rename to docs/public-networks/get-started/install/index.md index c666a2bb..4d77c0d6 100644 --- a/docs/HowTo/Get-Started/Installation-Options/Build-from-source.md +++ b/docs/public-networks/get-started/install/index.md @@ -1,8 +1,14 @@ --- -description: Install or Hyperledger Besu from source +title: Installation options +description: Options for getting started with Hyperledger Besu --- -# Build from source +# Installation options + +* [Docker image](run-docker-image.md) +* [Binaries](binary-distribution.md) + +## Build from source If you want to use the latest development version of Hyperledger Besu or a specific commit, build from source. Otherwise, use the [binary] or [Docker image] for more stable @@ -12,5 +18,5 @@ View the [Hyperledger Wiki] for instructions to install Hyperledger Besu from so [Hyperledger Wiki]: https://wiki.hyperledger.org/display/BESU/Building+from+source -[binary]: Install-Binaries.md -[Docker image]: Run-Docker-Image.md +[binary]: binary-distribution.md +[Docker image]: run-docker-image.md diff --git a/docs/HowTo/Get-Started/Installation-Options/Run-Docker-Image.md b/docs/public-networks/get-started/install/run-docker-image.md similarity index 80% rename from docs/HowTo/Get-Started/Installation-Options/Run-Docker-Image.md rename to docs/public-networks/get-started/install/run-docker-image.md index 8b3a88a0..02833bf3 100644 --- a/docs/HowTo/Get-Started/Installation-Options/Run-Docker-Image.md +++ b/docs/public-networks/get-started/install/run-docker-image.md @@ -34,16 +34,16 @@ docker run hyperledger/besu:latest To ensure your image is up to date, pull the `latest` version again using `docker pull hyperledger/besu:latest`. -## Exposing ports +## Expose ports Expose ports for P2P discovery, GraphQL, metrics, and HTTP and WebSocket JSON-RPC. You need to expose the ports to use the default ports or the ports specified using -[`--rpc-http-port`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-port), -[`--p2p-port`](../../../Reference/CLI/CLI-Syntax.md#p2p-port), -[`--rpc-ws-port`](../../../Reference/CLI/CLI-Syntax.md#rpc-ws-port), -[`--metrics-port`](../../../Reference/CLI/CLI-Syntax.md#metrics-port), -[`--graphql-http-port`](../../../Reference/CLI/CLI-Syntax.md#graphql-http-port), and -[`--metrics-push-port`](../../../Reference/CLI/CLI-Syntax.md#metrics-push-port) options. +[`--rpc-http-port`](../../reference/cli/options.md#rpc-http-port), +[`--p2p-port`](../../reference/cli/options.md#p2p-port), +[`--rpc-ws-port`](../../reference/cli/options.md#rpc-ws-port), +[`--metrics-port`](../../reference/cli/options.md#metrics-port), +[`--graphql-http-port`](../../reference/cli/options.md#graphql-http-port), and +[`--metrics-push-port`](../../reference/cli/options.md#metrics-push-port) options. To run Besu exposing local ports for access: @@ -70,7 +70,7 @@ docker run -p :8545 -p :8546 -p :3 docker run -p 8545:8545 -p 13001:30303 hyperledger/besu:latest --rpc-http-enabled ``` -## Starting Besu +## Start Besu !!! important @@ -78,15 +78,15 @@ docker run -p :8545 -p :8546 -p :3 data path interferes with the operation of Besu and prevents Besu from safely launching. To run a node that maintains the node state (key and database), - [`--data-path`](../../../Reference/CLI/CLI-Syntax.md#data-path) must be set to a location other + [`--data-path`](../../reference/cli/options.md#data-path) must be set to a location other than `/opt/besu` and a storage volume mounted at that location. - When running in a Docker container, [`--nat-method`](../../Find-and-Connect/Specifying-NAT.md) + When running in a Docker container, [`--nat-method`](../../how-to/connect/specify-nat.md) must be set to `DOCKER` or `AUTO` (default). Don't set - [`--nat-method`](../../Find-and-Connect/Specifying-NAT.md) to `NONE` or `UPNP`. + [`--nat-method`](../../how-to/connect/specify-nat.md) to `NONE` or `UPNP`. You can specify -[Besu environment variables](../../../Reference/CLI/CLI-Syntax.md#besu-environment-variables) with the +[Besu environment variables](../../reference/cli/options.md#besu-environment-variables) with the Docker image instead of the command line options. !!! example @@ -119,7 +119,7 @@ To run a node on Ethereum Mainnet with the HTTP JSON-RPC service enabled: docker run -p 8545:8545 --mount type=bind,source=/,target=/var/lib/besu -p 30303:30303 hyperledger/besu:latest --rpc-http-enabled --data-path=/var/lib/besu ``` -## Stopping Besu and cleaning up resources +## Stop Besu and clean up resources When done running nodes, you can shut down the node container without deleting resources or you can delete the container after stopping it. Run `docker container ls` and `docker volume ls` to get the diff --git a/docs/public-networks/get-started/migrate-to-besu.md b/docs/public-networks/get-started/migrate-to-besu.md new file mode 100644 index 00000000..227b7af7 --- /dev/null +++ b/docs/public-networks/get-started/migrate-to-besu.md @@ -0,0 +1,19 @@ +--- +description: Migrate to Besu guide +--- + +# Migrate to Besu + +Migrate from a different Ethereum [execution client](../concepts/the-merge.md#execution-clients) +to Besu to contribute to [client diversity](https://clientdiversity.org/). + +To migrate from a different client, +[configure Besu as an execution client](../how-to/prepare-for-the-merge.md#configure-besu-as-an-execution-client) +and connect your [consensus client](../concepts/the-merge.md#consensus-clients) to Besu instead of +your original execution client. + +To minimize downtime while [Besu syncs](../how-to/connect/sync-node.md) and avoid downtime penalties, +you can sync Besu with a new consensus layer instance. +Once Besu has fully synced you can connect it to your existing consensus client. + +Find guides to switch from specific clients on the [client diversity website](https://clientdiversity.org/#switch). diff --git a/docs/HowTo/Get-Started/Starting-node.md b/docs/public-networks/get-started/start-node.md similarity index 72% rename from docs/HowTo/Get-Started/Starting-node.md rename to docs/public-networks/get-started/start-node.md index 6d09081e..5c89370e 100644 --- a/docs/HowTo/Get-Started/Starting-node.md +++ b/docs/public-networks/get-started/start-node.md @@ -2,23 +2,22 @@ description: Starting Hyperledger Besu --- -# Starting Hyperledger Besu +# Start Besu -You can use Besu nodes for varying purposes, as described in the [Overview](../../index.md). Nodes -can connect to the Ethereum Mainnet, public testnets such as Ropsten, or private networks. +Nodes can connect to Ethereum Mainnet and public testnets such as Ropsten. -Use the [`besu`](../../Reference/CLI/CLI-Syntax.md) command with the required command line options +Use the [`besu`](../reference/cli/options.md) command with the required command line options to start a node. Alternatively, use the [launcher](#besu-launcher) to start Besu interactively with the most common options. ## Prerequisites -[Besu Installed](Installation-Options/Install-Binaries.md) +[Besu installed](install/binary-distribution.md) ## Local block data When connecting to a network other than the network previously connected to, you must either delete -the local block data or use the [`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path) option +the local block data or use the [`--data-path`](../reference/cli/options.md#data-path) option to specify a different data directory. To delete the local block data, delete the `database` directory in the @@ -31,38 +30,38 @@ Besu specifies the genesis configuration, and sets the network ID and bootnodes [Goerli](#run-a-node-on-goerli-testnet), [Kiln](#run-a-node-on-kiln-testnet), [Sepolia](#run-a-node-on-sepolia-testnet), and [Mainnet](#run-a-node-on-ethereum-mainnet). -When you specify [`--network=dev`](../../Reference/CLI/CLI-Syntax.md#network), Besu uses the +When you specify [`--network=dev`](../reference/cli/options.md#network), Besu uses the development mode genesis configuration with a fixed low difficulty. A node started with -[`--network=dev`](../../Reference/CLI/CLI-Syntax.md#network) has an empty bootnodes list by +[`--network=dev`](../reference/cli/options.md#network) has an empty bootnodes list by default. The genesis files defining the genesis configurations are in the [Besu source files](https://github.com/hyperledger/besu/tree/master/config/src/main/resources). To define a genesis configuration, create a genesis file (for example, `genesis.json`) and specify -the file using the [`--genesis-file`](../../Reference/CLI/CLI-Syntax.md#genesis-file) option. +the file using the [`--genesis-file`](../reference/cli/options.md#genesis-file) option. ## Syncing and storage By default, Besu syncs to the current state of the blockchain using -[fast sync](../../Concepts/Node-Types.md#fast-synchronization) in: +[fast sync](../how-to/connect/sync-node.md#fast-synchronization) in: -- Networks specified using [`--network`](../../Reference/CLI/CLI-Syntax.md#network) except for the `dev` +- Networks specified using [`--network`](../reference/cli/options.md#network) except for the `dev` development network. - Ethereum Mainnet. -We recommend using [snap sync](../../Concepts/Node-Types.md#snap-synchronization) for a faster sync, by starting Besu -with [`--sync-mode=X_SNAP`](../../Reference/CLI/CLI-Syntax.md#sync-mode). +We recommend using [snap sync](../how-to/connect/sync-node.md#snap-synchronization) for a faster sync, by starting Besu +with [`--sync-mode=X_SNAP`](../reference/cli/options.md#sync-mode). -By default, Besu stores data in the [Forest of Tries](../../Concepts/Data-Storage-Formats.md#forest-of-tries) format. -We recommend using [Bonsai Tries](../../Concepts/Data-Storage-Formats.md#bonsai-tries) for lower storage requirements, -by starting Besu with [`--data-storage-format=BONSAI`](../../Reference/CLI/CLI-Syntax.md#data-storage-format). +By default, Besu stores data in the [Forest of Tries](../concepts/data-storage-formats.md#forest-of-tries) format. +We recommend using [Bonsai Tries](../concepts/data-storage-formats.md#bonsai-tries) for lower storage requirements, +by starting Besu with [`--data-storage-format=BONSAI`](../reference/cli/options.md#data-storage-format). ## Confirm node is running If you started Besu with the -[`--rpc-http-enabled`](../../Reference/CLI/CLI-Syntax.md#rpc-http-enabled) option, use -[cURL](https://curl.haxx.se/) to call [JSON-RPC API methods](../../Reference/API-Methods.md) to +[`--rpc-http-enabled`](../reference/cli/options.md#rpc-http-enabled) option, use +[cURL](https://curl.haxx.se/) to call [JSON-RPC API methods](../reference/api/index.md) to confirm the node is running. !!!example @@ -101,7 +100,7 @@ To run a node that mines blocks at a rate suitable for testing purposes: besu --network=dev --miner-enabled --miner-coinbase=0xfe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins="all" --host-allowlist="*" --rpc-ws-enabled --rpc-http-enabled --data-path=/tmp/tmpDatdir ``` -You can also use the following [configuration file](../Configure/Using-Configuration-File.md) +You can also use the following [configuration file](../how-to/configuration-file.md) on the command line to start a node with the same options as above: ```toml @@ -120,13 +119,13 @@ data-path="/tmp/tmpdata-path" The following settings are a security risk in production environments: * Enabling the HTTP JSON-RPC service - ([`--rpc-http-enabled`](../../Reference/CLI/CLI-Syntax.md#rpc-http-enabled)) and setting - [`--rpc-http-host`](../../Reference/CLI/CLI-Syntax.md#rpc-http-host) to 0.0.0.0 exposes the + ([`--rpc-http-enabled`](../reference/cli/options.md#rpc-http-enabled)) and setting + [`--rpc-http-host`](../reference/cli/options.md#rpc-http-host) to 0.0.0.0 exposes the RPC connection on your node to any remote connection. - * Setting [`--host-allowlist`](../../Reference/CLI/CLI-Syntax.md#host-allowlist) to `"*"` + * Setting [`--host-allowlist`](../reference/cli/options.md#host-allowlist) to `"*"` allows JSON-RPC API access from any host. * Setting - [`--rpc-http-cors-origins`](../../Reference/CLI/CLI-Syntax.md#rpc-http-cors-origins) to + [`--rpc-http-cors-origins`](../reference/cli/options.md#rpc-http-cors-origins) to `"all"` or `"*"` allows cross-origin resource sharing (CORS) access from any domain. ## Run a node on Ropsten testnet @@ -166,9 +165,9 @@ Where `` and `` are the path and directory to save the Go ## Run a node on Kiln testnet -You can [test Besu as an execution client](../../Tutorials/Merge-Testnet.md#start-besu) on the +You can [test Besu as an execution client](../tutorials/merge-testnet.md#start-besu) on the [Kiln Merge testnet](https://blog.ethereum.org/2022/03/14/kiln-merge-testnet/). -You must also run a [consensus client](../../Concepts/Merge.md#consensus-clients) with Besu on the Merge +You must also run a [consensus client](../concepts/the-merge.md#consensus-clients) with Besu on the Merge testnet. For example, [Teku](https://docs.teku.consensys.net/en/stable/). @@ -200,7 +199,7 @@ besu --rpc-http-enabled ## Besu launcher Use the Besu launcher to interactively configure and start a node with the most common options. The -launcher asks a series of questions and generates a [configuration file](../Configure/Using-Configuration-File.md). +launcher asks a series of questions and generates a [configuration file](../how-to/configuration-file.md). To run the Besu launcher: diff --git a/docs/HowTo/Get-Started/System-Requirements/System-Requirements-Public.md b/docs/public-networks/get-started/system-requirements.md similarity index 77% rename from docs/HowTo/Get-Started/System-Requirements/System-Requirements-Public.md rename to docs/public-networks/get-started/system-requirements.md index bacacda1..8bc061a4 100644 --- a/docs/HowTo/Get-Started/System-Requirements/System-Requirements-Public.md +++ b/docs/public-networks/get-started/system-requirements.md @@ -3,12 +3,10 @@ title: Hyperledger Besu System Requirements description: System requirements to sync and run Besu --- -# System requirements for public networks - -You can use Hyperledger Besu on Ethereum Mainnet and public Ethereum testnets. +# System requirements Determine public network system requirements by checking CPU and disk space requirements using -[Prometheus](../../Monitor/Metrics.md#monitor-node-performance-using-prometheus). +[Prometheus](../how-to/monitor/metrics.md). Grafana provides a [sample dashboard](https://grafana.com/grafana/dashboards/10273) for Besu. !!! tip @@ -25,9 +23,9 @@ to the chain head. Monitor your system to determine your actual JVM memory needs ## Disk space -[Fast synchronization](../../../Reference/CLI/CLI-Syntax.md#sync-mode) with -[pruning](../../../Concepts/Pruning.md) enabled requires approximately 750 GB of disk space. -[Full synchronization](../../../Reference/CLI/CLI-Syntax.md#sync-mode) requires approximately 3 TB. +[Fast synchronization](../reference/cli/options.md#sync-mode) with +[pruning](../concepts/data-storage-formats.md) enabled requires approximately 750 GB of disk space. +[Full synchronization](../reference/cli/options.md#sync-mode) requires approximately 3 TB. ## Disk type diff --git a/docs/HowTo/Configure/Using-Configuration-File.md b/docs/public-networks/how-to/configuration-file.md similarity index 84% rename from docs/HowTo/Configure/Using-Configuration-File.md rename to docs/public-networks/how-to/configuration-file.md index 9f04bc6c..e468f0c0 100644 --- a/docs/HowTo/Configure/Using-Configuration-File.md +++ b/docs/public-networks/how-to/configuration-file.md @@ -2,16 +2,16 @@ description: Using the Hyperledger Besu configuration file --- -# Using the Hyperledger Besu configuration file +# Use the Hyperledger Besu configuration file To specify command line options in a file, use a TOML configuration file. Save the configuration file and reuse it across node startups. To specify the configuration file, -use the [`--config-file`](../../Reference/CLI/CLI-Syntax.md#config-file) option. +use the [`--config-file`](../reference/cli/options.md#config-file) option. To override an option specified in the configuration file, either specify the same option on the command line or as an -[environment variable](../../Reference/CLI/CLI-Syntax.md#besu-environment-variables). For options +[environment variable](../reference/cli/options.md#specify-options). For options specified in more than one place, the order of precedence is command line, environment variable, configuration file. @@ -28,7 +28,7 @@ differences between the command line and the TOML file format are: !!!tip - The [command line reference](../../Reference/CLI/CLI-Syntax.md) includes configuration file + The [command line reference](../reference/cli/options.md) includes configuration file examples for each option. !!!example "Sample TOML configuration file" diff --git a/docs/HowTo/Configure/Configure-HA/High-Availability.md b/docs/public-networks/how-to/configure-ha/index.md similarity index 56% rename from docs/HowTo/Configure/Configure-HA/High-Availability.md rename to docs/public-networks/how-to/configure-ha/index.md index 08b6a7f1..382f0224 100644 --- a/docs/HowTo/Configure/Configure-HA/High-Availability.md +++ b/docs/public-networks/how-to/configure-ha/index.md @@ -5,8 +5,8 @@ description: Hyperledger Besu high availability # High availability of JSON-RPC and RPC Pub/Sub APIs To enable high availability to the -[RPC Pub/Sub API over WebSockets](../../Interact/APIs/RPC-PubSub.md) or the -[JSON-RPC API](../../Interact/APIs/Using-JSON-RPC-API.md), run and synchronize more than one +[RPC Pub/Sub API over WebSocket](../use-besu-api/rpc-pubsub.md) or the +[JSON-RPC API](../use-besu-api/json-rpc.md), run and synchronize more than one Hyperledger Besu node to the network. Use a load balancer to distribute requests across nodes in the cluster that are ready to receive requests. @@ -14,7 +14,7 @@ Use a load balancer to distribute requests across nodes in the cluster that are !!! important - We do not recommend putting [bootnodes](../../Deploy/Bootnodes.md) behind a load balancer. + We do not recommend putting [bootnodes] behind a load balancer. !!! important @@ -22,15 +22,15 @@ Use a load balancer to distribute requests across nodes in the cluster that are specific nodes. If you use load balancers configured in sticky mode over HTTP instead, the connection sticks to the associated node even when the node is congested and there is a lower load node available. If you use load balancers not configured in sticky mode over HTTP, the connections may switch from node to node, so some JSON-RPC requests may - not provide expected results (for example, [`admin` methods](../../../Reference/API-Methods.md#admin-methods), - [`net_enode`](../../../Reference/API-Methods.md#net_enode), - [`net_peerCount`](../../../Reference/API-Methods.md#net_peercount), and - [`eth_syncing`](../../../Reference/API-Methods.md#eth_syncing)). + not provide expected results (for example, [`admin` methods](../../reference/api/index.md#admin-methods), + [`net_enode`](../../reference/api/index.md#net_enode), + [`net_peerCount`](../../reference/api/index.md#net_peercount), and + [`eth_syncing`](../../reference/api/index.md#eth_syncing)). -## Determining when a node is ready +## Determine when a node is ready Use the -[readiness endpoint](../../Interact/APIs/Using-JSON-RPC-API.md#readiness-and-liveness-endpoints) to +[readiness endpoint](../use-besu-api/json-rpc.md#readiness-and-liveness-endpoints) to determine when a node is ready. !!! note @@ -41,23 +41,23 @@ determine when a node is ready. ## Transaction nonces Besu obtains the nonce for the next transaction using -[`eth_getTransactionCount`](../../../Reference/API-Methods.md#eth_gettransactioncount). The nonce +[`eth_getTransactionCount`](../../reference/api/index.md#eth_gettransactioncount). The nonce depends on the transactions in the -[transaction pool](../../../Concepts/Transactions/Transaction-Pool.md). If sending -[`eth_getTransactionCount`](../../../Reference/API-Methods.md#eth_gettransactioncount) and -[`eth_sendRawTransaction`](../../../Reference/API-Methods.md#eth_sendrawtransaction) requests for a +[transaction pool](../../concepts/transactions/pool.md). If sending +[`eth_getTransactionCount`](../../reference/api/index.md#eth_gettransactioncount) and +[`eth_sendRawTransaction`](../../reference/api/index.md#eth_sendrawtransaction) requests for a specific account to more than one node, the -[`eth_getTransactionCount`](../../../Reference/API-Methods.md#eth_gettransactioncount) results +[`eth_getTransactionCount`](../../reference/api/index.md#eth_gettransactioncount) results might be incorrect. !!! note - If using [private transactions](../../../Concepts/Privacy/Privacy-Overview.md), retrieve the - nonce using - [`priv_getTransactionCount`](../../../Reference/API-Methods.md#priv_gettransactioncount) or - [`priv_getEeaTransactionCount`](../../../Reference/API-Methods.md#priv_geteeatransactioncount) + If using [private transactions](../../../private-networks/concepts/privacy/private-transactions/index.md), + retrieve the nonce using + [`priv_getTransactionCount`](../../../private-networks/reference/api/index.md#priv_gettransactioncount) or + [`priv_getEeaTransactionCount`](../../../private-networks/reference/api/index.md#priv_geteeatransactioncount) and send the private transactions using - [`eea_sendRawTransaction`](../../../Reference/API-Methods.md#eea_sendrawtransaction). + [`eea_sendRawTransaction`](../../../private-networks/reference/api/index.md#eea_sendrawtransaction). To get correct nonces when distributing requests across a cluster, either: @@ -69,17 +69,17 @@ To get correct nonces when distributing requests across a cluster, either: You can subscribe to events using: -* [RPC Pub/Sub over WebSockets](../../Interact/APIs/RPC-PubSub.md). -* [Filters over HTTP](../../Interact/Filters/Accessing-Logs-Using-JSON-RPC.md). +* [RPC Pub/Sub over WebSockets](../use-besu-api/rpc-pubsub.md). +* [Filters over HTTP](../use-besu-api/access-logs.md). -We recommend using [RPC Pub/Sub over WebSockets](../../Interact/APIs/RPC-PubSub.md) because +We recommend using [RPC Pub/Sub over WebSocket](../use-besu-api/rpc-pubsub.md) because WebSockets connections associate with a specific node and do not require using the load balancer in sticky mode. -If using [filters over HTTP](../../Interact/Filters/Accessing-Logs-Using-JSON-RPC.md), configure +If using [filters over HTTP](../use-besu-api/access-logs.md), configure the load balancer in sticky mode to associate the subscription with a specific node. -## Recovering from dropped subscriptions +## Recover from dropped subscriptions Dropped subscriptions can occur because of: @@ -88,7 +88,7 @@ Dropped subscriptions can occur because of: If there is a dropped subscription, missed events might occur while reconnecting to a different node. To recover dropped messages, create another subscription and follow the process for that -[subscription type](../../Interact/APIs/RPC-PubSub.md#subscribing): +[subscription type](../use-besu-api/rpc-pubsub.md#subscribe): * [`newHeads`](#new-headers) * [`logs`](#logs) @@ -100,17 +100,17 @@ node. To recover dropped messages, create another subscription and follow the pr To request information on blocks from the last block before the subscription dropped to the first block received from the new subscription, use -[`eth_getBlockByNumber`](../../../Reference/API-Methods.md#eth_getblockbynumber). +[`eth_getBlockByNumber`](../../reference/api/index.md#eth_getblockbynumber). ### Logs To request logs from the block number of the last log received before the subscription dropped to -the current chain head, use [`eth_getLogs`](../../../Reference/API-Methods.md#eth_getlogs). +the current chain head, use [`eth_getLogs`](../../reference/api/index.md#eth_getlogs). ### New pending transactions To request all pending transactions for the new node, use -[`txpool_besuTransactions`](../../../Reference/API-Methods.md#txpool_besutransactions). +[`txpool_besuTransactions`](../../reference/api/index.md#txpool_besutransactions). !!! note @@ -119,7 +119,7 @@ To request all pending transactions for the new node, use ### Dropped pending transactions To request all pending transactions for the new node, use -[`txpool_besuTransactions`](../../../Reference/API-Methods.md#txpool_besutransactions). +[`txpool_besuTransactions`](../../reference/api/index.md#txpool_besutransactions). !!! note @@ -128,4 +128,4 @@ To request all pending transactions for the new node, use ### Syncing The syncing state of each node is specific to that node. To retrieve the syncing state of the new -node, use [`eth_syncing`](../../../Reference/API-Methods.md#eth_syncing). +node, use [`eth_syncing`](../../reference/api/index.md#eth_syncing). diff --git a/docs/HowTo/Configure/Configure-HA/Sample-Configuration.md b/docs/public-networks/how-to/configure-ha/sample-configuration.md similarity index 93% rename from docs/HowTo/Configure/Configure-HA/Sample-Configuration.md rename to docs/public-networks/how-to/configure-ha/sample-configuration.md index 924b94ba..83fd72ba 100644 --- a/docs/HowTo/Configure/Configure-HA/Sample-Configuration.md +++ b/docs/public-networks/how-to/configure-ha/sample-configuration.md @@ -8,7 +8,7 @@ description: Sample load balancers For AWS, we recommend the Classic Load Balancer. The Classic Load Balancer is the easiest to configure and work with. Register the Hyperledger Besu instances to the load balancer and use the -[liveness endpoint](../../Interact/APIs/Using-JSON-RPC-API.md#readiness-and-liveness-endpoints) for +[liveness endpoint](../use-besu-api/json-rpc.md#readiness-and-liveness-endpoints) for health checks. For finer grain control, use the Application Load Balancer: @@ -17,7 +17,7 @@ For finer grain control, use the Application Load Balancer: * Configure multiple listeners with one per port (for example, `30303`, `8545`) you are using and route to the target group. * Use the - [liveness endpoint](../../Interact/APIs/Using-JSON-RPC-API.md#readiness-and-liveness-endpoints) + [liveness endpoint](../use-besu-api/json-rpc.md#readiness-and-liveness-endpoints) for health checks. * Register the Besu instances multiple times with different ports. This is like configuring microservices on Elastic Container Service (ECS) or Elastic Kubernetes Service (EKS). diff --git a/docs/public-networks/how-to/connect/configure-ports.md b/docs/public-networks/how-to/connect/configure-ports.md new file mode 100644 index 00000000..bbc4b50e --- /dev/null +++ b/docs/public-networks/how-to/connect/configure-ports.md @@ -0,0 +1,61 @@ +--- +description: To enable communication you must expose Hyperledger Besu ports appropriately +--- + +# Configure ports + +To enable communication you must expose Hyperledger Besu ports appropriately. The following shows +an example port configuration for a Besu node on AWS. + +![Port Configuration](../../../images/PortConfiguration.png) + +When running Besu from the [Docker image](../../get-started/install/run-docker-image.md), +[expose ports](../../get-started/install/run-docker-image.md#exposing-ports). + +!!! tip + + Besu supports [UPnP](specify-nat.md) for home or small office environments where a wireless + router or modem provides NAT isolation. + +## P2P networking + +To enable peer discovery, the P2P UDP port must be open for inbound connections. Specify the P2P +port using the [`--p2p-port`](../../reference/cli/options.md#p2p-port) option. The default is +`30303`. + +We also recommend opening the P2P TCP port for inbound connections. This is not strictly required +because Besu attempts to open outbound TCP connections. But if no nodes on the network are +accepting inbound TCP connections, nodes cannot communicate. + +Combine the P2P port with the values for the +[`--p2p-host`](../../reference/cli/options.md#p2p-host) and +[`--p2p-interface`](../../reference/cli/options.md#p2p-interface) options when specifying the +[P2P host](../../reference/cli/options.md#p2p-host) and +[P2P network interface](../../reference/cli/options.md#p2p-interface). + +!!! info + + By default, peer discovery listens on `0.0.0.0:30303` (all interfaces). If the device Besu is + running on must bind to a specific network interface, specify the interface using the + [`--p2p-interface`](../../reference/cli/options.md#p2p-interface) option. + +## JSON-RPC API + +To enable access to the [JSON-RPC API](../use-besu-api/json-rpc.md), open the HTTP +JSON-RPC and WebSockets JSON-RPC ports to the intended users of the JSON-RPC API on TCP. + +Specify the HTTP and WebSockets JSON-RPC ports using the +[`--rpc-http-port`](../../reference/cli/options.md#rpc-http-port) and +[`--rpc-ws-port`](../../reference/cli/options.md#rpc-ws-port) options. The defaults are `8545` +and `8546`. + +## Metrics + +To enable +[Prometheus to access Besu](../monitor/metrics.md), open +the metrics port or metrics push port to Prometheus or the Prometheus push gateway on TCP. + +Specify the ports for Prometheus and Prometheus push gateway using the +[`--metrics-port`](../../reference/cli/options.md#metrics-port) and +[`--metrics-push-port`](../../reference/cli/options.md#metrics-push-port) options. The defaults +are `9545` and `9001`. diff --git a/docs/HowTo/Find-and-Connect/Managing-Peers.md b/docs/public-networks/how-to/connect/manage-peers.md similarity index 61% rename from docs/HowTo/Find-and-Connect/Managing-Peers.md rename to docs/public-networks/how-to/connect/manage-peers.md index 4bb50129..d71c26f9 100644 --- a/docs/HowTo/Find-and-Connect/Managing-Peers.md +++ b/docs/public-networks/how-to/connect/manage-peers.md @@ -8,54 +8,55 @@ Hyperledger Besu peer-to-peer (P2P) discovery happens periodically based on the node's [peer limit](#limit-peers). The frequency of discovery isn't configurable, but you can [limit remote connections](#limit-remote-connections) in -public networks and [randomly prioritize connections](../../Reference/CLI/CLI-Syntax.md#random-peer-priority-enabled) +public networks and [randomly prioritize connections](../../reference/cli/options.md#random-peer-priority-enabled) in small, stable networks. !!! info - You can use [`admin_addPeer`](../../Reference/API-Methods.md#admin_addpeer) to attempt a specific connection, but + You can use [`admin_addPeer`](../../reference/cli/options.md#admin_addpeer) to attempt a specific connection, but this isn't P2P discovery. -We recommend [using bootnodes](Bootnodes.md) to initially discover peers. +In private networks, we recommend [using bootnodes](../../../private-networks/how-to/configure/bootnodes.md) +to initially discover peers. ## Limit peers You can limit peers to reduce the bandwidth, CPU time, and disk access Besu uses to manage and respond to peers. To reduce the maximum number of peers, use the -[`--max-peers`](../../Reference/CLI/CLI-Syntax.md#max-peers) option. The default is 25. +[`--max-peers`](../../reference/cli/options.md#max-peers) option. The default is 25. ## Limit remote connections -Prevent eclipse attacks when using [`--sync-mode`](../../Reference/CLI/CLI-Syntax.md#sync-mode) and -[`--fast-sync-min-peers`](../../Reference/CLI/CLI-Syntax.md#fast-sync-min-peers) on public networks by enabling the -[remote connection limits](../../Reference/CLI/CLI-Syntax.md#remote-connections-limit-enabled). +Prevent eclipse attacks when using [`--sync-mode`](../../reference/cli/options.md#sync-mode) and +[`--fast-sync-min-peers`](../../reference/cli/options.md#fast-sync-min-peers) on public networks by enabling the +[remote connection limits](../../reference/cli/options.md#remote-connections-limit-enabled). In private and permissioned networks with only trusted peers, enabling the remote connection limits is unnecessary and might adversely affect the speed at which nodes can join the network. Limiting remote connections can cause a closed group of peers to form when the number of nodes in the network is -slightly higher than [`--max-peers`](../../Reference/CLI/CLI-Syntax.md#max-peers). +slightly higher than [`--max-peers`](../../reference/cli/options.md#max-peers). The nodes in this closed group are all connected to each other and can't accept more connections. !!! tip - You can use [`--random-peer-priority-enabled`](../../Reference/CLI/CLI-Syntax.md#random-peer-priority-enabled) to + You can use [`--random-peer-priority-enabled`](../../reference/cli/options.md#random-peer-priority-enabled) to help prevent closed groups of peers in small, stable networks. ## Monitor peer connections JSON-RPC API methods to monitor peer connections include: -* [`net_peerCount`](../../Reference/API-Methods.md#net_peercount). -* [`admin_peers`](../../Reference/API-Methods.md#admin_peers). -* [`debug_metrics`](../../Reference/API-Methods.md#debug_metrics). +* [`net_peerCount`](../../reference/api/index.md#net_peercount). +* [`admin_peers`](../../reference/api/index.md#admin_peers). +* [`debug_metrics`](../../reference/api/index.md#debug_metrics). -Each peer entry returned by [`admin_peers`](../../Reference/API-Methods.md#admin_peers) includes a +Each peer entry returned by [`admin_peers`](../../reference/api/index.md#admin_peers) includes a `protocols` section. Use the information in the `protocols` section to: * Determine the health of peers. - For example, an external process can use [`admin_peers`](../../Reference/API-Methods.md#admin_peers) and - [`admin_removePeer`](../../Reference/API-Methods.md#admin_removepeer) to disconnect from peers that are stalled at a + For example, an external process can use [`admin_peers`](../../reference/api/index.md#admin_peers) and + [`admin_removePeer`](../../reference/api/index.md#admin_removepeer) to disconnect from peers that are stalled at a single difficulty for an extended period of time. * Monitor node health. @@ -68,7 +69,7 @@ Each peer entry returned by [`admin_peers`](../../Reference/API-Methods.md#admin ## List node connections The default logging configuration doesn't list node connection and disconnection messages. -To enable listing them, set the [`--logging`](../../Reference/CLI/CLI-Syntax.md#logging) option to `DEBUG`. +To enable listing them, set the [`--logging`](../../reference/cli/options.md#logging) option to `DEBUG`. For more verbosity, set the option to `TRACE`. The console logs connection and disconnection events when the log level is `DEBUG` or higher. @@ -83,8 +84,8 @@ If the message `Successfully accepted connection from ...` displays, connections ## Disable discovery To disable P2P discovery, set the -[`--discovery-enabled`](../../Reference/CLI/CLI-Syntax.md#discovery-enabled) option to `false`. +[`--discovery-enabled`](../../reference/cli/options.md#discovery-enabled) option to `false`. With discovery disabled, peers can't open connections with the node unless they were previously discovered or manually -peered (for example, using [`admin_addPeer`](../../Reference/API-Methods.md#admin_addpeer)). -[Static nodes](Static-Nodes.md) can also open connections. +peered (for example, using [`admin_addPeer`](../../reference/api/index.md#admin_addpeer)). +[Static nodes](static-nodes.md) can also open connections. diff --git a/docs/HowTo/Find-and-Connect/Specifying-NAT.md b/docs/public-networks/how-to/connect/specify-nat.md similarity index 76% rename from docs/HowTo/Find-and-Connect/Specifying-NAT.md rename to docs/public-networks/how-to/connect/specify-nat.md index 6911fb21..05fd76b9 100644 --- a/docs/HowTo/Find-and-Connect/Specifying-NAT.md +++ b/docs/public-networks/how-to/connect/specify-nat.md @@ -2,22 +2,22 @@ description: Configuring NAT with Hyperledger Besu --- -# Configuring NAT +# Specify the NAT method -Use the [`--nat-method`](../../Reference/CLI/CLI-Syntax.md#nat-method) option to specify the NAT +Use the [`--nat-method`](../../reference/cli/options.md#nat-method) option to specify the NAT method. Options are: [`UPNP`](#upnp), [`KUBERNETES`](#kubernetes), [`DOCKER`](#docker), [`AUTO`](#auto), and [`NONE`](#none). -The [enode](../../Concepts/Node-Keys.md#enode-url) advertised to other nodes during discovery is +The [enode](../../concepts/node-keys.md#enode-url) advertised to other nodes during discovery is the external IP address and port. The -[`admin_nodeInfo`](../../Reference/API-Methods.md#admin_nodeinfo) JSON-RPC API method returns the +[`admin_nodeInfo`](../../reference/api/index.md#admin_nodeinfo) JSON-RPC API method returns the external address and port for the `enode` and `listenAddr` properties. While Hyperledger Besu is running, the following are not supported: * IP address changes * Changing NAT methods. To change the NAT method, restart the node with the - [`--nat-method`](../../Reference/CLI/CLI-Syntax.md#nat-method) option set. + [`--nat-method`](../../reference/cli/options.md#nat-method) option set. ## Auto @@ -64,7 +64,7 @@ Use `UPNPP2PONLY` if you wish to enable UPnP only for p2p traffic. !!! important When the NAT method is set to `UPNP`, the advertised port is the same as the - [listening port](../../Reference/CLI/CLI-Syntax.md#p2p-port). + [listening port](../../reference/cli/options.md#p2p-port). ## Kubernetes @@ -75,7 +75,7 @@ Kubernetes APIs as required to determine external IP addresses and exposed ports In Kubernetes, the Ingress IP of the load balancer will be used as the external IP for Besu. A load balancer service can map any incoming port to a target port. These mapping rules will be the one retrieved by Besu. -A tutorial to [Configure the Nat Manager for Kubernetes](../../Tutorials/Kubernetes/Nat-Manager-Kubernetes.md) is available. +A tutorial to [Configure the Nat Manager for Kubernetes](../../../private-networks/tutorials/kubernetes/nat-manager.md) is available. ## Docker @@ -85,21 +85,21 @@ you specify `DOCKER`, you advertise the host IP address not the container IP add The host IP address is the advertised host specified in the [`docker run` command](https://docs.docker.com/engine/reference/commandline/run/#add-entries-to-container-hosts-file---add-host). If not specified in the `docker run` command, the advertised host defaults to the values for -[`--p2p-host`](../../Reference/CLI/CLI-Syntax.md#p2p-host) and -[`--p2p-port`](../../Reference/CLI/CLI-Syntax.md#p2p-port). +[`--p2p-host`](../../reference/cli/options.md#p2p-host) and +[`--p2p-port`](../../reference/cli/options.md#p2p-port). ## None Specify `NONE` to explicitly configure the external IP address and ports advertised using: -* [`--p2p-host`](../../Reference/CLI/CLI-Syntax.md#p2p-host) and [`--p2p-port`](../../Reference/CLI/CLI-Syntax.md#p2p-port) +* [`--p2p-host`](../../reference/cli/options.md#p2p-host) and [`--p2p-port`](../../reference/cli/options.md#p2p-port) for the P2P service. -* [`--rpc-http-host`](../../Reference/CLI/CLI-Syntax.md#rpc-http-host) and [`--rpc-http-port`](../../Reference/CLI/CLI-Syntax.md#rpc-http-port) +* [`--rpc-http-host`](../../reference/cli/options.md#rpc-http-host) and [`--rpc-http-port`](../../reference/cli/options.md#rpc-http-port) for the JSON-RPC HTTP service. - -The P2P and JSON-RPC HTTP hosts and ports are advertised in the [`net_services`](../../Reference/API-Methods.md#net_services) method. + +The P2P and JSON-RPC HTTP hosts and ports are advertised in the [`net_services`](../../reference/api/index.md#net_services) method. !!! important When the NAT method is set to `NONE`, the advertised port is the same as the - [listening port](../../Reference/CLI/CLI-Syntax.md#p2p-port). + [listening port](../../reference/cli/options.md#p2p-port). diff --git a/docs/HowTo/Find-and-Connect/Static-Nodes.md b/docs/public-networks/how-to/connect/static-nodes.md similarity index 64% rename from docs/HowTo/Find-and-Connect/Static-Nodes.md rename to docs/public-networks/how-to/connect/static-nodes.md index 9aacd610..3179b110 100644 --- a/docs/HowTo/Find-and-Connect/Static-Nodes.md +++ b/docs/public-networks/how-to/connect/static-nodes.md @@ -5,8 +5,8 @@ description: Configuring static nodes # Static nodes Static nodes are a configured set of trusted nodes. Static nodes are exempt from -[maximum peer](Managing-Peers.md#limiting-peers) and -[remote connection](Managing-Peers.md#limiting-remote-connections) limits. +[maximum peer](manage-peers.md#limit-peers) and +[remote connection](manage-peers.md#limit-remote-connections) limits. Besu attempts to maintain connections with static nodes by periodically initiating a connection to any unconnected static node. @@ -18,27 +18,27 @@ any unconnected static node. example, you run multiple nodes on Mainnet (discovery using bootnodes), but want to ensure your nodes are always connected (using static nodes). - To find peers, configure one or more [bootnodes](Bootnodes.md). To configure a specific set of - peer connections, use static nodes, as described below. + To find peers, configure one or more [bootnodes](../../../private-networks/how-to/configure/bootnodes.md). + To configure a specific set of peer connections, use static nodes. ## Configure static nodes To configure a network of static nodes: -1. List the [enode URLs](../../Concepts/Node-Keys.md#enode-url) of the nodes in the +1. List the [enode URLs](../../concepts/node-keys.md#enode-url) of the nodes in the [`static-nodes.json` file](#static-nodesjson-file). 1. Save the `static-nodes.json` file in the data directory (specified by - [`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path)) of each node. + [`--data-path`](../../reference/cli/options.md#data-path)) of each node. Alternatively, you can explicitly specify the static nodes file on the command line using - [`--static-nodes-file`](../../Reference/CLI/CLI-Syntax.md#static-nodes-file). + [`--static-nodes-file`](../../reference/cli/options.md#static-nodes-file). 1. Start Besu with discovery disabled using - [`--discovery-enabled=false`](../../Reference/CLI/CLI-Syntax.md#discovery-enabled). + [`--discovery-enabled=false`](../../reference/cli/options.md#discovery-enabled). To update the list of static peers at run time, use the -[`admin_addPeer`](../../Reference/API-Methods.md#admin_addpeer) and -[`admin_removePeer`](../../Reference/API-Methods.md#admin_removepeer) JSON-RPC API methods. +[`admin_addPeer`](../../reference/api/index.md#admin_addpeer) and +[`admin_removePeer`](../../reference/api/index.md#admin_removepeer) JSON-RPC API methods. !!! note @@ -46,20 +46,20 @@ To update the list of static peers at run time, use the file is not updated by the `admin_addPeer` and `admin_removePeer` methods. Nodes not in the list of the static nodes are not prevented from connecting. To prevent nodes - from connecting, use [Permissioning](../../Concepts/Permissioning/Permissioning-Overview.md). + from connecting, use [Permissioning](../../../private-networks/concepts/permissioning/index.md). !!! tip If the added peer does not appear in the peer list (returned by - [`admin_peers`](../../Reference/API-Methods.md#admin_peers)), check the the supplied - [enode URL](../../Concepts/Node-Keys.md#enode-url) is correct, the node is running, and the + [`admin_peers`](../../reference/api/index.md#admin_peers)), check the the supplied + [enode URL](../../concepts/node-keys.md#enode-url) is correct, the node is running, and the node is listening for TCP connections on the endpoint. ### `static-nodes.json` file The `static-nodes.json` file must be in the data directory (specified by -[`--data-path`](../../Reference/CLI/CLI-Syntax.md#data-path)) and contain a JSON array of -[enode URLs](../../Concepts/Node-Keys.md#enode-url). +[`--data-path`](../../reference/cli/options.md#data-path)) and contain a JSON array of +[enode URLs](../../concepts/node-keys.md#enode-url). !!! example diff --git a/docs/Concepts/Node-Types.md b/docs/public-networks/how-to/connect/sync-node.md similarity index 78% rename from docs/Concepts/Node-Types.md rename to docs/public-networks/how-to/connect/sync-node.md index 45b02932..9f500e38 100644 --- a/docs/Concepts/Node-Types.md +++ b/docs/public-networks/how-to/connect/sync-node.md @@ -2,7 +2,7 @@ description: Full and archive node types --- -# Node types +# Sync Besu Besu supports two node types, commonly referred to as _full nodes_ and _archive nodes_. @@ -15,7 +15,8 @@ Archive nodes have all of this and they also store the intermediary state of eve contract for every block since the genesis block. An archive node can do everything a full node does, and it can access historical state data. -For Besu on Mainnet, archive nodes [require more disk space](Data-Storage-Formats.md#storage-requirements) than full nodes. +For Besu on Mainnet, archive nodes [require more disk space](../../concepts/data-storage-formats.md#storage-requirements) +than full nodes. !!! note @@ -30,7 +31,7 @@ You can run a full node using [fast synchronization (fast sync)](#fast-synchroni ### Fast synchronization -Enable fast sync using [`--sync-mode=FAST`](../Reference/CLI/CLI-Syntax.md#sync-mode). +Enable fast sync using [`--sync-mode=FAST`](../../reference/cli/options.md#sync-mode). Fast sync downloads the block headers and transaction receipts, and verifies the chain of block headers from the genesis block. @@ -38,16 +39,16 @@ block. When starting fast sync, Besu first downloads the world state for a recent block verified by its peers (referred to as a pivot block), and then begins fast sync from the genesis block. -Fast sync is the default for named networks specified using the [`--network`](../Reference/CLI/CLI-Syntax.md#network) +Fast sync is the default for named networks specified using the [`--network`](../../reference/cli/options.md#network) option, except for the `dev` development network. It's also the default if connecting to Ethereum Mainnet by not specifying the -[`--network`](../Reference/CLI/CLI-Syntax.md#network) or [`--genesis-file`](../Reference/CLI/CLI-Syntax.md#genesis-file) +[`--network`](../../reference/cli/options.md#network) or [`--genesis-file`](../../reference/cli/options.md#genesis-file) options. -Using fast sync with [private transactions](../Concepts/Privacy/Privacy-Overview.md) isn't supported. +Using fast sync with [private transactions](../../../private-networks/concepts/privacy/index.md) isn't supported. You can observe the `besu_synchronizer_fast_sync_*` and `besu_synchronizer_world_state_*` -[metrics](../HowTo/Monitor/Metrics.md#metrics-list) to monitor fast sync. +[metrics](../monitor/metrics.md#metrics-list) to monitor fast sync. !!! warning @@ -83,13 +84,13 @@ You can observe the `besu_synchronizer_fast_sync_*` and `besu_synchronizer_world because snap sync can be faster by several days. If your snap sync completes successfully, you have the correct world state. - We recommend using snap sync with the [Bonsai](Data-Storage-Formats.md#bonsai-tries) data storage format for the - fastest sync and lowest storage requirements. + We recommend using snap sync with the [Bonsai](../../concepts/data-storage-formats.md#bonsai-tries) + data storage format for the fastest sync and lowest storage requirements. -Enable snap sync using [`--sync-mode=X_SNAP`](../Reference/CLI/CLI-Syntax.md#sync-mode). +Enable snap sync using [`--sync-mode=X_SNAP`](../../reference/cli/options.md#sync-mode). You need Besu version 22.4.0 or later to use snap sync. -Instead of downloading the [state trie](Data-Storage-Formats.md) node by node, snap sync downloads as many leaves of the +Instead of downloading the [state trie](../../concepts/data-storage-formats.md) node by node, snap sync downloads as many leaves of the trie as possible, and reconstructs the trie locally. You can't switch from fast sync to snap sync. @@ -102,12 +103,12 @@ deleting the data directory, and starting over using `--sync-mode=X_SNAP`. Checkpoint sync is an experimental feature. -Enable checkpoint sync using [`--sync-mode=X_CHECKPOINT`](../Reference/CLI/CLI-Syntax.md#sync-mode). +Enable checkpoint sync using [`--sync-mode=X_CHECKPOINT`](../../reference/cli/options.md#sync-mode). You need Besu version 22.4.3 or later to use checkpoint sync. Checkpoint sync behaves like [snap sync](#snap-synchronization), but instead of syncing from the genesis block, it syncs from a specific checkpoint block configured in the [Besu genesis -file](../HowTo/Configure/Genesis-File.md). +file](../../concepts/genesis-file.md). You can configure a checkpoint in the genesis file by specifying the block hash, number, and total difficulty as in the following example. @@ -124,8 +125,8 @@ difficulty as in the following example. !!! note - If using [Clique](../HowTo/Configure/Consensus-Protocols/Clique.md) consensus, the checkpoint - must be the beginning of an epoch. + If using [Clique](../../../private-networks/how-to/configure/consensus/clique.md) consensus, the + checkpoint must be the beginning of an epoch. Checkpoints are currently already defined in the network configurations for Ethereum Mainnet and the Ropsten and Goerli testnets. @@ -136,6 +137,6 @@ sync from the genesis block. ## Run an archive node To run an archive node, enable full synchronization (full sync) using -[`--sync-mode=FULL`](../Reference/CLI/CLI-Syntax.md#sync-mode). +[`--sync-mode=FULL`](../../reference/cli/options.md#sync-mode). Full sync starts from the genesis block and reprocesses all transactions. diff --git a/docs/HowTo/Develop-Dapps/Client-Libraries.md b/docs/public-networks/how-to/develop/client-libraries.md similarity index 54% rename from docs/HowTo/Develop-Dapps/Client-Libraries.md rename to docs/public-networks/how-to/develop/client-libraries.md index 403331f3..51ce2004 100644 --- a/docs/HowTo/Develop-Dapps/Client-Libraries.md +++ b/docs/public-networks/how-to/develop/client-libraries.md @@ -2,17 +2,17 @@ description: Hyperledger Besu client libraries --- -# Client libraries +# Use client libraries Dapps use client libraries, such as [web3.js](https://github.com/ethereum/web3.js/), [web3j](https://github.com/web3j/web3j), or [ethereumj](https://github.com/ethereum/ethereumj), to forward JSON-RPC requests to Hyperledger Besu. Any client library implementing core Ethereum RPC methods works with Besu. -Use the [web3js-quorum library](../Interact/Client-Libraries/web3js-quorum.md) with Besu for -[privacy features](../../Concepts/Privacy/Privacy-Overview.md). +Use the [web3js-quorum library](../../../private-networks/how-to/use-privacy/web3js-quorum.md) with Besu for +[privacy features](../../../private-networks/concepts/privacy/index.md). -![Client Libraries](../../images/Hyperledger-Besu-Client-Libraries.png) +![Client Libraries](../../../images/Hyperledger-Besu-Client-Libraries.png) Use client libraries to: @@ -20,7 +20,7 @@ Use client libraries to: * [Create and send private transactions]. !!! note - [Hyperledger Besu does not support key management inside the client](../Send-Transactions/Account-Management.md). + [Hyperledger Besu does not support key management inside the client](../send-transactions.md#use-wallets-for-key-management). -[Create and send private transactions]: ../Send-Transactions/Creating-Sending-Private-Transactions.md +[Create and send private transactions]: ../../../private-networks/how-to/send-transactions/private-transactions.md diff --git a/docs/HowTo/Develop-Dapps/Truffle.md b/docs/public-networks/how-to/develop/truffle.md similarity index 97% rename from docs/HowTo/Develop-Dapps/Truffle.md rename to docs/public-networks/how-to/develop/truffle.md index 997dbd03..7047db4a 100644 --- a/docs/HowTo/Develop-Dapps/Truffle.md +++ b/docs/public-networks/how-to/develop/truffle.md @@ -2,7 +2,7 @@ description: Using Hyperledger Besu with Truffle --- -# Using Hyperledger Besu with Truffle +# Use Truffle Developing for Hyperledger Besu using Truffle is the same as developing for public Ethereum networks using Truffle. Truffle supports Besu with the only difference being Besu does not support diff --git a/docs/Concepts/Monitoring.md b/docs/public-networks/how-to/monitor/index.md similarity index 74% rename from docs/Concepts/Monitoring.md rename to docs/public-networks/how-to/monitor/index.md index 470fb363..51681d27 100644 --- a/docs/Concepts/Monitoring.md +++ b/docs/public-networks/how-to/monitor/index.md @@ -2,13 +2,13 @@ description: Monitoring using metrics and logging --- -# Monitoring +# Monitor Besu Monitoring enables identification of node and network issues. Specifically, configuring metrics and logging enables: -* [Visual representation of declining node or network performance](../HowTo/Monitor/Metrics.md) -* [Collection of log files to enable issue diagnosis](../HowTo/Monitor/Logging.md). +* [Visual representation of declining node or network performance](metrics.md) +* [Collection of log files to enable issue diagnosis](logging.md). For an overview of monitoring Hyperledger Besu, view [this recording](https://www.youtube.com/watch?v=7BuutRe0I28&feature=youtu.be). diff --git a/docs/HowTo/Monitor/Logging.md b/docs/public-networks/how-to/monitor/logging.md similarity index 80% rename from docs/HowTo/Monitor/Logging.md rename to docs/public-networks/how-to/monitor/logging.md index e0b90cff..65a239e0 100644 --- a/docs/HowTo/Monitor/Logging.md +++ b/docs/public-networks/how-to/monitor/logging.md @@ -4,20 +4,20 @@ path: blob/master/besu/src/main/resources/ source: log4j2.xml --- -# Logging +# Use logging Hyperledger Besu uses Log4J2 for logging and provides two methods to configure logging behavior: -* [Basic](#basic-log-level-setting) - changes the log level. -* [Advanced](#advanced-custom-logging) - configures the output and format of the logs. +* [Basic](#basic-logging) - Changes the log level. +* [Advanced](#advanced-logging) - Configures the output and format of the logs. [Quorum Developer Quickstart](https://github.com/ConsenSys/quorum-dev-quickstart) provides an -[example implementation using Elastic Stack](Elastic-Stack.md) for log management. +[example implementation using Elastic Stack](../../../private-networks/how-to/monitor/elastic-stack.md) for log management. ## Basic logging -Use the [`--logging`](../../Reference/CLI/CLI-Syntax.md#logging) command line option to specify logging verbosity. -The [`--logging`](../../Reference/CLI/CLI-Syntax.md#logging) option changes the volume of events displayed in the log. +Use the [`--logging`](../../reference/cli/options.md#logging) command line option to specify logging verbosity. +The [`--logging`](../../reference/cli/options.md#logging) option changes the volume of events displayed in the log. Valid log levels are `OFF`, `ERROR`, `WARN`, `INFO`, `DEBUG`, `TRACE`, `ALL`. The default level is `INFO`. @@ -25,8 +25,8 @@ For most use cases, the basic method provides enough configurability. !!! tip - Use the [`admin_changeLogLevel`](../../Reference/API-Methods.md#admin_changeloglevel) API method to change the log - level while Besu is running. + Use the [`admin_changeLogLevel`](../../reference/api/index.md#admin_changeloglevel) API method + to change the log level while Besu is running. ## Advanced logging diff --git a/docs/HowTo/Monitor/Metrics.md b/docs/public-networks/how-to/monitor/metrics.md similarity index 91% rename from docs/HowTo/Monitor/Metrics.md rename to docs/public-networks/how-to/monitor/metrics.md index 757370cc..de588cee 100644 --- a/docs/HowTo/Monitor/Metrics.md +++ b/docs/public-networks/how-to/monitor/metrics.md @@ -5,7 +5,7 @@ description: Monitoring and metrics # Use metrics to monitor node performance To enable the [Prometheus](https://prometheus.io/) monitoring and alerting service to access Hyperledger Besu metrics, -use the [`--metrics-enabled`](../../Reference/CLI/CLI-Syntax.md#metrics-enabled) option. +use the [`--metrics-enabled`](../../reference/cli/options.md#metrics-enabled) option. Use [Grafana](https://grafana.com/) to visualize the collected data. See the sample [Besu Grafana dashboard](https://grafana.com/dashboards/10273). @@ -36,7 +36,7 @@ On MacOS, install with [Homebrew](https://formulae.brew.sh/formula/prometheus): Additional configuration is not required for these components because Prometheus handles and analyzes data directly from the feed. -## Setting up and running Prometheus with Besu +## Set up and run Prometheus with Besu To configure Prometheus and run with Besu: @@ -46,7 +46,7 @@ To configure Prometheus and run with Besu: !!! example === "Fragment to insert in prometheus.yml" - + ```yml - job_name: besu scrape_interval: 15s @@ -57,13 +57,13 @@ To configure Prometheus and run with Besu: - targets: - localhost:9545 ``` - + === "Full prometheus.yml example" - + ```yml global: scrape_interval: 15s - + scrape_configs: - job_name: "prometheus" static_configs: @@ -77,10 +77,10 @@ To configure Prometheus and run with Besu: - targets: - localhost:9545 ``` - + Prometheus requires 3 MB of space per node per hour for metrics, with a `scrape_interval` of 15 seconds. -1. Start Besu with the [`--metrics-enabled`](../../Reference/CLI/CLI-Syntax.md#metrics-enabled) option. +1. Start Besu with the [`--metrics-enabled`](../../reference/cli/options.md#metrics-enabled) option. To start a single node for testing with metrics enabled, run the following command: === "Syntax" @@ -95,14 +95,14 @@ To configure Prometheus and run with Besu: besu --network=dev --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-http-cors-origins="all" --rpc-http-enabled --metrics-enabled ``` - To specify the host and port on which Prometheus accesses Besu, use the [`--metrics-host`](../../Reference/CLI/CLI-Syntax.md#metrics-host) - and [`--metrics-port`](../../Reference/CLI/CLI-Syntax.md#metrics-port) options. + To specify the host and port on which Prometheus accesses Besu, use the [`--metrics-host`](../../reference/cli/options.md#metrics-host) + and [`--metrics-port`](../../reference/cli/options.md#metrics-port) options. The default host and port are 127.0.0.1 (`localhost`) and 9545. !!! important To avoid DNS rebinding attacks, if running Prometheus on a different host than your Besu node (any host other than - `localhost`), add the hostname that Prometheus uses to [`--host-allowlist`](../../Reference/CLI/CLI-Syntax.md#host-allowlist). + `localhost`), add the hostname that Prometheus uses to [`--host-allowlist`](../../reference/cli/options.md#host-allowlist). For example, if Prometheus is configured to get metrics from `http://besu.local:8008/metrics`, then `besu.local` has to be in `--host-allowlist`. @@ -119,12 +119,12 @@ To configure Prometheus and run with Besu: Use a log ingestion tool, such as Logstash, to parse the logs and alert you to configured anomalies. -## Running Prometheus with Besu in push mode +## Run Prometheus with Besu in push mode -The [`--metrics-enabled`](../../Reference/CLI/CLI-Syntax.md#metrics-enabled) option enables Prometheus polling of Besu, +The [`--metrics-enabled`](../../reference/cli/options.md#metrics-enabled) option enables Prometheus polling of Besu, but sometimes metrics are hard to poll (for example, when running inside Docker containers with varying IP addresses). To enable Besu to push metrics to a [Prometheus Pushgateway](https://github.com/prometheus/pushgateway), use the -[`--metrics-push-enabled`](../../Reference/CLI/CLI-Syntax.md#metrics-push-enabled) option. +[`--metrics-push-enabled`](../../reference/cli/options.md#metrics-push-enabled) option. To configure Prometheus and run with Besu pushing to a push gateway: @@ -189,17 +189,17 @@ To configure Prometheus and run with Besu pushing to a push gateway: The following table lists available metrics. Each metric starts with a metric category prefix. Metrics specific to Besu use the `besu_` prefix, followed by another metric category. -Metric categories can be enabled using the [`metrics-category`](../../Reference/CLI/CLI-Syntax.md#metrics-category) command line option. +Metric categories can be enabled using the [`metrics-category`](../../reference/cli/options.md#metrics-category) command line option. If a metric has a JSON-RPC equivalent, it is included in the definition column. | Name | Metric type | Definition | | --- | --- | --- | | `besu_blockchain_chain_head_gas_limit` | Gauge | Block gas limit of the current chain head block | | `besu_blockchain_chain_head_gas_used` | Gauge | Gas used by the current chain head block | -| `besu_blockchain_chain_head_ommer_count` | Gauge | Number of uncles in the current chain head block (JSON-RPC equivalent: [`eth_getUncleCountByBlockHash`](../../Reference/API-Methods.md#eth_getunclecountbyblockhash) or [`eth_getUncleCountByBlockNumber`](../../Reference/API-Methods.md#eth_getunclecountbyblocknumber)) | +| `besu_blockchain_chain_head_ommer_count` | Gauge | Number of uncles in the current chain head block (JSON-RPC equivalent: [`eth_getUncleCountByBlockHash`](../../reference/api/index.md#eth_getunclecountbyblockhash) or [`eth_getUncleCountByBlockNumber`](../../reference/api/index.md#eth_getunclecountbyblocknumber)) | | `besu_blockchain_chain_head_timestamp` | Gauge | Timestamp from the current chain head | -| `besu_blockchain_chain_head_transaction_count` | Gauge | Number of transactions in the current chain head block (JSON-RPC equivalent: [`eth_getBlockTransactionCountByHash`](../../Reference/API-Methods.md#eth_getblocktransactioncountbyhash) or [`eth_getBlockTransactionCountByNumber`](../../Reference/API-Methods.md#eth_getblocktransactioncountbynumber)) | -| `besu_blockchain_difficulty_total` | Gauge | Difficulty of the chain head (JSON-RPC equivalent: `difficulty` of [`admin_peers`](../../Reference/API-Methods.md#admin_peers)) | +| `besu_blockchain_chain_head_transaction_count` | Gauge | Number of transactions in the current chain head block (JSON-RPC equivalent: [`eth_getBlockTransactionCountByHash`](../../reference/api/index.md#eth_getblocktransactioncountbyhash) or [`eth_getBlockTransactionCountByNumber`](../../reference/api/index.md#eth_getblocktransactioncountbynumber)) | +| `besu_blockchain_difficulty_total` | Gauge | Difficulty of the chain head (JSON-RPC equivalent: `difficulty` of [`admin_peers`](../../reference/api/index.md#admin_peers)) | | `besu_executors_ethscheduler_computation_active_threads_current` | Gauge | Current number of threads executing computation tasks | | `besu_executors_ethscheduler_computation_completed_tasks_total` | Gauge | Total number of computation tasks executed | | `besu_executors_ethscheduler_computation_pool_size_current` | Gauge | Current number of threads in the computation thread pool | @@ -258,12 +258,12 @@ If a metric has a JSON-RPC equivalent, it is included in the definition column. | `besu_synchronizer_world_state_pipeline_processed_total` | Counter | Number of entries processed by each world state download pipeline stage | | `besu_synchronizer_world_state_retried_requests_total` | Counter | Total number of node data requests repeated as part of fast sync world state download | | `besu_transaction_pool_pending_transactions_messages_skipped_total` | Counter | Total number of pending transactions messages skipped by the processor | -| `besu_transaction_pool_transactions` | Gauge | Current size of the transaction pool (JSON-RPC equivalent: result number of [`txpool_besuTransactions`](../../Reference/API-Methods.md#txpool_besutransactions)) | +| `besu_transaction_pool_transactions` | Gauge | Current size of the transaction pool (JSON-RPC equivalent: result number of [`txpool_besuTransactions`](../../reference/api/index.md#txpool_besutransactions)) | | `besu_transaction_pool_transactions_added_total` | Counter | Count of transactions added to the transaction pool | | `besu_transaction_pool_transactions_messages_skipped_total` | Counter | Total number of transactions messages skipped by the processor. | -| `ethereum_best_known_block_number` | Gauge | Estimated highest block available (JSON-RPC equivalent: `highestBlock` of [`eth_syncing`](../../Reference/API-Methods.md#eth_syncing), or [`eth_blockNumber`](../../Reference/API-Methods.md#eth_blocknumber) if not syncing) | -| `ethereum_blockchain_height` | Gauge | Current height of the canonical chain (JSON-RPC equivalent: [`eth_blockNumber`](../../Reference/API-Methods.md#eth_blocknumber)) | -| `ethereum_peer_count` | Gauge | Current number of peers connected (JSON-RPC equivalent: [`net_peerCount`](../../Reference/API-Methods.md#net_peercount)) | +| `ethereum_best_known_block_number` | Gauge | Estimated highest block available (JSON-RPC equivalent: `highestBlock` of [`eth_syncing`](../../reference/api/index.md#eth_syncing), or [`eth_blockNumber`](../../reference/api/index.md#eth_blocknumber) if not syncing) | +| `ethereum_blockchain_height` | Gauge | Current height of the canonical chain (JSON-RPC equivalent: [`eth_blockNumber`](../../reference/api/index.md#eth_blocknumber)) | +| `ethereum_peer_count` | Gauge | Current number of peers connected (JSON-RPC equivalent: [`net_peerCount`](../../reference/api/index.md#net_peercount)) | | `ethereum_peer_limit` | Gauge | Maximum number of peers this node allows to connect | | `jvm_buffer_pool_capacity_bytes` | Gauge | Bytes capacity of a given JVM buffer pool | | `jvm_buffer_pool_used_buffers` | Gauge | Used buffers of a given JVM buffer pool | @@ -295,11 +295,11 @@ If a metric has a JSON-RPC equivalent, it is included in the definition column. !!! important * The `ethereum_best_known_block_number` metric always has a value. When the - [`eth_syncing` JSON-RPC method](../../Reference/API-Methods.md#eth_syncing) returns + [`eth_syncing` JSON-RPC method](../../reference/api/index.md#eth_syncing) returns false, the current chain height displays. * Although the `ethereum_peer_limit` metric does not have a JSON-RPC equivalent, the - [`max peers` command line option](../../Reference/CLI/CLI-Syntax.md#max-peers) sets the + [`max peers` command line option](../../reference/cli/options.md#max-peers) sets the maximum number of P2P connections that can be established. -[monitoring with Prometheus and Grafana configured]: ../../Tutorials/Developer-Quickstart.md#monitor-nodes-with-prometheus-and-grafana +[monitoring with Prometheus and Grafana configured]: ../../../private-networks/tutorials/quickstart.md#monitor-nodes-with-prometheus-and-grafana diff --git a/docs/HowTo/Configure/Passing-JVM-Options.md b/docs/public-networks/how-to/pass-jvm-options.md similarity index 96% rename from docs/HowTo/Configure/Passing-JVM-Options.md rename to docs/public-networks/how-to/pass-jvm-options.md index 3b72034e..e8734f3e 100644 --- a/docs/HowTo/Configure/Passing-JVM-Options.md +++ b/docs/public-networks/how-to/pass-jvm-options.md @@ -2,7 +2,7 @@ description: Passing Java virtual machine JVM options to Hyperledger Besu at runtime --- -# Passing JVM options +# Pass JVM options To perform tasks such as attaching a debugger or configuring the garbage collector, pass JVM options to Hyperledger Besu. diff --git a/docs/HowTo/Upgrade/Prepare-for-The-Merge.md b/docs/public-networks/how-to/prepare-for-the-merge.md similarity index 74% rename from docs/HowTo/Upgrade/Prepare-for-The-Merge.md rename to docs/public-networks/how-to/prepare-for-the-merge.md index 43f2c148..d31fcdb5 100644 --- a/docs/HowTo/Upgrade/Prepare-for-The-Merge.md +++ b/docs/public-networks/how-to/prepare-for-the-merge.md @@ -4,8 +4,8 @@ description: How to prepare for The Merge # Prepare for The Merge -If you're running one or more [beacon nodes](../../Concepts/Merge.md#consensus-clients) with Besu on Ethereum Mainnet, -prepare for [The Merge](../../Concepts/Merge.md) by +If you're running one or more [beacon nodes](../concepts/the-merge.md#consensus-clients) with Besu on Ethereum Mainnet, +prepare for [The Merge](../concepts/the-merge.md) by [configuring Besu as an execution client](#configure-besu-as-an-execution-client) and [staying up to date on Besu releases](#update-besu). @@ -13,17 +13,17 @@ If you're using Besu with [Teku] as the consensus client, [prepare Teku for the Merge](https://docs.teku.consensys.net/en/latest/HowTo/Prepare-for-The-Merge/). You can also -[test Besu with Teku on the Kiln Merge testnet](../../Tutorials/Merge-Testnet.md). +[test Besu with Teku on the Kiln Merge testnet](../tutorials/merge-testnet.md). ## Configure Besu as an execution client -Before The Merge, [validators](../../Concepts/Merge.md#consensus-clients) require an -[execution client](../../Concepts/Merge.md#execution-clients) to get deposits for block proposals. +Before The Merge, [validators](../concepts/the-merge.md#consensus-clients) require an +[execution client](../concepts/the-merge.md#execution-clients) to get deposits for block proposals. Block proposals are intermittent, and a validator can get the data from other blocks if its execution client is offline. After The Merge, execution clients will play a more crucial role in producing blocks and executing transactions. Service providers that provide execution layer access but don't produce blocks, such as Infura, won't be adequate for a -[beacon node](../../Concepts/Merge.md#consensus-clients) to continue to function on the network. +[beacon node](../concepts/the-merge.md#consensus-clients) to continue to function on the network. You must configure an execution client for each beacon node you maintain. Configure Besu as an execution client using the following steps. @@ -31,8 +31,8 @@ You can use Besu with any consensus client. ### 1. Configure the Engine API -The beacon node and Besu communicate using the [Engine API](../Interact/APIs/Engine-API.md). -Configure the Engine API by setting [`engine-rpc-port`](../../Reference/CLI/CLI-Syntax.md#engine-rpc-port) in the Besu +The beacon node and Besu communicate using the [Engine API](use-engine-api.md). +Configure the Engine API by setting [`engine-rpc-port`](../reference/cli/options.md#engine-rpc-port) in the Besu configuration file. Specify the Besu Engine API endpoint in the consensus client using the consensus client's configuration options. @@ -49,7 +49,7 @@ You can generate a JWT using a command line tool, for example: openssl rand -hex 32 -out ``` -Provide the JWT to Besu using the [`engine-jwt-secret`](../../Reference/CLI/CLI-Syntax.md#engine-jwt-secret) +Provide the JWT to Besu using the [`engine-jwt-secret`](../reference/cli/options.md#engine-jwt-secret) configuration option, and to the consensus client using its configuration options. For example, provide the JWT to [Teku] using the [`ee-jwt-secret-file`](https://docs.teku.consensys.net/en/latest/Reference/CLI/CLI-Syntax/#ee-jwt-secret-file) option. @@ -60,7 +60,7 @@ configured data directory. ### 3. Sync Besu Validators can't produce attestations or blocks without a fully synced execution endpoint. -To expedite network participation, [sync Besu](../../Concepts/Node-Types.md) on Ethereum Mainnet before the Merge +To expedite network participation, [sync Besu](connect/sync-node.md) on Ethereum Mainnet before the Merge configuration (Bellatrix) comes online. ## Update Besu diff --git a/docs/HowTo/Send-Transactions/Transactions.md b/docs/public-networks/how-to/send-transactions.md similarity index 68% rename from docs/HowTo/Send-Transactions/Transactions.md rename to docs/public-networks/how-to/send-transactions.md index c743c3bf..96725e47 100644 --- a/docs/HowTo/Send-Transactions/Transactions.md +++ b/docs/public-networks/how-to/send-transactions.md @@ -2,25 +2,25 @@ description: Some use cases of creating transactions on a Hyperledger Besu network --- -# Creating and sending transactions +# Create and send transactions You can send signed transactions using the -[`eth_sendRawTransaction`](../../Reference/API-Methods.md#eth_sendrawtransaction) JSON-RPC API +[`eth_sendRawTransaction`](../reference/api/index.md#eth_sendrawtransaction) JSON-RPC API method. Signed transactions can be simple value transfers, contract creation, or contract invocation. Set -the maximum transaction fee for transactions using the [`--rpc-tx-feecap`](../../Reference/CLI/CLI-Syntax.md#rpc-tx-feecap) +the maximum transaction fee for transactions using the [`--rpc-tx-feecap`](../reference/cli/options.md#rpc-tx-feecap) CLI option. To accept signed transactions from remote connections, set the -[API listening host](../Interact/APIs/API.md#service-hosts) to `0.0.0.0`. +[API listening host](use-besu-api/index.md#service-hosts) to `0.0.0.0`. -[Use client libraries](../Develop-Dapps/Client-Libraries.md) to create and send a signed raw transaction to transfer +[Use client libraries](develop/client-libraries.md) to create and send a signed raw transaction to transfer Ether and create a smart contract. !!! warning "Private keys" - Do not use the accounts from the examples on Mainnet or any public network except for testing. + Don't use the accounts from the examples on Mainnet or any public network except for testing. The private keys are displayed which means the accounts are not secure. All accounts and private keys in the examples are from the `dev.json` genesis file in the @@ -34,7 +34,7 @@ Ether and create a smart contract. !!! caution - Setting the [listening host](../Interact/APIs/API.md#service-hosts) to `0.0.0.0` exposes the API service + Setting the [listening host](use-besu-api/index.md#service-hosts) to `0.0.0.0` exposes the API service connection on your node to any remote connection. In a production environment, ensure you are using a firewall to avoid exposing your node to the internet. @@ -47,8 +47,8 @@ Ether and create a smart contract. ## `eth_call` vs `eth_sendRawTransaction` -You can interact with contracts using [`eth_call`](../../Reference/API-Methods.md#eth_call) or -[`eth_sendRawTransaction`](../../Reference/API-Methods.md#eth_sendrawtransaction). The table below +You can interact with contracts using [`eth_call`](../reference/api/index.md#eth_call) or +[`eth_sendRawTransaction`](../reference/api/index.md#eth_sendrawtransaction). The table below compares the characteristics of both calls. | `eth_call` | `eth_sendRawTransaction` | @@ -59,3 +59,18 @@ compares the characteristics of both calls. | Does not consume gas | Requires gas | | Synchronous | Asynchronous | | Returns the value of a contract function available immediately | Returns transaction hash only. A block might not include all possible transactions (for example, if the gas price is too low). | + +## Use wallets for key management + +Besu doesn't support key management inside the client. Use: + +* [EthSigner](http://docs.ethsigner.consensys.net/en/latest/) with Besu to provide access to your + key store and sign transactions. +* Third-party tools (for example, [MetaMask](https://metamask.io/) and [web3j](https://web3j.io/)) + for creating accounts. + +!!! tip + + [EthSigner](http://docs.ethsigner.consensys.net/en/latest/) implements + [`eth_sendTransaction`](http://docs.ethsigner.consensys.net/en/latest/Using-EthSigner/Using-EthSigner/#eth_sendtransaction) + and [`eea_sendTransaction`](http://docs.ethsigner.consensys.net/en/latest/Using-EthSigner/Using-EthSigner/#eea_sendtransaction). diff --git a/docs/HowTo/Troubleshoot/Use-EVM-Tool.md b/docs/public-networks/how-to/troubleshoot/evm-tool.md similarity index 88% rename from docs/HowTo/Troubleshoot/Use-EVM-Tool.md rename to docs/public-networks/how-to/troubleshoot/evm-tool.md index 58e7ba18..759599cc 100644 --- a/docs/HowTo/Troubleshoot/Use-EVM-Tool.md +++ b/docs/public-networks/how-to/troubleshoot/evm-tool.md @@ -2,17 +2,17 @@ description: Hyperledger Besu EVM tool --- -# EVM tool +# Use the EVM tool The Besu EVM tool is a CLI program that executes arbitrary EVM programs and Ethereum State Tests outside the context of an operating node. Use the EVM tool for benchmarking and fuzz testing. -## Getting the EVM tool +## Get the EVM tool The Besu EVM tool does not have a standard zip file distribution. To use, you need to either build from the source repository or use a pre-published docker image. -### Building from source +### Build from source To build from source, run the following from the root of the Besu repository: @@ -29,7 +29,7 @@ Execute the EVM tool: ethereum/evmtool/build/install/evmtool/bin/evm ``` -### Executing with Docker +### Execute with Docker To run the Besu EVM tool in a container: @@ -53,9 +53,9 @@ docker run -rm hyperledger/besu-evmtool:develop ` in `[Users.]` with the username. * Hash of the user password. Use the - [`password hash`](../../../Reference/CLI/CLI-Subcommands.md#password) subcommand to generate the + [`password hash`](../../reference/cli/subcommands.md#password) subcommand to generate the hash. * [JSON-RPC permissions](#json-rpc-permissions). * Optional. The tenant's Tessera public key using `privacyPublicKey`. Only used for - [multi-tenancy](../../../Concepts/Privacy/Multi-Tenancy.md). + [multi-tenancy](../../../private-networks/concepts/privacy/multi-tenancy.md). !!! example "Password hash subcommand" === "Command" - + ```bash besu password hash --password=MyPassword ``` @@ -80,13 +80,13 @@ Each user requiring JSON-RPC access the configuration file lists the: ### 2. Enable authentication To require authentication for the JSON-RPC API, use the -[`--rpc-http-authentication-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-authentication-enabled) -or [`--rpc-ws-authentication-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-ws-authentication-enabled) +[`--rpc-http-authentication-enabled`](../../reference/cli/options.md#rpc-http-authentication-enabled) +or [`--rpc-ws-authentication-enabled`](../../reference/cli/options.md#rpc-ws-authentication-enabled) options. To specify the [credentials file](#1-create-the-credentials-file), use the -[`--rpc-http-authentication-credentials-file`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-authentication-credentials-file) -and [`--rpc-ws-authentication-credentials-file`](../../../Reference/CLI/CLI-Syntax.md#rpc-ws-authentication-credentials-file) +[`--rpc-http-authentication-credentials-file`](../../reference/cli/options.md#rpc-http-authentication-credentials-file) +and [`--rpc-ws-authentication-credentials-file`](../../reference/cli/options.md#rpc-ws-authentication-credentials-file) options. ### 3. Generate an authentication token @@ -183,9 +183,9 @@ Besu default is `RS256`. The private key must be kept secret. Never share private keys publicly or on a Web site, even if advertised as secure. - Always keep your private keys safe -- ideally using - [harware](https://connect2id.com/products/nimbus-jose-jwt/examples/pkcs11) or - [vault](https://www.vaultproject.io/docs/secrets/identity/identity-token) -- + Always keep your private keys safe -- ideally using + [harware](https://connect2id.com/products/nimbus-jose-jwt/examples/pkcs11) or + [vault](https://www.vaultproject.io/docs/secrets/identity/identity-token) -- and define a strong security policy and [best practices](https://auth0.com/docs/best-practices/token-best-practices). @@ -208,7 +208,7 @@ Each payload for the JWT must contain: * [JSON-RPC permissions](#json-rpc-permissions) * [`exp` (Expiration Time) claim](https://tools.ietf.org/html/rfc7519#section-4.1.4) * Optionally, the tenant's Tessera public key using `privacyPublicKey`. Only used for - [multi-tenancy](../../../Concepts/Privacy/Multi-Tenancy.md). + [multi-tenancy](../../../private-networks/concepts/privacy/multi-tenancy.md). !!! example "JWT generation example" @@ -229,13 +229,13 @@ Each payload for the JWT must contain: ### 3. Enable authentication To require authentication for the JSON-RPC API, use the -[`--rpc-http-authentication-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-authentication-enabled) -or [`--rpc-ws-authentication-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-ws-authentication-enabled) +[`--rpc-http-authentication-enabled`](../../reference/cli/options.md#rpc-http-authentication-enabled) +or [`--rpc-ws-authentication-enabled`](../../reference/cli/options.md#rpc-ws-authentication-enabled) options. To specify the JWT provider's public key file to use with the externally created JWT, use the -[`--rpc-http-authentication-jwt-public-key-file`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-authentication-jwt-public-key-file) -or [`--rpc-ws-authentication-jwt-public-key-file`](../../../Reference/CLI/CLI-Syntax.md#rpc-ws-authentication-jwt-public-key-file) +[`--rpc-http-authentication-jwt-public-key-file`](../../reference/cli/options.md#rpc-http-authentication-jwt-public-key-file) +or [`--rpc-ws-authentication-jwt-public-key-file`](../../reference/cli/options.md#rpc-ws-authentication-jwt-public-key-file) options. ## JSON-RPC permissions @@ -251,7 +251,7 @@ With authentication enabled, to explicitly specify a user cannot access any meth user with an empty permissions list (`[]`). Users with an empty permissions list and users not included in the credentials file cannot access any JSON-RPC methods. -## Using an authentication token to make requests +## Use an authentication token to make requests Specify the authentication token as a `Bearer` token in the JSON-RPC request header. diff --git a/docs/HowTo/Interact/APIs/GraphQL.md b/docs/public-networks/how-to/use-besu-api/graphql.md similarity index 81% rename from docs/HowTo/Interact/APIs/GraphQL.md rename to docs/public-networks/how-to/use-besu-api/graphql.md index 6e225520..c2d7d3fa 100644 --- a/docs/HowTo/Interact/APIs/GraphQL.md +++ b/docs/public-networks/how-to/use-besu-api/graphql.md @@ -2,31 +2,31 @@ description: How to access the Hyperledger Besu API using GraphQL --- -# GraphQL over HTTP +# Use GraphQL over HTTP GraphQL can reduce the overhead needed for common queries. For example, instead of querying each receipt in a block, GraphQL can get the same result with a single query for the entire block. The [Besu GraphQL schema] describes the GraphQL implementation for Ethereum. Enable the GraphQL -service using [command line options](API.md#enabling-api-access). +service using [command line options](index.md#enable-api-access). !!! note - GraphQL is not supported over WebSockets. + GraphQL is not supported over WebSocket. Access the GraphQL endpoint at `http://:/graphql`. Configure `` and `` -using [`graphql-http-host`](../../../Reference/CLI/CLI-Syntax.md#graphql-http-host) and -[`graphql-http-port`](../../../Reference/CLI/CLI-Syntax.md#graphql-http-port). The default endpoint +using [`graphql-http-host`](../../reference/cli/options.md#graphql-http-host) and +[`graphql-http-port`](../../reference/cli/options.md#graphql-http-port). The default endpoint is `http://127.0.0.1:8547/graphql`. ## GraphQL requests with cURL -[Hyperledger Besu JSON-RPC API methods](../../../Reference/API-Methods.md) with an equivalent -[GraphQL](GraphQL.md) query include a GraphQL request and result in the method example. +[Hyperledger Besu JSON-RPC API methods](../../reference/api/index.md) with an equivalent +[GraphQL](graphql.md) query include a GraphQL request and result in the method example. !!! example - The following [`syncing`](../../../Reference/API-Methods.md#eth_syncing) request returns data + The following [`syncing`](../../reference/api/index.md#eth_syncing) request returns data about the synchronization status. ```bash diff --git a/docs/HowTo/Interact/APIs/API.md b/docs/public-networks/how-to/use-besu-api/index.md similarity index 61% rename from docs/HowTo/Interact/APIs/API.md rename to docs/public-networks/how-to/use-besu-api/index.md index 40d15fc8..f8cac7c3 100644 --- a/docs/HowTo/Interact/APIs/API.md +++ b/docs/public-networks/how-to/use-besu-api/index.md @@ -4,20 +4,20 @@ description: Hyperledger Besu API # Access the Hyperledger Besu API -Access the [Hyperledger Besu API](../../../Reference/API-Methods.md) using: +Access the [Hyperledger Besu API](../../reference/api/index.md) using: -* [JSON-RPC over HTTP, WebSocket, or IPC](Using-JSON-RPC-API.md) -* [RPC Pub/Sub over WebSockets](RPC-PubSub.md) -* [GraphQL over HTTP](GraphQL.md). +* [JSON-RPC over HTTP, WebSocket, or IPC](json-rpc.md) +* [RPC Pub/Sub over WebSockets](rpc-pubsub.md) +* [GraphQL over HTTP](graphql.md). The following sections provide information about JSON-RPC, RPC Pub/Sub, and GraphQL. ## Enable API access To enable API access, use the -[`--rpc-http-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-enabled), -[`--ws-http-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-ws-enabled), -[`--graphql-http-enabled`](../../../Reference/CLI/CLI-Syntax.md#graphql-http-enabled), and +[`--rpc-http-enabled`](../../reference/cli/options.md#rpc-http-enabled), +[`--ws-http-enabled`](../../reference/cli/options.md#rpc-ws-enabled), +[`--graphql-http-enabled`](../../reference/cli/options.md#graphql-http-enabled), and `--Xrpc-ipc-enabled` options. !!! caution @@ -27,9 +27,9 @@ To enable API access, use the ## Service hosts To specify the host the API service listens on, use the -[`--rpc-http-host`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-host), -[`--rpc-ws-host`](../../../Reference/CLI/CLI-Syntax.md#rpc-ws-host), and -[`--graphql-http-host`](../../../Reference/CLI/CLI-Syntax.md#graphql-http-host) options. The +[`--rpc-http-host`](../../reference/cli/options.md#rpc-http-host), +[`--rpc-ws-host`](../../reference/cli/options.md#rpc-ws-host), and +[`--graphql-http-host`](../../reference/cli/options.md#graphql-http-host) options. The default host is `127.0.0.1`. To allow remote connections, set the host to `0.0.0.0`. @@ -43,9 +43,9 @@ To allow remote connections, set the host to `0.0.0.0`. ## Service ports To specify the port the API service listens on, use the -[`--rpc-http-port`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-port), -[`--rpc-ws-port`](../../../Reference/CLI/CLI-Syntax.md#rpc-ws-port), and -[`--graphql-http-port`](../../../Reference/CLI/CLI-Syntax.md#graphql-http-port) options. +[`--rpc-http-port`](../../reference/cli/options.md#rpc-http-port), +[`--rpc-ws-port`](../../reference/cli/options.md#rpc-ws-port), and +[`--graphql-http-port`](../../reference/cli/options.md#graphql-http-port) options. The default ports are: @@ -53,7 +53,7 @@ The default ports are: * 8546 for JSON-RPC over WebSocket. * 8547 for GraphQL over HTTP. -Ports must be [exposed appropriately](../../Find-and-Connect/Configuring-Ports.md). +Ports must be [exposed appropriately](../connect/configure-ports.md). ## Socket path @@ -69,13 +69,13 @@ The default path is `besu.ipc` in the Besu data directory. To prevent DNS rebinding attacks, Besu checks incoming HTTP request host headers, WebSocket connections, and GraphQL requests. Besu accepts requests only when hostnames specified using the -[`--host-allowlist`](../../../Reference/CLI/CLI-Syntax.md#host-allowlist) option matches the request host headers. +[`--host-allowlist`](../../reference/cli/options.md#host-allowlist) option matches the request host headers. By default, Besu accepts requests and connections from `localhost` and `127.0.0.1`. !!! important This isn't a permissioning feature. - If you want to restrict access to the API, we recommend using the [Besu authentication mechanism](Authentication.md) + If you want to restrict access to the API, we recommend using the [Besu authentication mechanism](authenticate.md) with username and password authentication or JWT public key authentication. If your application publishes RPC ports, specify the hostnames when starting Besu. @@ -99,10 +99,10 @@ Specify "*" for `--host-allowlist` to effectively disable host protection. Account management relies on private key management in the client, which is not supported by Besu. To send signed transactions, use -[`eth_sendRawTransaction`](../../../Reference/API-Methods.md#eth_sendrawtransaction). +[`eth_sendRawTransaction`](../../reference/api/index.md#eth_sendrawtransaction). `eth_sendTransaction` is not implemented. -For [account management](../../Send-Transactions/Account-Management.md), use third-party wallets. +For [account management](../send-transactions.md#use-wallets-for-key-management), use third-party wallets. ### Protocols diff --git a/docs/HowTo/Interact/APIs/Using-JSON-RPC-API.md b/docs/public-networks/how-to/use-besu-api/json-rpc.md similarity index 78% rename from docs/HowTo/Interact/APIs/Using-JSON-RPC-API.md rename to docs/public-networks/how-to/use-besu-api/json-rpc.md index 50897fef..8f61c9e2 100644 --- a/docs/HowTo/Interact/APIs/Using-JSON-RPC-API.md +++ b/docs/public-networks/how-to/use-besu-api/json-rpc.md @@ -2,13 +2,13 @@ description: How to access the Hyperledger Besu API using JSON-RPC --- -# JSON-RPC over HTTP, WebSockets and IPC +# Use JSON-RPC over HTTP, WebSocket, and IPC -To enable JSON-RPC over HTTP or WebSockets, use the -[`--rpc-http-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-enabled) and -[`--rpc-ws-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-ws-enabled) options. +To enable JSON-RPC over HTTP or WebSocket, use the +[`--rpc-http-enabled`](../../reference/cli/options.md#rpc-http-enabled) and +[`--rpc-ws-enabled`](../../reference/cli/options.md#rpc-ws-enabled) options. -To enable JSON-RPC over an [IPC socket](API.md#socket-path), use the +To enable JSON-RPC over an [IPC socket](index.md#socket-path), use the `--Xrpc-ipc-enabled` option. !!! caution @@ -25,9 +25,9 @@ supported by geth and Hyperledger Besu directly in the console. To use the geth console with Besu: 1. Start Besu with the - [`--rpc-http-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-enabled) or `--Xrpc-ipc-enabled` option. + [`--rpc-http-enabled`](../../reference/cli/options.md#rpc-http-enabled) or `--Xrpc-ipc-enabled` option. 1. Specify which APIs to enable using the - [`--rpc-http-api`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-api) or `--Xrpc-ipc-api` option. + [`--rpc-http-api`](../../reference/cli/options.md#rpc-http-api) or `--Xrpc-ipc-api` option. 1. Start the geth console specifying the JSON-RPC endpoint: !!! example @@ -44,7 +44,7 @@ To use the geth console with Besu: geth attach /path/to/besu.ipc ``` -Use the geth console to call [JSON-RPC API methods](../../../Reference/API-Methods.md) that geth +Use the geth console to call [JSON-RPC API methods](../../reference/api/index.md) that geth and Besu share. !!! example @@ -55,7 +55,7 @@ and Besu share. ## JSON-RPC authentication -Besu disables [Authentication](Authentication.md) by default. +Besu disables [Authentication](authenticate.md) by default. ## HTTP and WebSocket requests @@ -112,12 +112,12 @@ Send the requests as an array, and receive an array of responses. }] ``` -### WebSockets +### WebSocket -To make RPC requests over WebSockets, you can use [`wscat`](https://github.com/websockets/wscat), a +To make RPC requests over WebSocket, you can use [`wscat`](https://github.com/websockets/wscat), a Node.js based command-line tool. -First connect to the WebSockets server using `wscat` (you only need to connect once per session): +First connect to the WebSocket server using `wscat` (you only need to connect once per session): ```bash wscat -c ws:// @@ -150,7 +150,7 @@ Send individual requests as a JSON data package at each prompt. } ``` -You can use `wscat` to make multiple RPC requests over WebSockets at the same time. +You can use `wscat` to make multiple RPC requests over WebSocket at the same time. Send the requests as an array, and receive an array of responses. !!! example @@ -177,8 +177,8 @@ Send the requests as an array, and receive an array of responses. !!! note - `wscat` does not support headers. [Authentication](Authentication.md) requires you to pass an - authentication token in the request header. To use authentication with WebSockets, you require + `wscat` does not support headers. [Authentication](authenticate.md) requires you to pass an + authentication token in the request header. To use authentication with WebSocket, you need an app that supports headers. ## Readiness and liveness endpoints @@ -190,7 +190,7 @@ Besu provides readiness and liveness endpoints to confirm the Besu node status. By default, the readiness check requires a connected peer and the node to be within two blocks of the best known block. If you have -[disabled P2P communication](../../../Reference/CLI/CLI-Syntax.md#p2p-enabled), you do not need +[disabled P2P communication](../../reference/cli/options.md#p2p-enabled), you do not need peers. A live node with P2P disabled is always ready. Use the query parameters `minPeers` and `maxBlocksBehind` to adjust the number of peers required @@ -236,8 +236,8 @@ Besu enables the `ETH`, `NET`, and `WEB3` API methods by default. To enable the `ADMIN`, `CLIQUE`, `DEBUG`, `EEA`, `IBFT`, `MINER`, `PERM`, `PLUGINS`, `PRIV`, `TRACE`, and `TXPOOL` API methods, use the -[`--rpc-http-api`](../../../Reference/CLI/CLI-Syntax.md#rpc-http-api), -[`--rpc-ws-api`](../../../Reference/CLI/CLI-Syntax.md#rpc-ws-api), or +[`--rpc-http-api`](../../reference/cli/options.md#rpc-http-api), +[`--rpc-ws-api`](../../reference/cli/options.md#rpc-ws-api), or `--Xrpc-ipc-api` options. !!! caution @@ -248,7 +248,7 @@ To enable the `ADMIN`, `CLIQUE`, `DEBUG`, `EEA`, `IBFT`, `MINER`, `PERM`, `PLUGI When you make requests that might have different results depending on the block accessed, the block parameter specifies the block. Methods such as -[`eth_getTransactionByBlockNumberAndIndex`](../../../Reference/API-Methods.md#eth_gettransactionbyblocknumberandindex) +[`eth_getTransactionByBlockNumberAndIndex`](../../reference/api/index.md#eth_gettransactionbyblocknumberandindex) have a block parameter. The block parameter can have the following values: @@ -258,7 +258,7 @@ The block parameter can have the following values: * `earliest` : `tag` - The earliest (genesis) block. * `latest` : `tag` - The last block mined. * `pending` : `tag` - The last block mined plus pending transactions. Use only with - [`eth_getTransactionCount`](../../../Reference/API-Methods.md#eth_gettransactioncount). + [`eth_getTransactionCount`](../../reference/api/index.md#eth_gettransactioncount). * `finalized` : `tag` - The most recent crypto-economically secure block. It cannot be reorganized outside manual intervention driven by community coordination. * `safe` : `tag` - The most recent block that is safe from reorganization under @@ -266,6 +266,6 @@ The block parameter can have the following values: !!! note - If [synchronizing in FAST mode](../../../Reference/CLI/CLI-Syntax.md#sync-mode), most + If [synchronizing in FAST mode](../../reference/cli/options.md#sync-mode), most historical world state data is unavailable. Any methods attempting to access unavailable world state data return `null`. diff --git a/docs/HowTo/Interact/APIs/jwt.png b/docs/public-networks/how-to/use-besu-api/jwt.png similarity index 100% rename from docs/HowTo/Interact/APIs/jwt.png rename to docs/public-networks/how-to/use-besu-api/jwt.png diff --git a/docs/HowTo/Interact/APIs/RPC-PubSub.md b/docs/public-networks/how-to/use-besu-api/rpc-pubsub.md similarity index 93% rename from docs/HowTo/Interact/APIs/RPC-PubSub.md rename to docs/public-networks/how-to/use-besu-api/rpc-pubsub.md index c89198c0..1f16d253 100644 --- a/docs/HowTo/Interact/APIs/RPC-PubSub.md +++ b/docs/public-networks/how-to/use-besu-api/rpc-pubsub.md @@ -2,12 +2,12 @@ description: Using RPC Pub/Sub with Hyperledger Besu WebSockets --- -# RPC Pub/Sub over WebSockets +# Use RPC Pub/Sub over WebSockets ## Introduction Subscribe to events by using either RPC Pub/Sub over WebSockets or -[filters over HTTP](../Filters/Accessing-Logs-Using-JSON-RPC.md). +[filters over HTTP](access-logs.md). Use RPC Pub/Sub over WebSockets to wait for events instead of polling for them. For example, dapps subscribe to logs and receive notifications when a specific event occurs. @@ -15,18 +15,18 @@ subscribe to logs and receive notifications when a specific event occurs. Methods specific to RPC Pub/Sub are: * `eth_subscribe` and `eth_unsubscribe` - create or cancel a subscription for specific events. -* `priv_subscribe` and `priv_unsubscribe` - create or cancel a subscription for [private logs](../../../Concepts/Privacy/Privacy-Overview.md). +* `priv_subscribe` and `priv_unsubscribe` - create or cancel a subscription for [private logs](../../../private-networks/concepts/privacy/index.md). !!!important - Unlike other [Hyperledger Besu API methods](../../../Reference/API-Methods.md), you cannot call + Unlike other [Hyperledger Besu API methods](../../reference/api/index.md), you cannot call the RPC Pub/Sub methods over HTTP. Use the - [`--rpc-ws-enabled`](../../../Reference/CLI/CLI-Syntax.md#rpc-ws-enabled) option to enable the + [`--rpc-ws-enabled`](../../reference/cli/options.md#rpc-ws-enabled) option to enable the WebSockets JSON-RPC service. -### Using RPC Pub/Sub +### Use RPC Pub/Sub -[WebSockets](Using-JSON-RPC-API.md#http-and-websocket-requests) supports the RPC Pub/Sub API. +[WebSockets](json-rpc.md#http-and-websocket-requests) supports the RPC Pub/Sub API. To create subscriptions, use `eth_subscribe` or `priv_subscribe`. Once subscribed, the API publishes notifications using `eth_subscription` or `priv_subscription`. @@ -64,7 +64,7 @@ Notifications include the subscription ID. Subscribing to some events (for example, logs) can cause a flood of notifications while the node is synchronizing. -## Subscribing +## Subscribe Use `eth_subscribe` to create subscriptions for the following event types: @@ -91,9 +91,9 @@ chain. This means the subscription can publish notifications for multiple blocks on the blockchain. The new headers notification returns -[block objects](../../../Reference/API-Objects.md#block-object). The second parameter is optional. +[block objects](../../reference/api/objects.md#block-object). The second parameter is optional. If specified, the notifications include whole -[transaction objects](../../../Reference/API-Objects.md#transaction-object), Otherwise, the +[transaction objects](../../reference/api/objects.md#transaction-object), Otherwise, the notifications include transaction hashes. !!!example @@ -178,7 +178,7 @@ notifications include transaction hashes. ### Logs -To notify you about [logs](../../../Concepts/Events-and-Logs.md) included in new blocks, use the +To notify you about [logs](../../concepts/events-and-logs.md) included in new blocks, use the `logs` parameter with `eth_subscribe` or `priv_subscribe`. Specify a filter object to receive notifications only for logs matching your filter. @@ -187,7 +187,7 @@ Logs subscriptions have an filter object parameter with the following fields: * `address` - (optional) Either an address or an array of addresses. Returns only logs created from these addresses. * `topics` - (optional) Returns only logs that match the - [specified topics](../../../Concepts/Events-and-Logs.md#topic-filters). + [specified topics](../../concepts/events-and-logs.md#topic-filters). * `fromBlock` - (optional) The earliest block from which to return logs. * `toBlock` - (optional) The last block from which to return logs. @@ -196,11 +196,11 @@ logs for a private contract subscription. If you create a subscription for a pri not a member of, you will not receive any notifications. If a chain reorganization occurs, the subscription publishes notifications for logs from the old -chain with the `removed` property in the [log object](../../../Reference/API-Objects.md#log-object) +chain with the `removed` property in the [log object](../../reference/api/objects.md#log-object) set to `true`. This means the subscription can publish notifications for multiple logs for the same transaction. -The logs subscription returns [log objects](../../../Reference/API-Objects.md#log-object). +The logs subscription returns [log objects](../../reference/api/objects.md#log-object). !!!example "Public logs" @@ -457,7 +457,7 @@ synchronization progress. When fully synchronized, returns `false`. } ``` -## Unsubscribing +## Unsubscribe To cancel a subscription, use the [subscription ID](#subscription-id) with `eth_unsubscribe` or `priv_unsubscribe`. Only the connection that created a subscription can unsubscribe from it. diff --git a/docs/HowTo/Interact/APIs/Engine-API.md b/docs/public-networks/how-to/use-engine-api.md similarity index 83% rename from docs/HowTo/Interact/APIs/Engine-API.md rename to docs/public-networks/how-to/use-engine-api.md index 3f4cb0a0..754769c5 100644 --- a/docs/HowTo/Interact/APIs/Engine-API.md +++ b/docs/public-networks/how-to/use-engine-api.md @@ -4,15 +4,15 @@ description: How to enable and use the Engine API # Use the Engine API -After [The Merge](../../../Concepts/Merge.md), consensus and execution clients communicate with each other using the Engine API. -These [API methods](../../../Reference/Engine-API-Methods.md) are a separate subsection of the [JSON-RPC API](API.md). +After [The Merge](../concepts/the-merge.md), consensus and execution clients communicate with each other using the Engine API. +These [API methods](../reference/engine-api/index.md) are a separate subsection of the [JSON-RPC API](../how-to/use-besu-api/index.md). ## Configure the Engine API To configure the Engine API: -- [Enable the JSON-RPC API](API.md#enable-api-access). - Ensure the [`ETH` method is enabled](Using-JSON-RPC-API.md#api-methods-enabled-by-default) (it's enabled by default). +- [Enable the JSON-RPC API](use-besu-api/index.md#enable-api-access). + Ensure the [`ETH` method is enabled](use-besu-api/json-rpc.md#api-methods-enabled-by-default) (it's enabled by default). - Specify the [service ports](#service-ports). - Specify the [host allowlist](#host-allowlist). @@ -25,7 +25,7 @@ To configure the Engine API: ### Service ports To specify the port the Engine API service listens on for HTTP and WebSocket, use the -[`--engine-rpc-port`](../../../Reference/CLI/CLI-Syntax.md#engine-rpc-port) option. +[`--engine-rpc-port`](../reference/cli/options.md#engine-rpc-port) option. The default is `8551`. ### Host allowlist @@ -33,7 +33,7 @@ The default is `8551`. To prevent DNS rebinding attacks, Besu checks incoming HTTP request host headers, WebSocket connections, and GraphQL requests. Besu accepts requests only when hostnames specified using the -[`--engine-host-allowlist`](../../../Reference/CLI/CLI-Syntax.md#engine-host-allowlist) option matches the request host headers. +[`--engine-host-allowlist`](../reference/cli/options.md#engine-host-allowlist) option matches the request host headers. By default, Besu accepts requests and connections from `localhost` and `127.0.0.1`. !!! important @@ -51,21 +51,21 @@ Specify "*" for `--engine-host-allowlist` to effectively disable host protection ## Authentication -By default, [authentication](Authentication.md) for the Engine API is enabled. -To disable, set the [`--engine-jwt-disabled`](../../../Reference/CLI/CLI-Syntax.md#engine-jwt-disabled) option to `true`. +By default, [authentication](../how-to/use-besu-api/authenticate.md) for the Engine API is enabled. +To disable, set the [`--engine-jwt-disabled`](../reference/cli/options.md#engine-jwt-disabled) option to `true`. !!! warning Don't disable JWT authentication in production environments. Disable only for testing purposes. -Set the [JWT secret](Authentication.md#jwt-public-key-authentication) by using the [`--engine-jwt-secret`](../../../Reference/CLI/CLI-Syntax.md#engine-jwt-secret) option. +Set the [JWT secret](use-besu-api/authenticate.md#jwt-public-key-authentication) by using the [`--engine-jwt-secret`](../reference/cli/options.md#engine-jwt-secret) option. ## Send a payload using the Engine API ### 1. Prepare a payload -Prepare to send a payload using [`engine_forkchoiceUpdatedV1`](../../../Reference/Engine-API-Methods.md#engine_forkchoiceupdatedv1). +Prepare to send a payload using [`engine_forkchoiceUpdatedV1`](../reference/engine-api/index.md#engine_forkchoiceupdatedv1). !!! example @@ -94,7 +94,7 @@ Prepare to send a payload using [`engine_forkchoiceUpdatedV1`](../../../Referenc ### 2. Get the payload -Get the payload using [`engine_getPayloadV1`](../../../Reference/Engine-API-Methods.md#engine_getpayloadv1) +Get the payload using [`engine_getPayloadV1`](../reference/engine-api/index.md#engine_getpayloadv1) !!! example @@ -131,7 +131,7 @@ Get the payload using [`engine_getPayloadV1`](../../../Reference/Engine-API-Meth ### 3. Execute the payload -Execute the payload using [`engine_newPayloadV1`](../../../Reference/Engine-API-Methods.md#engine_newpayloadv1) +Execute the payload using [`engine_newPayloadV1`](../reference/engine-api/index.md#engine_newpayloadv1) !!! example @@ -174,7 +174,7 @@ Execute the payload using [`engine_newPayloadV1`](../../../Reference/Engine-API- ### 4. Update the fork choice -Update the fork choice using [`engine_forkchoiceUpdatedV1`](../../../Reference/Engine-API-Methods.md#engine_forkchoiceupdatedv1) again. +Update the fork choice using [`engine_forkchoiceUpdatedV1`](../reference/engine-api/index.md#engine_forkchoiceupdatedv1) again. !!! example diff --git a/docs/HowTo/Configure/Configure-Mining.md b/docs/public-networks/how-to/use-pow/mining.md similarity index 51% rename from docs/HowTo/Configure/Configure-Mining.md rename to docs/public-networks/how-to/use-pow/mining.md index 03613f3e..acc92288 100644 --- a/docs/HowTo/Configure/Configure-Mining.md +++ b/docs/public-networks/how-to/use-pow/mining.md @@ -2,7 +2,19 @@ description: Using Hyperledger Besu for PoW CPU mining --- -# Mining +# Configure mining + +Hyperledger Besu supports CPU and GPU mining, which are configured using command line options. + +GPU mining tests used [Ethminer](https://github.com/ethereum-mining/ethminer) with the +`stratum+tcp` and `getwork` schemes. + +Ethminer has been used with Hyperledger Besu to mine blocks on the [Ropsten testnet](https://ropsten.etherscan.io/address/0x2f14582947E292a2eCd20C430B46f2d27CFE213c#mine), +[ETC Mainnet (uncle block only)](https://etc.tokenview.com/en/uncleblock/10555173) and Mordor ETC testnet. + +!!! note + + Some mining software supports the `getwork` scheme as the `http` scheme. ## Configure CPU mining @@ -15,8 +27,8 @@ besu --rpc-http-api=ETH,MINER --miner-enabled --miner-coinbase= Where `` is the account you pay mining rewards to. For example, `fe3b557e8fb62b89f4916b721be55ceb828dbd73`. -Start and stop mining using the [`miner_start`](../../Reference/API-Methods.md#miner_start) and -[`miner_stop`](../../Reference/API-Methods.md#miner_stop) APIs. +Start and stop mining using the [`miner_start`](../../reference/api/index.md#miner_start) and +[`miner_stop`](../../reference/api/index.md#miner_stop) APIs. ## Configure GPU mining @@ -34,39 +46,39 @@ Where `` is the account you pay mining rewards to. For example, Optional command line options are: -* [`--miner-stratum-host`](../../Reference/CLI/CLI-Syntax.md#miner-stratum-host) to specify the +* [`--miner-stratum-host`](../../reference/cli/options.md#miner-stratum-host) to specify the host of the mining service. -* [`--miner-stratum-port`](../../Reference/CLI/CLI-Syntax.md#miner-stratum-port) to specify the +* [`--miner-stratum-port`](../../reference/cli/options.md#miner-stratum-port) to specify the port of the mining service. !!! note Besu also supports the `getwork` scheme. Use the - [`--miner-stratum-enabled`](../../Reference/CLI/CLI-Syntax.md#miner-stratum-enabled) option and - [enable the `ETH` RPCs](../../Reference/CLI/CLI-Syntax.md#rpc-http-api). + [`--miner-stratum-enabled`](../../reference/cli/options.md#miner-stratum-enabled) option and + [enable the `ETH` RPCs](../../reference/cli/options.md#rpc-http-api). The `getwork` scheme is supported as the `http` scheme in certain mining software. -Start and stop mining using the [`miner_start`](../../Reference/API-Methods.md#miner_start) and -[`miner_stop`](../../Reference/API-Methods.md#miner_stop) APIs. +Start and stop mining using the [`miner_start`](../../reference/api/index.md#miner_start) and +[`miner_stop`](../../reference/api/index.md#miner_stop) APIs. ## Mining APIs The JSON-RPC API methods for mining are: -* [`miner_start`](../../Reference/API-Methods.md#miner_start) to start mining. -* [`miner_stop`](../../Reference/API-Methods.md#miner_stop) to stop mining. -* [`eth_mining`](../../Reference/API-Methods.md#eth_mining) to determine whether the client is +* [`miner_start`](../../reference/api/index.md#miner_start) to start mining. +* [`miner_stop`](../../reference/api/index.md#miner_stop) to stop mining. +* [`eth_mining`](../../reference/api/index.md#eth_mining) to determine whether the client is actively mining new blocks. -* [`eth_getMinerDataByBlockHash`](../../Reference/API-Methods.md#eth_getminerdatabyblockhash) and -[`eth_getMinerDataByBlockNumber`](../../Reference/API-Methods.md#eth_getminerdatabyblocknumber) to +* [`eth_getMinerDataByBlockHash`](../../reference/api/index.md#eth_getminerdatabyblockhash) and +[`eth_getMinerDataByBlockNumber`](../../reference/api/index.md#eth_getminerdatabyblocknumber) to get the miner data for a specified block. -* [`eth_hashrate`](../../Reference/API-Methods.md#eth_hashrate) to get the number of hashes per +* [`eth_hashrate`](../../reference/api/index.md#eth_hashrate) to get the number of hashes per second with which the node is mining. Not supported for GPU mining. -* [`eth_getWork`](../../Reference/API-Methods.md#eth_getwork) to get the hash of the current block, +* [`eth_getWork`](../../reference/api/index.md#eth_getwork) to get the hash of the current block, the seed hash, and the target boundary condition. Only used when using the `getwork` scheme. -* [`eth_submitWork`](../../Reference/API-Methods.md#eth_submitwork) to submit the PoW solution. +* [`eth_submitWork`](../../reference/api/index.md#eth_submitwork) to submit the PoW solution. Only used when using the `getwork` scheme. ## Hyperledger Besu mined blocks diff --git a/docs/public-networks/index.md b/docs/public-networks/index.md new file mode 100644 index 00000000..84dfb1cc --- /dev/null +++ b/docs/public-networks/index.md @@ -0,0 +1,13 @@ +--- +description: Public networks overview +--- + +# Hyperledger Besu for public networks + +Besu serves as an [execution client](concepts/the-merge.md#execution-clients) on public +proof-of-stake Ethereum networks such as Ethereum Mainnet, Ropsten, Goerli, Sepolia, and the Merge +testnet. + +You can also run Besu using proof of work on [Ethereum Classic (ETC)](how-to/use-pow/mining.md). + +Get started by [installing Besu](get-started/install/index.md). diff --git a/docs/Reference/API-Methods.md b/docs/public-networks/reference/api/index.md similarity index 70% rename from docs/Reference/API-Methods.md rename to docs/public-networks/reference/api/index.md index 96dfe2cb..3e84a1a5 100644 --- a/docs/Reference/API-Methods.md +++ b/docs/public-networks/reference/api/index.md @@ -2,13 +2,16 @@ description: Hyperledger Besu JSON-RPC API methods reference --- -# Hyperledger Besu API methods +# Besu API methods !!! attention + * This reference contains API methods that apply to both public and private networks. + For private-network-specific API methods, see the + [private network API reference](../../../private-networks/reference/api/index.md). * All JSON-RPC HTTP examples use the default host and port endpoint `http://127.0.0.1:8545`. If - using the [--rpc-http-host](CLI/CLI-Syntax.md#rpc-http-host) or - [--rpc-http-port](CLI/CLI-Syntax.md#rpc-http-port) options, update the endpoint. + using the [--rpc-http-host](../cli/options.md#rpc-http-host) or + [--rpc-http-port](../cli/options.md#rpc-http-port) options, update the endpoint. * Except for the examples made on the Ropsten network, the example requests are made against private networks. Depending on network configuration and activity, your example results might be different. @@ -22,26 +25,26 @@ The `ADMIN` API methods provide administrative functionality to manage your node !!! note The `ADMIN` API methods are not enabled by default for JSON-RPC. To enable the `ADMIN` API - methods, use the [`--rpc-http-api`](CLI/CLI-Syntax.md#rpc-http-api) or - [`--rpc-ws-api`](CLI/CLI-Syntax.md#rpc-ws-api) options. + methods, use the [`--rpc-http-api`](../cli/options.md#rpc-http-api) or + [`--rpc-ws-api`](../cli/options.md#rpc-ws-api) options. ### `admin_addPeer` -Adds a [static node](../HowTo/Find-and-Connect/Static-Nodes.md). +Adds a [static node](../../how-to/connect/static-nodes.md). !!! caution If connections are timing out, ensure the node ID in the - [enode URL](../Concepts/Node-Keys.md#enode-url) is correct. + [enode URL](../../concepts/node-keys.md#enode-url) is correct. #### Parameters -`enode`: *string* - [enode URL](../Concepts/Node-Keys.md#enode-url) of peer to add +`enode`: *string* - [enode URL](../../concepts/node-keys.md#enode-url) of peer to add #### Returns `result`: *boolean* - `true` if peer added or `false` if peer already a -[static node](../HowTo/Find-and-Connect/Static-Nodes.md) +[static node](../../how-to/connect/static-nodes.md) !!! example @@ -76,7 +79,7 @@ You can specify only one log level per RPC call. #### Parameters -* `level`: *string* - [log level](CLI/CLI-Syntax.md#logging) +* `level`: *string* - [log level](../cli/options.md#logging) * `log_filter`: *array* - (optional) packages or classes for which to change the log level @@ -142,7 +145,7 @@ Generates cached log bloom indexes for blocks. APIs such as [`eth_getLogs`](#eth !!! tip Manually executing `admin_generateLogBloomCache` is not required unless the - [`--auto-log-bloom-caching-enabled`](CLI/CLI-Syntax.md#auto-log-bloom-caching-enabled) command + [`--auto-log-bloom-caching-enabled`](../cli/options.md#auto-log-bloom-caching-enabled) command line option is set to false. !!! note @@ -208,11 +211,11 @@ Removes cache files for the specified range of blocks. * `fromBlock`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) * `toBlock`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) You can skip a parameter by using an empty string, `""`. If you specify: @@ -304,16 +307,16 @@ None `result`: *object* - node object with the following fields: -* `enode`: *string* - [enode URL](../Concepts/Node-Keys.md#enode-url) of the node +* `enode`: *string* - [enode URL](../../concepts/node-keys.md#enode-url) of the node * `listenAddr`: *string* - host and port for the node * `name`: *string* - client name -* `id`: *string* - [node public key](../Concepts/Node-Keys.md#node-public-key) +* `id`: *string* - [node public key](../../concepts/node-keys.md#node-public-key) * `ports`: *object* - peer discovery and listening - [ports](../HowTo/Find-and-Connect/Managing-Peers.md#port-configuration) + [ports](../../how-to/connect/manage-peers.md#port-configuration) * `protocols`: *object* - list of objects containing information for each Ethereum sub-protocol @@ -321,7 +324,7 @@ None If the node is running locally, the host of the `enode` and `listenAddr` display as `[::]` in the result. When advertising externally, the external address displayed for the `enode` and - `listenAddr` is defined by [`--nat-method`](../HowTo/Find-and-Connect/Specifying-NAT.md). + `listenAddr` is defined by [`--nat-method`](../../how-to/connect/specify-nat.md). !!! example @@ -404,10 +407,10 @@ None * `port`: *string* - port on the remote node on which P2P discovery is listening * `id`: *string* - node public key (excluding the `0x` prefix, the node public key is the ID in the - [enode URL](../Concepts/Node-Keys.md#enode-url) `enode://@:`.) + [enode URL](../../concepts/node-keys.md#enode-url) `enode://@:`.) -* `protocols`: *object* - [current state of peer](../HowTo/Find-and-Connect/Managing-Peers.md#monitoring-peer-connections) -including `difficulty` and `head` (`head` is the hash of the highest known block for the peer.) +* `protocols`: *object* - [current state of peer](../../how-to/connect/manage-peers.md#monitor-peer-connections) + including `difficulty` and `head` (`head` is the hash of the highest known block for the peer.) * `enode`: *string* - enode URL of the remote node @@ -463,16 +466,16 @@ including `difficulty` and `head` (`head` is the hash of the highest known block ### `admin_removePeer` -Removes a [static node](../HowTo/Find-and-Connect/Static-Nodes.md). +Removes a [static node](../../how-to/connect/static-nodes.md). #### Parameters -`enode`: *string* - [enode URL](../Concepts/Node-Keys.md#enode-url) of peer to remove +`enode`: *string* - [enode URL](../../concepts/node-keys.md#enode-url) of peer to remove #### Returns `result`: *boolean* - `true` if peer removed or `false` if peer not a -[static node](../HowTo/Find-and-Connect/Static-Nodes.md) +[static node](../../how-to/connect/static-nodes.md) !!! example @@ -498,282 +501,6 @@ Removes a [static node](../HowTo/Find-and-Connect/Static-Nodes.md). } ``` -## `CLIQUE` methods - -The `CLIQUE` API methods provide access to the [Clique](../HowTo/Configure/Consensus-Protocols/Clique.md) consensus engine. - -!!! note - - The `CLIQUE` API methods are not enabled by default for JSON-RPC. To enable the `CLIQUE` API - methods use the [`--rpc-http-api`](CLI/CLI-Syntax.md#rpc-http-api) or - [`--rpc-ws-api`](CLI/CLI-Syntax.md#rpc-ws-api) options. - -### `clique_discard` - -Discards a proposal to [add or remove a signer with the specified address]. - -#### Parameters - -`address`: *string* - 20-byte address of proposed signer - -#### Returns - -`result`: *boolean* - indicates if the proposal is discarded - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"clique_discard","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73"], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"clique_discard","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73"], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc" : "2.0", - "id" : 1, - "result" : true - } - ``` - -### `clique_getSigners` - -Lists [signers for the specified block]. - -#### Parameters - -`blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, -`earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) - -#### Returns - -`result`: *array* of *string* - list of 20-byte addresses of signers - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"clique_getSigners","params":["latest"], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"clique_getSigners","params":["latest"], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc" : "2.0", - "id" : 1, - "result" : [ "0x42eb768f2244c8811c63729a21a3569731535f06", "0x7ffc57839b00206d1ad20c69a1981b489f772031", "0xb279182d99e65703f0076e4812653aab85fca0f0" ] - } - ``` - -### `clique_getSignerMetrics` - -Provides the following validator metrics for the specified range: - -* Number of blocks from each validator - -* Block number of the last block proposed by each validator (if any proposed in the specified - range) - -* All validators present in the last block - -#### Parameters - -* `fromBlockNumber`: *string* - integer representing a block number or the string tag `earliest`, as described -in [Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) - -* `toBlockNumber`: *string* - integer representing a block number or one of the string tags `latest` or -`pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) - -If you specify: - -* No parameters, the call provides metrics for the last 100 blocks, or all blocks if there are less - than 100 blocks. - -* Only the first parameter, the call provides metrics for all blocks from the block specified to - the latest block. - -#### Returns - -`result`: *array* of *objects* - list of validator objects - -!!! note - - The proposer of the genesis block has address `0x0000000000000000000000000000000000000000`. - -!!! example - - === "curl HTTP" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"clique_getSignerMetrics","params":["1", "100"], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS" - - ```bash - {"jsonrpc":"2.0","method":"clique_getSignerMetrics","params":["1", "100"], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": [ - { - "address": "0x7ffc57839b00206d1ad20c69a1981b489f772031", - "proposedBlockCount": "0x21", - "lastProposedBlockNumber": "0x61" - }, - { - "address": "0x42eb768f2244c8811c63729a21a3569731535f06", - "proposedBlockCount": "0x21", - "lastProposedBlockNumber": "0x63" - }, - { - "address": "0xb279182d99e65703f0076e4812653aab85fca0f0", - "proposedBlockCount": "0x21", - "lastProposedBlockNumber": "0x62" - } - ] - } - ``` - -### `clique_getSignersAtHash` - -Lists signers for the specified block. - -#### Parameters - -`hash`: *string* - 32-byte block hash - -#### Returns - -`result`: *array* of *string* - list of 20-byte addresses of signers - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"clique_getSignersAtHash","params":["0x98b2ddb5106b03649d2d337d42154702796438b3c74fd25a5782940e84237a48"], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"clique_getSignersAtHash","params":["0x98b2ddb5106b03649d2d337d42154702796438b3c74fd25a5782940e84237a48"], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc" : "2.0", - "id" : 1, - "result" : [ "0x42eb768f2244c8811c63729a21a3569731535f06", "0x7ffc57839b00206d1ad20c69a1981b489f772031", "0xb279182d99e65703f0076e4812653aab85fca0f0" ] - } - ``` - -### `clique_proposals` - -Returns -[current proposals](../HowTo/Configure/Consensus-Protocols/Clique.md#adding-and-removing-signers). - -#### Parameters - -None - -#### Returns - -`result`: *map* of *strings* to *booleans* - map of account addresses to corresponding boolean values indicating the -proposal for each account (if `true`, the proposal is to add a signer; if `false`, the proposal is to -remove a signer.) - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"clique_proposals","params":[], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"clique_proposals","params":[], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": { - "0x42eb768f2244c8811c63729a21a3569731535f07": false, - "0x12eb759f2222d7711c63729a45c3585731521d01": true - } - } - ``` - -### `clique_propose` - -Proposes to [add or remove a signer with the specified address]. - -#### Parameters - -* `address`: *string* - 20-byte address - -* `proposal`: *boolean* - `true` to propose adding signer or `false` to propose removing signer - -#### Returns - -`result`: *boolean* - `true` - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"clique_propose","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73", true], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"clique_propose","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73", true], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc" : "2.0", - "id" : 1, - "result" : true - } - ``` - ## `DEBUG` methods The `DEBUG` API methods allow you to inspect and debug the network. @@ -784,8 +511,8 @@ We recommend using the [`TRACE` API](#trace-methods) for production use over the !!! note The `DEBUG` API methods are not enabled by default for JSON-RPC. To enable the `DEBUG` API - methods, use the [`--rpc-http-api`](CLI/CLI-Syntax.md#rpc-http-api) or - [`--rpc-ws-api`](CLI/CLI-Syntax.md#rpc-ws-api) options. + methods, use the [`--rpc-http-api`](../cli/options.md#rpc-http-api) or + [`--rpc-ws-api`](../cli/options.md#rpc-ws-api) options. ### `debug_accountAt` @@ -932,7 +659,7 @@ Returns the accounts for a specified block. ### `debug_batchSendRawTransaction` -Sends a list of [signed transactions](../HowTo/Send-Transactions/Transactions.md). +Sends a list of [signed transactions](../../how-to/send-transactions.md). This is used to quickly load a network with a lot of transactions. This does the same thing as calling [`eth_sendRawTransaction`](#eth_sendRawTransaction) multiple times. @@ -1004,7 +731,7 @@ None #### Returns -`result`: *array* of *objects* - list of [block objects](API-Objects.md#block-object) +`result`: *array* of *objects* - list of [block objects](objects.md#block-object) !!! example @@ -1232,7 +959,7 @@ Returns the contract storage for the specified range. #### Returns -`result`: *object* - [range object](API-Objects.md#range-object). +`result`: *object* - [range object](objects.md#range-object). !!! example @@ -1425,7 +1152,7 @@ Reruns the transaction with the same state as when the transaction executed. #### Returns -`result`: *object* - [trace object](API-Objects.md#trace-object) +`result`: *object* - [trace object](objects.md#trace-object) !!! example @@ -1483,7 +1210,7 @@ Returns full trace of all invoked opcodes of all transactions included in the bl #### Returns -`result`: *object* - [trace object](API-Objects.md#trace-object) +`result`: *object* - [trace object](objects.md#trace-object) !!! example @@ -1541,7 +1268,7 @@ Returns full trace of all invoked opcodes of all transactions included in the bl #### Returns -`result`: *array* of *objects* - list of [trace objects](API-Objects.md#trace-object) +`result`: *array* of *objects* - list of [trace objects](objects.md#trace-object) !!! example @@ -1594,7 +1321,7 @@ Returns full trace of all invoked opcodes of all transactions included in the bl * `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) * `options`: *object* - request options object with the following fields (all optional and default to `false`): @@ -1606,7 +1333,7 @@ Returns full trace of all invoked opcodes of all transactions included in the bl #### Returns -`result`: *array* of *objects* - list of [trace objects](API-Objects.md#trace-object) +`result`: *array* of *objects* - list of [trace objects](objects.md#trace-object) !!! example @@ -1651,96 +1378,13 @@ Returns full trace of all invoked opcodes of all transactions included in the bl } ``` -## `EEA` methods - -The `EEA` API methods provide functionality for [private transactions](../Concepts/Privacy/Private-Transactions.md) and -[privacy groups](../Concepts/Privacy/Privacy-Groups.md). - -!!! note - - The `EEA` API methods are not enabled by default for JSON-RPC. To enable the `EEA` API methods, - use the [`--rpc-http-api`](CLI/CLI-Syntax.md#rpc-http-api) or - [`--rpc-ws-api`](CLI/CLI-Syntax.md#rpc-ws-api) options. - -### `eea_sendRawTransaction` - -Distributes the -[private transaction](../HowTo/Send-Transactions/Creating-Sending-Private-Transactions.md), -generates the [privacy marker transaction](../Concepts/Privacy/Private-Transaction-Processing.md) -and submits it to the transaction pool, and returns the transaction hash of the -[privacy marker transaction](../Concepts/Privacy/Private-Transaction-Processing.md). - -The signed transaction passed as an input parameter includes the `privateFrom`, -[`privateFor` or `privacyGroupId`](../HowTo/Send-Transactions/Creating-Sending-Private-Transactions.md#eea-compliant-or-besu-extended-privacy), -and `restriction` fields. - -The `gas` and `gasPrice` are used by the [privacy marker transaction](../Concepts/Privacy/Private-Transaction-Processing.md) -not the private transaction itself. - -To avoid exposing your private key, create signed transactions offline and send the signed -transaction data using `eea_sendRawTransaction`. - -!!! important - - For production systems requiring private transactions, use a network with a consensus mechanism - supporting transaction finality to make sure the private state does not become inconsistent - with the chain. For example, [IBFT 2.0](../HowTo/Configure/Consensus-Protocols/IBFT.md) - and [QBFT](../HowTo/Configure/Consensus-Protocols/QBFT.md) provide the required finality. - - Using private transactions with [pruning](../Concepts/Pruning.md) or - [fast sync](CLI/CLI-Syntax.md#sync-mode) is not supported. - - Besu does not implement - [`eea_sendTransaction`](../HowTo/Send-Transactions/Account-Management.md). - - [EthSigner](https://docs.ethsigner.consensys.net/en/latest/) provides transaction signing and - implements [`eea_sendTransaction`](https://docs.ethsigner.consensys.net/en/latest/Using-EthSigner/Using-EthSigner/#eea_sendtransaction). - -#### Parameters - -`transaction`: *string* - signed RLP-encoded private transaction - -#### Returns - -`result`: *string* - 32-byte transaction hash of the -[Privacy Marker Transaction](../Concepts/Privacy/Private-Transaction-Processing.md) - -!!! tip - - If creating a contract, use [priv_getTransactionReceipt](#priv_gettransactionreceipt) to - retrieve the contract address after the transaction is finalized. - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"eea_sendRawTransaction","params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"eea_sendRawTransaction","params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id":1} - ``` - - === "JSON result" - - ```json - { - "id":1, - "jsonrpc": "2.0", - "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" - } - ``` - ## `ETH` methods The `ETH` API methods allow you to interact with the blockchain. !!! note - Methods with an equivalent [GraphQL](../HowTo/Interact/APIs/GraphQL.md) query include a GraphQL + Methods with an equivalent [GraphQL](../../how-to/use-besu-api/graphql.md) query include a GraphQL request and result in the method example. The parameter and result descriptions apply to the JSON-RPC requests. The GraphQL specification is defined in the [schema]. @@ -1751,7 +1395,7 @@ Returns a list of account addresses a client owns. !!!note This method returns an empty object because Besu - [doesn't support key management](../HowTo/Send-Transactions/Account-Management.md) inside the + [doesn't support key management](../../how-to/send-transactions.md) inside the client. To provide access to your key store and and then sign transactions, use @@ -1860,20 +1504,22 @@ Invokes a contract function locally and does not change the state of the blockch You can interact with contracts using [`eth_sendRawTransaction`](#eth_sendrawtransaction) or `eth_call`. -If revert reason is enabled with [`--revert-reason-enabled`](CLI/CLI-Syntax.md#revert-reason-enabled), -the `eth_call` error response includes the [revert reason](../HowTo/Send-Transactions/Revert-Reason.md). +If revert reason is enabled with [`--revert-reason-enabled`](../cli/options.md#revert-reason-enabled), +the `eth_call` error response includes the [revert reason](../../../private-networks/how-to/send-transactions/revert-reason.md). #### Parameters -`call`: *object* - [transaction call object](API-Objects.md#transaction-call-object) +`call`: *object* - [transaction call object](objects.md#transaction-call-object) `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) !!! note - By default, `eth_call` does not fail if the sender account has an insufficient balance. This is done by setting the balance of the account to a large amount of ether. To enforce balance rules, set the [`strict` parameter](API-Objects.md#transaction-call-object) in the transaction call object to `true`. + By default, `eth_call` does not fail if the sender account has an insufficient balance. + This is done by setting the balance of the account to a large amount of ether. + To enforce balance rules, set the [`strict` parameter](objects.md#transaction-call-object) in the transaction call object to `true`. #### Returns @@ -1941,7 +1587,8 @@ the `eth_call` error response includes the [revert reason](../HowTo/Send-Transac !!! example "Example of a simulated contract creation" - The following example creates a simulated contract by not including the `to` parameter from the [transaction call object](API-Objects.md#transaction-call-object) in the `call` parameter. + The following example creates a simulated contract by not including the `to` parameter from the + [transaction call object](objects.md#transaction-call-object) in the `call` parameter. Besu simulates the data to create the contract. === "curl HTTP" @@ -1962,7 +1609,7 @@ the `eth_call` error response includes the [revert reason](../HowTo/Send-Transac ### `eth_chainId` -Returns the [chain ID](../Concepts/NetworkID-And-ChainID.md). +Returns the [chain ID](../../concepts/network-and-chain-id.md). #### Parameters @@ -2052,15 +1699,15 @@ and node performance. The `eth_estimateGas` call does not send a transaction. You must call [`eth_sendRawTransaction`](#eth_sendrawtransaction) to execute the transaction. -If revert reason is enabled with [`--revert-reason-enabled`](CLI/CLI-Syntax.md#revert-reason-enabled), -the `eth_estimateGas` error response includes the [revert reason](../HowTo/Send-Transactions/Revert-Reason.md). +If revert reason is enabled with [`--revert-reason-enabled`](../cli/options.md#revert-reason-enabled), +the `eth_estimateGas` error response includes the [revert reason](../../../private-networks/how-to/send-transactions/revert-reason.md). #### Parameters For `eth_estimateGas`, all fields are optional because setting a gas limit is irrelevant to the estimation process (unlike transactions, in which gas limits apply). -`call`: *object* - [transaction call object](API-Objects.md#transaction-call-object) +`call`: *object* - [transaction call object](objects.md#transaction-call-object) #### Returns @@ -2166,11 +1813,11 @@ If blocks in the specified block range are not available, then only the fee hist * `newestBlock`: *string* - Integer representing the highest number block of the requested range or one of the string tags `latest`, `earliest`, or `pending`, as described in - [Block parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter). + [Block parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter). #### Returns -`result`: *object* - [Fee history results object](API-Objects.md#fee-history-results-object). +`result`: *object* - [Fee history results object](objects.md#fee-history-results-object). !!! example @@ -2206,13 +1853,13 @@ Returns a percentile gas unit price for the most recent blocks, in Wei. By defau the last 100 blocks are examined and the 50th percentile gas unit price (that is, the median value) is returned. -If there are no blocks, the value for [`--min-gas-price`](CLI/CLI-Syntax.md#min-gas-price) is returned. -The value returned is restricted to values between [`--min-gas-price`](CLI/CLI-Syntax.md#min-gas-price) -and [`--api-gas-price-max`](CLI/CLI-Syntax.md#api-gas-price-max). By default, 1000 Wei and +If there are no blocks, the value for [`--min-gas-price`](../cli/options.md#min-gas-price) is returned. +The value returned is restricted to values between [`--min-gas-price`](../cli/options.md#min-gas-price) +and [`--api-gas-price-max`](../cli/options.md#api-gas-price-max). By default, 1000 Wei and 500GWei. -Use the [`--api-gas-price-blocks`](CLI/CLI-Syntax.md#api-gas-price-blocks), [`--api-gas-price-percentile`](CLI/CLI-Syntax.md#api-gas-price-percentile) -, and [`--api-gas-price-max`](CLI/CLI-Syntax.md#api-gas-price-max) command line +Use the [`--api-gas-price-blocks`](../cli/options.md#api-gas-price-blocks), [`--api-gas-price-percentile`](../cli/options.md#api-gas-price-percentile) +, and [`--api-gas-price-max`](../cli/options.md#api-gas-price-max) command line options to configure the `eth_gasPrice` default values. #### Parameters @@ -2281,7 +1928,7 @@ Returns the account balance of the specified address. * `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) #### Returns @@ -2347,12 +1994,12 @@ Returns information about the block matching the specified block hash. * `hash`: *string* - 32-byte hash of a block -* `verbose`: *boolean* - if `true`, returns the full [transaction objects](API-Objects.md#transaction-object); +* `verbose`: *boolean* - if `true`, returns the full [transaction objects](objects.md#transaction-object); if `false`, returns the transaction hashes #### Returns -`result`: *object* - [block object](API-Objects.md#block-object), or `null` when there is no +`result`: *object* - [block object](objects.md#block-object), or `null` when there is no block !!! example @@ -2474,14 +2121,14 @@ Returns information about the block matching the specified block number. * `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, `pending`, `finalized`, or `safe` as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) -* `verbose`: *boolean* - if `true`, returns the full [transaction objects](API-Objects.md#transaction-object); +* `verbose`: *boolean* - if `true`, returns the full [transaction objects](objects.md#transaction-object); if `false`, returns only the hashes of the transactions. #### Returns -`result`: *object* - [block object](API-Objects.md#block-object), or `null` when there is no +`result`: *object* - [block object](objects.md#block-object), or `null` when there is no block. !!! example @@ -2692,7 +2339,7 @@ Returns the number of transactions in a block matching the specified block numbe `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) #### Returns @@ -2762,7 +2409,7 @@ Besu stores compiled smart contract code as a hexadecimal value. `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) #### Returns @@ -2836,7 +2483,7 @@ Polls the specified filter and returns an array of changes that have occurred si * For filters created with `eth_newPendingTransactionFilter`, returns transaction hashes. -* For filters created with `eth_newFilter`, returns [log objects](API-Objects.md#log-object). +* For filters created with `eth_newFilter`, returns [log objects](objects.md#log-object). !!! example @@ -2916,15 +2563,15 @@ Polls the specified filter and returns an array of changes that have occurred si ### `eth_getFilterLogs` -Returns an array of [logs](../Concepts/Events-and-Logs.md) for the specified filter. +Returns an array of [logs](../../concepts/events-and-logs.md) for the specified filter. -Leave the [`--auto-log-bloom-caching-enabled`](CLI/CLI-Syntax.md#auto-log-bloom-caching-enabled) +Leave the [`--auto-log-bloom-caching-enabled`](../cli/options.md#auto-log-bloom-caching-enabled) command line option at the default value of `true` to improve log retrieval performance. !!! note `eth_getFilterLogs` is only used for filters created with `eth_newFilter`. To specify a filter - object and get logs without creating a filter, use `eth_getLogs` . + object and get logs without creating a filter, use `eth_getLogs`. #### Parameters @@ -2932,7 +2579,7 @@ command line option at the default value of `true` to improve log retrieval perf #### Returns -`result`: *array* of *objects* - list of [log objects](API-Objects.md#log-object) +`result`: *array* of *objects* - list of [log objects](objects.md#log-object) !!! example @@ -2980,22 +2627,24 @@ command line option at the default value of `true` to improve log retrieval perf ### `eth_getLogs` -Returns an array of [logs](../Concepts/Events-and-Logs.md) matching a specified filter object. +Returns an array of [logs](../../concepts/events-and-logs.md) matching a specified filter object. -Leave the [`--auto-log-bloom-caching-enabled`](CLI/CLI-Syntax.md#auto-log-bloom-caching-enabled) +Leave the [`--auto-log-bloom-caching-enabled`](../cli/options.md#auto-log-bloom-caching-enabled) command line option at the default value of `true` to improve log retrieval performance. !!! attention - Using `eth_getLogs` to get the logs from a large range of blocks, especially an entire chain from its genesis block, can cause Besu to hang and never return a response. We recommend splitting one large query into multiple ones for better performance. + Using `eth_getLogs` to get the logs from a large range of blocks, especially an entire chain from + its genesis block, can cause Besu to hang and never return a response. + We recommend splitting one large query into multiple ones for better performance. #### Parameters -`filterOptions`: *object* - [filter options object](API-Objects.md#filter-options-object) +`filterOptions`: *object* - [filter options object](objects.md#filter-options-object) #### Returns -`result`: *array* of *objects* - list of [log objects](API-Objects.md#log-object) +`result`: *array* of *objects* - list of [log objects](objects.md#log-object) !!! example @@ -3116,7 +2765,7 @@ Returns miner data for the specified block. #### Returns -`result`: *object* - [miner data object](API-Objects.md#miner-data-object) +`result`: *object* - [miner data object](objects.md#miner-data-object) !!! example @@ -3165,11 +2814,11 @@ Returns miner data for the specified block. `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) #### Returns -`result`: *object* - [miner data object](API-Objects.md#miner-data-object) +`result`: *object* - [miner data object](objects.md#miner-data-object) !!! example @@ -3225,7 +2874,7 @@ from untrusted sources, by using a trusted block hash. `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) #### Returns @@ -3300,7 +2949,7 @@ from untrusted sources, by using a trusted block hash. ### `eth_getQuorumPayload` -When using [GoQuorum-compatible privacy](../HowTo/Use-Privacy/Use-GoQuorum-compatible-privacy.md), returns the +When using [GoQuorum-compatible privacy](../../../private-networks/how-to/use-privacy/goquorum-compatible.md), returns the [unencrypted payload from Tessera](https://docs.tessera.consensys.net/Concepts/Transaction-manager/#private-transaction-flow). #### Parameters @@ -3347,7 +2996,7 @@ Returns the value of a storage position at a specified address. `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) #### Returns @@ -3419,7 +3068,7 @@ Returns transaction information for the specified block hash and transaction ind #### Returns -`result`: *object* - [transaction object](API-Objects.md#transaction-object), or `null` when there is no +`result`: *object* - [transaction object](objects.md#transaction-object), or `null` when there is no transaction !!! example @@ -3510,13 +3159,13 @@ Returns transaction information for the specified block number and transaction i `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) `index`: *string* - transaction index position #### Returns -`result`: *object* - [transaction object](API-Objects.md#transaction-object), or `null` when there is no +`result`: *object* - [transaction object](objects.md#transaction-object), or `null` when there is no transaction !!! example @@ -3613,7 +3262,7 @@ Returns transaction information for the specified transaction hash. #### Returns -`result`: *object* - [transaction object](API-Objects.md#transaction-object), or `null` when there is no +`result`: *object* - [transaction object](objects.md#transaction-object), or `null` when there is no transaction !!! example @@ -3725,7 +3374,7 @@ next account nonce not used by any pending transactions. `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) #### Returns @@ -3788,7 +3437,7 @@ next account nonce not used by any pending transactions. Returns the receipt of a transaction by transaction hash. Receipts for pending transactions are not available. -If you enabled [revert reason](../HowTo/Send-Transactions/Revert-Reason.md), the receipt includes +If you enabled [revert reason](../../../private-networks/how-to/send-transactions/revert-reason.md), the receipt includes available revert reasons in the response. #### Parameters @@ -3797,7 +3446,7 @@ available revert reasons in the response. #### Returns -`result`: *object* - [transaction receipt object](API-Objects.md#transaction-receipt-object), or `null` when +`result`: *object* - [transaction receipt object](objects.md#transaction-receipt-object), or `null` when there is no receipt !!! example @@ -3915,11 +3564,11 @@ Returns uncle specified by block hash and index. #### Returns -`result`: *object* - [block object](API-Objects.md#block-object) +`result`: *object* - [block object](objects.md#block-object) !!! note - Uncles do not contain individual transactions. + Uncles don't contain individual transactions. !!! example @@ -4029,13 +3678,13 @@ Returns uncle specified by block number and index. * `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) * `uncleIndex`: *string* - index of the uncle #### Returns -`result`: *object* - [block object](API-Objects.md#block-object) +`result`: *object* - [block object](objects.md#block-object) !!! note @@ -4200,7 +3849,7 @@ Returns the number of uncles in a block matching the specified block number. `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) #### Returns @@ -4422,13 +4071,13 @@ None ### `eth_newFilter` -Creates a [log filter](../Concepts/Events-and-Logs.md). +Creates a [log filter](../../concepts/events-and-logs.md). To poll for logs associated with the created filter, use [`eth_getFilterChanges`](#eth_getfilterchanges). To get all logs associated with the filter, use [`eth_getFilterLogs`](#eth_getfilterlogs). #### Parameters -`filterOptions`: *object* - [filter options object](API-Objects.md#filter-options-object) +`filterOptions`: *object* - [filter options object](objects.md#filter-options-object) !!! note @@ -4561,18 +4210,18 @@ None ### `eth_sendRawTransaction` -Sends a [signed transaction](../HowTo/Send-Transactions/Transactions.md). +Sends a [signed transaction](../../how-to/send-transactions.md). A transaction can send ether, deploy a contract, or interact with a contract. -Set the maximum transaction fee for transactions using the [`--rpc-tx-feecap`](CLI/CLI-Syntax.md#rpc-tx-feecap) CLI option. +Set the maximum transaction fee for transactions using the [`--rpc-tx-feecap`](../cli/options.md#rpc-tx-feecap) CLI option. You can interact with contracts using `eth_sendRawTransaction` or [`eth_call`](#eth_call). To avoid exposing your private key, create signed transactions offline and send the signed transaction data using `eth_sendRawTransaction`. -!!!important +!!! important - Besu does not implement [`eth_sendTransaction`](../HowTo/Send-Transactions/Account-Management.md). + Besu doesn't implement [`eth_sendTransaction`](../../how-to/send-transactions.md). [EthSigner](https://docs.ethsigner.consensys.net/) provides transaction signing and implements [`eth_sendTransaction`](https://docs.ethsigner.consensys.net/Using-EthSigner/Using-EthSigner/#eth_sendtransaction). @@ -4580,9 +4229,10 @@ transaction data using `eth_sendRawTransaction`. #### Parameters `transaction`: *string* - signed transaction serialized to hexadecimal format + !!! note - [Creating and Sending Transactions](../HowTo/Send-Transactions/Transactions.md) includes + [Creating and sending transactions](../../how-to/send-transactions.md) includes examples of creating signed transactions using the [web3.js](https://github.com/ethereum/web3.js/) library. @@ -4858,1805 +4508,119 @@ Filters time out when not requested by [`eth_getFilterChanges`](#eth_getfilterch } ``` -## `IBFT` 2.0 methods +## `MINER` methods -The `IBFT` API methods provide access to the [IBFT 2.0](../HowTo/Configure/Consensus-Protocols/IBFT.md) consensus engine. - -!!! note - - The `IBFT` API methods are not enabled by default for JSON-RPC. To enable the `IBFT` API - methods, use the [`--rpc-http-api`](CLI/CLI-Syntax.md#rpc-http-api) or - [`--rpc-ws-api`](CLI/CLI-Syntax.md#rpc-ws-api) options. - -### `ibft_discardValidatorVote` - -Discards a proposal to [add or remove a validator] with the specified address. - -#### Parameters - -`address`: *string* - 20-byte address of proposed validator - -#### Returns - -`result`: *boolean* - indicates if the proposal is discarded - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"ibft_discardValidatorVote","params":["0xef1bfb6a12794615c9b0b5a21e6741f01e570185"], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"ibft_discardValidatorVote","params":["0xef1bfb6a12794615c9b0b5a21e6741f01e570185"], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc" : "2.0", - "id" : 1, - "result" : true - } - ``` - -### `ibft_getPendingVotes` - -Returns [votes](../HowTo/Configure/Consensus-Protocols/IBFT.md#adding-and-removing-validators) cast in the current -[epoch](../HowTo/Configure/Consensus-Protocols/IBFT.md#genesis-file). - -#### Parameters - -None - -#### Returns - -`result`: *map* of *strings* to *booleans* - map of account addresses to corresponding boolean values indicating the -vote for each account; if `true`, the vote is to add a validator. If `false`, the proposal is to -remove a validator. - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"ibft_getPendingVotes","params":[], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"ibft_getPendingVotes","params":[], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": { - "0xef1bfb6a12794615c9b0b5a21e6741f01e570185": true, - "0x42d4287eac8078828cf5f3486cfe601a275a49a5": true - } - } - ``` - -### `ibft_getSignerMetrics` - -Provides the following validator metrics for the specified range: - -* Number of blocks from each validator - -* Block number of the last block proposed by each validator (if any proposed in the specified - range) - -* All validators present in the last block of the range - -#### Parameters - -* `fromBlockNumber`: *string* - integer representing a block number or the string tag `earliest` as described -in [Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) - -* `toBlockNumber`: *string* - integer representing a block number or one of the string tags `latest` or -`pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) - -If you specify: - -* No parameters, the call provides metrics for the last 100 blocks, or all blocks if there are less - than 100 blocks. - -* Only the first parameter, the call provides metrics for all blocks from the block specified to - the latest block. - -#### Returns - -`result`: *array* of *objects* - list of validator objects - -!!! note - - The proposer of the genesis block has address `0x0000000000000000000000000000000000000000`. - -!!! example - - === "curl HTTP" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"ibft_getSignerMetrics","params":["1", "100"], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS" - - ```bash - {"jsonrpc":"2.0","method":"ibft_getSignerMetrics","params":["1", "100"], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": [ - { - "address": "0x7ffc57839b00206d1ad20c69a1981b489f772031", - "proposedBlockCount": "0x21", - "lastProposedBlockNumber": "0x61" - }, - { - "address": "0x42eb768f2244c8811c63729a21a3569731535f06", - "proposedBlockCount": "0x21", - "lastProposedBlockNumber": "0x63" - }, - { - "address": "0xb279182d99e65703f0076e4812653aab85fca0f0", - "proposedBlockCount": "0x21", - "lastProposedBlockNumber": "0x62" - } - ] - } - ``` - -### `ibft_getValidatorsByBlockHash` - -Lists the validators defined in the specified block. - -#### Parameters - -`block`: *string* - 32-byte block hash - -#### Returns - -`result`: *array* of *strings* - list of validator addresses - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"ibft_getValidatorsByBlockHash","params":["0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256"], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"ibft_getValidatorsByBlockHash","params":["0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256"], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": [ - "0x42d4287eac8078828cf5f3486cfe601a275a49a5", - "0xb1b2bc9582d2901afdc579f528a35ca41403fa85", - "0xef1bfb6a12794615c9b0b5a21e6741f01e570185" - ] - } - ``` - -### `ibft_getValidatorsByBlockNumber` - -Lists the validators defined in the specified block. - -#### Parameters - -* `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, -`earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) - -#### Returns - -`result`: *array* of *strings* - list of validator addresses - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"ibft_getValidatorsByBlockNumber","params":["latest"], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"ibft_getValidatorsByBlockNumber","params":["latest"], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": [ - "0x42d4287eac8078828cf5f3486cfe601a275a49a5", - "0xb1b2bc9582d2901afdc579f528a35ca41403fa85", - "0xef1bfb6a12794615c9b0b5a21e6741f01e570185" - ] - } - ``` - -### `ibft_proposeValidatorVote` - -Proposes to [add or remove a validator] with the specified address. - -#### Parameters - -* `address`: *string* - account address - -* `proposal`: *boolean* - `true` to propose adding validator or `false` to propose removing validator - -#### Returns - -`result`: *boolean* - `true` - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"ibft_proposeValidatorVote","params":["42d4287eac8078828cf5f3486cfe601a275a49a5",true], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"ibft_proposeValidatorVote","params":["42d4287eac8078828cf5f3486cfe601a275a49a5",true], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc" : "2.0", - "id" : 1, - "result" : true - } - ``` - -## `MINER` methods - -The `MINER` API methods allow you to control the node’s mining operation. - -!!! note - - The `MINER` API methods are not enabled by default for JSON-RPC. To enable the `MINER` API - methods, use the [`--rpc-http-api`](CLI/CLI-Syntax.md#rpc-http-api) or - [`--rpc-ws-api`](CLI/CLI-Syntax.md#rpc-ws-api) options. - -### `miner_changeTargetGasLimit` - -Updates the target gas limit set using the [`--target-gas-limit`](CLI/CLI-Syntax.md#target-gas-limit) -command line option. - -#### Parameters - -`gasPrice`: *number* - target gas price in Wei - -#### Returns - -`result`: *string* - `Success` or `error` - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"miner_changeTargetGasLimit","params":[800000], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"miner_changeTargetGasLimit","params":[800000], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc" : "2.0", - "id" : 1, - "result" : "Success" - } - ``` - -### `miner_setCoinbase` - -Sets the coinbase, the address for the mining rewards. - -!!! note - - You can also use `miner_setEtherbase` as an alternative method. They both work the same way. - Etherbase is a historic name for coinbase. - -#### Parameters - -`coinbase`: *string* - Account address you pay mining rewards to - -#### Returns - -`result`: *boolean* - `true` when address is set - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"miner_setCoinbase","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73"],"id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"miner_setCoinbase","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73"],"id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": true - } - ``` - -### `miner_start` - -Starts the mining process. To start mining, you must first specify a miner coinbase using the -[`--miner-coinbase`](CLI/CLI-Syntax.md#miner-coinbase) command line option or using [`miner_setCoinbase`](#miner_setcoinbase). - -#### Parameters - -None - -#### Returns - -`result`: *boolean* - `true` if mining starts, or if the node is already mining - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"miner_start","params":[],"id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"miner_start","params":[],"id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": true - } - ``` - -### `miner_stop` - -Stops the mining process on the client. - -#### Parameters - -None - -#### Returns - -`result`: *boolean* - `true` if mining stops, or if the node is not mining - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"miner_stop","params":[],"id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"miner_stop","params":[],"id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": true - } - ``` - -## `NET` methods - -The `NET` API methods provide network-related information. - -### `net_enode` - -Returns the [enode URL](../Concepts/Node-Keys.md#enode-url). - -#### Parameters - -None - -#### Returns - -`result`: *string* - [enode URL](../Concepts/Node-Keys.md#enode-url) of the node - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"net_enode","params":[],"id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"net_enode","params":[],"id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc" : "2.0", - "id" : 1, - "result" : "enode://6a63160d0ccef5e4986d270937c6c8d60a9a4d3b25471cda960900d037c61988ea14da67f69dbfb3497c465d0de1f001bb95598f74b68a39a5156a608c42fa1b@127.0.0.1:30303" - } - ``` - -### `net_listening` - -Whether the client is actively listening for network connections. - -#### Parameters - -None - -#### Returns - -`result`: *boolean* - indicates if the client is actively listening for network connections - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":53}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"net_listening","params":[],"id":53} - ``` - - === "JSON result" - - ```json - { - "jsonrpc" : "2.0", - "id" : 53, - "result" : true - } - ``` - -### `net_peerCount` - -Returns the number of peers currently connected to the client. - -#### Parameters - -None - -#### Returns - -`result`: *string* - number of connected peers in hexadecimal - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":53}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":53} - ``` - - === "JSON result" - - ```json - { - "jsonrpc" : "2.0", - "id" : 53, - "result" : "0x5" - } - ``` - -### `net_services` - -Returns enabled services (for example, `jsonrpc`) and the host and port for each service. - -!!! note - - The [`--nat-method`](../CLI/CLI-Syntax/#nat-method) setting affects the JSON-RPC and P2P host and port values, but not the metrics host and port values. - -#### Parameters - -None - -#### Returns - -`result`: *object* - enabled services - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"net_services","params":[],"id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"net_services","params":[],"id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": { - "jsonrpc": { - "host": "127.0.0.1", - "port": "8545" - }, - "p2p" : { - "host" : "127.0.0.1", - "port" : "30303" - }, - "metrics" : { - "host": "127.0.0.1", - "port": "9545" - } - } - } - ``` - -### `net_version` - -Returns the [network ID](../Concepts/NetworkID-And-ChainID.md). - -#### Parameters - -None - -#### Returns - -`result`: *string* - current network ID - -| Network ID | Chain | Network | Description -|------------|-------|---------|-------------------------------| -| `1` | ETH | Mainnet | Main Ethereum network | -| `3` | ETH | Ropsten | PoS test network | -| `4` | ETH | Rinkeby | PoA test network using Clique | -| `5` | ETH | Goerli | PoA test network using Clique | -| `2018` | ETH | Dev | PoW development network | -| `1` | ETC | Classic | Main Ethereum Classic network | -| `7` | ETC | Mordor | PoW test network | -| `6` | ETC | Kotti | PoA test network using Clique | -| `212` | ETC | Astor | PoW test network | - -!!! note - - For almost all networks network ID and chain ID are the same. - - The only networks in the table above with different network and chain IDs are - Classic with a chain ID of `61` and Mordor with a chain ID of `63`. - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":53}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"net_version","params":[],"id":53} - ``` - - === "JSON result for Mainnet" - - ```json - { - "jsonrpc" : "2.0", - "id" : 51, - "result" : "1" - } - ``` - - === "JSON result for Ropsten" - - ```json - { - "jsonrpc" : "2.0", - "id" : 53, - "result" : "3" - } - ``` - -## `PERM` (Permissioning) methods - -The `PERM` API methods provide permissioning functionality. -Use these methods for [local permissioning](../HowTo/Limit-Access/Local-Permissioning.md) only. - -!!! important - - The `PERM` API methods are not enabled by default for JSON-RPC. To enable the `PERM` API - methods, use the [`--rpc-http-api`](CLI/CLI-Syntax.md#rpc-http-api) or - [`--rpc-ws-api`](CLI/CLI-Syntax.md#rpc-ws-api) CLI options. - -### `perm_addAccountsToAllowlist` - -Adds accounts (participants) to the -[accounts permission list](../HowTo/Limit-Access/Local-Permissioning.md#account-permissioning). - -#### Parameters - -`addresses`: *array* of *strings* - list of account addresses - -!!! note - - The parameters list contains a list which is why the account addresses are enclosed by double - square brackets. - -#### Returns - -`result`: *string* - `Success` or `error` (errors include attempting to add accounts already on the -allowlist and including invalid account addresses.) - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"perm_addAccountsToAllowlist","params":[["0xb9b81ee349c3807e46bc71aa2632203c5b462032", "0xb9b81ee349c3807e46bc71aa2632203c5b462034"]], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"perm_addAccountsToAllowlist","params":[["0xb9b81ee349c3807e46bc71aa2632203c5b462032", "0xb9b81ee349c3807e46bc71aa2632203c5b462034"]], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": "Success" - } - ``` - -### `perm_addNodesToAllowlist` - -Adds nodes to the -[nodes allowlist](../HowTo/Limit-Access/Local-Permissioning.md#node-allowlisting). - -To use domain names in enode URLs, ensure you [enable DNS support](../Concepts/Node-Keys.md#domain-name-support) to -avoid receiving a `request contains an invalid node` error. - -!!! warning - - Enode URL domain name support is an experimental feature. - -#### Parameters - -`enodes`: *array* of *strings* - list of [enode URLs](../Concepts/Node-Keys.md#enode-url) - -!!! note - - The parameters list contains a list which is why the enode URLs are enclosed by double - square brackets. - -#### Returns - -`result`: *string* - `Success` or `error`; errors include attempting to add nodes already on the allowlist or -including invalid enode URLs. - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"perm_addNodesToAllowlist","params":[["enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303","enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304"]], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"perm_addNodesToAllowlist","params":[["enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303","enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304"]], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": "Success" - } - ``` - -### `perm_getAccountsAllowlist` - -Lists accounts (participants) in the -[accounts permissions list](../HowTo/Limit-Access/Local-Permissioning.md#account-permissioning). - -#### Parameters - -None - -#### Returns - -`result`: *array* of *strings* - list of accounts (participants) in the accounts allowlist - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"perm_getAccountsAllowlist","params":[], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"perm_getAccountsAllowlist","params":[], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": [ - "0x0000000000000000000000000000000000000009", - "0xb9b81ee349c3807e46bc71aa2632203c5b462033" - ] - } - ``` - -### `perm_getNodesAllowlist` - -Lists nodes in the -[nodes allowlist](../HowTo/Limit-Access/Local-Permissioning.md#node-allowlisting). - -#### Parameters - -None - -#### Returns - -`result`: *array* of *strings* - [enode URLs](../Concepts/Node-Keys.md#enode-url) of nodes in the nodes allowlist - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"perm_getNodesAllowlist","params":[], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"perm_getNodesAllowlist","params":[], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": [ - "enode://7b61d5ee4b44335873e6912cb5dd3e3877c860ba21417c9b9ef1f7e500a82213737d4b269046d0669fb2299a234ca03443f25fe5f706b693b3669e5c92478ade@127.0.0.1:30305", - "enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304" - ] - } - ``` - -### `perm_reloadPermissionsFromFile` - -Reloads the accounts and nodes allowlists from the [permissions configuration file]. - -#### Parameters - -None - -#### Returns - -`result`: *string* - `Success`, or `error` if the permissions configuration file is not valid - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"perm_reloadPermissionsFromFile","params":[], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"perm_reloadPermissionsFromFile","params":[], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": "Success" - } - ``` - -### `perm_removeAccountsFromAllowlist` - -Removes accounts (participants) from the -[accounts permissions list](../HowTo/Limit-Access/Local-Permissioning.md#account-permissioning). - -#### Parameters - -`addresses`: *array* of *strings* - list of account addresses - -!!! note - - The parameters list contains a list which is why the account addresses are enclosed by double - square brackets. - -#### Returns - -`result`: *string* - `Success` or `error` (errors include attempting to remove accounts not on the allowlist -and including invalid account addresses.) - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"perm_removeAccountsFromAllowlist","params":[["0xb9b81ee349c3807e46bc71aa2632203c5b462032", "0xb9b81ee349c3807e46bc71aa2632203c5b462034"]], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"perm_removeAccountsFromAllowlist","params":[["0xb9b81ee349c3807e46bc71aa2632203c5b462032", "0xb9b81ee349c3807e46bc71aa2632203c5b462034"]], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": "Success" - } - ``` - -### `perm_removeNodesFromAllowlist` - -Removes nodes from the -[nodes allowlist](../HowTo/Limit-Access/Local-Permissioning.md#node-allowlisting). - -#### Parameters - -`enodes`: *array* of *strings* - list of [enode URLs](../Concepts/Node-Keys.md#enode-url) - -!!! note - - The parameters list contains a list which is why the enode URLs are enclosed by double square - brackets. - -#### Returns - -`result`: *string* - `Success` or `error` (errors include attempting to remove nodes not on the allowlist -and including invalid enode URLs.) - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"perm_removeNodesFromAllowlist","params":[["enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303","enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304"]], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"perm_removeNodesFromAllowlist","params":[["enode://7e4ef30e9ec683f26ad76ffca5b5148fa7a6575f4cfad4eb0f52f9c3d8335f4a9b6f9e66fcc73ef95ed7a2a52784d4f372e7750ac8ae0b544309a5b391a23dd7@127.0.0.1:30303","enode://2feb33b3c6c4a8f77d84a5ce44954e83e5f163e7a65f7f7a7fec499ceb0ddd76a46ef635408c513d64c076470eac86b7f2c8ae4fcd112cb28ce82c0d64ec2c94@127.0.0.1:30304"]], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": "Success" - } - ``` - -## `PLUGINS` methods - -The `PLUGINS` API methods provide plugin-related functionality. - -!!! note - - The `PLUGINS` API methods are not enabled by default for JSON-RPC. To enable the `PLUGINS` API - methods, use the [`--rpc-http-api`](CLI/CLI-Syntax.md#rpc-http-api) or - [`--rpc-ws-api`](CLI/CLI-Syntax.md#rpc-ws-api) options. - -### `plugins_reloadPluginConfig` - -Reloads specified plugin configuration. - -#### Parameters - -`plugin`: *string* - plugin - -#### Returns - -`result`: *string* - `Success` - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"plugins_reloadPluginConfig","params":["tech.pegasys.plus.plugin.kafka.KafkaPlugin"],"id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"plugins_reloadPluginConfig","params":["tech.pegasys.plus.plugin.kafka.KafkaPlugin"],"id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": "Success" - } - ``` - -## `PRIV` methods - -The `PRIV` API methods provide functionality for [private transactions](../Concepts/Privacy/Private-Transactions.md) and -[privacy groups](../Concepts/Privacy/Privacy-Groups.md). - -!!! note - - The `PRIV` API methods are not enabled by default for JSON-RPC. To enable the `PRIV` API - methods, use the [`--rpc-http-api`](CLI/CLI-Syntax.md#rpc-http-api) or - [`--rpc-ws-api`](CLI/CLI-Syntax.md#rpc-ws-api) options. - -### `priv_call` - -Invokes a private contract function locally and does not change the privacy group state. - -For private contracts, `priv_call` is the same as [`eth_call`](#eth_call) for public contracts. - -#### Parameters - -* `privacyGroupId`: *string* - 32-byte [privacy Group ID](../Concepts/Privacy/Privacy-Groups.md) - -* `call`: *object* - [transaction call object](API-Objects.md#transaction-call-object) - -* `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, -`earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) - -#### Returns - -`result`: *data* - return value of the executed contract - -!!! example - - === "curl HTTP" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"priv_call","params":["tb8NVyQqZnHNegf/3mYsyB+HEud4SPWn90rz3GoskRw=", {"to":"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13","data": "0x3fa4f245"}, "latest"],"id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS" - - ```bash - {"jsonrpc":"2.0","method":"priv_call","params":["tb8NVyQqZnHNegf/3mYsyB+HEud4SPWn90rz3GoskRw=", {"to":"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13","data": "0x3fa4f245"}, "latest"],"id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - ``` - - === "curl GraphQL" - - ```bash - curl -X POST -H "Content-Type: application/json" --data '{ "query": "{block {number call (data : {from : \"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b\", to: \"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13\", data :\"0x12a7b914\"}){data status}}}"}' http://localhost:8547/graphql - ``` - - === "GraphQL" - - ```bash - { - block { - number - call(data: {from: "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", to: "0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13", data: "0x12a7b914"}) { - data - status - } - } - } - ``` - - === "GraphQL result" - - ```json - { - "data" : { - "block" : { - "number" : 17449, - "call" : { - "data" : "0x", - "status" : 1 - } - } - } - } - ``` - -### `priv_createPrivacyGroup` - -Creates a group of nodes, specified by their [Tessera](https://docs.tessera.consensys.net/) public key. - -#### Parameters - -`options`: *object* - request options object with the following fields: - -* `addresses`: *array* of *strings* - list of nodes specified by - [Tessera](https://docs.tessera.consensys.net/) public keys - -* `name`: *string* - (optional) privacy group name - -* `description`: *string* - (optional) privacy group description - -#### Returns - -`result`: *string* - privacy group ID - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method": "priv_createPrivacyGroup", "params": [{"addresses":["sTZpbQhcOfd9ZaFDnC00e/N2Ofv9p4/ZTBbEeVtXJ3E=","quhb1pQPGN1w8ZSZSyiIfncEAlVY/M/rauSyQ5wVMRE="],"name":"Group A","description":"Description Group A"}],"id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method": "priv_createPrivacyGroup", "params": [{"addresses":["sTZpbQhcOfd9ZaFDnC00e/N2Ofv9p4/ZTBbEeVtXJ3E=","quhb1pQPGN1w8ZSZSyiIfncEAlVY/M/rauSyQ5wVMRE="],"name":"Group A","description":"Description Group A"}],"id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": "ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk=" - } - ``` - -### `priv_debugGetStateRoot` - -Returns the state root of the specified privacy group at the specified block. - -#### Parameters - -* `privacyGroupId`: *string* - 32-byte [privacy Group ID](../Concepts/Privacy/Privacy-Groups.md) - -* `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, -`earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) - -#### Returns - -`result`: *string* - 32-byte state root - -!!! example - - === "curl HTTP" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"priv_debugGetStateRoot","params":["xJdxvWOEmrs2MCkKWlgArTzWIXFfU/tmVxI3EKssVTk=","latest"],"id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS" - - ```bash - {"jsonrpc":"2.0","method":"priv_debugGetStateRoot","params":["xJdxvWOEmrs2MCkKWlgArTzWIXFfU/tmVxI3EKssVTk=","latest"],"id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc" : "2.0", - "id" : 1, - "result" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421" - } - - ``` - -### `priv_deletePrivacyGroup` - -Deletes the specified privacy group. - -#### Parameters - -`privacyGroupId`: *string* - privacy group ID - -#### Returns - -`result`: *string* - deleted privacy group ID - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"priv_deletePrivacyGroup","params":["ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk="],"id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"priv_deletePrivacyGroup","params":["ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk="],"id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 53, - "result": "ewuTVoc5nlvWMwTFdRRK/wvV0dcyQo/Pauvx5bNEbTk=" - } - ``` - -### `priv_distributeRawTransaction` - -Distributes a signed, RLP encoded -[private transaction](../HowTo/Send-Transactions/Creating-Sending-Private-Transactions.md). - -!!! tip - - If you want to sign the [privacy marker transaction](../Concepts/Privacy/Private-Transaction-Processing.md) outside of Besu, - use [`priv_distributeRawTransaction`](..//HowTo/Send-Transactions/Creating-Sending-Private-Transactions.md#priv_distributerawtransaction) - instead of [`eea_sendRawTransaction`](#eea_sendrawtransaction). - -#### Parameters - -`transaction`: *string* - signed RLP-encoded private transaction - -#### Returns - -`result`: *string* - 32-byte enclave key (the enclave key is a pointer to the private transaction in -[Tessera](https://docs.tessera.consensys.net/).) - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"priv_distributeRawTransaction","params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"priv_distributeRawTransaction","params": ["0xf869018203e882520894f17f52151ebef6c7334fad080c5704d77216b732881bc16d674ec80000801ba02da1c48b670996dcb1f447ef9ef00b33033c48a4fe938f420bec3e56bfd24071a062e0aa78a81bf0290afbc3a9d8e9a068e6d74caa66c5e0fa8a46deaae96b0833"], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": "0xfd0d90ab824574abc19c0776ca0210e764561d0ef6d621f2bbbea316eccfe56b" - } - ``` - -### `priv_findPrivacyGroup` - -Returns a list of privacy groups containing only the listed members. For example, if the listed -members are A and B, a privacy group containing A, B, and C is not returned. - -#### Parameters - -`members`: *array* of *strings* - members specified by [Tessera](https://docs.tessera.consensys.net/) public keys - -#### Returns - -`result`: *array* of *objects* - privacy group objects containing only the specified members; privacy groups are -[EEA-compliant](../Concepts/Privacy/Privacy-Groups.md#enterprise-ethereum-alliance-privacy) -or [Besu-extended](../Concepts/Privacy/Privacy-Groups.md#besu-extended-privacy) with types: - -* `LEGACY` for EEA-compliant groups. - -* `PANTHEON` for Besu-extended groups. - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc": "2.0","method": "priv_findPrivacyGroup","params": [["negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=", "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw="]],"id": 1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc": "2.0","method": "priv_findPrivacyGroup","params": [["negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=", "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw="]],"id": 1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": [ - { - "privacyGroupId": "GpK3ErNO0xF27T0sevgkJ3+4qk9Z+E3HtXYxcKIBKX8=", - "name": "Group B", - "description": "Description of Group B", - "type": "PANTHEON", - "members": [ - "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=", - "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=" - ] - } - ] - } - ``` - -### `priv_getCode` - -Returns the code of the private smart contract at the specified address. Compiled smart contract code -is stored as a hexadecimal value. - -#### Parameters - -* `privacyGroupId`: *string* - 32-byte [privacy Group ID](../Concepts/Privacy/Privacy-Groups.md) - -* `address`: *string* - 20-byte contract address - -* `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, -or `pending`, as described in [Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) - -#### Returns - -`result`: *data* - code stored at the specified address - -!!! example - - === "curl HTTP" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"priv_getCode","params":["1lJxSIP4JOp6uRn9wYsPeWwqoOP1c4nPQjylB4FExUA=", "0xeaf1c1bd00ef0bec5e39fba81740f1c5d05aa201", "latest"],"id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS" - - ```bash - {"jsonrpc":"2.0","method":"priv_getCode","params":["1lJxSIP4JOp6uRn9wYsPeWwqoOP1c4nPQjylB4FExUA=", "0xeaf1c1bd00ef0bec5e39fba81740f1c5d05aa201", "latest"],"id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": "0x60806040526004361060485763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fa4f2458114604d57806355241077146071575b600080fd5b348015605857600080fd5b50605f6088565b60408051918252519081900360200190f35b348015607c57600080fd5b506086600435608e565b005b60005481565b60008190556040805182815290517f199cd93e851e4c78c437891155e2112093f8f15394aa89dab09e38d6ca0727879181900360200190a1505600a165627a7a723058209d8929142720a69bde2ab3bfa2da6217674b984899b62753979743c0470a2ea70029" - } - ``` - -### `priv_getEeaTransactionCount` - -Returns the private transaction count for the specified account and -[group of sender and recipients]. - -!!! important - - If sending more than one transaction to be mined in the same block (that is, you are not - waiting for the transaction receipt), you must calculate the private transaction nonce outside - Besu instead of using `priv_getEeaTransactionCount`. - -#### Parameters - -* `address`: *string* - account address - -* `sender`: *string* - base64-encoded Tessera address of the sender - -* `recipients`: *array* of *strings* - base64-encoded Tessera addresses of recipients - -#### Returns - -`result`: *string* - integer representing the number of private transactions sent from the address to the -specified group of sender and recipients - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"priv_getEeaTransactionCount","params":["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", "GGilEkXLaQ9yhhtbpBT03Me9iYa7U/mWXxrJhnbl1XY=", ["KkOjNLmCI6r+mICrC6l+XuEDjFEzQllaMQMpWLl4y1s=","eLb69r4K8/9WviwlfDiZ4jf97P9czyS3DkKu0QYGLjg="]], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"priv_getEeaTransactionCount","params":["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", "GGilEkXLaQ9yhhtbpBT03Me9iYa7U/mWXxrJhnbl1XY=", ["KkOjNLmCI6r+mICrC6l+XuEDjFEzQllaMQMpWLl4y1s=","eLb69r4K8/9WviwlfDiZ4jf97P9czyS3DkKu0QYGLjg="]], "id":1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": "0x1" - } - ``` - -### `priv_getFilterChanges` - -Polls the specified filter for a private contract and returns an array of changes that have occurred -since the last poll. - -Filters for private contracts can only be created by [`priv_newFilter`](#priv_newfilter) so unlike -[`eth_getFilterChanges`](#eth_getfilterchanges), `priv_getFilterChanges` always returns an array -of log objects or an empty list. - -#### Parameters - -* `privacyGroupId`: *string* - 32-byte [privacy Group ID](../Concepts/Privacy/Privacy-Groups.md) - -* `filterId`: *string* - filter ID - -#### Returns - -`result`: *array* of *objects* - list of [log objects](API-Objects.md#log-object), or an empty list if nothing has -changed since the last poll - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc": "2.0","method": "priv_getFilterChanges","params": ["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc": "2.0","method": "priv_getFilterChanges","params": ["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": [ - { - "logIndex": "0x0", - "removed": false, - "blockNumber": "0x4d0", - "blockHash": "0x1c8200667a869e99b945374c37277b5ee7a7ae67943e13c82563381387553dbb", - "transactionHash": "0xb1966b9b372ba68952f48f3a3e78f036f5ae82ceca2de972a782d07fb88f6d88", - "transactionIndex": "0x0", - "address": "0x991cc548c154b2953cc48c02f782e1314097dfbb", - "data": "0x", - "topics": [ - "0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410", - "0x0000000000000000000000000000000000000000000000000000000000000002" - ] - } - ] - } - ``` - -### `priv_getFilterLogs` - -Returns an array of [logs](../Concepts/Events-and-Logs.md) for the specified filter for a private -contract. - -For private contracts, `priv_getFilterLogs` is the same as [`eth_getFilterLogs`](#eth_getfilterlogs) -for public contracts except there is no [automatic log bloom caching](CLI/CLI-Syntax.md#auto-log-bloom-caching-enabled) -for private contracts. - -!!! note - - `priv_getFilterLogs` is only used for filters created with [`priv_newFilter`](#priv_newfilter). - To specify a filter object and get logs without creating a filter, use [`priv_getLogs`](#priv_getlogs). - -#### Parameters - -* `privacyGroupId`: *string* - 32-byte [privacy Group ID](../Concepts/Privacy/Privacy-Groups.md) - -* `filterId`: *string* - filter ID - -#### Returns - -`result`: *array* of *objects* - list of [log objects](API-Objects.md#log-object) - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc": "2.0","method": "priv_getFilterLogs","params":["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc": "2.0","method": "priv_getFilterLogs","params":["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": [ - { - "logIndex": "0x0", - "removed": false, - "blockNumber": "0x493", - "blockHash": "0xd9cb3a852e1e02c95f035a2e32d57f82c10cab61faa3e8f5c010adf979bb4786", - "transactionHash": "0x78866dc51fdf189d8cca74f6a8fe54f172348fbd2163bbe80fa8b106cfc7deb4", - "transactionIndex": "0x0", - "address": "0x991cc548c154b2953cc48c02f782e1314097dfbb", - "data": "0x", - "topics": [ - "0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410", - "0x0000000000000000000000000000000000000000000000000000000000000001" - ] - }, - { - "logIndex": "0x0", - "removed": false, - "blockNumber": "0x4d0", - "blockHash": "0x1c8200667a869e99b945374c37277b5ee7a7ae67943e13c82563381387553dbb", - "transactionHash": "0xb1966b9b372ba68952f48f3a3e78f036f5ae82ceca2de972a782d07fb88f6d88", - "transactionIndex": "0x0", - "address": "0x991cc548c154b2953cc48c02f782e1314097dfbb", - "data": "0x", - "topics": [ - "0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410", - "0x0000000000000000000000000000000000000000000000000000000000000002" - ] - } - ] - } - ``` - -### `priv_getLogs` - -Returns an array of [logs](../Concepts/Events-and-Logs.md) matching a specified filter object. - -For private contracts, `priv_getLogs` is the same as [`eth_getLogs`](#eth_getlogs) for public contracts -except there is no [automatic log bloom caching](CLI/CLI-Syntax.md#auto-log-bloom-caching-enabled) -for private contracts. - -#### Parameters - -* `privacyGroupId`: *string* - 32-byte [privacy Group ID](../Concepts/Privacy/Privacy-Groups.md) - -* `filterOptions`: *object* - [filter options object](API-Objects.md#filter-options-object) - -#### Returns - -`result`: *array* of *objects* - list of [log objects](API-Objects.md#log-object) - -!!! example - - === "curl HTTP" - - ```bash - curl -X POST --data '{"jsonrpc": "2.0","method": "priv_getLogs","params":["vGy/TZgO6y8VPMVeJAQ99MF1NaTf5ohA3TFfzoEF71k=",{"fromBlock": "earliest","toBlock": "latest","addresses": ["0x630c507ff633312087dc33c513b66276abcd2fc3"],"topics": ["0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410"]}],"id": 1}' http://127.0.0.1:8545 - ``` - - === "wscat WS" - - ```bash - {"jsonrpc": "2.0","method": "priv_getLogs","params":["vGy/TZgO6y8VPMVeJAQ99MF1NaTf5ohA3TFfzoEF71k=",{"fromBlock": "earliest","toBlock": "latest","addresses": ["0x630c507ff633312087dc33c513b66276abcd2fc3"],"topics": ["0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410"]}],"id": 1} - ``` - - === "JSON result" - - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": [ - { - "logIndex": "0x0", - "removed": false, - "blockNumber": "0x342", - "blockHash": "0xf5954f068fa2f2f7741281e8c753a8e92047e27ab3c4971836d2c89fab86d92b", - "transactionHash": "0xa9ba5cffde9d4ad8997c5c4352d5d49eeea0e9def8a4ea69991b8837c49d4e4f", - "transactionIndex": "0x0", - "address": "0x630c507ff633312087dc33c513b66276abcd2fc3", - "data": "0x", - "topics": [ - "0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410", - "0x0000000000000000000000000000000000000000000000000000000000000001" - ] - }, - { - "logIndex": "0x0", - "removed": false, - "blockNumber": "0x383", - "blockHash": "0x91b73a47d53e3a88d62ed091a89a4be7557ad91b552e7ff7d86bf78977d5d45d", - "transactionHash": "0xc2a185faf00e87434e55b7f70cc4c38be354c2128b4b96b5f5def0b54a2173ec", - "transactionIndex": "0x0", - "address": "0x630c507ff633312087dc33c513b66276abcd2fc3", - "data": "0x", - "topics": [ - "0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410", - "0x0000000000000000000000000000000000000000000000000000000000000002" - ] - } - ] - } - ``` - -### `priv_getPrivacyPrecompileAddress` - -Returns the address of the -[privacy precompiled contract](../Concepts/Privacy/Private-Transaction-Processing.md). -The address -is derived and based on the value of the -[`privacy-flexible-groups-enabled`](CLI/CLI-Syntax.md#privacy-flexible-groups-enabled) option. - -#### Parameters - -None - -#### Returns - -`result`: *string* - address of the privacy precompile - -!!! example - - === "curl HTTP request" - - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"priv_getPrivacyPrecompileAddress","params":[], "id":1}' http://127.0.0.1:8545 - ``` - - === "wscat WS request" - - ```bash - {"jsonrpc":"2.0","method":"priv_getPrivacyPrecompileAddress","params":[], "id":1} - ``` +The `MINER` API methods allow you to control the node’s mining operation. - === "JSON result" +!!! note - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": "0x000000000000000000000000000000000000007e" - } - ``` + The `MINER` API methods are not enabled by default for JSON-RPC. To enable the `MINER` API + methods, use the [`--rpc-http-api`](../cli/options.md#rpc-http-api) or + [`--rpc-ws-api`](../cli/options.md#rpc-ws-api) options. -### `priv_getPrivateTransaction` +### `miner_changeTargetGasLimit` -Returns the private transaction if you are a participant, otherwise, `null`. +Updates the target gas limit set using the [`--target-gas-limit`](../cli/options.md#target-gas-limit) +command line option. #### Parameters -`transaction`: *string* - transaction hash returned by [`eea_sendRawTransaction`](#eea_sendrawtransaction) or -[`eea_sendTransaction`](https://docs.ethsigner.consensys.net/en/latest/Using-EthSigner/Using-EthSigner/#eea_sendtransaction). +`gasPrice`: *number* - target gas price in Wei #### Returns -`result`: *object* - [private transaction object](API-Objects.md#private-transaction-object), or `null` if not -a participant in the private transaction +`result`: *string* - `Success` or `error` !!! example === "curl HTTP request" ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"priv_getPrivateTransaction","params":["0x623c4ce5275a87b91f4f1c521012d39ca19311c787bde405490f4c0426a71498"], "id":1}' http://127.0.0.1:8545 + curl -X POST --data '{"jsonrpc":"2.0","method":"miner_changeTargetGasLimit","params":[800000], "id":1}' http://127.0.0.1:8545 ``` === "wscat WS request" ```bash - {"jsonrpc":"2.0","method":"priv_getPrivateTransaction","params":["0x623c4ce5275a87b91f4f1c521012d39ca19311c787bde405490f4c0426a71498"], "id":1} + {"jsonrpc":"2.0","method":"miner_changeTargetGasLimit","params":[800000], "id":1} ``` === "JSON result" ```json { - "jsonrpc": "2.0", - "id": 1, - "result": { - "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", - "gas": "0x2dc6c0", - "gasPrice": "0x0", - "hash": "0x623c4ce5275a87b91f4f1c521012d39ca19311c787bde405490f4c0426a71498", - "input": "0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610221806100606000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f2451461005c5780636057361d1461008757806367e404ce146100b4575b600080fd5b34801561006857600080fd5b5061007161010b565b6040518082815260200191505060405180910390f35b34801561009357600080fd5b506100b260048036038101908080359060200190929190505050610115565b005b3480156100c057600080fd5b506100c96101cb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000600254905090565b7fc9db20adedc6cf2b5d25252b101ab03e124902a73fcb12b753f3d1aaa2d8f9f53382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a18060028190555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050905600a165627a7a723058208efaf938851fb2d235f8bf9a9685f149129a30fe0f4b20a6c1885dc02f639eba0029", - "nonce": "0x0", - "to": null, - "value": "0x0", - "v": "0xfe8", - "r": "0x654a6a9663ca70bb13e27cca14b3777cc92da184e19a151cdeef2ccbbd5c6405", - "s": "0x5dd4667b020c8a5af7ae28d4c3126f8dcb1187f49dcf0de9d7a39b1651892eef", - "privateFrom": "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=", - "privateFor": [ - "g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=" - ], - "restriction": "restricted" - } + "jsonrpc" : "2.0", + "id" : 1, + "result" : "Success" } ``` -### `priv_getTransactionCount` +### `miner_setCoinbase` -Returns the private transaction count for specified account and privacy group. +Sets the coinbase, the address for the mining rewards. -!!! important +!!! note - If sending more than one transaction to be mined in the same block (that is, you are not - waiting for the transaction receipt), you must calculate the private transaction nonce outside - Besu instead of using `priv_getTransactionCount`. + You can also use `miner_setEtherbase` as an alternative method. They both work the same way. + Etherbase is a historic name for coinbase. #### Parameters -* `address`: *string* - account address - -* `privacyGroupId`: *string* - privacy group ID +`coinbase`: *string* - Account address you pay mining rewards to #### Returns -`result`: *string* - integer representing the number of private transactions sent from the address to the -specified privacy group +`result`: *boolean* - `true` when address is set !!! example === "curl HTTP request" ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"priv_getTransactionCount","params":["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", "kAbelwaVW7okoEn1+okO+AbA4Hhz/7DaCOWVQz9nx5M="], "id":1}' http://127.0.0.1:8545 + curl -X POST --data '{"jsonrpc":"2.0","method":"miner_setCoinbase","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73"],"id":1}' http://127.0.0.1:8545 ``` === "wscat WS request" ```bash - {"jsonrpc":"2.0","method":"priv_getTransactionCount","params":["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", "kAbelwaVW7okoEn1+okO+AbA4Hhz/7DaCOWVQz9nx5M="], "id":1} + {"jsonrpc":"2.0","method":"miner_setCoinbase","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73"],"id":1} ``` === "JSON result" ```json { - "jsonrpc": "2.0", - "id": 1, - "result": "0x1" + "jsonrpc": "2.0", + "id": 1, + "result": true } ``` -### `priv_getTransactionReceipt` +### `miner_start` -Returns information about the private transaction after mining the transaction. Receipts for -pending transactions are not available. +Starts the mining process. To start mining, you must first specify a miner coinbase using the +[`--miner-coinbase`](../cli/options.md#miner-coinbase) command line option or using [`miner_setCoinbase`](#miner_setcoinbase). #### Parameters -`transaction`: *string* - 32-byte hash of a transaction +None #### Returns -`result`: *object* - [private Transaction receipt object](API-Objects.md#private-transaction-receipt-object), -or `null` if no receipt found +`result`: *boolean* - `true` if mining starts, or if the node is already mining !!! example === "curl HTTP request" ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"priv_getTransactionReceipt","params":["0xf3ab9693ad92e277bf785e1772f29fb1864904bbbe87b0470455ddb082caab9d"],"id":1}' http://127.0.0.1:8545 + curl -X POST --data '{"jsonrpc":"2.0","method":"miner_start","params":[],"id":1}' http://127.0.0.1:8545 ``` === "wscat WS request" ```bash - {"jsonrpc":"2.0","method":"priv_getTransactionReceipt","params":["0xf3ab9693ad92e277bf785e1772f29fb1864904bbbe87b0470455ddb082caab9d"],"id":1} + {"jsonrpc":"2.0","method":"miner_start","params":[],"id":1} ``` === "JSON result" @@ -6665,64 +4629,34 @@ or `null` if no receipt found { "jsonrpc": "2.0", "id": 1, - "result": { - "blockHash": "0xe7212a92cfb9b06addc80dec2a0dfae9ea94fd344efeb157c41e12994fcad60a", - "blockNumber": "0x50", - "contractAddress": "0x493b76031593402e24e16faa81f677b58e2d53f3", - "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", - "logs": [], - "to": "0xf17f52151ebef6c7334fad080c5704d77216b732", - "transactionHash": "0x36219e92b5f53d4150aa9ef7d2d793118cced523de6724100da5b534e3ceb4b8", - "transactionIndex": "0x0", - "output": "0x6080604052600436106049576000357c010000000000000000000000000000000000000000000 - 0000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b3480156059 - 57600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b - 50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b8060008190555050560 - 0a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c00360029", - "commitmentHash": "0x79b9e6b0856db398ad7dc208f15b1d38c0c0b0c5f99e4a443a2c5a85510e96a5", - "status": "0x1", - "privateFrom": "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=", - "privacyGroupId": "cD636RZlcqVSpoxT/ExbkWQfBO7kPAZO0QlWHErNSL8=", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - } + "result": true } ``` -### `priv_newFilter` - -Creates a [log filter](../Concepts/Events-and-Logs.md) for a private contract. To poll for logs associated with the -created filter, use [`priv_getFilterChanges`](#priv_getfilterchanges). To get all logs associated with -the filter, use [`priv_getFilterLogs`](#priv_getfilterlogs). +### `miner_stop` -For private contracts, `priv_newFilter` is the same as [`eth_newFilter`](#eth_newfilter) -for public contracts. +Stops the mining process on the client. #### Parameters -* `privacyGroupId`: *string* - 32-byte [privacy Group ID](../Concepts/Privacy/Privacy-Groups.md) - -* `filterOptions`: *object* - [filter options object](API-Objects.md#filter-options-object) - -!!! note - - `fromBlock` and `toBlock` in the filter options object default to `latest`. +None #### Returns -`result`: *string* - filter ID +`result`: *boolean* - `true` if mining stops, or if the node is not mining !!! example === "curl HTTP request" ```bash - curl -X POST --data '{"jsonrpc": "2.0","method": "priv_newFilter","params": ["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=",{"fromBlock": "earliest","toBlock": "latest","addresses": ["0x991cc548c154b2953cc48c02f782e1314097dfbb"],"topics": ["0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410"]}],"id": 1}' http://127.0.0.1:8545 + curl -X POST --data '{"jsonrpc":"2.0","method":"miner_stop","params":[],"id":1}' http://127.0.0.1:8545 ``` === "wscat WS request" ```bash - {"jsonrpc": "2.0","method": "priv_newFilter","params": ["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=",{"fromBlock": "earliest","toBlock": "latest","addresses": ["0x991cc548c154b2953cc48c02f782e1314097dfbb"],"topics": ["0x85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410"]}],"id": 1} + {"jsonrpc":"2.0","method":"miner_stop","params":[],"id":1} ``` === "JSON result" @@ -6731,90 +4665,74 @@ for public contracts. { "jsonrpc": "2.0", "id": 1, - "result": "0x4a35b92809d73f4f53a2355d62125442" + "result": true } ``` -### `priv_uninstallFilter` +## `NET` methods -Uninstalls a filter for a private contract with the specified ID. When a filter is no longer required, -call this method. +The `NET` API methods provide network-related information. -Filters time out when not requested by [`priv_getFilterChanges`](#priv_getfilterchanges) or [`priv_getFilterLogs`](#priv_getfilterlogs) for 10 -minutes. +### `net_enode` -For private contracts, `priv_uninstallFilter` is the same as [`eth_uninstallFilter`](#eth_uninstallfilter) -for public contracts. +Returns the [enode URL](../../concepts/node-keys.md#enode-url). #### Parameters -* `privacyGroupId`: *string* - 32-byte [privacy Group ID](../Concepts/Privacy/Privacy-Groups.md) - -* `filterId`: *string* - filter ID +None #### Returns -`result`: *boolean* - indicates if the filter is successfully uninstalled +`result`: *string* - [enode URL](../../concepts/node-keys.md#enode-url) of the node !!! example === "curl HTTP request" ```bash - curl -X POST --data '{"jsonrpc": "2.0","method": "priv_uninstallFilter","params":["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1}' http://127.0.0.1:8545 + curl -X POST --data '{"jsonrpc":"2.0","method":"net_enode","params":[],"id":1}' http://127.0.0.1:8545 ``` === "wscat WS request" ```bash - {"jsonrpc": "2.0","method": "priv_uninstallFilter","params":["4rFldHM792LeP/e2WPkTXZedjwKuTr/KwCFTt6mBbkI=","0x4a35b92809d73f4f53a2355d62125442"],"id": 1} + {"jsonrpc":"2.0","method":"net_enode","params":[],"id":1} ``` === "JSON result" ```json { - "jsonrpc": "2.0", - "id": 1, - "result": true + "jsonrpc" : "2.0", + "id" : 1, + "result" : "enode://6a63160d0ccef5e4986d270937c6c8d60a9a4d3b25471cda960900d037c61988ea14da67f69dbfb3497c465d0de1f001bb95598f74b68a39a5156a608c42fa1b@127.0.0.1:30303" } ``` -## `QBFT` methods - -The `QBFT` API methods provide access to the [QBFT](../HowTo/Configure/Consensus-Protocols/QBFT.md) consensus engine. - -!!! note - - The `QBFT` API methods are not enabled by default for JSON-RPC. To enable the `QBFT` API - methods, use the [`--rpc-http-api`](CLI/CLI-Syntax.md#rpc-http-api) or - [`--rpc-ws-api`](CLI/CLI-Syntax.md#rpc-ws-api) options. - -### `qbft_discardValidatorVote` +### `net_listening` -Discards a proposal to -[add or remove a validator](../HowTo/Configure/Consensus-Protocols/QBFT.md#adding-and-removing-validators) with the specified address. +Whether the client is actively listening for network connections. #### Parameters -`address`: *string* - 20-byte address of proposed validator +None #### Returns -`result`: *boolean* - indicates if the proposal is discarded +`result`: *boolean* - indicates if the client is actively listening for network connections !!! example === "curl HTTP request" ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"qbft_discardValidatorVote","params":["0xef1bfb6a12794615c9b0b5a21e6741f01e570185"], "id":1}' http://127.0.0.1:8545 + curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":53}' http://127.0.0.1:8545 ``` === "wscat WS request" ```bash - {"jsonrpc":"2.0","method":"qbft_discardValidatorVote","params":["0xef1bfb6a12794615c9b0b5a21e6741f01e570185"], "id":1} + {"jsonrpc":"2.0","method":"net_listening","params":[],"id":53} ``` === "JSON result" @@ -6822,15 +4740,14 @@ Discards a proposal to ```json { "jsonrpc" : "2.0", - "id" : 1, + "id" : 53, "result" : true } ``` -### `qbft_getPendingVotes` +### `net_peerCount` -Returns [votes](../HowTo/Configure/Consensus-Protocols/QBFT.md#adding-and-removing-validators) cast in the current -[epoch](../HowTo/Configure/Consensus-Protocols/QBFT.md#genesis-file). +Returns the number of peers currently connected to the client. #### Parameters @@ -6838,85 +4755,61 @@ None #### Returns -`result`: *map* of *strings* to *booleans* - map of account addresses to corresponding boolean values indicating the -vote for each account; if `true`, the vote is to add a validator. If `false`, the proposal is to -remove a validator. +`result`: *string* - number of connected peers in hexadecimal !!! example === "curl HTTP request" ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"qbft_getPendingVotes","params":[], "id":1}' http://127.0.0.1:8545 + curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":53}' http://127.0.0.1:8545 ``` === "wscat WS request" ```bash - {"jsonrpc":"2.0","method":"qbft_getPendingVotes","params":[], "id":1} + {"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":53} ``` === "JSON result" ```json { - "jsonrpc": "2.0", - "id": 1, - "result": { - "0xef1bfb6a12794615c9b0b5a21e6741f01e570185": true, - "0x42d4287eac8078828cf5f3486cfe601a275a49a5": true - } + "jsonrpc" : "2.0", + "id" : 53, + "result" : "0x5" } ``` -### `qbft_getSignerMetrics` - -Provides the following validator metrics for the specified range: +### `net_services` -* Number of blocks from each validator +Returns enabled services (for example, `jsonrpc`) and the host and port for each service. -* Block number of the last block proposed by each validator (if any proposed in the specified - range) +!!! note -* All validators present in the last block of the range + The [`--nat-method`](../cli/options.md#nat-method) setting affects the JSON-RPC and P2P host and + port values, but not the metrics host and port values. #### Parameters -* `fromBlockNumber`: *string* - integer representing a block number or the string tag `earliest` as described -in [Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) - -* `toBlockNumber`: *string* - integer representing a block number or one of the string tags `latest` or -`pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) - -If you specify: - -* No parameters, the call provides metrics for the last 100 blocks, or all blocks if there are less - than 100 blocks. - -* Only the first parameter, the call provides metrics for all blocks from the block specified to - the latest block. +None #### Returns -`result`: *array* of *objects* - list of validator objects - -!!! note - - The proposer of the genesis block has address `0x0000000000000000000000000000000000000000`. +`result`: *object* - enabled services !!! example - === "curl HTTP" + === "curl HTTP request" ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"qbft_getSignerMetrics","params":["1", "100"], "id":1}' http://127.0.0.1:8545 + curl -X POST --data '{"jsonrpc":"2.0","method":"net_services","params":[],"id":1}' http://127.0.0.1:8545 ``` - === "wscat WS" + === "wscat WS request" ```bash - {"jsonrpc":"2.0","method":"qbft_getSignerMetrics","params":["1", "100"], "id":1} + {"jsonrpc":"2.0","method":"net_services","params":[],"id":1} ``` === "JSON result" @@ -6925,144 +4818,131 @@ If you specify: { "jsonrpc": "2.0", "id": 1, - "result": [ - { - "address": "0x7ffc57839b00206d1ad20c69a1981b489f772031", - "proposedBlockCount": "0x21", - "lastProposedBlockNumber": "0x61" + "result": { + "jsonrpc": { + "host": "127.0.0.1", + "port": "8545" }, - { - "address": "0x42eb768f2244c8811c63729a21a3569731535f06", - "proposedBlockCount": "0x21", - "lastProposedBlockNumber": "0x63" + "p2p" : { + "host" : "127.0.0.1", + "port" : "30303" }, - { - "address": "0xb279182d99e65703f0076e4812653aab85fca0f0", - "proposedBlockCount": "0x21", - "lastProposedBlockNumber": "0x62" + "metrics" : { + "host": "127.0.0.1", + "port": "9545" } - ] + } } ``` -### `qbft_getValidatorsByBlockHash` +### `net_version` -Lists the validators defined in the specified block. +Returns the [network ID](../../concepts/network-and-chain-id.md). #### Parameters -`block`: *string* - 32-byte block hash +None #### Returns -`result`: *array* of *strings* - list of validator addresses +`result`: *string* - current network ID + +| Network ID | Chain | Network | Description +|------------|-------|---------|-------------------------------| +| `1` | ETH | Mainnet | Main Ethereum network | +| `3` | ETH | Ropsten | PoS test network | +| `4` | ETH | Rinkeby | PoA test network using Clique | +| `5` | ETH | Goerli | PoA test network using Clique | +| `2018` | ETH | Dev | PoW development network | +| `1` | ETC | Classic | Main Ethereum Classic network | +| `7` | ETC | Mordor | PoW test network | +| `6` | ETC | Kotti | PoA test network using Clique | +| `212` | ETC | Astor | PoW test network | + +!!! note + + For almost all networks, network ID and chain ID are the same. + + The only networks in the table above with different network and chain IDs are + Classic with a chain ID of `61` and Mordor with a chain ID of `63`. !!! example === "curl HTTP request" ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"qbft_getValidatorsByBlockHash","params":["0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256"], "id":1}' http://127.0.0.1:8545 + curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":53}' http://127.0.0.1:8545 ``` === "wscat WS request" ```bash - {"jsonrpc":"2.0","method":"qbft_getValidatorsByBlockHash","params":["0xbae7d3feafd743343b9a4c578cab5e5d65eb735f6855fb845c00cab356331256"], "id":1} + {"jsonrpc":"2.0","method":"net_version","params":[],"id":53} ``` - === "JSON result" + === "JSON result for Mainnet" ```json { - "jsonrpc": "2.0", - "id": 1, - "result": [ - "0x42d4287eac8078828cf5f3486cfe601a275a49a5", - "0xb1b2bc9582d2901afdc579f528a35ca41403fa85", - "0xef1bfb6a12794615c9b0b5a21e6741f01e570185" - ] + "jsonrpc" : "2.0", + "id" : 51, + "result" : "1" } ``` -### `qbft_getValidatorsByBlockNumber` - -Lists the validators defined in the specified block. - -#### Parameters - -* `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, -`earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) - -#### Returns - -`result`: *array* of *strings* - list of validator addresses - -!!! example - - === "curl HTTP request" + === "JSON result for Ropsten" - ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"qbft_getValidatorsByBlockNumber","params":["latest"], "id":1}' http://127.0.0.1:8545 + ```json + { + "jsonrpc" : "2.0", + "id" : 53, + "result" : "3" + } ``` - === "wscat WS request" +## `PLUGINS` methods - ```bash - {"jsonrpc":"2.0","method":"qbft_getValidatorsByBlockNumber","params":["latest"], "id":1} - ``` +The `PLUGINS` API methods provide plugin-related functionality. - === "JSON result" +!!! note - ```json - { - "jsonrpc": "2.0", - "id": 1, - "result": [ - "0x42d4287eac8078828cf5f3486cfe601a275a49a5", - "0xb1b2bc9582d2901afdc579f528a35ca41403fa85", - "0xef1bfb6a12794615c9b0b5a21e6741f01e570185" - ] - } - ``` + The `PLUGINS` API methods are not enabled by default for JSON-RPC. To enable the `PLUGINS` API + methods, use the [`--rpc-http-api`](../cli/options.md#rpc-http-api) or + [`--rpc-ws-api`](../cli/options.md#rpc-ws-api) options. -### `qbft_proposeValidatorVote` +### `plugins_reloadPluginConfig` -Proposes to -[add or remove a validator](../HowTo/Configure/Consensus-Protocols/QBFT.md#adding-and-removing-validators) with the specified address. +Reloads specified plugin configuration. #### Parameters -* `address`: *string* - account address - -* `proposal`: *boolean* - `true` to propose adding validator or `false` to propose removing validator +`plugin`: *string* - plugin #### Returns -`result`: *boolean* - `true` +`result`: *string* - `Success` !!! example === "curl HTTP request" ```bash - curl -X POST --data '{"jsonrpc":"2.0","method":"qbft_proposeValidatorVote","params":["42d4287eac8078828cf5f3486cfe601a275a49a5",true], "id":1}' http://127.0.0.1:8545 + curl -X POST --data '{"jsonrpc":"2.0","method":"plugins_reloadPluginConfig","params":["tech.pegasys.plus.plugin.kafka.KafkaPlugin"],"id":1}' http://127.0.0.1:8545 ``` === "wscat WS request" ```bash - {"jsonrpc":"2.0","method":"qbft_proposeValidatorVote","params":["42d4287eac8078828cf5f3486cfe601a275a49a5",true], "id":1} + {"jsonrpc":"2.0","method":"plugins_reloadPluginConfig","params":["tech.pegasys.plus.plugin.kafka.KafkaPlugin"],"id":1} ``` === "JSON result" ```json { - "jsonrpc" : "2.0", - "id" : 1, - "result" : true + "jsonrpc": "2.0", + "id": 1, + "result": "Success" } ``` @@ -7073,31 +4953,31 @@ The `TRACE` API is a more concise alternative to the [`DEBUG` API](#debug-method !!! note The `TRACE` API methods are not enabled by default for JSON-RPC. To enable the `TRACE` API - methods, use the [`--rpc-http-api`](CLI/CLI-Syntax.md#rpc-http-api) or - [`--rpc-ws-api`](CLI/CLI-Syntax.md#rpc-ws-api) options. + methods, use the [`--rpc-http-api`](../cli/options.md#rpc-http-api) or + [`--rpc-ws-api`](../cli/options.md#rpc-ws-api) options. ### `trace_block` -Provides transaction processing of [type `trace`](Trace-Types.md#trace) for the specified block. +Provides transaction processing of [type `trace`](../trace-types.md#trace) for the specified block. !!! important Your node must be an archive node (that is, synchronized without pruning or fast sync) or the - requested block must be within the number of [blocks retained](CLI/CLI-Syntax.md#pruning-blocks-retained) with [pruning enabled](CLI/CLI-Syntax.md#pruning-enabled) - (by default, 1024). + requested block must be within the number of [blocks retained](../cli/options.md#pruning-blocks-retained) + with [pruning enabled](../cli/options.md#pruning-enabled) (by default, 1024). #### Parameters `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) #### Returns -`result`: *array* of *objects* - list of [calls to other contracts](Trace-Types.md#trace) containing +`result`: *array* of *objects* - list of [calls to other contracts](../trace-types.md#trace) containing one object per call, in transaction execution order; if revert reason is enabled with -[`--revert-reason-enabled`](CLI/CLI-Syntax.md#revert-reason-enabled), -the returned list items include the [revert reason](../HowTo/Send-Transactions/Revert-Reason.md). +[`--revert-reason-enabled`](../cli/options.md#revert-reason-enabled), +the returned list items include the [revert reason](../../../private-networks/how-to/send-transactions/revert-reason.md). !!! example @@ -7184,24 +5064,24 @@ Executes the given call and returns a number of possible traces for it. !!! important The requested transaction must be contained in a block within the number of - [blocks retained](CLI/CLI-Syntax.md#pruning-blocks-retained) with [pruning enabled](CLI/CLI-Syntax.md#pruning-enabled) + [blocks retained](../cli/options.md#pruning-blocks-retained) with [pruning enabled](../cli/options.md#pruning-enabled) (by default, 1024). #### Parameters -* `call`: *object* - [transaction call object](API-Objects.md#transaction-call-object) +* `call`: *object* - [transaction call object](objects.md#transaction-call-object) * `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) * `options`: *array* of *strings* - list of tracing options; tracing options are -[`trace`, `vmTrace`, and `stateDiff`](Trace-Types.md). Specify any +[`trace`, `vmTrace`, and `stateDiff`](../trace-types.md). Specify any combination of the three options including none of them. #### Returns -`result`: *array* of *objects* - list of [calls to other contracts](Trace-Types.md#trace) containing +`result`: *array* of *objects* - list of [calls to other contracts](../trace-types.md#trace) containing one object per call, in transaction execution order !!! example @@ -7255,23 +5135,23 @@ Performs multiple call traces on top of the same block. You can trace dependent !!! important - The requested block must be within the number of [blocks retained](CLI/CLI-Syntax.md#pruning-blocks-retained) - with [pruning enabled](CLI/CLI-Syntax.md#pruning-enabled) + The requested block must be within the number of [blocks retained](../cli/options.md#pruning-blocks-retained) + with [pruning enabled](../cli/options.md#pruning-enabled) (by default, 1024). #### Parameters * `options`: *array* of *strings* - list of tracing options; tracing options are - [`trace`, `vmTrace`, and `stateDiff`](Trace-Types.md). Specify any + [`trace`, `vmTrace`, and `stateDiff`](../trace-types.md). Specify any combination of the three options including none of them. * `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in - [Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) + [Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) #### Returns -`result`: *array* of *objects* - list of [calls to other contracts](Trace-Types.md#trace) containing +`result`: *array* of *objects* - list of [calls to other contracts](../trace-types.md#trace) containing one object per call, in transaction execution order !!! example @@ -7350,16 +5230,16 @@ Returns traces matching the specified filter. !!! important Your node must be an archive node (that is, synchronized without pruning or fast sync) or the - requested block must be within the number of [blocks retained](CLI/CLI-Syntax.md#pruning-blocks-retained) with [pruning enabled](CLI/CLI-Syntax.md#pruning-enabled) - (by default, 1024). + requested block must be within the number of [blocks retained](../cli/options.md#pruning-blocks-retained) + with [pruning enabled](../cli/options.md#pruning-enabled) (by default, 1024). #### Parameters -`traceFilterOptions`: *object* - [trace filter options object](API-Objects.md#trace-filter-options-object) +`traceFilterOptions`: *object* - [trace filter options object](objects.md#trace-filter-options-object) #### Returns -`result`: *array* of *objects* - list of [calls to other contracts](Trace-Types.md#trace) containing +`result`: *array* of *objects* - list of [calls to other contracts](../trace-types.md#trace) containing one object per call, in transaction execution order !!! example @@ -7437,7 +5317,8 @@ Returns trace at given position. Your node must be an archive node (that is, synchronized without pruning or fast sync) or the requested transaction must be contained in a block within - the number of [blocks retained](CLI/CLI-Syntax.md#pruning-blocks-retained) with [pruning enabled](CLI/CLI-Syntax.md#pruning-enabled) (by default, 1024). + the number of [blocks retained](../cli/options.md#pruning-blocks-retained) with + [pruning enabled](../cli/options.md#pruning-enabled) (by default, 1024). #### Parameters @@ -7447,7 +5328,7 @@ Returns trace at given position. #### Returns -`result`: *array* of *objects* - list of [calls to other contracts](Trace-Types.md#trace) containing +`result`: *array* of *objects* - list of [calls to other contracts](../trace-types.md#trace) containing one object per call, in the order called by the transaction !!! example @@ -7503,19 +5384,20 @@ Traces a call to `eth_sendRawTransaction` without making the call, returning the !!! important The requested transaction must be contained in a block within - the number of [blocks retained](CLI/CLI-Syntax.md#pruning-blocks-retained) with [pruning enabled](CLI/CLI-Syntax.md#pruning-enabled) (by default, 1024). + the number of [blocks retained](../cli/options.md#pruning-blocks-retained) with + [pruning enabled](../cli/options.md#pruning-enabled) (by default, 1024). #### Parameters * `data` - *string* - Raw transaction data * `options`: *array* of *strings* - list of tracing options; tracing options are - [`trace`, `vmTrace`, and `stateDiff`](Trace-Types.md). Specify any + [`trace`, `vmTrace`, and `stateDiff`](../trace-types.md). Specify any combination of the three options including none of them. #### Returns -`result`: *array* of *objects* - list of [calls to other contracts](Trace-Types.md#trace) containing +`result`: *array* of *objects* - list of [calls to other contracts](../trace-types.md#trace) containing one object per call, in the order called by the transaction !!! example @@ -7563,26 +5445,26 @@ Provides transaction processing tracing per block. !!! important - The requested block must be within the number of [blocks retained](CLI/CLI-Syntax.md#pruning-blocks-retained) with [pruning enabled](CLI/CLI-Syntax.md#pruning-enabled) - (by default, 1024). + The requested block must be within the number of [blocks retained](../cli/options.md#pruning-blocks-retained) + with [pruning enabled](../cli/options.md#pruning-enabled) (by default, 1024). #### Parameters * `blockNumber`: *string* - integer representing a block number or one of the string tags `latest`, `earliest`, or `pending`, as described in -[Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter) +[Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter) * `options`: *array* of *strings* - list of tracing options; tracing options are -[`trace`, `vmTrace`, and `stateDiff`](Trace-Types.md). Specify any +[`trace`, `vmTrace`, and `stateDiff`](../trace-types.md). Specify any combination of the three options including none of them. #### Returns -`result`: *array* of *objects* - list of [transaction trace objects](API-Objects.md#transaction-trace-object) containing +`result`: *array* of *objects* - list of [transaction trace objects](objects.md#transaction-trace-object) containing one object per transaction, in transaction execution order; if revert reason is enabled with -[`--revert-reason-enabled`](CLI/CLI-Syntax.md#revert-reason-enabled), -the [`trace`](Trace-Types.md#trace) list items in the returned transaction trace object include the -[revert reason](../HowTo/Send-Transactions/Revert-Reason.md). +[`--revert-reason-enabled`](../cli/options.md#revert-reason-enabled), +the [`trace`](../trace-types.md#trace) list items in the returned transaction trace object include the +[revert reason](../../../private-networks/how-to/send-transactions/revert-reason.md). !!! example @@ -7674,13 +5556,14 @@ the [`trace`](Trace-Types.md#trace) list items in the returned transaction trace ### `trace_transaction` -Provides transaction processing of [type `trace`](Trace-Types.md#trace) for the specified transaction. +Provides transaction processing of [type `trace`](../trace-types.md#trace) for the specified transaction. !!! important Your node must be an archive node (that is, synchronized without pruning or fast sync) or the requested transaction must be contained in a block within - the number of [blocks retained](CLI/CLI-Syntax.md#pruning-blocks-retained) with [pruning enabled](CLI/CLI-Syntax.md#pruning-enabled) (by default, 1024). + the number of [blocks retained](../cli/options.md#pruning-blocks-retained) with + [pruning enabled](../cli/options.md#pruning-enabled) (by default, 1024). #### Parameters @@ -7688,10 +5571,10 @@ Provides transaction processing of [type `trace`](Trace-Types.md#trace) for the #### Returns -`result`: *array* of *objects* - list of [calls to other contracts](Trace-Types.md#trace) containing +`result`: *array* of *objects* - list of [calls to other contracts](../trace-types.md#trace) containing one object per call, in the order called by the transaction; if revert reason is enabled with -[`--revert-reason-enabled`](CLI/CLI-Syntax.md#revert-reason-enabled), -the returned list items include the [revert reason](../HowTo/Send-Transactions/Revert-Reason.md). +[`--revert-reason-enabled`](../cli/options.md#revert-reason-enabled), +the returned list items include the [revert reason](../../../private-networks/how-to/send-transactions/revert-reason.md). !!! example @@ -7810,8 +5693,8 @@ The `TXPOOL` API methods allow you to inspect the contents of the transaction po !!! note The `TXPOOL` API methods are not enabled by default for JSON-RPC. To enable the `TXPOOL` API - methods, use the [`--rpc-http-api`](CLI/CLI-Syntax.md#rpc-http-api) or - [`--rpc-ws-api`](CLI/CLI-Syntax.md#rpc-ws-api) options. + methods, use the [`--rpc-http-api`](../cli/options.md#rpc-http-api) or + [`--rpc-ws-api`](../cli/options.md#rpc-ws-api) options. ### `txpool_besuPendingTransactions` @@ -7857,7 +5740,7 @@ Supported operators: #### Returns `result`: *array* of *objects* - list of objects with -[details of the pending transaction](API-Objects.md#pending-transaction-object) +[details of the pending transaction](objects.md#pending-transaction-object) !!! example @@ -7910,7 +5793,7 @@ None `result`: *object* - transaction pool statistics object with the following fields: * `maxSize`: *number* - maximum number of transactions kept in the transaction pool; use the - [`--tx-pool-max-size`](CLI/CLI-Syntax.md#tx-pool-max-size) option to configure the maximum size. + [`--tx-pool-max-size`](../cli/options.md#tx-pool-max-size) option to configure the maximum size. * `localCount`: *number* - number of transactions submitted directly to this node @@ -8072,7 +5955,7 @@ The result value is a [Keccak-256](https://keccak.team/keccak.html) hash, not th ### `rpc_modules` -Lists [enabled APIs](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#api-methods-enabled-by-default) +Lists [enabled APIs](../../how-to/use-besu-api/json-rpc.md#api-methods-enabled-by-default) and the version of each. #### Parameters @@ -8113,12 +5996,5 @@ None [schema]: https://github.com/hyperledger/besu/blob/750580dcca349d22d024cc14a8171b2fa74b505a/ethereum/api/src/main/resources/schema.graphqls -[eth_sendRawTransaction or eth_call]: ../HowTo/Send-Transactions/Transactions.md#eth_call-or-eth_sendrawtransaction +[eth_sendRawTransaction or eth_call]: ../../how-to/send-transactions.md#eth_call-or-eth_sendrawtransaction [transaction]: https://ropsten.etherscan.io/tx/0xfc766a71c406950d4a4955a340a092626c35083c64c7be907060368a5e6811d6 -[add or remove a signer with the specified address]: ../HowTo/Configure/Consensus-Protocols/Clique.md#add-and-remove-signers -[signers for the specified block]: ../HowTo/Configure/Consensus-Protocols/Clique.md#adding-and-removing-signers -[add or remove a validator]: ../HowTo/Configure/Consensus-Protocols/IBFT.md#add-and-remove-validators -[permissions configuration file]: ../HowTo/Limit-Access/Local-Permissioning.md#permissions-configuration-file -[group of sender and recipients]: ../Concepts/Privacy/Privacy-Groups.md#enterprise-ethereum-alliance-privacy - -*[EEA]: Enterprise Ethereum Alliance diff --git a/docs/Reference/API-Objects.md b/docs/public-networks/reference/api/objects.md similarity index 65% rename from docs/Reference/API-Objects.md rename to docs/public-networks/reference/api/objects.md index c0b1cf74..f007008d 100644 --- a/docs/Reference/API-Objects.md +++ b/docs/public-networks/reference/api/objects.md @@ -2,14 +2,20 @@ description: Hyperledger Besu API objects reference --- -# Hyperledger Besu API objects +# Besu API objects The following objects are parameters for or returned by Besu API methods. +!!! attention + + This reference contains API objects that apply to both public and private networks. + For private-network-specific API objects, see the + [private network API object reference](../../../private-networks/reference/api/objects.md). + ## Block object -Returned by [`eth_getBlockByHash`](API-Methods.md#eth_getblockbyhash) and -[`eth_getBlockByNumber`](API-Methods.md#eth_getblockbynumber). +Returned by [`eth_getBlockByHash`](index.md#eth_getblockbyhash) and +[`eth_getBlockByNumber`](index.md#eth_getblockbynumber). | Key | Type | Value | |-----|:----:|-------| @@ -25,18 +31,18 @@ Returned by [`eth_getBlockByHash`](API-Methods.md#eth_getblockbyhash) and | **miner** | Data, 20 bytes | Address to pay mining rewards to. | | **difficulty** | Quantity, Integer | Difficulty for this block. | | **totalDifficulty** | Quantity, Integer | Total difficulty of the chain until this block. | -| **extraData** | Data | Extra data field for this block. The first 32 bytes is vanity data you can set using the [`--miner-extra-data`](../Reference/CLI/CLI-Syntax.md#miner-extra-data) command line option. Stores extra data when used with [Clique](../HowTo/Configure/Consensus-Protocols/Clique.md#genesis-file) and [IBFT](../HowTo/Configure/Consensus-Protocols/IBFT.md#genesis-file). | +| **extraData** | Data | Extra data field for this block. The first 32 bytes is vanity data you can set using the [`--miner-extra-data`](../cli/options.md#miner-extra-data) command line option. Stores extra data when used with [Clique](../../../private-networks/how-to/configure/consensus/clique.md#genesis-file) and [IBFT](../../../private-networks/how-to/configure/consensus/ibft.md#genesis-file). | | **size** | Quantity, Integer | Size of block in bytes. | | **gasLimit** | Quantity | Maximum gas allowed in this block. | | **gasUsed** | Quantity | Total gas used by all transactions in this block. | | **timestamp** | Quantity | Unix timestamp for block assembly. | | **transactions** | Array | Array of [transaction objects](#transaction-object), or 32 byte transaction hashes depending on the specified boolean parameter. | | **uncles** | Array | Array of uncle hashes. | -| **baseFeePerGas** | Quantity | The block's [base fee per gas](../Concepts/Transactions/Transaction-Types.md#eip1559-transactions). This field is empty for blocks created before [EIP-1559](https://github.com/ethereum/EIPs/blob/2d8a95e14e56de27c5465d93747b0006bd8ac47f/EIPS/eip-1559.md). | +| **baseFeePerGas** | Quantity | The block's [base fee per gas](../../concepts/transactions/types.md#eip1559-transactions). This field is empty for blocks created before [EIP-1559](https://github.com/ethereum/EIPs/blob/2d8a95e14e56de27c5465d93747b0006bd8ac47f/EIPS/eip-1559.md). | ## Fee history results object -Returned by [`eth_feeHistory`](API-Methods.md#eth_feehistory) for the requested block range. +Returned by [`eth_feeHistory`](index.md#eth_feehistory) for the requested block range. If blocks in the specified block range are not available, then only the fee history for available blocks is returned. | Key | Type | Value | @@ -47,18 +53,18 @@ If blocks in the specified block range are not available, then only the fee hist ## Filter options object -Parameter for [`eth_newFilter`](API-Methods.md#eth_newfilter), -[`eth_getLogs`](API-Methods.md#eth_getlogs), and [`priv_getLogs`](API-Methods.md#priv_getlogs). -Used to [`filter logs`](../HowTo/Interact/Filters/Accessing-Logs-Using-JSON-RPC.md). +Parameter for [`eth_newFilter`](index.md#eth_newfilter), +[`eth_getLogs`](index.md#eth_getlogs), and [`priv_getLogs`](../../../private-networks/reference/api/index.md#priv_getlogs). +Used to [`filter logs`](../../how-to/use-besu-api/access-logs.md). | Key | Type | Required/Optional | Value | |-----|:----:|:-----------------:|-------| -| **fromBlock** | Quantity | Tag | Optional | Integer block number or `latest`, `pending`, `earliest`. See [Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter). Default is `latest`. | -| **toBlock** | Quantity | Tag | Optional | Integer block number or `latest`, `pending`, `earliest`. See [Block Parameter](../HowTo/Interact/APIs/Using-JSON-RPC-API.md#block-parameter). Default is `latest`. | -| **address** | Data | Array | Optional | Contract address or array of addresses from which [logs](../Concepts/Events-and-Logs.md) originate. | -| **topics** | Array of Data, 32 bytes each | Optional | Array of topics by which to [filter logs](../Concepts/Events-and-Logs.md#topic-filters). | +| **fromBlock** | Quantity | Tag | Optional | Integer block number or `latest`, `pending`, `earliest`. See [Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter). Default is `latest`. | +| **toBlock** | Quantity | Tag | Optional | Integer block number or `latest`, `pending`, `earliest`. See [Block Parameter](../../how-to/use-besu-api/json-rpc.md#block-parameter). Default is `latest`. | +| **address** | Data | Array | Optional | Contract address or array of addresses from which [logs](../../concepts/events-and-logs.md) originate. | +| **topics** | Array of Data, 32 bytes each | Optional | Array of topics by which to [filter logs](../../concepts/events-and-logs.md#topic-filters). | -[`eth_getLogs`](API-Methods.md#eth_getlogs) and [`priv_getLogs`](API-Methods.md#priv_getlogs) have an +[`eth_getLogs`](index.md#eth_getlogs) and [`priv_getLogs`](index.md#priv_getlogs) have an extra key. | Key | Type | Required/Optional | Value | @@ -67,7 +73,7 @@ extra key. ## Log object -Returned by [`eth_getFilterChanges`](API-Methods.md#eth_getfilterchanges) and [`priv_getLogs`](API-Methods.md#priv_getlogs). +Returned by [`eth_getFilterChanges`](index.md#eth_getfilterchanges) and [`priv_getLogs`](../../../private-networks/reference/api/index.md#priv_getlogs). [`Transaction receipt objects`](#transaction-receipt-object) can contain an array of log objects. | Key | Type | Value | @@ -80,12 +86,12 @@ Returned by [`eth_getFilterChanges`](API-Methods.md#eth_getfilterchanges) and [` | **blockNumber** | Quantity | Number of block that includes the log. `null` when log is pending. | | **address** | Data, 20 bytes | Address the log originated from. | | **data** | Data | Non-indexed arguments of the log. | -| **topics** | Array of Data, 32 bytes each | [Event signature hash](../Concepts/Events-and-Logs.md#event-signature-hash) and 0 to 3 [indexed log arguments](../Concepts/Events-and-Logs.md#event-parameters). | +| **topics** | Array of Data, 32 bytes each | [Event signature hash](../../concepts/events-and-logs.md#event-signature-hash) and 0 to 3 [indexed log arguments](../../concepts/events-and-logs.md#event-parameters). | ## Miner data object -Returned by [`eth_getMinerDataByBlockHash`](API-Methods.md#eth_getminerdatabyblockhash) and -[`eth_getMinerDataByBlockNumber`](API-Methods.md#eth_getminerdatabyblocknumber). +Returned by [`eth_getMinerDataByBlockHash`](index.md#eth_getminerdatabyblockhash) and +[`eth_getMinerDataByBlockNumber`](index.md#eth_getminerdatabyblocknumber). | Key | Type | Value | |-----|:----:|-------| @@ -95,56 +101,35 @@ Returned by [`eth_getMinerDataByBlockHash`](API-Methods.md#eth_getminerdatabyblo | **uncleInclusionReward** | Quantity, Integer | The uncle inclusion reward, in Wei, is `static block reward * number of ommers/32`. | | **uncleRewards** | Map | Map of uncle block hashes and uncle miner coinbase addresses. | | **coinbase** | Data, 20 bytes | Coinbase address. | -| **extraData** | Data | Extra data field for this block. The first 32 bytes is vanity data you can set using the [`--miner-extra-data`](../Reference/CLI/CLI-Syntax.md#miner-extra-data) command line option. | +| **extraData** | Data | Extra data field for this block. The first 32 bytes is vanity data you can set using the [`--miner-extra-data`](../cli/options.md#miner-extra-data) command line option. | | **difficulty** | Quantity, Integer | Difficulty of this block. | | **totalDifficulty** | Quantity, Integer | Total difficulty of the chain until this block. | ## Pending transaction object -Returned by [`txpool_besuPendingTransactions`](API-Methods.md#txpool_besupendingtransactions). +Returned by [`txpool_besuPendingTransactions`](index.md#txpool_besupendingtransactions). | Key | Type | Value | |-----|:----:|-------| -| **accessList** | Array | (Optional) List of addresses and storage keys the transaction plans to access. Used in [`ACCESS_LIST` transactions](../Concepts/Transactions/Transaction-Types.md#access_list-transactions) and may be used in [`EIP1559` transactions](../Concepts/Transactions/Transaction-Types.md#eip1559-transactions). | +| **accessList** | Array | (Optional) List of addresses and storage keys the transaction plans to access. Used in [`ACCESS_LIST` transactions](../../concepts/transactions/types.md#access_list-transactions) and may be used in [`EIP1559` transactions](../../concepts/transactions/types.md#eip1559-transactions). | | **from** | Data, 20 bytes | Address of the sender. | | **gas** | Quantity | Gas provided by the sender. | -| **gasPrice** | Quantity | (Optional) Gas price, in Wei, provided by the sender. Not used only in [`EIP1559` transactions](../Concepts/Transactions/Transaction-Types.md#eip1559-transactions). | -| **maxPriorityFeePerGas** | Quantity, Integer | (Optional) Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. Used only in [`EIP1559` transactions](../Concepts/Transactions/Transaction-Types.md#eip1559-transactions). | -| **maxFeePerGas** | Quantity, Integer | (Optional) Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. Used only in [`EIP1559` transactions](../Concepts/Transactions/Transaction-Types.md#eip1559-transactions). | +| **gasPrice** | Quantity | (Optional) Gas price, in Wei, provided by the sender. Not used only in [`EIP1559` transactions](../../concepts/transactions/types.md#eip1559-transactions). | +| **maxPriorityFeePerGas** | Quantity, Integer | (Optional) Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. Used only in [`EIP1559` transactions](../../concepts/transactions/types.md#eip1559-transactions). | +| **maxFeePerGas** | Quantity, Integer | (Optional) Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. Used only in [`EIP1559` transactions](../../concepts/transactions/types.md#eip1559-transactions). | | **hash** | Data, 32 bytes | Hash of the transaction. | | **input** | Data | Data sent with the transaction to create or invoke a contract. | | **nonce** | Quantity | Number of transactions made by the sender before this one. | | **to** | Data, 20 bytes | Address of the receiver. `null` if a contract creation transaction. | -| **transactionType** | String | [Transaction type](../Concepts/Transactions/Transaction-Types.md). | +| **transactionType** | String | [Transaction type](../../concepts/transactions/types.md). | | **value** | Quantity | Value transferred, in Wei. | | **v** | Quantity | ECDSA Recovery ID. | | **r** | Data, 32 bytes | ECDSA signature r. | | **s** | Data, 32 bytes | ECDSA signature s. | -## Private transaction object - -Returned by [`priv_getPrivateTransaction`](API-Methods.md#priv_getprivatetransaction). - -| Key | Type | Value | -|-----|:----:|-------| -| **from** | Data, 20 bytes | Address of the sender. | -| **gas** | Quantity | Gas provided by the sender. | -| **gasPrice** | Quantity | Gas price, in Wei, provided by the sender. | -| **input** | Data | The data to create or invoke a contract. | -| **nonce** | Quantity | Number of transactions made by the sender to the privacy group before this one. | -| **to** | Data, 20 bytes | `null` if a contract creation transaction, otherwise, the contract address. | -| **value** | Quantity | `null` because private transactions cannot transfer Ether. | -| **v** | Quantity | ECDSA Recovery ID. | -| **r** | Data, 32 bytes | ECDSA signature r. | -| **s** | Data, 32 bytes | ECDSA signature s. | -| **privateFrom** | Data, 32 bytes | [Tessera](https://docs.tessera.consensys.net/) public key of the sender. | -| **privateFor** | Array of Data, 32 bytes each | [Tessera](https://docs.tessera.consensys.net/) public keys of recipients. Not returned if using `privacyGroupId` to [send the transaction](../Concepts/Privacy/Privacy-Groups.md#privacy-types). | -| **privacyGroupId** | Data, 32 bytes | [Tessera](https://docs.tessera.consensys.net/) privacy group ID of recipients. Not returned if using `privateFor` to [send the transaction](../Concepts/Privacy/Privacy-Groups.md#privacy-types). | -| **restriction** | String | Must be [`restricted`](../Concepts/Privacy/Private-Transactions.md). | - ## Range object -Returned by [`debug_storageRangeAt`](API-Methods.md#debug_storagerangeat). +Returned by [`debug_storageRangeAt`](index.md#debug_storagerangeat). | Key | Type | Value | |-----|:----:|-------| @@ -169,10 +154,10 @@ Log information returned as part of the [Trace object](#trace-object). ## Trace object -Returned by [`debug_traceBlock`](API-Methods.md#debug_traceblock), -[`debug_traceBlockByHash`](API-Methods.md#debug_traceblockbyhash), -[`debug_traceBlockByNumber`](API-Methods.md#debug_traceblockbynumber), and -[`debug_traceTransaction`](API-Methods.md#debug_tracetransaction). +Returned by [`debug_traceBlock`](index.md#debug_traceblock), +[`debug_traceBlockByHash`](index.md#debug_traceblockbyhash), +[`debug_traceBlockByNumber`](index.md#debug_traceblockbynumber), and +[`debug_traceTransaction`](index.md#debug_tracetransaction). | Key | Type | Value | |-----|:----:|-------| @@ -183,7 +168,7 @@ Returned by [`debug_traceBlock`](API-Methods.md#debug_traceblock), ## Trace filter options object -Parameter for [`trace_filter`](API-Methods.md#trace_filter). All parameters are optional. +Parameter for [`trace_filter`](index.md#trace_filter). All parameters are optional. | Key | Type | Value | |-----|:----:|-------| @@ -196,30 +181,30 @@ Parameter for [`trace_filter`](API-Methods.md#trace_filter). All parameters are ## Transaction object -Returned by [`eth_getTransactionByHash`](API-Methods.md#eth_gettransactionbyhash), -[`eth_getTransactionByBlockHashAndIndex`](API-Methods.md#eth_gettransactionbyblockhashandindex), +Returned by [`eth_getTransactionByHash`](index.md#eth_gettransactionbyhash), +[`eth_getTransactionByBlockHashAndIndex`](index.md#eth_gettransactionbyblockhashandindex), and -[`eth_getTransactionByBlockNumberAndIndex`](API-Methods.md#eth_gettransactionbyblocknumberandindex). +[`eth_getTransactionByBlockNumberAndIndex`](index.md#eth_gettransactionbyblocknumberandindex). | Key | Type | Value | |-----|:----:|-------| -| **accessList** | Array | (Optional) List of addresses and storage keys the transaction plans to access. Used in [`ACCESS_LIST` transactions](../Concepts/Transactions/Transaction-Types.md#access_list-transactions) and may be used in [`EIP1559` transactions](../Concepts/Transactions/Transaction-Types.md#eip1559-transactions). | +| **accessList** | Array | (Optional) List of addresses and storage keys the transaction plans to access. Used in [`ACCESS_LIST` transactions](../../concepts/transactions/types.md#access_list-transactions) and may be used in [`EIP1559` transactions](../../concepts/transactions/types.md#eip1559-transactions). | | **blockHash** | Data, 32 bytes | Hash of the block containing this transaction. `null` when transaction is pending. | | **blockNumber** | Quantity | Block number of the block containing this transaction. `null` when transaction is pending. | -| **chainId** | Quantity | [Chain ID](../Concepts/NetworkID-And-ChainID.md). | +| **chainId** | Quantity | [Chain ID](../../concepts/network-and-chain-id.md). | | **from** | Data, 20 bytes | Address of the sender. | | **gas** | Quantity | Gas provided by the sender. | -| **gasPrice** | Quantity | (Optional) Gas price, in Wei, provided by the sender. Used only in non-[`EIP1559`](../Concepts/Transactions/Transaction-Types.md#eip1559-transactions) transactions. | -| **maxPriorityFeePerGas** | Quantity, Integer | (Optional) Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. Used only in [`EIP1559` transactions](../Concepts/Transactions/Transaction-Types.md#eip1559-transactions). | -| **maxFeePerGas** | Quantity, Integer | (Optional) Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. Used only in [`EIP1559` transactions](../Concepts/Transactions/Transaction-Types.md#eip1559-transactions). | +| **gasPrice** | Quantity | (Optional) Gas price, in Wei, provided by the sender. Used only in non-[`EIP1559`](../../concepts/transactions/types.md#eip1559-transactions) transactions. | +| **maxPriorityFeePerGas** | Quantity, Integer | (Optional) Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. Used only in [`EIP1559` transactions](../../concepts/transactions/types.md#eip1559-transactions). | +| **maxFeePerGas** | Quantity, Integer | (Optional) Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. Used only in [`EIP1559` transactions](../../concepts/transactions/types.md#eip1559-transactions). | | **hash** | Data, 32 bytes | Hash of the transaction. | -| **input** | Data | Data sent with the transaction to create or invoke a contract. For [private transactions](../Concepts/Privacy/Privacy-Overview.md), it's a pointer to the transaction location in [Tessera](https://docs.tessera.consensys.net/). | +| **input** | Data | Data sent with the transaction to create or invoke a contract. For [private transactions](../../../private-networks/concepts/privacy/index.md), it's a pointer to the transaction location in [Tessera](https://docs.tessera.consensys.net/). | | **nonce** | Quantity | Number of transactions made by the sender before this one. | | **publicKey** | Data, 64 bytes | Public key of the sender. | | **raw** | Data | This signed transaction in Recursive Length Prefix (RLP) encoded form. | | **to** | Data, 20 bytes | Address of the receiver. `null` if a contract creation transaction. | | **transactionIndex** | Quantity, Integer | Index position of the transaction in the block. `null` when transaction is pending. | -| **transactionType** | String | [Transaction type](../Concepts/Transactions/Transaction-Types.md). | +| **transactionType** | String | [Transaction type](../../concepts/transactions/types.md). | | **value** | Quantity | Value transferred, in Wei. | | **v** | Quantity | ECDSA Recovery ID. | | **r** | Data, 32 bytes | ECDSA signature r. | @@ -227,8 +212,8 @@ and ## Transaction call object -Parameter for [`eth_call`](API-Methods.md#eth_call) and -[`eth_estimateGas`](API-Methods.md#eth_estimategas). +Parameter for [`eth_call`](index.md#eth_call) and +[`eth_estimateGas`](index.md#eth_estimategas). All transaction call object parameters are optional. @@ -237,16 +222,16 @@ All transaction call object parameters are optional. | **from** | Data, 20 bytes | Address of the sender. | | **to** | Data, 20 bytes | Address of the action receiver. | | **gas** | Quantity, Integer | Gas provided by the sender. `eth_call` consumes zero gas, but other executions might need this parameter. `eth_estimateGas` ignores this value. | -| **gasPrice** | Quantity, Integer | Gas price, in Wei, provided by the sender. The default is `0`. Used only in non-[`EIP1559`](../Concepts/Transactions/Transaction-Types.md#eip1559-transactions) transactions. | -| **maxPriorityFeePerGas** | Quantity, Integer | Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. Can be used only in [`EIP1559` transactions](../Concepts/Transactions/Transaction-Types.md#eip1559-transactions). If used, must specify `maxFeePerGas`. | -| **maxFeePerGas** | Quantity, Integer | Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. Can be used only in [`EIP1559` transactions](../Concepts/Transactions/Transaction-Types.md#eip1559-transactions). If used, must specify `maxPriorityFeePerGas`. | +| **gasPrice** | Quantity, Integer | Gas price, in Wei, provided by the sender. The default is `0`. Used only in non-[`EIP1559`](../../concepts/transactions/types.md#eip1559-transactions) transactions. | +| **maxPriorityFeePerGas** | Quantity, Integer | Maximum fee, in Wei, the sender is willing to pay per gas above the base fee. Can be used only in [`EIP1559` transactions](../../concepts/transactions/types.md#eip1559-transactions). If used, must specify `maxFeePerGas`. | +| **maxFeePerGas** | Quantity, Integer | Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay per gas. Can be used only in [`EIP1559` transactions](../../concepts/transactions/types.md#eip1559-transactions). If used, must specify `maxPriorityFeePerGas`. | | **value** | Quantity, Integer | Value transferred, in Wei. | | **data** | Data | Hash of the method signature and encoded parameters. For details, see [Ethereum Contract ABI](https://solidity.readthedocs.io/en/develop/abi-spec.html). | | **strict** | Tag | If `true`, checks that the `from` account’s ether balance is sufficient to cover the transaction and gas fee. If `false`, the `gasPrice` and `baseFee` are set to zero, in order to simulate a transaction without enforcing a balance check. The default is `false`. | ## Transaction receipt object -Returned by [`eth_getTransactionReceipt`](API-Methods.md#eth_gettransactionreceipt). +Returned by [`eth_getTransactionReceipt`](index.md#eth_gettransactionreceipt). | Key | Type | Value | |-----|:----:|-------| @@ -254,7 +239,7 @@ Returned by [`eth_getTransactionReceipt`](API-Methods.md#eth_gettransactionrecei | **blockNumber** | Quantity | Block number of block containing this transaction. | | **contractAddress** | Data, 20 bytes | Contract address created, if contract creation transaction, otherwise, `null`. A failed contract creation transaction still produces a contract address value. | | **cumulativeGasUsed** | Quantity | Total amount of gas used by previous transactions in the block and this transaction. | -| **effectiveGasPrice** | Quantity | The [actual value per gas deducted](../Concepts/Transactions/Transaction-Types.md#eip1559-transactions) from the sender's account. | +| **effectiveGasPrice** | Quantity | The [actual value per gas deducted](../../concepts/transactions/types.md#eip1559-transactions) from the sender's account. | | **from** | Data, 20 bytes | Address of the sender. | | **gasUsed** | Quantity | Amount of gas used by this specific transaction. | | **logs** | Array | Array of [log objects](#log-object) generated by this transaction. | @@ -263,8 +248,8 @@ Returned by [`eth_getTransactionReceipt`](API-Methods.md#eth_gettransactionrecei | **to** | Data, 20 bytes | Address of the receiver, if sending ether, otherwise, null. | | **transactionHash** | Data, 32 bytes | Hash of the transaction. | | **transactionIndex** | Quantity, Integer | Index position of transaction in the block. | -| **transactionType** | String | [Transaction type](../Concepts/Transactions/Transaction-Types.md). | -| **revertReason** | String | ABI-encoded string that displays the [reason for reverting the transaction](../HowTo/Send-Transactions/Revert-Reason.md). Only available if revert reason is [enabled](../Reference/CLI/CLI-Syntax.md#revert-reason-enabled). | +| **transactionType** | String | [Transaction type](../../concepts/transactions/types.md). | +| **revertReason** | String | ABI-encoded string that displays the [reason for reverting the transaction](../../../private-networks/how-to/send-transactions/revert-reason.md). Only available if revert reason is [enabled](../cli/options.md#revert-reason-enabled). | !!!note @@ -277,33 +262,12 @@ Returned by [`eth_getTransactionReceipt`](API-Methods.md#eth_gettransactionrecei ## Transaction trace object -Returned by [`trace_replayBlockTransactions`](API-Methods.md#trace_replayblocktransactions). +Returned by [`trace_replayBlockTransactions`](index.md#trace_replayblocktransactions). | Key | Type | Value | |-----|:----:|-------| | **output** | Boolean | Transaction result. 1 for success and 0 for failure. | -| **stateDiff** | Object | [State changes in the requested block](Trace-Types.md#statediff). | -| **trace** | Array | [Ordered list of calls to other contracts](Trace-Types.md#trace). | -| **vmTrace** | Object | [Ordered list of EVM actions](Trace-Types.md#vmtrace). | +| **stateDiff** | Object | [State changes in the requested block](../trace-types.md#statediff). | +| **trace** | Array | [Ordered list of calls to other contracts](../trace-types.md#trace). | +| **vmTrace** | Object | [Ordered list of EVM actions](../trace-types.md#vmtrace). | | **transactionHash** | Data, 32 bytes | Hash of the replayed transaction. | - -## Private transaction receipt object - -Returned by [`priv_getTransactionReceipt`](API-Methods.md#priv_gettransactionreceipt). - -| Key | Type | Value | -|-----|:----:|-------| -| **blockHash** | Data, 32 bytes | Hash of block containing this transaction. | -| **blockNumber** | Quantity | Block number of block containing this transaction. | -| **contractAddress** | Data, 20 bytes | Contract address created if a contract creation transaction, otherwise, `null`. A failed contract creation transaction still produces a contract address value. | -| **from** | Data, 20 bytes | Address of the sender. | -| **logs** | Array | Array of [log objects](#log-object) generated by this private transaction. | -| **to** | Data, 20 bytes | Address of the receiver, if sending ether, otherwise, null. | -| **transactionIndex** | Quantity, Integer | Index position of transaction in the block. | -| **revertReason** | String | ABI-encoded string that displays the [reason for reverting the transaction](../HowTo/Send-Transactions/Revert-Reason.md). Only available if revert reason is [enabled](../Reference/CLI/CLI-Syntax.md#revert-reason-enabled). | -| **output** | Data | RLP-encoded return value of a contract call if a value returns, otherwise, `null`. | -| **commitmentHash** | Data, 32 bytes | Hash of the privacy marker transaction. | -| **status** | Quantity | Either `0x1` (success) or `0x0` (failure). | -| **privateFrom** | Data, 32 bytes | [Tessera](https://docs.tessera.consensys.net/) public key of the sender. | -| **privateFor** or **privacyGroupId** | Array or Data, 32 bytes | [Tessera](https://docs.tessera.consensys.net/) public keys or privacy group ID of the recipients. | -| **logsBloom** | Data, 256 bytes | Bloom filter for light clients to quickly retrieve related logs. | diff --git a/docs/Reference/CLI/CLI-Syntax.md b/docs/public-networks/reference/cli/options.md similarity index 75% rename from docs/Reference/CLI/CLI-Syntax.md rename to docs/public-networks/reference/cli/options.md index caa945a7..3d850b8f 100644 --- a/docs/Reference/CLI/CLI-Syntax.md +++ b/docs/public-networks/reference/cli/options.md @@ -2,11 +2,17 @@ description: Hyperledger Besu command line interface reference --- -# Hyperledger Besu command line +# Command line options -This reference describes the syntax of the Hyperledger Besu Command Line Interface (CLI) options. +This reference describes the syntax of the Hyperledger Besu command line interface (CLI) options. -## Specifying options +!!! attention + + This reference contains options that apply to both public and private networks. + For private-network-specific options, see the + [private network options reference](../../../private-networks/reference/cli/options.md). + +## Specify options You can specify Besu options: @@ -24,7 +30,7 @@ You can specify Besu options: For example, set `--miner-coinbase` using the `BESU_MINER_COINBASE` environment variable. -* In a [configuration file](../../HowTo/Configure/Using-Configuration-File.md). +* In a [configuration file](../../how-to/configuration-file.md). If you specify an option in more than one place, the order of priority is command line, environment variable, configuration file. @@ -63,7 +69,7 @@ besu --Tab+Tab api-gas-price-blocks=50 ``` -Number of blocks back from the head block to examine for [`eth_gasPrice`](../API-Methods.md#eth_gasprice). +Number of blocks back from the head block to examine for [`eth_gasPrice`](../api/index.md#eth_gasprice). The default is `100`. ### `api-gas-price-max` @@ -92,7 +98,7 @@ The default is `100`. api-gas-price-max=20000 ``` -Maximum gas price to return for [`eth_gasPrice`](../API-Methods.md#eth_gasprice), regardless of the +Maximum gas price to return for [`eth_gasPrice`](../api/index.md#eth_gasprice), regardless of the percentile value measured. The default is `500000000000` (500 GWei). ### `api-gas-price-percentile` @@ -121,10 +127,10 @@ percentile value measured. The default is `500000000000` (500 GWei). api-gas-price-percentile=75 ``` -Percentile value to measure for [`eth_gasPrice`](../API-Methods.md#eth_gasprice). +Percentile value to measure for [`eth_gasPrice`](../api/index.md#eth_gasprice). The default is `50.0`. -For [`eth_gasPrice`](../API-Methods.md#eth_gasprice), to return the: +For [`eth_gasPrice`](../api/index.md#eth_gasprice), to return the: * Highest gas price in [`--api-gas-price-blocks`](#api-gas-price-blocks), set to `100`. * Lowest gas price in [`--api-gas-price-blocks`](#api-gas-price-blocks), set to `0`. @@ -156,8 +162,8 @@ For [`eth_gasPrice`](../API-Methods.md#eth_gasprice), to return the: ``` Enables or disables automatic log bloom caching. APIs such as -[`eth_getLogs`](../API-Methods.md#eth_getlogs) and -[`eth_getFilterLogs`](../API-Methods.md#eth_getfilterlogs) use the cache for improved performance. +[`eth_getLogs`](../api/index.md#eth_getlogs) and +[`eth_getFilterLogs`](../api/index.md#eth_getfilterlogs) use the cache for improved performance. The default is `true`. If automatic log bloom caching is enabled and a log bloom query reaches the end of the cache, Besu @@ -226,8 +232,8 @@ You can specify the banned node IDs with or without the `0x` prefix. bonsai-maximum-back-layers-to-load=256 ``` -When using [Bonsai Tries](../../Concepts/Data-Storage-Formats.md#bonsai-tries), the -[maximum number of layers back](../../Concepts/Data-Storage-Formats.md#accessing-data) Bonsai can go to reconstruct a +When using [Bonsai Tries](../../concepts/data-storage-formats.md#bonsai-tries), the +[maximum number of layers back](../../concepts/data-storage-formats.md#accessing-data) Bonsai can go to reconstruct a historical state. The default is 512. @@ -257,8 +263,8 @@ The default is 512. bootnodes=["enode://c35c3...d615f@1.2.3.4:30303","enode://f42c13...fc456@1.2.3.5:30303"] ``` -A list of comma-separated [enode URLs](../../Concepts/Node-Keys.md#enode-url) for -[P2P discovery bootstrap](../../HowTo/Find-and-Connect/Bootnodes.md). +A list of comma-separated [enode URLs](../../concepts/node-keys.md#enode-url) for +[P2P discovery bootstrap](../../../private-networks/how-to/configure/bootnodes.md). When connecting to Mainnet or public testnets, the default is a predefined list of enode URLs. @@ -332,7 +338,7 @@ The default is `false`. If networks have Besu nodes using v1.4 or earlier and other Besu nodes using v20.10.1 or later, the nodes on different versions cannot communicate unless `--compatibility-eth64-forkid-enabled` - is set to `true`. + is set to `true`. ### `config-file` @@ -354,7 +360,7 @@ The default is `false`. BESU_CONFIG_FILE=/home/me/me_node/config.toml ``` -The path to the [TOML configuration file](../../HowTo/Configure/Using-Configuration-File.md). +The path to the [TOML configuration file](../../how-to/configuration-file.md). The default is `none`. ### `data-path` @@ -384,7 +390,7 @@ The default is `none`. ``` The path to the Besu data directory. The default is the directory you installed Besu in, or -`/opt/besu/database` if using the [Besu Docker image](../../HowTo/Get-Started/Installation-Options/Run-Docker-Image.md). +`/opt/besu/database` if using the [Besu Docker image](../../get-started/install/run-docker-image.md). ### `data-storage-format` @@ -412,7 +418,7 @@ The path to the Besu data directory. The default is the directory you installed data-storage-format="BONSAI" ``` -The [data storage format](../../Concepts/Data-Storage-Formats.md) to use. +The [data storage format](../../concepts/data-storage-formats.md) to use. Set to `BONSAI` for Bonsai Tries or `FOREST` for Forest of Tries. The default is `FOREST`. @@ -531,7 +537,7 @@ A comma-separated list of hostnames to allow for Engine API access (applies to b ```bash engine-jwt-disabled=true ``` -Disables or enables [authentication](../../HowTo/Interact/APIs/Engine-API.md#authentication) for Engine APIs. +Disables or enables [authentication](../../how-to/use-engine-api.md#authentication) for Engine APIs. The default is `false` (authentication is enabled by default). ### `engine-jwt-secret` @@ -560,11 +566,11 @@ The default is `false` (authentication is enabled by default). engine-jwt-secret="jwt.hex" ``` -Shared secret used to authenticate [consensus clients](../../Concepts/Merge.md) when using the Engine JSON-RPC API (both +Shared secret used to authenticate [consensus clients](../../concepts/the-merge.md) when using the Engine JSON-RPC API (both HTTP and WebSocket). Contents of file must be at least 32 hex-encoded bytes and not begin with `0x`. May be a relative or absolute path. -See an [example of how to generate this](../../Tutorials/Merge-Testnet.md#prerequisites). +See an [example of how to generate this](../../tutorials/merge-testnet.md#prerequisites). ### `engine-rpc-port` @@ -621,7 +627,7 @@ The default is `8551`. ethstats="Dev-Node-1:secret@127.0.0.1:3001" ``` -Reporting URL of an [Ethstats](../../HowTo/Deploy/Ethstats.md) server. +Reporting URL of an [Ethstats](../../../private-networks/how-to/deploy/ethstats.md) server. ### `ethstats-contact` @@ -681,7 +687,7 @@ Contact email address to send to the Ethstats server specified by [`--ethstats`] fast-sync-min-peers=8 ``` -The minimum number of peers required before starting [fast synchronization](../../Concepts/Node-Types.md#run-a-full-node). +The minimum number of peers required before starting [fast synchronization](../../how-to/connect/sync-node.md#run-a-full-node). The default is 5. !!! note @@ -849,7 +855,7 @@ To allow remote connections, set to `0.0.0.0`. ``` The port (TCP) on which GraphQL HTTP listens. The default is `8547`. Ports must be -[exposed appropriately](../../HowTo/Find-and-Connect/Configuring-Ports.md). +[exposed appropriately](../../how-to/connect/configure-ports.md). ### `help` @@ -887,15 +893,15 @@ Show the help message and exit. host-allowlist=["medomain.com", "meotherdomain.com"] ``` -A comma-separated list of hostnames to [access the JSON-RPC API](../../HowTo/Interact/APIs/API.md#host-allowlist) and -[pull Besu metrics](../../HowTo/Monitor/Metrics.md). +A comma-separated list of hostnames to [access the JSON-RPC API](../../how-to/use-besu-api/index.md#host-allowlist) and +[pull Besu metrics](../../how-to/monitor/metrics.md). By default, Besu accepts requests from `localhost` and `127.0.0.1`. !!! important This isn't a permissioning feature. If you want to restrict access to the API, we recommend using the - [Besu authentication mechanism](../../HowTo/Interact/APIs/Authentication.md) with username and password + [Besu authentication mechanism](../../how-to/use-besu-api/authenticate.md) with username and password authentication or JWT public key authentication. !!! note @@ -1063,7 +1069,7 @@ Other categories are `KVSTORE_ROCKSDB`, `KVSTORE_PRIVATE_ROCKSDB`, `KVSTORE_ROCK `KVSTORE_PRIVATE_ROCKSDB_STATS`. Categories containing `PRIVATE` track metrics when you enable -[private transactions](../../Concepts/Privacy/Privacy-Overview.md). +[private transactions](../../../private-networks/concepts/privacy/index.md). ### `metrics-enabled` @@ -1092,7 +1098,7 @@ Categories containing `PRIVATE` track metrics when you enable ``` Enables or disables the -[metrics exporter](../../HowTo/Monitor/Metrics.md#monitor-node-performance-using-prometheus). The +[metrics exporter](../../how-to/monitor/metrics.md#monitor-node-performance-using-prometheus). The default is `false`. You can't specify `--metrics-enabled` with [`--metrics-push-enabled`](#metrics-push-enabled). That is, you can enable @@ -1125,7 +1131,7 @@ either Prometheus polling or Prometheus push gateway support, but not both at on ``` The host on which [Prometheus](https://prometheus.io/) accesses -[Besu metrics](../../HowTo/Monitor/Metrics.md#monitor-node-performance-using-prometheus). The +[Besu metrics](../../how-to/monitor/metrics.md#monitor-node-performance-using-prometheus). The metrics server respects the [`--host-allowlist` option](#host-allowlist). The default is `127.0.0.1`. @@ -1157,9 +1163,9 @@ The default is `127.0.0.1`. ``` The port (TCP) on which [Prometheus](https://prometheus.io/) accesses -[Besu metrics](../../HowTo/Monitor/Metrics.md#monitor-node-performance-using-prometheus). The +[Besu metrics](../../how-to/monitor/metrics.md#monitor-node-performance-using-prometheus). The default is `9545`. Ports must be -[exposed appropriately](../../HowTo/Find-and-Connect/Configuring-Ports.md). +[exposed appropriately](../../how-to/connect/configure-ports.md). ### `metrics-protocol` @@ -1311,7 +1317,7 @@ The interval, in seconds, to push metrics when in `push` mode. The default is 15 The port (TCP) of the [Prometheus Push Gateway](https://github.com/prometheus/pushgateway). The default is `9001`. Ports must be -[exposed appropriately](../../HowTo/Find-and-Connect/Configuring-Ports.md). +[exposed appropriately](../../how-to/connect/configure-ports.md). ### `metrics-push-prometheus-job` @@ -1399,14 +1405,14 @@ to fill the remaining space. The default is 0.8. The account you pay mining rewards to. You must specify a valid coinbase when you enable mining using the [`--miner-enabled`](#miner-enabled) option or the -[`miner_start`](../API-Methods.md#miner_start) JSON-RPC API method. +[`miner_start`](../api/index.md#miner_start) JSON-RPC API method. !!!note Besu ignores this option in networks using - [Clique](../../HowTo/Configure/Consensus-Protocols/Clique.md), - [IBFT 2.0](../../HowTo/Configure/Consensus-Protocols/IBFT.md), or - [QBFT](../../HowTo/Configure/Consensus-Protocols/QBFT.md) consensus protocols. + [Clique](../../../private-networks/how-to/configure/consensus/clique.md), + [IBFT 2.0](../../../private-networks/how-to/configure/consensus/ibft.md), or + [QBFT](../../../private-networks/how-to/configure/consensus/qbft.md) consensus protocols. ### `miner-enabled` @@ -1545,7 +1551,7 @@ The default is `0.0.0.0`. ``` The port of the stratum mining service. The default is `8008`. You must -[expose ports appropriately](../../HowTo/Find-and-Connect/Configuring-Ports.md). +[expose ports appropriately](../../how-to/connect/configure-ports.md). ### `min-gas-price` @@ -1574,13 +1580,13 @@ The port of the stratum mining service. The default is `8008`. You must ``` The minimum price a transaction offers to include it in a mined block. The minimum gas price is the -lowest value [`eth_gasPrice`](../API-Methods.md#eth_gasprice) can return. The default is 1000 +lowest value [`eth_gasPrice`](../api/index.md#eth_gasprice) can return. The default is 1000 Wei. !!! important - In a [free gas network](../../HowTo/Configure/FreeGas.md), ensure the minimum gas price is set to zero for every node. + In a [free gas network](../../../private-networks/how-to/configure/free-gas.md), ensure the minimum gas price is set to zero for every node. Any node with a minimum gas price set higher than zero will silently drop transactions with a zero gas price. - You can query a node's gas configuration using [`eth_gasPrice`](../API-Methods.md#eth_gasprice). + You can query a node's gas configuration using [`eth_gasPrice`](../api/index.md#eth_gasprice). ### `nat-method` @@ -1596,15 +1602,15 @@ Wei. nat-method="UPNP" ``` -Specify the method for handling [NAT environments](../../HowTo/Find-and-Connect/Specifying-NAT.md). +Specify the method for handling [NAT environments](../../how-to/connect/specify-nat.md). The options are: -* [`UPNP`](../../HowTo/Find-and-Connect/Specifying-NAT.md#upnp) -* [`UPNPP2PONLY`](../../HowTo/Find-and-Connect/Specifying-NAT.md#upnp) -* [`KUBERNETES`](../../HowTo/Find-and-Connect/Specifying-NAT.md#kubernetes) -* [`DOCKER`](../../HowTo/Find-and-Connect/Specifying-NAT.md#docker) -* [`AUTO`](../../HowTo/Find-and-Connect/Specifying-NAT.md#auto) -* [`NONE`](../../HowTo/Find-and-Connect/Specifying-NAT.md#none). +* [`UPNP`](../../how-to/connect/specify-nat.md#upnp) +* [`UPNPP2PONLY`](../../how-to/connect/specify-nat.md#upnp) +* [`KUBERNETES`](../../how-to/connect/specify-nat.md#kubernetes) +* [`DOCKER`](../../how-to/connect/specify-nat.md#docker) +* [`AUTO`](../../how-to/connect/specify-nat.md#auto) +* [`NONE`](../../how-to/connect/specify-nat.md#none). The default is `AUTO`. `NONE` disables NAT functionality. @@ -1623,7 +1629,7 @@ The default is `AUTO`. `NONE` disables NAT functionality. UPnP gateway device. You must specify `DOCKER` when using the - [Besu Docker image](../../HowTo/Get-Started/Installation-Options/Run-Docker-Image.md). + [Besu Docker image](../../get-started/install/run-docker-image.md). ### `network` @@ -1659,8 +1665,8 @@ Possible values are: | Network | Chain | Type | Default Sync Mode | Description | |:----------|:------|:------------|:-------------------|:---------------------------------------------------------------| | `mainnet` | ETH | Production | [FAST](#sync-mode) | The main network | -| `kiln` | ETH | Test | [FAST](#sync-mode) | A PoS network similar to the main Ethereum network post-[Merge](../../Concepts/Merge.md) | -| `ropsten` | ETH | Test | [FAST](#sync-mode) | A PoS network similar to the main Ethereum network post-[Merge](../../Concepts/Merge.md) | +| `kiln` | ETH | Test | [FAST](#sync-mode) | A PoS network similar to the main Ethereum network post-[Merge](../../concepts/the-merge.md) | +| `ropsten` | ETH | Test | [FAST](#sync-mode) | A PoS network similar to the main Ethereum network post-[Merge](../../concepts/the-merge.md) | | `rinkeby` | ETH | Test | [FAST](#sync-mode) | A PoA network using Clique | | `goerli` | ETH | Test | [FAST](#sync-mode) | A PoA network using Clique | | `sepolia` | ETH | Test | [FAST](#sync-mode) | A PoW network | @@ -1705,7 +1711,7 @@ Possible values are: network-id="8675309" ``` -The [P2P network identifier](../../Concepts/NetworkID-And-ChainID.md). +The [P2P network identifier](../../concepts/network-and-chain-id.md). Use this option to override the default network ID. The default value is the same as the chain ID defined in the genesis file. @@ -1805,12 +1811,12 @@ The default is `true`. ``` The advertised host that can be used to access the node from outside the network in -[P2P communication](../../HowTo/Find-and-Connect/Configuring-Ports.md#p2p-networking). +[P2P communication](../../how-to/connect/configure-ports.md#p2p-networking). The default is `127.0.0.1`. !!! info - If [`--nat-method`](#nat-method) is set to [`NONE`](../../HowTo/Find-and-Connect/Specifying-NAT.md#none), + If [`--nat-method`](#nat-method) is set to [`NONE`](../../how-to/connect/specify-nat.md), `--p2p-host` is not overridden and must be specified for the node to be accessed from outside the network. ### `p2p-interface` @@ -1840,7 +1846,7 @@ The default is `127.0.0.1`. ``` The network interface on which the node listens for -[P2P communication](../../HowTo/Find-and-Connect/Configuring-Ports.md#p2p-networking). Use the +[P2P communication](../../how-to/connect/configure-ports.md#p2p-networking). Use the option to specify the required network interface when the device that Besu is running on has multiple network interfaces. The default is 0.0.0.0 (all interfaces). @@ -1873,596 +1879,7 @@ multiple network interfaces. The default is 0.0.0.0 (all interfaces). ``` The P2P listening ports (UDP and TCP). The default is `30303`. You must -[expose ports appropriately](../../HowTo/Find-and-Connect/Configuring-Ports.md). - -### `permissions-accounts-config-file` - -=== "Syntax" - - ```bash - --permissions-accounts-config-file= - ``` - -=== "Example" - - ```bash - --permissions-accounts-config-file=/home/me/me_configFiles/myPermissionsFile - ``` - -=== "Environment variable" - - ```bash - BESU_PERMISSIONS_ACCOUNTS_CONFIG_FILE=/home/me/me_configFiles/myPermissionsFile - ``` - -=== "Configuration file" - - ```bash - permissions-accounts-config-file="/home/me/me_configFiles/myPermissionsFile" - ``` - -The [accounts permissions configuration file]. The default is the `permissions_config.toml` file in -the [data directory](#data-path). - -!!! tip - - `--permissions-accounts-config-file` and - [`--permissions-nodes-config-file`](#permissions-nodes-config-file) can use the same file. - -### `permissions-accounts-config-file-enabled` - -=== "Syntax" - - ```bash - --permissions-accounts-config-file-enabled[=] - ``` - -=== "Example" - - ```bash - --permissions-accounts-config-file-enabled=true - ``` - -=== "Environment variable" - - ```bash - BESU_PERMISSIONS_ACCOUNTS_CONFIG_FILE_ENABLED=true - ``` - -=== "Configuration file" - - ```bash - permissions-accounts-config-file-enabled=true - ``` - -Enables or disables file-based account level permissions. The default is `false`. - -### `permissions-accounts-contract-address` - -=== "Syntax" - - ```bash - --permissions-accounts-contract-address= - ``` - -=== "Example" - - ```bash - --permissions-accounts-contract-address=xyz - ``` - -=== "Environment variable" - - ```bash - BESU_PERMISSIONS_ACCOUNTS_CONTRACT_ADDRESS=xyz - ``` - -=== "Configuration file" - - ```bash - permissions-accounts-contract-address=xyz - ``` - -The contract address for -[onchain account permissioning](../../Concepts/Permissioning/Onchain-Permissioning.md). - -### `permissions-accounts-contract-enabled` - -=== "Syntax" - - ```bash - --permissions-accounts-contract-enabled[=] - ``` - -=== "Example" - - ```bash - --permissions-accounts-contract-enabled=true - ``` - -=== "Environment variable" - - ```bash - BESU_PERMISSIONS_ACCOUNTS_CONTRACT_ENABLED=true - ``` - -=== "Configuration file" - - ```bash - permissions-accounts-contract-enabled=true - ``` - -Enables or disables contract-based -[onchain account permissioning](../../Concepts/Permissioning/Onchain-Permissioning.md). The default -is `false`. - -### `permissions-nodes-config-file` - -=== "Syntax" - - ```bash - --permissions-nodes-config-file= - ``` - -=== "Example" - - ```bash - --permissions-nodes-config-file=/home/me/me_configFiles/myPermissionsFile - ``` - -=== "Environment variable" - - ```bash - BESU_PERMISSIONS_NODES_CONFIG_FILE=/home/me/me_configFiles/myPermissionsFile - ``` - -=== "Configuration file" - - ```bash - permissions-nodes-config-file="/home/me/me_configFiles/myPermissionsFile" - ``` - -The [nodes permissions configuration file]. The default is the `permissions_config.toml` file in -the [data directory](#data-path). - -!!! tip - - `--permissions-nodes-config-file` and - [`--permissions-accounts-config-file`](#permissions-accounts-config-file) can use the same - file. - -### `permissions-nodes-config-file-enabled` - -=== "Syntax" - - ```bash - --permissions-nodes-config-file-enabled[=] - ``` - -=== "Example" - - ```bash - --permissions-nodes-config-file-enabled=true - ``` - -=== "Environment variable" - - ```bash - BESU_PERMISSIONS_NODES_CONFIG_FILE_ENABLED=true - ``` - -=== "Configuration file" - - ```bash - permissions-nodes-config-file-enabled=true - ``` - -Enables or disables file-based node level permissions. The default is `false`. - -### `permissions-nodes-contract-address` - -=== "Syntax" - - ```bash - --permissions-nodes-contract-address= - ``` - -=== "Example" - - ```bash - --permissions-nodes-contract-address=xyz - ``` - -=== "Environment variable" - - ```bash - BESU_PERMISSIONS_NODES_CONTRACT_ADDRESS=xyz - ``` - -=== "Configuration file" - - ```bash - permissions-nodes-contract-address=xyz - ``` - -The contract address for -[onchain node permissioning](../../Concepts/Permissioning/Onchain-Permissioning.md). - -### `permissions-nodes-contract-enabled` - -=== "Syntax" - - ```bash - --permissions-nodes-contract-enabled[=] - ``` - -=== "Example" - - ```bash - --permissions-nodes-contract-enabled=true - ``` - -=== "Environment variable" - - ```bash - BESU_PERMISSIONS_NODES_CONTRACT_ENABLED=true - ``` - -=== "Configuration file" - - ```bash - permissions-nodes-contract-enabled=true - ``` - -Enables or disables contract-based -[onchain node permissioning](../../Concepts/Permissioning/Onchain-Permissioning.md). The default is -`false`. - -### `permissions-nodes-contract-version` - -=== "Syntax" - - ```bash - --permissions-nodes-contract-version= - ``` - -=== "Example" - - ```bash - --permissions-nodes-contract-version=2 - ``` - -=== "Environment variable" - - ```bash - BESU_PERMISSIONS_NODES_CONTRACT_VERSION=2 - ``` - -=== "Configuration file" - - ```bash - permissions-nodes-contract-version=2 - ``` - -Version of the EEA [node permissioning interface](../../HowTo/Limit-Access/Specify-Perm-Version.md). -The default is 1. - -### `privacy-enabled` - -=== "Syntax" - - ```bash - --privacy-enabled[=] - ``` - -=== "Example" - - ```bash - --privacy-enabled=false - ``` - -=== "Environment variable" - - ```bash - BESU_PRIVACY_ENABLED=false - ``` - -=== "Configuration file" - - ```bash - privacy-enabled=false - ``` - -Enables or disables [private transactions](../../Concepts/Privacy/Privacy-Overview.md). The default -is `false`. - -!!! important - - Using private transactions with [pruning](../../Concepts/Pruning.md) and/or Fast Sync is not - supported. - -### `privacy-marker-transaction-signing-key-file` - -=== "Syntax" - - ```bash - --privacy-marker-transaction-signing-key-file= - ``` - -=== "Example" - - ```bash - --privacy-marker-transaction-signing-key-file=/home/me/me_node/myPrivateKey - ``` - -=== "Environment variable" - - ```bash - BESU_PRIVACY_MARKER_TRANSACTION_SIGNING_KEY_FILE=/home/me/me_node/myPrivateKey - ``` - -=== "Configuration file" - - ```bash - privacy-marker-transaction-signing-key-file="/home/me/me_node/myPrivateKey" - ``` - -`` is the name of the private key file used to -[sign Privacy Marker Transactions](../../HowTo/Use-Privacy/Sign-Privacy-Marker-Transactions.md). - -!!! note - - This can be the same file used by [`--node-private-key-file`](#node-private-key-file), or a - different key file to identify who signed the privacy marker transaction. - -You must specify this option if you're using: - -* a privacy network where you pay gas. Also, the associated account must contain adequate funds. -* [account permissioning] and privacy. You must include the corresponding public key in the - accounts allowlist. - -If you do not specify this option (for example, in a free gas network), Besu signs each transaction -with a different randomly generated key. - -### `privacy-multi-tenancy-enabled` - -=== "Syntax" - - ```bash - --privacy-multi-tenancy-enabled[=] - ``` - -=== "Example" - - ```bash - --privacy-multi-tenancy-enabled=false - ``` - -=== "Environment variable" - - ```bash - BESU_PRIVACY_MULTI_TENANCY_ENABLED=false - ``` - -=== "Configuration file" - - ```bash - privacy-multi-tenancy-enabled=false - ``` - -Enables or disables [multi-tenancy](../../Concepts/Privacy/Multi-Tenancy.md) for private -transactions. The default is `false`. - -### `privacy-flexible-groups-enabled` - -=== "Syntax" - - ```bash - --privacy-flexible-groups-enabled[=] - ``` - -=== "Example" - - ```bash - --privacy-flexible-groups-enabled=true - ``` - -=== "Environment variable" - - ```bash - BESU_PRIVACY_FLEXIBLE_GROUPS_ENABLED=true - ``` - -=== "Configuration file" - - ```bash - privacy-flexible-groups-enabled=true - ``` - -Enables or disables [flexible privacy groups](../../Concepts/Privacy/Flexible-PrivacyGroups.md). The default is `false`. - -Deprecated syntax for this option is `--privacy-onchain-groups-enabled`. - -### `privacy-public-key-file` - -=== "Syntax" - - ```bash - --privacy-public-key-file= - ``` - -=== "Example" - - ```bash - --privacy-public-key-file=Tessera/nodeKey.pub - ``` - -=== "Environment variable" - - ```bash - BESU_PRIVACY_PUBLIC_KEY_FILE=Tessera/nodeKey.pub - ``` - -=== "Configuration file" - - ```bash - privacy-public-key-file="Tessera/nodeKey.pub" - ``` - -The [public key of the Tessera node](https://docs.tessera.consensys.net/). - -!!! important - - You cannot specify `privacy-public-key-file` when - [`--privacy-multi-tenancy-enabled`](#privacy-multi-tenancy-enabled) is `true` - -### `privacy-tls-enabled` - -=== "Syntax" - - ```bash - --privacy-tls-enabled[=] - ``` - -=== "Example" - - ```bash - --privacy-tls-enabled=false - ``` - -=== "Environment variable" - - ```bash - BESU_PRIVACY_TLS_ENABLED=false - ``` - -=== "Configuration file" - - ```bash - privacy-tls-enabled=false - ``` - -Enables or disables [TLS on communication with the Private Transaction Manager]. The default is -false. - -### `privacy-tls-keystore-file` - -=== "Syntax" - - ```bash - --privacy-tls-keystore-file= - ``` - -=== "Example" - - ```bash - --privacy--keystore-file=/home/me/me_node/key - ``` - -=== "Environment variable" - - ```bash - BESU_PRIVACY_TLS_KEYSTORE_FILE=/home/me/me_node/key - ``` - -=== "Configuration file" - - ```bash - privacy-tls-keystore-file="/home/me/me_node/key" - ``` - -The keystore file (in PKCS #12 format) containing the private key and the certificate presented -during authentication. - -You must specify `privacy-tls-keystore-file` if [`--privacy-tls-enabled`](#privacy-tls-enabled) is -`true`. - -### `privacy-tls-keystore-password-file` - -=== "Syntax" - - ```bash - --privacy-tls-keystore-password-file= - ``` - -=== "Example" - - ```bash - --privacy-tls-keystore-password-file=/home/me/me_node/password - ``` - -=== "Environment variable" - - ```bash - BESU_PRIVACY_TLS_KEYSTORE_PASSWORD_FILE=/home/me/me_node/password - ``` - -=== "Configuration file" - - ```bash - privacy-tls-keystore-password-file="/home/me/me_node/password" - ``` - -The path to the file containing the password to decrypt the keystore. - -### `privacy-tls-known-enclave-file` - -=== "Syntax" - - ```bash - --privacy-tls-known-enclave-file= - ``` - -=== "Example" - - ```bash - --privacy-tls-known-enclave-file=/home/me/me_node/knownEnclave - ``` - -=== "Environment variable" - - ```bash - BESU_PRIVACY_TLS_KNOWN_ENCLAVE_FILE=/home/me/me_node/knownEnclave - ``` - -=== "Configuration file" - - ```bash - privacy-tls-known-enclave-file="/home/me/me_node/knownEnclave" - ``` - -The path to the file containing the hostnames, ports, and SHA256 certificate fingerprints of the -[authorized privacy enclave](../../HowTo/Configure/TLS/Configure-TLS.md#create-the-known-servers-file). - -### `privacy-url` - -=== "Syntax" - - ```bash - --privacy-url= - ``` - -=== "Example" - - ```bash - --privacy-url=http://127.0.0.1:8888 - ``` - -=== "Environment variable" - - ```bash - BESU_PRIVACY_URL=http://127.0.0.1:8888 - ``` - -=== "Configuration file" - - ```bash - privacy-url="http://127.0.0.1:8888" - ``` - -The URL on which the -[Tessera node](../../Tutorials/Privacy/Configuring-Privacy.md#3-create-tessera-configuration-files) is -running. +[expose ports appropriately](../../how-to/connect/configure-ports.md). ### `pruning-block-confirmations` @@ -2494,7 +1911,7 @@ The minimum number of confirmations on a block before marking of newly-stored or nodes that cannot be pruned. The default is 10. !!! important - Using pruning with [private transactions](../../Concepts/Privacy/Privacy-Overview.md) is not + Using pruning with [private transactions](../../../private-networks/concepts/privacy/index.md) is not supported. ### `pruning-blocks-retained` @@ -2526,7 +1943,7 @@ nodes that cannot be pruned. The default is 10. The minimum number of recent blocks to keep the entire world state for. The default is 1024. !!! important - Using pruning with [private transactions](../../Concepts/Privacy/Privacy-Overview.md) is not + Using pruning with [private transactions](../../../private-networks/concepts/privacy/index.md) is not supported. ### `pruning-enabled` @@ -2555,17 +1972,18 @@ The minimum number of recent blocks to keep the entire world state for. The defa pruning-enabled=true ``` -Enables [pruning](../../Concepts/Pruning.md) to reduce storage required for the world state. +Enables [pruning](../../concepts/data-storage-formats.md) to reduce storage required for the world state. The default is `false`. !!! important - Using pruning with [private transactions](../../Concepts/Privacy/Privacy-Overview.md) is not + Using pruning with [private transactions](../../../private-networks/concepts/privacy/index.md) isn't supported. -!!! Important +!!! important - Pruning is being deprecated for [Bonsai Tries](../../Concepts/Data-Storage-Formats.md#bonsai-tries) and is currently not being updated. + Pruning is being deprecated for [Bonsai Tries](../../concepts/data-storage-formats.md#bonsai-tries) + and is currently not being updated. ### `random-peer-priority-enabled` @@ -2749,14 +2167,14 @@ rejects that peer. revert-reason-enabled=true ``` -Enables or disables including the [revert reason](../../HowTo/Send-Transactions/Revert-Reason.md) in the -transaction receipt, [`eth_estimateGas`](../API-Methods.md#eth_estimategas) error response, -[`eth_call`](../API-Methods.md#eth_call) error response, and [`trace`](../Trace-Types.md#trace) response. +Enables or disables including the [revert reason](../../../private-networks/how-to/send-transactions/revert-reason.md) in the +transaction receipt, [`eth_estimateGas`](../api/index.md#eth_estimategas) error response, +[`eth_call`](../api/index.md#eth_call) error response, and [`trace`](../trace-types.md#trace) response. The default is `false`. !!! caution - Enabling revert reason may use a significant amount of memory. We do not recommend enabling + Enabling revert reason may use a significant amount of memory. We don't recommend enabling revert reason when connected to public Ethereum networks. ### `rpc-http-api` @@ -2821,8 +2239,8 @@ you must also specify the `--rpc-http-enabled` option. The available API options rpc-http-authentication-credentials-file="/home/me/me_node/auth.toml" ``` -The [credentials file](../../HowTo/Interact/APIs/Authentication.md#credentials-file) for JSON-RPC -API [authentication](../../HowTo/Interact/APIs/Authentication.md). +The [credentials file](../../how-to/use-besu-api/authenticate.md#credentials-file) for JSON-RPC +API [authentication](../../how-to/use-besu-api/authenticate.md). ### `rpc-http-authentication-enabled` @@ -2850,7 +2268,7 @@ API [authentication](../../HowTo/Interact/APIs/Authentication.md). rpc-http-authentication-enabled=true ``` -Enables or disables [authentication](../../HowTo/Interact/APIs/Authentication.md) for the HTTP JSON-RPC +Enables or disables [authentication](../../how-to/use-besu-api/authenticate.md) for the HTTP JSON-RPC service. ### `rpc-http-authentication-jwt-public-key-file` @@ -2929,11 +2347,11 @@ with your Besu node. !!!note - To run a local Besu node with MetaMask, set `--rpc-http-cors-origins` to + To run a local Besu node with MetaMask, set `--rpc-http-cors-origins` to `chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn`. - Remember to also include the dapp domain MetaMask interacts with, for example if your app is deployed - on Remix and you're using MetaMask to interact with the contract, use + Remember to also include the dapp domain MetaMask interacts with, for example if your app is deployed + on Remix and you're using MetaMask to interact with the contract, use `--rpc-http-cors-origins=chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn,http://remix.ethereum.org` !!!tip @@ -3063,7 +2481,7 @@ The maximum number of allowed HTTP JSON-RPC connections. Once this limit is reac ``` The port (TCP) on which HTTP JSON-RPC listens. The default is `8545`. You must -[expose ports appropriately](../../HowTo/Find-and-Connect/Configuring-Ports.md). +[expose ports appropriately](../../how-to/connect/configure-ports.md). ### `rpc-http-tls-ca-clients-enabled` @@ -3280,7 +2698,7 @@ The path to the file containing the password to decrypt the keystore. ``` The path to the file used to -[authenticate clients](../../HowTo/Configure/TLS/Configure-TLS.md#create-the-known-clients-file) using +[authenticate clients](../../../private-networks/how-to/configure/tls/client-and-server.md#create-the-known-clients-file) using self-signed certificates or non-public certificates. Must contain the certificate's Common Name, and SHA-256 fingerprint in the format @@ -3351,7 +2769,7 @@ A list of comma-separated TLS protocols to support. The default is `DEFAULT_TLS_ ``` The maximum transaction fee (in Wei) accepted for transactions submitted through the -[`eth_sendRawTransaction`](../API-Methods.md#eth_sendrawtransaction) RPC. The default is 1000000000000000000 (1 ether). +[`eth_sendRawTransaction`](../api/index.md#eth_sendrawtransaction) RPC. The default is 1000000000000000000 (1 ether). If set to 0, then this option is ignored and no cap is applied. @@ -3417,8 +2835,8 @@ you must also specify the `--rpc-ws-enabled` option. The available API options a rpc-ws-authentication-credentials-file="/home/me/me_node/auth.toml" ``` -The path to the [credentials file](../../HowTo/Interact/APIs/Authentication.md#credentials-file) -for JSON-RPC API [authentication](../../HowTo/Interact/APIs/Authentication.md). +The path to the [credentials file](../../how-to/use-besu-api/authenticate.md#credentials-file) +for JSON-RPC API [authentication](../../how-to/use-besu-api/authenticate.md). ### `rpc-ws-authentication-enabled` @@ -3446,12 +2864,12 @@ for JSON-RPC API [authentication](../../HowTo/Interact/APIs/Authentication.md). rpc-ws-authentication-enabled=true ``` -Enables or disables [authentication](../../HowTo/Interact/APIs/Authentication.md) for the WebSocket JSON-RPC +Enables or disables [authentication](../../how-to/use-besu-api/authenticate.md) for the WebSocket JSON-RPC service. !!! note - `wscat` does not support headers. [Authentication](../../HowTo/Interact/APIs/Authentication.md) + `wscat` doesn't support headers. [Authentication](../../how-to/use-besu-api/authenticate.md) requires you to pass an authentication token in the request header. To use authentication with WebSockets, you need an app that supports headers. @@ -3627,7 +3045,7 @@ The maximum size in bytes for JSON-RPC WebSocket frames. If this limit is exceed ``` The port (TCP) on which WebSocket JSON-RPC listens. The default is `8546`. You must -[expose ports appropriately](../../HowTo/Find-and-Connect/Configuring-Ports.md). +[expose ports appropriately](../../how-to/connect/configure-ports.md). ### `security-module` @@ -3655,7 +3073,7 @@ The port (TCP) on which WebSocket JSON-RPC listens. The default is `8546`. You m security-module="security_module" ``` -Name of the security module [plugin] to use. For example, a Hardware Security Module (HSM) or V3 filestore +Name of the security module plugin to use. For example, a Hardware Security Module (HSM) or V3 filestore plugin The default is the node's local private key file specified using @@ -3687,7 +3105,7 @@ The default is the node's local private key file specified using static-nodes-file="~/besudata/static-nodes.json" ``` -Static nodes JSON file containing the [static nodes](../../HowTo/Find-and-Connect/Static-Nodes.md) for this node to +Static nodes JSON file containing the [static nodes](../../how-to/connect/static-nodes.md) for this node to connect to. The default is `datapath/static-nodes.json`. ### `strict-tx-replay-protection-enabled` @@ -3747,10 +3165,10 @@ The default is `false`. ``` The synchronization mode. -Use `FAST` for [fast sync](../../Concepts/Node-Types.md#fast-synchronization), `FULL` for -[full sync](../../Concepts/Node-Types.md#run-an-archive-node), `X_SNAP` for -[snap sync](../../Concepts/Node-Types.md#snap-synchronization), and `X_CHECKPOINT` for -[checkpoint sync](../../Concepts/Node-Types.md#checkpoint-synchronization). +Use `FAST` for [fast sync](../../how-to/connect/sync-node.md#fast-synchronization), `FULL` for +[full sync](../../how-to/connect/sync-node.md#run-an-archive-node), `X_SNAP` for +[snap sync](../../how-to/connect/sync-node.md#snap-synchronization), and `X_CHECKPOINT` for +[checkpoint sync](../../how-to/connect/sync-node.md#checkpoint-synchronization). * The default is `FULL` when connecting to a private network by not using the [`--network`](#network) option and specifying the [`--genesis-file`](#genesis-file) option. @@ -3801,9 +3219,9 @@ the block creator how to set the gas limit in its block. If the values are the s within that constraint. If a value for `target-gas-limit` is not specified, the block gas limit remains at the value -specified in the [genesis file](../Config-Items.md#genesis-block-parameters). +specified in the [genesis file](../genesis-items.md#genesis-block-parameters). -Use the [`miner_changeTargetGasLimit`](../API-Methods.md#miner_changetargetgaslimit) API to update +Use the [`miner_changeTargetGasLimit`](../api/index.md#miner_changetargetgaslimit) API to update the `target-gas-limit` while Besu is running. Alternatively restart Besu with an updated `target-gas-limit` value. @@ -3949,10 +3367,5 @@ Displays the experimental options and their descriptions, and exit. Prints version information and exit. -[push gateway integration]: ../../HowTo/Monitor/Metrics.md#running-prometheus-with-besu-in-push-mode -[accounts permissions configuration file]: ../../HowTo/Limit-Access/Local-Permissioning.md#permissions-configuration-file -[nodes permissions configuration file]: ../../HowTo/Limit-Access/Local-Permissioning.md#permissions-configuration-file -[account permissioning]: ../../Concepts/Permissioning/Permissioning-Overview.md#account-permissioning -[TLS on communication with the Private Transaction Manager]: ../../Concepts/Privacy/Privacy-Overview.md#private-transaction-manager -[JWT provider's public key file]: ../../HowTo/Interact/APIs/Authentication.md#jwt-public-key-authentication -[plugin]: ../Plugin-API-Interfaces.md +[push gateway integration]: ../../how-to/monitor/metrics.md#running-prometheus-with-besu-in-push-mode +[JWT provider's public key file]: ../../how-to/use-besu-api/authenticate.md#jwt-public-key-authentication diff --git a/docs/Reference/CLI/CLI-Subcommands.md b/docs/public-networks/reference/cli/subcommands.md similarity index 56% rename from docs/Reference/CLI/CLI-Subcommands.md rename to docs/public-networks/reference/cli/subcommands.md index 22470784..f670d293 100644 --- a/docs/Reference/CLI/CLI-Subcommands.md +++ b/docs/public-networks/reference/cli/subcommands.md @@ -4,7 +4,13 @@ description: Hyperledger Besu command line interface subcommands # Subcommands -This reference describes the syntax of the Hyperledger Besu Command Line Interface (CLI) subcommands. +This reference describes the syntax of the Hyperledger Besu command line interface (CLI) subcommands. + +!!! attention + + This reference contains subcommands that apply to both public and private networks. + For private-network-specific subcommands, see the + [private network subcommands reference](../../../private-networks/reference/cli/subcommands.md). To start a Besu node using subcommands, run: @@ -79,9 +85,9 @@ Provides node public key related actions. !!!caution To get the public key or address of a node, ensure you use the - [`--data-path`](CLI-Syntax.md#data-path) or - [`--node-private-key-file`](CLI-Syntax.md#node-private-key-file) option with the `public-key` - command. Otherwise, a new [node key](../../Concepts/Node-Keys.md) is silently generated when + [`--data-path`](options.md#data-path) or + [`--node-private-key-file`](options.md#node-private-key-file) option with the `public-key` + command. Otherwise, a new [node key](../../concepts/node-keys.md) is silently generated when starting Besu. ### `export` @@ -105,7 +111,7 @@ Provides node public key related actions. ``` Outputs the node public key to standard output or to the file specified by `--to=`. -You can output the public key associated with a specific private key file using the [`--node-private-key-file`](CLI-Syntax.md#node-private-key-file) option. +You can output the public key associated with a specific private key file using the [`--node-private-key-file`](options.md#node-private-key-file) option. The default elliptic curve used for the key is `secp256k1`. Use the `--ec-curve` option to choose between `secp256k1` or `secp256r1`. @@ -130,7 +136,7 @@ The default elliptic curve used for the key is `secp256k1`. Use the `--ec-curve` ``` Outputs the node address to standard output or to the file specified by `--to=`. -You can output the address associated with a specific private key file using the [`--node-private-key-file`](CLI-Syntax.md#node-private-key-file) option. +You can output the address associated with a specific private key file using the [`--node-private-key-file`](options.md#node-private-key-file) option. The default elliptic curve used for the key is `secp256k1`. Use the `--ec-curve` option to choose between `secp256k1` or `secp256r1`. @@ -153,36 +159,13 @@ Provides password related actions. ``` Generates the hash of a given password. Include the hash in the -[credentials file](../../HowTo/Interact/APIs/Authentication.md#credentials-file) for JSON-RPC API -[authentication](../../HowTo/Interact/APIs/Authentication.md). +[credentials file](../../how-to/use-besu-api/authenticate.md#credentials-file) for JSON-RPC API +[authentication](../../how-to/use-besu-api/authenticate.md). ## `operator` Provides operator actions. -### `generate-blockchain-config` - -=== "Syntax" - - ```bash - besu operator generate-blockchain-config --config-file= --to= [--genesis-file-name=] [--private-key-file-name=] [--public-key-file-name=] - ``` - -=== "Example" - - ```bash - besu operator generate-blockchain-config --config-file=config.json --to=myNetworkFiles - ``` -Generates an -[IBFT 2.0](../../Tutorials/Private-Network/Create-IBFT-Network.md) or -[QBFT](../../Tutorials/Private-Network/Create-QBFT-Network.md) genesis file. - -The configuration file has two nested JSON nodes. The first is the `genesis` property defining the -[IBFT 2.0](../../HowTo/Configure/Consensus-Protocols/IBFT.md#genesis-file) or -[QBFT](../../HowTo/Configure/Consensus-Protocols/QBFT.md#genesis-file) genesis file, except for -the `extraData` string. The second is the `blockchain` property defining the number of key pairs to -generate. - ### `generate-log-bloom-cache` === "Syntax" @@ -200,7 +183,7 @@ generate. !!! tip Manually executing `generate-log-bloom-cache` is not required unless you set the - [`--auto-log-bloom-caching-enabled`](CLI-Syntax.md#auto-log-bloom-caching-enabled) command line + [`--auto-log-bloom-caching-enabled`](options.md#auto-log-bloom-caching-enabled) command line option to false. Generates cached log bloom indexes for blocks. APIs use the cached indexes for improved log query @@ -212,92 +195,7 @@ performance. indexed. To generate cached log bloom indexes while the node is running, use the -[`admin_generateLogBloomCache`](../API-Methods.md#admin_generatelogbloomcache) API. - -## `rlp` - -Provides RLP related actions. - -### `encode` - -=== "Syntax" - - ```bash - besu rlp encode [--from=] [--to=] [--type=] - ``` - -=== "File example" - - ```bash - besu rlp encode --from=ibft_extra_data.json --to=extra_data_for_ibft_genesis.txt --type=IBFT_EXTRA_DATA - ``` - -=== "Standard input/output example" - - ```bash - cat extra_data.json | besu rlp encode > rlp.txt - ``` - -Encodes the RLP hexadecimal string for use in a IBFT 2.0 or QBFT genesis file. The default type is -`IBFT_EXTRA_DATA`. - -Supported types are: - -* `IBFT_EXTRA_DATA` - The [IBFT 2.0 genesis file](../../HowTo/Configure/Consensus-Protocols/IBFT.md#genesis-file) includes -the `IBFT_EXTRA_DATA` type in the [`extraData`](../../HowTo/Configure/Consensus-Protocols/IBFT.md#extra-data) property. - -* `QBFT_EXTRA_DATA` - The [QBFT genesis file](../../HowTo/Configure/Consensus-Protocols/QBFT.md#genesis-file) includes - the `QBFT_EXTRA_DATA` type in the [`extraData`](../../HowTo/Configure/Consensus-Protocols/QBFT.md#extra-data) property. - -???+ summary "IBFT 2.0 extra data" - - To generate the RLP encoded `extraData` string, specify a JSON input that is an array of - validator addresses in ascending order. - - ??? tip "JSON Schema for IBFT_EXTRA_DATA" - Use the following JSON Schema to validate that your JSON data is well formed. To validate - your JSON content, use an online validation tool, such as - https://www.jsonschemavalidator.net/. - - ```json - { - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "http://org.hyperledger.besu/cli_rlp_ibft_extra_data.json", - "type": "array", - "definitions": {}, - "title": "IBFT extra data", - "description":"JSON format used as input to generate an IBFT extra data RLP string", - "items": { - "$id": "#/address", - "type": "string", - "title": "Validator address", - "description":"The validator node address", - "default": "", - "examples": [ - "be068f726a13c8d46c44be6ce9d275600e1735a4", - "5ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193" - ], - "pattern":"^([0-9a-f]{40})$" - } - } - ``` - - !!!example "Example IBFT_EXTRA_DATA encoding" - - === "JSON Input" - - ```json - [ - "be068f726a13c8d46c44be6ce9d275600e1735a4", - "5ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193" - ] - ``` - - === "RLP Output" - - ``` - 0xf853a00000000000000000000000000000000000000000000000000000000000000000ea94be068f726a13c8d46c44be6ce9d275600e1735a4945ff6f4b66a46a2b2310a6f3a93aaddc0d9a1c193808400000000c0 - ``` +[`admin_generateLogBloomCache`](../api/index.md#admin_generatelogbloomcache) API. ## `retesteth` @@ -319,11 +217,11 @@ server. The command accepts the following command line options: -* [\--data-path](./CLI-Syntax.md#data-path) -* [\--host-allowlist](./CLI-Syntax.md#host-allowlist) -* [\--rpc-http-host](./CLI-Syntax.md#rpc-http-host) -* [\--rpc-http-port](./CLI-Syntax.md#rpc-http-port) -* [\--logging](./CLI-Syntax.md#logging) +* [`--data-path`](options.md#data-path) +* [`--host-allowlist`](options.md#host-allowlist) +* [`--rpc-http-host`](options.md#rpc-http-host) +* [`--rpc-http-port`](options.md#rpc-http-port) +* [`--logging`](options.md#logging) ## `validate-config` @@ -340,6 +238,6 @@ The command accepts the following command line options: ``` Performs basic syntax validation of the specified -[TOML configuration file](../../HowTo/Configure/Using-Configuration-File.md). +[TOML configuration file](../../how-to/configuration-file.md). Checks TOML syntax (for example, valid format and unmatched quotes) and flags unknown options. Doesn't check data types, and doesn't check dependencies between options (this is done at Besu startup). diff --git a/docs/Reference/Responsible-Disclosure.md b/docs/public-networks/reference/disclosure.md similarity index 94% rename from docs/Reference/Responsible-Disclosure.md rename to docs/public-networks/reference/disclosure.md index ffae016a..cc512df4 100644 --- a/docs/Reference/Responsible-Disclosure.md +++ b/docs/public-networks/reference/disclosure.md @@ -2,7 +2,7 @@ description: Hyperledger Besu responsible disclosure statement --- -# Responsible disclosure policy +# Security disclosure policy At Hyperledger Besu, security is a priority. But regardless of how much effort we put into system security, there might still be vulnerabilities present. If you discover a vulnerability, we need to diff --git a/docs/Reference/Engine-API-Methods.md b/docs/public-networks/reference/engine-api/index.md similarity index 90% rename from docs/Reference/Engine-API-Methods.md rename to docs/public-networks/reference/engine-api/index.md index 7c4f4d01..2abc35f4 100644 --- a/docs/Reference/Engine-API-Methods.md +++ b/docs/public-networks/reference/engine-api/index.md @@ -4,8 +4,8 @@ description: Engine API methods reference # Engine API methods -After [The Merge](../Concepts/Merge.md), consensus and execution clients communicate with each other using the Engine API. -When running Besu as an execution client, [use these API calls](../HowTo/Interact/APIs/Engine-API.md) to communicate with a consensus client. +After [The Merge](../../concepts/the-merge.md), consensus and execution clients communicate with each other using the Engine API. +When running Besu as an execution client, [use these API calls](../../how-to/use-engine-api.md) to communicate with a consensus client. See the [Ethereum Engine API specification](https://github.com/ethereum/execution-apis/blob/0b965fb714ccd3faa3c939fdce1726e56679cdec/src/engine/specification.md) for more information. @@ -22,11 +22,11 @@ Sends the transition configuration to the consensus client to verify the configu #### Parameters -`transitionConfiguration`: *object* - [Transition configuration object](Engine-API-Objects.md#transition-configuration-object) +`transitionConfiguration`: *object* - [Transition configuration object](objects.md#transition-configuration-object) #### Returns -`transitionConfiguration`: *object* - [Transition configuration object](Engine-API-Objects.md#transition-configuration-object) +`transitionConfiguration`: *object* - [Transition configuration object](objects.md#transition-configuration-object) !!! example @@ -64,13 +64,13 @@ Updates the fork choice with the consensus client. #### Parameters -* `forkchoiceState`: *object* - [Fork choice state object](Engine-API-Objects.md#fork-choice-state-object) +* `forkchoiceState`: *object* - [Fork choice state object](objects.md#fork-choice-state-object) -* `payloadAttributes`: *object* - [Payload attribute object](Engine-API-Objects.md#payload-attributes-object). Can be `null`. +* `payloadAttributes`: *object* - [Payload attribute object](objects.md#payload-attributes-object). Can be `null`. #### Returns -* `payloadStatus`: *object* - [Payload status object](Engine-API-Objects.md#payload-status-object) +* `payloadStatus`: *object* - [Payload status object](objects.md#payload-status-object) * `payloadId`: *data* - identifier of the payload build process or `null` @@ -115,7 +115,7 @@ Prepares the payload to send to the consensus client. #### Returns -`executionPayload`: *object* - [Execution payload object](Engine-API-Objects.md#execution-payload-object) +`executionPayload`: *object* - [Execution payload object](objects.md#execution-payload-object) !!! example @@ -162,11 +162,11 @@ Executes the payload with the consensus client. #### Parameters -`executionPayload`: *object* - [Execution payload object](Engine-API-Objects.md#execution-payload-object) +`executionPayload`: *object* - [Execution payload object](objects.md#execution-payload-object) #### Returns -* `payloadStatus`: *object* - [Payload status object](Engine-API-Objects.md#payload-status-object) +* `payloadStatus`: *object* - [Payload status object](objects.md#payload-status-object) !!! example diff --git a/docs/Reference/Engine-API-Objects.md b/docs/public-networks/reference/engine-api/objects.md similarity index 82% rename from docs/Reference/Engine-API-Objects.md rename to docs/public-networks/reference/engine-api/objects.md index cb030ec4..fd01ee20 100644 --- a/docs/Reference/Engine-API-Objects.md +++ b/docs/public-networks/reference/engine-api/objects.md @@ -4,12 +4,12 @@ description: Engine API objects reference # Engine API objects -The following objects are parameters for or returned by the [Engine API methods](Engine-API-Methods.md). +The following objects are parameters for or returned by the [Engine API methods](index.md). ## Execution payload object -Parameter for [`engine_newPayloadV1`](Engine-API-Methods.md#engine_newpayloadv1). -Returned by [`engine_getPayloadV1`](Engine-API-Methods.md#engine_getpayloadv1). +Parameter for [`engine_newPayloadV1`](index.md#engine_newpayloadv1). +Returned by [`engine_getPayloadV1`](index.md#engine_getpayloadv1). | Key | Type | Value | |-----|:----:|-------| @@ -24,13 +24,13 @@ Returned by [`engine_getPayloadV1`](Engine-API-Methods.md#engine_getpayloadv1). | `gasUsed` | *Quantity*, 64 Bits | Total gas used by all transactions in this block. | | `timestamp` | *Quantity*, 64 Bits | Unix timestamp for block assembly. | | `extraData` | *Data*, 0 to 32 Bytes | Extra data field for this block. | -| `baseFeePerGas` | *Quantity*, 256 Bits | The block's [base fee per gas](../Concepts/Transactions/Transaction-Types.md#eip1559-transactions). This field is empty for blocks created before [EIP-1559](https://github.com/ethereum/EIPs/blob/2d8a95e14e56de27c5465d93747b0006bd8ac47f/EIPS/eip-1559.md). | +| `baseFeePerGas` | *Quantity*, 256 Bits | The block's [base fee per gas](../../concepts/transactions/types.md#eip1559-transactions). This field is empty for blocks created before [EIP-1559](https://github.com/ethereum/EIPs/blob/2d8a95e14e56de27c5465d93747b0006bd8ac47f/EIPS/eip-1559.md). | | `blockHash` | *Data*, 32 Bytes | Hash of the execution block. | | `transactions` | *Array* | Array of transaction objects, each object is a list representing `TransactionType`, `TransactionPayload`, or `LegacyTransaction` as defined in [EIP-2718](https://eips.ethereum.org/EIPS/eip-2718). | ## Fork choice state object -Parameter for [`engine_forkchoiceUpdatedV1`](Engine-API-Methods.md#engine_forkchoiceupdatedv1). +Parameter for [`engine_forkchoiceUpdatedV1`](index.md#engine_forkchoiceupdatedv1). | Key | Type | Value | |-----|:----:|-------| @@ -40,7 +40,7 @@ Parameter for [`engine_forkchoiceUpdatedV1`](Engine-API-Methods.md#engine_forkch ## Payload attributes object -Parameter for [`engine_forkchoiceUpdatedV1`](Engine-API-Methods.md#engine_forkchoiceupdatedv1). +Parameter for [`engine_forkchoiceUpdatedV1`](index.md#engine_forkchoiceupdatedv1). | Key | Type | Value | |-----|:----:|-------| @@ -50,7 +50,7 @@ Parameter for [`engine_forkchoiceUpdatedV1`](Engine-API-Methods.md#engine_forkch ## Payload status object -Returned by [`engine_newPayloadV1`](Engine-API-Methods.md#engine_newpayloadv1) and [`engine_forkchoiceUpdatedV1`](Engine-API-Methods.md#engine_forkchoiceupdatedv1). +Returned by [`engine_newPayloadV1`](index.md#engine_newpayloadv1) and [`engine_forkchoiceUpdatedV1`](index.md#engine_forkchoiceupdatedv1). | Key | Type | Value | |-----|:----:|-------| @@ -60,7 +60,7 @@ Returned by [`engine_newPayloadV1`](Engine-API-Methods.md#engine_newpayloadv1) a ## Transition configuration object -Parameter for and returned by [`engine_exchangeTransitionConfigurationV1`](Engine-API-Methods.md#engine_exchangetransitionconfigurationv1). +Parameter for and returned by [`engine_exchangeTransitionConfigurationV1`](index.md#engine_exchangetransitionconfigurationv1). | Key | Type | Value | |-----|:----:|-------| diff --git a/docs/Reference/Evm-Tool.md b/docs/public-networks/reference/evm-tool.md similarity index 98% rename from docs/Reference/Evm-Tool.md rename to docs/public-networks/reference/evm-tool.md index 07cdf1e1..b5f22bda 100644 --- a/docs/Reference/Evm-Tool.md +++ b/docs/public-networks/reference/evm-tool.md @@ -83,7 +83,7 @@ If set to a non-zero value, the sender account must have enough value to cover t The account the invocation is sent from. The specified account must exist in the world state, which unless specified by `--genesis` -or `--prestate` is the set of [accounts used for testing](Accounts-for-Testing.md). +or `--prestate` is the set of [accounts used for testing](../../private-networks/reference/accounts-for-testing.md). ### `receiver` @@ -186,7 +186,7 @@ For memory heavy scripts, setting this option may reduce the volume of JSON outp The Besu Genesis file to use when evaluating the EVM. Most useful are the `alloc` items that set up accounts and their stored memory states. -For a complete description of this file see [Genesis file items](Config-Items.md). +For a complete description of this file see [Genesis file items](genesis-items.md). `--prestate` is a deprecated alternative option name. diff --git a/docs/Reference/Config-Items.md b/docs/public-networks/reference/genesis-items.md similarity index 72% rename from docs/Reference/Config-Items.md rename to docs/public-networks/reference/genesis-items.md index f9f9921c..d24a6250 100644 --- a/docs/Reference/Config-Items.md +++ b/docs/public-networks/reference/genesis-items.md @@ -4,34 +4,34 @@ description: Configuration items specified in the Hyperledger Besu genesis file # Genesis file items -The [Besu genesis file](../HowTo/Configure/Genesis-File.md) contains [network configuration items](#configuration-items) +The [Besu genesis file](../concepts/genesis-file.md) contains [network configuration items](#configuration-items) and [genesis block parameters](#genesis-block-parameters). ## Configuration items -Network configuration items are specified in the genesis file in the `config` object. +Network configuration items are specified in the genesis file in the `config` object. | Item | Description | |---------------------|-:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Milestone blocks | [Milestone blocks for the network](#milestone-blocks). | -| `chainID` | [Chain ID for the network](../Concepts/NetworkID-And-ChainID.md). | -| `ethash` | Specifies network uses [Ethash](../Concepts/Consensus-Protocols/Overview-Consensus.md) and contains [`fixeddifficulty`](#fixed-difficulty). | -| `clique` | Specifies network uses [Clique](../HowTo/Configure/Consensus-Protocols/Clique.md) and contains [Clique configuration items](../HowTo/Configure/Consensus-Protocols/Clique.md#genesis-file). | -| `ibft2` | Specifies network uses [IBFT 2.0](../HowTo/Configure/Consensus-Protocols/IBFT.md) and contains [IBFT 2.0 configuration items](../HowTo/Configure/Consensus-Protocols/IBFT.md#genesis-file). | -| `qbft` | Specifies network uses [QBFT](../HowTo/Configure/Consensus-Protocols/QBFT.md) and contains [QBFT configuration items](../HowTo/Configure/Consensus-Protocols/QBFT.md#genesis-file). | -| `transitions` | Specifies block at which to [change IBFT 2.0 or QBFT validators](../HowTo/Troubleshoot/Add-Validators-Without-Voting.md). | -| `contractSizeLimit` | Maximum contract size in bytes. Specify in [free gas networks](../HowTo/Configure/FreeGas.md). The default is `24576` and the maximum size is `2147483647`. | +| `chainID` | [Chain ID for the network](../concepts/network-and-chain-id.md). | +| `ethash` | Specifies network uses [Ethash](../../private-networks/how-to/configure/consensus/index.md) and contains [`fixeddifficulty`](#fixed-difficulty). | +| `clique` | Specifies network uses [Clique](../../private-networks/how-to/configure/consensus/clique.md) and contains [Clique configuration items](../../private-networks/how-to/configure/consensus/clique.md#genesis-file). | +| `ibft2` | Specifies network uses [IBFT 2.0](../../private-networks/how-to/configure/consensus/ibft.md) and contains [IBFT 2.0 configuration items](../../private-networks/how-to/configure/consensus/ibft.md#genesis-file). | +| `qbft` | Specifies network uses [QBFT](../../private-networks/how-to/configure/consensus/qbft.md) and contains [QBFT configuration items](../../private-networks/how-to/configure/consensus/qbft.md#genesis-file). | +| `transitions` | Specifies block at which to [change IBFT 2.0 or QBFT validators](../../private-networks/how-to/configure/consensus/add-validators-without-voting.md). | +| `contractSizeLimit` | Maximum contract size in bytes. Specify in [free gas networks](../../private-networks/how-to/configure/free-gas.md). The default is `24576` and the maximum size is `2147483647`. | | `evmStackSize` | Maximum stack size. Specify to increase the maximum stack size in private networks with complex smart contracts. The default is `1024`. | | `isQuorum` | Set to `true` to allow [interoperable private transactions] between Hyperledger Besu and [GoQuorum clients] using the Tessera private transaction manager. | -| `ecCurve` | Specifies [the elliptic curve to use](../HowTo/Configure/Alternative-EC-Curves.md). Default is `secp256k1`. | +| `ecCurve` | Specifies [the elliptic curve to use](../../private-networks/how-to/configure/curves.md). Default is `secp256k1`. | | `discovery` | Specifies [discovery configuration items](#discovery-configuration-items). The `discovery` object can be left empty. | ## Genesis block parameters The purpose of some genesis block parameters varies depending on the consensus protocol (Ethash, -[Clique](../HowTo/Configure/Consensus-Protocols/Clique.md), -[IBFT 2.0](../HowTo/Configure/Consensus-Protocols/IBFT.md), or -[QBFT](../HowTo/Configure/Consensus-Protocols/QBFT.md)). These parameters include: +[Clique](../../private-networks/how-to/configure/consensus/clique.md), +[IBFT 2.0](../../private-networks/how-to/configure/consensus/ibft.md), or +[QBFT](../../private-networks/how-to/configure/consensus/qbft.md)). These parameters include: * `difficulty`. * `extraData`. @@ -46,7 +46,7 @@ consensus protocols. | `gasLimit` | Block gas limit. Total gas limit for all transactions in a block. | | `nonce` | Used in block computation. Can be any value in the genesis block (commonly set to `0x0`). | | `timestamp` | Creation date and time of the block. Must be before the next block so we recommend specifying `0x0` in the genesis file. | -| `alloc` | Defines [accounts with balances](Accounts-for-Testing.md) or [contracts](../HowTo/Configure/Contracts-in-Genesis.md). | +| `alloc` | Defines [accounts with balances](../../private-networks/reference/accounts-for-testing.md) or [contracts](../../private-networks/how-to/configure/contracts.md). | ## Milestone blocks @@ -127,7 +127,7 @@ the network's difficulty constant and override the `difficulty` parameter from t ## Discovery configuration items -Use the `discovery` configuration items to specify the [`bootnodes`](CLI/CLI-Syntax.md#bootnodes) and [`discovery-dns-url`](CLI/CLI-Syntax.md#discovery-dns-url) +Use the `discovery` configuration items to specify the [`bootnodes`](cli/options.md#bootnodes) and [`discovery-dns-url`](cli/options.md#discovery-dns-url) in the genesis file, in place of using CLI options or listing them in the configuration file. If either CLI option is used, it takes precedence over the genesis file. Anything listed in the configuration file also takes precedence. @@ -150,4 +150,4 @@ Anything listed in the configuration file also takes precedence. [GoQuorum clients]: https://consensys.net/docs/goquorum/en/stable/ -[interoperable private transactions]: ../HowTo/Use-Privacy/Use-GoQuorum-compatible-privacy.md +[interoperable private transactions]: ../../private-networks/how-to/use-privacy/goquorum-compatible.md diff --git a/docs/Reference/Projects-Using-Besu.md b/docs/public-networks/reference/projects-using-besu.md similarity index 100% rename from docs/Reference/Projects-Using-Besu.md rename to docs/public-networks/reference/projects-using-besu.md diff --git a/docs/Reference/Trace-Types.md b/docs/public-networks/reference/trace-types.md similarity index 88% rename from docs/Reference/Trace-Types.md rename to docs/public-networks/reference/trace-types.md index 200a2fd2..7b3a093a 100644 --- a/docs/Reference/Trace-Types.md +++ b/docs/public-networks/reference/trace-types.md @@ -4,7 +4,7 @@ description: Transaction trace types # Transaction trace types -When [tracing transactions](../HowTo/Troubleshoot/Trace-Transactions.md), the trace type options are +When [tracing transactions](../how-to/troubleshoot/trace-transactions.md), the trace type options are [`trace`](#trace), [`vmTrace`](#vmtrace), and [`stateDiff`](#statediff). ## trace @@ -156,17 +156,17 @@ An absent value is distinct from zero when creating accounts or clearing storage ## Applicable API methods The trace options `trace`, `vmTrace`, and `stateDiff` are available for the following -[ad-hoc tracing API methods](../HowTo/Troubleshoot/Trace-Transactions.md#ad-hoc-tracing-apis): +[ad-hoc tracing API methods](../how-to/troubleshoot/trace-transactions.md#ad-hoc-tracing-apis): -* [`trace_call`](API-Methods.md#trace_call) -* [`trace_callMany`](API-Methods.md#trace_callmany) -* [`trace_rawTransaction`](API-Methods.md#trace_rawtransaction) -* [`trace_replayBlockTransactions`](API-Methods.md#trace_replayblocktransactions) +* [`trace_call`](api/index.md#trace_call) +* [`trace_callMany`](api/index.md#trace_callmany) +* [`trace_rawTransaction`](api/index.md#trace_rawtransaction) +* [`trace_replayBlockTransactions`](api/index.md#trace_replayblocktransactions) Only the `trace` option is available for the following -[transaction-trace filtering API methods](../HowTo/Troubleshoot/Trace-Transactions.md#transaction-trace-filtering-apis): +[transaction-trace filtering API methods](../how-to/troubleshoot/trace-transactions.md#transaction-trace-filtering-apis): -* [`trace_block`](API-Methods.md#trace_block) -* [`trace_filter`](API-Methods.md#trace_filter) -* [`trace_get`](API-Methods.md#trace_get) -* [`trace_transaction`](API-Methods.md#trace_transaction) +* [`trace_block`](api/index.md#trace_block) +* [`trace_filter`](api/index.md#trace_filter) +* [`trace_get`](api/index.md#trace_get) +* [`trace_transaction`](api/index.md#trace_transaction) diff --git a/docs/Reference/web3js-quorum.md b/docs/public-networks/reference/web3js-quorum.md similarity index 100% rename from docs/Reference/web3js-quorum.md rename to docs/public-networks/reference/web3js-quorum.md diff --git a/docs/Tutorials/Merge-Testnet.md b/docs/public-networks/tutorials/merge-testnet.md similarity index 92% rename from docs/Tutorials/Merge-Testnet.md rename to docs/public-networks/tutorials/merge-testnet.md index 065c0c04..0bfd54a3 100644 --- a/docs/Tutorials/Merge-Testnet.md +++ b/docs/public-networks/tutorials/merge-testnet.md @@ -4,20 +4,20 @@ Description: How to run Besu and Teku on the Merge testnet # Run Besu and Teku on the Merge testnet -You can test Besu as an [execution client](../Concepts/Merge.md#execution-clients) and +You can test Besu as an [execution client](../concepts/the-merge.md#execution-clients) and [Teku](https://docs.teku.consensys.net/en/stable/) -as a [consensus client](../Concepts/Merge.md#consensus-clients) on the +as a [consensus client](../concepts/the-merge.md#consensus-clients) on the [Kiln Merge testnet](https://blog.ethereum.org/2022/03/14/kiln-merge-testnet/). ## 1. Install Besu and Teku -Install [Besu](../HowTo/Get-Started/Installation-Options/Install-Binaries.md) and +Install [Besu](../get-started/install/binary-distribution.md) and [Teku](https://docs.teku.consensys.net/en/stable/HowTo/Get-Started/Installation-Options/Install-Binaries/). Ensure you meet the prerequisites for the installation option you use. For example, you must have Java 11+ if using the Besu and Teku binary distributions. -Ensure you meet the [system requirements for Besu on Mainnet](../HowTo/Get-Started/System-Requirements/System-Requirements-Public.md). +Ensure you meet the [system requirements for Besu on Mainnet](../get-started/system-requirements.md). ## 2. Generate the shared secret @@ -29,8 +29,8 @@ openssl rand -hex 32 | tr -d "\n" > jwtsecret.hex You will specify `jwtsecret.hex` when starting both Besu and Teku. This is a shared JWT secret the clients use to authenticate each other when using the -[Engine API](../HowTo/Interact/APIs/Engine-API.md). - +[Engine API](../how-to/use-engine-api.md). + ## 3. Generate validator keys and stake ETH If you're running a [validator client](#beacon-node-and-validator-client), create a test Ethereum address (you can do @@ -71,9 +71,9 @@ besu \ ``` Specify the path to the `jwtsecret.hex` file generated in [step 2](#2-generate-the-shared-secret) using the -[`--engine-jwt-secret`](../Reference/CLI/CLI-Syntax.md#engine-jwt-secret) option. +[`--engine-jwt-secret`](../reference/cli/options.md#engine-jwt-secret) option. -See the [`--engine-*`](../Reference/CLI/CLI-Syntax.md#engine-host-allowlist) options for more information on running +See the [`--engine-*`](../reference/cli/options.md#engine-host-allowlist) options for more information on running Besu as an execution client. ## 5. Start Teku @@ -141,7 +141,7 @@ After starting Besu and Teku, your node should start syncing and connecting to p !!! example === "Besu logs" - + ```bash 2022-03-21 20:42:09.295-07:00 | EthScheduler-Timer-0 | INFO | FullSyncTargetManager | No sync target, waiting for peers. Current peers: 0 2022-03-21 20:42:14.298-07:00 | EthScheduler-Timer-0 | INFO | FullSyncTargetManager | No sync target, waiting for peers. Current peers: 0 @@ -149,9 +149,9 @@ After starting Besu and Teku, your node should start syncing and connecting to p 2022-03-21 20:42:18.452-07:00 | nioEventLoopGroup-3-8 | INFO | SyncTargetManager | Found common ancestor with peer Peer 0xab3a286b181721c794... at block 55127 2022-03-21 20:42:18.454-07:00 | nioEventLoopGroup-3-8 | INFO | PipelineChainDownloader | PipelineChain download complete ``` - + === "Teku logs" - + ```bash 2022-03-21 20:43:24.355 INFO - Syncing *** Target slot: 76092, Head slot: 2680, Remaining slots: 73412, Connected peers: 8 2022-03-21 20:43:36.363 INFO - Syncing *** Target slot: 76093, Head slot: 2879, Remaining slots: 73214, Connected peers: 10 diff --git a/mkdocs.navigation.yml b/mkdocs.navigation.yml index dab8e6fe..aac76c60 100644 --- a/mkdocs.navigation.yml +++ b/mkdocs.navigation.yml @@ -10,185 +10,195 @@ INHERIT: mkdocs.extra.yml # DO NOT MODIFY THIS LINE nav: - - How to: - - Get started with Besu: - - System requirements: - - Private network: HowTo/Get-Started/System-Requirements/System-Requirements-Private.md - - Public network: HowTo/Get-Started/System-Requirements/System-Requirements-Public.md + - Public networks: + - public-networks/index.md + - Get started: + - System requirements: public-networks/get-started/system-requirements.md - Install Besu: - - Options: HowTo/Get-Started/Installation-Options/Options.md - - Run Besu from Docker image: HowTo/Get-Started/Installation-Options/Run-Docker-Image.md - - Install binary distribution: HowTo/Get-Started/Installation-Options/Install-Binaries.md - - Build from source: HowTo/Get-Started/Installation-Options/Build-from-source.md - - Start Besu: HowTo/Get-Started/Starting-node.md - - Migrate to Besu: HowTo/Get-Started/migrate-to-besu.md - - Configure Besu: - - Consensus protocols: - - QBFT: HowTo/Configure/Consensus-Protocols/QBFT.md - - IBFT 2.0: HowTo/Configure/Consensus-Protocols/IBFT.md - - Clique: HowTo/Configure/Consensus-Protocols/Clique.md - - Create a genesis file: HowTo/Configure/Genesis-File.md - - Specify options in a configuration file: HowTo/Configure/Using-Configuration-File.md - - Configure a free gas network: HowTo/Configure/FreeGas.md - - TLS: - - Client and server TLS: HowTo/Configure/TLS/Configure-TLS.md - - Peer-to-peer TLS: HowTo/Configure/TLS/P2P-TLS.md - - High availability: - - Configure high availability of APIs: HowTo/Configure/Configure-HA/High-Availability.md - - Sample load balancer configurations: HowTo/Configure/Configure-HA/Sample-Configuration.md - - Predeploy a contract in the genesis file: HowTo/Configure/Contracts-in-Genesis.md - - Configure mining: HowTo/Configure/Configure-Mining.md - - Pass JVM options: HowTo/Configure/Passing-JVM-Options.md - - Alternative elliptic curves: HowTo/Configure/Alternative-EC-Curves.md - - Block proposal permissioning: HowTo/Configure/Block-Proposal-Permissioning.md - - Interact with node: - - Besu APIs: - - Access Besu APIs: HowTo/Interact/APIs/API.md - - Use JSON-RPC API over HTTP or WebSockets: HowTo/Interact/APIs/Using-JSON-RPC-API.md - - Use RPC Pub/Sub API over WebSockets: HowTo/Interact/APIs/RPC-PubSub.md - - Use GraphQL over HTTP: HowTo/Interact/APIs/GraphQL.md - - Authenticate JSON-RPC requests: HowTo/Interact/APIs/Authentication.md - - Use the Engine API: HowTo/Interact/APIs/Engine-API.md - - Client libraries: - - Use the web3js-quorum client library: HowTo/Interact/Client-Libraries/web3js-quorum.md - - Filters: - - Access logs using JSON-RPC API: HowTo/Interact/Filters/Accessing-Logs-Using-JSON-RPC.md - - Find and connect to peers: - - Specify bootnodes: HowTo/Find-and-Connect/Bootnodes.md - - Configure static nodes: HowTo/Find-and-Connect/Static-Nodes.md - - Configure ports for access: HowTo/Find-and-Connect/Configuring-Ports.md - - Manage peers: HowTo/Find-and-Connect/Managing-Peers.md - - Specify NAT method: HowTo/Find-and-Connect/Specifying-NAT.md - - Monitor nodes: - - Use metrics: HowTo/Monitor/Metrics.md - - Use Elastic Stack: HowTo/Monitor/Elastic-Stack.md - - Use Quorum Hibernate: HowTo/Monitor/Quorum-Hibernate.md - - Use Splunk: HowTo/Monitor/Splunk-Enterprise.md - - Use OpenTelemetry: HowTo/Monitor/OpenTelemetry-Collector.md - - Configure logging: HowTo/Monitor/Logging.md - - Send transactions: - - Use wallets for key management: HowTo/Send-Transactions/Account-Management.md - - Create and send transactions: HowTo/Send-Transactions/Transactions.md - - Create and send private transactions: HowTo/Send-Transactions/Creating-Sending-Private-Transactions.md - - Send concurrent private transactions: HowTo/Send-Transactions/Concurrent-Private-Transactions.md - - Include revert reason: HowTo/Send-Transactions/Revert-Reason.md - - Limit access to node: - - Use local permissioning: HowTo/Limit-Access/Local-Permissioning.md - - Update onchain allowlists: HowTo/Limit-Access/Updating-Permission-Lists.md - - Specify interface version: HowTo/Limit-Access/Specify-Perm-Version.md - - Use privacy features: - - Use EEA-compliant privacy: HowTo/Use-Privacy/EEA-Compliant.md - - Use Besu-extended privacy: HowTo/Use-Privacy/Privacy.md - - Create and manage privacy groups: HowTo/Use-Privacy/Create-Manage-Privacy-Groups.md - - Sign privacy marker transactions: HowTo/Use-Privacy/Sign-Privacy-Marker-Transactions.md - - Access private and privacy marker transactions: HowTo/Use-Privacy/Access-Private-Transactions.md - - Run Tessera with Besu: HowTo/Use-Privacy/Run-Tessera-With-Besu.md - - Use flexible privacy: HowTo/Use-Privacy/Use-FlexiblePrivacy.md - - Use GoQuorum-compatible privacy: HowTo/Use-Privacy/Use-GoQuorum-compatible-privacy.md - - Private transaction performance best practices: HowTo/Use-Privacy/Performance-Best-Practices.md - - Deploy for production: - - Deploy to the cloud: HowTo/Deploy/Cloud.md - - Use Ansible to deploy Besu: HowTo/Deploy/Ansible.md - - Use Kubernetes to deploy a private network: HowTo/Deploy/Kubernetes.md - - Configure bootnodes: HowTo/Deploy/Bootnodes.md - - Configure validators: HowTo/Deploy/Validators.md - - Deploy permissioning management dapp: HowTo/Deploy/Production.md - - Use Ethstats network monitor: HowTo/Deploy/Ethstats.md - - Backup and restore: HowTo/Backup/Backup.md - - Upgrade: - - Upgrade node: HowTo/Upgrade/Upgrade-Node.md - - Upgrade protocol: HowTo/Upgrade/Upgrade-Protocol.md - - Prepare for The Merge: HowTo/Upgrade/Prepare-for-The-Merge.md - - Develop dapps on Besu: - - Use Truffle: HowTo/Develop-Dapps/Truffle.md - - Use client libraries: HowTo/Develop-Dapps/Client-Libraries.md - - Troubleshoot: - - Add and remove validators without voting: HowTo/Troubleshoot/Add-Validators-Without-Voting.md - - Use EVM tool: HowTo/Troubleshoot/Use-EVM-Tool.md - - Collect Java runtime data: HowTo/Troubleshoot/Java-Flight-Recording.md - - Trace transactions: HowTo/Troubleshoot/Trace-Transactions.md - - Solve common problems: HowTo/Troubleshoot/Troubleshooting.md - - Tutorials: - - Quorum Developer Quickstart: Tutorials/Developer-Quickstart.md - - Create a private network: - - Use QBFT (PoA): Tutorials/Private-Network/Create-QBFT-Network.md - - Use IBFT 2.0 (PoA): Tutorials/Private-Network/Create-IBFT-Network.md - - Use Clique (PoA): Tutorials/Private-Network/Create-Private-Clique-Network.md - - Use Ethash (PoW): Tutorials/Private-Network/Create-Private-Network.md - - Add and remove IBFT 2.0 validators: Tutorials/Private-Network/Adding-removing-IBFT-validators.md - - Permissioning: - - Create a permissioned network: Tutorials/Permissioning/Create-Permissioned-Network.md - - Get started with onchain permissioning: Tutorials/Permissioning/Getting-Started-Onchain-Permissioning.md - - Upgrade the permissioning contracts: Tutorials/Permissioning/Upgrade-Permissioning-Contract.md - - Smart contracts and transactions: - - Deploy a contract: Tutorials/Contracts/Deploying-Contracts.md - - Interact with a deployed contract: Tutorials/Contracts/Calling-Contract-Functions.md - - Transfer account funds: Tutorials/Contracts/Account-Funds-Transfers.md - - Privacy: - - Create a privacy-enabled network: Tutorials/Privacy/Configuring-Privacy.md - - Create a privacy-enabled network using the Quickstart: Tutorials/Privacy/Privacy-Example.md - - Configure a multi-tenant network: Tutorials/Privacy/Configuring-Multi-Tenancy.md - - Use web3js-quorum multinode example: Tutorials/Privacy/web3js-quorum-Multinode-example.md - - Kubernetes: - - Overview: Tutorials/Kubernetes/Overview.md - - Local playground: Tutorials/Kubernetes/Playground.md - - Create a cluster: Tutorials/Kubernetes/Create-Cluster.md - - Deploy charts: Tutorials/Kubernetes/Deploy-Charts.md - - Quorum Explorer: Tutorials/Kubernetes/Quorum-Explorer.md - - Maintenance: Tutorials/Kubernetes/Maintenance.md - - Production: Tutorials/Kubernetes/Production.md - - Configure Kubernetes mode in NAT Manager: Tutorials/Kubernetes/Nat-Manager-Kubernetes.md - - Deploy on Microsoft Azure: Tutorials/Private-Network-Example-Azure.md - - Run Besu and Teku on the Merge testnet: Tutorials/Merge-Testnet.md - - Concepts: - - Architecture: Concepts/ArchitectureOverview.md - - Consensus protocols: - - Overview: Concepts/Consensus-Protocols/Overview-Consensus.md - - Comparing PoA consensus protocols: Concepts/Consensus-Protocols/Comparing-PoA.md - - Data storage formats: Concepts/Data-Storage-Formats.md - - Events and logs: Concepts/Events-and-Logs.md - - The Merge: Concepts/Merge.md - - Mining: Concepts/Mining.md - - Monitoring: Concepts/Monitoring.md - - Network ID and chain ID: Concepts/NetworkID-And-ChainID.md - - Network vs node configuration: Concepts/Network-vs-Node.md - - Node keys: Concepts/Node-Keys.md - - Node types: Concepts/Node-Types.md - - Permissioning: - - Overview: Concepts/Permissioning/Permissioning-Overview.md - - Onchain permissioning: Concepts/Permissioning/Onchain-Permissioning.md - - Permissioning plugin: Concepts/Permissioning/Plugin-Permissioning.md - - Plugins: Concepts/Plugins.md - - Privacy: - - Overview: Concepts/Privacy/Privacy-Overview.md - - Private transactions: Concepts/Privacy/Private-Transactions.md - - Privacy groups: Concepts/Privacy/Privacy-Groups.md - - Processing private transactions: Concepts/Privacy/Private-Transaction-Processing.md - - Flexible privacy groups: Concepts/Privacy/Flexible-PrivacyGroups.md - - Multi-tenancy: Concepts/Privacy/Multi-Tenancy.md - - Privacy plugin: Concepts/Privacy/Plugin-Privacy.md - - Protocol upgrades: Concepts/Protocol-Upgrades.md - - Pruning: Concepts/Pruning.md - - Public key infrastructure: Concepts/PKI.md - - TLS communication: Concepts/TLS.md - - Transactions: - - Transaction types: Concepts/Transactions/Transaction-Types.md - - Transaction pool: Concepts/Transactions/Transaction-Pool.md - - Validating transactions: Concepts/Transactions/Transaction-Validation.md - - Reference: - - Besu command line: - - Options: Reference/CLI/CLI-Syntax.md - - Subcommands: Reference/CLI/CLI-Subcommands.md - - Besu API methods: Reference/API-Methods.md - - Besu API objects: Reference/API-Objects.md - - Engine API methods: Reference/Engine-API-Methods.md - - Engine API objects: Reference/Engine-API-Objects.md - - Transaction trace types: Reference/Trace-Types.md - - Genesis file items: Reference/Config-Items.md - - Web3js-quorum reference: Reference/web3js-quorum.md - - Plugin API interfaces: Reference/Plugin-API-Interfaces.md - - Accounts for testing: Reference/Accounts-for-Testing.md - - EVM tool: Reference/Evm-Tool.md - - Projects using Besu: Reference/Projects-Using-Besu.md - - Security disclosure policy: Reference/Responsible-Disclosure.md - - Blog posts and webinars: Reference/Resources.md + - public-networks/get-started/install/index.md + - Run Besu from Docker image: public-networks/get-started/install/run-docker-image.md + - Install binary distribution: public-networks/get-started/install/binary-distribution.md + - Start Besu: public-networks/get-started/start-node.md + - Migrate to Besu: public-networks/get-started/migrate-to-besu.md + - How to: + - Prepare for The Merge: public-networks/how-to/prepare-for-the-merge.md + - Use the Besu API: + - public-networks/how-to/use-besu-api/index.md + - Use JSON-RPC over HTTP, WS, and IPC: public-networks/how-to/use-besu-api/json-rpc.md + - Use RPC Pub/Sub over WS: public-networks/how-to/use-besu-api/rpc-pubsub.md + - Use GraphQL over HTTP: public-networks/how-to/use-besu-api/graphql.md + - Authenticate JSON-RPC requests: public-networks/how-to/use-besu-api/authenticate.md + - Access logs using JSON-RPC: public-networks/how-to/use-besu-api/access-logs.md + - Use the Engine API: public-networks/how-to/use-engine-api.md + - Use a configuration file: public-networks/how-to/configuration-file.md + - Create and send transactions: public-networks/how-to/send-transactions.md + - Connect to a network: + - Sync Besu: public-networks/how-to/connect/sync-node.md + - Configure static nodes: public-networks/how-to/connect/static-nodes.md + - Configure ports: public-networks/how-to/connect/configure-ports.md + - Manage peers: public-networks/how-to/connect/manage-peers.md + - Specify NAT method: public-networks/how-to/connect/specify-nat.md + - Monitor nodes: + - public-networks/how-to/monitor/index.md + - Use metrics: public-networks/how-to/monitor/metrics.md + - Configure logging: public-networks/how-to/monitor/logging.md + - Pass JVM options: public-networks/how-to/pass-jvm-options.md + - Configure high availability: + - public-networks/how-to/configure-ha/index.md + - Sample load balancer configurations: public-networks/how-to/configure-ha/sample-configuration.md + - Develop dapps: + - Use Truffle: public-networks/how-to/develop/truffle.md + - Use client libraries: public-networks/how-to/develop/client-libraries.md + - Use proof of work: + - Configure mining: public-networks/how-to/use-pow/mining.md + - Upgrade Besu: public-networks/how-to/upgrade-node.md + - Troubleshoot: + - Use EVM tool: public-networks/how-to/troubleshoot/evm-tool.md + - Use Java Flight Recorder: public-networks/how-to/troubleshoot/java-flight-recorder.md + - Trace transactions: public-networks/how-to/troubleshoot/trace-transactions.md + - Concepts: + - The Merge: public-networks/concepts/the-merge.md + - Data storage formats: public-networks/concepts/data-storage-formats.md + - Transactions: + - Transaction types: public-networks/concepts/transactions/types.md + - Transaction pool: public-networks/concepts/transactions/pool.md + - Transaction validation: public-networks/concepts/transactions/validation.md + - Network ID and chain ID: public-networks/concepts/network-and-chain-id.md + - Events and logs: public-networks/concepts/events-and-logs.md + - Genesis file: public-networks/concepts/genesis-file.md + - Node keys: public-networks/concepts/node-keys.md + - Tutorials: + - Run Besu and Teku on the Merge testnet: public-networks/tutorials/merge-testnet.md + - Reference: + - Besu command line: + - Options: public-networks/reference/cli/options.md + - Subcommands: public-networks/reference/cli/subcommands.md + - Besu API: + - public-networks/reference/api/index.md + - Objects: public-networks/reference/api/objects.md + - Engine API: + - public-networks/reference/engine-api/index.md + - Objects: public-networks/reference/engine-api/objects.md + - Genesis file items: public-networks/reference/genesis-items.md + - EVM tool options: public-networks/reference/evm-tool.md + - Transaction trace types: public-networks/reference/trace-types.md + - Projects using Besu: public-networks/reference/projects-using-besu.md + - Security disclosure policy: public-networks/reference/disclosure.md + - Private networks: + - private-networks/index.md + - Get started: + - System requirements: private-networks/get-started/system-requirements.md + - Install Besu: + - private-networks/get-started/install/index.md + - Run Besu from Docker image: private-networks/get-started/install/run-docker-image.md + - Install binary distribution: private-networks/get-started/install/binary-distribution.md + - Start Besu: private-networks/get-started/start-node.md + - How to: + - private-networks/how-to/index.md + - Configure: + - Consensus: + - private-networks/how-to/configure/consensus/index.md + - QBFT: private-networks/how-to/configure/consensus/qbft.md + - IBFT: private-networks/how-to/configure/consensus/ibft.md + - Clique: private-networks/how-to/configure/consensus/clique.md + - Add and remove validators without voting: private-networks/how-to/configure/consensus/add-validators-without-voting.md + - Free gas network: private-networks/how-to/configure/free-gas.md + - Bootnodes: private-networks/how-to/configure/bootnodes.md + - Validators: private-networks/how-to/configure/validators.md + - Pre-deploy a contract: private-networks/how-to/configure/contracts.md + - TLS: + - Client and server TLS: private-networks/how-to/configure/tls/client-and-server.md + - Peer-to-peer TLS: private-networks/how-to/configure/tls/p2p.md + - Block proposal permissioning: private-networks/how-to/configure/block-proposal-permissioning.md + - Alternative elliptic curves: private-networks/how-to/configure/curves.md + - Create and send transactions: + - private-networks/how-to/send-transactions/index.md + - Create and send private transactions: private-networks/how-to/send-transactions/private-transactions.md + - Send concurrent private transactions: private-networks/how-to/send-transactions/concurrent-private-transactions.md + - Include revert reason: private-networks/how-to/send-transactions/revert-reason.md + - Monitor nodes: + - private-networks/how-to/monitor/index.md + - Use Elastic Stack: private-networks/how-to/monitor/elastic-stack.md + - Use Quorum Hibernate: private-networks/how-to/monitor/quorum-hibernate.md + - Use Splunk: private-networks/how-to/monitor/splunk.md + - Use OpenTelemtry: private-networks/how-to/monitor/opentelemetry.md + - Use privacy: + - Use EEA-compliant privacy: private-networks/how-to/use-privacy/eea-compliant.md + - Use Besu-extended privacy: private-networks/how-to/use-privacy/besu-extended.md + - Use GoQuorum-compatible privacy: private-networks/how-to/use-privacy/goquorum-compatible.md + - Run Tessera with Besu: private-networks/how-to/use-privacy/tessera.md + - Create and manage privacy groups: private-networks/how-to/use-privacy/privacy-groups.md + - Use flexible privacy groups: private-networks/how-to/use-privacy/flexible.md + - Access private and privacy marker transactions: private-networks/how-to/use-privacy/access-private-transactions.md + - Sign privacy marker transactions: private-networks/how-to/use-privacy/sign-pmts.md + - Use the web3js-quorum library: private-networks/how-to/use-privacy/web3js-quorum.md + - Performance best practices: private-networks/how-to/use-privacy/performance-best-practices.md + - Use permissioning: + - Use local permissioning: private-networks/how-to/use-permissioning/local.md + - Use onchain permissioning: private-networks/how-to/use-permissioning/onchain.md + - Deploy for production: + - Deploy to the cloud: private-networks/how-to/deploy/cloud.md + - Use Ansible: private-networks/how-to/deploy/ansible.md + - Use Kubernetes: private-networks/how-to/deploy/kubernetes.md + - Use Ethstats network monitor: private-networks/how-to/deploy/ethstats.md + - Backup and restore: private-networks/how-to/backup.md + - Upgrade: private-networks/how-to/upgrade.md + - Concepts: + - private-networks/concepts/index.md + - Proof of authority consensus: private-networks/concepts/poa.md + - Privacy: + - private-networks/concepts/privacy/index.md + - Private transactions: + - private-networks/concepts/privacy/private-transactions/index.md + - Private transaction processing: private-networks/concepts/privacy/private-transactions/processing.md + - Privacy groups: private-networks/concepts/privacy/privacy-groups.md + - Flexible privacy groups: private-networks/concepts/privacy/flexible-privacy.md + - Multi-tenancy: private-networks/concepts/privacy/multi-tenancy.md + - Privacy plugin: private-networks/concepts/privacy/plugin.md + - Permissioning: + - private-networks/concepts/permissioning/index.md + - Onchain permissioning: private-networks/concepts/permissioning/onchain.md + - Permissioning plugin: private-networks/concepts/permissioning/plugin.md + - Public key infrastructure: private-networks/concepts/pki.md + - Plugins: private-networks/concepts/plugins.md + - Tutorials: + - Quorum Developer Quickstart: private-networks/tutorials/quickstart.md + - Create a QBFT network: private-networks/tutorials/qbft.md + - Create an IBFT 2.0 network: + - private-networks/tutorials/ibft/index.md + - Add and remove IBFT 2.0 validators: private-networks/tutorials/ibft/validators.md + - Create a Clique network: private-networks/tutorials/clique.md + - Create an Ethash network: private-networks/tutorials/ethash.md + - Create a privacy-enabled network: + - private-networks/tutorials/privacy/index.md + - Create a privacy-enabled network using the Quickstart: private-networks/tutorials/privacy/quickstart.md + - Configure a multi-tenant network: private-networks/tutorials/privacy/multi-tenancy.md + - Use the web3js-quorum multi-node example: private-networks/tutorials/privacy/web3js-quorum.md + - Create a permissioned network: + - private-networks/tutorials/permissioning/index.md + - Get started with onchain permissioning: private-networks/tutorials/permissioning/onchain.md + - Upgrade permissioning contracts: private-networks/tutorials/permissioning/upgrade-contracts.md + - Deploy a smart contract: + - private-networks/tutorials/contracts/index.md + - Transfer account funds: private-networks/tutorials/contracts/transfer-funds.md + - Interact with a deployed contract: private-networks/tutorials/contracts/interact.md + - Deploy using Kubernetes: + - private-networks/tutorials/kubernetes/index.md + - Local playground: private-networks/tutorials/kubernetes/playground.md + - Create a cluster: private-networks/tutorials/kubernetes/cluster.md + - Deploy charts: private-networks/tutorials/kubernetes/charts.md + - Use the Quorum Explorer: private-networks/tutorials/kubernetes/quorum-explorer.md + - Maintenance: private-networks/tutorials/kubernetes/maintenance.md + - Production: private-networks/tutorials/kubernetes/production.md + - Configure Kubernetes mode in NAT manager: private-networks/tutorials/kubernetes/nat-manager.md + - Deploy using Microsoft Azure: private-networks/tutorials/azure.md + - Reference: + - private-networks/reference/index.md + - Besu command line: + - Private network options: private-networks/reference/cli/options.md + - Private network subcommands: private-networks/reference/cli/subcommands.md + - Besu API: + - private-networks/reference/api/index.md + - Private network API objects: private-networks/reference/api/objects.md + - Accounts for testing: private-networks/reference/accounts-for-testing.md + - Plugin API interfaces: private-networks/reference/plugin-api-interfaces.md diff --git a/mkdocs.redirects.yml b/mkdocs.redirects.yml index 1335e679..35dfb4d1 100644 --- a/mkdocs.redirects.yml +++ b/mkdocs.redirects.yml @@ -18,35 +18,180 @@ plugins: # old_path.md: new_path.md # you can't use an already redirected path as an old_path. # new_path can be a file inside the docs/ folder or any URL (http://...) - HowTo/Get-Started/System-Requirements-Private.md: HowTo/Get-Started/System-Requirements/System-Requirements-Private.md - HowTo/Get-Started/System-Requirements-Public.md: HowTo/Get-Started/System-Requirements/System-Requirements-Public.md - HowTo/Get-Started/Install-Binaries.md: HowTo/Get-Started/Installation-Options/Install-Binaries.md - HowTo/Get-Started/Build-from-source.md: HowTo/Get-Started/Installation-Options/Build-from-source.md - HowTo/Get-Started/Run-Docker-Image.md: HowTo/Get-Started/Installation-Options/Run-Docker-Image.md - HowTo/Deploy/High-Availability.md: HowTo/Configure/Configure-HA/High-Availability.md - HowTo/Deploy/Monitoring-Performance.md: HowTo/Monitor/Metrics.md - HowTo/Upgrade/Upgrade-Network.md: HowTo/Upgrade/Upgrade-Node.md - HowTo/Find-and-Connect/Using-UPnP.md: HowTo/Find-and-Connect/Specifying-NAT.md - HowTo/Use-Privacy/Run-Orion-With-Besu.md: HowTo/Use-Privacy/Run-Tessera-With-Besu.md - Concepts/Transactions/Trace-Types.md: Reference/Trace-Types.md - HowTo/Develop-Dapps/Use-web3js.md: HowTo/Develop-Dapps/Client-Libraries.md - Concepts/Client-Libraries.md: HowTo/Develop-Dapps/Client-Libraries.md - Concepts/Privacy/Onchain-PrivacyGroups.md: Concepts/Privacy/Flexible-PrivacyGroups.md - HowTo/Use-Privacy/Use-OnChainPrivacy.md: HowTo/Use-Privacy/Use-FlexiblePrivacy.md - Tutorials/Quickstarts/Azure-Private-Network-Quickstart.md: Tutorials/Private-Network-Example-Azure.md - HowTo/Interact/Client-Libraries/eeajs.md: HowTo/Interact/Client-Libraries/web3js-quorum.md - HowTo/Interact/Client-Libraries/web3js-eea.md: HowTo/Interact/Client-Libraries/web3js-quorum.md - Privacy/Explanation/Privacy-Groups.md: Concepts/Privacy/Privacy-Groups.md - Tutorials/Privacy/eeajs-Multinode-example.md: Tutorials/Privacy/web3js-quorum-Multinode-example.md - Tutorials/Privacy/web3js-eea-Multinode-example.md: Tutorials/Privacy/web3js-quorum-Multinode-example.md - HowTo/Configure/Configure-TLS.md: HowTo/Configure/TLS/Configure-TLS.md + HowTo/Get-Started/System-Requirements-Private.md: private-networks/get-started/system-requirements.md + HowTo/Get-Started/System-Requirements-Public.md: public-networks/get-started/system-requirements.md + HowTo/Get-Started/Install-Binaries.md: public-networks/get-started/install/binary-distribution.md + HowTo/Get-Started/Build-from-source.md: public-networks/get-started/install/index.md + HowTo/Get-Started/Run-Docker-Image.md: public-networks/get-started/install/run-docker-image.md + HowTo/Deploy/index.md: public-networks/how-to/configure-ha/index.md + HowTo/Deploy/Monitoring-Performance.md: public-networks/how-to/monitor/metrics.md + HowTo/Upgrade/Upgrade-Network.md: public-networks/how-to/upgrade-node.md + HowTo/Find-and-Connect/Using-UPnP.md: public-networks/how-to/connect/specify-nat.md + HowTo/Use-Privacy/Run-Orion-With-Besu.md: private-networks/how-to/use-privacy/tessera.md + Concepts/Transactions/Trace-Types.md: public-networks/reference/trace-types.md + HowTo/Develop-Dapps/Use-web3js.md: public-networks/how-to/develop/client-libraries.md + Concepts/Client-Libraries.md: public-networks/how-to/develop/client-libraries.md + Concepts/Privacy/Onchain-PrivacyGroups.md: private-networks/concepts/privacy/flexible-privacy.md + HowTo/Use-Privacy/Use-OnChainPrivacy.md: private-networks/how-to/use-privacy/flexible.md + Tutorials/Quickstarts/Azure-Private-Network-Quickstart.md: private-networks/tutorials/azure.md + HowTo/Interact/Client-Libraries/eeajs.md: private-networks/how-to/use-privacy/web3js-quorum.md + HowTo/Interact/Client-Libraries/web3js-eea.md: private-networks/how-to/use-privacy/web3js-quorum.md + Privacy/Explanation/Privacy-Groups.md: private-networks/concepts/privacy/privacy-groups.md + Tutorials/Privacy/eeajs-Multinode-example.md: private-networks/tutorials/privacy/web3js-quorum.md + Tutorials/Privacy/web3js-eea-Multinode-example.md: private-networks/tutorials/privacy/web3js-quorum.md + HowTo/Configure/Configure-TLS.md: private-networks/how-to/configure/tls/client-and-server.md HowTo/Deploy/Lite-Block-Explorer.md: https://github.com/Alethio/ethereum-lite-explorer HowTo/Deploy/Lite-Network-Monitor.md: https://github.com/Alethio/ethstats-network-dashboard - HowTo/Configure/Consensus-Protocols/QuorumIBFT.md: HowTo/Configure/Consensus-Protocols/QBFT.md - HowTo/Configure/Configure-Data-Storage.md: Concepts/Data-Storage-Formats.md - Concepts/Consensus-Protocols/Proof-of-Stake.md: Concepts/Merge.md - Tutorials/Examples/Private-Network-Example.md: Tutorials/Developer-Quickstart.md - Tutorials/Examples/Privacy-Example.md: Tutorials/Privacy/Privacy-Example.md - Tutorials/Examples/Nat-Manager-Kubernetes.md: Tutorials/Kubernetes/Nat-Manager-Kubernetes.md - Tutorials/Examples/Private-Network-Example-Azure.md: Tutorials/Private-Network-Example-Azure.md - HowTo/Configure/Consensus-Protocols/Add-Validators.md: HowTo/Configure/Consensus-Protocols/QBFT.md + HowTo/Configure/Consensus-Protocols/QuorumIBFT.md: private-networks/how-to/configure/consensus/qbft.md + HowTo/Configure/Configure-Data-Storage.md: public-networks/concepts/data-storage-formats.md + Concepts/Consensus-Protocols/Proof-of-Stake.md: public-networks/concepts/the-merge.md + Tutorials/Examples/Private-Network-Example.md: private-networks/tutorials/quickstart.md + Tutorials/Examples/Privacy-Example.md: private-networks/tutorials/privacy/quickstart.md + Tutorials/Examples/Nat-Manager-Kubernetes.md: private-networks/tutorials/kubernetes/nat-manager.md + Tutorials/Examples/Private-Network-Example-Azure.md: private-networks/tutorials/azure.md + HowTo/Configure/Consensus-Protocols/Add-Validators.md: private-networks/how-to/configure/consensus/qbft.md + # restructure redirects: + HowTo/Get-Started/System-Requirements/System-Requirements-Private.md: private-networks/get-started/system-requirements.md + HowTo/Get-Started/System-Requirements/System-Requirements-Public.md: public-networks/get-started/system-requirements.md + HowTo/Get-Started/Installation-Options/Install-Binaries.md: public-networks/get-started/install/binary-distribution.md + HowTo/Get-Started/Installation-Options/Build-from-source.md: public-networks/get-started/install/index.md + HowTo/Get-Started/Installation-Options/Run-Docker-Image.md: public-networks/get-started/install/run-docker-image.md + HowTo/Get-Started/Starting-node.md: public-networks/get-started/start-node.md + HowTo/Upgrade/Prepare-for-The-Merge.md: public-networks/how-to/prepare-for-the-merge.md + HowTo/Interact/APIs/API.md: public-networks/how-to/use-besu-api/index.md + HowTo/Interact/APIs/Using-JSON-RPC-API.md: public-networks/how-to/use-besu-api/json-rpc.md + HowTo/Interact/APIs/RPC-PubSub.md: public-networks/how-to/use-besu-api/rpc-pubsub.md + HowTo/Interact/APIs/GraphQL.md: public-networks/how-to/use-besu-api/graphql.md + HowTo/Interact/APIs/Authentication.md: public-networks/how-to/use-besu-api/authenticate.md + HowTo/Interact/APIs/Engine-API.md: public-networks/how-to/use-engine-api.md + HowTo/Interact/Filters/Accessing-Logs-Using-JSON-RPC.md: public-networks/how-to/use-besu-api/access-logs.md + HowTo/Send-Transactions/Transactions.md: public-networks/how-to/send-transactions.md + HowTo/Send-Transactions/Account-Management.md: public-networks/how-to/send-transactions.md + HowTo/Send-Transactions/Creating-Sending-Private-Transactions.md: private-networks/how-to/send-transactions/private-transactions.md + HowTo/Send-Transactions/Concurrent-Private-Transactions.md: private-networks/how-to/send-transactions/concurrent-private-transactions.md + HowTo/Send-Transactions/Revert-Reason.md: private-networks/how-to/send-transactions/revert-reason.md + HowTo/Find-and-Connect/Bootnodes.md: private-networks/how-to/configure/bootnodes.md + HowTo/Find-and-Connect/Static-Nodes.md: public-networks/how-to/connect/static-nodes.md + HowTo/Find-and-Connect/Configuring-Ports.md: public-networks/how-to/connect/configure-ports.md + HowTo/Find-and-Connect/Managing-Peers.md: public-networks/how-to/connect/manage-peers.md + HowTo/Find-and-Connect/Specifying-NAT.md: public-networks/how-to/connect/specify-nat.md + Concepts/Node-Types.md: public-networks/how-to/connect/sync-node.md + HowTo/Monitor/Metrics.md: public-networks/how-to/monitor/metrics.md + HowTo/Monitor/Logging.md: public-networks/how-to/monitor/logging.md + HowTo/Monitor/Elastic-Stack.md: private-networks/how-to/monitor/elastic-stack.md + HowTo/Monitor/Quorum-Hibernate.md: private-networks/how-to/monitor/quorum-hibernate.md + HowTo/Monitor/Splunk-Enterprise.md: private-networks/how-to/monitor/splunk.md + HowTo/Monitor/OpenTelemetry-Collector.md: private-networks/how-to/monitor/opentelemetry.md + HowTo/Configure/Using-Configuration-File.md: public-networks/how-to/configuration-file.md + HowTo/Configure/Configure-Mining.md: public-networks/how-to/use-pow/mining.md + HowTo/Configure/Passing-JVM-Options.md: public-networks/how-to/pass-jvm-options.md + Concepts/Merge.md: public-networks/concepts/the-merge.md + Concepts/NetworkID-And-ChainID.md: public-networks/concepts/network-and-chain-id.md + Concepts/Events-and-Logs.md: public-networks/concepts/events-and-logs.md + HowTo/Configure/Genesis-File.md: public-networks/concepts/genesis-file.md + HowTo/Upgrade/Upgrade-Node.md: public-networks/how-to/upgrade-node.md + HowTo/Upgrade/Upgrade-Protocol.md: private-networks/how-to/upgrade.md + HowTo/Troubleshoot/Use-EVM-Tool.md: public-networks/how-to/troubleshoot/evm-tool.md + HowTo/Troubleshoot/Java-Flight-Recording.md: public-networks/how-to/troubleshoot/java-flight-recorder.md + HowTo/Troubleshoot/Trace-Transactions.md: public-networks/how-to/troubleshoot/trace-transactions.md + Concepts/Node-Keys.md: public-networks/concepts/node-keys.md + Concepts/Data-Storage-Formats.md: public-networks/concepts/data-storage-formats.md + Tutorials/Merge-Testnet.md: public-networks/tutorials/merge-testnet.md + Reference/CLI/CLI-Syntax.md: public-networks/reference/cli/options.md + Reference/CLI/CLI-Subcommands.md: public-networks/reference/cli/subcommands.md + Reference/API-Methods.md: public-networks/reference/api/index.md + Reference/API-Objects.md: public-networks/reference/api/objects.md + Reference/Engine-API-Methods.md: public-networks/reference/engine-api/index.md + Reference/Engine-API-Objects.md: public-networks/reference/engine-api/objects.md + Reference/Config-Items.md: public-networks/reference/genesis-items.md + Reference/Evm-Tool.md: public-networks/reference/evm-tool.md + Reference/Trace-Types.md: public-networks/reference/trace-types.md + Reference/Projects-Using-Besu.md: public-networks/reference/projects-using-besu.md + Reference/Responsible-Disclosure.md: public-networks/reference/disclosure.md + HowTo/Configure/Consensus-Protocols/Clique.md: private-networks/how-to/configure/consensus/clique.md + HowTo/Configure/Consensus-Protocols/IBFT.md: private-networks/how-to/configure/consensus/ibft.md + HowTo/Configure/Consensus-Protocols/QBFT.md: private-networks/how-to/configure/consensus/qbft.md + HowTo/Troubleshoot/Add-Validators-Without-Voting.md: private-networks/how-to/configure/consensus/add-validators-without-voting.md + HowTo/Configure/FreeGas.md: private-networks/how-to/configure/free-gas.md + HowTo/Deploy/Validators.md: private-networks/how-to/configure/validators.md + HowTo/Configure/Contracts-in-Genesis.md: private-networks/how-to/configure/contracts.md + HowTo/Configure/Alternative-EC-Curves.md: private-networks/how-to/configure/curves.md + HowTo/Configure/Block-Proposal-Permissioning.md: private-networks/how-to/configure/block-proposal-permissioning.md + HowTo/Deploy/Bootnodes.md: private-networks/how-to/configure/bootnodes.md + Concepts/ArchitectureOverview.md: index.md + Concepts/Mining.md: public-networks/how-to/use-pow/mining.md + HowTo/Troubleshoot/Troubleshooting.md: public-networks/how-to/troubleshoot/evm-tool.md + Concepts/Protocol-Upgrades.md: private-networks/how-to/upgrade.md + Reference/Resources.md: index.md + HowTo/Use-Privacy/EEA-compliant.md: private-networks/how-to/use-privacy/eea-compliant.md + HowTo/Use-Privacy/Privacy.md: private-networks/how-to/use-privacy/besu-extended.md + HowTo/Use-Privacy/Use-GoQuorum-compatible-privacy.md: private-networks/how-to/use-privacy/goquorum-compatible.md + HowTo/Use-Privacy/Run-Tessera-With-Besu.md: private-networks/how-to/use-privacy/tessera.md + HowTo/Use-Privacy/Create-Manage-Privacy-Groups.md: private-networks/how-to/use-privacy/privacy-groups.md + HowTo/Use-Privacy/Use-FlexiblePrivacy.md: private-networks/how-to/use-privacy/flexible.md + HowTo/Use-Privacy/Access-Private-Transactions.md: private-networks/how-to/use-privacy/access-private-transactions.md + HowTo/Use-Privacy/Sign-Privacy-Marker-Transactions.md: private-networks/how-to/use-privacy/sign-pmts.md + HowTo/Interact/Client-Libraries/web3js-quorum.md: private-networks/how-to/use-privacy/web3js-quorum.md + HowTo/Use-Privacy/Performance-Best-Practices.md: private-networks/how-to/use-privacy/performance-best-practices.md + HowTo/Configure/TLS/Configure-TLS.md: private-networks/how-to/configure/tls/client-and-server.md + HowTo/Configure/TLS/P2P-TLS.md: private-networks/how-to/configure/tls/p2p.md + HowTo/Limit-Access/Local-Permissioning.md: private-networks/how-to/use-permissioning/local.md + HowTo/Limit-Access/Updating-Permission-Lists.md: private-networks/how-to/use-permissioning/onchain.md + HowTo/Limit-Access/Specify-Perm-Version.md: private-networks/how-to/use-permissioning/onchain.md + HowTo/Deploy/Cloud.md: private-networks/how-to/deploy/cloud.md + HowTo/Deploy/Ansible.md: private-networks/how-to/deploy/ansible.md + HowTo/Deploy/Kubernetes.md: private-networks/how-to/deploy/kubernetes.md + HowTo/Deploy/Ethstats.md: private-networks/how-to/deploy/ethstats.md + Reference/web3js-quorum.md: private-networks/how-to/use-privacy/web3js-quorum.md + HowTo/Deploy/Production.md: private-networks/how-to/use-permissioning/onchain.md + Concepts/Network-vs-Node.md: public-networks/concepts/genesis-file.md + HowTo/Develop-Dapps/Truffle.md: public-networks/how-to/develop/truffle.md + HowTo/Develop-Dapps/Client-Libraries.md: public-networks/how-to/develop/client-libraries.md + HowTo/Backup/Backup.md: private-networks/how-to/backup.md + Concepts/Consensus-Protocols/Overview-Consensus.md: private-networks/how-to/configure/consensus/index.md + Concepts/Consensus-Protocols/Comparing-PoA.md: private-networks/concepts/poa.md + Concepts/Privacy/Private-Transactions.md: private-networks/concepts/privacy/private-transactions/index.md + Concepts/Privacy/Private-Transactions-Processing.md: private-networks/concepts/privacy/private-transactions/processing.md + Concepts/Privacy/Privacy-Groups.md: private-networks/concepts/privacy/privacy-groups.md + Concepts/Privacy/Flexible-PrivacyGroups.md: private-networks/concepts/privacy/flexible-privacy.md + Concepts/Privacy/Multi-Tenancy.md: private-networks/concepts/privacy/multi-tenancy.md + Concepts/Privacy/Plugin-Privacy.md: private-networks/concepts/privacy/plugin.md + Concepts/Privacy/Privacy-Overview.md: private-networks/concepts/privacy/index.md + Concepts/Permissioning/Permissioning-Overview.md: private-networks/concepts/permissioning/index.md + Concepts/Permissioning/Onchain-Permissioning.md: private-networks/concepts/permissioning/onchain.md + Concepts/Permissioning/Plugin-Permissioning.md: private-networks/concepts/permissioning/plugin.md + Concepts/PKI.md: private-networks/concepts/pki.md + Tutorials/Developer-Quickstart.md: private-networks/tutorials/quickstart.md + Tutorials/Private-Network/Create-QBFT-Network.md: private-networks/tutorials/qbft.md + Tutorials/Private-Network/Create-IBFT-Network.md: private-networks/tutorials/ibft/index.md + Tutorials/Private-Network/Adding-removing-IBFT-validators.md: private-networks/tutorials/ibft/validators.md + Tutorials/Private-Network/Create-Private-Clique-Network.md: private-networks/tutorials/clique.md + Tutorials/Private-Network/Create-Private-Network.md: private-networks/tutorials/ethash.md + Tutorials/Privacy/Configuring-Privacy.md: private-networks/tutorials/privacy/index.md + Tutorials/Privacy/Privacy-Example.md: private-networks/tutorials/privacy/quickstart.md + Tutorials/Privacy/Configuring-Multi-Tenancy.md: private-networks/tutorials/privacy/multi-tenancy.md + Tutorials/Privacy/web3js-quorum-Multinode-example.md: private-networks/tutorials/privacy/web3js-quorum.md + Tutorials/Permissioning/Create-Permissioned-Network.md: private-networks/tutorials/permissioning/index.md + Tutorials/Permissioning/Getting-Started-Onchain-Permissioning.md: private-networks/tutorials/permissioning/onchain.md + Tutorials/Permissioning/Upgrade-Permissioning-Contract.md: private-networks/tutorials/permissioning/upgrade-contracts.md + Tutorials/Contracts/Deploying-Contracts.md: private-networks/tutorials/contracts/index.md + Tutorials/Contracts/Account-Funds-Transfers.md: private-networks/tutorials/contracts/transfer-funds.md + Tutorials/Contracts/Calling-Contract-Functions.md: private-networks/tutorials/contracts/interact.md + Tutorials/Kubernetes/Overview.md: private-networks/tutorials/kubernetes/index.md + Tutorials/Kubernetes/Playground.md: private-networks/tutorials/kubernetes/playground.md + Tutorials/Kubernetes/Create-Cluster.md: private-networks/tutorials/kubernetes/cluster.md + Tutorials/Kubernetes/Deploy-Charts.md: private-networks/tutorials/kubernetes/charts.md + Tutorials/Kubernetes/Quorum-Explorer.md: private-networks/tutorials/kubernetes/quorum-explorer.md + Tutorials/Kubernetes/Maintenance.md: private-networks/tutorials/kubernetes/maintenance.md + Tutorials/Kubernetes/Production.md: private-networks/tutorials/kubernetes/production.md + Tutorials/Kubernetes/Nat-Manager-Kubernetes.md: private-networks/tutorials/kubernetes/nat-manager.md + Tutorials/Private-Network-Example-Azure.md: private-networks/tutorials/azure.md + Reference/Accounts-for-Testing.md: private-networks/reference/accounts-for-testing.md + Concepts/Monitoring.md: public-networks/how-to/monitor/index.md + Concepts/Transactions/Transaction-Pool.md: public-networks/concepts/transactions/pool.md + Concepts/Transactions/Transaction-Types.md: public-networks/concepts/transactions/types.md + Concepts/Transctions/Transction-Validation.md: public-networks/concepts/transactions/validation.md + Concepts/Plugins.md: private-networks/concepts/plugins.md + Reference/Plugin-API-Interfaces.md: private-networks/reference/plugin-api-interfaces.md + HowTo/Configure/Configure-HA/High-Availability.md: public-networks/how-to/configure-ha/index.md + HowTo/Configure/Configure-HA/Sample-Configuration.md: public-networks/how-to/configure-ha/sample-configuration.md