Sui RPC: Where Everything You Own Is an Object

July 20, 2026 · 4 min read · #sui #sui rpc #move #non-evm #chain spotlight

Most "alt-L1" chains still think in accounts and balances — Sui doesn't. On Sui, everything you own is a first-class object with its own ID and owner, and that single design decision changes the entire RPC surface. There's no eth_getBalance, no eth_call, no eth_getLogs. If you're arriving from Ethereum, the tooling is unfamiliar but the mental model is actually simpler once it clicks: you don't ask a contract what it thinks you own — you ask the chain which objects belong to your address. Here's the map.

The essentials

Sui is a non-EVM Layer 1 from Mysten Labs, mainnet since May 2023:

  • Move language (Sui Move) — resource-oriented, assets are safe by construction.
  • Object-centric model — assets are objects with owners, not entries in a contract's storage mapping.
  • Parallel execution — transactions touching disjoint objects don't contend and run concurrently.
  • Sub-second finality for owned-object transactions; a few seconds via consensus for shared objects.
  • SUI is the gas token, with 9 decimals (the base unit is MIST; 1 SUI = 1e9 MIST).
  • No fixed block time — the chain advances in checkpoints, not numbered blocks.

The RPC is JSON-RPC, but the method namespace is sui_* / suix_*, not eth_*. Use the official SDK:

import { SuiClient, getFullnodeUrl } from "@mysten/sui/client";

const client = new SuiClient({
  url: "https://rpc.swiftnodes.io/rpc/sui?key=YOUR_API_KEY",
});
await client.getLatestCheckpointSequenceNumber();   // the chain tip

The mental shift: query objects, not contract storage

On Ethereum, "what NFTs does this wallet hold?" means calling a contract's balanceOf/ownerOf or indexing Transfer events — you're reconstructing ownership from a contract's internal bookkeeping. On Sui, ownership is native to the protocol: every object records its owner, so you query it directly.

// Everything an address owns — coins, NFTs, arbitrary Move objects
const owned = await client.getOwnedObjects({ owner: address });

// A specific object by ID, with its Move type and fields
const obj = await client.getObject({
  id: objectId,
  options: { showType: true, showContent: true, showOwner: true },
});

// All coin balances for an address (SUI + any other coin type)
const balances = await client.getAllBalances({ owner: address });

That's the core reframe. getOwnedObjects is the query you'll reach for constantly — it's the "what does this address actually have?" primitive that Ethereum never gave you at the protocol level.

Owned vs shared objects: the finality fast path

Sui's speed comes from a distinction with no EVM equivalent, and it's worth understanding because it affects latency:

  • Owned objects (e.g., your coins, your NFT) have a single owner. A transaction touching only owned objects can skip full consensus and finalize in sub-second time — because nothing else can be mutating your object concurrently.
  • Shared objects (e.g., a DEX pool everyone trades against) can be touched by anyone, so those transactions go through the Mysticeti consensus path — still fast (a few seconds), but not the owned-object fast path.

For a developer this means: simple transfers and single-owner updates are extremely fast, while contended DeFi state settles through consensus. Design latency expectations around which kind of object a transaction touches.

Reading transactions and events (indexing)

There's no eth_getLogs, so the range-cap headaches don't apply — but you index differently:

// A transaction by digest, with effects, events, and object changes
const tx = await client.getTransactionBlock({
  digest,
  options: { showEffects: true, showEvents: true, showObjectChanges: true },
});

// Query events by type, module, or sender
const events = await client.queryEvents({
  query: { MoveModule: { package: pkgId, module: "my_module" } },
});

The chain tip is a checkpoint sequence number, not a block height — poll getLatestCheckpointSequenceNumber (or subscribe over WebSocket) and read checkpoints to tail the chain. objectChanges on a transaction tells you exactly which objects were created, mutated, or transferred — the object-model equivalent of parsing logs.

Standard JSON-RPC conveniences still apply — if you're making many independent reads, batch them to cut round-trips.

What's different from the other non-EVM chains

If you've built on the Cosmos chains we've covered — Celestia, Osmosis — note that Sui is not CometBFT/Tendermint either; it has its own sui_* API and consensus (Mysticeti). And unlike UTXO chains like Litecoin, Sui's objects are rich, typed, and programmable, not just unspent outputs. Sui is genuinely its own model — the closest intuition is "typed, owned objects" rather than accounts, UTXOs, or Cosmos modules.

The short version

Sui is a non-EVM Move L1 with an object-centric model: assets are first-class objects with owners, so you query ownership natively (getOwnedObjects, getObject, getAllBalances) instead of reconstructing it from contract storage. The API is sui_*/suix_* via the @mysten/sui SDK, not eth_*. SUI has 9 decimals (base unit MIST), the chain advances in checkpoints (no fixed blocks), and owned-object transactions finalize sub-second by skipping consensus while shared-object transactions settle through Mysticeti in a few seconds.

Building consumer-scale apps, on-chain games, or low-latency DeFi on Sui? A flat-rate Sui RPC endpoint gives you a full node's sui_* API alongside 75+ other chains under one key. Grab a free key and point the SDK at:

https://rpc.swiftnodes.io/rpc/sui?key=YOUR_API_KEY

Related posts

  • Taiko RPC: The L2 With No Sequencer

    Taiko is a based rollup — Ethereum's own validators propose its blocks, so there's no sequencer to trust or to go down. It's also a Type-1 zkEVM, so your Ethereum tooling works bit-identically. Chain ID 167000, ETH gas, ~12s blocks. Here's what 'based' and 'Type-1' actually change for a developer.

  • Story RPC: Querying the Chain Where IP Is a Protocol Primitive

    Story (chain ID 1514) is an EVM L1 purpose-built for intellectual property — registration, licensing, and royalties as protocol modules. It's CometBFT under the hood, so finality is instant, and it's standard eth_* on top, so viem just works. Here's the developer map, including how to read the IP graph.

  • Rootstock RPC: An EVM Chain Where Gas Is Bitcoin

    Rootstock (RSK) is an EVM sidechain merge-mined by Bitcoin — chain ID 30, RBTC gas pegged 1:1 to BTC, ~30s blocks. viem and ethers connect in one line, but two things trip up Ethereum devs: gas is denominated in Bitcoin, and addresses use an EIP-1191 checksum that standard tooling gets 'wrong'. Here's the map.

Try SwiftNodes free — multi-chain RPC across 75+ networks, flat-rate pricing, pay by card or crypto, no KYC. Get an API key in 30 seconds →