From v1.2, Pantheon requires Java 11. Pantheon on Java 8 is no longer supported.
From v1.2, Besu requires Java 11. Besu on Java 8 is no longer supported.
### Docker Image Migration
In v1.2, we removed the entry-point script from our Docker image. Refer to the [migration guide](https://docs.pantheon.pegasys.tech/en/latest/Deploying-Pantheon/High-Availability/)
for information on options that were previously automatically added to the Pantheon command line.
In v1.2, we removed the entry-point script from our Docker image. Refer to the [migration guide](https://besu.hyperledger.org/en/latest/Deploying-Besu/High-Availability/)
for information on options that were previously automatically added to the Besu command line.
## 1.2.3
@ -25,7 +25,7 @@ for information on options that were previously automatically added to the Panth
- Update the `pantheon blocks export` command usage [\#1887](https://github.com/PegaSysEng/pantheon/pull/1887) (thanks to [matkt](https://github.com/matkt))
@ -152,7 +152,7 @@ for information on options that were previously automatically added to the Panth
- Added PrivateTransactionValidator to unify logic [#1713](https://github.com/PegaSysEng/pantheon/pull/1713)
- Added JSON-RPC API to report validator block production information [#1687](https://github.com/PegaSysEng/pantheon/pull/1687) (thanks to [matkt](https://github.com/matkt))
- Added Mark Sweep Pruner [#1638](https://github.com/PegaSysEng/pantheon/pull/1638)
- Added the Blake2b F compression function as a precompile in Pantheon [#1614](https://github.com/PegaSysEng/pantheon/pull/1614) (thanks to [iikirilov](https://github.com/iikirilov))
- Added the Blake2b F compression function as a precompile in Besu [#1614](https://github.com/PegaSysEng/pantheon/pull/1614) (thanks to [iikirilov](https://github.com/iikirilov))
- Documentation updates include:
- Added CPU requirements [#1734](https://github.com/PegaSysEng/pantheon/pull/1734)
- Added reference to Ansible role [#1733](https://github.com/PegaSysEng/pantheon/pull/1733)
@ -188,7 +188,7 @@ for information on options that were previously automatically added to the Panth
@ -217,28 +217,28 @@ for information on options that were previously automatically added to the Panth
- New release docker image [\#1664](https://github.com/PegaSysEng/pantheon/pull/1664)
- Support changing log level at runtime [\#1656](https://github.com/PegaSysEng/pantheon/pull/1656) (thanks to [matkt](https://github.com/matkt))
- Implement dump command to dump a specific block from storage [\#1641](https://github.com/PegaSysEng/pantheon/pull/1641) (thanks to [matkt](https://github.com/matkt))
- Add eea\_findPrivacyGroup endpoint to Pantheon [\#1635](https://github.com/PegaSysEng/pantheon/pull/1635) (thanks to [Puneetha17](https://github.com/Puneetha17))
- Add eea\_findPrivacyGroup endpoint to Besu [\#1635](https://github.com/PegaSysEng/pantheon/pull/1635) (thanks to [Puneetha17](https://github.com/Puneetha17))
- Updated eea send raw transaction with privacy group ID [\#1611](https://github.com/PegaSysEng/pantheon/pull/1611) (thanks to [iikirilov](https://github.com/iikirilov))
- Added [admin\_changeLogLevel](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-API-Methods/#admin_changeloglevel) JSON RPC API (thanks to [matkt](https://github.com/matkt))
- Added [admin\_changeLogLevel](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-API-Methods/#admin_changeloglevel) JSON RPC API (thanks to [matkt](https://github.com/matkt))
- Updated for [new Docker image](https://docs.pantheon.pegasys.tech/en/latest/Getting-Started/Run-Docker-Image/)
- Updated [permissioning overview](https://docs.pantheon.pegasys.tech/en/latest/Permissions/Permissioning-Overview/) for onchain account permissioning
- Updated [quickstart](https://docs.pantheon.pegasys.tech/en/latest/Tutorials/Private-Network-Quickstart/#monitoring-nodes-with-prometheus-and-grafana) to include Prometheus and Grafana
- Updated [web3.js-eea reference](https://docs.pantheon.pegasys.tech/en/latest/Reference/web3js-eea-Methods/) to include privacy group methods
- Updated [onchain permissioning to include account permissioning](https://docs.pantheon.pegasys.tech/en/latest/Permissions/Onchain-Permissioning/Onchain-Permissioning/) and [Permissioning Management Dapp](https://docs.pantheon.pegasys.tech/en/latest/Permissions/Onchain-Permissioning/Production/)
- Added [deployment procedure for Permissioning Management Dapp](https://docs.pantheon.pegasys.tech/en/latest/Permissions/Onchain-Permissioning/Production/)
- Added privacy content for [EEA-compliant and Pantheon-extended privacy](https://docs.pantheon.pegasys.tech/en/latest/Privacy/Explanation/Privacy-Groups/)
- Added privacy content for [EEA-compliant and Besu-extended privacy](https://docs.pantheon.pegasys.tech/en/latest/Privacy/Explanation/Privacy-Groups/)
- Added content on [creating and managing privacy groups](https://docs.pantheon.pegasys.tech/en/latest/Privacy/How-To/Create-Manage-Privacy-Groups/)
- Added content on [accessing private and privacy marker transactions](https://docs.pantheon.pegasys.tech/en/latest/Privacy/How-To/Access-Private-Transactions/)
- Added content on [system requirements](https://docs.pantheon.pegasys.tech/en/latest/Installation/System-Requirements/)
- Added reference to [Pantheon role on Galaxy to deploy using Ansible](https://docs.pantheon.pegasys.tech/en/latest/Deploying-Pantheon/Ansible/).
- Added reference to [Besu role on Galaxy to deploy using Ansible](https://docs.pantheon.pegasys.tech/en/latest/Deploying-Besu/Ansible/).
### Technical Improvements
@ -280,7 +280,7 @@ for information on options that were previously automatically added to the Panth
- Add hooks for validation [\#1671](https://github.com/PegaSysEng/pantheon/pull/1671)
- Upgrade to pantheon-build:0.0.6-jdk11 which really does include jdk11 [\#1670](https://github.com/PegaSysEng/pantheon/pull/1670)
- Update PantheonCommand to accept minTransactionGasPriceWei as an integer [\#1668](https://github.com/PegaSysEng/pantheon/pull/1668) (thanks to [matkt](https://github.com/matkt))
- Update BesuCommand to accept minTransactionGasPriceWei as an integer [\#1668](https://github.com/PegaSysEng/pantheon/pull/1668) (thanks to [matkt](https://github.com/matkt))
- Privacy group id consistent [\#1667](https://github.com/PegaSysEng/pantheon/pull/1667) (thanks to [iikirilov](https://github.com/iikirilov))
- Change eea\_getPrivateTransaction endpoint to accept hex [\#1666](https://github.com/PegaSysEng/pantheon/pull/1666) (thanks to [Puneetha17](https://github.com/Puneetha17))
- Factorise metrics code for KeyValueStorage database [\#1663](https://github.com/PegaSysEng/pantheon/pull/1663))
@ -304,14 +304,14 @@ for information on options that were previously automatically added to the Panth
### Additions and Improvements
- \[PAN-2832\] Support setting config options via environment variables [\#1597](https://github.com/PegaSysEng/pantheon/pull/1597)
- Print Pantheon version when starting [\#1593](https://github.com/PegaSysEng/pantheon/pull/1593)
- Print Besu version when starting [\#1593](https://github.com/PegaSysEng/pantheon/pull/1593)
- Added content on [setting CLI options using environment variables](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#specifying-options)
- Added content on [setting CLI options using environment variables](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#specifying-options)
- Simplify PantheonCommand `run` and `parse` methods. [\#1626](https://github.com/PegaSysEng/pantheon/pull/1626)
- Simplify BesuCommand `run` and `parse` methods. [\#1626](https://github.com/PegaSysEng/pantheon/pull/1626)
- PAN-2860: Ignore discport during startup whitelist validation [\#1625](https://github.com/PegaSysEng/pantheon/pull/1625)
- Freeze plugin api version [\#1624](https://github.com/PegaSysEng/pantheon/pull/1624)
- Implement incoming transaction messages CLI option as an unstable command. [\#1622](https://github.com/PegaSysEng/pantheon/pull/1622)
@ -353,7 +353,7 @@ Documentation updates include:
### Additions and Improvements
- \[PAN-2811\] Be more lenient with discovery message deserialization. Completes our support for EIP-8 and enables Pantheon to work on Rinkeby again. [\#1580](https://github.com/PegaSysEng/pantheon/pull/1580)
- \[PAN-2811\] Be more lenient with discovery message deserialization. Completes our support for EIP-8 and enables Besu to work on Rinkeby again. [\#1580](https://github.com/PegaSysEng/pantheon/pull/1580)
- Added liveness and readiness probe stub endpoints [\#1553](https://github.com/PegaSysEng/pantheon/pull/1553)
- Added [link to sample Grafana dashboard](https://docs.pantheon.pegasys.tech/en/latest/Monitoring/Monitoring-Performance/#monitor-node-performance-using-prometheus)
- Added [note about replacing transactions in transaction pool](https://docs.pantheon.pegasys.tech/en/latest/Using-Pantheon/Transactions/Transaction-Pool/#replacing-transactions-with-same-nonce)
- Added [note about replacing transactions in transaction pool](https://docs.pantheon.pegasys.tech/en/latest/Using-Besu/Transactions/Transaction-Pool/#replacing-transactions-with-same-nonce)
- Added [troubleshooting point about illegal reflective access error](https://docs.pantheon.pegasys.tech/en/latest/Troubleshooting/Troubleshooting/#illegal-reflective-access-error-on-startup)
- Added [trusted bootnode behaviour for permissioning](https://docs.pantheon.pegasys.tech/en/latest/Permissions/Onchain-Permissioning/#bootnodes)
- Added [how to obtain a WS authentication token](https://docs.pantheon.pegasys.tech/en/latest/Pantheon-API/Authentication/#obtaining-an-authentication-token)
- Updated [example scripts and added package.json file for creating signed transactions](https://docs.pantheon.pegasys.tech/en/stable/Using-Pantheon/Transactions/Transactions/)
- Added [how to obtain a WS authentication token](https://docs.pantheon.pegasys.tech/en/latest/Besu-API/Authentication/#obtaining-an-authentication-token)
- Updated [example scripts and added package.json file for creating signed transactions](https://docs.pantheon.pegasys.tech/en/stable/Using-Besu/Transactions/Transactions/)
- Added [Privacy Overview](https://docs.pantheon.pegasys.tech/en/latest/Privacy/Privacy-Overview/) and [Processing Private Transactions](https://docs.pantheon.pegasys.tech/en/latest/Privacy/Private-Transaction-Processing/)
- Renaming of Ethstats Lite Explorer to [Ethereum Lite Explorer](https://docs.pantheon.pegasys.tech/en/latest/EthStats/Lite-Block-Explorer/) (thanks to [tzapu](https://github.com/tzapu))
- Added content on using [Truffle with Pantheon](https://docs.pantheon.pegasys.tech/en/latest/Using-Pantheon/Truffle/)
- Updated [developer build instructions to use installDist](https://github.com/PegaSysEng/pantheon/blob/master/docs/development/running-developer-builds.md)
- Added information on [block time and timeout settings](https://docs.pantheon.pegasys.tech/en/latest/Consensus-Protocols/IBFT/#block-time) for IBFT 2.0
- Documentation update for the [`public-key export-address`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#public-key) subcommand.
- Documentation update for the [`public-key export-address`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#public-key) subcommand.
- Updated [IBFT 2.0 overview](https://docs.pantheon.pegasys.tech/en/latest/Consensus-Protocols/IBFT/) to include use of `rlp encode` command and information on setting IBFT 2.0 properties to achieve your desired block time.
## 1.0
@ -882,8 +882,8 @@ Public key address export subcommand was missing in 1.0 release.
- Added rebind mitigation for Websockets. [\#905](https://github.com/PegaSysEng/pantheon/pull/905)
- Support genesis contract code [\#749](https://github.com/PegaSysEng/pantheon/pull/749) (thanks to [kziemianek](https://github.com/kziemianek)). Fixes issue [\#662](https://github.com/PegaSysEng/pantheon/issues/662).
- Documentation updates include:
- Added details on [port configuration](https://docs.pantheon.pegasys.tech/en/latest/Configuring-Pantheon/Networking/#port-configuration)
- Added [Resources page](https://docs.pantheon.pegasys.tech/en/latest/Resources/Resources/) linking to Pantheon blog posts and webinars
- Added details on [port configuration](https://docs.pantheon.pegasys.tech/en/latest/Configuring-Besu/Networking/#port-configuration)
- Added [Resources page](https://docs.pantheon.pegasys.tech/en/latest/Resources/Resources/) linking to Besu blog posts and webinars
- Use network ID instead of chain ID in MainnetPantheonController. [\#929](https://github.com/PegaSysEng/pantheon/pull/929)
- Use network ID instead of chain ID in MainnetBesuController. [\#929](https://github.com/PegaSysEng/pantheon/pull/929)
- Propagate new block messages to other clients in a worker thread [\#928](https://github.com/PegaSysEng/pantheon/pull/928)
- Parallel downloader should stop on puts if requested. [\#927](https://github.com/PegaSysEng/pantheon/pull/927)
- Permission config file location and option under docker [\#925](https://github.com/PegaSysEng/pantheon/pull/925)
@ -1055,37 +1055,37 @@ Built and compatible with with JDK8.
Breaking changes have been made to the command line options in v0.9 to improve usability. Many v0.8 command line options no longer work.
The [documentation](https://docs.pantheon.pegasys.tech/en/latest/) has been updated throughout to use the changed command line options and the [command line reference](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/) documents the changed options.
The [documentation](https://docs.pantheon.pegasys.tech/en/latest/) has been updated throughout to use the changed command line options and the [command line reference](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/) documents the changed options.
| `--goerli` | [`--network=goerli`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#network) | Replaced by `--network` option |
| `--metrics-listen=<HOST:PORT>` | [`--metrics-host=<HOST>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#metrics-host) and [`--metrics-port=<PORT>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#metrics-port) | Split into host and port options |
| `--goerli` | [`--network=goerli`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#network) | Replaced by `--network` option |
| `--metrics-listen=<HOST:PORT>` | [`--metrics-host=<HOST>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#metrics-host) and [`--metrics-port=<PORT>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#metrics-port) | Split into host and port options |
| `--p2p-listen=<HOST:PORT>` | [`--p2p-host=<HOST>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#p2p-host) and [`--p2p-port=<PORT>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#p2p-port) | Split into host and port options |
| `--rinkeby` | [`--network=rinkeby`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#network) | Replaced by `--network` option |
| `--ropsten` | [`--network=ropsten`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#network) | Replaced by `--network` option |
| `--rpc-listen=<HOST:PORT>` | [`--rpc-http-host=<HOST>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#rpc-http-host) and [`--rpc-http-port=<PORT>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#rpc-http-port) | Split into host and port options |
| `--ws-listen=<HOST:PORT>` | [`--rpc-ws-host=<HOST>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#rpc-ws-host) and [`--rpc-ws-port=<PORT>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#rpc-ws-port) | Split into host and port options |
| `--p2p-listen=<HOST:PORT>` | [`--p2p-host=<HOST>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#p2p-host) and [`--p2p-port=<PORT>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#p2p-port) | Split into host and port options |
| `--rinkeby` | [`--network=rinkeby`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#network) | Replaced by `--network` option |
| `--ropsten` | [`--network=ropsten`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#network) | Replaced by `--network` option |
| `--rpc-listen=<HOST:PORT>` | [`--rpc-http-host=<HOST>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#rpc-http-host) and [`--rpc-http-port=<PORT>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#rpc-http-port) | Split into host and port options |
| `--ws-listen=<HOST:PORT>` | [`--rpc-ws-host=<HOST>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#rpc-ws-host) and [`--rpc-ws-port=<PORT>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#rpc-ws-port) | Split into host and port options |
@ -1115,8 +1115,8 @@ has been updated to use the moved quickstart.
to use quickstart in `pantheon-quickstart` repository and indicate that the quickstart is not supported on Windows.
- Added IBFT 2.0 [content](https://docs.pantheon.pegasys.tech/en/latest/Consensus-Protocols/IBFT/) and [JSON RPC API methods](https://docs.pantheon.pegasys.tech/en/latest/Reference/JSON-RPC-API-Methods/#ibft-20-methods).
- Added content on [events and logs](https://docs.pantheon.pegasys.tech/en/latest/Using-Pantheon/Events-and-Logs/), and [using filters](https://docs.pantheon.pegasys.tech/en/latest/Using-Pantheon/Accessing-Logs-Using-JSON-RPC/).
- Added content on integrating with [Prometheus Push Gateway](https://docs.pantheon.pegasys.tech/en/latest/Using-Pantheon/Debugging/#running-prometheus-with-pantheon-in-push-mode)
- Added content on [events and logs](https://docs.pantheon.pegasys.tech/en/latest/Using-Besu/Events-and-Logs/), and [using filters](https://docs.pantheon.pegasys.tech/en/latest/Using-Besu/Accessing-Logs-Using-JSON-RPC/).
- Added content on integrating with [Prometheus Push Gateway](https://docs.pantheon.pegasys.tech/en/latest/Using-Besu/Debugging/#running-prometheus-with-pantheon-in-push-mode)
### Technical Improvements
@ -1142,7 +1142,7 @@ has been updated to use the moved quickstart.
- Enabled command line configuration for privacy precompiled contract address [\#653](https://github.com/PegaSysEng/pantheon/pull/653) (thanks to [Puneetha17](https://github.com/Puneetha17))
- IBFT transmitted packets are logged by gossiper [\#652](https://github.com/PegaSysEng/pantheon/pull/652)
- `admin_addPeer` acceptance test [\#651](https://github.com/PegaSysEng/pantheon/pull/651)
- Added `p2pEnabled` configuration to `ProcessPantheonNodeRunner` [\#649](https://github.com/PegaSysEng/pantheon/pull/649)
- Added `p2pEnabled` configuration to `ProcessBesuNodeRunner` [\#649](https://github.com/PegaSysEng/pantheon/pull/649)
- Added description to automatic benchmarks [\#646](https://github.com/PegaSysEng/pantheon/pull/646)
Where `container` is the name or ID of the Docker container containing the Pantheon node.
Where `container` is the name or ID of the Docker container containing the Besu node.
The container can be running or stopped when you copy the key and data directory. If your node was
fully synchronized to MainNet, the data directory will be ~2TB.
When restarting your node with the v0.8.4 Docker image:
* Save the node key in the [`key` file](https://docs.pantheon.pegasys.tech/en/latest/Configuring-Pantheon/Node-Keys/#node-private-key) in the data
directory or specify the location using the [`--node-private-key` option](https://docs.pantheon.pegasys.tech/en/latest/Configuring-Pantheon/Node-Keys/#specifying-a-custom-node-private-key-file).
* Save the node key in the [`key` file](https://docs.pantheon.pegasys.tech/en/latest/Configuring-Besu/Node-Keys/#node-private-key) in the data
directory or specify the location using the [`--node-private-key` option](https://docs.pantheon.pegasys.tech/en/latest/Configuring-Besu/Node-Keys/#specifying-a-custom-node-private-key-file).
* Specify the `<destination_directory` as a [volume for the data directory](https://docs.pantheon.pegasys.tech/en/latest/Getting-Started/Run-Docker-Image/#data-directory).
### Bug Fixes
@ -1240,7 +1240,7 @@ When restarting your node with the v0.8.4 Docker image:
- Added the Command Line Style Guide [\#530](https://github.com/PegaSysEng/pantheon/pull/530)
- Documentation updates include:
* Migrated to new [documentation site](https://docs.pantheon.pegasys.tech/en/latest/)
@ -1295,7 +1295,7 @@ From v0.8.3, incoming HTTP requests are only accepted from hostnames specified u
If using the URL `http://127.0.0.1` to make JSON-RPC calls, use `--host-whitelist` to specify the hostname `127.0.0.1` or update the hostname to `localhost`.
If your application publishes RPC ports, specify the hostnames when starting Pantheon. For example:
If your application publishes RPC ports, specify the hostnames when starting Besu. For example:
```json
pantheon --host-whitelist=example.com
@ -1325,7 +1325,7 @@ Specify `*` or `all` for `--host-whitelist` to effectively disable host protecti
- Added RLP enc/dec for PrePrepare, Commit and NewRound messages [\#200](https://github.com/PegaSysEng/pantheon/pull/200)
* Reorganised [Installation documentation](https://github.com/PegaSysEng/pantheon/wiki/Installation) and added [Chocolatey installation](https://github.com/PegaSysEng/pantheon/wiki/Install-Binaries#windows-with-chocolatey) for Windows
@ -1339,7 +1339,7 @@ Specify `*` or `all` for `--host-whitelist` to effectively disable host protecti
- Fix acceptance test [\#324](https://github.com/PegaSysEng/pantheon/pull/324)
- Added the `IbftFinalState` [\#385](https://github.com/PegaSysEng/pantheon/pull/385)
- Acceptance test for `getTransactionReceipt` JSON-RPC method [\#278](https://github.com/PegaSysEng/pantheon/pull/278)
- Inject `StorageProvider` into `PantheonController` instances [\#259](https://github.com/PegaSysEng/pantheon/pull/259)
- Inject `StorageProvider` into `BesuController` instances [\#259](https://github.com/PegaSysEng/pantheon/pull/259)
## 0.8.2
@ -1394,7 +1394,7 @@ Specify `*` or `all` for `--host-whitelist` to effectively disable host protecti
- Treat output length as a maximum length for CALL operations (PR [#236](https://github.com/PegaSysEng/pantheon/pull/236))
- ECRec precompile should return empty instead of 32 zero bytes when the input is invalid (PR [#227](https://github.com/PegaSysEng/pantheon/pull/227))
- File name too long error while building from source ([#215](https://github.com/PegaSysEng/pantheon/issues/215) thanks to [@5chdn](https://github.com/5chdn) for reporting) (PR [#221](https://github.com/PegaSysEng/pantheon/pull/221))
- Loop syntax in `runPantheonPrivateNetwork.sh` (PR [#237](https://github.com/PegaSysEng/pantheon/pull/237) thanks to [@matt9ucci](https://github.com/matt9ucci))
- Loop syntax in `runBesuPrivateNetwork.sh` (PR [#237](https://github.com/PegaSysEng/pantheon/pull/237) thanks to [@matt9ucci](https://github.com/matt9ucci))
- Fix `CompressionException: Snappy decompression failed` errors ([#251](https://github.com/PegaSysEng/pantheon/issues/251) thanks to [@5chdn](https://github.com/5chdn) for reporting) (PR [#274](https://github.com/PegaSysEng/pantheon/pull/274))
# Pantheon Command Line Interface (CLI) Style Guide
# Besu Command Line Interface (CLI) Style Guide
## Purpose of this Document
This document contains guidelines to help the Pantheon command line interface (CLI) remain usable, modular, and extensible as it grows over time. This is a living document and should evolve to better suit end users and those who contribute to Pantheon.
This document contains guidelines to help the Besu command line interface (CLI) remain usable, modular, and extensible as it grows over time. This is a living document and should evolve to better suit end users and those who contribute to Besu.
> **Note:** Although not every pattern shown in this style guide is currently followed in Pantheon, it is our intention to revise and build new functionality with these guidelines in mind.
> **Note:** Although not every pattern shown in this style guide is currently followed in Besu, it is our intention to revise and build new functionality with these guidelines in mind.
**The primary audience for this document is:**
* Members of the Pantheon team
* Members of the Besu team
* Developers contributing pull requests
## Mission Statement
The Pantheon CLI should create a consistent and easy to understand experience for end users. We're focused on creating a great developer experience for both new and expert users of Ethereum clients.
The Besu CLI should create a consistent and easy to understand experience for end users. We're focused on creating a great developer experience for both new and expert users of Ethereum clients.
## General Guidelines
There are four guiding principles for the Pantheon CLI to help us create a good developer experience for both new and expert users: **_(1) be consistent, (2) keep it simple, (3) be proactive, and (4) be informative (to people and machines)._**
There are four guiding principles for the Besu CLI to help us create a good developer experience for both new and expert users: **_(1) be consistent, (2) keep it simple, (3) be proactive, and (4) be informative (to people and machines)._**
This section outlines what each of these principles mean and the following sections explain how these principles should be applied in specific scenarios.
### 1. Be Consistent
Consistency is important to help our end users build a mental model of how Pantheon works. By being consistent with our word choices, visual formatting, and style of communication it helps users know what to expect as they interact with Pantheon.
Consistency is important to help our end users build a mental model of how Besu works. By being consistent with our word choices, visual formatting, and style of communication it helps users know what to expect as they interact with Besu.
### 2. Keep it Simple
Avoid technical jargon and always assume our end users may have questions. This doesn't mean answering all of those questions in the CLI, but it does mean explaining things in a simple way and when complexity inevitably rises, directing our users to documentation that will help them.
@ -31,7 +31,7 @@ Avoid technical jargon and always assume our end users may have questions. This
Being proactive means anticipating user needs and guiding them through a process. This most often takes the form of solution-oriented warning/error messages. Put yourself in the user's shoes and consider what questions you would have every time we are showing feedback or status to them.
### 4. Be Informative (to people and machines)
We seek a balance between providing enough relevant information to help our users develop a solid mental model of how Pantheon works without forcing them to read too much text. In addition, it is important we consider not only the end user of the CLI but to be consistent with formatting and feedback so information is easily interpreted by machines.
We seek a balance between providing enough relevant information to help our users develop a solid mental model of how Besu works without forcing them to read too much text. In addition, it is important we consider not only the end user of the CLI but to be consistent with formatting and feedback so information is easily interpreted by machines.
## User Input & Actions
@ -47,9 +47,9 @@ A subcommand is an action that can be taken on a single object (i.e. import, exp
**Examples:**
`pantheon blocks import`
`besu blocks import`
`pantheon public-key export`
`besu public-key export`
Although noun-verb formatting seems backwards from a speaking perspective (i.e. blocks import vs. import blocks) it allows us to organize commands the same way users think about completing an action (the topic first, then the action).
@ -58,9 +58,9 @@ Although noun-verb formatting seems backwards from a speaking perspective (i.e.
Using required options instead of arguments helps users have a clear understanding of the impact of an action. Inputs are most often verbs (from, to, etc.). Other options avoid the use of verbs to help make this distinction.
Requiring the `--from` option makes it clear where you are importing from. In the case of a single parameter (as shown in the example above) we should also accept this as an argument (`pantheon blocks import <FILE>`). Although we accept this formatting, it is not encouraged and should be excluded from our documentation.
Requiring the `--from` option makes it clear where you are importing from. In the case of a single parameter (as shown in the example above) we should also accept this as an argument (`besu blocks import <FILE>`). Although we accept this formatting, it is not encouraged and should be excluded from our documentation.
### Flags
@ -101,7 +101,7 @@ Options are used for settings, like specifying a configuration file or to provid
### General Naming Guidelines
Words matter. Most users will not be interacting with Pantheon on a regular basis so we should name things for ease of understanding.
Words matter. Most users will not be interacting with Besu on a regular basis so we should name things for ease of understanding.
* Don't use abbreviations unless they are widely understood. Optimize for understanding, not number of characters.
@ -30,13 +30,13 @@ Simple does not mean the fewest lines of code. Simple code is:
* Usually the most performant. Without data showing another approach is faster, stick with the simple design
* Not simplistic:
- Ethereum is complex and Pantheon must handle this complexity and operate correctly and securely
- Pantheon code should align with well-established Ethereum abstractions and terminology used in Ethereum specifications
- Ethereum is complex and Besu must handle this complexity and operate correctly and securely
- Besu code should align with well-established Ethereum abstractions and terminology used in Ethereum specifications
- Aim to make the code as simple as possible but no simpler
## 2.2 Idiomatic Java
Pantheon embraces typical Java idioms including using an Object Oriented approach to design. This includes:
Besu embraces typical Java idioms including using an Object Oriented approach to design. This includes:
* Providing alternate behaviours via polymorphism instead of having conditional logic scattered through the codebase. For example, `ProtocolSpec` provides a standard interface to blockchain operations and multiple implementations define the different behaviours for each Ethereum milestone.
* Encapsulating behaviour and data together in classes. For example, `BytesValue` encapsulates byte data and methods operating on the byte data. `BytesValue.isZero()` is an instance method instead of accepting a `BytesValue` parameter.
@ -47,11 +47,11 @@ Pantheon embraces typical Java idioms including using an Object Oriented approac
- Don't pass lambdas into executors because it makes it harder to identify the threading interactions. The lambda makes the code shorter but not clearer. Instead use a separate class or extract a method.
* For good examples, refer to the APIs the JDK itself exposes.
>**Note** If you're not sure what idiomatic Java looks like, start by following the typical patterns and naming used in Pantheon.
>**Note** If you're not sure what idiomatic Java looks like, start by following the typical patterns and naming used in Besu.
## 2.3 You Ain't Gonna Need It (YAGNI)
The Pantheon design prioritizes meeting current requirements in the simplest, clearest way over attempting to anticipate future functionality. As a result, Pantheon’s design:
The Besu design prioritizes meeting current requirements in the simplest, clearest way over attempting to anticipate future functionality. As a result, Besu’s design:
* Is not set in stone as a big upfront design. The design is adjusted through constant refactoring as new requirements are added and understood.
* Uses abstraction only where it aids understanding of the current code. Abstraction is not used where it only supports future needs.
* Avoids over-engineering.
@ -100,7 +100,7 @@ So the code can cope with constant refactoring and evolving design, write code t
* Uses dependency injection
- Constructors should be simple, with dependencies passed in rather than built in the constructor
- Pantheon does not use a dependency injection framework
- Besu does not use a dependency injection framework
* Validates method parameters for public methods using the Guava `Preconditions` class. Avoid validating parameters in private methods
@ -113,7 +113,7 @@ So the code can cope with constant refactoring and evolving design, write code t
* Use Optional rather than returning null when not having a value is a normal case
* Consider exception and error handling as part of the overall design. Pantheon avoids checked exceptions
* Consider exception and error handling as part of the overall design. Besu avoids checked exceptions
* Give threads meaningful names. For example:
`Executors.newFixedThreadPool(1, new ThreadFactoryBuilder().setNameFormat(“Ibft”).build())`
@ -123,7 +123,7 @@ So the code can cope with constant refactoring and evolving design, write code t
## 4.1 Style Guide
Pantheon follows the [Google code style](https://google.github.io/styleguide/javaguide.html) and uses spotless to ensure consistency of formatting.
Besu follows the [Google code style](https://google.github.io/styleguide/javaguide.html) and uses spotless to ensure consistency of formatting.
To automatically reformat the code before creating a pull request, run:
@ -182,7 +182,7 @@ Method parameters must be final. Class level and local fields should be final w
# 5 Logging
Logging is important for understanding what Pantheon is doing at any given time (for example, progress while synchronizing) and investigating defects. During development, add logging to aid in these cases.
Logging is important for understanding what Besu is doing at any given time (for example, progress while synchronizing) and investigating defects. During development, add logging to aid in these cases.
## 5.1 Log Messages
@ -213,12 +213,12 @@ Make log messages:
* _Warn_
Anything that can potentially cause application oddities but from which Pantheon automatically recovers
Anything that can potentially cause application oddities but from which Besu automatically recovers
* _Error_
Any error which is fatal to the operation, but not Pantheon itself (for example, missing data)
Any error which is fatal to the operation, but not Besu itself (for example, missing data)
:+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
Welcome to the Pantheon repository! The following is a set of guidelines for contributing to this
Welcome to the Besu repository! The following is a set of guidelines for contributing to this
repo and its packages. These are mostly guidelines, not rules. Use your best judgment,
and feel free to propose changes to this document in a pull request.
@ -26,15 +26,15 @@ and feel free to propose changes to this document in a pull request.
## Code of Conduct
This project and everyone participating in it is governed by the [Pantheon Code of Conduct](CODE-OF-CONDUCT.md).
This project and everyone participating in it is governed by the [Besu Code of Conduct](CODE-OF-CONDUCT.md).
By participating, you are expected to uphold this code. Please report unacceptable behavior to [private@pegasys.tech].
## I just have a quick question
> **Note:** Please don't file an issue to ask a question. You'll get faster results by using the resources below.
* [Pantheon documentation]
* [Gitter]
* [Besu documentation]
* [Rocketchat]
## How To Contribute
### Reporting Bugs
@ -51,7 +51,7 @@ open a new issue and include a link to the original issue in the body of your ne
#### Before Submitting A Bug Report
* **Confirm the problem** is reproducible in the latest version of the software
* **Check [Pantheon documentation]**. You might be able to find the cause of the problem and fix things yourself.
* **Check [Besu documentation]**. You might be able to find the cause of the problem and fix things yourself.
* **Perform a [cursory search of project issues](https://pegasys1.atlassian.net/browse/PAN-2502?jql=project%20%3D%20PAN)**
to see if the problem has already been reported. If it has **and the issue is still open**, add a comment
to the existing issue instead of opening a new one.
@ -63,7 +63,7 @@ Explain the problem and include additional details to help maintainers reproduce
* **Use a clear and descriptive summary** for the issue to identify the problem.
* **Describe the exact steps which reproduce the problem** in as many details as possible. For example,
start by explaining how you started Pantheon, e.g. which command exactly you used in the terminal,
start by explaining how you started Besu, e.g. which command exactly you used in the terminal,
or how you started it otherwise.
* **Provide specific examples to demonstrate the steps**. Include links to files or GitHub projects,
or copy/pasteable snippets, which you use in those examples. If you're providing snippets in the issue,
@ -84,14 +84,14 @@ and under which conditions it normally happens.
Include details about your configuration and environment:
* **Which version of the software are you using?** You can get the exact version by running `pantheon -v` in your terminal.
* **Which version of the software are you using?** You can get the exact version by running `besu -v` in your terminal.
* **What OS & Version are you running?**
* **For Linux - What kernel are you running?** You can get the exact version by running `uname -a` in your terminal.
* **Are you running in a virtual machine?** If so, which VM software are you using and which operating
systems and versions are used for the host and the guest?
* **Are you running in a docker container?** If so, what version of docker?
* **Are you running in a a Cloud?** If so, which one, and what type/size of VM is it?
* **What version of Java are you running?** You can get the exact version by looking at the pantheon
* **What version of Java are you running?** You can get the exact version by looking at the besu
logfile during startup.
### Suggesting Enhancements
@ -110,7 +110,7 @@ When you are creating an enhancement suggestion, please
#### Before Submitting An Enhancement Suggestion
* **Check the [Pantheon documentation].** You might be able to find the cause of the problem and fix things yourself.
* **Check the [Besu documentation].** You might be able to find the cause of the problem and fix things yourself.
* **Perform a [cursory search of project issues](https://pegasys1.atlassian.net/browse/PAN-2502?jql=project%20%3D%20PAN)**
to see if the problem has already been reported. If it has **and the issue is still open**, add a comment
to the existing issue instead of opening a new one.
@ -129,7 +129,7 @@ Provide the following information:
* **Explain why this enhancement would be useful** to most users.
* **Does this enhancement exist in other clients?**
* **Specify which version of the software you're using.** You can get the exact version by running
`pantheon -v` in your terminal.
`besu -v` in your terminal.
* **Specify the name and version of the OS you're using.**
## Your First Contribution
@ -138,7 +138,7 @@ Start by looking through the 'good first issue' and 'help wanted' labeled issues
and a test or two.
* [Help wanted issues][search-label-help-wanted] - issues which are a bit more involved than `good first issue` issues.
When you've identified an issue you'd like to work on, ping us on [Gitter] and we'll assign it to you.
When you've identified an issue you'd like to work on, ping us on [Rocketchat] and we'll assign it to you.
### Contribution Workflow
The codebase and documentation are maintained using the same "*contributor workflow*" where everyone
@ -148,7 +148,7 @@ This facilitates social contribution, easy testing, and peer review.
To contribute changes, use the following workflow:
1. [**Fork the repository**](https://github.com/PegaSysEng/pantheon/fork).
1. [**Fork the repository**](https://github.com/PegaSysEng/besu/fork).
1. **Clone your fork** to your computer.
1. **Create a topic branch** and name it appropriately.
Starting the branch name with the issue number is a good practice and a reminder to fix only one issue in a
@ -161,7 +161,7 @@ For this reason do not mix any formatting fixes or code moves with actual code c
another part of the software. Running the `./gradlew clean check test` command locally will help you
to be confident that your changes will pass CI tests once pushed as a Pull Request.
1. **Push your changes** to your remote fork (usually labeled as `origin`).
1. **Create a pull-request** (PR) on the Pantheon repository. If the PR addresses an existing Jira issue,
1. **Create a pull-request** (PR) on the Besu repository. If the PR addresses an existing Jira issue,
include the issue number in the PR title in square brackets (for example, `[PAN-2374]`).
1. **Add labels** to identify the type of your PR. _For example, if your PR is not ready to validate,
add the "work-in-progress" label. If it fixes a bug, add the "bug" label._
@ -172,7 +172,7 @@ If you don't know who to choose, simply select the reviewers proposed by GitHub
1. **Make any required changes** on your contribution from the reviewers feedback.
_Make the changes, commit to your branch, and push to your remote fork._
1. **When your PR is validated**, all tests passed and your branch has no conflicts with the target branch,
you can **"squash and merge"** your PR and you're done. You contributed to Pantheon! Thanks !
you can **"squash and merge"** your PR and you're done. You contributed to Besu! Thanks !
### Architectural Best Practices
@ -240,8 +240,8 @@ These are not strictly enforced during the build, but should be adhered to and c
| [`needs engineering approval`][search-label-needs-engineering-approval] | Pull requests which need to be approved from a technical person, mainly documentation PRs. |
// choice(name: 'IMPORT_FILE', choices: ['ropsten-000k-100k.blocks', 'ropsten-0-1M.blocks', '0-999.blocks', '6784590-6785589.blocks'], description: 'The name of the file to import, same ordial position as DATASET', trim: true)
// For Network Import
choice(name: 'PANTHEON_SYNC_MODE', choices: ['FULL', 'FAST'], description: 'The mode of network syncing to perform', trim: true),
string(name: 'PANTHEON_MIN_PEERS', defaultValue: '2', description: 'Minimum number of peers to wait for before gathering data', trim: true),
string(name: 'PANTHEON_BENCHMARK_DURATION', defaultValue: '30', description: 'Maximum number of minutes to run the benchmark (full sync ends the benchmark early)', trim: true),
choice(name: 'BESU_SYNC_MODE', choices: ['FULL', 'FAST'], description: 'The mode of network syncing to perform', trim: true),
string(name: 'BESU_MIN_PEERS', defaultValue: '2', description: 'Minimum number of peers to wait for before gathering data', trim: true),
string(name: 'BESU_BENCHMARK_DURATION', defaultValue: '30', description: 'Maximum number of minutes to run the benchmark (full sync ends the benchmark early)', trim: true),
Pantheon is an Apache 2.0 licensed, MainNet compatible, Ethereum client written in Java.
Besu is an Apache 2.0 licensed, MainNet compatible, Ethereum client written in Java.
## Issues
Pantheon issues are tracked in [Jira](https://pegasys1.atlassian.net/secure/Dashboard.jspa?selectPageId=10117) not GitHub.
Besu issues are tracked in [Jira](https://pegasys1.atlassian.net/secure/Dashboard.jspa?selectPageId=10117) not GitHub.
See our [contribution guidelines](CONTRIBUTING.md) for more detail on searching and creating issues.
If you've commented on existing issue and have been waiting for a reply, feel free to ping us on [Gitter].
If you've commented on existing issue and have been waiting for a reply, feel free to ping us on [RocketChat].
## Pantheon Users
## Besu Users
The process for installing and running Pantheon as a user is different to when developing. Some processes in our [user documentation](https://docs.pantheon.pegasys.tech/en/latest/) are different to those described in this Readme.
The process for installing and running Besu as a user is different to when developing. Some processes in our [user documentation](https://docs.besu.pegasys.tech/en/latest/) are different to those described in this Readme.
## Pantheon Developers
## Besu Developers
* [Contribution Guidelines](CONTRIBUTING.md)
* [Coding Conventions](CODING-CONVENTIONS.md)
* [Command Line Interface (CLI) Style Guide](CLI-STYLE-GUIDE.md)
* [User Documentation] for running and using Pantheon
* [User Documentation] for running and using Besu
### Development
Instructions for how to get started with developing on the Pantheon codebase. Please also read the
Instructions for how to get started with developing on the Besu codebase. Please also read the
[contribution guidelines](CONTRIBUTING.md) for more detail on how to submit a pull request (PR).
* [Checking Out and Building](docs/development/building.md)
@ -35,8 +36,8 @@ Instructions for how to get started with developing on the Pantheon codebase. Pl
This document represents the current working roadmap for Pantheon. It is a living document, which will
This document represents the current working roadmap for Besu. It is a living document, which will
evolve and change over time. In particular the features in later versions are likely to be refined and change.
We use the approach of `#now`, `#next`, `#later` [used by foursquare](https://medium.com/@noah_weiss/now-next-later-roadmaps-without-the-drudgery-1cfe65656645), with a slightly different time horizon.
@ -7,26 +7,26 @@ Our `#now` scale is about 3 months, `#next` about 6 months, and `+later` is 12+
## Now (up to v1.3)
Our key areas for now are:
* Making Pantheon a First Class Client
* Making Besu a First Class Client
* Istanbul Support
* State Pruning
* Tracing APIs
* Disaster recovery
### Making Pantheon a First Class Client
### Making Besu a First Class Client
First and foremost, we want Pantheon to be a first class client for usage on both mainnet and permissioned networks.
This entails maintaining compatibility with mainnet, providing permissioning features and constantly improving Pantheon's performance.
Some recent additions to the client have been [UPnP Support](https://docs.pantheon.pegasys.tech/en/latest/Configuring-Pantheon/Networking/Using-UPnP/)
and a [GraphQL interface](https://docs.pantheon.pegasys.tech/en/latest/Pantheon-API/GraphQL/).
First and foremost, we want Besu to be a first class client for usage on both mainnet and permissioned networks.
This entails maintaining compatibility with mainnet, providing permissioning features and constantly improving Besu's performance.
Some recent additions to the client have been [UPnP Support](https://docs.besu.pegasys.tech/en/latest/Configuring-Besu/Networking/Using-UPnP/)
and a [GraphQL interface](https://docs.besu.pegasys.tech/en/latest/Besu-API/GraphQL/).
### Istanbul Support
Pantheon will support the upcoming Istanbul network upgrade and implement all required EIPs as per the [Hardfork Meta: Istanbul EIP](https://eips.ethereum.org/EIPS/eip-1679).
Besu will support the upcoming Istanbul network upgrade and implement all required EIPs as per the [Hardfork Meta: Istanbul EIP](https://eips.ethereum.org/EIPS/eip-1679).
### State Pruning
State pruning will be implemented. State pruning reduces the disk space required for the Pantheon database by discarding outdated world state data.
State pruning will be implemented. State pruning reduces the disk space required for the Besu database by discarding outdated world state data.
### Tracing APIs
@ -57,7 +57,7 @@ Adding tools to enable migration across consensus algorithms.
### Ethereum 1.x
The Pantheon team will help spearhead the Ethereum 1.x initiative by contributing to EIPs, community discussions, roadmap specificaton and eventually implementing the resulting features from the initiative. More information on the 1.x initiative can be found [here](https://docs.ethhub.io/ethereum-roadmap/ethereum-1.x/).
The Besu team will help spearhead the Ethereum 1.x initiative by contributing to EIPs, community discussions, roadmap specificaton and eventually implementing the resulting features from the initiative. More information on the 1.x initiative can be found [here](https://docs.ethhub.io/ethereum-roadmap/ethereum-1.x/).
## Future (v1.5+)
In addition to making incremental improvements to the above features, there will be some bigger pieces of work.
@ -17,9 +17,9 @@ cd acceptance-tests/simple-permissioning-smart-contract
* Note you need Ganache running if you want to run the tests against it (see below)
* Also this truffle.js uses address and private key generated by Ganache with default mnemonic "candy maple cake sugar pudding cream honey rich smooth crumble sweet treat"
* To run the Truffle example with Pantheon, you need Pantheon running
* [check out and build Pantheon](../../README.md)
* run Pantheon (either in IDE or via command line), with mining and RPC enabled.
* To run the Truffle example with Besu, you need Besu running
* [check out and build Besu](../../README.md)
* run Besu (either in IDE or via command line), with mining and RPC enabled.