Executes a new message call immediately without creating a transaction on the block chain.
This is one of the most commonly used API calls. It is used to read from the blockchain which includes executing smart contracts, but it does not publish anything to the blockchain. This call does not consume any Ether.
Starting from Geth 1.9.13 eth_call will check the balance of the sender (to make sure that the sender has enough gas to complete the request) before executing the call, when one of the following conditions is true:
- the gas_price parameter is populated, or
- the contract function being called (i.e. in data modifies blockchain state)
In these two cases, even though the eth_call requests don't consume any gas, the from address must have enough gas to execute the call as if it were a write transaction because eth_call is being used to simulate the transaction.
Parameters
- Object - The transaction call object
- from: DATA, 20 Bytes - (optional) The address the transaction is sent from.
- to: DATA, 20 Bytes - The address the transaction is directed to.
- gas: QUANTITY - (optional) Integer of the gas provided for the transaction execution. eth_call consumes zero gas, but this parameter may be needed by some executions. NOTE: this parameter has a cap of 550 Million gas per request. Reach out to us at [email protected] if you want to increase this limit!
- gasPrice: QUANTITY - (optional) Integer of the gasPrice used for each paid gas.
- value: QUANTITY - (optional) Integer of the value sent with this transaction
- data: DATA - (optional) Hash of the method signature and encoded parameters. For details see Ethereum Contract ABI
- QUANTITY|TAG - Integer block number, or the string "latest", "earliest" or "pending" (see the default block parameter or the blockHash (in accordance with EIP-1898) NOTE: the parameter is an object instead of a string and should be specified as: {"blockHash": "0x"}. Learn more here.
Note: eth_call has a timeout restriction at the node level. Batching multiple eth_call together on-chain using pre-deployed smart contracts might result in unexpected timeouts that cause none of your calls to complete. Instead, consider serializing these calls, or using smaller batches if they fail with a node error code.
params:[
{
"from": "0x09C7c14e61A2B3Ce924AC27E6b110c46F255F536",
"to": "0xBc7f67fA9C72f9fcCf917cBCEe2a50dEb031462A",
"gas": "0x1111110",
"gasPrice": "0x0",
"value": "0x0",
"data": "0x8f6bdeaa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000002dc6c000000000000000000000000000000000000000000000000000000000002db39f00000000000000000000000009c7c14e61a2b3ce924ac27e6b110c46f255f5360000000000000000000000000000000000000000000000000000000064ec6017"
},
"0x47ffa"
];
Returns
DATA - The return value of executed contract.
Example
Request
curl --location 'https://linea-mainnet.unifra.io/v1//health' \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc": "2.0",
"method": "eth_call",
"params": [
{
"from": "0x09C7c14e61A2B3Ce924AC27E6b110c46F255F536",
"to": "0xBc7f67fA9C72f9fcCf917cBCEe2a50dEb031462A",
"gas": "0x1111110",
"gasPrice": "0x0",
"value": "0x0",
"data": "0x8f6bdeaa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000002dc6c000000000000000000000000000000000000000000000000000000000002db39f00000000000000000000000009c7c14e61a2b3ce924ac27e6b110c46f255f5360000000000000000000000000000000000000000000000000000000064ec6017"
},
"0x47ffa"
],
"id": 1
}'
Result
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x00000000000000000000000000000000000000000000000000000000002dcb12000000000000000000000000000000000000000000000000000000000000012c"
}
The below parameter inputs do not work, please reference the section above instead.