DocsThe data protocol
mark/v1
packages/core/schema/mark.schema.jsonOn this page
What tells one organisation on the map from another: its name, its token's symbol and its logo, each with where it came from (Elco, 11 Nov: 'a better module or strategy to grab the names and the token symbols or any logos of these organizations'; board #85, research/org-names-logos-2026-11-11.md, strategy 2: the chain first, then curated lists). One per map, named by the map's address. Each part says whether the thing declared it itself (self-declared), a curated list holds it (verified), or Petals worked it out (inferred).
Fields
| Field | Type or allowed values | Presence in its parent | Description |
|---|---|---|---|
petal |
"mark/v1" | Required | |
about |
string | Required | the map it marks, by its address: chain:address, or chain:population for a whole network (the map card's id) |
name |
choice | Required | the organisation's name, or null when nothing names it beyond the map's own name |
name (variant 1) |
object | Required | |
name (variant 1).value |
string | Required | |
name (variant 1).status |
"self-declared" / "verified" / "inferred" | Required | self-declared: the contract, the DAO or the account says it of itself. verified: a curated list holds this address (verified_by names which). inferred: Petals worked it out (ref says how). |
name (variant 1).source |
string | Required | where it came from, in a word: chain, poster, daohaus, metaplex, ft_metadata, trustwallet, uniswap, coingecko, cow, superchain, arbitrum, jupiter, defillama, petals |
name (variant 1).ref |
string | Required | exactly where: the call it answered (symbol() on eip155:1:0x…), or the list and its version, or the page |
name (variant 1).verified_by |
array | Optional | the curated lists that hold this address, each with its version: what makes a self-declared value verified |
name (variant 1).verified_by[] |
string | Required | |
name (variant 1).at |
string | Required | when it was read there |
name (variant 2) |
null | Required | |
symbol |
choice | Required | its token's symbol, or null |
symbol (variant 1) |
object | Required | |
symbol (variant 1).value |
string | Required | |
symbol (variant 1).status |
"self-declared" / "verified" / "inferred" | Required | self-declared: the contract, the DAO or the account says it of itself. verified: a curated list holds this address (verified_by names which). inferred: Petals worked it out (ref says how). |
symbol (variant 1).source |
string | Required | where it came from, in a word: chain, poster, daohaus, metaplex, ft_metadata, trustwallet, uniswap, coingecko, cow, superchain, arbitrum, jupiter, defillama, petals |
symbol (variant 1).ref |
string | Required | exactly where: the call it answered (symbol() on eip155:1:0x…), or the list and its version, or the page |
symbol (variant 1).verified_by |
array | Optional | the curated lists that hold this address, each with its version: what makes a self-declared value verified |
symbol (variant 1).verified_by[] |
string | Required | |
symbol (variant 1).at |
string | Required | when it was read there |
symbol (variant 2) |
null | Required | |
logo |
choice | Required | its logo, kept by Petals as a picture named by its sha256, or null |
logo (variant 1) |
object | Required | |
logo (variant 1).sha256 |
string | Required | |
logo (variant 1).media_type |
"image/png" / "image/jpeg" / "image/webp" | Required | |
logo (variant 1).status |
"self-declared" / "verified" / "inferred" | Required | self-declared: the contract, the DAO or the account says it of itself. verified: a curated list holds this address (verified_by names which). inferred: Petals worked it out (ref says how). |
logo (variant 1).source |
string | Required | where it came from, in a word: chain, poster, daohaus, metaplex, ft_metadata, trustwallet, uniswap, coingecko, cow, superchain, arbitrum, jupiter, defillama, petals |
logo (variant 1).ref |
string | Required | the address it was read from |
logo (variant 1).at |
string | Required | |
logo (variant 2) |
null | Required | |
read_at |
string | Required | when it was read |
Examples
mark.v1.json
{
"petal": "mark/v1",
"about": "eip155:1:0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",
"name": {
"value": "Uniswap",
"status": "verified",
"source": "chain",
"ref": "name() on eip155:1:0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",
"verified_by": [
"uniswap: Uniswap Labs Default v22.34.0 (https://tokens.uniswap.org)",
"cow: CoW Swap v7.12.0 (https://files.cow.fi/tokens/CowSwap.json)",
"coingecko: CoinGecko v1638.0.0 (https://tokens.coingecko.com/uniswap/all.json)",
"trustwallet: https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984/info.json",
"defillama: https://api.llama.fi/protocols (Uniswap V3)"
],
"at": "2026-11-11T13:08:51.147Z"
},
"symbol": {
"value": "UNI",
"status": "verified",
"source": "chain",
"ref": "symbol() on eip155:1:0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",
"verified_by": [
"uniswap: Uniswap Labs Default v22.34.0 (https://tokens.uniswap.org)",
"cow: CoW Swap v7.12.0 (https://files.cow.fi/tokens/CowSwap.json)",
"coingecko: CoinGecko v1638.0.0 (https://tokens.coingecko.com/uniswap/all.json)",
"trustwallet: https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984/info.json",
"defillama: https://api.llama.fi/protocols (Uniswap V3)"
],
"at": "2026-11-11T13:08:51.147Z"
},
"logo": {
"sha256": "8eaddfb8ec20f7792036f88e88ebf216d5b8eb5e09c4dbfd3c5790ce6f7dc001",
"media_type": "image/png",
"status": "verified",
"source": "cow",
"ref": "https://files.cow.fi/token-lists/images/1/0x1f9840a85d5af5bf1d1762f925bdaddc4201f984/logo.png",
"at": "2026-11-11T13:08:51.147Z"
},
"read_at": "2026-11-11T13:08:51.147Z"
}
Full schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:petal:schema:mark:v1",
"title": "Petal mark v1",
"description": "What tells one organisation on the map from another: its name, its token's symbol and its logo, each with where it came from (Elco, 11 Nov: 'a better module or strategy to grab the names and the token symbols or any logos of these organizations'; board #85, research/org-names-logos-2026-11-11.md, strategy 2: the chain first, then curated lists). One per map, named by the map's address. Each part says whether the thing declared it itself (self-declared), a curated list holds it (verified), or Petals worked it out (inferred).",
"type": "object",
"additionalProperties": false,
"required": [
"petal",
"about",
"name",
"symbol",
"logo",
"read_at"
],
"properties": {
"petal": {
"const": "mark/v1"
},
"about": {
"description": "the map it marks, by its address: chain:address, or chain:population for a whole network (the map card's id)",
"type": "string",
"minLength": 3
},
"name": {
"description": "the organisation's name, or null when nothing names it beyond the map's own name",
"oneOf": [
{
"$ref": "#/$defs/said"
},
{
"type": "null"
}
]
},
"symbol": {
"description": "its token's symbol, or null",
"oneOf": [
{
"$ref": "#/$defs/said"
},
{
"type": "null"
}
]
},
"logo": {
"description": "its logo, kept by Petals as a picture named by its sha256, or null",
"oneOf": [
{
"$ref": "#/$defs/logo"
},
{
"type": "null"
}
]
},
"read_at": {
"description": "when it was read",
"type": "string",
"format": "date-time"
}
},
"$defs": {
"status": {
"description": "self-declared: the contract, the DAO or the account says it of itself. verified: a curated list holds this address (verified_by names which). inferred: Petals worked it out (ref says how).",
"enum": [
"self-declared",
"verified",
"inferred"
]
},
"source": {
"description": "where it came from, in a word: chain, poster, daohaus, metaplex, ft_metadata, trustwallet, uniswap, coingecko, cow, superchain, arbitrum, jupiter, defillama, petals",
"type": "string",
"pattern": "^[a-z0-9_-]+$"
},
"said": {
"type": "object",
"additionalProperties": false,
"required": [
"value",
"status",
"source",
"ref",
"at"
],
"properties": {
"value": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"status": {
"$ref": "#/$defs/status"
},
"source": {
"$ref": "#/$defs/source"
},
"ref": {
"description": "exactly where: the call it answered (symbol() on eip155:1:0x…), or the list and its version, or the page",
"type": "string",
"minLength": 1
},
"verified_by": {
"description": "the curated lists that hold this address, each with its version: what makes a self-declared value verified",
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
"at": {
"description": "when it was read there",
"type": "string",
"format": "date-time"
}
}
},
"logo": {
"type": "object",
"additionalProperties": false,
"required": [
"sha256",
"media_type",
"status",
"source",
"ref",
"at"
],
"properties": {
"sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"media_type": {
"enum": [
"image/png",
"image/jpeg",
"image/webp"
]
},
"status": {
"$ref": "#/$defs/status"
},
"source": {
"$ref": "#/$defs/source"
},
"ref": {
"description": "the address it was read from",
"type": "string",
"minLength": 1
},
"at": {
"type": "string",
"format": "date-time"
}
}
}
}
}