---
title: Look up a SmartMetal token
description: Given a SmartMetal token id, read its series with tokenSeries(id) and its metadata URI with uri(id) on the token contract, fetch the metadata JSON from any IPFS gateway, and ask SeriesActivation whether it is activated with tokenStatus(id); veri.how also serves the indexed answer at /smartmetal/tokens/<id>.json.
url: https://veri.how/smartmetal/lookup
area: smartmetal
kind: howto
updated: 2026-10-15T00:00:00Z
author: Patryk Dwórznik
license: CC BY 4.0
contracts:
  - id: eip155:8453:0x4516a5d613c30a36d157d3b579813734cbb929a4
    name: Veri SmartMetal
    verified:
      date: 2026-10-13
  - id: eip155:8453:0x412e962bbae0bb97ce98e74f3424543651a21ce3
    name: SeriesActivation
    verified:
      date: 2026-10-13
sources:
  - title: Veri SmartMetal token on BaseScan
    url: https://basescan.org/token/0x4516a5d613c30a36d157d3b579813734cbb929a4
  - title: Metadata of token 7777, IPFS
    url: https://gateway.pinata.cloud/ipfs/QmSijK1oR1TAGhGeeZrrVrjEoQAyGYGB1Vph3qvSSzT3Ht/7777.json
  - title: Metadata of token 1, IPFS
    url: https://gateway.pinata.cloud/ipfs/QmU8oEWK3KNrJqHGtWgpZzjcUBukmSLutFY6ZxGGkcEdLf/1.json
  - title: QRToken contract reference, SeriesActivation
    url: https://docs.qrtoken.xyz/reference/contracts/seriesactivation/
  - title: "EIP-1155: Multi Token Standard, metadata"
    url: https://eips.ethereum.org/EIPS/eip-1155#metadata
---

# Look up a SmartMetal token

Given a SmartMetal token id, read its series with tokenSeries(id) and its metadata URI with uri(id) on the token contract, fetch the metadata JSON from any IPFS gateway, and ask SeriesActivation whether it is activated with tokenStatus(id); veri.how also serves the indexed answer at /smartmetal/tokens/<id>.json.

## Facts

**Veri SmartMetal**

| Fact | Value |
| --- | --- |
| Address | [0x4516a5D613C30A36D157d3b579813734cbb929a4](https://basescan.org/token/0x4516a5d613c30a36d157d3b579813734cbb929a4) |
| Chain | [Base (eip155:8453)](https://basescan.org) |
| Standard | [ERC-1155](https://eips.ethereum.org/EIPS/eip-1155) |
| Proxy | [ERC-1967](https://eips.ethereum.org/EIPS/eip-1967) |
| Implementation | [Series1155V1 0x945D54B21a582d5D186Ae1E449DdC2a4Ce39E26c](https://basescan.org/address/0x945d54b21a582d5d186ae1e449ddc2a4ce39e26c#code) |
| Deployed | [Block 30,569,433 · 22 May 2025](https://basescan.org/tx/0x565a24675da44a562bb5b747b81cdd9290ad0d58f86b1e635e7d888083e3c53e) |
| Source | [Verified on BaseScan](https://basescan.org/address/0x4516a5d613c30a36d157d3b579813734cbb929a4#code) |
| Transactions | [All transactions](https://basescan.org/address/0x4516a5d613c30a36d157d3b579813734cbb929a4) |
| ABI | [smartmetal.json](https://veri.how/abi/smartmetal.json) |
| Last verified | 13 Oct 2026 |

**SeriesActivation**

| Fact | Value |
| --- | --- |
| Address | [0x412E962bbAE0bB97CE98e74f3424543651a21ce3](https://basescan.org/address/0x412e962bbae0bb97ce98e74f3424543651a21ce3) |
| Chain | [Base (eip155:8453)](https://basescan.org) |
| Deployed | [Block 30,569,436 · 22 May 2025](https://basescan.org/tx/0x9c8f01b4f78f24f948e0f77ada064817637e548bbe9b8ae9ef010cbd8f1dcafa) |
| First activation | [Block 30,576,415 · 22 May 2025](https://basescan.org/tx/0x90aebc8390cc4b4ba96b0c7c4199353b577c4b4bc0b5f4e45e6d0575f406d754) |
| Owner | [0x73196fa74d6061e02648078246a1fE4D93a7AC2f](https://basescan.org/address/0x73196fa74d6061e02648078246a1fe4d93a7ac2f) |
| Source | [Verified on BaseScan](https://basescan.org/address/0x412e962bbae0bb97ce98e74f3424543651a21ce3#code) |
| Transactions | [All transactions](https://basescan.org/address/0x412e962bbae0bb97ce98e74f3424543651a21ce3) |
| ABI | [smartmetal-activation.json](https://veri.how/abi/smartmetal-activation.json) |
| Last verified | 13 Oct 2026 |

You need a token id and `curl`. Nothing to install, no API key, no wallet. The id is the serial number on the piece and in its QR code; veri.vip shows it as `#<id>`. The examples use token 7777, from the Limited Edition Azure Dragon series; replace it with yours. In calldata, the id is a 32-byte word: 7777 is `0x1e61`, left-padded with zeros to 64 hex characters.

## 1. Find its series

Call [`tokenSeries(id)`](https://docs.qrtoken.xyz/reference/contracts/series1155v1/#tokenseries), selector `0x44bdde08`, on the token contract. The answer is the series id, which [SmartMetal series](https://veri.how/smartmetal/series.md) maps to a name and a metadata folder:

```sh
# tokenSeries(7777): 0x2d3e0395…b9d6, the Azure Dragon series
curl -s https://mainnet.base.org -X POST -H 'content-type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x4516a5d613c30a36d157d3b579813734cbb929a4","data":"0x44bdde080000000000000000000000000000000000000000000000000000000000001e61"},"latest"]}'
```

With [Foundry](https://www.getfoundry.sh/introduction/installation) installed, its `cast` command runs the same call and decodes the answers:

```sh
export ETH_RPC_URL=https://mainnet.base.org

# 0x2d3e0395c9e91e036ad74f6010443210c6a13260c88e93fc7c2fecc2d577b9d6
cast call 0x4516a5d613c30a36d157d3b579813734cbb929a4 'tokenSeries(uint256)(bytes32)' 7777
```

`cast` takes the id in decimal, so there is no padding to do. Later steps show `cast` the same way.

An id that was never minted answers all zeros. Without a call, the rule in [/facts.json](https://veri.how/facts.json) gives the same answer: ids 1 to 6566 are the 2024 series, and the 16 repdigit ids from 7777 to 88888888888 are the Azure Dragon series.

## 2. Read its metadata

`uri(id)`, selector `0x0e89341c`, returns an ABI-encoded string of the form `ipfs://<series CID>/<id>.json`:

```sh
# uri(7777): "ipfs://QmSijK1oR1TAGhGeeZrrVrjEoQAyGYGB1Vph3qvSSzT3Ht/7777.json"
curl -s https://mainnet.base.org -X POST -H 'content-type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x4516a5d613c30a36d157d3b579813734cbb929a4","data":"0x0e89341c0000000000000000000000000000000000000000000000000000000000001e61"},"latest"]}'
```

```sh
export ETH_RPC_URL=https://mainnet.base.org

# "ipfs://QmSijK1oR1TAGhGeeZrrVrjEoQAyGYGB1Vph3qvSSzT3Ht/7777.json"
cast call 0x4516a5d613c30a36d157d3b579813734cbb929a4 'uri(uint256)(string)' 7777
```

Fetch the file from a public IPFS gateway by replacing `ipfs://` with the gateway's `/ipfs/` path:

```sh
curl -s https://gateway.pinata.cloud/ipfs/QmSijK1oR1TAGhGeeZrrVrjEoQAyGYGB1Vph3qvSSzT3Ht/7777.json
curl -s https://dweb.link/ipfs/QmSijK1oR1TAGhGeeZrrVrjEoQAyGYGB1Vph3qvSSzT3Ht/7777.json
```

veri.vip links the same file on its own gateway, `ipfs.veridao.io`, which answers browsers but turns crawlers away in its robots.txt.

The file for token 7777, as served on 13 Oct 2026:

```json
{
  "name": "Veri SmartMetal Limited Edition Azure Dragon #7777",
  "description": "The Azure Dragon of Ancient Chinese Mythology",
  "image": "ipfs://QmR2coRJYva1ACFU3gMzZRX2LaZztWTFcPrDKvG3FimH6S",
  "external_url": "https://veri.vip/7777",
  "attributes": [
    { "key": "metal", "trait_type": "Metal", "value": "Silver" },
    { "key": "purity", "trait_type": "Purity", "value": 0.999, "display_type": "number" },
    { "key": "weight_oz", "trait_type": "Weight (oz)", "value": 1, "display_type": "number" },
    { "key": "year", "trait_type": "Year", "value": 2026, "display_type": "date" },
    { "key": "mint", "trait_type": "Mint", "value": "Veritaseum" },
    {
      "key": "serial_number",
      "trait_type": "Serial Number",
      "value": 7777,
      "display_type": "number"
    },
    { "key": "ai_agent_access", "trait_type": "AI Agent Access", "value": true },
    { "key": "p2p_trading", "trait_type": "P2P Trading", "value": true },
    { "key": "derivatives", "trait_type": "Derivatives", "value": true }
  ],
  "properties": {
    "metal": "Silver",
    "purity": { "name": "Purity", "value": 0.999, "display_value": "99.9%" },
    "weight_oz": { "name": "Weight (oz)", "value": 1, "display_value": "1oz" },
    "year": 2026,
    "mint": "Veritaseum",
    "serial_number": { "name": "Serial Number", "value": 7777, "display_value": "7777" },
    "ai_agent_access": true,
    "p2p_trading": true,
    "derivatives": true
  }
}
```

The fields, which both series share:

| Field                                           | Meaning                                                                                                                        |
| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `name`, `description`, `image`, `external_url`  | The usual ERC-1155 metadata. `image` is an `ipfs://` CID; `external_url` is the token's page on veri.vip.                      |
| `attributes[]`                                  | One entry per trait with `key`, `trait_type`, `value` and, for numbers and dates, `display_type`. The shape marketplaces read. |
| `properties{}`                                  | The same values keyed by name, with a `display_value` string where the number needs a unit ("99.9%", "1oz").                   |
| `ai_agent_access`, `p2p_trading`, `derivatives` | Boolean flags, `true` on every token seen. veri.vip shows their labels with no value.                                          |

A 2024 token's file has the same shape with `name` `Veri SmartMetal Silver Round #<id>`, `description` "This is a Veri SmartMetal token.", `year` 2024, `display_value` "1 oz" and one shared image, `ipfs://QmYsiGSYWx6mn3TgLZfoZVRqqNjuyvTLziWscfjme3tmAK`. The `year` is a label from the metadata, not the date the token was minted; the on-chain dates are in [SmartMetal series](https://veri.how/smartmetal/series.md).

## 3. Check whether it is activated

Ask `SeriesActivation`, 0x412E962bbAE0bB97CE98e74f3424543651a21ce3. [`tokenStatus(id)`](https://docs.qrtoken.xyz/reference/contracts/seriesactivation/#tokenstatus), selector `0xb01ce31f`, returns one byte:

| Value | Meaning                                                             |
| ----- | ------------------------------------------------------------------- |
| `0`   | Registered and waiting for activation; `SeriesActivation` holds it. |
| `1`   | No registration for this id: it is not a SmartMetal token.          |
| `2`   | Activated: the token has left for its activator's wallet.           |

```sh
# tokenStatus(7777): 0x…00 on 13 Oct 2026, not yet activated
curl -s https://mainnet.base.org -X POST -H 'content-type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x412e962bbae0bb97ce98e74f3424543651a21ce3","data":"0xb01ce31f0000000000000000000000000000000000000000000000000000000000001e61"},"latest"]}'

# activatedTokens(7777): the same answer as a boolean, 0x…00
curl -s https://mainnet.base.org -X POST -H 'content-type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x412e962bbae0bb97ce98e74f3424543651a21ce3","data":"0x4e0619c00000000000000000000000000000000000000000000000000000000000001e61"},"latest"]}'

# tokenHolders(7777): the registered holder address while it waits; all zeros once activated
curl -s https://mainnet.base.org -X POST -H 'content-type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x412e962bbae0bb97ce98e74f3424543651a21ce3","data":"0x923108d90000000000000000000000000000000000000000000000000000000000001e61"},"latest"]}'
```

```sh
export ETH_RPC_URL=https://mainnet.base.org

# 0, false, then the registered holder address
cast call 0x412e962bbae0bb97ce98e74f3424543651a21ce3 'tokenStatus(uint256)(uint8)' 7777
cast call 0x412e962bbae0bb97ce98e74f3424543651a21ce3 'activatedTokens(uint256)(bool)' 7777
cast call 0x412e962bbae0bb97ce98e74f3424543651a21ce3 'tokenHolders(uint256)(address)' 7777
```

`tokenHolders(id)` is the ephemeral address whose key is in the token's QR code, not the owner of the piece. It is cleared on activation, so it says nothing about who holds an activated token. For that, read `balanceOf(address, id)` on the token contract (selector `0x00fdd58e`), or the `TransferSingle` log of the activation transaction; how the transfer happens is in [Activate a SmartMetal](https://veri.how/smartmetal/activate.md).

```sh
# balanceOf(SeriesActivation, 7777): 0x…01 while the token is unactivated
curl -s https://mainnet.base.org -X POST -H 'content-type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x4516a5d613c30a36d157d3b579813734cbb929a4","data":"0x00fdd58e000000000000000000000000412e962bbae0bb97ce98e74f3424543651a21ce30000000000000000000000000000000000000000000000000000000000001e61"},"latest"]}'
```

```sh
export ETH_RPC_URL=https://mainnet.base.org

# 1
cast call 0x4516a5d613c30a36d157d3b579813734cbb929a4 'balanceOf(address,uint256)(uint256)' 0x412e962bbae0bb97ce98e74f3424543651a21ce3 7777
```

## The indexed answer

veri.how indexes the activation and transfer logs of both contracts about every 15 minutes and serves one JSON file per token:

```sh
curl -s https://veri.how/smartmetal/tokens/7777.json
```

It returns the series, whether the token is activated and when (time, block and transaction), the current holder, the metadata CID, `asOfBlock` (the last Base block the answer includes) and `check`, a curl command that asks `SeriesActivation` directly, as in step 3. [`/smartmetal/tokens.json`](https://veri.how/smartmetal/tokens.json) lists every token the same way, and an id in no series answers 404. The [data files](https://veri.how/data.md) page lists the site's data files. The file is a convenience: when it matters, re-check on chain, since the snapshot can be up to 15 minutes and a few blocks behind.

## Without curl

- BaseScan shows a token at `https://basescan.org/token/0x4516a5d613c30a36d157d3b579813734cbb929a4?a=<id>`, with its transfers, and the contract's [Read as Proxy](https://basescan.org/address/0x4516a5d613c30a36d157d3b579813734cbb929a4#readProxyContract) view runs `uri` and `tokenSeries`. The activation contract's [Read Contract](https://basescan.org/address/0x412e962bbae0bb97ce98e74f3424543651a21ce3#readContract) view runs `tokenStatus`.
- [veri.vip](https://veri.how/smartmetal/veri-vip.md) shows one page per token at `https://veri.vip/<id>`, with each value tagged by its source.

## For agents and tools

The committed ABIs decode every call above: [/abi/series1155v1.json](https://veri.how/abi/series1155v1.json) for the token (call it at the proxy address) and [/abi/smartmetal-activation.json](https://veri.how/abi/smartmetal-activation.json) for `SeriesActivation`. [/facts.json](https://veri.how/facts.json) carries both addresses, the series with their id ranges and CIDs, and the metadata lookup rule, so a tool can go from an id to a metadata URL without a call.

## Sources

1. [Veri SmartMetal token on BaseScan](https://basescan.org/token/0x4516a5d613c30a36d157d3b579813734cbb929a4)
2. [Metadata of token 7777, IPFS](https://gateway.pinata.cloud/ipfs/QmSijK1oR1TAGhGeeZrrVrjEoQAyGYGB1Vph3qvSSzT3Ht/7777.json)
3. [Metadata of token 1, IPFS](https://gateway.pinata.cloud/ipfs/QmU8oEWK3KNrJqHGtWgpZzjcUBukmSLutFY6ZxGGkcEdLf/1.json)
4. [QRToken contract reference, SeriesActivation](https://docs.qrtoken.xyz/reference/contracts/seriesactivation/)
5. [EIP-1155: Multi Token Standard, metadata](https://eips.ethereum.org/EIPS/eip-1155#metadata)

## Related

- [Veri SmartMetal contracts on Base](https://veri.how/smartmetal/contracts.md): Veri SmartMetal is an ERC-1155 token at 0x4516a5D613C30A36D157d3b579813734cbb929a4 on Base, an ERC-1967 proxy in front of the Series1155V1 implementation, with a separate SeriesActivation contract that holds every token until its holder activates it; all three were deployed on 22 May 2025 and are built on QRToken.
- [SmartMetal series: 2024 and the Limited Edition Azure Dragon](https://veri.how/smartmetal/series.md): The Veri SmartMetal contract has two series, the 2024 series of 6,566 tokens (ids 1 to 6566, created on chain on 22 May 2025) and Veri SmartMetal Limited Edition Azure Dragon, 16 tokens created on 28 May 2026; each series is one metadata folder on IPFS, and its id is the keccak256 hash of that folder's CID.
- [Activate a SmartMetal](https://veri.how/smartmetal/activate.md): Activation is one transaction on Base, activate(timestamp, signature) on SeriesActivation, in which the key from the token's QR code signs the activator's address and a timestamp no more than an hour old, and the contract transfers the token from itself to the activator's wallet and emits TokenActivated.
- [veri.vip](https://veri.how/smartmetal/veri-vip.md): veri.vip is the website that shows one page per Veri SmartMetal token, at veri.vip/<id>, built with QRToken; every value on a page is tagged as read from the Base blockchain or from the token's metadata file on IPFS, so each can be checked without the site.
