> ## 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.

# Aptos

> Standardized Aptos tables from the chain's 2022 mainnet launch.

`aptos` holds the standardized Aptos tables, following the Aptos-style schema documented in [the family overview](/docs/catalog/chain-verticals/move/index) exactly, with no differences.

## Tables

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

  <tbody>
    <tr>
      <td><code>blocks</code></td>
      <td>2022-10</td>
      <td>One row per block, with the first and last transaction version in it.</td>
    </tr>

    <tr>
      <td><code>transactions</code></td>
      <td>2022-10</td>
      <td>One row per transaction version, keyed on <code>version</code>.</td>
    </tr>

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

    <tr>
      <td><code>changes</code></td>
      <td>2022-10</td>
      <td>One row per state change a transaction wrote.</td>
    </tr>

    <tr>
      <td><code>resources</code></td>
      <td>2022-10</td>
      <td>One row per account resource write or delete.</td>
    </tr>

    <tr>
      <td><code>modules</code></td>
      <td>2022-10</td>
      <td>One row per Move module publish or update.</td>
    </tr>

    <tr>
      <td><code>table\_items</code></td>
      <td>2022-10</td>
      <td>One row per onchain table item write or delete.</td>
    </tr>
  </tbody>
</table>

## Columns

These schemas apply to Aptos and to Movement, which uses the same tables. A **module** is a published unit of Move code, the equivalent of a contract elsewhere. A **resource** is a piece of data stored under an account, such as its balance of a particular coin; the changes tables record what a transaction wrote to those.

<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">
    A block is a batch of transactions added to the chain. Aptos also numbers every transaction it has ever run, and that number is the transaction's version, so each block covers a range of versions. `blocks` contains one row per block, carrying the first and last version in it.

    <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 the block was produced. Partition column.</td>
        </tr>

        <tr>
          <td><code>block\_height</code></td>
          <td>INT64</td>
          <td>The block height.</td>
        </tr>

        <tr>
          <td><code>first\_version</code></td>
          <td>STRING</td>
          <td>The first transaction version in the block.</td>
        </tr>

        <tr>
          <td><code>last\_version</code></td>
          <td>STRING</td>
          <td>The last transaction version in the block.</td>
        </tr>

        <tr>
          <td><code>block\_hash</code></td>
          <td>STRING</td>
          <td>The hash of the block.</td>
        </tr>
      </tbody>
    </table>

    <Tabs>
      <Tab title="Daily blocks and version range">
        **Count blocks per day and the version range they cover.**

        ```sql theme={null}
        select
            date(timestamp) as day,
            count(*) as blocks,
            min(first_version) as first_version,
            max(last_version) as last_version
        from `aptos.blocks`
        where timestamp >= timestamp('2026-08-20')
          and timestamp < timestamp('2026-08-21')
        group by day
        ```
      </Tab>
    </Tabs>
  </Tab>

  <Tab title="transactions">
    Not every transaction comes from a user: the chain writes its own bookkeeping entries into the same numbered sequence. `transactions` contains one row per transaction, identified by its version number, whichever kind it is: a user transaction, a block metadata entry, or a state checkpoint. The `type` column says which.

    <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 block. Partition column.</td>
        </tr>

        <tr>
          <td><code>block\_height</code></td>
          <td>INT64</td>
          <td>The height of the containing block.</td>
        </tr>

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

        <tr>
          <td><code>timestamp</code></td>
          <td>STRING</td>
          <td>The onchain transaction timestamp, in microseconds.</td>
        </tr>

        <tr>
          <td><code>accumulator\_root\_hash</code></td>
          <td>STRING</td>
          <td>The accumulator root hash after the transaction.</td>
        </tr>

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

        <tr>
          <td><code>event\_root\_hash</code></td>
          <td>STRING</td>
          <td>The root hash of the transaction's events.</td>
        </tr>

        <tr>
          <td><code>expiration\_timestamp\_secs</code></td>
          <td>STRING</td>
          <td>The expiration time set by the sender, in seconds.</td>
        </tr>

        <tr>
          <td><code>failed\_proposer\_indices</code></td>
          <td>ARRAY\<INT64></td>
          <td>The indices of proposers that failed in the round.</td>
        </tr>

        <tr>
          <td><code>gas\_unit\_price</code></td>
          <td>STRING</td>
          <td>The gas unit price, in octas.</td>
        </tr>

        <tr>
          <td><code>gas\_used</code></td>
          <td>STRING</td>
          <td>The gas units consumed.</td>
        </tr>

        <tr>
          <td><code>id</code></td>
          <td>STRING</td>
          <td>The identifier of block metadata transactions.</td>
        </tr>

        <tr>
          <td><code>max\_gas\_amount</code></td>
          <td>STRING</td>
          <td>The gas limit set by the sender.</td>
        </tr>

        <tr>
          <td><code>previous\_block\_votes\_bitvec</code></td>
          <td>ARRAY\<INT64></td>
          <td>The vote bitvector for the previous block.</td>
        </tr>

        <tr>
          <td><code>proposer</code></td>
          <td>STRING</td>
          <td>The proposer of the block, for block metadata transactions.</td>
        </tr>

        <tr>
          <td><code>round</code></td>
          <td>STRING</td>
          <td>The consensus round.</td>
        </tr>

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

        <tr>
          <td><code>sequence\_number</code></td>
          <td>STRING</td>
          <td>The sender's sequence number.</td>
        </tr>

        <tr>
          <td><code>state\_change\_hash</code></td>
          <td>STRING</td>
          <td>The hash of the transaction's state changes.</td>
        </tr>

        <tr>
          <td><code>state\_checkpoint\_hash</code></td>
          <td>STRING</td>
          <td>The state checkpoint hash, when present.</td>
        </tr>

        <tr>
          <td><code>success</code></td>
          <td>BOOL</td>
          <td>Whether the transaction succeeded.</td>
        </tr>

        <tr>
          <td><code>type</code></td>
          <td>STRING</td>
          <td>The transaction type, such as user or block metadata.</td>
        </tr>

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

        <tr>
          <td><code>vm\_status</code></td>
          <td>STRING</td>
          <td>The VM execution status.</td>
        </tr>

        <tr>
          <td><code>signature\_type</code></td>
          <td>STRING</td>
          <td>The signature scheme used.</td>
        </tr>

        <tr>
          <td><code>signature\_public\_key</code></td>
          <td>STRING</td>
          <td>The signing public key.</td>
        </tr>

        <tr>
          <td><code>signature</code></td>
          <td>STRING</td>
          <td>The transaction signature.</td>
        </tr>

        <tr>
          <td><code>payload</code></td>
          <td>JSON</td>
          <td>The full transaction payload.</td>
        </tr>

        <tr>
          <td><code>payload\_function</code></td>
          <td>STRING</td>
          <td>The entry function called, as address::module::function.</td>
        </tr>

        <tr>
          <td><code>payload\_type</code></td>
          <td>STRING</td>
          <td>The payload type.</td>
        </tr>

        <tr>
          <td><code>payload\_type\_arguments</code></td>
          <td>JSON</td>
          <td>The generic type arguments of the call.</td>
        </tr>

        <tr>
          <td><code>payload\_arguments</code></td>
          <td>JSON</td>
          <td>The arguments of the call.</td>
        </tr>
      </tbody>
    </table>

    <Tabs>
      <Tab title="Daily success rate">
        **Count daily Aptos transactions and their success rate over one week.**

        ```sql theme={null}
        select
            timestamp_trunc(block_timestamp, day) as day,
            count(*) as transactions,
            countif(success) as successful
        from `aptos.transactions`
        where block_timestamp >= timestamp('2026-08-16')
          and block_timestamp < timestamp('2026-08-23')
        group by day
        order by day
        ```
      </Tab>
    </Tabs>
  </Tab>

  <Tab title="events">
    An event is a note that published code writes when something happens inside it: a transfer, a swap, a deposit. `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 block. Partition column.</td>
        </tr>

        <tr>
          <td><code>block\_height</code></td>
          <td>INT64</td>
          <td>The height of the containing block.</td>
        </tr>

        <tr>
          <td><code>sequence\_number</code></td>
          <td>STRING</td>
          <td>The sequence number of the event in its stream.</td>
        </tr>

        <tr>
          <td><code>transaction\_hash</code></td>
          <td>STRING</td>
          <td>The hash 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\_index</code></td>
          <td>INT64</td>
          <td>The position of the event within the transaction.</td>
        </tr>

        <tr>
          <td><code>event\_guid\_account\_address</code></td>
          <td>STRING</td>
          <td>The account address of the event stream.</td>
        </tr>

        <tr>
          <td><code>event\_guid\_creation\_number</code></td>
          <td>INT64</td>
          <td>The creation number of the event stream.</td>
        </tr>

        <tr>
          <td><code>data</code></td>
          <td>JSON</td>
          <td>The event payload.</td>
        </tr>
      </tbody>
    </table>

    <Tabs>
      <Tab title="Events by type">
        **Count events by type on one day.**

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

  <Tab title="changes">
    Everything a transaction actually altered on the chain is recorded here. `changes` contains one row per alteration, of any kind. The tables that follow are slices of this one.

    <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 block. Partition column.</td>
        </tr>

        <tr>
          <td><code>block\_height</code></td>
          <td>INT64</td>
          <td>The height of the containing block.</td>
        </tr>

        <tr>
          <td><code>transaction\_hash</code></td>
          <td>STRING</td>
          <td>The hash of the writing transaction.</td>
        </tr>

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

        <tr>
          <td><code>changes\_type</code></td>
          <td>STRING</td>
          <td>The change type, such as write resource or delete resource.</td>
        </tr>

        <tr>
          <td><code>changes\_address</code></td>
          <td>STRING</td>
          <td>The account address the change applies to.</td>
        </tr>

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

        <tr>
          <td><code>data</code></td>
          <td>JSON</td>
          <td>The changed data.</td>
        </tr>

        <tr>
          <td><code>changes</code></td>
          <td>JSON</td>
          <td>The raw change record.</td>
        </tr>
      </tbody>
    </table>

    <Tabs>
      <Tab title="Changes by type">
        **Count changes by type on one day.**

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

  <Tab title="resources">
    `resources` is the part of `changes` that touched data stored under an account, a coin balance for instance. One row per write or delete.

    <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 block. Partition column.</td>
        </tr>

        <tr>
          <td><code>block\_height</code></td>
          <td>INT64</td>
          <td>The height of the containing block.</td>
        </tr>

        <tr>
          <td><code>transaction\_hash</code></td>
          <td>STRING</td>
          <td>The hash of the writing transaction.</td>
        </tr>

        <tr>
          <td><code>changes\_type</code></td>
          <td>STRING</td>
          <td>The change type.</td>
        </tr>

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

        <tr>
          <td><code>changes\_address</code></td>
          <td>STRING</td>
          <td>The account address the change applies to.</td>
        </tr>

        <tr>
          <td><code>resource\_address</code></td>
          <td>STRING</td>
          <td>The address of the resource.</td>
        </tr>

        <tr>
          <td><code>data</code></td>
          <td>JSON</td>
          <td>The resource contents after the change.</td>
        </tr>

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

        <tr>
          <td><code>state\_key\_hash</code></td>
          <td>STRING</td>
          <td>The state key hash of the resource slot.</td>
        </tr>
      </tbody>
    </table>

    <Tabs>
      <Tab title="Most-written resource types">
        **Rank resource types by writes on one day.**

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

  <Tab title="modules">
    `modules` contains one row per time Move code was published or upgraded, along with the functions and data types that code exposes.

    <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 block. Partition column.</td>
        </tr>

        <tr>
          <td><code>block\_height</code></td>
          <td>INT64</td>
          <td>The height of the containing block.</td>
        </tr>

        <tr>
          <td><code>transaction\_hash</code></td>
          <td>STRING</td>
          <td>The hash of the publishing transaction.</td>
        </tr>

        <tr>
          <td><code>changes\_type</code></td>
          <td>STRING</td>
          <td>The change type.</td>
        </tr>

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

        <tr>
          <td><code>changes\_address</code></td>
          <td>STRING</td>
          <td>The account address the change applies to.</td>
        </tr>

        <tr>
          <td><code>module\_address</code></td>
          <td>STRING</td>
          <td>The address the module lives under.</td>
        </tr>

        <tr>
          <td><code>module\_name</code></td>
          <td>STRING</td>
          <td>The name of the module.</td>
        </tr>

        <tr>
          <td><code>exposed\_functions</code></td>
          <td>JSON</td>
          <td>The public functions of the module.</td>
        </tr>

        <tr>
          <td><code>friends</code></td>
          <td>JSON</td>
          <td>The friend modules.</td>
        </tr>

        <tr>
          <td><code>structs</code></td>
          <td>JSON</td>
          <td>The struct definitions of the module.</td>
        </tr>

        <tr>
          <td><code>bytecode</code></td>
          <td>STRING</td>
          <td>The compiled module bytecode.</td>
        </tr>

        <tr>
          <td><code>state\_key\_hash</code></td>
          <td>STRING</td>
          <td>The state key hash of the module slot.</td>
        </tr>
      </tbody>
    </table>

    <Tabs>
      <Tab title="Daily module publishes">
        **Count module publishes and upgrades per day over one week.**

        ```sql theme={null}
        select
            date(block_timestamp) as day,
            count(*) as modules_published
        from `aptos.modules`
        where block_timestamp >= timestamp('2026-08-16')
          and block_timestamp < timestamp('2026-08-23')
        group by day
        order by day
        ```
      </Tab>
    </Tabs>
  </Tab>

  <Tab title="table_items">
    Move code can keep its own key-value store on the chain, and each entry in one is a table item. `table_items` contains one row per entry written or deleted.

    <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 block. Partition column.</td>
        </tr>

        <tr>
          <td><code>block\_height</code></td>
          <td>INT64</td>
          <td>The height of the containing block.</td>
        </tr>

        <tr>
          <td><code>transaction\_hash</code></td>
          <td>STRING</td>
          <td>The hash of the writing transaction.</td>
        </tr>

        <tr>
          <td><code>changes\_type</code></td>
          <td>STRING</td>
          <td>The change type.</td>
        </tr>

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

        <tr>
          <td><code>data</code></td>
          <td>JSON</td>
          <td>The raw item record.</td>
        </tr>

        <tr>
          <td><code>handle</code></td>
          <td>STRING</td>
          <td>The handle of the table.</td>
        </tr>

        <tr>
          <td><code>key</code></td>
          <td>STRING</td>
          <td>The key of the item.</td>
        </tr>

        <tr>
          <td><code>value</code></td>
          <td>STRING</td>
          <td>The value of the item after the change.</td>
        </tr>

        <tr>
          <td><code>state\_key\_hash</code></td>
          <td>STRING</td>
          <td>The state key hash of the item slot.</td>
        </tr>
      </tbody>
    </table>

    <Tabs>
      <Tab title="Daily table item writes">
        **Count table item writes and deletes per day over one week.**

        ```sql theme={null}
        select
            date(block_timestamp) as day,
            count(*) as items
        from `aptos.table_items`
        where block_timestamp >= timestamp('2026-08-16')
          and block_timestamp < timestamp('2026-08-23')
        group by day
        order by day
        ```
      </Tab>
    </Tabs>
  </Tab>

  <Tab title="move_calls">
    A Sui transaction is a list of commands, and a Move call is the command that runs a function in published code. `move_calls` contains one row per such call, naming the code and function it ran.

    <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 calling 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 call.</td>
        </tr>

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

        <tr>
          <td><code>package</code></td>
          <td>STRING</td>
          <td>The called package.</td>
        </tr>

        <tr>
          <td><code>module</code></td>
          <td>STRING</td>
          <td>The called module.</td>
        </tr>

        <tr>
          <td><code>function</code></td>
          <td>STRING</td>
          <td>The called function.</td>
        </tr>
      </tbody>
    </table>

    <Tabs>
      <Tab title="Most-called functions">
        **Rank the most-called package functions on one day.**

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

  <Tab title="move_packages">
    A package is a published bundle of Move code, and upgrading one publishes a new version of it rather than replacing what was there. `move_packages` contains one row per version.

    <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 publishing 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 publish.</td>
        </tr>

        <tr>
          <td><code>package\_id</code></td>
          <td>STRING</td>
          <td>The identifier of the package version.</td>
        </tr>

        <tr>
          <td><code>package\_version</code></td>
          <td>INT64</td>
          <td>The version number of the package.</td>
        </tr>

        <tr>
          <td><code>original\_package\_id</code></td>
          <td>STRING</td>
          <td>The identifier of the first version of the package.</td>
        </tr>
      </tbody>
    </table>

    <Tabs>
      <Tab title="Daily package publishes">
        **Count package versions published per day over one week.**

        ```sql theme={null}
        select
            date(block_timestamp) as day,
            count(*) as packages_published
        from `sui.move_packages`
        where block_timestamp >= timestamp('2026-08-16')
          and block_timestamp < timestamp('2026-08-23')
        group by day
        order by day
        ```
      </Tab>
    </Tabs>
  </Tab>

  <Tab title="objects">
    On Sui, everything a user holds is an object with an owner, and changing one produces a new version of it rather than editing it in place. `objects` contains one row per object version a transaction wrote, with the object's contents on 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>transaction\_digest</code></td>
          <td>STRING</td>
          <td>The digest of the writing 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>object\_id</code></td>
          <td>STRING</td>
          <td>The identifier of the object.</td>
        </tr>

        <tr>
          <td><code>version</code></td>
          <td>INT64</td>
          <td>The version of the object after the write.</td>
        </tr>

        <tr>
          <td><code>digest\_hash</code></td>
          <td>STRING</td>
          <td>The digest of the object version.</td>
        </tr>

        <tr>
          <td><code>object\_status</code></td>
          <td>STRING</td>
          <td>The status of the write, such as created or mutated.</td>
        </tr>

        <tr>
          <td><code>owner\_type</code></td>
          <td>STRING</td>
          <td>The ownership kind, such as address, object or shared.</td>
        </tr>

        <tr>
          <td><code>owner\_address</code></td>
          <td>STRING</td>
          <td>The owning address, when address-owned.</td>
        </tr>

        <tr>
          <td><code>initial\_shared\_version</code></td>
          <td>INT64</td>
          <td>The version at which the object became shared.</td>
        </tr>

        <tr>
          <td><code>storage\_rebate</code></td>
          <td>INT64</td>
          <td>The storage rebate held by the object.</td>
        </tr>

        <tr>
          <td><code>has\_public\_transfer</code></td>
          <td>BOOL</td>
          <td>Whether the object can be transferred publicly.</td>
        </tr>

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

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

    <Tabs>
      <Tab title="Object writes by status">
        **Count object writes by status on one day.**

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

  <Tab title="transaction_objects">
    `transaction_objects` contains one row per object a transaction touched, without the contents. Use it when the question is which objects were involved rather than what was in them.

    <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 touching 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>object\_id</code></td>
          <td>STRING</td>
          <td>The identifier of the object.</td>
        </tr>

        <tr>
          <td><code>version</code></td>
          <td>INT64</td>
          <td>The version of the object after the transaction.</td>
        </tr>

        <tr>
          <td><code>object\_status</code></td>
          <td>STRING</td>
          <td>The status of the touch, such as created, mutated or deleted.</td>
        </tr>
      </tbody>
    </table>

    <Tabs>
      <Tab title="Touched objects by status">
        **Count objects touched by status on one day.**

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

  <Tab title="wrapped_objects">
    An object can be placed inside another object, which is called wrapping: a card held in a deck, say. The inner one then belongs to the outer one instead of to an address. `wrapped_objects` contains one row per object a transaction wrapped.

    <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 wrapping 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>object\_id</code></td>
          <td>STRING</td>
          <td>The identifier of the wrapped object.</td>
        </tr>

        <tr>
          <td><code>root\_object\_id</code></td>
          <td>STRING</td>
          <td>The identifier of the object it is wrapped inside.</td>
        </tr>

        <tr>
          <td><code>root\_object\_version</code></td>
          <td>INT64</td>
          <td>The version of the enclosing object.</td>
        </tr>
      </tbody>
    </table>

    <Tabs>
      <Tab title="Daily wraps">
        **Count objects wrapped per day over one week.**

        ```sql theme={null}
        select
            date(block_timestamp) as day,
            count(*) as wrapped
        from `sui.wrapped_objects`
        where block_timestamp >= timestamp('2026-08-16')
          and block_timestamp < timestamp('2026-08-23')
        group by day
        order by day
        ```
      </Tab>
    </Tabs>
  </Tab>
</Tabs>

## Sample queries

<Tabs>
  <Tab title="Entry functions by usage">
    **Rank entry functions by user transactions on one day.**

    ```sql theme={null}
    select
        payload_function,
        count(*) as transactions
    from `aptos.transactions`
    where block_timestamp >= timestamp('2026-08-20')
      and block_timestamp < timestamp('2026-08-21')
      and type = 'user_transaction'
    group by payload_function
    order by transactions desc
    limit 20
    ```
  </Tab>

  <Tab title="Tokenized assets by market cap">
    **Rank the tokenized assets deployed on Aptos 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 = 'aptos'
    order by daily.market_cap_circulating_total desc
    limit 20
    ```
  </Tab>

  <Tab title="Priced tokens">
    **List the Aptos tokens that carried a daily price over one week.**

    ```sql theme={null}
    with priced as (
        select
            token_id,
            avg(price) as avg_price,
            count(*) as price_days
        from `metrics_tokens.price_daily`
        where timestamp >= timestamp('2026-08-16')
          and timestamp < timestamp('2026-08-23')
          and chain_id = 'aptos'
        group by token_id
    )

    select
        tokens.symbol,
        tokens.name,
        priced.avg_price,
        priced.price_days
    from priced
    join `dimensions.tokens` as tokens using (token_id)
    order by priced.avg_price desc
    limit 20
    ```
  </Tab>
</Tabs>

## Notes

`resources`, `modules` and `table_items` are slices of `changes`: the writes that touched data stored under an account, the ones that published or upgraded code, and the ones that wrote to a contract's own key-value store.

Above the raw tables sits the rest of the catalog, and Aptos 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 Aptos.

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