# Tools

# Interaction tools

# MetaMask

On the node access page, click Add to MetaMask.

# Development tools

# Truffle

Configure Truffle Suite (opens new window) to deploy contracts to your Fuse 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 Fuse 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 Fuse 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 Fuse 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 Fuse 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 Fuse 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 — Fuse network ID:
    • Mainnet: 122
    • Spark testnet: 123

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, 100);

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 — Fuse network ID:
    • Mainnet: 122
    • Spark testnet: 123

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', 100);

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 Fuse 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 — Fuse network ID:
    • Mainnet: 122
    • Spark testnet: 123

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

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

Example to run the deployment script:

brownie run deploy.py --network fuse-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