EVM Compatibility
Overview
Telcoin Network runs a standard Ethereum Virtual Machine. There are no custom opcodes, no modified gas costs, and no disabled instructions. Contracts written in Solidity or Vyper deploy and execute identically to Ethereum. Standard tooling, including Hardhat, Foundry, ethers.js, viem, etc., work without modification.
TN supports all standard transaction types:
Legacy transactions
EIP-2930 (access list)
EIP-1559 (type 2)
All Ethereum hardfork rules through Prague/Pectra are active.
The sections below cover the areas where TN diverges from mainnet Ethereum behavior.
TEL Precompile: Native ERC-20 Interface
The most significant difference is the TEL precompile at address 0x7e1. This precompile gives the native TEL token a full ERC-20 interface, making TEL simultaneously the chain's gas token and a standard ERC-20.
What This Means
On Ethereum, the native asset (ETH) has no ERC-20 interface. Protocols that need an ERC-20 representation of ETH must use a wrapper contract like WETH. On TN, this is unnecessary because TEL is natively accessible as an ERC-20 at 0x7e1.
Calling balanceOf(address) on the precompile returns the address's native account balance. A native TEL transfer (via CALL with value) and an ERC-20 transfer() call to 0x7e1 both modify the same underlying balance.
Supported Interfaces
ERC-20 (full standard)
name()
Returns "Telcoin"
symbol()
Returns "TEL"
decimals()
Returns 18
totalSupply()
Returns current circulating supply
balanceOf(address)
Returns native account balance
transfer(address, uint256)
Moves native balance; reverts on transfer to address(0)
approve(address, uint256)
Sets allowance; overwrites any existing value
allowance(address, address)
Returns current allowance
transferFrom(address, address, uint256)
Transfers on behalf of owner using allowance
EIP-2612 (permit)
The precompile supports gasless approvals via permit(owner, spender, value, deadline, v, r, s). This allows off-chain signatures to set allowances without requiring the token holder to submit a transaction.
permit()— set allowance via EIP-712 typed signaturenonces(address)— monotonic nonce for replay protectionDOMAIN_SEPARATOR()— EIP-712 domain hash (chain-aware)
Notable Behaviors
Infinite allowance: If allowance is set to
type(uint256).max,transferFromdoes not decrement it. This saves gas on repeated transfers from the same spender.No transfers to zero address: Both
transfer()andtransferFrom()revert if the recipient isaddress(0).Standard events: The precompile emits
TransferandApprovalevents per the ERC-20 specification. However, native TEL transfers (viaCALLwith value) do not emitTransferevents — only ERC-20 calls through0x7e1do.
Implications for Bridge Integrations
TEL can be bridged as an ERC-20 without wrapping. Use address
0x7e1as the token contract.balanceOfreflects the exact native balance, including gas refunds and validator rewards.Standard
approve+transferFrompatterns work as expected.permit()is available for gasless approval flows.
Fee Distribution
TN modifies where transaction fees are sent compared to Ethereum.
Priority fee (tip)
Block proposer
Batch producer (validator)
Base fee
Burned (EIP-1559)
Burned then minted to governance address
Gas limit penalty
N/A
Burned then minted to governance address
The base fee is not removed from circulation on TN. It is collected by the governance address for protocol use. See basefees for details on how the base fee adjusts per epoch, and penalties for the quadratic gas limit penalty mechanism.
Chain IDs
Mainnet
487
Testnet
2017
Blob Transactions (EIP-4844)
TN does not support blob transactions yet. While the EIP-4844 transaction type is recognized, blob gas pricing is effectively disabled. Applications should use standard EIP-1559 transactions.
Block Header Differences
TN repurposes several Ethereum block header fields to carry consensus-layer metadata. These differences do not affect contract execution but are relevant for indexing tools, block explorers, or services that read block headers directly.
Repurposed Fields
nonce
PoW mining nonce
Epoch and consensus round, packed as (epoch << 32) | round
difficulty
Network difficulty
Worker ID and batch index, packed as (batch_index << 16) | worker_id
mix_hash
PoW mix digest
Consensus output digest XOR'd with batch digest. If no batches, just the output digest
ommers_hash
Uncle block hash
Digest of the consensus Batch executed to produce this block. B256::ZERO if no batches
parent_beacon_block_root
Beacon chain parent root
Digest of the ConsensusHeader that committed the transactions
extra_data
Arbitrary miner data
keccak256(BLS aggregate signature) at epoch boundaries, empty bytes otherwise
base_fee_per_gas
Adjusts per block (EIP-1559)
Fixed for the entire epoch, adjusts at epoch boundaries. See basefees
withdrawals
Beacon chain withdrawals
Validator reward records at epoch boundaries, empty otherwise
Fixed / Unused Fields
requests_hash
EMPTY_REQUESTS_HASH
EIP-7685 deposit requests not used
excess_blob_gas
0
Blob transactions not used
Decoding the difficulty Field
difficulty FieldThe difficulty field packs two values:
Bits 0-15 (lower 16 bits):
worker_idBits 16+ (upper bits):
batch_index
To extract them:
Decoding the nonce Field
nonce FieldThe nonce field packs epoch and round:
Upper 32 bits: epoch number
Lower 32 bits: consensus round number
Summary
EVM opcodes
Standard
Standard (identical)
Gas costs
Standard
Standard (identical)
Transaction types
Legacy, EIP-2930, EIP-1559, EIP-4844
Legacy, EIP-2930, EIP-1559
Native asset ERC-20
Requires WETH wrapper
Built-in at 0x7e1
Base fee destination
Burned
Governance address
Blob transactions
Supported
Not used
Contract languages
Solidity, Vyper, etc.
Same
Tooling
Hardhat, Foundry, ethers.js, viem
Same
Chain IDs
1 (mainnet)
487 (mainnet), 2017 (testnet)
Last updated