Telcoin

Developer Quick Start: Deploy Your First Contract on Telcoin Network

Telcoin Network is EVM compatible, so the tools you already use for Ethereum work here with only a change of RPC URL and chain ID. Everything in this guide uses the Open Path: no application, approval, or membership is needed to start building.

Network details

Network Name:

Telcoin Adiri Testnet

ChainID:

2017

Currency symbol:

TEL

Decimals

18

RPC URL

rpc.telcoin.network

Faucet

https://telcoin.network/faucet

Block Explorer - testnet

https://telscan.xyz

Adiri details also ship as a built-in chain in viem (telcoinTestnet), so frontend projects can import them directly. Mainnet chain ID and RPC endpoints will be published closer to launch.

Prerequisites

  • A browser wallet such as MetaMask or Rabby, with a fresh account used only for testing
  • Foundry installed (forge, cast, and anvil)
  • Node.js 18 or later, for the viem step only
  • Basic familiarity with Solidity and the command line

Install or update Foundry:

curl -L https://foundry.paradigm.xyz | bash

foundryup

Step 1: Connect your wallet and get testnet TEL

TEL is the native gas token on Telcoin Network, so you need a small amount to deploy and send transactions.

  1. In your wallet, add a custom network using the values from the table above.
  2. Copy your wallet address.
  3. Open the faucet, paste your address, and request testnet TEL. Each token on the faucet can be claimed once every 24 hours.
  4. Confirm the balance from the command line:

cast balance <YOUR_ADDRESS> --rpc-url https://rpc.telcoin.network --ether

Testnet TEL has no value. Never send real funds to a testnet address, and never reuse a testnet private key on mainnet.

Step 2: Set up a Foundry project

Create a new project. Foundry generates a simple Counter contract in src/Counter.sol, which is all you need for this guide.

forge init hello-telcoin

cd hello-telcoin

forge build

Add the Adiri RPC as a named endpoint in foundry.toml, so you can refer to it as adiri instead of pasting the URL each time:

[rpc_endpoints]

adiri = "https://rpc.telcoin.network"

Import your test account into Foundry's encrypted keystore. This keeps your private key out of shell history and environment files:

cast wallet import adiri-deployer --interactive

Paste the private key of your test account when prompted, then set a password.

Step 3: Deploy the contract

forge create src/Counter.sol:Counter \

--rpc-url adiri \

--account adiri-deployer \

--broadcast

The output includes a Deployed to: address and a transaction hash. Save the contract address for the next step:

export COUNTER=<DEPLOYED_ADDRESS>

The --broadcast flag is required on Foundry 1.0 and later. Without it, forge create runs a dry run and nothing is sent to the network.

For anything beyond a single contract, use a Foundry script (forge script ... --broadcast) so deployments are repeatable and version controlled.

Step 4: Interact with your contract

Read the current value (a free call, no transaction):

cast call $COUNTER "number()(uint256)" --rpc-url adiri

Send a transaction to increment it:

cast send $COUNTER "increment()" \

--rpc-url adiri \

--account adiri-deployer

Call number() again and you will see it has gone up by one. When cast send returns, the transaction is already final: Telcoin Network's consensus commits blocks that cannot be reorganised, so there is no need to wait for extra confirmations.

Paste your contract address or transaction hash into telscan.xyz to see it on the explorer. Telscan.xyz is built on Telcoin Network's Execution Extension (ExEx) feature and shows transaction status as it moves through the network.

Step 5: Read from your contract with viem

viem includes Adiri as a built-in chain, so connecting from JavaScript or TypeScript takes a few lines.

mkdir counter-client && cd counter-client

npm init -y

npm install viem

Create read.mjs:

import { createPublicClient, http, parseAbi } from 'viem'

import { telcoinTestnet } from 'viem/chains'

const client = createPublicClient({

chain: telcoinTestnet,

transport: http(),

})

const abi = parseAbi(['function number() view returns (uint256)'])

const value = await client.readContract({

address: process.env.COUNTER,

abi,

functionName: 'number',

})

console.log('Counter value:', value)

Run it:

COUNTER=<DEPLOYED_ADDRESS> node read.mjs

The same telcoinTestnet chain object works with wagmi and most wallet connection libraries, so a frontend can prompt users to switch to Adiri without hardcoding network details.

What's different from Ethereum

Most contracts deploy unchanged. These are the differences worth knowing before you build anything serious.

Area

On Telcoin Network

What it means for you

Finality

Blocks are final once committed by Bullshark consensus (two rounds) and never reorganise

No reorg handling or confirmation counts needed

Base fee

Adjusts once per epoch (six hours), not per block

Fee estimates stay stable within an epoch

Blob transactions

Not supported yet

Don't rely on EIP-4844 blobs

Block header fields

Some fields are repurposed by the consensus layer

Don't depend on header values for randomness or timing logic

System calls

The protocol makes its own calls at epoch boundaries

You will see them on the explorer; you never write them

Gas token

TEL, 18 decimals on Adiri

Display and pricing logic should not assume ETH

Next steps

  • Build with ExEx: use Execution Extensions to track transactions through their full lifecycle in your app or backend.
  • Integrate Digital Cash and TELx: add stablecoin transfers and swaps, the building blocks for payments and remittance apps.
  • Explore the GSMA Application Developer Member path: issue local stablecoins, earn from the TAN issuance pool, and take part in governance.
  • Prepare for mainnet: plan for the TEL upgrade, audits, and production monitoring.