Skip to main content

Connect to Testnet

Connect to Selendra testnet for development and testing

Connect to Selendra testnet for free development and testing.

Testnet Overview

  • Free tokens via faucet
  • EVM compatible (Ethereum tools work)
  • Same features as mainnet
  • Monthly reset schedule
  • Community support

Network Setup

MetaMask

SettingValue
Network NameSelendra Testnet
RPC URLhttps://rpc-testnet.selendra.org
Chain ID1953
SymboltSEL
Portalhttps://portal.selendra.org/?rpc=wss%3A%2F%2Frpc-testnet.selendra.org

Alternative Wallets:

  • Polkadot.js: wss://rpc-testnet.selendra.org
  • Talisman: Chain ID 1953

Get Tokens

Faucet: faucet.selendra.org (100 tSEL per request, 3/day)

Telegram: @selendratestnetbot or join t.me/selendranetwork

Framework Setup

Hardhat

hardhat.config.js:

require("@nomicfoundation/hardhat-toolbox");

module.exports = {
  solidity: "0.8.19",
  networks: {
    testnet: {
      url: "https://rpc-testnet.selendra.org",
      chainId: 1953,
      accounts: [process.env.PRIVATE_KEY],
      gasPrice: 1000000000,
    },
  },
};

Foundry

.env:

RPC_URL=https://rpc-testnet.selendra.org
PRIVATE_KEY=your_key
CHAIN_ID=1953

Deploy:

forge script script/Deploy.s.sol --rpc-url $RPC_URL --private-key $PRIVATE_KEY --broadcast

Remix

  1. Open remix.ethereum.org
  2. Deploy & Run โ†’ "Injected Provider - MetaMask"
  3. Ensure MetaMask connected to testnet

Deploy Example

contracts/TestnetStorage.sol:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

contract TestnetStorage {
    uint256 private storedData;
    event DataStored(uint256 newValue, address indexed storedBy);

    function store(uint256 data) public {
        storedData = data;
        emit DataStored(data, msg.sender);
    }

    function retrieve() public view returns (uint256) {
        return storedData;
    }
}

scripts/deploy-testnet.js:

async function main() {
  const [deployer] = await ethers.getSigners();
  console.log("Deploying with:", deployer.address);

  const TestnetStorage = await ethers.getContractFactory("TestnetStorage");
  const storage = await TestnetStorage.deploy();
  await storage.waitForDeployment();

  const address = await storage.getAddress();
  console.log("Deployed:", address);

  await storage.store(42);
  console.log("Stored value:", (await storage.retrieve()).toString());
}

main().catch(console.error);

Run:

npx hardhat run scripts/deploy-testnet.js --network testnet

Network Comparison

PropertyTestnetMainnet
Chain ID19531961
RPChttps://rpc-testnet.selendra.orghttps://rpc.selendra.org
Explorernone hosted, use the portalhttps://explorer.selendra.org
TokentSELSEL
Block Time~1s~1s
Gas Price0.1 Gwei0.1 Gwei

Gas price on both networks sits at the runtime floor, MinBaseFeePerGas = 100,000,000 wei.
Block times measured 2026-08-14.

Best Practices

Workflow:

  1. Test locally: selendra --dev --tmp
  2. Deploy to testnet
  3. Verify contract
  4. Test thoroughly
  5. Deploy to mainnet

Gas Optimization:

uint256 public immutable TOTAL_SUPPLY;  // Use immutable
function update(bytes calldata data) external {}  // Use calldata
function batchTransfer(address[] calldata recipients, uint256[] calldata amounts) external {}

Troubleshooting

IssueSolution
"Transaction underpriced"Increase gas: gasPrice: ethers.parseUnits('2', 'gwei')
"Insufficient funds"Visit faucet, check balance
"Invalid chain ID"Verify Chain ID 1953 in MetaMask
"RPC timeout"Add timeout: 60000 to network config
Testnet unavailableCheck network status at /status
Faucet limitWait 24h or use Telegram bot

Reset Schedule

When: First Monday of each month, before protocol upgrades

What resets: Balances, transaction history, network state

What persists: Contract addresses/bytecode, verified sources

Notifications: Twitter @selendranetwork, Telegram t.me/selendra

Next Steps


Support: Telegram t.me/selendranetwork | Twitter @selendranetwork | Status /status

Ready to build? Start with your first contract deployment on testnet! ๐Ÿš€

Connect to Testnet - Selendra