Migrating Pantheon to Besu (#1945)

Signed-off-by: Adrian Sutton <adrian.sutton@consensys.net>
pull/2/head
Joshua Fernandes 5 years ago committed by Edward
parent aa91d6a685
commit d6a2394e2d
  1. 8
      .github/issue_template.md
  2. 2
      .github/pull_request_template.md
  3. 188
      CHANGELOG.md
  4. 4
      CLA.md
  5. 26
      CLI-STYLE-GUIDE.md
  6. 24
      CODING-CONVENTIONS.md
  7. 34
      CONTRIBUTING.md
  8. 2
      GOVERNANCE.md
  9. 68
      Jenkinsfile
  10. 8
      Jenkinsfile.benchmark
  11. 33
      README.md
  12. 20
      ROADMAP.md
  13. 12
      acceptance-tests/build.gradle
  14. 6
      acceptance-tests/simple-permissioning-smart-contract/README.md
  15. 54
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/AcceptanceTestBase.java
  16. 18
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/BlockUtils.java
  17. 2
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/StaticNodesUtils.java
  18. 2
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/WaitUtils.java
  19. 24
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/account/Account.java
  20. 4
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/account/Accounts.java
  21. 2
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/blockchain/Amount.java
  22. 22
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/blockchain/Blockchain.java
  23. 4
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/Condition.java
  24. 14
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/account/ExpectAccountBalance.java
  25. 10
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/account/ExpectAccountBalanceNotChanging.java
  26. 10
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/admin/AdminConditions.java
  27. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/admin/ExpectPeerAdded.java
  28. 17
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/blockchain/ExpectBeneficiary.java
  29. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/blockchain/ExpectBlockNotCreated.java
  30. 12
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/blockchain/ExpectBlockNumberAbove.java
  31. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/blockchain/ExpectMinimumBlockNumber.java
  32. 16
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/clique/AwaitSignerSetChange.java
  33. 51
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/clique/CliqueConditions.java
  34. 15
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/clique/ExpectNonceVote.java
  35. 15
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/clique/ExpectProposals.java
  36. 16
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/clique/ExpectValidators.java
  37. 14
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/clique/ExpectValidatorsAtBlock.java
  38. 16
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/clique/ExpectValidatorsAtBlockHash.java
  39. 25
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/clique/ExpectedBlockHasProposer.java
  40. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/eth/EthConditions.java
  41. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/eth/ExpectEthAccountsException.java
  42. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/eth/ExpectEthGetTransactionReceiptIsAbsent.java
  43. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/eth/ExpectEthGetWorkException.java
  44. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/eth/ExpectEthSendRawTransactionException.java
  45. 10
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/eth/ExpectSuccessfulEthGetTransactionReceipt.java
  46. 10
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/eth/ExpectSuccessfulEthGetTransactionReceiptWithReason.java
  47. 12
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/eth/ExpectSuccessfulEthGetTransactionReceiptWithoutReason.java
  48. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/eth/SanityCheckEthGetWorkValues.java
  49. 16
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/ibft2/AwaitValidatorSetChange.java
  50. 15
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/ibft2/ExpectProposals.java
  51. 16
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/ibft2/ExpectValidators.java
  52. 40
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/ibft2/Ibft2Conditions.java
  53. 14
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/login/AwaitLoginResponse.java
  54. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/login/ExpectLoginSuccess.java
  55. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/login/ExpectLoginUnauthorized.java
  56. 6
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/login/LoginConditions.java
  57. 13
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/miner/MiningStatusCondition.java
  58. 10
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/net/AwaitNetPeerCount.java
  59. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/net/AwaitNetPeerCountException.java
  60. 10
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/net/ExpectNetServicesReturnsAllServicesAsActive.java
  61. 10
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/net/ExpectNetServicesReturnsOnlyJsonRpcActive.java
  62. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/net/ExpectNetVersionConnectionException.java
  63. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/net/ExpectNetVersionConnectionExceptionWithCause.java
  64. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/net/ExpectNetVersionIsNotBlank.java
  65. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/net/ExpectNetVersionPermissionException.java
  66. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/net/ExpectNetVersionPermissionJsonRpcUnauthorizedResponse.java
  67. 6
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/net/NetConditions.java
  68. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/perm/AccountSmartContractPermissioningConditions.java
  69. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/perm/AddAccountsToWhitelistSuccessfully.java
  70. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/perm/AddNodeSuccess.java
  71. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/perm/GetExpectedAccountsWhitelist.java
  72. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/perm/GetNodesWhitelistPopulated.java
  73. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/perm/NodeSmartContractPermissioningConditions.java
  74. 12
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/perm/PermissioningConditions.java
  75. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/perm/RemoveAccountsFromWhitelistSuccessfully.java
  76. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/perm/RemoveNodeSuccess.java
  77. 14
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/perm/WaitForFalseResponse.java
  78. 14
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/perm/WaitForTrueResponse.java
  79. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/perm/WhiteListContainsKeyAndValue.java
  80. 8
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/web3/ExpectWeb3Sha3Equals.java
  81. 6
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/condition/web3/Web3Conditions.java
  82. 4
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/contract/ContractVerifier.java
  83. 4
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/contract/ExpectValidTransactionReceipt.java
  84. 2
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/ethsigner/EthSignerClient.java
  85. 6
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/ethsigner/EthSignerClientTest.java
  86. 2
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/ethsigner/PrivateTransactionRequest.java
  87. 7
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/ethsigner/testutil/EthSignerConfig.java
  88. 2
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/ethsigner/testutil/EthSignerTestHarness.java
  89. 13
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/ethsigner/testutil/EthSignerTestHarnessFactory.java
  90. 64
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/node/BesuNode.java
  91. 18
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/node/BesuNodeRunner.java
  92. 6
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/node/Node.java
  93. 64
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/node/ProcessBesuNodeRunner.java
  94. 10
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/node/RunnableNode.java
  95. 146
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/node/ThreadBesuNodeRunner.java
  96. 41
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/node/cluster/Cluster.java
  97. 2
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/node/cluster/ClusterConfiguration.java
  98. 2
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/node/cluster/ClusterConfigurationBuilder.java
  99. 20
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/node/configuration/BesuNodeConfiguration.java
  100. 73
      acceptance-tests/src/test-support/java/org/hyperledger/besu/tests/acceptance/dsl/node/configuration/BesuNodeConfigurationBuilder.java
  101. Some files were not shown because too many files have changed in this diff Show More

@ -1,10 +1,10 @@
<!-- Have you done the following? -->
<!-- * read the Code of Conduct? By filing an Issue, you are expected to -->
<!-- comply with it, including treating everyone with respect: -->
<!-- https://github.com/PegasysEng/pantheon/blob/master/CODE-OF-CONDUCT.md -->
<!-- https://github.com/hyperledger/besu/blob/master/CODE-OF-CONDUCT.md -->
<!-- * Reproduced the issue in the latest version of the software -->
<!-- * Read the debugging wiki: https://github.com/PegasysEng/pantheon/wiki/debugging -->
<!-- * Duplicate Issue check: https://github.com/search?q=+is%3Aissue+repo%3APegasysEng/Pantheon -->
<!-- * Read the debugging wiki: https://github.com/hyperledger/besu/wiki/debugging -->
<!-- * Duplicate Issue check: https://github.com/search?q=+is%3Aissue+repo%3Ahyperledger/Besu -->
<!-- Note: Not all sections will apply to all issue types. -->
### Description
@ -25,7 +25,7 @@ As an [Actor], I want [feature] so that [why].
**Frequency:** [What percentage of the time does it occur?]
### Versions (Add all that apply)
* Software version: [`pantheon --version`]
* Software version: [`besu --version`]
* Java version: [`java -version`]
* OS Name & Version: [`cat /etc/*release`]
* Kernel Version: [`uname -a`]

@ -1,5 +1,5 @@
<!-- Thanks for sending a pull request! Please check out our contribution guidelines: -->
<!-- https://github.com/PegaSysEng/pantheon/blob/master/CONTRIBUTING.md -->
<!-- https://github.com/hyperledger/besu/blob/master/CONTRIBUTING.md -->
## PR description

@ -2,12 +2,12 @@
### Java 11 Required from v1.2
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
- Ignore flaky tracing tests [\#1907](https://github.com/PegaSysEng/pantheon/pull/1907)
- Ensure plugin-api module gets published at the correct maven path [\#1905](https://github.com/PegaSysEng/pantheon/pull/1905)
- Return the plugin-apis to this repo [\#1900](https://github.com/PegaSysEng/pantheon/pull/1900)
- Stop autogenerating PantheonInfo.java [\#1899](https://github.com/PegaSysEng/pantheon/pull/1899)
- Stop autogenerating BesuInfo.java [\#1899](https://github.com/PegaSysEng/pantheon/pull/1899)
- Extracted Metrics interfaces to plugins-api. [\#1898](https://github.com/PegaSysEng/pantheon/pull/1898)
- Fix key value storage clear so it removes all values [\#1894](https://github.com/PegaSysEng/pantheon/pull/1894)
- Ethsigner test [\#1892](https://github.com/PegaSysEng/pantheon/pull/1892) (thanks to [iikirilov](https://github.com/iikirilov))
@ -45,7 +45,7 @@ for information on options that were previously automatically added to the Panth
- [Improved navigation](https://docs.pantheon.pegasys.tech/en/latest/)
- [Added permissioning diagram](https://docs.pantheon.pegasys.tech/en/latest/Concepts/Permissioning/Permissioning-Overview/#onchain)
- [Added Responsible Disclosure policy](https://docs.pantheon.pegasys.tech/en/latest/Reference/Responsible-Disclosure/)
- [Added `blocks export` subcommand](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI/Pantheon-CLI-Subcommands/#export)
- [Added `blocks export` subcommand](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI/Besu-CLI-Subcommands/#export)
### Technical Improvements
- 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
[#1810](https://github.com/PegaSysEng/pantheon/pull/1810)
[#1817](https://github.com/PegaSysEng/pantheon/pull/1817)
- Added documentation for getSignerMetrics [#1723](https://github.com/PegaSysEng/pantheon/pull/1723) (thanks to [matkt](https://github.com/matkt))
- Added Java 11+ as a prerequisite for installing Pantheon using Homebrew. [#1755](https://github.com/PegaSysEng/pantheon/pull/1755)
- Added Java 11+ as a prerequisite for installing Besu using Homebrew. [#1755](https://github.com/PegaSysEng/pantheon/pull/1755)
- Fixed documentation formatting and typos [#1718](https://github.com/PegaSysEng/pantheon/pull/1718)
[#1742](https://github.com/PegaSysEng/pantheon/pull/1742)
[#1763](https://github.com/PegaSysEng/pantheon/pull/1763)
@ -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 Revert Reason [\#1603](https://github.com/PegaSysEng/pantheon/pull/1603)
- Documentation updates include:
- Added [UPnP content](https://docs.pantheon.pegasys.tech/en/latest/Configuring-Pantheon/Networking/Using-UPnP/)
- Added [load balancer image](https://docs.pantheon.pegasys.tech/en/latest/Deploying-Pantheon/High-Availability/)
- Added [revert reason](https://docs.pantheon.pegasys.tech/en/latest/Using-Pantheon/Transactions/Revert-Reason/)
- 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 [UPnP content](https://docs.pantheon.pegasys.tech/en/latest/Configuring-Besu/Networking/Using-UPnP/)
- Added [load balancer image](https://docs.pantheon.pegasys.tech/en/latest/Deploying-Besu/High-Availability/)
- Added [revert reason](https://docs.pantheon.pegasys.tech/en/latest/Using-Besu/Transactions/Revert-Reason/)
- 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/)
- Added [Docker image migration content](https://docs.pantheon.pegasys.tech/en/latest/Deploying-Pantheon/Migration-Docker/)
- Added [transaction validation content](https://docs.pantheon.pegasys.tech/en/latest/Using-Pantheon/Transactions/Transaction-Validation/)
- Added [Docker image migration content](https://docs.pantheon.pegasys.tech/en/latest/Deploying-Besu/Migration-Docker/)
- Added [transaction validation content](https://docs.pantheon.pegasys.tech/en/latest/Using-Besu/Transactions/Transaction-Validation/)
- 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
- Added [remote connections limits options](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#remote-connections-limit-enabled)
- Added [remote connections limits options](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#remote-connections-limit-enabled)
- 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)
- Onchain permissioning startup check [\#1669](https://github.com/PegaSysEng/pantheon/pull/1669)
- 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)
- \[PAN-2746\] Add eea\_createPrivacyGroup & eea\_deletePrivacyGroup endpoint [\#1560](https://github.com/PegaSysEng/pantheon/pull/1560) (thanks to [Puneetha17](https://github.com/Puneetha17))
Documentation updates include:
- Added [readiness and liveness endpoints](https://docs.pantheon.pegasys.tech/en/latest/Pantheon-API/Using-JSON-RPC-API/#readiness-and-liveness-endpoints)
- Added [high availability content](https://docs.pantheon.pegasys.tech/en/latest/Deploying-Pantheon/High-Availability/)
- Added [readiness and liveness endpoints](https://docs.pantheon.pegasys.tech/en/latest/Besu-API/Using-JSON-RPC-API/#readiness-and-liveness-endpoints)
- Added [high availability content](https://docs.pantheon.pegasys.tech/en/latest/Deploying-Besu/High-Availability/)
- Added [web3js-eea client library](https://docs.pantheon.pegasys.tech/en/latest/Privacy/Private-Transactions/eeajs/)
- 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)
### Technical Improvements
@ -323,7 +323,7 @@ Documentation updates include:
- Refactor experimental CLI options [\#1629](https://github.com/PegaSysEng/pantheon/pull/1629)
- JSON-RPC api net_services should display the actual ports [\#1628](https://github.com/PegaSysEng/pantheon/pull/1628)
- Refactor CLI [\#1627](https://github.com/PegaSysEng/pantheon/pull/1627)
- 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)
- Implemented operator tool. \(blockchain network configuration for permissioned networks\) [\#1511](https://github.com/PegaSysEng/pantheon/pull/1511)
- \[PAN-2754\] Added eea\_getPrivacyPrecompileAddress [\#1579](https://github.com/PegaSysEng/pantheon/pull/1579) (thanks to [Puneetha17](https://github.com/Puneetha17))
@ -364,18 +364,18 @@ Documentation updates include:
Documentation updates include:
- Updated [IBFT 2.0 tutorial](https://docs.pantheon.pegasys.tech/en/latest/Tutorials/Create-IBFT-Network/) to use network configuration tool
- Added [debug\_traceBlock\* methods](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-API-Methods/#debug_traceblock)
- Added [debug\_traceBlock\* methods](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-API-Methods/#debug_traceblock)
- Reorganised [monitoring documentation](https://docs.pantheon.pegasys.tech/en/latest/Monitoring/Monitoring-Performance/)
- 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)
- Updated [example transaction scripts](https://docs.pantheon.pegasys.tech/en/latest/Using-Pantheon/Transactions/Transactions/#example-javascript-scripts)
- 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)
- Updated [example transaction scripts](https://docs.pantheon.pegasys.tech/en/latest/Using-Besu/Transactions/Transactions/#example-javascript-scripts)
- Updated [Alethio Ethstats and Explorer documentation](https://docs.pantheon.pegasys.tech/en/latest/Monitoring/Alethio/Overview/)
### Technical Improvements
- PAN-2816: Hiding experimental account permissioning cli options [\#1584](https://github.com/PegaSysEng/pantheon/pull/1584)
- \[PAN-2630\] Synchronizer should disconnect the sync target peer on invalid block data [\#1578](https://github.com/PegaSysEng/pantheon/pull/1578)
- Rename MetricCategory to PantheonMetricCategory [\#1574](https://github.com/PegaSysEng/pantheon/pull/1574)
- Rename MetricCategory to BesuMetricCategory [\#1574](https://github.com/PegaSysEng/pantheon/pull/1574)
- Convert MetricsConfigiguration to use a builder [\#1572](https://github.com/PegaSysEng/pantheon/pull/1572)
- PAN-2794: Including flag for onchain permissioning check on tx processor [\#1571](https://github.com/PegaSysEng/pantheon/pull/1571)
- Fix behaviour for absent account permissiong smart contract [\#1569](https://github.com/PegaSysEng/pantheon/pull/1569)
@ -408,11 +408,11 @@ Documentation updates include:
Documentation updates include:
- Added [GraphQL options](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#graphql-http-cors-origins)
- Added [GraphQL options](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#graphql-http-cors-origins)
- 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/)
### Technical Improvements
@ -458,13 +458,13 @@ Documentation updates include:
### Additions and Improvements
- [GraphQL](https://docs.pantheon.pegasys.tech/en/latest/Pantheon-API/GraphQL/) [\#1311](https://github.com/PegaSysEng/pantheon/pull/1311) (thanks to [zyfrank](https://github.com/zyfrank))
- Added [`--tx-pool-retention-hours`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#tx-pool-retention-hours) [\#1333](https://github.com/PegaSysEng/pantheon/pull/1333)
- [GraphQL](https://docs.pantheon.pegasys.tech/en/latest/Besu-API/GraphQL/) [\#1311](https://github.com/PegaSysEng/pantheon/pull/1311) (thanks to [zyfrank](https://github.com/zyfrank))
- Added [`--tx-pool-retention-hours`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#tx-pool-retention-hours) [\#1333](https://github.com/PegaSysEng/pantheon/pull/1333)
- Added Genesis file support for specifying the maximum stack size. [\#1431](https://github.com/PegaSysEng/pantheon/pull/1431)
- Included transaction details when subscribed to Pending transactions [\#1410](https://github.com/PegaSysEng/pantheon/pull/1410)
- Documentation updates include:
- [Added configuration items specified in the genesis file](https://docs.pantheon.pegasys.tech/en/latest/Configuring-Pantheon/Config-Items/)
- [Added pending transaction details subscription](https://docs.pantheon.pegasys.tech/en/latest/Pantheon-API/RPC-PubSub/#pending-transactions)
- [Added configuration items specified in the genesis file](https://docs.pantheon.pegasys.tech/en/latest/Configuring-Besu/Config-Items/)
- [Added pending transaction details subscription](https://docs.pantheon.pegasys.tech/en/latest/Besu-API/RPC-PubSub/#pending-transactions)
- [Added Troubleshooting content](https://docs.pantheon.pegasys.tech/en/latest/Troubleshooting/Troubleshooting/)
- [Added Privacy Quickstart](https://docs.pantheon.pegasys.tech/en/latest/Privacy/Privacy-Quickstart/)
- [Added privacy roadmap](https://github.com/PegaSysEng/pantheon/blob/master/PRIVACYROADMAP.MD)
@ -474,7 +474,7 @@ Documentation updates include:
- Create MaintainedPeers class [\#1484](https://github.com/PegaSysEng/pantheon/pull/1484)
- Fix for permissioned network with single bootnode [\#1479](https://github.com/PegaSysEng/pantheon/pull/1479)
- Have ThreadPantheonNodeRunner support plugin tests [\#1477](https://github.com/PegaSysEng/pantheon/pull/1477)
- Have ThreadBesuNodeRunner support plugin tests [\#1477](https://github.com/PegaSysEng/pantheon/pull/1477)
- Less pointless plugins errors [\#1473](https://github.com/PegaSysEng/pantheon/pull/1473)
- Rename GraphQLRPC to just GraphQL [\#1472](https://github.com/PegaSysEng/pantheon/pull/1472)
- eth\_protocolVersion is a Quantity, not an Integer [\#1470](https://github.com/PegaSysEng/pantheon/pull/1470)
@ -487,10 +487,10 @@ Documentation updates include:
- Optimise TransactionPool.addRemoteTransaction [\#1448](https://github.com/PegaSysEng/pantheon/pull/1448)
- Reduce synchronization in PendingTransactions [\#1447](https://github.com/PegaSysEng/pantheon/pull/1447)
- Add simple PeerPermissions interface [\#1446](https://github.com/PegaSysEng/pantheon/pull/1446)
- Make sure ThreadPantheonNodeRunner is exercised by automation [\#1442](https://github.com/PegaSysEng/pantheon/pull/1442)
- Make sure ThreadBesuNodeRunner is exercised by automation [\#1442](https://github.com/PegaSysEng/pantheon/pull/1442)
- Decode devp2p packets off the event thread [\#1439](https://github.com/PegaSysEng/pantheon/pull/1439)
- Allow config files to specify no bootnodes [\#1438](https://github.com/PegaSysEng/pantheon/pull/1438)
- Capture all logs and errors in the Pantheon log output [\#1437](https://github.com/PegaSysEng/pantheon/pull/1437)
- Capture all logs and errors in the Besu log output [\#1437](https://github.com/PegaSysEng/pantheon/pull/1437)
- Ensure failed Txns are deleted when detected during mining [\#1436](https://github.com/PegaSysEng/pantheon/pull/1436)
- Plugin Framework [\#1435](https://github.com/PegaSysEng/pantheon/pull/1435)
- Equals cleanup [\#1434](https://github.com/PegaSysEng/pantheon/pull/1434)
@ -563,7 +563,7 @@ Documentation updates include:
- Missing p2p info when queried live [\#1310](https://github.com/PegaSysEng/pantheon/pull/1310)
- Tx limit size send peers follow up [\#1308](https://github.com/PegaSysEng/pantheon/pull/1308)
- Remove remnants of the old dev mode [\#1307](https://github.com/PegaSysEng/pantheon/pull/1307)
- Remove duplicate init code from PantheonController instances [\#1305](https://github.com/PegaSysEng/pantheon/pull/1305)
- Remove duplicate init code from BesuController instances [\#1305](https://github.com/PegaSysEng/pantheon/pull/1305)
- Stop synchronizer prior to stopping the network [\#1302](https://github.com/PegaSysEng/pantheon/pull/1302)
- Evict old transactions [\#1299](https://github.com/PegaSysEng/pantheon/pull/1299)
- Send local transactions to new peers [\#1253](https://github.com/PegaSysEng/pantheon/pull/1253)
@ -574,13 +574,13 @@ Documentation updates include:
- [Privacy](https://docs.pantheon.pegasys.tech/en/latest/Privacy/Privacy-Overview/)
- [Onchain Permissioning](https://docs.pantheon.pegasys.tech/en/latest/Permissions/Onchain-Permissioning/)
- [Fastsync](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#fast-sync-options)
- [Fastsync](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#fast-sync-options)
- Documentation updates include:
- Added JSON-RPC methods:
- [`txpool_pantheonStatistics`](https://docs.pantheon.pegasys.tech/en/latest/Reference/JSON-RPC-API-Methods/#txpool_pantheonstatistics)
- [`net_services`](https://docs.pantheon.pegasys.tech/en/latest/Reference/JSON-RPC-API-Methods/#net_services)
- [Updated to indicate Docker image doesn't run on Windows](https://docs.pantheon.pegasys.tech/en/latest/Getting-Started/Run-Docker-Image/)
- [Added how to configure a free gas network](https://docs.pantheon.pegasys.tech/en/latest/Configuring-Pantheon/FreeGas/)
- [Added how to configure a free gas network](https://docs.pantheon.pegasys.tech/en/latest/Configuring-Besu/FreeGas/)
### Technical Improvements
@ -636,21 +636,21 @@ Documentation updates include:
- Notify of dropped messages [\#1156](https://github.com/PegaSysEng/pantheon/pull/1156)
- Documentation updates include:
- Added [Permissioning Overview](https://docs.pantheon.pegasys.tech/en/latest/Permissions/Permissioning-Overview/)
- Added content on [Network vs Node Configuration](https://docs.pantheon.pegasys.tech/en/latest/Configuring-Pantheon/Using-Configuration-File/)
- Added content on [Network vs Node Configuration](https://docs.pantheon.pegasys.tech/en/latest/Configuring-Besu/Using-Configuration-File/)
- Updated [RAM requirements](https://docs.pantheon.pegasys.tech/en/latest/Installation/Overview/)
- 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/)
- Added [`droppedPendingTransactions` RPC Pub/Sub subscription](https://docs.pantheon.pegasys.tech/en/latest/Using-Pantheon/RPC-PubSub/#dropped-transactions)
- Added content on using [Truffle with Besu](https://docs.pantheon.pegasys.tech/en/latest/Using-Besu/Truffle/)
- Added [`droppedPendingTransactions` RPC Pub/Sub subscription](https://docs.pantheon.pegasys.tech/en/latest/Using-Besu/RPC-PubSub/#dropped-transactions)
- Added [`eea_*` JSON-RPC API methods](https://docs.pantheon.pegasys.tech/en/latest/Reference/JSON-RPC-API-Methods/#eea-methods)
- Added [architecture diagram](https://docs.pantheon.pegasys.tech/en/latest/Architecture/Overview/)
- Updated [permissioning CLI options](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#permissions-accounts-config-file-enabled) and [permissioned network tutorial](https://docs.pantheon.pegasys.tech/en/latest/Tutorials/Create-Permissioned-Network/)
- Updated [permissioning CLI options](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#permissions-accounts-config-file-enabled) and [permissioned network tutorial](https://docs.pantheon.pegasys.tech/en/latest/Tutorials/Create-Permissioned-Network/)
### Technical Improvements
- Choose sync target based on td rather than height [\#1256](https://github.com/PegaSysEng/pantheon/pull/1256)
- CLI ewp options [\#1246](https://github.com/PegaSysEng/pantheon/pull/1246)
- Update PantheonCommand.java [\#1245](https://github.com/PegaSysEng/pantheon/pull/1245)
- Update BesuCommand.java [\#1245](https://github.com/PegaSysEng/pantheon/pull/1245)
- Reduce memory usage in import [\#1239](https://github.com/PegaSysEng/pantheon/pull/1239)
- Improve eea_sendRawTransaction error messages [\#1238](https://github.com/PegaSysEng/pantheon/pull/1238) (thanks to [Puneetha17](https://github.com/Puneetha17))
- Single topic filter [\#1235](https://github.com/PegaSysEng/pantheon/pull/1235)
@ -705,17 +705,17 @@ Documentation updates include:
- Added [`admin_removePeer`](https://docs.pantheon.pegasys.tech/en/latest/Reference/JSON-RPC-API-Methods/#admin_removepeer)
- Updated [tutorials](https://docs.pantheon.pegasys.tech/en/latest/Tutorials/Create-Private-Clique-Network/) for printing of enode on startup
- Added [`txpool_pantheonTransactions`](https://docs.pantheon.pegasys.tech/en/latest/Reference/JSON-RPC-API-Methods/#txpool_pantheontransactions)
- Added [Transaction Pool content](https://docs.pantheon.pegasys.tech/en/latest/Using-Pantheon/Transactions/Transaction-Pool/)
- Added [`tx-pool-max-size` CLI option](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#tx-pool-max-size)
- Added [Transaction Pool content](https://docs.pantheon.pegasys.tech/en/latest/Using-Besu/Transactions/Transaction-Pool/)
- Added [`tx-pool-max-size` CLI option](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#tx-pool-max-size)
- Updated [developer build instructions to use installDist](https://github.com/PegaSysEng/pantheon/blob/master/docs/development/running-developer-builds.md)
- Added [Azure quickstart tutorial](https://docs.pantheon.pegasys.tech/en/latest/Tutorials/Azure/Azure-Private-Network-Quickstart/)
- Enabled copy button in code blocks
- Added [IBFT 1.0](https://docs.pantheon.pegasys.tech/en/latest/Consensus-Protocols/QuorumIBFT/)
- Added section on using [Geth attach with Pantheon](https://docs.pantheon.pegasys.tech/en/latest/JSON-RPC-API/Using-JSON-RPC-API/#geth-console)
- Added section on using [Geth attach with Besu](https://docs.pantheon.pegasys.tech/en/latest/JSON-RPC-API/Using-JSON-RPC-API/#geth-console)
- Enabled the edit link doc site to ease external doc contributions
- Added [EthStats docs](https://docs.pantheon.pegasys.tech/en/latest/EthStats/Overview/) (thanks to [baxy](https://github.com/baxy))
- Updated [Postman collection](https://docs.pantheon.pegasys.tech/en/latest/JSON-RPC-API/Using-JSON-RPC-API/#postman)
- Added [`metrics-category` CLI option](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#metrics-category)
- Added [`metrics-category` CLI option](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#metrics-category)
- Added information on [block time and timeout settings](https://docs.pantheon.pegasys.tech/en/latest/Consensus-Protocols/IBFT/#block-time) for IBFT 2.0
- Added [`admin_nodeInfo`](https://docs.pantheon.pegasys.tech/en/latest/Reference/JSON-RPC-API-Methods/#admin_nodeinfo)
- Added [permissions images](https://docs.pantheon.pegasys.tech/en/latest/Permissions/Permissioning/)
@ -761,9 +761,9 @@ Documentation updates include:
- Updated local config permissioning flags [\#1118](https://github.com/PegaSysEng/pantheon/pull/1118)
- Pipeline Improvements [\#1117](https://github.com/PegaSysEng/pantheon/pull/1117)
- Permissioning cli smart contract [\#1116](https://github.com/PegaSysEng/pantheon/pull/1116)
- Adding default pending transactions value in PantheonControllerBuilder [\#1114](https://github.com/PegaSysEng/pantheon/pull/1114)
- Adding default pending transactions value in BesuControllerBuilder [\#1114](https://github.com/PegaSysEng/pantheon/pull/1114)
- Fix intermittency in WorldStateDownloaderTest [\#1113](https://github.com/PegaSysEng/pantheon/pull/1113)
- Reduce number of seen blocks and transactions Pantheon tracks [\#1112](https://github.com/PegaSysEng/pantheon/pull/1112)
- Reduce number of seen blocks and transactions Besu tracks [\#1112](https://github.com/PegaSysEng/pantheon/pull/1112)
- Timeout long test [\#1111](https://github.com/PegaSysEng/pantheon/pull/1111)
- Errorprone 2.3.3 upgrades [\#1110](https://github.com/PegaSysEng/pantheon/pull/1110)
- Add metric to capture memory used by RocksDB table readers [\#1108](https://github.com/PegaSysEng/pantheon/pull/1108)
@ -868,7 +868,7 @@ Public key address export subcommand was missing in 1.0 release.
### Additions and Improvements
- Added `public-key export-address` subcommand [\#888](https://github.com/PegaSysEng/pantheon/pull/888)
- 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
- Added [JSON-RPC Authentication](https://docs.pantheon.pegasys.tech/en/latest/JSON-RPC-API/Authentication/)
- Added [tutorial to create permissioned network](https://docs.pantheon.pegasys.tech/en/latest/Tutorials/Create-Permissioned-Network/)
- Added [Permissioning](https://docs.pantheon.pegasys.tech/en/latest/Permissions/Permissioning/) content
@ -899,7 +899,7 @@ Public key address export subcommand was missing in 1.0 release.
- Disable picocli ansi when testing [\#975](https://github.com/PegaSysEng/pantheon/pull/975)
- Create peer discovery packets on a worker thread [\#961](https://github.com/PegaSysEng/pantheon/pull/961)
- Removed Orion snapshot dependency [\#933](https://github.com/PegaSysEng/pantheon/pull/933)
- 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.
| Previous Option | New Option | Change |
|-------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------|
| `--config` | [`--config-file`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#config-file) | Renamed |
| `--datadir` | [`--data-path`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#data-path) | Renamed |
| `--dev-mode` | [`--network=dev`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#network) | Replaced by `--network` option |
| `--genesis` | [`--genesis-file`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#genesis-file) | Renamed |
| `--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 |
| `--miner-extraData` | [`--miner-extra-data`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#miner-extra-data) | Renamed |
| `--miner-minTransactionGasPriceWei` | [`--min-gas-price`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#min-gas-price) | Renamed |
| `--no-discovery` | [`--discovery-enabled`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#discovery-enabled) | Replaced |
| `--node-private-key` | [`--node-private-key-file`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#node-private-key-file) | Renamed |
| `--config` | [`--config-file`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#config-file) | Renamed |
| `--datadir` | [`--data-path`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#data-path) | Renamed |
| `--dev-mode` | [`--network=dev`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#network) | Replaced by `--network` option |
| `--genesis` | [`--genesis-file`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#genesis-file) | Renamed |
| `--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 |
| `--miner-extraData` | [`--miner-extra-data`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#miner-extra-data) | Renamed |
| `--miner-minTransactionGasPriceWei` | [`--min-gas-price`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#min-gas-price) | Renamed |
| `--no-discovery` | [`--discovery-enabled`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#discovery-enabled) | Replaced |
| `--node-private-key` | [`--node-private-key-file`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#node-private-key-file) | Renamed |
| `--ottoman` | N/A | Removed |
| `--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-enabled` | [` --rpc-http-enabled`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#rpc-http-enabled)| Renamed|
| `--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 |
| `--rpc-api` | [`--rpc-http-api`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#rpc-http-api)| Renamed |
| `--rpc-cors-origins` | [`--rpc-http-cors-origins`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#rpc-http-cors-origins) | Renamed |
| `--ws-enabled` | [`--rpc-ws-enabled`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#rpc-ws-enabled) | Renamed |
| `--ws-api` | [`--rpc-ws-api`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#rpc-ws-api) | Renamed|
| `--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 |
| `--ws-refresh-delay` | [`--rpc-ws-refresh-delay`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#rpc-ws-refresh-delay)|Renamed|
| `--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-enabled` | [` --rpc-http-enabled`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#rpc-http-enabled)| Renamed|
| `--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 |
| `--rpc-api` | [`--rpc-http-api`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#rpc-http-api)| Renamed |
| `--rpc-cors-origins` | [`--rpc-http-cors-origins`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#rpc-http-cors-origins) | Renamed |
| `--ws-enabled` | [`--rpc-ws-enabled`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#rpc-ws-enabled) | Renamed |
| `--ws-api` | [`--rpc-ws-api`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#rpc-ws-api) | Renamed|
| `--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 |
| `--ws-refresh-delay` | [`--rpc-ws-refresh-delay`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#rpc-ws-refresh-delay)|Renamed|
| Previous Subcommand | New Subcommand | Change |
|-------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------|
| `pantheon import <block-file>` | [`pantheon blocks import --from=<block-file>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#blocks) | Renamed |
| `pantheon export-pub-key <key-file>`| [`pantheon public-key export --to=<key-file>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Pantheon-CLI-Syntax/#public-key) | Renamed |
| `pantheon import <block-file>` | [`pantheon blocks import --from=<block-file>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#blocks) | Renamed |
| `pantheon export-pub-key <key-file>`| [`pantheon public-key export --to=<key-file>`](https://docs.pantheon.pegasys.tech/en/latest/Reference/Besu-CLI-Syntax/#public-key) | Renamed |
### Private Network Quickstart
@ -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 [consensus protocols content](https://docs.pantheon.pegasys.tech/en/latest/Consensus-Protocols/Comparing-PoA/).
- 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)
- Added `network` option [\#645](https://github.com/PegaSysEng/pantheon/pull/645)
- Remove OrionConfiguration [\#644](https://github.com/PegaSysEng/pantheon/pull/644) (thanks to [Puneetha17](https://github.com/Puneetha17))
@ -1210,15 +1210,15 @@ To recover the node key and data directory from the Docker container:
`docker cp <container>:/opt/pantheon/key <destination_file>`
`docker cp <container>:/opt/pantheon/database <destination_directory>`
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/)
* Added [configuration file content](https://docs.pantheon.pegasys.tech/en/latest/Configuring-Pantheon/Using-Configuration-File/)
* Added [configuration file content](https://docs.pantheon.pegasys.tech/en/latest/Configuring-Besu/Using-Configuration-File/)
* Added [tutorial to create private network](https://docs.pantheon.pegasys.tech/en/latest/Tutorials/Create-Private-Network/)
* Added content on [enabling non-default APIs](https://docs.pantheon.pegasys.tech/en/latest/Reference/JSON-RPC-API-Methods/)
@ -1275,7 +1275,7 @@ When restarting your node with the v0.8.4 Docker image:
- Inround payload [\#423](https://github.com/PegaSysEng/pantheon/pull/423)
- Updated IbftConfig Fields [\#422](https://github.com/PegaSysEng/pantheon/pull/422)
- Repair IbftBlockCreator and add tests [\#421](https://github.com/PegaSysEng/pantheon/pull/421)
- Make Pantheon behave as a submodule [\#419](https://github.com/PegaSysEng/pantheon/pull/419)
- Make Besu behave as a submodule [\#419](https://github.com/PegaSysEng/pantheon/pull/419)
- Ibft Height Manager [\#418](https://github.com/PegaSysEng/pantheon/pull/418)
- Ensure bootnodes are a subset of node whitelist [\#414](https://github.com/PegaSysEng/pantheon/pull/414)
- IBFT Consensus Round Classes [\#405](https://github.com/PegaSysEng/pantheon/pull/405)
@ -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)
- IBFT block mining [\#169](https://github.com/PegaSysEng/pantheon/pull/169)
- Added `--goerli` CLI option [\#370](https://github.com/PegaSysEng/pantheon/pull/370) (Thanks to [@Nashatyrev](https://github.com/Nashatyrev))
- Begin capturing metrics to better understand Pantheon's behaviour [\#326](https://github.com/PegaSysEng/pantheon/pull/326)
- Begin capturing metrics to better understand Besu's behaviour [\#326](https://github.com/PegaSysEng/pantheon/pull/326)
- Documentation updates include:
* Added Coding Conventions [\#342](https://github.com/PegaSysEng/pantheon/pull/342)
* 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)
- Constantinople Fork Block [\#382](https://github.com/PegaSysEng/pantheon/pull/382)
- Fix `pantheon.cli.PantheonCommandTest` test on Windows [\#380](https://github.com/PegaSysEng/pantheon/pull/380)
- Fix `pantheon.cli.BesuCommandTest` test on Windows [\#380](https://github.com/PegaSysEng/pantheon/pull/380)
- JDK smoke testing is being configured differently now [\#374](https://github.com/PegaSysEng/pantheon/pull/374)
- Re-enable clique AT [\#373](https://github.com/PegaSysEng/pantheon/pull/373)
- Ignoring acceptance test [\#372](https://github.com/PegaSysEng/pantheon/pull/372)
@ -1370,14 +1370,14 @@ Specify `*` or `all` for `--host-whitelist` to effectively disable host protecti
- Fixing WebSocket error response [\#292](https://github.com/PegaSysEng/pantheon/pull/292)
- Reword error messages following exceptions during mining [\#291](https://github.com/PegaSysEng/pantheon/pull/291)
- Clique acceptance tests [\#290](https://github.com/PegaSysEng/pantheon/pull/290)
- Delegate creation of additional JSON-RPC methods to the PantheonController [\#289](https://github.com/PegaSysEng/pantheon/pull/289)
- Delegate creation of additional JSON-RPC methods to the BesuController [\#289](https://github.com/PegaSysEng/pantheon/pull/289)
- Remove unnecessary `RlpInput` and `RlpOutput` classes [\#287](https://github.com/PegaSysEng/pantheon/pull/287)
- Remove `RlpUtils` [\#285](https://github.com/PegaSysEng/pantheon/pull/285)
- Enabling previously ignored acceptance tests [\#282](https://github.com/PegaSysEng/pantheon/pull/282)
- IPv6 peers [\#281](https://github.com/PegaSysEng/pantheon/pull/281)
- IPv6 Bootnode [\#280](https://github.com/PegaSysEng/pantheon/pull/280)
- 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))
### Additions and Improvements

@ -12,8 +12,8 @@ Individual Contributor License Agreement.
3. After creating your first pull request, you will see a merge
pre-requisite requiring to you read and sign the CLA.
If you have any questions, you can reach us on [Gitter].
If you have any questions, you can reach us on [RocketChat].
[Gitter]: https://gitter.im/PegaSysEng/pantheon
[RocketChat]: https://chat.hyperledger.org/channel/besu
[GitHub]: https://github.com/
[the current version of the CLA]: https://gist.github.com/rojotek/978b48a5e8b68836856a8961d6887992

@ -1,28 +1,28 @@
# 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.
**Example:** `pantheon blocks import --from=<FILE>`
**Example:** `besu blocks import --from=<FILE>`
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)
* _Fatal_
An error that forces a shutdown of Pantheon
An error that forces a shutdown of Besu

@ -1,7 +1,7 @@
# Contributing to Pantheon
# Contributing to Besu
:+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. |
[private@pegasys.tech]: mailto:private@pegasys.tech
[Gitter]: https://gitter.im/PegaSysEng/pantheon
[Pantheon documentation]: https://docs.pantheon.pegasys.tech/
[Rocketchat]: https://chat.hyperledger.org/channel/besu
[Besu documentation]: https://besu.hyperledger.org/
[CLA.md]: /CLA.md
[Code Reviews]: /docs/community/code-reviews.md
[MkDocs]: https://www.mkdocs.org/

@ -5,7 +5,7 @@ This project is led by a benevolent dictator (PegaSys) and managed by the commun
# Principles
The community adheres to the following principles:
* Open: Pantheon is open source. See repository guidelines and CLA, below.
* Open: Besu is open source. See repository guidelines and CLA, below.
* Welcoming and respectful: See Code of Conduct, below.
* Transparent and accessible: Work and collaboration should be done in public.
* Merit: Ideas and contributions are accepted according to their technical merit and alignment with project objectives and design principles.

68
Jenkinsfile vendored

@ -184,20 +184,8 @@ try {
stage(stage_name + 'Calculate variables') {
def gradleProperties = readProperties file: 'gradle.properties'
version = gradleProperties.version
def imageRepos = 'pegasyseng'
image = "${imageRepos}/pantheon:${version}"
}
stage(stage_name + "Test image labels") {
shortCommit = sh(returnStdout: true, script: "git log -n 1 --pretty=format:'%h'").trim()
sh "docker image inspect \
--format='{{index .Config.Labels \"org.label-schema.vcs-ref\"}}' \
${image} \
| grep ${shortCommit}"
sh "docker image inspect \
--format='{{index .Config.Labels \"org.label-schema.version\"}}' \
${image} \
| grep ${version}"
def imageRepos = 'hyperledger'
image = "${imageRepos}/besu:${version}"
}
try {
@ -236,32 +224,32 @@ try {
}
}
}
}, BintrayPublish: {
def stage_name = "Bintray publish node: "
node {
if (shouldPublish()) {
checkout scm
docker.image(docker_image_dind).withRun('--privileged') { d ->
docker.image(build_image).inside("--link ${d.id}:docker") {
stage(stage_name + 'Prepare') {
sh './gradlew --no-daemon --parallel clean assemble'
}
stage(stage_name + 'Publish') {
withCredentials([
usernamePassword(
credentialsId: 'pegasys-bintray',
usernameVariable: 'BINTRAY_USER',
passwordVariable: 'BINTRAY_KEY'
)
]) {
sh './gradlew --no-daemon --parallel bintrayUpload'
}
}
}
}
}
}
// }, BintrayPublish: {
// def stage_name = "Bintray publish node: "
// node {
// if (shouldPublish()) {
// checkout scm
//
// docker.image(docker_image_dind).withRun('--privileged') { d ->
// docker.image(build_image).inside("--link ${d.id}:docker") {
// stage(stage_name + 'Prepare') {
// sh './gradlew --no-daemon --parallel clean assemble'
// }
// stage(stage_name + 'Publish') {
// withCredentials([
// usernamePassword(
// credentialsId: 'pegasys-bintray',
// usernameVariable: 'BINTRAY_USER',
// passwordVariable: 'BINTRAY_KEY'
// )
// ]) {
// sh './gradlew --no-daemon --parallel bintrayUpload'
// }
// }
// }
// }
// }
// }
}
}
} catch (e) {

@ -10,9 +10,9 @@ properties([
// 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),
])
])
@ -46,7 +46,7 @@ pipeline {
withEnv([
"DATA_DIR=/data",
"BENCHMARKS_DATA=/benchmarks-data",
"PANTHEON_SRC_DIR=${WORKSPACE}",
"BESU_SRC_DIR=${WORKSPACE}",
"DESCRIPTION=automatic"
]) {
dir('pantheon-benchmarks') {

@ -1,33 +1,34 @@
# Pantheon Ethereum Client
[![Build Status](https://jenkins.pegasys.tech/job/Pantheon/job/master/badge/icon)](https://jenkins.pegasys.tech/job/Pantheon/job/master/)
[![Documentation Status](https://readthedocs.org/projects/pantheon/badge/?version=latest)](https://docs.pantheon.pegasys.tech/en/latest/?badge=latest)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/PegasysEng/pantheon/blob/master/LICENSE)
[ ![Download](https://api.bintray.com/packages/consensys/pegasys-repo/pantheon/images/download.svg) ](https://bintray.com/consensys/pegasys-repo/pantheon/_latestVersion)
[![Gitter chat](https://badges.gitter.im/PegaSysEng/pantheon.png)](https://gitter.im/PegaSysEng/pantheon)
# Besu Ethereum Client
[![Build Status](https://jenkins.pegasys.tech/job/Besu/job/master/badge/icon)](https://jenkins.pegasys.tech/job/Besu/job/master/)
[![Documentation Status](https://readthedocs.org/projects/hyperledger-besu/badge/?version=latest)](https://docs.besu.pegasys.tech/en/latest/?badge=latest)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/PegasysEng/besu/blob/master/LICENSE)
[ ![Download](https://api.bintray.com/packages/hyperledger/besu-repo/besu/images/download.svg) ](https://bintray.com/hyperledger/besu-repo/besu/_latestVersion)
[![RocketChat chat](https://open.rocket.chat/images/join-chat.svg)](https://chat.hyperledger.org/channel/besu)
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
* [Code Coverage](docs/development/code-coverage.md)
* [Logging](docs/development/logging.md)
[User Documentation]: https://docs.pantheon.pegasys.tech/en/stable/
[Gitter]: https://gitter.im/PegaSysEng/pantheon
[User Documentation]: https://besu.hyperledger.org/
[RocketChat]: https://chat.hyperledger.org/channel/besu
## Release Notes

@ -1,5 +1,5 @@
# Roadmap
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.

@ -30,7 +30,7 @@ dependencies {
testSupportImplementation project(':ethereum:permissioning')
testSupportImplementation project(':ethereum:rlp')
testSupportImplementation project(':metrics:core')
testSupportImplementation project(':pantheon')
testSupportImplementation project(':besu')
testSupportImplementation project(':plugin-api')
testSupportImplementation project(':plugins:rocksdb')
testSupportImplementation project(':services:kvstore')
@ -68,7 +68,7 @@ dependencies {
testImplementation project(':ethereum:permissioning')
testImplementation project(':util')
testImplementation project(':plugin-api')
testImplementation project(':pantheon')
testImplementation project(':besu')
testImplementation project(':ethereum:core')
testImplementation project(path: ':ethereum:core', configuration: 'testSupportArtifacts')
testImplementation project(':testutil')
@ -79,15 +79,15 @@ dependencies {
test.enabled = false
sourceSets {
test { resources { srcDirs "${rootDir}/pantheon/build/libs" } }
test { resources { srcDirs "${rootDir}/besu/build/libs" } }
}
processTestResources.dependsOn(':pantheon:testJar')
processTestResources.dependsOn(':besu:testJar')
task acceptanceTest(type: Test) {
dependsOn(rootProject.installDist)
systemProperty 'acctests.runPantheonAsProcess', 'true'
systemProperty 'acctests.runBesuAsProcess', 'true'
mustRunAfter rootProject.subprojects*.test
description = 'Runs Pantheon acceptance tests.'
description = 'Runs Besu acceptance tests.'
group = 'verification'
}

@ -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.
* Run Truffle migrate against Ganache
```

@ -10,32 +10,32 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl;
package org.hyperledger.besu.tests.acceptance.dsl;
import tech.pegasys.pantheon.tests.acceptance.dsl.account.Accounts;
import tech.pegasys.pantheon.tests.acceptance.dsl.blockchain.Blockchain;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.admin.AdminConditions;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.clique.CliqueConditions;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.eth.EthConditions;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.ibft2.Ibft2Conditions;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.login.LoginConditions;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.net.NetConditions;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.perm.PermissioningConditions;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.web3.Web3Conditions;
import tech.pegasys.pantheon.tests.acceptance.dsl.contract.ContractVerifier;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.cluster.Cluster;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.configuration.PantheonNodeFactory;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.configuration.permissioning.PermissionedNodeBuilder;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.account.AccountTransactions;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.admin.AdminTransactions;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.clique.CliqueTransactions;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.contract.ContractTransactions;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthTransactions;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.ibft2.Ibft2Transactions;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.miner.MinerTransactions;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.net.NetTransactions;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.perm.PermissioningTransactions;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.web3.Web3Transactions;
import org.hyperledger.besu.tests.acceptance.dsl.account.Accounts;
import org.hyperledger.besu.tests.acceptance.dsl.blockchain.Blockchain;
import org.hyperledger.besu.tests.acceptance.dsl.condition.admin.AdminConditions;
import org.hyperledger.besu.tests.acceptance.dsl.condition.clique.CliqueConditions;
import org.hyperledger.besu.tests.acceptance.dsl.condition.eth.EthConditions;
import org.hyperledger.besu.tests.acceptance.dsl.condition.ibft2.Ibft2Conditions;
import org.hyperledger.besu.tests.acceptance.dsl.condition.login.LoginConditions;
import org.hyperledger.besu.tests.acceptance.dsl.condition.net.NetConditions;
import org.hyperledger.besu.tests.acceptance.dsl.condition.perm.PermissioningConditions;
import org.hyperledger.besu.tests.acceptance.dsl.condition.web3.Web3Conditions;
import org.hyperledger.besu.tests.acceptance.dsl.contract.ContractVerifier;
import org.hyperledger.besu.tests.acceptance.dsl.node.cluster.Cluster;
import org.hyperledger.besu.tests.acceptance.dsl.node.configuration.BesuNodeFactory;
import org.hyperledger.besu.tests.acceptance.dsl.node.configuration.permissioning.PermissionedNodeBuilder;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.account.AccountTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.admin.AdminTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.clique.CliqueTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.contract.ContractTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.ibft2.Ibft2Transactions;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.miner.MinerTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.net.NetTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.perm.PermissioningTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.web3.Web3Transactions;
import org.junit.After;
@ -57,7 +57,7 @@ public class AcceptanceTestBase {
protected final Ibft2Conditions ibftTwo;
protected final LoginConditions login;
protected final NetConditions net;
protected final PantheonNodeFactory pantheon;
protected final BesuNodeFactory besu;
protected final PermissioningConditions perm;
protected final PermissionedNodeBuilder permissionedNodeBuilder;
protected final PermissioningTransactions permissioningTransactions;
@ -85,7 +85,7 @@ public class AcceptanceTestBase {
perm = new PermissioningConditions(permissioningTransactions);
admin = new AdminConditions(adminTransactions);
web3 = new Web3Conditions(new Web3Transactions());
pantheon = new PantheonNodeFactory();
besu = new BesuNodeFactory();
contractVerifier = new ContractVerifier(accounts.getPrimaryBenefactor());
permissionedNodeBuilder = new PermissionedNodeBuilder();
}

@ -10,17 +10,17 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl;
package org.hyperledger.besu.tests.acceptance.dsl;
import static tech.pegasys.pantheon.ethereum.core.Hash.fromHexString;
import static org.hyperledger.besu.ethereum.core.Hash.fromHexString;
import tech.pegasys.pantheon.ethereum.core.Address;
import tech.pegasys.pantheon.ethereum.core.BlockHeader;
import tech.pegasys.pantheon.ethereum.core.BlockHeaderFunctions;
import tech.pegasys.pantheon.ethereum.core.Hash;
import tech.pegasys.pantheon.ethereum.core.LogsBloomFilter;
import tech.pegasys.pantheon.util.bytes.BytesValue;
import tech.pegasys.pantheon.util.uint.UInt256;
import org.hyperledger.besu.ethereum.core.Address;
import org.hyperledger.besu.ethereum.core.BlockHeader;
import org.hyperledger.besu.ethereum.core.BlockHeaderFunctions;
import org.hyperledger.besu.ethereum.core.Hash;
import org.hyperledger.besu.ethereum.core.LogsBloomFilter;
import org.hyperledger.besu.util.bytes.BytesValue;
import org.hyperledger.besu.util.uint.UInt256;
import org.web3j.protocol.core.methods.response.EthBlock.Block;

@ -10,7 +10,7 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl;
package org.hyperledger.besu.tests.acceptance.dsl;
import static java.nio.charset.StandardCharsets.UTF_8;

@ -10,7 +10,7 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl;
package org.hyperledger.besu.tests.acceptance.dsl;
import java.util.concurrent.TimeUnit;

@ -10,18 +10,18 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.account;
import tech.pegasys.pantheon.crypto.SECP256K1.KeyPair;
import tech.pegasys.pantheon.crypto.SECP256K1.PrivateKey;
import tech.pegasys.pantheon.ethereum.core.Address;
import tech.pegasys.pantheon.ethereum.core.Hash;
import tech.pegasys.pantheon.tests.acceptance.dsl.blockchain.Amount;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.account.ExpectAccountBalance;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.account.ExpectAccountBalanceNotChanging;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthTransactions;
import tech.pegasys.pantheon.util.bytes.Bytes32;
package org.hyperledger.besu.tests.acceptance.dsl.account;
import org.hyperledger.besu.crypto.SECP256K1.KeyPair;
import org.hyperledger.besu.crypto.SECP256K1.PrivateKey;
import org.hyperledger.besu.ethereum.core.Address;
import org.hyperledger.besu.ethereum.core.Hash;
import org.hyperledger.besu.tests.acceptance.dsl.blockchain.Amount;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.condition.account.ExpectAccountBalance;
import org.hyperledger.besu.tests.acceptance.dsl.condition.account.ExpectAccountBalanceNotChanging;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthTransactions;
import org.hyperledger.besu.util.bytes.Bytes32;
import java.math.BigInteger;

@ -10,9 +10,9 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.account;
package org.hyperledger.besu.tests.acceptance.dsl.account;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthTransactions;
public class Accounts {

@ -10,7 +10,7 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.blockchain;
package org.hyperledger.besu.tests.acceptance.dsl.blockchain;
import static org.web3j.utils.Convert.Unit.ETHER;
import static org.web3j.utils.Convert.Unit.WEI;

@ -10,15 +10,15 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.blockchain;
package org.hyperledger.besu.tests.acceptance.dsl.blockchain;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.blockchain.ExpectBeneficiary;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.blockchain.ExpectBlockNumberAbove;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.blockchain.ExpectMinimumBlockNumber;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.PantheonNode;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.condition.blockchain.ExpectBeneficiary;
import org.hyperledger.besu.tests.acceptance.dsl.condition.blockchain.ExpectBlockNumberAbove;
import org.hyperledger.besu.tests.acceptance.dsl.condition.blockchain.ExpectMinimumBlockNumber;
import org.hyperledger.besu.tests.acceptance.dsl.node.BesuNode;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthTransactions;
import java.math.BigInteger;
@ -34,7 +34,7 @@ public class Blockchain {
return new ExpectMinimumBlockNumber(eth, currentHeight(node));
}
public Condition beneficiaryEquals(final PantheonNode node) {
public Condition beneficiaryEquals(final BesuNode node) {
return new ExpectBeneficiary(eth, node);
}
@ -42,12 +42,12 @@ public class Blockchain {
return new ExpectBlockNumberAbove(eth, BigInteger.valueOf(blockNumber));
}
public Condition reachesHeight(final PantheonNode node, final int blocksAheadOfLatest) {
public Condition reachesHeight(final BesuNode node, final int blocksAheadOfLatest) {
return new ExpectBlockNumberAbove(eth, futureHeight(node, blocksAheadOfLatest));
}
public Condition reachesHeight(
final PantheonNode node, final int blocksAheadOfLatest, final int timeout) {
final BesuNode node, final int blocksAheadOfLatest, final int timeout) {
return new ExpectBlockNumberAbove(eth, futureHeight(node, blocksAheadOfLatest), timeout);
}

@ -10,9 +10,9 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition;
package org.hyperledger.besu.tests.acceptance.dsl.condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
@FunctionalInterface
public interface Condition {

@ -10,16 +10,16 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.account;
package org.hyperledger.besu.tests.acceptance.dsl.condition.account;
import static org.assertj.core.api.Assertions.assertThat;
import static org.web3j.utils.Convert.toWei;
import static tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils.waitFor;
import tech.pegasys.pantheon.tests.acceptance.dsl.account.Account;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.account.Account;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthTransactions;
import org.web3j.utils.Convert.Unit;
@ -43,7 +43,7 @@ public class ExpectAccountBalance implements Condition {
@Override
public void verify(final Node node) {
waitFor(
WaitUtils.waitFor(
() ->
assertThat(node.execute(eth.getBalance((account))))
.isEqualTo(toWei(expectedBalance, balanceUnit).toBigIntegerExact()));

@ -10,15 +10,15 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.account;
package org.hyperledger.besu.tests.acceptance.dsl.condition.account;
import static org.assertj.core.api.Assertions.assertThat;
import static org.web3j.utils.Convert.toWei;
import tech.pegasys.pantheon.tests.acceptance.dsl.account.Account;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.account.Account;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthTransactions;
import java.util.concurrent.TimeUnit;

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.admin;
package org.hyperledger.besu.tests.acceptance.dsl.condition.admin;
import static org.assertj.core.api.Assertions.fail;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.RunnableNode;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.admin.AdminTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.node.RunnableNode;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.admin.AdminTransactions;
import java.net.URI;

@ -10,13 +10,13 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.admin;
package org.hyperledger.besu.tests.acceptance.dsl.condition.admin;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.admin.AddPeerTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.admin.AddPeerTransaction;
public class ExpectPeerAdded implements Condition {

@ -10,27 +10,28 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.blockchain;
package org.hyperledger.besu.tests.acceptance.dsl.condition.blockchain;
import static org.assertj.core.api.Java6Assertions.assertThat;
import static tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils.waitFor;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.PantheonNode;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.BesuNode;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthTransactions;
public class ExpectBeneficiary implements Condition {
private final EthTransactions eth;
private final String beneficiary;
public ExpectBeneficiary(final EthTransactions eth, final PantheonNode node) {
public ExpectBeneficiary(final EthTransactions eth, final BesuNode node) {
this.eth = eth;
this.beneficiary = node.getAddress().toString();
}
@Override
public void verify(final Node node) {
waitFor(() -> assertThat(node.execute(eth.block()).getMiner()).isEqualTo(beneficiary));
WaitUtils.waitFor(
() -> assertThat(node.execute(eth.block()).getMiner()).isEqualTo(beneficiary));
}
}

@ -10,13 +10,13 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.blockchain;
package org.hyperledger.besu.tests.acceptance.dsl.condition.blockchain;
import static junit.framework.TestCase.fail;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthTransactions;
import java.math.BigInteger;
import java.util.concurrent.TimeUnit;

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.blockchain;
package org.hyperledger.besu.tests.acceptance.dsl.condition.blockchain;
import static org.assertj.core.api.Java6Assertions.assertThat;
import static tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils.waitFor;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthTransactions;
import java.math.BigInteger;
@ -39,7 +39,7 @@ public class ExpectBlockNumberAbove implements Condition {
@Override
public void verify(final Node node) {
waitFor(
WaitUtils.waitFor(
timeout,
() -> assertThat(node.execute(eth.blockNumber())).isGreaterThanOrEqualTo(blockNumber));
}

@ -10,13 +10,13 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.blockchain;
package org.hyperledger.besu.tests.acceptance.dsl.condition.blockchain;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthTransactions;
import java.math.BigInteger;

@ -10,16 +10,16 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.clique;
package org.hyperledger.besu.tests.acceptance.dsl.condition.clique;
import static org.assertj.core.api.Assertions.assertThat;
import static tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils.waitFor;
import static tech.pegasys.pantheon.tests.acceptance.dsl.transaction.clique.CliqueTransactions.LATEST;
import static org.hyperledger.besu.tests.acceptance.dsl.transaction.clique.CliqueTransactions.LATEST;
import tech.pegasys.pantheon.ethereum.core.Address;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.clique.CliqueTransactions;
import org.hyperledger.besu.ethereum.core.Address;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.clique.CliqueTransactions;
import java.util.List;
@ -35,7 +35,7 @@ public class AwaitSignerSetChange implements Condition {
@Override
public void verify(final Node node) {
waitFor(
WaitUtils.waitFor(
60,
() ->
assertThat(node.execute(clique.createGetSigners(LATEST))).isNotEqualTo(initialSigners));

@ -10,22 +10,22 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.clique;
package org.hyperledger.besu.tests.acceptance.dsl.condition.clique;
import static java.util.Collections.emptyList;
import static tech.pegasys.pantheon.ethereum.core.Hash.fromHexString;
import static tech.pegasys.pantheon.tests.acceptance.dsl.transaction.clique.CliqueTransactions.LATEST;
import tech.pegasys.pantheon.config.CliqueConfigOptions;
import tech.pegasys.pantheon.config.GenesisConfigFile;
import tech.pegasys.pantheon.ethereum.core.Address;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.blockchain.ExpectBlockNotCreated;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.clique.ExpectNonceVote.CLIQUE_NONCE_VOTE;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.PantheonNode;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.clique.CliqueTransactions;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthTransactions;
import static org.hyperledger.besu.ethereum.core.Hash.fromHexString;
import static org.hyperledger.besu.tests.acceptance.dsl.transaction.clique.CliqueTransactions.LATEST;
import org.hyperledger.besu.config.CliqueConfigOptions;
import org.hyperledger.besu.config.GenesisConfigFile;
import org.hyperledger.besu.ethereum.core.Address;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.condition.blockchain.ExpectBlockNotCreated;
import org.hyperledger.besu.tests.acceptance.dsl.condition.clique.ExpectNonceVote.CLIQUE_NONCE_VOTE;
import org.hyperledger.besu.tests.acceptance.dsl.node.BesuNode;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.clique.CliqueTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthTransactions;
import java.math.BigInteger;
import java.util.Arrays;
@ -47,17 +47,16 @@ public class CliqueConditions {
this.clique = clique;
}
public Condition validatorsEqual(final PantheonNode... validators) {
public Condition validatorsEqual(final BesuNode... validators) {
return new ExpectValidators(clique, validatorAddresses(validators));
}
public Condition validatorsAtBlockEqual(
final String blockNumber, final PantheonNode... validators) {
public Condition validatorsAtBlockEqual(final String blockNumber, final BesuNode... validators) {
return new ExpectValidatorsAtBlock(clique, blockNumber, validatorAddresses(validators));
}
public Condition validatorsAtBlockHashFromBlockNumberEqual(
final Node node, final long blockNumber, final PantheonNode... validators) {
final Node node, final long blockNumber, final BesuNode... validators) {
final DefaultBlockParameter blockParameter =
DefaultBlockParameter.valueOf(BigInteger.valueOf(blockNumber));
final String blockHash = node.execute(eth.block(blockParameter)).getHash();
@ -77,7 +76,7 @@ public class CliqueConditions {
return new ExpectNonceVote(eth, clique_nonce_vote);
}
public Condition noNewBlockCreated(final PantheonNode node) {
public Condition noNewBlockCreated(final BesuNode node) {
final int blockPeriodSeconds = cliqueBlockPeriod(node);
final int blockPeriodWait = blockPeriodSeconds * 1000;
return new ExpectBlockNotCreated(eth, blockPeriodWait, blockPeriodWait);
@ -87,7 +86,7 @@ public class CliqueConditions {
return new AwaitSignerSetChange(node.execute(clique.createGetSigners(LATEST)), clique);
}
private int cliqueBlockPeriod(final PantheonNode node) {
private int cliqueBlockPeriod(final BesuNode node) {
final String config = node.getGenesisConfigProvider().create(emptyList()).get();
final GenesisConfigFile genesisConfigFile = GenesisConfigFile.fromConfig(config);
final CliqueConfigOptions cliqueConfigOptions =
@ -95,29 +94,29 @@ public class CliqueConditions {
return cliqueConfigOptions.getBlockPeriodSeconds();
}
private Address[] validatorAddresses(final PantheonNode[] validators) {
return Arrays.stream(validators).map(PantheonNode::getAddress).sorted().toArray(Address[]::new);
private Address[] validatorAddresses(final BesuNode[] validators) {
return Arrays.stream(validators).map(BesuNode::getAddress).sorted().toArray(Address[]::new);
}
public Condition blockIsCreatedByProposer(final PantheonNode proposer) {
public Condition blockIsCreatedByProposer(final BesuNode proposer) {
return new ExpectedBlockHasProposer(eth, proposer.getAddress());
}
public static class ProposalsConfig {
private final Map<PantheonNode, Boolean> proposals = new HashMap<>();
private final Map<BesuNode, Boolean> proposals = new HashMap<>();
private final CliqueTransactions clique;
public ProposalsConfig(final CliqueTransactions clique) {
this.clique = clique;
}
public ProposalsConfig addProposal(final PantheonNode node) {
public ProposalsConfig addProposal(final BesuNode node) {
proposals.put(node, true);
return this;
}
public ProposalsConfig removeProposal(final PantheonNode node) {
public ProposalsConfig removeProposal(final BesuNode node) {
proposals.put(node, false);
return this;
}

@ -10,15 +10,15 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.clique;
package org.hyperledger.besu.tests.acceptance.dsl.condition.clique;
import static org.assertj.core.api.Java6Assertions.assertThat;
import static tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils.waitFor;
import static tech.pegasys.pantheon.tests.acceptance.dsl.condition.clique.ExpectNonceVote.CLIQUE_NONCE_VOTE.AUTH;
import static org.hyperledger.besu.tests.acceptance.dsl.condition.clique.ExpectNonceVote.CLIQUE_NONCE_VOTE.AUTH;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthTransactions;
public class ExpectNonceVote implements Condition {
private static final String NONCE_AUTH = "0xffffffffffffffff";
@ -38,6 +38,7 @@ public class ExpectNonceVote implements Condition {
@Override
public void verify(final Node node) {
waitFor(() -> assertThat(node.execute(eth.block()).getNonceRaw()).isEqualTo(expectedNonce));
WaitUtils.waitFor(
() -> assertThat(node.execute(eth.block()).getNonceRaw()).isEqualTo(expectedNonce));
}
}

@ -10,15 +10,15 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.clique;
package org.hyperledger.besu.tests.acceptance.dsl.condition.clique;
import static org.assertj.core.api.Assertions.assertThat;
import static tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils.waitFor;
import tech.pegasys.pantheon.ethereum.core.Address;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.clique.CliqueTransactions;
import org.hyperledger.besu.ethereum.core.Address;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.clique.CliqueTransactions;
import java.util.Map;
@ -33,6 +33,7 @@ public class ExpectProposals implements Condition {
@Override
public void verify(final Node node) {
waitFor(() -> assertThat(node.execute(clique.createProposals())).isEqualTo(proposers));
WaitUtils.waitFor(
() -> assertThat(node.execute(clique.createProposals())).isEqualTo(proposers));
}
}

@ -10,16 +10,16 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.clique;
package org.hyperledger.besu.tests.acceptance.dsl.condition.clique;
import static org.assertj.core.api.Assertions.assertThat;
import static tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils.waitFor;
import static tech.pegasys.pantheon.tests.acceptance.dsl.transaction.clique.CliqueTransactions.LATEST;
import static org.hyperledger.besu.tests.acceptance.dsl.transaction.clique.CliqueTransactions.LATEST;
import tech.pegasys.pantheon.ethereum.core.Address;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.clique.CliqueTransactions;
import org.hyperledger.besu.ethereum.core.Address;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.clique.CliqueTransactions;
public class ExpectValidators implements Condition {
private final CliqueTransactions clique;
@ -32,7 +32,7 @@ public class ExpectValidators implements Condition {
@Override
public void verify(final Node node) {
waitFor(
WaitUtils.waitFor(
() ->
assertThat(node.execute(clique.createGetSigners(LATEST))).containsExactly(validators));
}

@ -10,15 +10,15 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.clique;
package org.hyperledger.besu.tests.acceptance.dsl.condition.clique;
import static org.assertj.core.api.Assertions.assertThat;
import static tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils.waitFor;
import tech.pegasys.pantheon.ethereum.core.Address;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.clique.CliqueTransactions;
import org.hyperledger.besu.ethereum.core.Address;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.clique.CliqueTransactions;
public class ExpectValidatorsAtBlock implements Condition {
private final CliqueTransactions clique;
@ -34,7 +34,7 @@ public class ExpectValidatorsAtBlock implements Condition {
@Override
public void verify(final Node node) {
waitFor(
WaitUtils.waitFor(
() ->
assertThat(node.execute(clique.createGetSigners(blockParameter)))
.containsExactly(validators));

@ -10,16 +10,16 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.clique;
package org.hyperledger.besu.tests.acceptance.dsl.condition.clique;
import static org.assertj.core.api.Assertions.assertThat;
import static tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils.waitFor;
import tech.pegasys.pantheon.ethereum.core.Address;
import tech.pegasys.pantheon.ethereum.core.Hash;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.clique.CliqueTransactions;
import org.hyperledger.besu.ethereum.core.Address;
import org.hyperledger.besu.ethereum.core.Hash;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.clique.CliqueTransactions;
public class ExpectValidatorsAtBlockHash implements Condition {
private final CliqueTransactions clique;
@ -35,7 +35,7 @@ public class ExpectValidatorsAtBlockHash implements Condition {
@Override
public void verify(final Node node) {
waitFor(
WaitUtils.waitFor(
() ->
assertThat(node.execute(clique.createGetSignersAtHash(blockHash)))
.containsExactly(validators));

@ -10,19 +10,19 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.clique;
package org.hyperledger.besu.tests.acceptance.dsl.condition.clique;
import static org.assertj.core.api.Java6Assertions.assertThat;
import static tech.pegasys.pantheon.tests.acceptance.dsl.BlockUtils.createBlockHeader;
import static tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils.waitFor;
import tech.pegasys.pantheon.consensus.clique.CliqueBlockHeaderFunctions;
import tech.pegasys.pantheon.consensus.clique.CliqueExtraData;
import tech.pegasys.pantheon.ethereum.core.Address;
import tech.pegasys.pantheon.ethereum.core.BlockHeader;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthTransactions;
import org.hyperledger.besu.consensus.clique.CliqueBlockHeaderFunctions;
import org.hyperledger.besu.consensus.clique.CliqueExtraData;
import org.hyperledger.besu.ethereum.core.Address;
import org.hyperledger.besu.ethereum.core.BlockHeader;
import org.hyperledger.besu.tests.acceptance.dsl.BlockUtils;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthTransactions;
import org.web3j.protocol.core.methods.response.EthBlock.Block;
@ -37,12 +37,13 @@ public class ExpectedBlockHasProposer implements Condition {
@Override
public void verify(final Node node) {
waitFor(() -> assertThat(proposerAddress(node)).isEqualTo(proposer));
WaitUtils.waitFor(() -> assertThat(proposerAddress(node)).isEqualTo(proposer));
}
private Address proposerAddress(final Node node) {
final Block block = node.execute(eth.block());
final BlockHeader blockHeader = createBlockHeader(block, new CliqueBlockHeaderFunctions());
final BlockHeader blockHeader =
BlockUtils.createBlockHeader(block, new CliqueBlockHeaderFunctions());
final CliqueExtraData cliqueExtraData = CliqueExtraData.decode(blockHeader);
return cliqueExtraData.getProposerAddress();
}

@ -10,11 +10,11 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.eth;
package org.hyperledger.besu.tests.acceptance.dsl.condition.eth;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.miner.MiningStatusCondition;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.condition.miner.MiningStatusCondition;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthTransactions;
public class EthConditions {

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.eth;
package org.hyperledger.besu.tests.acceptance.dsl.condition.eth;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.catchThrowable;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthAccountsTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthAccountsTransaction;
import org.web3j.protocol.exceptions.ClientConnectionException;

@ -10,13 +10,13 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.eth;
package org.hyperledger.besu.tests.acceptance.dsl.condition.eth;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthGetTransactionReceiptTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthGetTransactionReceiptTransaction;
import java.util.Optional;

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.eth;
package org.hyperledger.besu.tests.acceptance.dsl.condition.eth;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.catchThrowable;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthGetWorkTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthGetWorkTransaction;
import org.web3j.protocol.exceptions.ClientConnectionException;

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.eth;
package org.hyperledger.besu.tests.acceptance.dsl.condition.eth;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.catchThrowable;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthSendRawTransactionTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthSendRawTransactionTransaction;
import org.web3j.protocol.exceptions.ClientConnectionException;

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.eth;
package org.hyperledger.besu.tests.acceptance.dsl.condition.eth;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthGetTransactionReceiptTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthGetTransactionReceiptTransaction;
public class ExpectSuccessfulEthGetTransactionReceipt implements Condition {

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.eth;
package org.hyperledger.besu.tests.acceptance.dsl.condition.eth;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthGetTransactionReceiptWithRevertReason;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthGetTransactionReceiptWithRevertReason;
import java.nio.charset.StandardCharsets;

@ -10,15 +10,15 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.eth;
package org.hyperledger.besu.tests.acceptance.dsl.condition.eth;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthGetTransactionReceiptWithRevertReason;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.net.CustomRequestFactory.TransactionReceiptWithRevertReason;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthGetTransactionReceiptWithRevertReason;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.net.CustomRequestFactory.TransactionReceiptWithRevertReason;
public class ExpectSuccessfulEthGetTransactionReceiptWithoutReason implements Condition {

@ -10,13 +10,13 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.eth;
package org.hyperledger.besu.tests.acceptance.dsl.condition.eth;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthGetWorkTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthGetWorkTransaction;
public class SanityCheckEthGetWorkValues implements Condition {

@ -10,16 +10,16 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.ibft2;
package org.hyperledger.besu.tests.acceptance.dsl.condition.ibft2;
import static org.assertj.core.api.Assertions.assertThat;
import static tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils.waitFor;
import static tech.pegasys.pantheon.tests.acceptance.dsl.transaction.clique.CliqueTransactions.LATEST;
import static org.hyperledger.besu.tests.acceptance.dsl.transaction.clique.CliqueTransactions.LATEST;
import tech.pegasys.pantheon.ethereum.core.Address;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.ibft2.Ibft2Transactions;
import org.hyperledger.besu.ethereum.core.Address;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.ibft2.Ibft2Transactions;
import java.util.List;
@ -35,7 +35,7 @@ public class AwaitValidatorSetChange implements Condition {
@Override
public void verify(final Node node) {
waitFor(
WaitUtils.waitFor(
60,
() ->
assertThat(node.execute(ibft.createGetValidators(LATEST)))

@ -10,15 +10,15 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.ibft2;
package org.hyperledger.besu.tests.acceptance.dsl.condition.ibft2;
import static org.assertj.core.api.Assertions.assertThat;
import static tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils.waitFor;
import tech.pegasys.pantheon.ethereum.core.Address;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.ibft2.Ibft2Transactions;
import org.hyperledger.besu.ethereum.core.Address;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.ibft2.Ibft2Transactions;
import java.util.Map;
@ -33,6 +33,7 @@ public class ExpectProposals implements Condition {
@Override
public void verify(final Node node) {
waitFor(() -> assertThat(node.execute(ibftTwo.createProposals())).isEqualTo(proposers));
WaitUtils.waitFor(
() -> assertThat(node.execute(ibftTwo.createProposals())).isEqualTo(proposers));
}
}

@ -10,16 +10,16 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.ibft2;
package org.hyperledger.besu.tests.acceptance.dsl.condition.ibft2;
import static org.assertj.core.api.Assertions.assertThat;
import static tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils.waitFor;
import static tech.pegasys.pantheon.tests.acceptance.dsl.transaction.ibft2.Ibft2Transactions.LATEST;
import static org.hyperledger.besu.tests.acceptance.dsl.transaction.ibft2.Ibft2Transactions.LATEST;
import tech.pegasys.pantheon.ethereum.core.Address;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.ibft2.Ibft2Transactions;
import org.hyperledger.besu.ethereum.core.Address;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.ibft2.Ibft2Transactions;
public class ExpectValidators implements Condition {
private final Ibft2Transactions ibft;
@ -32,7 +32,7 @@ public class ExpectValidators implements Condition {
@Override
public void verify(final Node node) {
waitFor(
WaitUtils.waitFor(
() ->
assertThat(node.execute(ibft.createGetValidators(LATEST))).containsExactly(validators));
}

@ -10,15 +10,15 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.ibft2;
package org.hyperledger.besu.tests.acceptance.dsl.condition.ibft2;
import static tech.pegasys.pantheon.tests.acceptance.dsl.transaction.clique.CliqueTransactions.LATEST;
import static org.hyperledger.besu.tests.acceptance.dsl.transaction.clique.CliqueTransactions.LATEST;
import tech.pegasys.pantheon.ethereum.core.Address;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.PantheonNode;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.ibft2.Ibft2Transactions;
import org.hyperledger.besu.ethereum.core.Address;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.BesuNode;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.ibft2.Ibft2Transactions;
import java.util.Arrays;
import java.util.Comparator;
@ -38,20 +38,19 @@ public class Ibft2Conditions {
this.ibftTwo = ibftTwo;
}
public List<PantheonNode> validators(final PantheonNode[] nodes) {
final Comparator<PantheonNode> compareByAddress =
Comparator.comparing(PantheonNode::getAddress);
List<PantheonNode> pantheonNodes = Arrays.asList(nodes);
pantheonNodes.sort(compareByAddress);
return pantheonNodes;
public List<BesuNode> validators(final BesuNode[] nodes) {
final Comparator<BesuNode> compareByAddress = Comparator.comparing(BesuNode::getAddress);
List<BesuNode> besuNodes = Arrays.asList(nodes);
besuNodes.sort(compareByAddress);
return besuNodes;
}
public ExpectValidators validatorsEqual(final PantheonNode... validators) {
public ExpectValidators validatorsEqual(final BesuNode... validators) {
return new ExpectValidators(ibftTwo, validatorAddresses(validators));
}
private Address[] validatorAddresses(final PantheonNode[] validators) {
return Arrays.stream(validators).map(PantheonNode::getAddress).sorted().toArray(Address[]::new);
private Address[] validatorAddresses(final BesuNode[] validators) {
return Arrays.stream(validators).map(BesuNode::getAddress).sorted().toArray(Address[]::new);
}
public Condition awaitValidatorSetChange(final Node node) {
@ -67,19 +66,19 @@ public class Ibft2Conditions {
}
public static class PendingVotesConfig {
private final Map<PantheonNode, Boolean> proposals = new HashMap<>();
private final Map<BesuNode, Boolean> proposals = new HashMap<>();
private final Ibft2Transactions ibft;
private PendingVotesConfig(final Ibft2Transactions ibft) {
this.ibft = ibft;
}
public PendingVotesConfig addProposal(final PantheonNode node) {
public PendingVotesConfig addProposal(final BesuNode node) {
proposals.put(node, true);
return this;
}
public PendingVotesConfig removeProposal(final PantheonNode node) {
public PendingVotesConfig removeProposal(final BesuNode node) {
proposals.put(node, false);
return this;
}
@ -88,8 +87,7 @@ public class Ibft2Conditions {
final Map<Address, Boolean> proposalsAsAddress =
this.proposals.entrySet().stream()
.collect(Collectors.toMap(p -> p.getKey().getAddress(), Entry::getValue));
return new tech.pegasys.pantheon.tests.acceptance.dsl.condition.ibft2.ExpectProposals(
ibft, proposalsAsAddress);
return new ExpectProposals(ibft, proposalsAsAddress);
}
}
}

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.login;
package org.hyperledger.besu.tests.acceptance.dsl.condition.login;
import static org.assertj.core.api.Assertions.assertThat;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.Transaction;
import tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.Transaction;
import org.assertj.core.api.Assertions;
public class AwaitLoginResponse<T> implements Condition {
@ -29,6 +29,6 @@ public class AwaitLoginResponse<T> implements Condition {
@Override
public void verify(final Node node) {
WaitUtils.waitFor(() -> assertThat(node.execute(transaction)).isNotNull());
WaitUtils.waitFor(() -> Assertions.assertThat(node.execute(transaction)).isNotNull());
}
}

@ -10,13 +10,13 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.login;
package org.hyperledger.besu.tests.acceptance.dsl.condition.login;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.login.LoginSuccessfulTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.login.LoginSuccessfulTransaction;
public class ExpectLoginSuccess implements Condition {

@ -10,11 +10,11 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.login;
package org.hyperledger.besu.tests.acceptance.dsl.condition.login;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.login.LoginUnauthorizedTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.login.LoginUnauthorizedTransaction;
public class ExpectLoginUnauthorized implements Condition {

@ -10,10 +10,10 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.login;
package org.hyperledger.besu.tests.acceptance.dsl.condition.login;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.login.LoginTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.login.LoginTransaction;
public class LoginConditions {

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.miner;
package org.hyperledger.besu.tests.acceptance.dsl.condition.miner;
import static org.assertj.core.api.Assertions.assertThat;
import static tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils.waitFor;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.eth.EthMiningTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.eth.EthMiningTransaction;
public class MiningStatusCondition implements Condition {
@ -31,6 +31,7 @@ public class MiningStatusCondition implements Condition {
@Override
public void verify(final Node node) {
waitFor(10, () -> assertThat(node.execute(transaction)).isEqualTo(expectedMiningStatus));
WaitUtils.waitFor(
10, () -> assertThat(node.execute(transaction)).isEqualTo(expectedMiningStatus));
}
}

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.net;
package org.hyperledger.besu.tests.acceptance.dsl.condition.net;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.net.NetPeerCountTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.net.NetPeerCountTransaction;
import java.math.BigInteger;

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.net;
package org.hyperledger.besu.tests.acceptance.dsl.condition.net;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.catchThrowable;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.net.NetPeerCountTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.net.NetPeerCountTransaction;
public class AwaitNetPeerCountException implements Condition {

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.net;
package org.hyperledger.besu.tests.acceptance.dsl.condition.net;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.net.NetServicesTransaction;
import tech.pegasys.pantheon.util.NetworkUtility;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.net.NetServicesTransaction;
import org.hyperledger.besu.util.NetworkUtility;
import java.util.Arrays;
import java.util.Map;

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.net;
package org.hyperledger.besu.tests.acceptance.dsl.condition.net;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.net.NetServicesTransaction;
import tech.pegasys.pantheon.util.NetworkUtility;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.net.NetServicesTransaction;
import org.hyperledger.besu.util.NetworkUtility;
import java.util.Collections;
import java.util.Map;

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.net;
package org.hyperledger.besu.tests.acceptance.dsl.condition.net;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.catchThrowable;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.net.NetVersionTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.net.NetVersionTransaction;
import java.net.ConnectException;

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.net;
package org.hyperledger.besu.tests.acceptance.dsl.condition.net;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.catchThrowable;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.net.NetVersionTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.net.NetVersionTransaction;
public class ExpectNetVersionConnectionExceptionWithCause implements Condition {

@ -10,13 +10,13 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.net;
package org.hyperledger.besu.tests.acceptance.dsl.condition.net;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.net.NetVersionTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.net.NetVersionTransaction;
public class ExpectNetVersionIsNotBlank implements Condition {

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.net;
package org.hyperledger.besu.tests.acceptance.dsl.condition.net;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.catchThrowable;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.net.NetVersionTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.net.NetVersionTransaction;
import org.web3j.protocol.exceptions.ClientConnectionException;

@ -10,11 +10,11 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.net;
package org.hyperledger.besu.tests.acceptance.dsl.condition.net;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.net.NetVersionTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.net.NetVersionTransaction;
public class ExpectNetVersionPermissionJsonRpcUnauthorizedResponse implements Condition {

@ -10,10 +10,10 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.net;
package org.hyperledger.besu.tests.acceptance.dsl.condition.net;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.net.NetTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.net.NetTransactions;
import java.math.BigInteger;

@ -10,11 +10,11 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.perm;
package org.hyperledger.besu.tests.acceptance.dsl.condition.perm;
import tech.pegasys.pantheon.tests.acceptance.dsl.account.Account;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.perm.AccountSmartContractPermissioningTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.account.Account;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.perm.AccountSmartContractPermissioningTransactions;
public class AccountSmartContractPermissioningConditions {

@ -10,13 +10,13 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.perm;
package org.hyperledger.besu.tests.acceptance.dsl.condition.perm;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.perm.PermAddAccountsToWhitelistTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.perm.PermAddAccountsToWhitelistTransaction;
public class AddAccountsToWhitelistSuccessfully implements Condition {

@ -10,13 +10,13 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.perm;
package org.hyperledger.besu.tests.acceptance.dsl.condition.perm;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.perm.PermAddNodeTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.perm.PermAddNodeTransaction;
public class AddNodeSuccess implements Condition {

@ -10,13 +10,13 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.perm;
package org.hyperledger.besu.tests.acceptance.dsl.condition.perm;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.perm.PermGetAccountsWhitelistTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.perm.PermGetAccountsWhitelistTransaction;
import java.util.List;

@ -10,13 +10,13 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.perm;
package org.hyperledger.besu.tests.acceptance.dsl.condition.perm;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.perm.PermGetNodesWhitelistTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.perm.PermGetNodesWhitelistTransaction;
import java.util.List;

@ -10,11 +10,11 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.perm;
package org.hyperledger.besu.tests.acceptance.dsl.condition.perm;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.perm.NodeSmartContractPermissioningTransactions;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.perm.NodeSmartContractPermissioningTransactions;
public class NodeSmartContractPermissioningConditions {

@ -10,16 +10,16 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.perm;
package org.hyperledger.besu.tests.acceptance.dsl.condition.perm;
import static java.util.Arrays.asList;
import static java.util.stream.Collectors.toList;
import tech.pegasys.pantheon.ethereum.permissioning.WhitelistPersistor.WHITELIST_TYPE;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.RunnableNode;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.perm.PermissioningTransactions;
import org.hyperledger.besu.ethereum.permissioning.WhitelistPersistor.WHITELIST_TYPE;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.node.RunnableNode;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.perm.PermissioningTransactions;
import java.net.URI;
import java.nio.file.Path;

@ -10,13 +10,13 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.perm;
package org.hyperledger.besu.tests.acceptance.dsl.condition.perm;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.perm.PermRemoveAccountsFromWhitelistTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.perm.PermRemoveAccountsFromWhitelistTransaction;
public class RemoveAccountsFromWhitelistSuccessfully implements Condition {

@ -10,13 +10,13 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.perm;
package org.hyperledger.besu.tests.acceptance.dsl.condition.perm;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.perm.PermRemoveNodeTransaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.perm.PermRemoveNodeTransaction;
public class RemoveNodeSuccess implements Condition {

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.perm;
package org.hyperledger.besu.tests.acceptance.dsl.condition.perm;
import static org.assertj.core.api.Assertions.assertThat;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.Transaction;
import tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.Transaction;
import org.assertj.core.api.Assertions;
public class WaitForFalseResponse implements Condition {
@ -29,6 +29,6 @@ public class WaitForFalseResponse implements Condition {
@Override
public void verify(final Node node) {
WaitUtils.waitFor(() -> assertThat(node.execute(transaction)).isFalse());
WaitUtils.waitFor(() -> Assertions.assertThat(node.execute(transaction)).isFalse());
}
}

@ -10,14 +10,14 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.perm;
package org.hyperledger.besu.tests.acceptance.dsl.condition.perm;
import static org.assertj.core.api.Assertions.assertThat;
import org.hyperledger.besu.tests.acceptance.dsl.WaitUtils;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.Transaction;
import tech.pegasys.pantheon.tests.acceptance.dsl.WaitUtils;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.Transaction;
import org.assertj.core.api.Assertions;
public class WaitForTrueResponse implements Condition {
@ -29,6 +29,6 @@ public class WaitForTrueResponse implements Condition {
@Override
public void verify(final Node node) {
WaitUtils.waitFor(() -> assertThat(node.execute(transaction)).isTrue());
WaitUtils.waitFor(() -> Assertions.assertThat(node.execute(transaction)).isTrue());
}
}

@ -10,13 +10,13 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.perm;
package org.hyperledger.besu.tests.acceptance.dsl.condition.perm;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.ethereum.permissioning.WhitelistPersistor;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.ethereum.permissioning.WhitelistPersistor;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import java.nio.file.Path;
import java.util.Collection;

@ -10,13 +10,13 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.web3;
package org.hyperledger.besu.tests.acceptance.dsl.condition.web3;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.web3.Web3Sha3Transaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.web3.Web3Sha3Transaction;
public class ExpectWeb3Sha3Equals implements Condition {

@ -10,10 +10,10 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.condition.web3;
package org.hyperledger.besu.tests.acceptance.dsl.condition.web3;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.web3.Web3Transactions;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.web3.Web3Transactions;
public class Web3Conditions {

@ -10,9 +10,9 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.contract;
package org.hyperledger.besu.tests.acceptance.dsl.contract;
import tech.pegasys.pantheon.tests.acceptance.dsl.account.Account;
import org.hyperledger.besu.tests.acceptance.dsl.account.Account;
public class ContractVerifier {

@ -10,11 +10,11 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.contract;
package org.hyperledger.besu.tests.acceptance.dsl.contract;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.account.Account;
import org.hyperledger.besu.tests.acceptance.dsl.account.Account;
import java.math.BigInteger;
import java.util.Optional;

@ -10,7 +10,7 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.ethsigner;
package org.hyperledger.besu.tests.acceptance.dsl.ethsigner;
import java.io.IOException;
import java.math.BigInteger;

@ -10,7 +10,7 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.ethsigner;
package org.hyperledger.besu.tests.acceptance.dsl.ethsigner;
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
import static com.github.tomakehurst.wiremock.client.WireMock.post;
@ -18,8 +18,8 @@ import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.ethsigner.testutil.EthSignerTestHarness;
import tech.pegasys.pantheon.tests.acceptance.dsl.ethsigner.testutil.EthSignerTestHarnessFactory;
import org.hyperledger.besu.tests.acceptance.dsl.ethsigner.testutil.EthSignerTestHarness;
import org.hyperledger.besu.tests.acceptance.dsl.ethsigner.testutil.EthSignerTestHarnessFactory;
import java.io.IOException;
import java.math.BigInteger;

@ -10,7 +10,7 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.ethsigner;
package org.hyperledger.besu.tests.acceptance.dsl.ethsigner;
import java.math.BigInteger;
import java.util.List;

@ -10,16 +10,15 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.ethsigner.testutil;
import tech.pegasys.ethsigner.core.Config;
import tech.pegasys.ethsigner.core.signing.ChainIdProvider;
package org.hyperledger.besu.tests.acceptance.dsl.ethsigner.testutil;
import java.net.InetAddress;
import java.nio.file.Path;
import java.time.Duration;
import org.apache.logging.log4j.Level;
import tech.pegasys.ethsigner.core.Config;
import tech.pegasys.ethsigner.core.signing.ChainIdProvider;
public class EthSignerConfig implements Config {
private final Level logLevel;

@ -10,7 +10,7 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.ethsigner.testutil;
package org.hyperledger.besu.tests.acceptance.dsl.ethsigner.testutil;
import java.net.URI;
import java.util.Properties;

@ -10,14 +10,10 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.ethsigner.testutil;
package org.hyperledger.besu.tests.acceptance.dsl.ethsigner.testutil;
import static net.consensys.cava.io.file.Files.copyResource;
import tech.pegasys.ethsigner.core.EthSigner;
import tech.pegasys.ethsigner.core.signing.ConfigurationChainId;
import tech.pegasys.ethsigner.signer.filebased.CredentialTransactionSigner;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@ -35,6 +31,9 @@ import org.apache.logging.log4j.Logger;
import org.awaitility.Awaitility;
import org.web3j.crypto.CipherException;
import org.web3j.crypto.WalletUtils;
import tech.pegasys.ethsigner.core.EthSigner;
import tech.pegasys.ethsigner.core.signing.ConfigurationChainId;
import tech.pegasys.ethsigner.signer.filebased.CredentialTransactionSigner;
public class EthSignerTestHarnessFactory {
@ -42,7 +41,7 @@ public class EthSignerTestHarnessFactory {
private static final String HOST = "127.0.0.1";
public static EthSignerTestHarness create(
final Path tempDir, final String keyPath, final Integer pantheonPort, final long chainId)
final Path tempDir, final String keyPath, final Integer besuPort, final long chainId)
throws IOException, CipherException {
final Path keyFilePath = copyResource(keyPath, tempDir.resolve(keyPath));
@ -51,7 +50,7 @@ public class EthSignerTestHarnessFactory {
new EthSignerConfig(
Level.DEBUG,
InetAddress.getByName(HOST),
pantheonPort,
besuPort,
Duration.ofSeconds(10),
InetAddress.getByName(HOST),
0,

@ -10,36 +10,36 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.node;
package org.hyperledger.besu.tests.acceptance.dsl.node;
import static java.util.Collections.unmodifiableList;
import static net.consensys.cava.io.file.Files.copyResource;
import static org.apache.logging.log4j.LogManager.getLogger;
import tech.pegasys.pantheon.controller.KeyPairUtil;
import tech.pegasys.pantheon.crypto.SECP256K1.KeyPair;
import tech.pegasys.pantheon.ethereum.api.jsonrpc.JsonRpcConfiguration;
import tech.pegasys.pantheon.ethereum.api.jsonrpc.websocket.WebSocketConfiguration;
import tech.pegasys.pantheon.ethereum.core.Address;
import tech.pegasys.pantheon.ethereum.core.MiningParameters;
import tech.pegasys.pantheon.ethereum.core.PrivacyParameters;
import tech.pegasys.pantheon.ethereum.core.Util;
import tech.pegasys.pantheon.ethereum.p2p.config.NetworkingConfiguration;
import tech.pegasys.pantheon.ethereum.permissioning.PermissioningConfiguration;
import tech.pegasys.pantheon.metrics.prometheus.MetricsConfiguration;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.configuration.NodeConfiguration;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.configuration.genesis.GenesisConfigurationProvider;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.NodeRequests;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.Transaction;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.admin.AdminRequestFactory;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.clique.CliqueRequestFactory;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.ibft2.Ibft2RequestFactory;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.login.LoginRequestFactory;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.miner.MinerRequestFactory;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.net.CustomRequestFactory;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.perm.PermissioningJsonRpcRequestFactory;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.privacy.PrivacyRequestFactory;
import org.hyperledger.besu.controller.KeyPairUtil;
import org.hyperledger.besu.crypto.SECP256K1.KeyPair;
import org.hyperledger.besu.ethereum.api.jsonrpc.JsonRpcConfiguration;
import org.hyperledger.besu.ethereum.api.jsonrpc.websocket.WebSocketConfiguration;
import org.hyperledger.besu.ethereum.core.Address;
import org.hyperledger.besu.ethereum.core.MiningParameters;
import org.hyperledger.besu.ethereum.core.PrivacyParameters;
import org.hyperledger.besu.ethereum.core.Util;
import org.hyperledger.besu.ethereum.p2p.config.NetworkingConfiguration;
import org.hyperledger.besu.ethereum.permissioning.PermissioningConfiguration;
import org.hyperledger.besu.metrics.prometheus.MetricsConfiguration;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.configuration.NodeConfiguration;
import org.hyperledger.besu.tests.acceptance.dsl.node.configuration.genesis.GenesisConfigurationProvider;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.NodeRequests;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.Transaction;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.admin.AdminRequestFactory;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.clique.CliqueRequestFactory;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.ibft2.Ibft2RequestFactory;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.login.LoginRequestFactory;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.miner.MinerRequestFactory;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.net.CustomRequestFactory;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.perm.PermissioningJsonRpcRequestFactory;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.privacy.PrivacyRequestFactory;
import java.io.File;
import java.io.FileInputStream;
@ -71,7 +71,7 @@ import org.web3j.protocol.websocket.WebSocketListener;
import org.web3j.protocol.websocket.WebSocketService;
import org.web3j.utils.Async;
public class PantheonNode implements NodeConfiguration, RunnableNode, AutoCloseable {
public class BesuNode implements NodeConfiguration, RunnableNode, AutoCloseable {
private static final String LOCALHOST = "127.0.0.1";
private static final Logger LOG = getLogger();
@ -104,7 +104,7 @@ public class PantheonNode implements NodeConfiguration, RunnableNode, AutoClosea
private final List<String> extraCLIOptions;
private final List<String> staticNodes;
public PantheonNode(
public BesuNode(
final String name,
final MiningParameters miningParameters,
final JsonRpcConfiguration jsonRpcConfiguration,
@ -152,14 +152,14 @@ public class PantheonNode implements NodeConfiguration, RunnableNode, AutoClosea
homeDirectory.resolve("plugins").toFile().mkdirs();
copyResource(
pluginName + ".jar", homeDirectory.resolve("plugins/" + pluginName + ".jar"));
PantheonNode.this.plugins.add(pluginName);
BesuNode.this.plugins.add(pluginName);
} catch (final IOException e) {
LOG.error("Could not find plugin \"{}\" in resources", pluginName);
}
});
this.extraCLIOptions = extraCLIOptions;
this.staticNodes = staticNodes;
LOG.info("Created PantheonNode {}", this.toString());
LOG.info("Created BesuNode {}", this.toString());
}
@Override
@ -411,7 +411,7 @@ public class PantheonNode implements NodeConfiguration, RunnableNode, AutoClosea
}
@Override
public void start(final PantheonNodeRunner runner) {
public void start(final BesuNodeRunner runner) {
runner.startNode(this);
loadPortsFile();
}
@ -430,11 +430,11 @@ public class PantheonNode implements NodeConfiguration, RunnableNode, AutoClosea
private void loadPortsFile() {
try (final FileInputStream fis =
new FileInputStream(new File(homeDirectory.toFile(), "pantheon.ports"))) {
new FileInputStream(new File(homeDirectory.toFile(), "besu.ports"))) {
portsProperties.load(fis);
LOG.info("Ports for node {}: {}", name, portsProperties);
} catch (final IOException e) {
throw new RuntimeException("Error reading Pantheon ports file", e);
throw new RuntimeException("Error reading Besu ports file", e);
}
}

@ -10,7 +10,7 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.node;
package org.hyperledger.besu.tests.acceptance.dsl.node;
import java.io.File;
import java.nio.file.Files;
@ -20,26 +20,26 @@ import java.util.stream.Stream;
import org.awaitility.Awaitility;
public interface PantheonNodeRunner {
public interface BesuNodeRunner {
static PantheonNodeRunner instance() {
if (Boolean.getBoolean("acctests.runPantheonAsProcess")) {
return new ProcessPantheonNodeRunner();
static BesuNodeRunner instance() {
if (Boolean.getBoolean("acctests.runBesuAsProcess")) {
return new ProcessBesuNodeRunner();
} else {
return new ThreadPantheonNodeRunner();
return new ThreadBesuNodeRunner();
}
}
void startNode(PantheonNode node);
void startNode(BesuNode node);
void stopNode(PantheonNode node);
void stopNode(BesuNode node);
void shutdown();
boolean isActive(String nodeName);
default void waitForPortsFile(final Path dataDir) {
final File file = new File(dataDir.toFile(), "pantheon.ports");
final File file = new File(dataDir.toFile(), "besu.ports");
Awaitility.waitAtMost(30, TimeUnit.SECONDS)
.until(
() -> {

@ -10,10 +10,10 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.node;
package org.hyperledger.besu.tests.acceptance.dsl.node;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.transaction.Transaction;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.transaction.Transaction;
public interface Node {

@ -10,17 +10,17 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.node;
package org.hyperledger.besu.tests.acceptance.dsl.node;
import static java.nio.charset.StandardCharsets.UTF_8;
import tech.pegasys.pantheon.cli.options.NetworkingOptions;
import tech.pegasys.pantheon.ethereum.api.jsonrpc.RpcApi;
import tech.pegasys.pantheon.ethereum.api.jsonrpc.RpcApis;
import tech.pegasys.pantheon.ethereum.permissioning.PermissioningConfiguration;
import tech.pegasys.pantheon.metrics.prometheus.MetricsConfiguration;
import tech.pegasys.pantheon.plugin.services.metrics.MetricCategory;
import tech.pegasys.pantheon.tests.acceptance.dsl.StaticNodesUtils;
import org.hyperledger.besu.cli.options.NetworkingOptions;
import org.hyperledger.besu.ethereum.api.jsonrpc.RpcApi;
import org.hyperledger.besu.ethereum.api.jsonrpc.RpcApis;
import org.hyperledger.besu.ethereum.permissioning.PermissioningConfiguration;
import org.hyperledger.besu.metrics.prometheus.MetricsConfiguration;
import org.hyperledger.besu.plugin.services.metrics.MetricCategory;
import org.hyperledger.besu.tests.acceptance.dsl.StaticNodesUtils;
import java.io.BufferedReader;
import java.io.File;
@ -44,24 +44,24 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.awaitility.Awaitility;
public class ProcessPantheonNodeRunner implements PantheonNodeRunner {
public class ProcessBesuNodeRunner implements BesuNodeRunner {
private final Logger LOG = LogManager.getLogger();
private final Logger PROCESS_LOG = LogManager.getLogger("tech.pegasys.pantheon.SubProcessLog");
private final Logger PROCESS_LOG = LogManager.getLogger("org.hyperledger.besu.SubProcessLog");
private final Map<String, Process> pantheonProcesses = new HashMap<>();
private final Map<String, Process> besuProcesses = new HashMap<>();
private final ExecutorService outputProcessorExecutor = Executors.newCachedThreadPool();
ProcessPantheonNodeRunner() {
ProcessBesuNodeRunner() {
Runtime.getRuntime().addShutdownHook(new Thread(this::shutdown));
}
@Override
public void startNode(final PantheonNode node) {
public void startNode(final BesuNode node) {
final Path dataDir = node.homeDirectory();
final List<String> params = new ArrayList<>();
params.add("build/install/pantheon/bin/pantheon");
params.add("build/install/besu/bin/besu");
params.add("--data-path");
params.add(dataDir.toAbsolutePath().toString());
@ -231,7 +231,7 @@ public class ProcessPantheonNodeRunner implements PantheonNodeRunner {
params.add("--key-value-storage");
params.add("rocksdb");
LOG.info("Creating pantheon process with params {}", params);
LOG.info("Creating besu process with params {}", params);
final ProcessBuilder processBuilder =
new ProcessBuilder(params)
.directory(new File(System.getProperty("user.dir")).getParentFile())
@ -241,22 +241,22 @@ public class ProcessPantheonNodeRunner implements PantheonNodeRunner {
processBuilder
.environment()
.put(
"PANTHEON_OPTS",
"-Dpantheon.plugins.dir=" + dataDir.resolve("plugins").toAbsolutePath().toString());
"BESU_OPTS",
"-Dbesu.plugins.dir=" + dataDir.resolve("plugins").toAbsolutePath().toString());
}
try {
final Process process = processBuilder.start();
outputProcessorExecutor.execute(() -> printOutput(node, process));
pantheonProcesses.put(node.getName(), process);
besuProcesses.put(node.getName(), process);
} catch (final IOException e) {
LOG.error("Error starting PantheonNode process", e);
LOG.error("Error starting BesuNode process", e);
}
waitForPortsFile(dataDir);
}
private void printOutput(final PantheonNode node, final Process process) {
private void printOutput(final BesuNode node, final Process process) {
try (final BufferedReader in =
new BufferedReader(new InputStreamReader(process.getInputStream(), UTF_8))) {
String line = in.readLine();
@ -269,7 +269,7 @@ public class ProcessPantheonNodeRunner implements PantheonNodeRunner {
}
}
private Path createGenesisFile(final PantheonNode node, final String genesisConfig) {
private Path createGenesisFile(final BesuNode node, final String genesisConfig) {
try {
final Path genesisFile = Files.createTempFile(node.homeDirectory(), "genesis", "");
genesisFile.toFile().deleteOnExit();
@ -280,7 +280,7 @@ public class ProcessPantheonNodeRunner implements PantheonNodeRunner {
}
}
private void createStaticNodes(final PantheonNode node) {
private void createStaticNodes(final BesuNode node) {
StaticNodesUtils.createStaticNodesFile(node.homeDirectory(), node.getStaticNodes());
}
@ -289,18 +289,18 @@ public class ProcessPantheonNodeRunner implements PantheonNodeRunner {
}
@Override
public void stopNode(final PantheonNode node) {
public void stopNode(final BesuNode node) {
node.stop();
if (pantheonProcesses.containsKey(node.getName())) {
final Process process = pantheonProcesses.get(node.getName());
killPantheonProcess(node.getName(), process);
if (besuProcesses.containsKey(node.getName())) {
final Process process = besuProcesses.get(node.getName());
killBesuProcess(node.getName(), process);
}
}
@Override
public synchronized void shutdown() {
final HashMap<String, Process> localMap = new HashMap<>(pantheonProcesses);
localMap.forEach(this::killPantheonProcess);
final HashMap<String, Process> localMap = new HashMap<>(besuProcesses);
localMap.forEach(this::killBesuProcess);
outputProcessorExecutor.shutdown();
try {
if (!outputProcessorExecutor.awaitTermination(5, TimeUnit.SECONDS)) {
@ -314,11 +314,11 @@ public class ProcessPantheonNodeRunner implements PantheonNodeRunner {
@Override
public boolean isActive(final String nodeName) {
final Process process = pantheonProcesses.get(nodeName);
final Process process = besuProcesses.get(nodeName);
return process != null && process.isAlive();
}
private void killPantheonProcess(final String name, final Process process) {
private void killBesuProcess(final String name, final Process process) {
LOG.info("Killing " + name + " process");
Awaitility.waitAtMost(30, TimeUnit.SECONDS)
@ -326,10 +326,10 @@ public class ProcessPantheonNodeRunner implements PantheonNodeRunner {
() -> {
if (process.isAlive()) {
process.destroy();
pantheonProcesses.remove(name);
besuProcesses.remove(name);
return false;
} else {
pantheonProcesses.remove(name);
besuProcesses.remove(name);
return true;
}
});

@ -10,11 +10,11 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.node;
package org.hyperledger.besu.tests.acceptance.dsl.node;
import tech.pegasys.pantheon.ethereum.core.Address;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.configuration.NodeConfiguration;
import org.hyperledger.besu.ethereum.core.Address;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.node.configuration.NodeConfiguration;
import java.net.URI;
@ -24,7 +24,7 @@ public interface RunnableNode extends Node {
void close();
void start(PantheonNodeRunner runner);
void start(BesuNodeRunner runner);
NodeConfiguration getConfiguration();

@ -10,36 +10,36 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.node;
import static tech.pegasys.pantheon.cli.config.NetworkName.DEV;
import tech.pegasys.pantheon.Runner;
import tech.pegasys.pantheon.RunnerBuilder;
import tech.pegasys.pantheon.cli.config.EthNetworkConfig;
import tech.pegasys.pantheon.controller.KeyPairUtil;
import tech.pegasys.pantheon.controller.PantheonController;
import tech.pegasys.pantheon.controller.PantheonControllerBuilder;
import tech.pegasys.pantheon.ethereum.api.graphql.GraphQLConfiguration;
import tech.pegasys.pantheon.ethereum.eth.EthProtocolConfiguration;
import tech.pegasys.pantheon.ethereum.eth.sync.SynchronizerConfiguration;
import tech.pegasys.pantheon.ethereum.eth.transactions.TransactionPoolConfiguration;
import tech.pegasys.pantheon.ethereum.p2p.peers.EnodeURL;
import tech.pegasys.pantheon.ethereum.permissioning.PermissioningConfiguration;
import tech.pegasys.pantheon.ethereum.storage.keyvalue.KeyValueStorageProvider;
import tech.pegasys.pantheon.ethereum.storage.keyvalue.KeyValueStorageProviderBuilder;
import tech.pegasys.pantheon.metrics.ObservableMetricsSystem;
import tech.pegasys.pantheon.metrics.prometheus.PrometheusMetricsSystem;
import tech.pegasys.pantheon.plugin.services.PantheonConfiguration;
import tech.pegasys.pantheon.plugin.services.PantheonEvents;
import tech.pegasys.pantheon.plugin.services.PicoCLIOptions;
import tech.pegasys.pantheon.plugin.services.StorageService;
import tech.pegasys.pantheon.plugin.services.storage.rocksdb.RocksDBPlugin;
import tech.pegasys.pantheon.services.PantheonConfigurationImpl;
import tech.pegasys.pantheon.services.PantheonEventsImpl;
import tech.pegasys.pantheon.services.PantheonPluginContextImpl;
import tech.pegasys.pantheon.services.PicoCLIOptionsImpl;
import tech.pegasys.pantheon.services.StorageServiceImpl;
package org.hyperledger.besu.tests.acceptance.dsl.node;
import static org.hyperledger.besu.cli.config.NetworkName.DEV;
import org.hyperledger.besu.Runner;
import org.hyperledger.besu.RunnerBuilder;
import org.hyperledger.besu.cli.config.EthNetworkConfig;
import org.hyperledger.besu.controller.BesuController;
import org.hyperledger.besu.controller.BesuControllerBuilder;
import org.hyperledger.besu.controller.KeyPairUtil;
import org.hyperledger.besu.ethereum.api.graphql.GraphQLConfiguration;
import org.hyperledger.besu.ethereum.eth.EthProtocolConfiguration;
import org.hyperledger.besu.ethereum.eth.sync.SynchronizerConfiguration;
import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration;
import org.hyperledger.besu.ethereum.p2p.peers.EnodeURL;
import org.hyperledger.besu.ethereum.permissioning.PermissioningConfiguration;
import org.hyperledger.besu.ethereum.storage.keyvalue.KeyValueStorageProvider;
import org.hyperledger.besu.ethereum.storage.keyvalue.KeyValueStorageProviderBuilder;
import org.hyperledger.besu.metrics.ObservableMetricsSystem;
import org.hyperledger.besu.metrics.prometheus.PrometheusMetricsSystem;
import org.hyperledger.besu.plugin.services.BesuConfiguration;
import org.hyperledger.besu.plugin.services.BesuEvents;
import org.hyperledger.besu.plugin.services.PicoCLIOptions;
import org.hyperledger.besu.plugin.services.StorageService;
import org.hyperledger.besu.plugin.services.storage.rocksdb.RocksDBPlugin;
import org.hyperledger.besu.services.BesuConfigurationImpl;
import org.hyperledger.besu.services.BesuEventsImpl;
import org.hyperledger.besu.services.BesuPluginContextImpl;
import org.hyperledger.besu.services.PicoCLIOptionsImpl;
import org.hyperledger.besu.services.StorageServiceImpl;
import java.io.File;
import java.io.IOException;
@ -61,22 +61,22 @@ import org.apache.logging.log4j.Logger;
import picocli.CommandLine;
import picocli.CommandLine.Model.CommandSpec;
public class ThreadPantheonNodeRunner implements PantheonNodeRunner {
public class ThreadBesuNodeRunner implements BesuNodeRunner {
private final Logger LOG = LogManager.getLogger();
private final Map<String, Runner> pantheonRunners = new HashMap<>();
private final Map<String, Runner> besuRunners = new HashMap<>();
private ExecutorService nodeExecutor = Executors.newCachedThreadPool();
private final Map<Node, PantheonPluginContextImpl> pantheonPluginContextMap = new HashMap<>();
private final Map<Node, BesuPluginContextImpl> besuPluginContextMap = new HashMap<>();
private PantheonPluginContextImpl buildPluginContext(
final PantheonNode node,
private BesuPluginContextImpl buildPluginContext(
final BesuNode node,
final StorageServiceImpl storageService,
final PantheonConfiguration commonPluginConfiguration) {
final BesuConfiguration commonPluginConfiguration) {
final CommandLine commandLine = new CommandLine(CommandSpec.create());
final PantheonPluginContextImpl pantheonPluginContext = new PantheonPluginContextImpl();
pantheonPluginContext.addService(StorageService.class, storageService);
pantheonPluginContext.addService(PicoCLIOptions.class, new PicoCLIOptionsImpl(commandLine));
final BesuPluginContextImpl besuPluginContext = new BesuPluginContextImpl();
besuPluginContext.addService(StorageService.class, storageService);
besuPluginContext.addService(PicoCLIOptions.class, new PicoCLIOptionsImpl(commandLine));
final Path pluginsPath = node.homeDirectory().resolve("plugins");
final File pluginsDirFile = pluginsPath.toFile();
@ -84,30 +84,30 @@ public class ThreadPantheonNodeRunner implements PantheonNodeRunner {
pluginsDirFile.mkdirs();
pluginsDirFile.deleteOnExit();
}
System.setProperty("pantheon.plugins.dir", pluginsPath.toString());
pantheonPluginContext.registerPlugins(pluginsPath);
System.setProperty("besu.plugins.dir", pluginsPath.toString());
besuPluginContext.registerPlugins(pluginsPath);
commandLine.parseArgs(node.getConfiguration().getExtraCLIOptions().toArray(new String[0]));
pantheonPluginContext.addService(PantheonConfiguration.class, commonPluginConfiguration);
besuPluginContext.addService(BesuConfiguration.class, commonPluginConfiguration);
// register built-in plugins
new RocksDBPlugin().register(pantheonPluginContext);
new RocksDBPlugin().register(besuPluginContext);
return pantheonPluginContext;
return besuPluginContext;
}
@Override
public void startNode(final PantheonNode node) {
public void startNode(final BesuNode node) {
if (nodeExecutor == null || nodeExecutor.isShutdown()) {
nodeExecutor = Executors.newCachedThreadPool();
}
final StorageServiceImpl storageService = new StorageServiceImpl();
final PantheonConfiguration commonPluginConfiguration =
new PantheonConfigurationImpl(Files.createTempDir().toPath());
final PantheonPluginContextImpl pantheonPluginContext =
pantheonPluginContextMap.computeIfAbsent(
final BesuConfiguration commonPluginConfiguration =
new BesuConfigurationImpl(Files.createTempDir().toPath());
final BesuPluginContextImpl besuPluginContext =
besuPluginContextMap.computeIfAbsent(
node, n -> buildPluginContext(node, storageService, commonPluginConfiguration));
final ObservableMetricsSystem metricsSystem =
@ -121,8 +121,8 @@ public class ThreadPantheonNodeRunner implements PantheonNodeRunner {
.setBootNodes(bootnodes);
node.getConfiguration().getGenesisConfig().ifPresent(networkConfigBuilder::setGenesisConfig);
final EthNetworkConfig ethNetworkConfig = networkConfigBuilder.build();
final PantheonControllerBuilder<?> builder =
new PantheonController.Builder().fromEthNetworkConfig(ethNetworkConfig);
final BesuControllerBuilder<?> builder =
new BesuController.Builder().fromEthNetworkConfig(ethNetworkConfig);
final KeyValueStorageProvider storageProvider =
new KeyValueStorageProviderBuilder()
@ -131,9 +131,9 @@ public class ThreadPantheonNodeRunner implements PantheonNodeRunner {
.withMetricsSystem(metricsSystem)
.build();
final PantheonController<?> pantheonController;
final BesuController<?> besuController;
try {
pantheonController =
besuController =
builder
.synchronizerConfiguration(new SynchronizerConfiguration.Builder().build())
.dataDirectory(node.homeDirectory())
@ -148,7 +148,7 @@ public class ThreadPantheonNodeRunner implements PantheonNodeRunner {
.storageProvider(storageProvider)
.build();
} catch (final IOException e) {
throw new RuntimeException("Error building PantheonController", e);
throw new RuntimeException("Error building BesuController", e);
}
final RunnerBuilder runnerBuilder = new RunnerBuilder();
@ -159,18 +159,18 @@ public class ThreadPantheonNodeRunner implements PantheonNodeRunner {
runnerBuilder.permissioningConfiguration(permissioningConfiguration);
}
pantheonPluginContext.addService(
PantheonEvents.class,
new PantheonEventsImpl(
pantheonController.getProtocolManager().getBlockBroadcaster(),
pantheonController.getTransactionPool(),
pantheonController.getSyncState()));
pantheonPluginContext.startPlugins();
besuPluginContext.addService(
BesuEvents.class,
new BesuEventsImpl(
besuController.getProtocolManager().getBlockBroadcaster(),
besuController.getTransactionPool(),
besuController.getSyncState()));
besuPluginContext.startPlugins();
final Runner runner =
runnerBuilder
.vertx(Vertx.vertx())
.pantheonController(pantheonController)
.besuController(besuController)
.ethNetworkConfig(ethNetworkConfig)
.discovery(node.isDiscoveryEnabled())
.p2pAdvertisedHost(node.getHostName())
@ -192,12 +192,12 @@ public class ThreadPantheonNodeRunner implements PantheonNodeRunner {
runner.start();
pantheonRunners.put(node.getName(), runner);
besuRunners.put(node.getName(), runner);
}
@Override
public void stopNode(final PantheonNode node) {
final PantheonPluginContextImpl pluginContext = pantheonPluginContextMap.remove(node);
public void stopNode(final BesuNode node) {
final BesuPluginContextImpl pluginContext = besuPluginContextMap.remove(node);
if (pluginContext != null) {
pluginContext.stopPlugins();
}
@ -208,11 +208,11 @@ public class ThreadPantheonNodeRunner implements PantheonNodeRunner {
@Override
public void shutdown() {
// stop all plugins from pluginContext
pantheonPluginContextMap.values().forEach(PantheonPluginContextImpl::stopPlugins);
pantheonPluginContextMap.clear();
besuPluginContextMap.values().forEach(BesuPluginContextImpl::stopPlugins);
besuPluginContextMap.clear();
// iterate over a copy of the set so that pantheonRunner can be updated when a runner is killed
new HashSet<>(pantheonRunners.keySet()).forEach(this::killRunner);
// iterate over a copy of the set so that besuRunner can be updated when a runner is killed
new HashSet<>(besuRunners.keySet()).forEach(this::killRunner);
try {
nodeExecutor.shutdownNow();
if (!nodeExecutor.awaitTermination(5, TimeUnit.SECONDS)) {
@ -225,16 +225,16 @@ public class ThreadPantheonNodeRunner implements PantheonNodeRunner {
@Override
public boolean isActive(final String nodeName) {
return pantheonRunners.containsKey(nodeName);
return besuRunners.containsKey(nodeName);
}
private void killRunner(final String name) {
LOG.info("Killing " + name + " runner");
if (pantheonRunners.containsKey(name)) {
if (besuRunners.containsKey(name)) {
try {
pantheonRunners.get(name).close();
pantheonRunners.remove(name);
besuRunners.get(name).close();
besuRunners.remove(name);
} catch (final Exception e) {
throw new RuntimeException("Error shutting down node " + name, e);
}

@ -10,18 +10,18 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.node.cluster;
package org.hyperledger.besu.tests.acceptance.dsl.node.cluster;
import static java.util.Collections.emptyList;
import static java.util.stream.Collectors.toList;
import static org.assertj.core.api.Assertions.assertThat;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.Condition;
import tech.pegasys.pantheon.tests.acceptance.dsl.condition.net.NetConditions;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.Node;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.PantheonNode;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.PantheonNodeRunner;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.RunnableNode;
import org.hyperledger.besu.tests.acceptance.dsl.condition.Condition;
import org.hyperledger.besu.tests.acceptance.dsl.condition.net.NetConditions;
import org.hyperledger.besu.tests.acceptance.dsl.node.BesuNode;
import org.hyperledger.besu.tests.acceptance.dsl.node.BesuNodeRunner;
import org.hyperledger.besu.tests.acceptance.dsl.node.Node;
import org.hyperledger.besu.tests.acceptance.dsl.node.RunnableNode;
import java.net.URI;
import java.util.ArrayList;
@ -38,27 +38,27 @@ public class Cluster implements AutoCloseable {
private static final Logger LOG = LogManager.getLogger();
private final Map<String, RunnableNode> nodes = new HashMap<>();
private final PantheonNodeRunner pantheonNodeRunner;
private final BesuNodeRunner besuNodeRunner;
private final NetConditions net;
private final ClusterConfiguration clusterConfiguration;
private List<? extends RunnableNode> originalNodes = emptyList();
private List<URI> bootnodes = new ArrayList<>();
public Cluster(final NetConditions net) {
this(new ClusterConfigurationBuilder().build(), net, PantheonNodeRunner.instance());
this(new ClusterConfigurationBuilder().build(), net, BesuNodeRunner.instance());
}
public Cluster(final ClusterConfiguration clusterConfiguration, final NetConditions net) {
this(clusterConfiguration, net, PantheonNodeRunner.instance());
this(clusterConfiguration, net, BesuNodeRunner.instance());
}
public Cluster(
final ClusterConfiguration clusterConfiguration,
final NetConditions net,
final PantheonNodeRunner pantheonNodeRunner) {
final BesuNodeRunner besuNodeRunner) {
this.clusterConfiguration = clusterConfiguration;
this.net = net;
this.pantheonNodeRunner = pantheonNodeRunner;
this.besuNodeRunner = besuNodeRunner;
}
public void start(final Node... nodes) {
@ -142,23 +142,22 @@ public class Cluster implements AutoCloseable {
node.getName(),
node.getNodeId().substring(0, 4),
node.getNodeId().substring(124));
node.start(pantheonNodeRunner);
node.start(besuNodeRunner);
}
public void stop() {
// stops nodes but do not shutdown pantheonNodeRunner
// stops nodes but do not shutdown besuNodeRunner
for (final RunnableNode node : nodes.values()) {
if (node instanceof PantheonNode) {
pantheonNodeRunner.stopNode(
(PantheonNode) node); // pantheonNodeRunner.stopNode also calls node.stop
if (node instanceof BesuNode) {
besuNodeRunner.stopNode((BesuNode) node); // besuNodeRunner.stopNode also calls node.stop
} else {
node.stop();
}
}
}
public void stopNode(final PantheonNode node) {
pantheonNodeRunner.stopNode(node);
public void stopNode(final BesuNode node) {
besuNodeRunner.stopNode(node);
}
@Override
@ -167,7 +166,7 @@ public class Cluster implements AutoCloseable {
for (final RunnableNode node : nodes.values()) {
node.close();
}
pantheonNodeRunner.shutdown();
besuNodeRunner.shutdown();
}
public void verify(final Condition expected) {
@ -178,7 +177,7 @@ public class Cluster implements AutoCloseable {
public void verifyOnActiveNodes(final Condition condition) {
nodes.values().stream()
.filter(node -> pantheonNodeRunner.isActive(node.getName()))
.filter(node -> besuNodeRunner.isActive(node.getName()))
.forEach(condition::verify);
}
}

@ -10,7 +10,7 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.node.cluster;
package org.hyperledger.besu.tests.acceptance.dsl.node.cluster;
public class ClusterConfiguration {

@ -10,7 +10,7 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.node.cluster;
package org.hyperledger.besu.tests.acceptance.dsl.node.cluster;
public class ClusterConfigurationBuilder {
private boolean awaitPeerDiscovery = true;

@ -10,20 +10,20 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.node.configuration;
package org.hyperledger.besu.tests.acceptance.dsl.node.configuration;
import tech.pegasys.pantheon.ethereum.api.jsonrpc.JsonRpcConfiguration;
import tech.pegasys.pantheon.ethereum.api.jsonrpc.websocket.WebSocketConfiguration;
import tech.pegasys.pantheon.ethereum.core.MiningParameters;
import tech.pegasys.pantheon.ethereum.p2p.config.NetworkingConfiguration;
import tech.pegasys.pantheon.ethereum.permissioning.PermissioningConfiguration;
import tech.pegasys.pantheon.metrics.prometheus.MetricsConfiguration;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.configuration.genesis.GenesisConfigurationProvider;
import org.hyperledger.besu.ethereum.api.jsonrpc.JsonRpcConfiguration;
import org.hyperledger.besu.ethereum.api.jsonrpc.websocket.WebSocketConfiguration;
import org.hyperledger.besu.ethereum.core.MiningParameters;
import org.hyperledger.besu.ethereum.p2p.config.NetworkingConfiguration;
import org.hyperledger.besu.ethereum.permissioning.PermissioningConfiguration;
import org.hyperledger.besu.metrics.prometheus.MetricsConfiguration;
import org.hyperledger.besu.tests.acceptance.dsl.node.configuration.genesis.GenesisConfigurationProvider;
import java.util.List;
import java.util.Optional;
public class PantheonNodeConfiguration {
public class BesuNodeConfiguration {
private final String name;
private final MiningParameters miningParameters;
@ -43,7 +43,7 @@ public class PantheonNodeConfiguration {
private final List<String> extraCLIOptions;
private final List<String> staticNodes;
public PantheonNodeConfiguration(
public BesuNodeConfiguration(
final String name,
final MiningParameters miningParameters,
final JsonRpcConfiguration jsonRpcConfiguration,

@ -10,19 +10,19 @@
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package tech.pegasys.pantheon.tests.acceptance.dsl.node.configuration;
package org.hyperledger.besu.tests.acceptance.dsl.node.configuration;
import static java.util.Collections.singletonList;
import tech.pegasys.pantheon.ethereum.api.jsonrpc.JsonRpcConfiguration;
import tech.pegasys.pantheon.ethereum.api.jsonrpc.RpcApis;
import tech.pegasys.pantheon.ethereum.api.jsonrpc.websocket.WebSocketConfiguration;
import tech.pegasys.pantheon.ethereum.core.MiningParameters;
import tech.pegasys.pantheon.ethereum.core.MiningParametersTestBuilder;
import tech.pegasys.pantheon.ethereum.p2p.config.NetworkingConfiguration;
import tech.pegasys.pantheon.ethereum.permissioning.PermissioningConfiguration;
import tech.pegasys.pantheon.metrics.prometheus.MetricsConfiguration;
import tech.pegasys.pantheon.tests.acceptance.dsl.node.configuration.genesis.GenesisConfigurationProvider;
import org.hyperledger.besu.ethereum.api.jsonrpc.JsonRpcConfiguration;
import org.hyperledger.besu.ethereum.api.jsonrpc.RpcApis;
import org.hyperledger.besu.ethereum.api.jsonrpc.websocket.WebSocketConfiguration;
import org.hyperledger.besu.ethereum.core.MiningParameters;
import org.hyperledger.besu.ethereum.core.MiningParametersTestBuilder;
import org.hyperledger.besu.ethereum.p2p.config.NetworkingConfiguration;
import org.hyperledger.besu.ethereum.permissioning.PermissioningConfiguration;
import org.hyperledger.besu.metrics.prometheus.MetricsConfiguration;
import org.hyperledger.besu.tests.acceptance.dsl.node.configuration.genesis.GenesisConfigurationProvider;
import java.net.URISyntaxException;
import java.nio.file.Paths;
@ -31,7 +31,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Optional;
public class PantheonNodeConfigurationBuilder {
public class BesuNodeConfigurationBuilder {
private String name;
private MiningParameters miningParameters =
@ -52,30 +52,30 @@ public class PantheonNodeConfigurationBuilder {
private List<String> extraCLIOptions = new ArrayList<>();
private List<String> staticNodes = new ArrayList<>();
public PantheonNodeConfigurationBuilder() {
public BesuNodeConfigurationBuilder() {
// Check connections more frequently during acceptance tests to cut down on
// intermittent failures due to the fact that we're running over a real network
networkingConfiguration.setInitiateConnectionsFrequency(5);
}
public PantheonNodeConfigurationBuilder name(final String name) {
public BesuNodeConfigurationBuilder name(final String name) {
this.name = name;
return this;
}
public PantheonNodeConfigurationBuilder miningEnabled() {
public BesuNodeConfigurationBuilder miningEnabled() {
this.miningParameters = new MiningParametersTestBuilder().enabled(true).build();
this.jsonRpcConfiguration.addRpcApi(RpcApis.MINER);
return this;
}
public PantheonNodeConfigurationBuilder jsonRpcConfiguration(
public BesuNodeConfigurationBuilder jsonRpcConfiguration(
final JsonRpcConfiguration jsonRpcConfiguration) {
this.jsonRpcConfiguration = jsonRpcConfiguration;
return this;
}
public PantheonNodeConfigurationBuilder jsonRpcEnabled() {
public BesuNodeConfigurationBuilder jsonRpcEnabled() {
this.jsonRpcConfiguration.setEnabled(true);
this.jsonRpcConfiguration.setPort(0);
this.jsonRpcConfiguration.setHostsWhitelist(singletonList("*"));
@ -83,7 +83,7 @@ public class PantheonNodeConfigurationBuilder {
return this;
}
public PantheonNodeConfigurationBuilder metricsEnabled() {
public BesuNodeConfigurationBuilder metricsEnabled() {
this.metricsConfiguration =
MetricsConfiguration.builder()
.enabled(true)
@ -94,13 +94,13 @@ public class PantheonNodeConfigurationBuilder {
return this;
}
public PantheonNodeConfigurationBuilder enablePrivateTransactions() {
public BesuNodeConfigurationBuilder enablePrivateTransactions() {
this.jsonRpcConfiguration.addRpcApi(RpcApis.EEA);
this.jsonRpcConfiguration.addRpcApi(RpcApis.PRIV);
return this;
}
public PantheonNodeConfigurationBuilder jsonRpcAuthenticationEnabled() throws URISyntaxException {
public BesuNodeConfigurationBuilder jsonRpcAuthenticationEnabled() throws URISyntaxException {
final String authTomlPath =
Paths.get(ClassLoader.getSystemResource("authentication/auth.toml").toURI())
.toAbsolutePath()
@ -112,19 +112,19 @@ public class PantheonNodeConfigurationBuilder {
return this;
}
public PantheonNodeConfigurationBuilder webSocketConfiguration(
public BesuNodeConfigurationBuilder webSocketConfiguration(
final WebSocketConfiguration webSocketConfiguration) {
this.webSocketConfiguration = webSocketConfiguration;
return this;
}
public PantheonNodeConfigurationBuilder metricsConfiguration(
public BesuNodeConfigurationBuilder metricsConfiguration(
final MetricsConfiguration metricsConfiguration) {
this.metricsConfiguration = metricsConfiguration;
return this;
}
public PantheonNodeConfigurationBuilder webSocketEnabled() {
public BesuNodeConfigurationBuilder webSocketEnabled() {
final WebSocketConfiguration config = WebSocketConfiguration.createDefault();
config.setEnabled(true);
config.setPort(0);
@ -134,13 +134,12 @@ public class PantheonNodeConfigurationBuilder {
return this;
}
public PantheonNodeConfigurationBuilder bootnodeEligible(final boolean bootnodeEligible) {
public BesuNodeConfigurationBuilder bootnodeEligible(final boolean bootnodeEligible) {
this.bootnodeEligible = bootnodeEligible;
return this;
}
public PantheonNodeConfigurationBuilder webSocketAuthenticationEnabled()
throws URISyntaxException {
public BesuNodeConfigurationBuilder webSocketAuthenticationEnabled() throws URISyntaxException {
final String authTomlPath =
Paths.get(ClassLoader.getSystemResource("authentication/auth.toml").toURI())
.toAbsolutePath()
@ -152,62 +151,62 @@ public class PantheonNodeConfigurationBuilder {
return this;
}
public PantheonNodeConfigurationBuilder permissioningConfiguration(
public BesuNodeConfigurationBuilder permissioningConfiguration(
final PermissioningConfiguration permissioningConfiguration) {
this.permissioningConfiguration = Optional.of(permissioningConfiguration);
return this;
}
public PantheonNodeConfigurationBuilder keyFilePath(final String keyFilePath) {
public BesuNodeConfigurationBuilder keyFilePath(final String keyFilePath) {
this.keyFilePath = Optional.of(keyFilePath);
return this;
}
public PantheonNodeConfigurationBuilder devMode(final boolean devMode) {
public BesuNodeConfigurationBuilder devMode(final boolean devMode) {
this.devMode = devMode;
return this;
}
public PantheonNodeConfigurationBuilder genesisConfigProvider(
public BesuNodeConfigurationBuilder genesisConfigProvider(
final GenesisConfigurationProvider genesisConfigProvider) {
this.genesisConfigProvider = genesisConfigProvider;
return this;
}
public PantheonNodeConfigurationBuilder p2pEnabled(final Boolean p2pEnabled) {
public BesuNodeConfigurationBuilder p2pEnabled(final Boolean p2pEnabled) {
this.p2pEnabled = p2pEnabled;
return this;
}
public PantheonNodeConfigurationBuilder discoveryEnabled(final boolean discoveryEnabled) {
public BesuNodeConfigurationBuilder discoveryEnabled(final boolean discoveryEnabled) {
this.discoveryEnabled = discoveryEnabled;
return this;
}
public PantheonNodeConfigurationBuilder plugins(final List<String> plugins) {
public BesuNodeConfigurationBuilder plugins(final List<String> plugins) {
this.plugins.clear();
this.plugins.addAll(plugins);
return this;
}
public PantheonNodeConfigurationBuilder extraCLIOptions(final List<String> extraCLIOptions) {
public BesuNodeConfigurationBuilder extraCLIOptions(final List<String> extraCLIOptions) {
this.extraCLIOptions.clear();
this.extraCLIOptions.addAll(extraCLIOptions);
return this;
}
public PantheonNodeConfigurationBuilder revertReasonEnabled() {
public BesuNodeConfigurationBuilder revertReasonEnabled() {
this.revertReasonEnabled = true;
return this;
}
public PantheonNodeConfigurationBuilder staticNodes(final List<String> staticNodes) {
public BesuNodeConfigurationBuilder staticNodes(final List<String> staticNodes) {
this.staticNodes = staticNodes;
return this;
}
public PantheonNodeConfiguration build() {
return new PantheonNodeConfiguration(
public BesuNodeConfiguration build() {
return new BesuNodeConfiguration(
name,
miningParameters,
jsonRpcConfiguration,

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save