Polygon zkEVM

🚧

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)
from web3 import Web3

web3 = Web3(Web3.HTTPProvider('https://%s:%s@%s'% ("USERNAME", "PASSWORD", "HOSTNAME")))
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.