5

I am load-testing Ethereum using a private network of two nodes. The DApp is a web-service which stores and retrieves data in/from a smart-contract deployed in the private Ethereum. For load-testing I am using JMeter which simulates around 100 users over a period of 1 hour. The protocol flow submits 12 transactions per user, totalling around 1200 transactions. I have noticed this particular behaviour:

Each block contains only one transaction even though there are multiple transactions in the transaction pool. A screenshot is given below:

enter image description here

As you can imagine, the load testing creates a huge backlog of transactions in the transaction pool which takes a considerable amount of time to be included in the block.

I wonder why only one transaction is being included in the block. Is there any way to include more than one transaction in a single block?

I use Geth for interacting with the private blockchain. Its parameters are:

Version: 1.5.4-stable
Git Commit: b70acf3c5bd335d8dedc2a5aa6eff05c4c32105e
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.7.3
OS: linux

Thanks in advance.

Ripul

5

Have you set the nonce of each transaction correctly? If not, only a single transaction per user will be included in the block (the first one with probably nonce=0). Because you have about 100 users in 1 hour, it means about 100 txs in 3600 seconds or 1 tx in 36 seconds, or 1-0 tx per block.

Every transaction needs a nonce, and every user has its own nonce counter. A transaction will be included in a block only if it is its turn to be executed, it means when the user's counter matches the tx's nonce. Read this answer for more information about tx's nonce.

| improve this answer | |
  • Many thanks for your answer. That's an interesting point. But I don't set the nonce by myself. I use the web3.js to call the function of the smart-contract to store a value. In such cases, how to control the nonce? Also, who controls the nonce? I checked one of the backlogged txs and found its nonce to be 2276! Just to point out, it's 1200 txs to store values in the smart-contract over a period of one hours, evenly distributed between two nodes. Meaning each node needs to process around 600 txs per hour. Thanks, Ripul – Ripul Jan 12 '17 at 11:27
1

From the team at Blocknative... A Speed Up transaction will typically have:

  • An identical nonce, From the same Wallet address,
  • Sent to an external account (not a smart contract),
  • with At least a 10% higher gas fee,
  • and The identical value,
  • plus Gets signed-and-successfully-submitted before the original transaction is confirmed.

You'll want to make sure that the Speed Up transaction you're sending fits that convention to ensure it is sent.

You can read the full article here: https://blog.blocknative.com/blog/speed-up-transactions

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.