What is the correct algorithm to calculate gas limit for transaction with data in Ethereum?
According to Ethereum Yellow Paper, in order to calculate gas limit for transaction with non-zero data you will need to use the following formula:
gasLimit = Gtransaction + Gtxdatanonzero × dataByteLength
Gtransaction = 21000 gas
Gtxdatanonzero = 68 gas
dataByteLength — your data size in bytes
So, the final formula would look like this:
gasLimit = 21000 + 68 * dataByteLength.
If your data has 10 bytes, the gas limit would be:
gasLimit = 21000 + 68 * 10 = 21000 + 680 = 21680