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.
- 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`
- pnpm add @wharfkit/session @wharfkit/contract @wharfkit/wallet-plugin-anchor eosjs
| Variable | Scope | Description |
|---|---|---|
| NEXT_PUBLIC_EOS_CHAIN_ID | Client | Antelope chain ID (32-byte hex), e.g. `aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906` (EOS mainnet). |
| NEXT_PUBLIC_EOS_NODE_URL | Client | Antelope HTTP API endpoint, e.g. https://eos.greymass.com or https://api.eosauthority.com. |
| EOS_CONTRACT_ACCOUNT | Client | Account name of the deployed contract (12-character `name` like `myapp.token`). |
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 })`.
- ⚑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.