> ## 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 mint and redeem activity for RWA tokens, isolated from peer-to-peer transfers.

export const PremiumDatasetAccessCard = ({href = "https://dune.com/enterprise#contact-form"}) => <Card title="Premium dataset access" icon="info" href={href}>
    This dataset is part of a premium offering and requires additional access. Contact the Dune enterprise team to request access.
  </Card>;

`rwa_multichain.supply_changes` isolates issuance and redemption — the events that change how much of an asset exists — from ordinary wallet-to-wallet movement. Grain: one row per mint or redeem 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                                                  |
| `event_index`   | `BIGINT`    | Event position within the transaction                                   |
| `token_address` | `VARCHAR`   | Normalized native token identifier                                      |
| `token_id`      | `VARCHAR`   | Normalized cross-chain token identifier                                 |
| `token_symbol`  | `VARCHAR`   | RWA token symbol                                                        |
| `change_type`   | `VARCHAR`   | `mint` or `redeem`                                                      |
| `counterparty`  | `VARCHAR`   | Address that received the mint or initiated the redemption              |
| `amount_raw`    | `DOUBLE`    | Amount in native precision                                              |
| `amount`        | `DOUBLE`    | Decimals-adjusted amount                                                |
| `amount_signed` | `DOUBLE`    | Positive for mints, negative for redemptions, so a `SUM` gives net flow |
| `amount_usd`    | `DOUBLE`    | Amount valued at NAV, where coverage exists                             |
| `_updated_at`   | `TIMESTAMP` | When this row was last written by the pipeline                          |

## Use amount\_signed for net flow

`amount` is always positive, so summing it across both `change_type` values gives gross throughput, not net issuance. `amount_signed` carries the sign, which makes net flow a plain `SUM`:

```sql theme={null}
SUM(amount_signed) AS net_issuance   -- ✅ net
SUM(amount)        AS gross_flow     -- gross, mints + redemptions
```

Both are useful — gross flow measures issuer operational activity, net flow measures whether the product is growing — but they answer different questions.

## Relationship to transfers

[`transfers`](/data-catalog/curated/rwa/activity/transfers) covers movement between holders. This table covers supply entering and leaving existence. The two are complementary and should not be unioned: a mint is not a transfer from anyone, and adding them together double-counts the balance change.

## Example query

```sql theme={null}
-- Daily net issuance per asset
SELECT
  block_date,
  token_symbol,
  SUM(CASE WHEN change_type = 'mint' THEN amount ELSE 0 END) AS minted,
  SUM(CASE WHEN change_type = 'redeem' THEN amount ELSE 0 END) AS redeemed,
  SUM(amount_signed) 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,
  change_type,
  counterparty,
  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
  m.issuer_name,
  SUM(s.amount_signed) AS net_units,
  SUM(CASE WHEN s.change_type = 'mint' THEN s.amount_usd ELSE -s.amount_usd END) AS net_flow_usd
FROM rwa_multichain.supply_changes s
JOIN rwa_multichain.token_metadata m
  ON m.blockchain = s.blockchain
  AND m.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
```
