EVM JSON-RPC
DAIT ships a parallel EVM via cosmos/evm v0.6.0 with Block-STM. The JSON-RPC surface is fully Ethereum-compatible: MetaMask, ethers, viem, web3.js, and web3.py work without modification. ChainID 4090 on devnet/testnet.
Endpoint
https://rpc.daitchain.io (Phase 1 testnet, EVM JSON-RPC) http://127.0.0.1:8545 (local devnet) wss://rpc.daitchain.io/ws (eth_subscribe)
Adding the network to MetaMask
Network name: DAIT testnet RPC URL: https://rpc.daitchain.io Chain ID: 4090 Currency: DAIT Explorer: https://explorer.daitchain.io
Differences from Ethereum mainnet
| Detail | DAIT | Ethereum |
|---|---|---|
| Block time | ~999ms (target 369ms post-IAVLx) | ~12s |
| Block gas limit | 99M | 30M |
| Finality | Single-slot, instant on commit | Probabilistic / 2-epoch |
| EIP-1559 | Yes (cosmos/evm fee market) | Yes |
| Parallel execution | Block-STM opt-in (per-tx) | No (sequential) |
| Native asset | DAIT (18 decimals on EVM, 6 on Cosmos) | ETH |
DAIT bridges across the EVM/Cosmos seam via x/erc20: a Cosmos coin can be wrapped 1:1 to an ERC-20 representation and back. The native asset's decimal mismatch (uDAIT = 1e-6 vs aDAIT = 1e-18) is handled by the precise-bank module.
Quick test with ethers.js
import { JsonRpcProvider, formatEther } from "ethers";
const provider = new JsonRpcProvider("https://rpc.daitchain.io");
const block = await provider.getBlockNumber();
console.log("latest block:", block);
const balance = await provider.getBalance("0xYourAddr");
console.log(formatEther(balance), "DAIT");
WebSocket subscriptions
const ws = new WebSocket("wss://rpc.daitchain.io/ws");
ws.send(JSON.stringify({
jsonrpc: "2.0", id: 1, method: "eth_subscribe",
params: ["newHeads"]
}));
Precompiles
The cosmos/evm baseline ships staking and bank precompiles so EVM contracts can interact with Cosmos modules directly. DAIT additionally exposes:
0x...DA17-x/staking_tiersread precompile (tier_of_address, gpus_for)0x...DA1E-x/tee_attestread precompile (attestation_by_id, epoch_nonce)0x...DA1F-x/pouwread precompile (credits_for, effective_stake_for)
Final precompile addresses are pinned at Phase 1 alpha. The contracts package will publish a TypeScript wrapper.
Block-STM and parallel execution
By default, EVM transactions execute sequentially. Transactions can opt into Block-STM parallel execution via a tx flag; the executor speculatively schedules independent reads/writes and rolls back on conflict. This is opt-in because it changes gas accounting in edge cases.
See also
- REST + Tendermint RPC for the Cosmos-side surface
- TypeScript SDK wraps both EVM and Cosmos in one client