Polygon zkEVM: New Custom Endpoints for dApps

Recent changes to the network caused users to see estimated gas prices that were much higher than the transaction fee paid. This custom endpoint is the solution.

Polygon Labs
March 12, 2024
Technical Blog
Image source: Dribbble

Earlier this year, Polygon zkEVM changed how it calculated transaction fees. While the actual transaction fee paid by users went down for most types of DeFi activity, there was one unintended consequence: The estimated gas price users had to sign was much higher than what they would end up paying. 

If you have a dApp deployed on Polygon zkEVM, this solution is for you. Using this custom endpoint is not obligatory, but strongly recommended.

Relevant Calls 

Standard endpoint

  • eth_estimateGas returns the gas needed to execute the transaction, given the state of the network

New custom endpoints 

  • zkevm_estimateGasPrice returns an almost exact gas price based on the transaction type and calldata being used, given the state of the network.
  • zkevm_estimateFee returns the estimated transaction fee following the estimated gas price, given the state of the network.

How-to for dApps devs

The relevant JSON content and documentation can be found here: 

  1. Copy the JSON content for node v0.5.13: zkevm-node / json / 0.5.13
  2. You can visualize the spec by pasting the code into the playground area of the OpenRPC Playground
  3. The process is the same as requesting eth_estimateGas. You’ll call the new endpoints with the exact same parameters. For additional reference, see the call examples below.
eth_estimateGas
1curl --location 'https://zkevm-rpc.com' \
2--header 'Content-Type: application/json' \
3--data '{
4    "id": 3539276998283,
5    "jsonrpc": "2.0",
6    "method": "eth_estimateGas",
7    "params": [{"from":"0x0000000000000000000000000000000000000001","to":"0x0000000000000000000000000000000000000002","value":"0x1"}]
8}'
zkevm_estimateGasPrice
1curl --location 'https://zkevm-rpc.com' \
2--header 'Content-Type: application/json' \
3--data '{
4    "id": 3539276998283,
5    "jsonrpc": "2.0",
6    "method": "zkevm_estimateGasPrice",
7    "params": [{"from":"0x0000000000000000000000000000000000000001","to":"0x0000000000000000000000000000000000000002","value":"0x1"}]
8}'
zkevm_estimateFee
1curl --location 'https://zkevm-rpc.com' \
2--header 'Content-Type: application/json' \
3--data '{
4    "id": 3539276998283,
5    "jsonrpc": "2.0",
6    "method": "zkevm_estimateFee",
7    "params": [{"from":"0x0000000000000000000000000000000000000001","to":"0x0000000000000000000000000000000000000002","value":"0x1"}]
8}'

Given the state of the network and the responses to the above calls, the new custom endpoint returned an estimated fee that was ~20% lower than the standard endpoint. Note: On dApps that continue using the standard endpoint, users are always going to sign the higher price but the actual fee paid will be the same as with the custom endpoint. 

For RPC infra providers: node compatibility

This custom endpoint is available for Node version 0.5.13, which was included in the Etrog upgrade: 

If you’re an infrastructure provider running RPC nodes on Polygon zkEVM, you need to update to the latest release of the node on mainnet for dApps to call zkevm_estimateGasPrice.

Nearly all of the node providers on Polygon zkEVM are already running the latest version. 

Additional Material

A complete list of all JSON RPC endpoints supported on Polygon zkEVM can be found here: 

Tune into the blog and our social channels to keep up with updates about the Polygon ecosystem.

The future of blockchains is aggregated.

Website | Twitter | Forum | Telegram | Discord | Instagram | LinkedIn | Polygon Knowledge Layer

More from blogs