> ## Documentation Index
> Fetch the complete documentation index at: https://tokenterminal.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> To query the Token Terminal data catalog, read https://tokenterminal.com/docs/catalog/agents-manual.md first. It is the whole catalog as one page: table naming grammar, key columns, partition and cluster rules, units, additivity, and the tables that are documented but not served yet.
> Never query a catalog table on a time bound alone. Also filter its cluster key, which you read from INFORMATION_SCHEMA.COLUMNS; an empty result means the object is a view, whose pruning contract is on its page. Compute is billed to the caller's own Google Cloud project.

# Sui

> Standardized Sui tables, built around checkpoints and object versions.

`sui` holds the standardized Sui tables, following the Sui schema documented in [the family overview](/docs/catalog/chain-verticals/move/index). Sui treats everything on the chain as an object with an owner, which sets it apart from the other Move chains. It has no blocks in the usual sense either: its `blocks` rows are checkpoints, the groups it batches transactions into. The `objects`, `transaction_objects` and `wrapped_objects` tables record every version of every object a transaction touched.

## Tables

<table>
  <thead>
    <tr>
      <th width="190">Table</th>
      <th width="90">Since</th>
      <th>Description</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><code>blocks</code></td>
      <td>2023-05</td>
      <td>One row per checkpoint.</td>
    </tr>

    <tr>
      <td><code>transactions</code></td>
      <td>2023-05</td>
      <td>One row per transaction, with its gas costs and effects attached.</td>
    </tr>

    <tr>
      <td><code>events</code></td>
      <td>2023-05</td>
      <td>One row per event a transaction emitted.</td>
    </tr>

    <tr>
      <td><code>move\_calls</code></td>
      <td>2023-05</td>
      <td>One row per Move call command a transaction executed.</td>
    </tr>

    <tr>
      <td><code>move\_packages</code></td>
      <td>2023-05</td>
      <td>One row per package version published on chain.</td>
    </tr>

    <tr>
      <td><code>objects</code></td>
      <td>2023-04</td>
      <td>One row per object version a transaction wrote, with the object contents.</td>
    </tr>

    <tr>
      <td><code>transaction\_objects</code></td>
      <td>2023-05</td>
      <td>One row per object a transaction touched, without the contents.</td>
    </tr>

    <tr>
      <td><code>wrapped\_objects</code></td>
      <td>2023-05</td>
      <td>One row per object wrapped inside another object.</td>
    </tr>
  </tbody>
</table>

## Columns

Sui treats everything as an object with an owner, and records the objects a transaction touched.

<Warning>
  Every table except `blocks` splits by day on `block_timestamp`, and `blocks` on `timestamp`. Bound that column in every query; without a bound the query reads the whole table.
</Warning>

<Tabs>
  <Tab title="blocks">
    Sui has no blocks in the usual sense. It groups its transactions into checkpoints instead, and a checkpoint is what this table holds. `blocks` contains one row per checkpoint.

    <table>
      <thead>
        <tr>
          <th width="280">Column</th>
          <th width="130">Type</th>
          <th>Description</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td><code>timestamp</code></td>
          <td>TIMESTAMP</td>
          <td>The time of the checkpoint. Partition column.</td>
        </tr>

        <tr>
          <td><code>number</code></td>
          <td>INT64</td>
          <td>The checkpoint sequence number.</td>
        </tr>

        <tr>
          <td><code>digest</code></td>
          <td>STRING</td>
          <td>The digest of the checkpoint.</td>
        </tr>

        <tr>
          <td><code>previous\_digest</code></td>
          <td>STRING</td>
          <td>The digest of the previous checkpoint.</td>
        </tr>

        <tr>
          <td><code>epoch</code></td>
          <td>STRING</td>
          <td>The epoch of the checkpoint.</td>
        </tr>

        <tr>
          <td><code>network\_total\_transactions</code></td>
          <td>INT64</td>
          <td>The cumulative network transaction count at the checkpoint.</td>
        </tr>

        <tr>
          <td><code>timestamp\_ms</code></td>
          <td>STRING</td>
          <td>The checkpoint timestamp, in milliseconds.</td>
        </tr>

        <tr>
          <td><code>sequence\_number</code></td>
          <td>STRING</td>
          <td>The checkpoint sequence number as a string.</td>
        </tr>

        <tr>
          <td><code>validator\_signature</code></td>
          <td>STRING</td>
          <td>The combined signature of the validators that approved the checkpoint.</td>
        </tr>

        <tr>
          <td><code>transaction\_count</code></td>
          <td>INT64</td>
          <td>The number of transactions in the checkpoint.</td>
        </tr>
      </tbody>
    </table>

    <Tabs>
      <Tab title="Daily checkpoints and transactions">
        **Count checkpoints and the transactions they carry per day.**

        ```sql theme={null}
        select
            date(timestamp) as day,
            count(*) as checkpoints,
            sum(transaction_count) as transactions
        from `sui.blocks`
        where timestamp >= timestamp('2026-08-20')
          and timestamp < timestamp('2026-08-21')
        group by day
        ```
      </Tab>
    </Tabs>
  </Tab>

  <Tab title="transactions">
    `transactions` contains one row per transaction, with what it cost to run and its effects, the chain's own record of everything the transaction changed, attached to the row.

    <table>
      <thead>
        <tr>
          <th width="280">Column</th>
          <th width="130">Type</th>
          <th>Description</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td><code>block\_timestamp</code></td>
          <td>TIMESTAMP</td>
          <td>The time of the containing checkpoint. Partition column.</td>
        </tr>

        <tr>
          <td><code>block\_number</code></td>
          <td>INT64</td>
          <td>The sequence number of the containing checkpoint.</td>
        </tr>

        <tr>
          <td><code>digest</code></td>
          <td>STRING</td>
          <td>The digest of the transaction, the identifier used everywhere else.</td>
        </tr>

        <tr>
          <td><code>checkpoint</code></td>
          <td>STRING</td>
          <td>The checkpoint sequence number as a string.</td>
        </tr>

        <tr>
          <td><code>timestamp\_ms</code></td>
          <td>STRING</td>
          <td>The transaction timestamp, in milliseconds.</td>
        </tr>

        <tr>
          <td><code>sender</code></td>
          <td>STRING</td>
          <td>The sending address.</td>
        </tr>

        <tr>
          <td><code>transaction\_kind</code></td>
          <td>STRING</td>
          <td>The transaction kind, such as programmable transaction.</td>
        </tr>

        <tr>
          <td><code>is\_system\_txn</code></td>
          <td>BOOL</td>
          <td>Whether the transaction is a system transaction.</td>
        </tr>

        <tr>
          <td><code>is\_sponsored\_tx</code></td>
          <td>BOOL</td>
          <td>Whether the gas was paid by a sponsor.</td>
        </tr>

        <tr>
          <td><code>status</code></td>
          <td>STRING</td>
          <td>The execution status.</td>
        </tr>

        <tr>
          <td><code>computation\_cost</code></td>
          <td>BIGNUMERIC</td>
          <td>The computation cost, in MIST.</td>
        </tr>

        <tr>
          <td><code>storage\_cost</code></td>
          <td>BIGNUMERIC</td>
          <td>The storage cost, in MIST.</td>
        </tr>

        <tr>
          <td><code>storage\_rebate</code></td>
          <td>BIGNUMERIC</td>
          <td>The storage rebate, in MIST.</td>
        </tr>

        <tr>
          <td><code>non\_refundable\_storage\_fee</code></td>
          <td>BIGNUMERIC</td>
          <td>The non-refundable part of the storage fee, in MIST.</td>
        </tr>

        <tr>
          <td><code>total\_gas\_cost</code></td>
          <td>BIGNUMERIC</td>
          <td>The total gas cost, in MIST.</td>
        </tr>

        <tr>
          <td><code>gas\_budget</code></td>
          <td>BIGNUMERIC</td>
          <td>The gas budget set by the sender.</td>
        </tr>

        <tr>
          <td><code>gas\_price</code></td>
          <td>BIGNUMERIC</td>
          <td>The gas price paid.</td>
        </tr>

        <tr>
          <td><code>gas\_owner</code></td>
          <td>STRING</td>
          <td>The address paying the gas.</td>
        </tr>

        <tr>
          <td><code>executed\_epoch</code></td>
          <td>STRING</td>
          <td>The epoch the transaction executed in.</td>
        </tr>

        <tr>
          <td><code>transaction\_json</code></td>
          <td>STRING</td>
          <td>The full transaction, as JSON text.</td>
        </tr>

        <tr>
          <td><code>effects\_json</code></td>
          <td>STRING</td>
          <td>The full execution effects, as JSON text.</td>
        </tr>

        <tr>
          <td><code>balance\_changes\_json</code></td>
          <td>STRING</td>
          <td>The balance changes, as JSON text.</td>
        </tr>
      </tbody>
    </table>

    <Tabs>
      <Tab title="Daily transactions by kind">
        **Count transactions and successes by transaction kind on one day.**

        ```sql theme={null}
        select
            transaction_kind,
            count(*) as transactions,
            countif(status = 'success') as successful
        from `sui.transactions`
        where block_timestamp >= timestamp('2026-08-20')
          and block_timestamp < timestamp('2026-08-21')
        group by transaction_kind
        order by transactions desc
        ```
      </Tab>
    </Tabs>
  </Tab>

  <Tab title="events">
    An event is a note that published code writes when something happens inside it. `events` contains one row per event a transaction produced.

    <table>
      <thead>
        <tr>
          <th width="280">Column</th>
          <th width="130">Type</th>
          <th>Description</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td><code>block\_timestamp</code></td>
          <td>TIMESTAMP</td>
          <td>The time of the containing checkpoint. Partition column.</td>
        </tr>

        <tr>
          <td><code>block\_number</code></td>
          <td>INT64</td>
          <td>The sequence number of the containing checkpoint.</td>
        </tr>

        <tr>
          <td><code>transaction\_digest</code></td>
          <td>STRING</td>
          <td>The digest of the emitting transaction.</td>
        </tr>

        <tr>
          <td><code>checkpoint</code></td>
          <td>STRING</td>
          <td>The checkpoint sequence number as a string.</td>
        </tr>

        <tr>
          <td><code>epoch</code></td>
          <td>STRING</td>
          <td>The epoch of the event.</td>
        </tr>

        <tr>
          <td><code>event\_index</code></td>
          <td>INT64</td>
          <td>The position of the event within the transaction.</td>
        </tr>

        <tr>
          <td><code>package\_id</code></td>
          <td>STRING</td>
          <td>The package that defines the event type.</td>
        </tr>

        <tr>
          <td><code>module</code></td>
          <td>STRING</td>
          <td>The module that defines the event type.</td>
        </tr>

        <tr>
          <td><code>sender</code></td>
          <td>STRING</td>
          <td>The sender of the emitting transaction.</td>
        </tr>

        <tr>
          <td><code>event\_type</code></td>
          <td>STRING</td>
          <td>The Move type of the event.</td>
        </tr>

        <tr>
          <td><code>event\_json</code></td>
          <td>STRING</td>
          <td>The event payload, as JSON text.</td>
        </tr>
      </tbody>
    </table>

    <Tabs>
      <Tab title="Events by module">
        **Rank the modules emitting the most events on one day.**

        ```sql theme={null}
        select
            module,
            count(*) as events
        from `sui.events`
        where block_timestamp >= timestamp('2026-08-20')
          and block_timestamp < timestamp('2026-08-21')
        group by module
        order by events desc
        limit 20
        ```
      </Tab>
    </Tabs>
  </Tab>
</Tabs>

## Sample queries

<Tabs>
  <Tab title="Transactions by kind">
    **Count transactions and gas costs by transaction kind on one day.**

    ```sql theme={null}
    select
        transaction_kind,
        count(*) as transactions,
        sum(total_gas_cost) as total_gas_cost_mist
    from `sui.transactions`
    where block_timestamp >= timestamp('2026-08-20')
      and block_timestamp < timestamp('2026-08-21')
    group by transaction_kind
    order by transactions desc
    ```
  </Tab>

  <Tab title="Priced tokens, daily">
    **Count the Sui tokens that carry a daily USD price, day by day.**

    ```sql theme={null}
    select
        date(timestamp) as day,
        count(distinct token_id) as priced_tokens
    from `metrics_tokens.price_daily`
    where timestamp >= timestamp('2026-08-16')
      and timestamp < timestamp('2026-08-23')
      and chain_id = 'sui'
    group by day
    order by day
    ```
  </Tab>

  <Tab title="Tokenized assets by market cap">
    **Rank the tokenized assets deployed on Sui by circulating market cap.**

    ```sql theme={null}
    select
        assets.symbol,
        assets.asset_type,
        daily.market_cap_circulating_total
    from `metrics_asset_tokens.market_cap_circulating_total_daily` as daily
    join `dimensions.asset_tokens` as deployments
        using (asset_token_id)
    join `dimensions.assets` as assets
        using (asset_id)
    where daily.timestamp >= timestamp('2026-08-22')
      and daily.timestamp < timestamp('2026-08-23')
      and deployments.chain_id = 'sui'
    order by daily.market_cap_circulating_total desc
    limit 20
    ```
  </Tab>
</Tabs>

## Notes

`objects` starts a few weeks earlier than the rest, on 2023-04-12. Use `transaction_objects` when the question is which objects a transaction touched, and `objects` when what was in them matters.

Above the raw tables sits the rest of the catalog, and Sui shows up in two parts of it: the list of tokens we know about, with the daily prices they carry, and the tokenized assets issued on the chain. No app or trading-pool table covers Sui.

[Tokens](/docs/catalog/tokens/index) covers the token list and the daily price table. [Tokenized assets](/docs/catalog/tokenized-assets/index) and [Stablecoins](/docs/catalog/stablecoins/index) cover the tokenized assets and their daily tables.
