Current API limitations

Polygon zkEVM currently supports most of the wide-known JSON-RPC methods.

Interaction tools

MetaMask

On node access details, click Add to MetaMask.

Development tools

Truffle

Configure Truffle Suite to deploy contracts to your Polygon zkEVM nodes.

1

Install Truffle Suite, HD Wallet-enabled Web3 provider, and create a project.

2

Install the dotenv package to securely load your sensitive variables from a .env file

3

Create a new environment, and define a new network, in truffle-config.js:

require('dotenv').config();
const HDWalletProvider = require("@truffle/hdwallet-provider");
module.exports = {
  networks: {
    zkEVMTestnet: {
      provider: () => {
        return new HDWalletProvider([process.env.YOUR_PRIVATE_KEY], `${process.env.YOUR_CHAINSTACK_ENDPOINT}`);
      },
      network_id: 1442,
    },

  },
  compilers: {
    solc: {
      version: "0.8.17",
      settings: {
        optimizer: {
          enabled: true,
          runs: 50,
        },
      },
    },
  },

};

Hardhat

Configure Hardhat to deploy contracts and interact through your Polygon zkEVM nodes.

1

Install Hardhat and create a project.

2

Install the dotenv package to securely load your sensitive variables from a .env file

3

Create a new environment in hardhat.config.js:

require("@nomicfoundation/hardhat-toolbox");
require('dotenv').config();

module.exports = {
  solidity: "0.8.18",
  defaultNetwork: "zkEVM_testnet",
  networks: {
    zkEVM_testnet: {
        url: `${process.env.YOUR_CHAINSTACK_ENDPOINT}`,
        accounts: [process.env.YOUR_PRIVATE_KEY]
    },
},

};

web3.js

Build DApps using web3.js and Polygon zkEVM nodes deployed with Chainstack.

1

Install web3.js.

2

Connect over HTTP or WebSocket.

HTTPS

Use the HttpProvider object to connect to your node HTTPS endpoint and get the latest block number:

const Web3 = require('web3');

const web3 = new Web3(new Web3.providers.HttpProvider('YOUR_CHAINSTACK_ENDPOINT'));

web3.eth.getBlockNumber().then(console.log);

where YOUR_CHAINSTACK_ENDPOINT is your node HTTPS endpoint protected either with the key or password.

web3.py

Build DApps using web3.py and Polygon zkEVM nodes deployed with Chainstack.

1

Install web3.py.

2

Connect over HTTP or WebSocket. See also EVM node connection: HTTP vs WebSocket.

HTTPS

Use HTTPProvider to connect to your node endpoint and get the latest block number.

from web3 import Web3

web3 = Web3(Web3.HTTPProvider('YOUR_CHAINSTACK_ENDPOINT'))
print(web3.eth.block_number)

where

  • YOUR_CHAINSTACK_ENDPOINT — your node HTTPS endpoint protected either with the key or password
  • HOSTNAME — your node HTTPS endpoint hostname
  • USERNAME — your node access username (for password-protected endpoints)
  • PASSWORD — your node access password (for password-protected endpoints)

node.js

You can build a web app to query data using node.js and axios:

const axios = require("axios");

const payload = {
    jsonrpc: "2.0",
    id: 0,
    method: "eth_blockNumber",
    params: []

};

(async () => {
    const response = await axios.post(`YOUR_CHAINSTACK_ENDPOINT`, payload)
    console.log(response.data)
})();
  • YOUR_CHAINSTACK_ENDPOINT — your Chainstack node endpoint protected either with the key or password. See node access details.
  • query — your JSON-RPC query. In this case, to get the latest block number.

ethers.js

Build DApps using ethers.js and Polygon zkEVM nodes deployed with Chainstack.

1

Install ethers.js.

2

Connect over HTTPS or WebSocket. See also EVM node connection: HTTP vs WebSocket.

HTTPS

Use the JsonRpcProvider object to connect to your node endpoint and get the balance of any address:

const ethers = require('ethers');
const NODE_URL = "YOUR_CHAINSTACK_ENDPOINT ";
const provider = new ethers.JsonRpcProvider(NODE_URL, NETWORK_ID);
const eth_getBalance = async () => {
    const balance = await provider.getBalance("0x439356Ad40D2f2961c99FFED4453f482AEC453Af");
    console.log(balance);
  };
eth_getBalance()

where

  • YOUR_CHAINSTACK_ENDPOINT — your node HTTPS endpoint protected either with the key or password

  • NETWORK_ID — Polygon zkEVM network ID:

    • Mainnet: 1101
    • Testnet:1442

Brownie

1

Install Brownie.

2

Use the brownie networks add command with the node endpoint:

brownie networks add zkEVM ID name="NETWORK_NAME" host=YOUR_CHAINSTACK_ENDPOINT chainid=NETWORK_ID

where

  • ID — any name that you will use as the network tag to run a deployment. For example, chainstack-testnet.

  • NETWORK_NAME — any name that you want to identify the network by in the list of networks. For example, zkEVM.

  • YOUR_CHAINSTACK_ENDPOINT — your node HTTPS or WSS endpoint protected either with the key or password

  • NETWORK_ID — Polygon zkEVM network ID:

    • Mainnet: 1101
    • Testnet: 1442

Example to run the deployment script:

brownie run deploy.py --network chainstack-testnet

Remix IDE

To make Remix IDE interact with the network through a zkEVM node deployed with Chainstack:

1

Get MetaMask and set it to interact through a Chainstack node. See Interacting through MetaMask.

2

In Remix IDE, navigate to the Deploy tab. Select Injected Provider - MetaMask in Environment.

This will engage MetaMask and make Remix IDE interact with the network through a Chainstack node.