← Protocols
EOS
Other Chain·Multi-chain

EOS

01Description

EOS is a high-throughput, account-based DPoS L1 secured by 21 Block Producers (BPs) and now governed by the EOS Network Foundation under the Antelope (formerly EOSIO) protocol. Smart contracts are written in C++ (eosio.cdt) or Rust and deployed as WASM. The legacy `eosjs` library (Api / JsonRpc / SignatureProvider) is deprecated in favor of Wharf Kit (`@wharfkit/session`, `@wharfkit/contract`), which is the actively maintained TS toolkit; AntelopeIO/leap is the reference C++ node implementation.

02Best for
  • 01EOS / Antelope dapps (EOS, Telos, WAX, UX Network, Jungle testnet)
  • 02Anchor / Wombat / Scatter / Greymass wallet auth via Wharf Kit
  • 03permissioned account hierarchies (owner / active / custom permissions)
  • 04high-TPS, fee-less consumer apps (CPU/NET resources instead of gas)
  • 05migration from `eosjs` to `@wharfkit/session`
03Install
  • pnpm add @wharfkit/session @wharfkit/contract @wharfkit/wallet-plugin-anchor eosjs
04Environment variables
VariableScopeDescription
NEXT_PUBLIC_EOS_CHAIN_IDClientAntelope chain ID (32-byte hex), e.g. `aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906` (EOS mainnet).
NEXT_PUBLIC_EOS_NODE_URLClientAntelope HTTP API endpoint, e.g. https://eos.greymass.com or https://api.eosauthority.com.
EOS_CONTRACT_ACCOUNTClientAccount name of the deployed contract (12-character `name` like `myapp.token`).
05Prompt snippet
Prefer `@wharfkit/session`. Build a session: `const session = new Session({ chain: { id: process.env.NEXT_PUBLIC_EOS_CHAIN_ID!, url: process.env.NEXT_PUBLIC_EOS_NODE_URL! }, walletPlugin: new WalletPluginAnchor(), permissionLevel: 'alice@active' });`. Push an action: `await session.transact({ action: { account: 'eosio.token', name: 'transfer', authorization: [session.permissionLevel], data: { from: session.actor, to: 'bob', quantity: '1.0000 EOS', memo: '' } } });`. For legacy code use `eosjs`: `const api = new Api({ rpc: new JsonRpc(nodeUrl, { fetch }), signatureProvider, chainId }); await api.transact({ actions: [{ account, name, authorization, data }] }, { blocksBehind: 3, expireSeconds: 30 });`. Read tables with `await rpc.get_table_rows({ code, scope, table, json: true })`.
06Gotchas
  • EOS uses a resource model — accounts must stake EOS for CPU (compute time, ms/day), NET (bandwidth, bytes/day), and buy RAM (storage, bytes) from a Bancor-style market. Running out of CPU silently bricks the account until staked CPU regenerates (~24h) or more is delegated. RAM is even worse: it must be bought, and the price floats with demand.
  • Account names are 12-character base32 (`a-z1-5.`), not hex addresses. There's no notion of an `address`; permissions point at named accounts (`alice@active`). Hardcoding `0x…` patterns from EVM tools is a category error.
  • Permissions are hierarchical — `owner` → `active` → custom. Most txs use `active`; multi-sig is built in via threshold + weighted keys on a permission. Signing with the wrong permission yields `transaction declares authority '{actor}@active' but does not have signatures for it`.
  • `eosjs` is officially deprecated since 2023 — Wharf Kit (`@wharfkit/*`) is the maintained successor. New code targeting `eosjs` will hit unfixed bugs in newer Antelope features (action returns, KV tables, Trust EVM). Migrate Api/JsonRpc/SignatureProvider patterns to `Session`/`Contract` builders.
  • Tokens are not native — the standard `eosio.token` contract holds balances per-account in its own RAM, and any developer can deploy a clashing token. Always validate the issuer contract account in addition to the symbol (e.g. `1.0000 USDT@tethertether`).
  • The Antelope rebrand (2022) split the ecosystem: EOSIO Labs / Block.one no longer maintain the protocol — AntelopeIO (Leap node) and the EOS Network Foundation do. Old `EOSIO/*` GitHub repos are archived; current code lives at `AntelopeIO/leap` and `wharfkit/*`.
  • Block time is 500ms with ~3min finality (LIB — Last Irreversible Block); `transact` returns a tx ID after a single BP signs but the tx can still be reverted until 2/3+1 BPs confirm. Always wait for `head_block_num >= block_num + ~360` (~3 min) before treating funds as final.
07Alternatives