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

# rwa_multichain.supply_changes

> Event-level issuance, redemption, clawback, and interest-distribution activity, isolated from peer-to-peer transfers.

export const PremiumDatasetAccessCard = ({href = "https://dune.com/enterprise#contact-form", note = null}) => <Card title="Gated dataset" icon="lock" href={href}>
    Querying this dataset requires an entitlement on your workspace. See <a href="/data-catalog/overview#access-tiers-public-vs-gated-datasets">access tiers</a>, or contact the Dune team to enable access.
    {note && <><br /><br />{note}</>}
  </Card>;

`rwa_multichain.supply_changes` isolates events that increase or decrease onchain supply from ordinary wallet-to-wallet movement. Grain: one row per native supply-change event.

<PremiumDatasetAccessCard />

## What it answers

* How much of an asset was minted or redeemed, and when
* Whether net flows are positive or negative over a period
* Whether onchain mint and redeem events reconcile against what an issuer or custodian reports on their own books

That last one is the use case customers ask for most: an independent onchain check on issuer-reported subscription and redemption figures.

## Table schema

| Column | Type | Description |
| - | - | - |
| `unique_key` | `VARCHAR` | Row identifier |
| `blockchain` | `VARCHAR` | Chain for the event |
| `block_time` | `TIMESTAMP` | Event timestamp |
| `block_date` | `DATE` | Event date |
| `block_month` | `DATE` | Partition column. Filter on this for large scans |
| `block_number` | `BIGINT` | Block height |
| `tx_id` | `VARCHAR` | Transaction identifier |
| `tx_index` | `BIGINT` | Transaction position within the block |
| `event_index` | `BIGINT` | Event position within the transaction |
| `sub_event_index` | `BIGINT` | Position within a chain-native event |
| `from_address` | `VARCHAR` | Source address where the chain exposes one |
| `to_address` | `VARCHAR` | Destination address where the chain exposes one |
| `token_address` | `VARCHAR` | Normalized native token identifier |
| `token_id` | `VARCHAR` | Normalized cross-chain token identifier |
| `token_symbol` | `VARCHAR` | RWA token symbol |
| `token_standard` | `VARCHAR` | Native token standard, including `tip20` for Tempo |
| `amount_raw` | `DOUBLE` | Absolute amount in native precision |
| `amount` | `DOUBLE` | Absolute decimals-adjusted amount |
| `price_usd` | `DOUBLE` | Curated USD price applied to the event |
| `amount_usd` | `DOUBLE` | Absolute curated USD value |
| `event_type` | `VARCHAR` | `issuance`, `redemption`, `clawback`, or `interest_distribution` |
| `direction` | `VARCHAR` | `increase` or `decrease` |
| `_updated_at` | `TIMESTAMP` | When this row was last refreshed |

## Use direction for net flow

`amount` is always unsigned. Apply the sign from `direction`:

```sql theme={null}
SUM(CASE WHEN direction = 'increase' THEN amount ELSE -amount END) AS net_issuance,
SUM(amount) AS gross_flow
```

`event_type` explains why the supply moved. `direction` explains whether the onchain supply increased or decreased. For example, `clawback` is a decrease and `interest_distribution` is an increase.

## Relationship to transfers

[`transfers`](/data-catalog/curated/rwa/activity/transfers) is the canonical transfer surface and marks lifecycle rows with `is_supply_event`. On Tempo, zero-address TIP-20 issuance and redemption rows are retained in `transfers` with `is_supply_event = true`. This table derives each of those events once from the canonical transfer rows and verifies them against native TIP-20 `Mint` and `Burn` events.

<Warning>
  A mint or burn can therefore be a row in both `transfers` and `supply_changes`. Use `transfers` with `NOT is_supply_event` for peer-to-peer movement, and use `supply_changes` for issuance and redemption. Do not union or sum the two surfaces.
</Warning>

## Example query

```sql theme={null}
-- Daily net issuance per asset
SELECT
  block_date,
  token_symbol,
  SUM(CASE WHEN direction = 'increase' THEN amount ELSE 0 END) AS increased,
  SUM(CASE WHEN direction = 'decrease' THEN amount ELSE 0 END) AS decreased,
  SUM(CASE WHEN direction = 'increase' THEN amount ELSE -amount END) AS net_change,
  SUM(amount_usd) AS gross_flow_usd
FROM rwa_multichain.supply_changes
WHERE block_month >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '2' MONTH)
GROUP BY 1, 2
ORDER BY 1 DESC, 6 DESC NULLS LAST
```

**Largest single subscriptions and redemptions:**

```sql theme={null}
SELECT
  block_time,
  blockchain,
  token_symbol,
  event_type,
  direction,
  from_address,
  to_address,
  amount,
  amount_usd,
  tx_id
FROM rwa_multichain.supply_changes
WHERE block_month >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1' MONTH)
ORDER BY amount_usd DESC NULLS LAST
LIMIT 25
```

**Net flow by issuer:**

```sql theme={null}
SELECT
  r.issuer_name,
  SUM(CASE WHEN s.direction = 'increase' THEN s.amount ELSE -s.amount END) AS net_units,
  SUM(CASE WHEN s.direction = 'increase' THEN s.amount_usd ELSE -s.amount_usd END) AS net_flow_usd
FROM rwa_multichain.supply_changes AS s
INNER JOIN rwa_multichain.tokens_reference_data AS r
  ON r.blockchain = s.blockchain
  AND r.token_id = s.token_id
WHERE s.block_month >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '3' MONTH)
GROUP BY 1
ORDER BY 3 DESC NULLS LAST
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.