First of all, let's understand what is the cumulative gas used.
cumulativeGasUsed: Number - The total amount of gas used when this transaction was executed in the block.
That explanation was not clear to me at all, let's try another one:
cumulativeGasUsed is the sum of gasUsed by this transaction and all
preceding transactions in the same block.
We have there 4 transactions. 3 simple sends, and 1 contract creation.
- Send, 21000 gasUsed, 21000 cumulativeGasUsed
- Send, 21000 gasUsed, 42000 cumulativeGasUsed
- Send, 21000 gasUsed, 63000 cumulativeGasUsed
- Contract creation, 514474 gasUsed, 577474 cumulativeGasUsed
Now if we calc 577474 - 63000 the result is 514474.
Back to your question about how to calculate it. Simple answer: you just don't bother, cause it doesn't(almost) affect your transaction.
But if you're really want to do that here the simple approach. Get the 'pending' block gasUsed
web3.eth.getBlock('pending').gasUsed and add to it the estimateGas of your transaction. Most of the time it will result in a cumulativeGasUsed for your transaction. It may change though if someone will submit another transaction in between your estimation and your submit.
I said 'almost' earlier because it may affect your transaction in a way that it will not fit the block gas limit.
I see the field Cumulative Gas Used which isn't present in web3 response.
It is present in