Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

For those working on this feature, the setup tar file below can be used to create run a 4-validator QBFT chain for testing

4-node QBFT chain trying Bonsai (full sync mode) with caliper at 200TPS:

Configuration of boot node:

p2p-port=30303
rpc-http-port=8545
rpc-http-api=["NET","ETH","WEB3","ADMIN","TXPOOL","QBFT"]
rpc-http-enabled=true 
rpc-ws-enabled=true
rpc-ws-port=8555
tx-pool="sequenced"
data-storage-format="FOREST"
data-path="./data"
tx-pool-no-local-priority=true
min-gas-price=0
tx-pool-limit-by-account-percentage=0.55

Configuration of nodes 2-4:

bootnodes=["enode://<enode-for-boot-node>@127.0.0.1:30303"]
p2p-port=<unique port>
rpc-http-port=<unique port>
rpc-http-api=["NET","ETH","WEB3","ADMIN","TXPOOL","QBFT"]
rpc-http-enabled=true
rpc-ws-enabled=true
rpc-ws-port=<unique port>
tx-pool="sequenced"
data-storage-format="FOREST"
data-path="./data"
tx-pool-no-local-priority=true
min-gas-price=0
tx-pool-limit-by-account-percentage=0.55

Genesis file:

{
  "config" : {
    "chainId" : 1337,
    "berlinBlock": 0,
    "londonBlock": 0,
    "zeroBaseFee": true,
    "qbft" : {
      "blockperiodseconds" : 2,
      "epochlength" : 30000,
      "requesttimeoutseconds" : 4
    }
  },
  "contractSizeLimit" : 99999999999,
  "nonce" : "0x0",
  "timestamp" : "0x58ee40ba",
  "gasLimit" : "0x1FFFFFFFFFFFFF",
  "difficulty" : "0x1",
  "mixHash" : "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
  "coinbase" : "0x0000000000000000000000000000000000000000",
  "extraData" : "0xf87aa00000000000000000000000000000000000000000000000000000000000000000f854946a5d767a9cfd5711bffefa121491fe9d78d27a2794f4ffcf181a94328e848a9622d2d668d9a703508994a0685b78b74b63841651855f23d8161482e3bd1b9433b38bbb139832055630194c0673a43b6075663fc080c0"
}

Caliper scenario

simpleArgs: &simple-args

  initialMoney: 100000

  moneyToTransfer: 100

  numberOfAccounts: &number-of-accounts 10000 # the configured number of accounts

test:

  name: simple

  description: >-

    This is an example benchmark for Caliper, to test the backend DLT's

    performance with simple account opening & querying transactions.

  workers:

    number: 1

  rounds:

    - label: open

      description: >-

        Test description for the opening of an account through the deployed

        contract.

      txNumber: *number-of-accounts

      rateControl:

        type: fixed-rate

        opts:

          tps: 200 # tps for opening the configured number of accounts

      workload:

        module: benchmarks/scenario/simple/open.js

        arguments: *simple-args

    - label: query

      description: Test description for the query performance of the deployed contract.

      txNumber: *number-of-accounts

      rateControl:

        type: fixed-rate

        opts:

          tps: 800 # tps for querying the configured number of accounts

      workload:

        module: benchmarks/scenario/simple/query.js

        arguments: *simple-args

    - label: transfer

      description: Test description for transfering money between accounts.

      txNumber: *number-of-accounts

      rateControl:

        type: fixed-rate

        opts:

          tps: 200 # tps for transfer using the configured number of accounts

      workload:

        module: benchmarks/scenario/simple/transfer.js

        arguments:

          <<: *simple-args

          money: 100

Results for Besu 24.4.0-rc (commit https://github.com/hyperledger/besu/commit/9ae52a97cdea827d74e5500ff93fd5b42045c066): Test fails after ~ 70 blocks with

...

. The 4th node has Xsynchronizer-world-state-request-parallelism=1 set as without this, the account data range requests fail to all be marked as complete.


View file
name4-validator-dir.tar.gz
height250