# Tools

# Interaction tools

# Bor client

Interact with your Polygon PoS node using the Bor client (opens new window).

  1. Install Bor (opens new window).

  2. Use bor attach command with the node endpoint.

bor attach ENDPOINT

where

  • ENDPOINT — your node HTTPS or WSS endpoint.

See also View node access and credentials.

Example:

  • Key-protected
  • Password-protected
bor attach https://nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d
  1. Invoke any methods from Web3 JavaScript API (opens new window).

Example below demonstrates how to get the balance of an address in wei value and convert it to ether value:

> web3.fromWei(web3.eth.getBalance("0xc94770007dda54cF92009BFF0dE90c06F603a09f"))
0.1

# GraphQL

You can use GraphQL on dedicated nodes on the Business and Enterprise subscription plans.

# UI

You can query data using the graphical interface.

  1. On Chainstack, navigate to your dedicated Polygon PoS node. See View node access and credentials.
  2. Hover over GraphQL IDE URL and click Open.
  3. In the graphical interface that opens, run a GraphQL query.

Example to get the latest block number:

{ block { number } }

# Node.js

You can build a web app to query data using Node.js and axios (opens new window):

const axios = require('axios');
const main = async () => {
  try {
    const result = await axios.post(
      'ENDPOINT',
      {
        query: `
          QUERY
        `
      }
    );
    console.log(result.data);
  } catch(error) {
    console.error(error);
  }
}
main();

where

  • ENDPOINT — your node GraphQL endpoint.
  • QUERY — your GraphQL query.

See also View node access and credentials.

Example to get the latest block number:

  • Key-protected
  • Password-protected
const axios = require('axios');
const main = async () => {
  try {
    const result = await axios.post(
      'https://nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d/graphql',
      {
        query: `
          { block { number } }
        `
      }
    );
    console.log(result.data);
  } catch(error) {
    console.error(error);
  }
}
main();

See also Using GraphQL with EVM-compatible nodes.

# MetaMask

On the node access page, click Add to MetaMask.

# Development tools

# Truffle

Configure Truffle Suite (opens new window) to deploy contracts to your Polygon PoS nodes.

  1. Install Truffle Suite (opens new window), HD Wallet-enabled Web3 provider (opens new window), and create a project.

  2. Create a new environment in truffle-config.js, add your mnemonic phrase generated by a wallet (opens new window) and the node endpoint:

  • Key-protected
  • Password-protected
const HDWalletProvider = require("@truffle/hdwallet-provider");
const mnemonic = 'pattern enroll upgrade ...';
...
module.exports = {
 networks: {
    chainstack: {
        provider: () => new HDWalletProvider(mnemonic, "https://nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d"),
        network_id: "*"
    },
   }
  }
};

# Hardhat

Configure Hardhat (opens new window) to deploy contracts and interact through your Polygon PoS nodes.

  1. Install Hardhat (opens new window) and create a project.

  2. Create a new environment in hardhat.config.js:

require("@nomiclabs/hardhat-waffle");
...
module.exports = {
  solidity: "0.7.3",
  networks: {
    chainstack: {
        url: "ENDPOINT",
        accounts: ["PRIVATE_KEY"]
    },
   }
};

where

  • ENDPOINT — your node HTTPS or WSS endpoint.
  • PRIVATE_KEY — the private key of the account that you use to deploy the contract.

See also View node access and credentials.

Example:

  • Key-protected
  • Password-protected
require("@nomiclabs/hardhat-waffle");
...
module.exports = {
  solidity: "0.7.3",
  networks: {
    chainstack: {
        url: "https://nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d",
        accounts: ["ee5dda7d38d194783d32adcfc961401108b8fdde27e8fee115553959d434e68b"]
    },
   }
};
  1. Run npx hardhat run scripts/deploy.js --network chainstack and Hardhat will deploy using Chainstack.

# web3.js

Build DApps using web3.js (opens new window) and Polygon PoS nodes deployed with Chainstack.

# HTTP

  1. Install web3.js (opens new window).
  2. Use the HttpProvider object to connect to your node HTTPS endpoint.
const Web3 = require('web3');

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

where

  • ENDPOINT — your node HTTPS endpoint.

Example to get the latest block number:

  • Key-protected
  • Password-protected
const Web3 = require('web3');

const web3 = new Web3(new Web3.providers.HttpProvider('https://nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d'));

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

# WebSocket

  1. Use the WebsocketProvider object to connect to your node WSS endpoint.
const Web3 = require('web3');

const web3 = new Web3(new Web3.providers.WebsocketProvider('ENDPOINT'));

where

  • ENDPOINT — your node WSS endpoint.

Example to get the latest block number:

  • Key-protected
  • Password-protected
const Web3 = require('web3');

const web3 = new Web3(new Web3.providers.WebsocketProvider('wss://ws-nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d'));

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

# web3.py

Build DApps using web3.py (opens new window) and Polygon PoS nodes deployed with Chainstack.

  1. Install web3.py (opens new window).
  2. Connect over HTTP or WebSocket. See also EVM node connection: HTTP vs WebSocket.

# HTTP

Use the HTTPProvider to connect to your node HTTPS endpoint.

  • Key-protected
  • Password-protected
from web3 import Web3

web3 = Web3(Web3.HTTPProvider('ENDPOINT'))

where

  • ENDPOINT — your node HTTPS endpoint.
  • HOSTNAME — your node HTTPS endpoint hostname.
  • USERNAME — your node access username.
  • PASSWORD — your node access password.

Example to get the latest block number:

  • Key-protected
  • Password-protected
from web3 import Web3

web3 = Web3(Web3.HTTPProvider('https://nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d'))
print(web3.eth.blockNumber)

# WebSocket

Use the WebsocketProvider object to connect to your node WSS endpoint.

  • Key-protected
  • Password-protected
from web3 import Web3

web3 = Web3(Web3.WebsocketProvider('ENDPOINT'))

where

  • ENDPOINT — your node WSS endpoint.
  • HOSTNAME — your node WSS endpoint hostname.
  • USERNAME — your node access username.
  • PASSWORD — your node access password.

Example to get the latest block number:

  • Key-protected
  • Password-protected
from web3 import Web3

web3 = Web3(Web3.WebsocketProvider('wss://ws-nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d'))
print(web3.eth.blockNumber)

# web3.php

Build DApps using web3.php (opens new window) and Polygon PoS nodes deployed with Chainstack.

  1. Install web3.php (opens new window).
  2. Connect over HTTP:
<?php

require_once "vendor/autoload.php";

use Web3\Web3;
use Web3\Providers\HttpProvider;
use Web3\RequestManagers\HttpRequestManager;

$web3 = new Web3(new HttpProvider(new HttpRequestManager("ENDPOINT", 5)));
?>

where ENDPOINT is your node HTTPS endpoint.

  1. Use JSON-RPC methods (opens new window) to interact with the node.

Example to get the latest block number:

  • Key-protected
  • Password-protected
<?php

require_once "vendor/autoload.php";

use Web3\Web3;
use Web3\Providers\HttpProvider;
use Web3\RequestManagers\HttpRequestManager;

$web3 = new Web3(new HttpProvider(new HttpRequestManager("https://nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d", 5)));

$eth = $web3->eth;

$eth->blockNumber(function ($err, $data) {
        print "$data \n";
});
?>

# ethers.js

Build DApps using ethers.js (opens new window) and Polygon PoS nodes deployed with Chainstack.

  1. Install ethers.js (opens new window).
  2. Connect over HTTP or WebSocket.

# HTTP

Use the JsonRpcProvider object to connect to your node HTTPS endpoint.

  • Key-protected
  • Password-protected
const { ethers } = require("ethers");

var urlInfo = {
    url: 'ENDPOINT'
};
var provider = new ethers.providers.JsonRpcProvider(urlInfo, NETWORK_ID);

where

  • ENDPOINT — your node HTTPS endpoint.
  • USERNAME — your node access username.
  • PASSWORD — your node access password.
  • NETWORK_ID — Polygon PoS network ID:
    • Mainnet: 137
    • Mumbai testnet: 80001

Example to get the latest block number on mainnet:

  • Key-protected
  • Password-protected
const { ethers } = require("ethers");

var urlInfo = {
    url: 'https://nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d'
};
var provider = new ethers.providers.JsonRpcProvider(urlInfo, 137);

provider.getBlockNumber().then(console.log);

# WebSocket

Use the WebSocketProvider object to connect to your node WSS endpoint.

const { ethers } = require("ethers");

const provider = new ethers.providers.WebSocketProvider('ENDPOINT', NETWORK_ID);

where

  • ENDPOINT — your node WSS endpoint.
  • NETWORK_ID — Polygon PoS network ID:
    • Mainnet: 137
    • Mumbai testnet: 80001

Example to get the latest block number on mainnet:

  • Key-protected
  • Password-protected
const { ethers } = require("ethers");

const provider = new ethers.providers.WebSocketProvider('wss://ws-nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d', 137);

provider.getBlockNumber().then(console.log);

# Brownie

  1. Install Brownie (opens new window).
  2. Use the brownie networks add command with the node endpoint:
brownie networks add Polygon ID name="NETWORK_NAME" host=KEY_ENDPOINT chainid=NETWORK_ID

where

  • ID — any name that you will use as the network tag to run a deployment. For example, chainstack-mainnet.
  • NETWORK_NAME — any name that you want to identify the network by in the list of networks. For example, Mainnet (Chainstack).
  • ENDPOINT — your node HTTPS or WSS endpoint.
  • NETWORK_ID — Polygon network ID:
    • Mainnet: 137
    • Mumbai testnet: 80001

Example to add a Polygon mainnet node to the list of Brownie networks:

  • Key-protected
  • Password-protected
brownie networks add Polygon polygon-mainnet name="Mainnet (Chainstack)" host=https://nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d chainid=137

Example to run the deployment script:

brownie run deploy.py --network polygon-mainnet

# Foundry

  1. Install Foundry (opens new window).
  2. Use --rpc-url to run the operation through your Chainstack node.

# Forge

Use forge (opens new window) to develop, test, and deploy your smart contracts.

To deploy a contract:

forge create CONTRACT_NAME --contracts CONTRACT_PATH --private-key PRIVATE_KEY --rpc-url ENDPOINT

where

  • CONTRACT_NAME — name of the contract in the Solidity source code.
  • CONTRACT_PATH — path to your smart contract.
  • PRIVATE_KEY — the private key to your funded account that you will use to deploy the contract.
  • ENDPOINT — your node HTTPS endpoint.

Example to deploy the simple storage (opens new window) contract:

  • Key-protected
  • Password-protected
forge create SimpleStorage --contracts /root/foundry/contracts/simplestorage.sol --private-key 9c4b7f4ad48f977dbcdb2323249fd738cc9ff283a7514f3350d344e22c5b923d --rpc-url https://nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d

# Cast

Use cast (opens new window) to interact with the network and the deployed contracts.

To get the latest block number:

cast block-number --rpc-url ENDPOINT

where ENDPOINT is your node HTTPS endpoint.

Example:

  • Key-protected
  • Password-protected
cast block-number --rpc-url https://nd-123-456-789.p2pify.com/3c6e0b8a9c15224a8228b9a98ca1531d