changedInput schema / properties / condition / anyOf
Previous value: -[
- {
- "additionalProperties": false,
- "description": "A token watch: a screen of one token. It names one `token` and fires once when that token comes to meet all of its `where` clauses, from the changes of the index that name it.",
- "properties": {
- "kind": {
- "const": "token",
- "description": "Fires when the named token comes to meet every clause.",
- "type": "string"
- },
- "token": {
- "description": "The token's address. A lookalikes clause needs a verified token whose ticker group has a verification at trust 3 or better (circle_docs, project_site, manual or launchpad_official); any other token is refused.",
- "pattern": "^0x[0-9a-fA-F]{40}$",
- "type": "string"
- },
- "where": {
- "description": "One to eight clauses, all of which must hold (AND only), the same clauses a screen takes.",
- "items": {
- "anyOf": [
- {
- "additionalProperties": false,
- "description": "A clause on the token's 24 hour volume in USD.",
- "properties": {
- "field": {
- "const": "volume_24h",
- "description": "The token's 24 hour volume in USD. Follows the index stream: a token with no stats row reads 0.",
- "type": "string"
- },
- "op": {
- "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
- "enum": [
- "gt",
- "gte",
- "lt",
- "lte"
- ],
- "type": "string"
- },
- "value": {
- "description": "The line, in the figure's own unit: 24 hour volume in USD.",
- "minimum": 0,
- "type": "number"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "volume_24h",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause on the token's number of distinct traders in the last 24 hours.",
- "properties": {
- "field": {
- "const": "traders_24h",
- "description": "The token's number of distinct traders in the last 24 hours. Follows the index stream: a token with no stats row reads 0.",
- "type": "string"
- },
- "op": {
- "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
- "enum": [
- "gt",
- "gte",
- "lt",
- "lte"
- ],
- "type": "string"
- },
- "value": {
- "description": "The line, in the figure's own unit: number of distinct traders in the last 24 hours.",
- "maximum": 9007199254740991,
- "minimum": 0,
- "type": "integer"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "traders_24h",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause on the token's number of trades in the last 24 hours.",
- "properties": {
- "field": {
- "const": "trades_24h",
- "description": "The token's number of trades in the last 24 hours. Follows the index stream: a token with no stats row reads 0.",
- "type": "string"
- },
- "op": {
- "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
- "enum": [
- "gt",
- "gte",
- "lt",
- "lte"
- ],
- "type": "string"
- },
- "value": {
- "description": "The line, in the figure's own unit: number of trades in the last 24 hours.",
- "maximum": 9007199254740991,
- "minimum": 0,
- "type": "integer"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "trades_24h",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause on the token's number of sells in the last 24 hours.",
- "properties": {
- "field": {
- "const": "sells_24h",
- "description": "The token's number of sells in the last 24 hours. Follows the index stream: a token with no stats row reads 0.",
- "type": "string"
- },
- "op": {
- "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
- "enum": [
- "gt",
- "gte",
- "lt",
- "lte"
- ],
- "type": "string"
- },
- "value": {
- "description": "The line, in the figure's own unit: number of sells in the last 24 hours.",
- "maximum": 9007199254740991,
- "minimum": 0,
- "type": "integer"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "sells_24h",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause on the token's number of distinct sellers in the last 24 hours.",
- "properties": {
- "field": {
- "const": "sellers_24h",
- "description": "The token's number of distinct sellers in the last 24 hours. Follows the index stream: a token with no stats row reads 0.",
- "type": "string"
- },
- "op": {
- "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
- "enum": [
- "gt",
- "gte",
- "lt",
- "lte"
- ],
- "type": "string"
- },
- "value": {
- "description": "The line, in the figure's own unit: number of distinct sellers in the last 24 hours.",
- "maximum": 9007199254740991,
- "minimum": 0,
- "type": "integer"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "sellers_24h",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause on the token's share of the 24 hour volume held by the top trader, from 0 to 1.",
- "properties": {
- "field": {
- "const": "top_trader_share_24h",
- "description": "The token's share of the 24 hour volume held by the top trader, from 0 to 1. Follows the index stream. A token with no trades in the window has no share, and a clause on an unknown share never holds.",
- "type": "string"
- },
- "op": {
- "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
- "enum": [
- "gt",
- "gte",
- "lt",
- "lte"
- ],
- "type": "string"
- },
- "value": {
- "description": "The line, in the figure's own unit: share of the 24 hour volume held by the top trader, from 0 to 1.",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "top_trader_share_24h",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause on the token's USD depth within 2% of the price.",
- "properties": {
- "field": {
- "const": "depth_2pct_usd",
- "description": "The token's USD depth within 2% of the price. Measured before a watch sees a new token that has a USDC pool, and again when a search or quote measures the token. A token with no USDC pool, or whose check did not answer within its window, reads null, which never matches. A lower-bound reading never satisfies lt or lte.",
- "type": "string"
- },
- "op": {
- "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
- "enum": [
- "gt",
- "gte",
- "lt",
- "lte"
- ],
- "type": "string"
- },
- "value": {
- "description": "The line, in the figure's own unit: USD depth within 2% of the price.",
- "minimum": 0,
- "type": "number"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "depth_2pct_usd",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause on the token's age of the token in hours.",
- "properties": {
- "field": {
- "const": "age_hours",
- "description": "The token's age of the token in hours. Read only when a change names the token: passing time alone never re-evaluates a screen, so a token that crosses an age line while quiet is seen at its next change. Age counts from the token's creation time, Etherscan's when a launchpad did not create it. Only when no creation record arrived does it count from the earlier of its earliest pool creation, counted only once every pool it has has a creation time, and the first trade the index saw when that trade first brought the token into the index; a token with neither known has no age, which never matches.",
- "type": "string"
- },
- "op": {
- "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
- "enum": [
- "gt",
- "gte",
- "lt",
- "lte"
- ],
- "type": "string"
- },
- "value": {
- "description": "The line, in the figure's own unit: age of the token in hours.",
- "minimum": 0,
- "type": "number"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "age_hours",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the token's primary-route sell-check verdict is one value.",
- "properties": {
- "field": {
- "const": "safety_verdict",
- "description": "The token's primary-route sell-check verdict. Measured before a watch sees a new token that has a USDC pool, and again when a search or quote measures the token. A token with no USDC pool, or whose check did not answer within its window, reads null, which never matches. Launchpad meme coins usually carry a fixed buy and sell tax, so a sellable one is most often taxed, not ok: use in [ok, taxed] to keep them, and eq ok only to leave every taxed token out.",
- "type": "string"
- },
- "op": {
- "const": "eq",
- "description": "eq: the field is exactly the value.",
- "type": "string"
- },
- "value": {
- "description": "The value the field must be. One of ok, taxed, illiquid, size_limited, insufficient_liquidity, inconclusive, cannot_sell, buy_reverts.",
- "enum": [
- "ok",
- "taxed",
- "illiquid",
- "size_limited",
- "insufficient_liquidity",
- "inconclusive",
- "cannot_sell",
- "buy_reverts"
- ],
- "type": "string"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "safety_verdict eq",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the token's primary-route sell-check verdict is one of several values.",
- "properties": {
- "field": {
- "const": "safety_verdict",
- "description": "The token's primary-route sell-check verdict. Measured before a watch sees a new token that has a USDC pool, and again when a search or quote measures the token. A token with no USDC pool, or whose check did not answer within its window, reads null, which never matches. Launchpad meme coins usually carry a fixed buy and sell tax, so a sellable one is most often taxed, not ok: use in [ok, taxed] to keep them, and eq ok only to leave every taxed token out.",
- "type": "string"
- },
- "op": {
- "const": "in",
- "description": "in: the field is one of the values.",
- "type": "string"
- },
- "value": {
- "description": "The values the field may be. One or more of ok, taxed, illiquid, size_limited, insufficient_liquidity, inconclusive, cannot_sell, buy_reverts.",
- "items": {
- "enum": [
- "ok",
- "taxed",
- "illiquid",
- "size_limited",
- "insufficient_liquidity",
- "inconclusive",
- "cannot_sell",
- "buy_reverts"
- ],
- "type": "string"
- },
- "maxItems": 8,
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "safety_verdict in",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the token's launch state is one value.",
- "properties": {
- "field": {
- "const": "launch_state",
- "description": "The token's launch state. Follows the index stream.",
- "type": "string"
- },
- "op": {
- "const": "eq",
- "description": "eq: the field is exactly the value.",
- "type": "string"
- },
- "value": {
- "description": "The value the field must be. One of curve, graduated, pool_only, unsupported.",
- "enum": [
- "curve",
- "graduated",
- "pool_only",
- "unsupported"
- ],
- "type": "string"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "launch_state eq",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the token's launch state is one of several values.",
- "properties": {
- "field": {
- "const": "launch_state",
- "description": "The token's launch state. Follows the index stream.",
- "type": "string"
- },
- "op": {
- "const": "in",
- "description": "in: the field is one of the values.",
- "type": "string"
- },
- "value": {
- "description": "The values the field may be. One or more of curve, graduated, pool_only, unsupported.",
- "items": {
- "enum": [
- "curve",
- "graduated",
- "pool_only",
- "unsupported"
- ],
- "type": "string"
- },
- "maxItems": 4,
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "launch_state in",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the token's launchpad is one value.",
- "properties": {
- "field": {
- "const": "launchpad",
- "description": "The token's launchpad. Follows the index stream. A registry id, direct (deployed without a launchpad, either because Etherscan's creation record shows an externally owned account deployed the token itself, or because arcgate recorded it so before attribution, as it did USDC and the other pinned assets) or unknown (a contract no registry entry names deployed it, or no creation record arrived in time). A token arcgate has not attributed yet reads null, which never matches: a new token reaches watches once it is attributed, and an older token attributed later by a correction is evaluated at its next trade or verdict change.",
- "type": "string"
- },
- "op": {
- "const": "eq",
- "description": "eq: the field is exactly the value.",
- "type": "string"
- },
- "value": {
- "description": "The value the field must be. One of argus, tolly, minara, o1, foci, feel-cash, doppler, wonk-fun, bulllaunch, ubi-fun, bonker, long-supply, lift, aka-fun, memespad, archemist, ramppad, arklis, bozo-fun, based-bid, ripples, basestonk, peach, spawn, radardex, dyor-fun, load-fun, ark-launch, pools-fun, moonarc, pools-xyz, bigshort, virtuals, ctrl-finance, tsukipad, arcstockpad, arcade, packed, coocoo, enso-pool, arcfun, frenlaunch, lunya, openlaunch, arch, arcpad, flipt, faze, noxa-fun, mercurifi, arclaunch, bullcheese, tokenlaunchpad-0xa790, curvehook-0x9270, solonpad, parabolarc, synthra-launchpad, bot-0x43d8, direct, unknown.",
- "enum": [
- "argus",
- "tolly",
- "minara",
- "o1",
- "foci",
- "feel-cash",
- "doppler",
- "wonk-fun",
- "bulllaunch",
- "ubi-fun",
- "bonker",
- "long-supply",
- "lift",
- "aka-fun",
- "memespad",
- "archemist",
- "ramppad",
- "arklis",
- "bozo-fun",
- "based-bid",
- "ripples",
- "basestonk",
- "peach",
- "spawn",
- "radardex",
- "dyor-fun",
- "load-fun",
- "ark-launch",
- "pools-fun",
- "moonarc",
- "pools-xyz",
- "bigshort",
- "virtuals",
- "ctrl-finance",
- "tsukipad",
- "arcstockpad",
- "arcade",
- "packed",
- "coocoo",
- "enso-pool",
- "arcfun",
- "frenlaunch",
- "lunya",
- "openlaunch",
- "arch",
- "arcpad",
- "flipt",
- "faze",
- "noxa-fun",
- "mercurifi",
- "arclaunch",
- "bullcheese",
- "tokenlaunchpad-0xa790",
- "curvehook-0x9270",
- "solonpad",
- "parabolarc",
- "synthra-launchpad",
- "bot-0x43d8",
- "direct",
- "unknown"
- ],
- "type": "string"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "launchpad eq",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the token's launchpad is one of several values.",
- "properties": {
- "field": {
- "const": "launchpad",
- "description": "The token's launchpad. Follows the index stream. A registry id, direct (deployed without a launchpad, either because Etherscan's creation record shows an externally owned account deployed the token itself, or because arcgate recorded it so before attribution, as it did USDC and the other pinned assets) or unknown (a contract no registry entry names deployed it, or no creation record arrived in time). A token arcgate has not attributed yet reads null, which never matches: a new token reaches watches once it is attributed, and an older token attributed later by a correction is evaluated at its next trade or verdict change.",
- "type": "string"
- },
- "op": {
- "const": "in",
- "description": "in: the field is one of the values.",
- "type": "string"
- },
- "value": {
- "description": "The values the field may be. One or more of argus, tolly, minara, o1, foci, feel-cash, doppler, wonk-fun, bulllaunch, ubi-fun, bonker, long-supply, lift, aka-fun, memespad, archemist, ramppad, arklis, bozo-fun, based-bid, ripples, basestonk, peach, spawn, radardex, dyor-fun, load-fun, ark-launch, pools-fun, moonarc, pools-xyz, bigshort, virtuals, ctrl-finance, tsukipad, arcstockpad, arcade, packed, coocoo, enso-pool, arcfun, frenlaunch, lunya, openlaunch, arch, arcpad, flipt, faze, noxa-fun, mercurifi, arclaunch, bullcheese, tokenlaunchpad-0xa790, curvehook-0x9270, solonpad, parabolarc, synthra-launchpad, bot-0x43d8, direct, unknown.",
- "items": {
- "enum": [
- "argus",
- "tolly",
- "minara",
- "o1",
- "foci",
- "feel-cash",
- "doppler",
- "wonk-fun",
- "bulllaunch",
- "ubi-fun",
- "bonker",
- "long-supply",
- "lift",
- "aka-fun",
- "memespad",
- "archemist",
- "ramppad",
- "arklis",
- "bozo-fun",
- "based-bid",
- "ripples",
- "basestonk",
- "peach",
- "spawn",
- "radardex",
- "dyor-fun",
- "load-fun",
- "ark-launch",
- "pools-fun",
- "moonarc",
- "pools-xyz",
- "bigshort",
- "virtuals",
- "ctrl-finance",
- "tsukipad",
- "arcstockpad",
- "arcade",
- "packed",
- "coocoo",
- "enso-pool",
- "arcfun",
- "frenlaunch",
- "lunya",
- "openlaunch",
- "arch",
- "arcpad",
- "flipt",
- "faze",
- "noxa-fun",
- "mercurifi",
- "arclaunch",
- "bullcheese",
- "tokenlaunchpad-0xa790",
- "curvehook-0x9270",
- "solonpad",
- "parabolarc",
- "synthra-launchpad",
- "bot-0x43d8",
- "direct",
- "unknown"
- ],
- "type": "string"
- },
- "maxItems": 60,
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "launchpad in",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the token's launchpad kind is one value.",
- "properties": {
- "field": {
- "const": "launchpad_kind",
- "description": "The token's launchpad kind. Follows the index stream. The kind of the token's launchpad: launchpad, bot (a deployer of copies) or protocol, or direct or unknown as its launchpad is. A token not attributed yet reads null, which never matches.",
- "type": "string"
- },
- "op": {
- "const": "eq",
- "description": "eq: the field is exactly the value.",
- "type": "string"
- },
- "value": {
- "description": "The value the field must be. One of launchpad, bot, protocol, direct, unknown.",
- "enum": [
- "launchpad",
- "bot",
- "protocol",
- "direct",
- "unknown"
- ],
- "type": "string"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "launchpad_kind eq",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the token's launchpad kind is one of several values.",
- "properties": {
- "field": {
- "const": "launchpad_kind",
- "description": "The token's launchpad kind. Follows the index stream. The kind of the token's launchpad: launchpad, bot (a deployer of copies) or protocol, or direct or unknown as its launchpad is. A token not attributed yet reads null, which never matches.",
- "type": "string"
- },
- "op": {
- "const": "in",
- "description": "in: the field is one of the values.",
- "type": "string"
- },
- "value": {
- "description": "The values the field may be. One or more of launchpad, bot, protocol, direct, unknown.",
- "items": {
- "enum": [
- "launchpad",
- "bot",
- "protocol",
- "direct",
- "unknown"
- ],
- "type": "string"
- },
- "maxItems": 5,
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "launchpad_kind in",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that holds on the evaluation where the token's pool count moved from its baseline (the count went up). The first reading records the baseline and does not fire, and a null reading is no observation. On a screen it needs a state clause beside it, a baseline is kept only for a token meeting the state clauses, and a token that enters them and changes in the same batch is seen at its next change. A pinned asset (USDC, EURC, ...) never changes: its pools are not reported as changes.",
- "properties": {
- "field": {
- "const": "pools",
- "description": "The token's pool count. Follows the index stream: the number of pools the token trades in.",
- "type": "string"
- },
- "op": {
- "const": "changes",
- "description": "changes: the field moved from its baseline (the count went up). It takes no value.",
- "type": "string"
- }
- },
- "required": [
- "field",
- "op"
- ],
- "title": "pools changes",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that holds on the evaluation where the token's count of lookalikes of its ticker group moved from its baseline (the count went up). The first reading records the baseline and does not fire, and a null reading is no observation. On a screen it needs a state clause beside it, a baseline is kept only for a token meeting the state clauses, and a token that enters them and changes in the same batch is seen at its next change. Token watch only, and the only clause of its watch. The token must be one whose ticker group has a verification at trust 3 or better (circle_docs, project_site, manual or launchpad_official), the only groups lookalikes are found for: a token that is not verified, or whose group has no such verification, is refused.",
- "properties": {
- "field": {
- "const": "lookalikes",
- "description": "The token's count of lookalikes of its ticker group. Follows the index stream: the number of tokens that imitate the token's verified ticker group.",
- "type": "string"
- },
- "op": {
- "const": "changes",
- "description": "changes: the field moved from its baseline (the count went up). It takes no value.",
- "type": "string"
- }
- },
- "required": [
- "field",
- "op"
- ],
- "title": "lookalikes changes",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that holds on the evaluation where the token's primary-route sell-check verdict moved from its baseline (the verdict differs). The first reading records the baseline and does not fire, and a null reading is no observation. On a screen it needs a state clause beside it, a baseline is kept only for a token meeting the state clauses, and a token that enters them and changes in the same batch is seen at its next change.",
- "properties": {
- "field": {
- "const": "safety_verdict",
- "description": "The token's primary-route sell-check verdict. Measured before a watch sees a new token that has a USDC pool, and again when a search or quote measures the token. A token with no USDC pool, or whose check did not answer within its window, reads null, which never matches. Launchpad meme coins usually carry a fixed buy and sell tax, so a sellable one is most often taxed, not ok: use in [ok, taxed] to keep them, and eq ok only to leave every taxed token out.",
- "type": "string"
- },
- "op": {
- "const": "changes",
- "description": "changes: the field moved from its baseline (the verdict differs). It takes no value.",
- "type": "string"
- }
- },
- "required": [
- "field",
- "op"
- ],
- "title": "safety_verdict changes",
- "type": "object"
- }
- ],
- "description": "One typed clause on a token field."
- },
- "maxItems": 8,
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "kind",
- "token",
- "where"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A screen: names no token. It watches every token the index reports and fires for each token that comes to meet all of its `where` clauses, found from the index's change stream.",
- "properties": {
- "kind": {
- "const": "screen",
- "description": "Fires for any token the index reports that comes to meet every clause, not for one named token.",
- "type": "string"
- },
- "where": {
- "description": "One to eight clauses, all of which must hold (AND only). Only tokens a change of the index names are evaluated, from the moment the watch is created: a token already matching fires the next time the index reports it.",
- "items": {
- "anyOf": [
- {
- "additionalProperties": false,
- "description": "A clause on the token's 24 hour volume in USD.",
- "properties": {
- "field": {
- "const": "volume_24h",
- "description": "The token's 24 hour volume in USD. Follows the index stream: a token with no stats row reads 0.",
- "type": "string"
- },
- "op": {
- "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
- "enum": [
- "gt",
- "gte",
- "lt",
- "lte"
- ],
- "type": "string"
- },
- "value": {
- "description": "The line, in the figure's own unit: 24 hour volume in USD.",
- "minimum": 0,
- "type": "number"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "volume_24h",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause on the token's number of distinct traders in the last 24 hours.",
- "properties": {
- "field": {
- "const": "traders_24h",
- "description": "The token's number of distinct traders in the last 24 hours. Follows the index stream: a token with no stats row reads 0.",
- "type": "string"
- },
- "op": {
- "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
- "enum": [
- "gt",
- "gte",
- "lt",
- "lte"
- ],
- "type": "string"
- },
- "value": {
- "description": "The line, in the figure's own unit: number of distinct traders in the last 24 hours.",
- "maximum": 9007199254740991,
- "minimum": 0,
- "type": "integer"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "traders_24h",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause on the token's number of trades in the last 24 hours.",
- "properties": {
- "field": {
- "const": "trades_24h",
- "description": "The token's number of trades in the last 24 hours. Follows the index stream: a token with no stats row reads 0.",
- "type": "string"
- },
- "op": {
- "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
- "enum": [
- "gt",
- "gte",
- "lt",
- "lte"
- ],
- "type": "string"
- },
- "value": {
- "description": "The line, in the figure's own unit: number of trades in the last 24 hours.",
- "maximum": 9007199254740991,
- "minimum": 0,
- "type": "integer"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "trades_24h",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause on the token's number of sells in the last 24 hours.",
- "properties": {
- "field": {
- "const": "sells_24h",
- "description": "The token's number of sells in the last 24 hours. Follows the index stream: a token with no stats row reads 0.",
- "type": "string"
- },
- "op": {
- "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
- "enum": [
- "gt",
- "gte",
- "lt",
- "lte"
- ],
- "type": "string"
- },
- "value": {
- "description": "The line, in the figure's own unit: number of sells in the last 24 hours.",
- "maximum": 9007199254740991,
- "minimum": 0,
- "type": "integer"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "sells_24h",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause on the token's number of distinct sellers in the last 24 hours.",
- "properties": {
- "field": {
- "const": "sellers_24h",
- "description": "The token's number of distinct sellers in the last 24 hours. Follows the index stream: a token with no stats row reads 0.",
- "type": "string"
- },
- "op": {
- "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
- "enum": [
- "gt",
- "gte",
- "lt",
- "lte"
- ],
- "type": "string"
- },
- "value": {
- "description": "The line, in the figure's own unit: number of distinct sellers in the last 24 hours.",
- "maximum": 9007199254740991,
- "minimum": 0,
- "type": "integer"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "sellers_24h",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause on the token's share of the 24 hour volume held by the top trader, from 0 to 1.",
- "properties": {
- "field": {
- "const": "top_trader_share_24h",
- "description": "The token's share of the 24 hour volume held by the top trader, from 0 to 1. Follows the index stream. A token with no trades in the window has no share, and a clause on an unknown share never holds.",
- "type": "string"
- },
- "op": {
- "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
- "enum": [
- "gt",
- "gte",
- "lt",
- "lte"
- ],
- "type": "string"
- },
- "value": {
- "description": "The line, in the figure's own unit: share of the 24 hour volume held by the top trader, from 0 to 1.",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "top_trader_share_24h",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause on the token's USD depth within 2% of the price.",
- "properties": {
- "field": {
- "const": "depth_2pct_usd",
- "description": "The token's USD depth within 2% of the price. Measured before a watch sees a new token that has a USDC pool, and again when a search or quote measures the token. A token with no USDC pool, or whose check did not answer within its window, reads null, which never matches. A lower-bound reading never satisfies lt or lte.",
- "type": "string"
- },
- "op": {
- "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
- "enum": [
- "gt",
- "gte",
- "lt",
- "lte"
- ],
- "type": "string"
- },
- "value": {
- "description": "The line, in the figure's own unit: USD depth within 2% of the price.",
- "minimum": 0,
- "type": "number"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "depth_2pct_usd",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause on the token's age of the token in hours.",
- "properties": {
- "field": {
- "const": "age_hours",
- "description": "The token's age of the token in hours. Read only when a change names the token: passing time alone never re-evaluates a screen, so a token that crosses an age line while quiet is seen at its next change. Age counts from the token's creation time, Etherscan's when a launchpad did not create it. Only when no creation record arrived does it count from the earlier of its earliest pool creation, counted only once every pool it has has a creation time, and the first trade the index saw when that trade first brought the token into the index; a token with neither known has no age, which never matches.",
- "type": "string"
- },
- "op": {
- "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
- "enum": [
- "gt",
- "gte",
- "lt",
- "lte"
- ],
- "type": "string"
- },
- "value": {
- "description": "The line, in the figure's own unit: age of the token in hours.",
- "minimum": 0,
- "type": "number"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "age_hours",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the token's primary-route sell-check verdict is one value.",
- "properties": {
- "field": {
- "const": "safety_verdict",
- "description": "The token's primary-route sell-check verdict. Measured before a watch sees a new token that has a USDC pool, and again when a search or quote measures the token. A token with no USDC pool, or whose check did not answer within its window, reads null, which never matches. Launchpad meme coins usually carry a fixed buy and sell tax, so a sellable one is most often taxed, not ok: use in [ok, taxed] to keep them, and eq ok only to leave every taxed token out.",
- "type": "string"
- },
- "op": {
- "const": "eq",
- "description": "eq: the field is exactly the value.",
- "type": "string"
- },
- "value": {
- "description": "The value the field must be. One of ok, taxed, illiquid, size_limited, insufficient_liquidity, inconclusive, cannot_sell, buy_reverts.",
- "enum": [
- "ok",
- "taxed",
- "illiquid",
- "size_limited",
- "insufficient_liquidity",
- "inconclusive",
- "cannot_sell",
- "buy_reverts"
- ],
- "type": "string"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "safety_verdict eq",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the token's primary-route sell-check verdict is one of several values.",
- "properties": {
- "field": {
- "const": "safety_verdict",
- "description": "The token's primary-route sell-check verdict. Measured before a watch sees a new token that has a USDC pool, and again when a search or quote measures the token. A token with no USDC pool, or whose check did not answer within its window, reads null, which never matches. Launchpad meme coins usually carry a fixed buy and sell tax, so a sellable one is most often taxed, not ok: use in [ok, taxed] to keep them, and eq ok only to leave every taxed token out.",
- "type": "string"
- },
- "op": {
- "const": "in",
- "description": "in: the field is one of the values.",
- "type": "string"
- },
- "value": {
- "description": "The values the field may be. One or more of ok, taxed, illiquid, size_limited, insufficient_liquidity, inconclusive, cannot_sell, buy_reverts.",
- "items": {
- "enum": [
- "ok",
- "taxed",
- "illiquid",
- "size_limited",
- "insufficient_liquidity",
- "inconclusive",
- "cannot_sell",
- "buy_reverts"
- ],
- "type": "string"
- },
- "maxItems": 8,
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "safety_verdict in",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the token's launch state is one value.",
- "properties": {
- "field": {
- "const": "launch_state",
- "description": "The token's launch state. Follows the index stream.",
- "type": "string"
- },
- "op": {
- "const": "eq",
- "description": "eq: the field is exactly the value.",
- "type": "string"
- },
- "value": {
- "description": "The value the field must be. One of curve, graduated, pool_only, unsupported.",
- "enum": [
- "curve",
- "graduated",
- "pool_only",
- "unsupported"
- ],
- "type": "string"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "launch_state eq",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the token's launch state is one of several values.",
- "properties": {
- "field": {
- "const": "launch_state",
- "description": "The token's launch state. Follows the index stream.",
- "type": "string"
- },
- "op": {
- "const": "in",
- "description": "in: the field is one of the values.",
- "type": "string"
- },
- "value": {
- "description": "The values the field may be. One or more of curve, graduated, pool_only, unsupported.",
- "items": {
- "enum": [
- "curve",
- "graduated",
- "pool_only",
- "unsupported"
- ],
- "type": "string"
- },
- "maxItems": 4,
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "launch_state in",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the token's launchpad is one value.",
- "properties": {
- "field": {
- "const": "launchpad",
- "description": "The token's launchpad. Follows the index stream. A registry id, direct (deployed without a launchpad, either because Etherscan's creation record shows an externally owned account deployed the token itself, or because arcgate recorded it so before attribution, as it did USDC and the other pinned assets) or unknown (a contract no registry entry names deployed it, or no creation record arrived in time). A token arcgate has not attributed yet reads null, which never matches: a new token reaches watches once it is attributed, and an older token attributed later by a correction is evaluated at its next trade or verdict change.",
- "type": "string"
- },
- "op": {
- "const": "eq",
- "description": "eq: the field is exactly the value.",
- "type": "string"
- },
- "value": {
- "description": "The value the field must be. One of argus, tolly, minara, o1, foci, feel-cash, doppler, wonk-fun, bulllaunch, ubi-fun, bonker, long-supply, lift, aka-fun, memespad, archemist, ramppad, arklis, bozo-fun, based-bid, ripples, basestonk, peach, spawn, radardex, dyor-fun, load-fun, ark-launch, pools-fun, moonarc, pools-xyz, bigshort, virtuals, ctrl-finance, tsukipad, arcstockpad, arcade, packed, coocoo, enso-pool, arcfun, frenlaunch, lunya, openlaunch, arch, arcpad, flipt, faze, noxa-fun, mercurifi, arclaunch, bullcheese, tokenlaunchpad-0xa790, curvehook-0x9270, solonpad, parabolarc, synthra-launchpad, bot-0x43d8, direct, unknown.",
- "enum": [
- "argus",
- "tolly",
- "minara",
- "o1",
- "foci",
- "feel-cash",
- "doppler",
- "wonk-fun",
- "bulllaunch",
- "ubi-fun",
- "bonker",
- "long-supply",
- "lift",
- "aka-fun",
- "memespad",
- "archemist",
- "ramppad",
- "arklis",
- "bozo-fun",
- "based-bid",
- "ripples",
- "basestonk",
- "peach",
- "spawn",
- "radardex",
- "dyor-fun",
- "load-fun",
- "ark-launch",
- "pools-fun",
- "moonarc",
- "pools-xyz",
- "bigshort",
- "virtuals",
- "ctrl-finance",
- "tsukipad",
- "arcstockpad",
- "arcade",
- "packed",
- "coocoo",
- "enso-pool",
- "arcfun",
- "frenlaunch",
- "lunya",
- "openlaunch",
- "arch",
- "arcpad",
- "flipt",
- "faze",
- "noxa-fun",
- "mercurifi",
- "arclaunch",
- "bullcheese",
- "tokenlaunchpad-0xa790",
- "curvehook-0x9270",
- "solonpad",
- "parabolarc",
- "synthra-launchpad",
- "bot-0x43d8",
- "direct",
- "unknown"
- ],
- "type": "string"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "launchpad eq",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the token's launchpad is one of several values.",
- "properties": {
- "field": {
- "const": "launchpad",
- "description": "The token's launchpad. Follows the index stream. A registry id, direct (deployed without a launchpad, either because Etherscan's creation record shows an externally owned account deployed the token itself, or because arcgate recorded it so before attribution, as it did USDC and the other pinned assets) or unknown (a contract no registry entry names deployed it, or no creation record arrived in time). A token arcgate has not attributed yet reads null, which never matches: a new token reaches watches once it is attributed, and an older token attributed later by a correction is evaluated at its next trade or verdict change.",
- "type": "string"
- },
- "op": {
- "const": "in",
- "description": "in: the field is one of the values.",
- "type": "string"
- },
- "value": {
- "description": "The values the field may be. One or more of argus, tolly, minara, o1, foci, feel-cash, doppler, wonk-fun, bulllaunch, ubi-fun, bonker, long-supply, lift, aka-fun, memespad, archemist, ramppad, arklis, bozo-fun, based-bid, ripples, basestonk, peach, spawn, radardex, dyor-fun, load-fun, ark-launch, pools-fun, moonarc, pools-xyz, bigshort, virtuals, ctrl-finance, tsukipad, arcstockpad, arcade, packed, coocoo, enso-pool, arcfun, frenlaunch, lunya, openlaunch, arch, arcpad, flipt, faze, noxa-fun, mercurifi, arclaunch, bullcheese, tokenlaunchpad-0xa790, curvehook-0x9270, solonpad, parabolarc, synthra-launchpad, bot-0x43d8, direct, unknown.",
- "items": {
- "enum": [
- "argus",
- "tolly",
- "minara",
- "o1",
- "foci",
- "feel-cash",
- "doppler",
- "wonk-fun",
- "bulllaunch",
- "ubi-fun",
- "bonker",
- "long-supply",
- "lift",
- "aka-fun",
- "memespad",
- "archemist",
- "ramppad",
- "arklis",
- "bozo-fun",
- "based-bid",
- "ripples",
- "basestonk",
- "peach",
- "spawn",
- "radardex",
- "dyor-fun",
- "load-fun",
- "ark-launch",
- "pools-fun",
- "moonarc",
- "pools-xyz",
- "bigshort",
- "virtuals",
- "ctrl-finance",
- "tsukipad",
- "arcstockpad",
- "arcade",
- "packed",
- "coocoo",
- "enso-pool",
- "arcfun",
- "frenlaunch",
- "lunya",
- "openlaunch",
- "arch",
- "arcpad",
- "flipt",
- "faze",
- "noxa-fun",
- "mercurifi",
- "arclaunch",
- "bullcheese",
- "tokenlaunchpad-0xa790",
- "curvehook-0x9270",
- "solonpad",
- "parabolarc",
- "synthra-launchpad",
- "bot-0x43d8",
- "direct",
- "unknown"
- ],
- "type": "string"
- },
- "maxItems": 60,
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "launchpad in",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the token's launchpad kind is one value.",
- "properties": {
- "field": {
- "const": "launchpad_kind",
- "description": "The token's launchpad kind. Follows the index stream. The kind of the token's launchpad: launchpad, bot (a deployer of copies) or protocol, or direct or unknown as its launchpad is. A token not attributed yet reads null, which never matches.",
- "type": "string"
- },
- "op": {
- "const": "eq",
- "description": "eq: the field is exactly the value.",
- "type": "string"
- },
- "value": {
- "description": "The value the field must be. One of launchpad, bot, protocol, direct, unknown.",
- "enum": [
- "launchpad",
- "bot",
- "protocol",
- "direct",
- "unknown"
- ],
- "type": "string"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "launchpad_kind eq",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the token's launchpad kind is one of several values.",
- "properties": {
- "field": {
- "const": "launchpad_kind",
- "description": "The token's launchpad kind. Follows the index stream. The kind of the token's launchpad: launchpad, bot (a deployer of copies) or protocol, or direct or unknown as its launchpad is. A token not attributed yet reads null, which never matches.",
- "type": "string"
- },
- "op": {
- "const": "in",
- "description": "in: the field is one of the values.",
- "type": "string"
- },
- "value": {
- "description": "The values the field may be. One or more of launchpad, bot, protocol, direct, unknown.",
- "items": {
- "enum": [
- "launchpad",
- "bot",
- "protocol",
- "direct",
- "unknown"
- ],
- "type": "string"
- },
- "maxItems": 5,
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "launchpad_kind in",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that holds on the evaluation where the token's pool count moved from its baseline (the count went up). The first reading records the baseline and does not fire, and a null reading is no observation. On a screen it needs a state clause beside it, a baseline is kept only for a token meeting the state clauses, and a token that enters them and changes in the same batch is seen at its next change. A pinned asset (USDC, EURC, ...) never changes: its pools are not reported as changes.",
- "properties": {
- "field": {
- "const": "pools",
- "description": "The token's pool count. Follows the index stream: the number of pools the token trades in.",
- "type": "string"
- },
- "op": {
- "const": "changes",
- "description": "changes: the field moved from its baseline (the count went up). It takes no value.",
- "type": "string"
- }
- },
- "required": [
- "field",
- "op"
- ],
- "title": "pools changes",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that holds on the evaluation where the token's count of lookalikes of its ticker group moved from its baseline (the count went up). The first reading records the baseline and does not fire, and a null reading is no observation. On a screen it needs a state clause beside it, a baseline is kept only for a token meeting the state clauses, and a token that enters them and changes in the same batch is seen at its next change. Token watch only, and the only clause of its watch. The token must be one whose ticker group has a verification at trust 3 or better (circle_docs, project_site, manual or launchpad_official), the only groups lookalikes are found for: a token that is not verified, or whose group has no such verification, is refused.",
- "properties": {
- "field": {
- "const": "lookalikes",
- "description": "The token's count of lookalikes of its ticker group. Follows the index stream: the number of tokens that imitate the token's verified ticker group.",
- "type": "string"
- },
- "op": {
- "const": "changes",
- "description": "changes: the field moved from its baseline (the count went up). It takes no value.",
- "type": "string"
- }
- },
- "required": [
- "field",
- "op"
- ],
- "title": "lookalikes changes",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that holds on the evaluation where the token's primary-route sell-check verdict moved from its baseline (the verdict differs). The first reading records the baseline and does not fire, and a null reading is no observation. On a screen it needs a state clause beside it, a baseline is kept only for a token meeting the state clauses, and a token that enters them and changes in the same batch is seen at its next change.",
- "properties": {
- "field": {
- "const": "safety_verdict",
- "description": "The token's primary-route sell-check verdict. Measured before a watch sees a new token that has a USDC pool, and again when a search or quote measures the token. A token with no USDC pool, or whose check did not answer within its window, reads null, which never matches. Launchpad meme coins usually carry a fixed buy and sell tax, so a sellable one is most often taxed, not ok: use in [ok, taxed] to keep them, and eq ok only to leave every taxed token out.",
- "type": "string"
- },
- "op": {
- "const": "changes",
- "description": "changes: the field moved from its baseline (the verdict differs). It takes no value.",
- "type": "string"
- }
- },
- "required": [
- "field",
- "op"
- ],
- "title": "safety_verdict changes",
- "type": "object"
- }
- ],
- "description": "One typed clause on a token field."
- },
- "maxItems": 8,
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "kind",
- "where"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "An agent screen: names no agent. It watches every agent of the chain's directory and fires for each one that is registered after the watch was made, or changes, and meets every `where` clause.",
- "properties": {
- "chainId": {
- "description": "The chain whose directory to watch: the one chain this deployment serves (5042, Arc mainnet). Any other is refused.",
- "exclusiveMinimum": 0,
- "maximum": 9007199254740991,
- "type": "integer"
- },
- "kind": {
- "const": "agents",
- "description": "Fires for any agent of the chain's directory that is registered or changes, not for one named agent.",
- "type": "string"
- },
- "on": {
- "description": "What fires the watch, one or more of registered (an agent registered after this watch was made) and updated (an agent's data changed). Omitted: both.",
- "items": {
- "enum": [
- "registered",
- "updated"
- ],
- "type": "string"
- },
- "minItems": 1,
- "type": "array"
- },
- "where": {
- "description": "Up to eight clauses, all of which must hold (AND only), the directory search's own filters. At most one query clause and one fetchStatus clause. Omitted or empty: every agent.",
- "items": {
- "anyOf": [
- {
- "additionalProperties": false,
- "description": "A clause that the agent declares one capability. Several of them all must hold.",
- "properties": {
- "field": {
- "const": "capabilities",
- "description": "The agent's declared capabilities, from its last good registration file.",
- "type": "string"
- },
- "op": {
- "const": "has",
- "description": "has: the agent declares this capability.",
- "type": "string"
- },
- "value": {
- "additionalProperties": false,
- "description": "The capability the agent must declare: its kind and its name, matched case-insensitively and exactly, as the directory search takes it.",
- "properties": {
- "kind": {
- "description": "What the registration file declares: an MCP tool, an A2A skill, an OASF skill or an OASF domain.",
- "enum": [
- "mcp_tool",
- "a2a_skill",
- "oasf_skill",
- "oasf_domain"
- ],
- "type": "string"
- },
- "value": {
- "description": "The tool, skill or domain name, matched case-insensitively and exactly.",
- "maxLength": 200,
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "kind",
- "value"
- ],
- "type": "object"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "capabilities has",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the agent declares one protocol. Several of them all must hold. x402 support is `protocols has x402`.",
- "properties": {
- "field": {
- "const": "protocols",
- "description": "The protocols the agent declares: MCP or A2A as a service of its registration file, x402 as its x402Support flag.",
- "type": "string"
- },
- "op": {
- "const": "has",
- "description": "has: the agent declares this protocol.",
- "type": "string"
- },
- "value": {
- "description": "The protocol the agent must declare. One of MCP, A2A, x402.",
- "enum": [
- "MCP",
- "A2A",
- "x402"
- ],
- "type": "string"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "protocols has",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the registration file's fetch state is one value. At most one per screen.",
- "properties": {
- "field": {
- "const": "fetchStatus",
- "description": "The state of the agent's registration file fetch.",
- "type": "string"
- },
- "op": {
- "const": "eq",
- "description": "eq: the fetch state is exactly the value.",
- "type": "string"
- },
- "value": {
- "description": "The fetch state the agent must be in. One of fetched, failed, never_fetched.",
- "enum": [
- "fetched",
- "failed",
- "never_fetched"
- ],
- "type": "string"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "fetchStatus eq",
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "A clause that the agent's name or description contains some text. At most one per screen.",
- "properties": {
- "field": {
- "const": "query",
- "description": "The name and description of the agent's last good registration file.",
- "type": "string"
- },
- "op": {
- "const": "contains",
- "description": "contains: the text is a case-insensitive substring of the name or the description, no wildcards.",
- "type": "string"
- },
- "value": {
- "description": "The text to look for.",
- "maxLength": 200,
- "minLength": 1,
- "type": "string"
- }
- },
- "required": [
- "field",
- "op",
- "value"
- ],
- "title": "query contains",
- "type": "object"
- }
- ],
- "description": "One typed clause on an agent, the same filters the directory search takes."
- },
- "maxItems": 8,
- "type": "array"
- }
- },
- "required": [
- "kind",
- "chainId"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "An agent watch: it names one agent and fires when one of the `on` kinds happens to it: its data changes, its owner or payment wallet changes, its registration file URI changes, it receives feedback, or its registration file is fetched or fails to be.",
- "properties": {
- "agentId": {
- "description": "The agent's token id in the chain's IdentityRegistry. An agent the directory does not hold is refused as agent_not_found.",
- "maximum": 9007199254740991,
- "minimum": 0,
- "type": "integer"
- },
- "chainId": {
- "description": "The chain the agent is registered on: the one chain this deployment serves (5042, Arc mainnet). Any other is refused.",
- "exclusiveMinimum": 0,
- "maximum": 9007199254740991,
- "type": "integer"
- },
- "kind": {
- "const": "agent",
- "description": "Fires when the named agent changes.",
- "type": "string"
- },
- "on": {
- "description": "What fires the watch, one or more of updated, owner_changed, wallet_changed, uri_changed, feedback, fetch_failed, fetch_ok. Omitted: every kind.",
- "items": {
- "enum": [
- "updated",
- "owner_changed",
- "wallet_changed",
- "uri_changed",
- "feedback",
- "fetch_failed",
- "fetch_ok"
- ],
- "type": "string"
- },
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "kind",
- "chainId",
- "agentId"
- ],
- "type": "object"
- }
-]New value: +[
+ {
+ "additionalProperties": false,
+ "description": "A token watch: a screen of one token. It names one `token` and fires once when that token comes to meet all of its `where` clauses, from the changes of the index that name it.",
+ "properties": {
+ "kind": {
+ "const": "token",
+ "description": "Fires when the named token comes to meet every clause.",
+ "type": "string"
+ },
+ "token": {
+ "description": "The token's address. A lookalikes clause needs a verified token whose ticker group has a verification at trust 3 or better (circle_docs, project_site, manual or launchpad_official); any other token is refused.",
+ "pattern": "^0x[0-9a-fA-F]{40}$",
+ "type": "string"
+ },
+ "where": {
+ "description": "One to eight clauses, all of which must hold (AND only), the same clauses a screen takes.",
+ "items": {
+ "anyOf": [
+ {
+ "additionalProperties": false,
+ "description": "A clause on the token's 24 hour volume in USD.",
+ "properties": {
+ "field": {
+ "const": "volume_24h",
+ "description": "The token's 24 hour volume in USD. Follows the index stream: a token with no stats row reads 0.",
+ "type": "string"
+ },
+ "op": {
+ "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
+ "enum": [
+ "gt",
+ "gte",
+ "lt",
+ "lte"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "The line, in the figure's own unit: 24 hour volume in USD.",
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "volume_24h",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause on the token's number of distinct traders in the last 24 hours.",
+ "properties": {
+ "field": {
+ "const": "traders_24h",
+ "description": "The token's number of distinct traders in the last 24 hours. Follows the index stream: a token with no stats row reads 0.",
+ "type": "string"
+ },
+ "op": {
+ "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
+ "enum": [
+ "gt",
+ "gte",
+ "lt",
+ "lte"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "The line, in the figure's own unit: number of distinct traders in the last 24 hours.",
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "traders_24h",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause on the token's number of trades in the last 24 hours.",
+ "properties": {
+ "field": {
+ "const": "trades_24h",
+ "description": "The token's number of trades in the last 24 hours. Follows the index stream: a token with no stats row reads 0.",
+ "type": "string"
+ },
+ "op": {
+ "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
+ "enum": [
+ "gt",
+ "gte",
+ "lt",
+ "lte"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "The line, in the figure's own unit: number of trades in the last 24 hours.",
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "trades_24h",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause on the token's number of sells in the last 24 hours.",
+ "properties": {
+ "field": {
+ "const": "sells_24h",
+ "description": "The token's number of sells in the last 24 hours. Follows the index stream: a token with no stats row reads 0.",
+ "type": "string"
+ },
+ "op": {
+ "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
+ "enum": [
+ "gt",
+ "gte",
+ "lt",
+ "lte"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "The line, in the figure's own unit: number of sells in the last 24 hours.",
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "sells_24h",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause on the token's number of distinct sellers in the last 24 hours.",
+ "properties": {
+ "field": {
+ "const": "sellers_24h",
+ "description": "The token's number of distinct sellers in the last 24 hours. Follows the index stream: a token with no stats row reads 0.",
+ "type": "string"
+ },
+ "op": {
+ "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
+ "enum": [
+ "gt",
+ "gte",
+ "lt",
+ "lte"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "The line, in the figure's own unit: number of distinct sellers in the last 24 hours.",
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "sellers_24h",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause on the token's share of the 24 hour volume held by the top trader, from 0 to 1.",
+ "properties": {
+ "field": {
+ "const": "top_trader_share_24h",
+ "description": "The token's share of the 24 hour volume held by the top trader, from 0 to 1. Follows the index stream. A token with no trades in the window has no share, and a clause on an unknown share never holds.",
+ "type": "string"
+ },
+ "op": {
+ "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
+ "enum": [
+ "gt",
+ "gte",
+ "lt",
+ "lte"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "The line, in the figure's own unit: share of the 24 hour volume held by the top trader, from 0 to 1.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "top_trader_share_24h",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause on the token's USD depth within 2% of the price.",
+ "properties": {
+ "field": {
+ "const": "depth_2pct_usd",
+ "description": "The token's USD depth within 2% of the price. Measured before a watch sees a new token that has a USDC pool, and again when a search or quote measures the token. A token with no USDC pool, or whose check did not answer within its window, reads null, which never matches. A lower-bound reading never satisfies lt or lte.",
+ "type": "string"
+ },
+ "op": {
+ "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
+ "enum": [
+ "gt",
+ "gte",
+ "lt",
+ "lte"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "The line, in the figure's own unit: USD depth within 2% of the price.",
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "depth_2pct_usd",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause on the token's age of the token in hours.",
+ "properties": {
+ "field": {
+ "const": "age_hours",
+ "description": "The token's age of the token in hours. Read only when a change names the token: passing time alone never re-evaluates a screen, so a token that crosses an age line while quiet is seen at its next change. Age counts from the token's creation time, Etherscan's when a launchpad did not create it. Only when no creation record arrived does it count from the earlier of its earliest pool creation, counted only once every pool it has has a creation time, and the first trade the index saw when that trade first brought the token into the index; a token with neither known has no age, which never matches.",
+ "type": "string"
+ },
+ "op": {
+ "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
+ "enum": [
+ "gt",
+ "gte",
+ "lt",
+ "lte"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "The line, in the figure's own unit: age of the token in hours.",
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "age_hours",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's primary-route sell-check verdict is one value.",
+ "properties": {
+ "field": {
+ "const": "safety_verdict",
+ "description": "The token's primary-route sell-check verdict. Measured before a watch sees a new token that has a USDC pool, and again when a search or quote measures the token. A token with no USDC pool, or whose check did not answer within its window, reads null, which never matches. Launchpad meme coins usually carry a fixed buy and sell tax, so a sellable one is most often taxed, not ok: use in [ok, taxed] to keep them, and eq ok only to leave every taxed token out.",
+ "type": "string"
+ },
+ "op": {
+ "const": "eq",
+ "description": "eq: the field is exactly the value.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The value the field must be. One of ok, taxed, high_tax, illiquid, size_limited, insufficient_liquidity, inconclusive, cannot_sell, buy_reverts.",
+ "enum": [
+ "ok",
+ "taxed",
+ "high_tax",
+ "illiquid",
+ "size_limited",
+ "insufficient_liquidity",
+ "inconclusive",
+ "cannot_sell",
+ "buy_reverts"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "safety_verdict eq",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's primary-route sell-check verdict is one of several values.",
+ "properties": {
+ "field": {
+ "const": "safety_verdict",
+ "description": "The token's primary-route sell-check verdict. Measured before a watch sees a new token that has a USDC pool, and again when a search or quote measures the token. A token with no USDC pool, or whose check did not answer within its window, reads null, which never matches. Launchpad meme coins usually carry a fixed buy and sell tax, so a sellable one is most often taxed, not ok: use in [ok, taxed] to keep them, and eq ok only to leave every taxed token out.",
+ "type": "string"
+ },
+ "op": {
+ "const": "in",
+ "description": "in: the field is one of the values.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The values the field may be. One or more of ok, taxed, high_tax, illiquid, size_limited, insufficient_liquidity, inconclusive, cannot_sell, buy_reverts.",
+ "items": {
+ "enum": [
+ "ok",
+ "taxed",
+ "high_tax",
+ "illiquid",
+ "size_limited",
+ "insufficient_liquidity",
+ "inconclusive",
+ "cannot_sell",
+ "buy_reverts"
+ ],
+ "type": "string"
+ },
+ "maxItems": 9,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "safety_verdict in",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's exit risk level is one value.",
+ "properties": {
+ "field": {
+ "const": "exit_risk",
+ "description": "The token's exit risk level. Announced from live and search work only: the rating exists once the exit-risk stage has rated the token. A token it has not rated yet reads null, which never matches; null is not unknown, a stored level a rating can carry. Separate from the sell-check verdict: a token can sell today and still rate high. An in or eq clause fires when the level enters the set; a worse level (low or unknown, then elevated, then high) or a new liquidity pull fires at once even inside the watch cooldown. Inside the cooldown the level is compared with the level at the last fire, so a fall and a return to it does not fire again; after the cooldown it is compared with the last level seen.",
+ "type": "string"
+ },
+ "op": {
+ "const": "eq",
+ "description": "eq: the field is exactly the value.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The value the field must be. One of low, elevated, high, unknown.",
+ "enum": [
+ "low",
+ "elevated",
+ "high",
+ "unknown"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "exit_risk eq",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's exit risk level is one of several values.",
+ "properties": {
+ "field": {
+ "const": "exit_risk",
+ "description": "The token's exit risk level. Announced from live and search work only: the rating exists once the exit-risk stage has rated the token. A token it has not rated yet reads null, which never matches; null is not unknown, a stored level a rating can carry. Separate from the sell-check verdict: a token can sell today and still rate high. An in or eq clause fires when the level enters the set; a worse level (low or unknown, then elevated, then high) or a new liquidity pull fires at once even inside the watch cooldown. Inside the cooldown the level is compared with the level at the last fire, so a fall and a return to it does not fire again; after the cooldown it is compared with the last level seen.",
+ "type": "string"
+ },
+ "op": {
+ "const": "in",
+ "description": "in: the field is one of the values.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The values the field may be. One or more of low, elevated, high, unknown.",
+ "items": {
+ "enum": [
+ "low",
+ "elevated",
+ "high",
+ "unknown"
+ ],
+ "type": "string"
+ },
+ "maxItems": 4,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "exit_risk in",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's launch state is one value.",
+ "properties": {
+ "field": {
+ "const": "launch_state",
+ "description": "The token's launch state. Follows the index stream.",
+ "type": "string"
+ },
+ "op": {
+ "const": "eq",
+ "description": "eq: the field is exactly the value.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The value the field must be. One of curve, graduated, pool_only, unsupported.",
+ "enum": [
+ "curve",
+ "graduated",
+ "pool_only",
+ "unsupported"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "launch_state eq",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's launch state is one of several values.",
+ "properties": {
+ "field": {
+ "const": "launch_state",
+ "description": "The token's launch state. Follows the index stream.",
+ "type": "string"
+ },
+ "op": {
+ "const": "in",
+ "description": "in: the field is one of the values.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The values the field may be. One or more of curve, graduated, pool_only, unsupported.",
+ "items": {
+ "enum": [
+ "curve",
+ "graduated",
+ "pool_only",
+ "unsupported"
+ ],
+ "type": "string"
+ },
+ "maxItems": 4,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "launch_state in",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's launchpad is one value.",
+ "properties": {
+ "field": {
+ "const": "launchpad",
+ "description": "The token's launchpad. Follows the index stream. A registry id, direct (deployed without a launchpad, either because Etherscan's creation record shows an externally owned account deployed the token itself, or because arcgate recorded it so before attribution, as it did USDC and the other pinned assets) or unknown (a contract no registry entry names deployed it, or no creation record arrived in time). A token arcgate has not attributed yet reads null, which never matches: a new token reaches watches once it is attributed, and an older token attributed later by a correction is evaluated at its next trade or verdict change.",
+ "type": "string"
+ },
+ "op": {
+ "const": "eq",
+ "description": "eq: the field is exactly the value.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The value the field must be. One of argus, tolly, minara, o1, foci, feel-cash, doppler, wonk-fun, bulllaunch, ubi-fun, bonker, long-supply, lift, aka-fun, memespad, archemist, ramppad, arklis, bozo-fun, based-bid, ripples, basestonk, peach, spawn, radardex, dyor-fun, load-fun, ark-launch, pools-fun, moonarc, pools-xyz, bigshort, virtuals, ctrl-finance, tsukipad, arcstockpad, arcade, packed, coocoo, enso-pool, arcfun, frenlaunch, lunya, openlaunch, arch, arcpad, flipt, faze, noxa-fun, mercurifi, arclaunch, bullcheese, tokenlaunchpad-0xa790, curvehook-0x9270, solonpad, parabolarc, synthra-launchpad, bot-0x43d8, direct, unknown.",
+ "enum": [
+ "argus",
+ "tolly",
+ "minara",
+ "o1",
+ "foci",
+ "feel-cash",
+ "doppler",
+ "wonk-fun",
+ "bulllaunch",
+ "ubi-fun",
+ "bonker",
+ "long-supply",
+ "lift",
+ "aka-fun",
+ "memespad",
+ "archemist",
+ "ramppad",
+ "arklis",
+ "bozo-fun",
+ "based-bid",
+ "ripples",
+ "basestonk",
+ "peach",
+ "spawn",
+ "radardex",
+ "dyor-fun",
+ "load-fun",
+ "ark-launch",
+ "pools-fun",
+ "moonarc",
+ "pools-xyz",
+ "bigshort",
+ "virtuals",
+ "ctrl-finance",
+ "tsukipad",
+ "arcstockpad",
+ "arcade",
+ "packed",
+ "coocoo",
+ "enso-pool",
+ "arcfun",
+ "frenlaunch",
+ "lunya",
+ "openlaunch",
+ "arch",
+ "arcpad",
+ "flipt",
+ "faze",
+ "noxa-fun",
+ "mercurifi",
+ "arclaunch",
+ "bullcheese",
+ "tokenlaunchpad-0xa790",
+ "curvehook-0x9270",
+ "solonpad",
+ "parabolarc",
+ "synthra-launchpad",
+ "bot-0x43d8",
+ "direct",
+ "unknown"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "launchpad eq",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's launchpad is one of several values.",
+ "properties": {
+ "field": {
+ "const": "launchpad",
+ "description": "The token's launchpad. Follows the index stream. A registry id, direct (deployed without a launchpad, either because Etherscan's creation record shows an externally owned account deployed the token itself, or because arcgate recorded it so before attribution, as it did USDC and the other pinned assets) or unknown (a contract no registry entry names deployed it, or no creation record arrived in time). A token arcgate has not attributed yet reads null, which never matches: a new token reaches watches once it is attributed, and an older token attributed later by a correction is evaluated at its next trade or verdict change.",
+ "type": "string"
+ },
+ "op": {
+ "const": "in",
+ "description": "in: the field is one of the values.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The values the field may be. One or more of argus, tolly, minara, o1, foci, feel-cash, doppler, wonk-fun, bulllaunch, ubi-fun, bonker, long-supply, lift, aka-fun, memespad, archemist, ramppad, arklis, bozo-fun, based-bid, ripples, basestonk, peach, spawn, radardex, dyor-fun, load-fun, ark-launch, pools-fun, moonarc, pools-xyz, bigshort, virtuals, ctrl-finance, tsukipad, arcstockpad, arcade, packed, coocoo, enso-pool, arcfun, frenlaunch, lunya, openlaunch, arch, arcpad, flipt, faze, noxa-fun, mercurifi, arclaunch, bullcheese, tokenlaunchpad-0xa790, curvehook-0x9270, solonpad, parabolarc, synthra-launchpad, bot-0x43d8, direct, unknown.",
+ "items": {
+ "enum": [
+ "argus",
+ "tolly",
+ "minara",
+ "o1",
+ "foci",
+ "feel-cash",
+ "doppler",
+ "wonk-fun",
+ "bulllaunch",
+ "ubi-fun",
+ "bonker",
+ "long-supply",
+ "lift",
+ "aka-fun",
+ "memespad",
+ "archemist",
+ "ramppad",
+ "arklis",
+ "bozo-fun",
+ "based-bid",
+ "ripples",
+ "basestonk",
+ "peach",
+ "spawn",
+ "radardex",
+ "dyor-fun",
+ "load-fun",
+ "ark-launch",
+ "pools-fun",
+ "moonarc",
+ "pools-xyz",
+ "bigshort",
+ "virtuals",
+ "ctrl-finance",
+ "tsukipad",
+ "arcstockpad",
+ "arcade",
+ "packed",
+ "coocoo",
+ "enso-pool",
+ "arcfun",
+ "frenlaunch",
+ "lunya",
+ "openlaunch",
+ "arch",
+ "arcpad",
+ "flipt",
+ "faze",
+ "noxa-fun",
+ "mercurifi",
+ "arclaunch",
+ "bullcheese",
+ "tokenlaunchpad-0xa790",
+ "curvehook-0x9270",
+ "solonpad",
+ "parabolarc",
+ "synthra-launchpad",
+ "bot-0x43d8",
+ "direct",
+ "unknown"
+ ],
+ "type": "string"
+ },
+ "maxItems": 60,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "launchpad in",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's launchpad kind is one value.",
+ "properties": {
+ "field": {
+ "const": "launchpad_kind",
+ "description": "The token's launchpad kind. Follows the index stream. The kind of the token's launchpad: launchpad, bot (a deployer of copies) or protocol, or direct or unknown as its launchpad is. A token not attributed yet reads null, which never matches.",
+ "type": "string"
+ },
+ "op": {
+ "const": "eq",
+ "description": "eq: the field is exactly the value.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The value the field must be. One of launchpad, bot, protocol, direct, unknown.",
+ "enum": [
+ "launchpad",
+ "bot",
+ "protocol",
+ "direct",
+ "unknown"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "launchpad_kind eq",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's launchpad kind is one of several values.",
+ "properties": {
+ "field": {
+ "const": "launchpad_kind",
+ "description": "The token's launchpad kind. Follows the index stream. The kind of the token's launchpad: launchpad, bot (a deployer of copies) or protocol, or direct or unknown as its launchpad is. A token not attributed yet reads null, which never matches.",
+ "type": "string"
+ },
+ "op": {
+ "const": "in",
+ "description": "in: the field is one of the values.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The values the field may be. One or more of launchpad, bot, protocol, direct, unknown.",
+ "items": {
+ "enum": [
+ "launchpad",
+ "bot",
+ "protocol",
+ "direct",
+ "unknown"
+ ],
+ "type": "string"
+ },
+ "maxItems": 5,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "launchpad_kind in",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that holds on the evaluation where the token's pool count moved from its baseline (the count went up). The first reading records the baseline and does not fire, and a null reading is no observation. On a screen it needs a state clause beside it, a baseline is kept only for a token meeting the state clauses, and a token that enters them and changes in the same batch is seen at its next change. A pinned asset (USDC, EURC, ...) never changes: its pools are not reported as changes.",
+ "properties": {
+ "field": {
+ "const": "pools",
+ "description": "The token's pool count. Follows the index stream: the number of pools the token trades in.",
+ "type": "string"
+ },
+ "op": {
+ "const": "changes",
+ "description": "changes: the field moved from its baseline (the count went up). It takes no value.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op"
+ ],
+ "title": "pools changes",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that holds on the evaluation where the token's count of lookalikes of its ticker group moved from its baseline (the count went up). The first reading records the baseline and does not fire, and a null reading is no observation. On a screen it needs a state clause beside it, a baseline is kept only for a token meeting the state clauses, and a token that enters them and changes in the same batch is seen at its next change. Token watch only, and the only clause of its watch. The token must be one whose ticker group has a verification at trust 3 or better (circle_docs, project_site, manual or launchpad_official), the only groups lookalikes are found for: a token that is not verified, or whose group has no such verification, is refused.",
+ "properties": {
+ "field": {
+ "const": "lookalikes",
+ "description": "The token's count of lookalikes of its ticker group. Follows the index stream: the number of tokens that imitate the token's verified ticker group.",
+ "type": "string"
+ },
+ "op": {
+ "const": "changes",
+ "description": "changes: the field moved from its baseline (the count went up). It takes no value.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op"
+ ],
+ "title": "lookalikes changes",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that holds on the evaluation where the token's primary-route sell-check verdict moved from its baseline (the verdict differs). The first reading records the baseline and does not fire, and a null reading is no observation. On a screen it needs a state clause beside it, a baseline is kept only for a token meeting the state clauses, and a token that enters them and changes in the same batch is seen at its next change.",
+ "properties": {
+ "field": {
+ "const": "safety_verdict",
+ "description": "The token's primary-route sell-check verdict. Measured before a watch sees a new token that has a USDC pool, and again when a search or quote measures the token. A token with no USDC pool, or whose check did not answer within its window, reads null, which never matches. Launchpad meme coins usually carry a fixed buy and sell tax, so a sellable one is most often taxed, not ok: use in [ok, taxed] to keep them, and eq ok only to leave every taxed token out.",
+ "type": "string"
+ },
+ "op": {
+ "const": "changes",
+ "description": "changes: the field moved from its baseline (the verdict differs). It takes no value.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op"
+ ],
+ "title": "safety_verdict changes",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that holds on the evaluation where the token's exit risk level moved from its baseline (the level differs or a new liquidity pull appears). The first reading records the baseline and does not fire, and a null reading is no observation. On a screen it needs a state clause beside it, a baseline is kept only for a token meeting the state clauses, and a token that enters them and changes in the same batch is seen at its next change. A move to a worse level, or a new liquidity pull, fires at once, inside the cooldown; any other move waits for it.",
+ "properties": {
+ "field": {
+ "const": "exit_risk",
+ "description": "The token's exit risk level. Announced from live and search work only: the rating exists once the exit-risk stage has rated the token. A token it has not rated yet reads null, which never matches; null is not unknown, a stored level a rating can carry. Separate from the sell-check verdict: a token can sell today and still rate high. An in or eq clause fires when the level enters the set; a worse level (low or unknown, then elevated, then high) or a new liquidity pull fires at once even inside the watch cooldown. Inside the cooldown the level is compared with the level at the last fire, so a fall and a return to it does not fire again; after the cooldown it is compared with the last level seen.",
+ "type": "string"
+ },
+ "op": {
+ "const": "changes",
+ "description": "changes: the field moved from its baseline (the level differs or a new liquidity pull appears). It takes no value.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op"
+ ],
+ "title": "exit_risk changes",
+ "type": "object"
+ }
+ ],
+ "description": "One typed clause on a token field."
+ },
+ "maxItems": 8,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "kind",
+ "token",
+ "where"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A screen: names no token. It watches every token the index reports and fires for each token that comes to meet all of its `where` clauses, found from the index's change stream.",
+ "properties": {
+ "kind": {
+ "const": "screen",
+ "description": "Fires for any token the index reports that comes to meet every clause, not for one named token.",
+ "type": "string"
+ },
+ "where": {
+ "description": "One to eight clauses, all of which must hold (AND only). Only tokens a change of the index names are evaluated, from the moment the watch is created: a token already matching fires the next time the index reports it.",
+ "items": {
+ "anyOf": [
+ {
+ "additionalProperties": false,
+ "description": "A clause on the token's 24 hour volume in USD.",
+ "properties": {
+ "field": {
+ "const": "volume_24h",
+ "description": "The token's 24 hour volume in USD. Follows the index stream: a token with no stats row reads 0.",
+ "type": "string"
+ },
+ "op": {
+ "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
+ "enum": [
+ "gt",
+ "gte",
+ "lt",
+ "lte"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "The line, in the figure's own unit: 24 hour volume in USD.",
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "volume_24h",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause on the token's number of distinct traders in the last 24 hours.",
+ "properties": {
+ "field": {
+ "const": "traders_24h",
+ "description": "The token's number of distinct traders in the last 24 hours. Follows the index stream: a token with no stats row reads 0.",
+ "type": "string"
+ },
+ "op": {
+ "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
+ "enum": [
+ "gt",
+ "gte",
+ "lt",
+ "lte"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "The line, in the figure's own unit: number of distinct traders in the last 24 hours.",
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "traders_24h",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause on the token's number of trades in the last 24 hours.",
+ "properties": {
+ "field": {
+ "const": "trades_24h",
+ "description": "The token's number of trades in the last 24 hours. Follows the index stream: a token with no stats row reads 0.",
+ "type": "string"
+ },
+ "op": {
+ "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
+ "enum": [
+ "gt",
+ "gte",
+ "lt",
+ "lte"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "The line, in the figure's own unit: number of trades in the last 24 hours.",
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "trades_24h",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause on the token's number of sells in the last 24 hours.",
+ "properties": {
+ "field": {
+ "const": "sells_24h",
+ "description": "The token's number of sells in the last 24 hours. Follows the index stream: a token with no stats row reads 0.",
+ "type": "string"
+ },
+ "op": {
+ "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
+ "enum": [
+ "gt",
+ "gte",
+ "lt",
+ "lte"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "The line, in the figure's own unit: number of sells in the last 24 hours.",
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "sells_24h",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause on the token's number of distinct sellers in the last 24 hours.",
+ "properties": {
+ "field": {
+ "const": "sellers_24h",
+ "description": "The token's number of distinct sellers in the last 24 hours. Follows the index stream: a token with no stats row reads 0.",
+ "type": "string"
+ },
+ "op": {
+ "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
+ "enum": [
+ "gt",
+ "gte",
+ "lt",
+ "lte"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "The line, in the figure's own unit: number of distinct sellers in the last 24 hours.",
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "sellers_24h",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause on the token's share of the 24 hour volume held by the top trader, from 0 to 1.",
+ "properties": {
+ "field": {
+ "const": "top_trader_share_24h",
+ "description": "The token's share of the 24 hour volume held by the top trader, from 0 to 1. Follows the index stream. A token with no trades in the window has no share, and a clause on an unknown share never holds.",
+ "type": "string"
+ },
+ "op": {
+ "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
+ "enum": [
+ "gt",
+ "gte",
+ "lt",
+ "lte"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "The line, in the figure's own unit: share of the 24 hour volume held by the top trader, from 0 to 1.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "top_trader_share_24h",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause on the token's USD depth within 2% of the price.",
+ "properties": {
+ "field": {
+ "const": "depth_2pct_usd",
+ "description": "The token's USD depth within 2% of the price. Measured before a watch sees a new token that has a USDC pool, and again when a search or quote measures the token. A token with no USDC pool, or whose check did not answer within its window, reads null, which never matches. A lower-bound reading never satisfies lt or lte.",
+ "type": "string"
+ },
+ "op": {
+ "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
+ "enum": [
+ "gt",
+ "gte",
+ "lt",
+ "lte"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "The line, in the figure's own unit: USD depth within 2% of the price.",
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "depth_2pct_usd",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause on the token's age of the token in hours.",
+ "properties": {
+ "field": {
+ "const": "age_hours",
+ "description": "The token's age of the token in hours. Read only when a change names the token: passing time alone never re-evaluates a screen, so a token that crosses an age line while quiet is seen at its next change. Age counts from the token's creation time, Etherscan's when a launchpad did not create it. Only when no creation record arrived does it count from the earlier of its earliest pool creation, counted only once every pool it has has a creation time, and the first trade the index saw when that trade first brought the token into the index; a token with neither known has no age, which never matches.",
+ "type": "string"
+ },
+ "op": {
+ "description": "gt: greater than, gte: at least, lt: less than, lte: at most. A token whose figure is unknown never satisfies it.",
+ "enum": [
+ "gt",
+ "gte",
+ "lt",
+ "lte"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "The line, in the figure's own unit: age of the token in hours.",
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "age_hours",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's primary-route sell-check verdict is one value.",
+ "properties": {
+ "field": {
+ "const": "safety_verdict",
+ "description": "The token's primary-route sell-check verdict. Measured before a watch sees a new token that has a USDC pool, and again when a search or quote measures the token. A token with no USDC pool, or whose check did not answer within its window, reads null, which never matches. Launchpad meme coins usually carry a fixed buy and sell tax, so a sellable one is most often taxed, not ok: use in [ok, taxed] to keep them, and eq ok only to leave every taxed token out.",
+ "type": "string"
+ },
+ "op": {
+ "const": "eq",
+ "description": "eq: the field is exactly the value.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The value the field must be. One of ok, taxed, high_tax, illiquid, size_limited, insufficient_liquidity, inconclusive, cannot_sell, buy_reverts.",
+ "enum": [
+ "ok",
+ "taxed",
+ "high_tax",
+ "illiquid",
+ "size_limited",
+ "insufficient_liquidity",
+ "inconclusive",
+ "cannot_sell",
+ "buy_reverts"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "safety_verdict eq",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's primary-route sell-check verdict is one of several values.",
+ "properties": {
+ "field": {
+ "const": "safety_verdict",
+ "description": "The token's primary-route sell-check verdict. Measured before a watch sees a new token that has a USDC pool, and again when a search or quote measures the token. A token with no USDC pool, or whose check did not answer within its window, reads null, which never matches. Launchpad meme coins usually carry a fixed buy and sell tax, so a sellable one is most often taxed, not ok: use in [ok, taxed] to keep them, and eq ok only to leave every taxed token out.",
+ "type": "string"
+ },
+ "op": {
+ "const": "in",
+ "description": "in: the field is one of the values.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The values the field may be. One or more of ok, taxed, high_tax, illiquid, size_limited, insufficient_liquidity, inconclusive, cannot_sell, buy_reverts.",
+ "items": {
+ "enum": [
+ "ok",
+ "taxed",
+ "high_tax",
+ "illiquid",
+ "size_limited",
+ "insufficient_liquidity",
+ "inconclusive",
+ "cannot_sell",
+ "buy_reverts"
+ ],
+ "type": "string"
+ },
+ "maxItems": 9,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "safety_verdict in",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's exit risk level is one value.",
+ "properties": {
+ "field": {
+ "const": "exit_risk",
+ "description": "The token's exit risk level. Announced from live and search work only: the rating exists once the exit-risk stage has rated the token. A token it has not rated yet reads null, which never matches; null is not unknown, a stored level a rating can carry. Separate from the sell-check verdict: a token can sell today and still rate high. An in or eq clause fires when the level enters the set; a worse level (low or unknown, then elevated, then high) or a new liquidity pull fires at once even inside the watch cooldown. Inside the cooldown the level is compared with the level at the last fire, so a fall and a return to it does not fire again; after the cooldown it is compared with the last level seen.",
+ "type": "string"
+ },
+ "op": {
+ "const": "eq",
+ "description": "eq: the field is exactly the value.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The value the field must be. One of low, elevated, high, unknown.",
+ "enum": [
+ "low",
+ "elevated",
+ "high",
+ "unknown"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "exit_risk eq",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's exit risk level is one of several values.",
+ "properties": {
+ "field": {
+ "const": "exit_risk",
+ "description": "The token's exit risk level. Announced from live and search work only: the rating exists once the exit-risk stage has rated the token. A token it has not rated yet reads null, which never matches; null is not unknown, a stored level a rating can carry. Separate from the sell-check verdict: a token can sell today and still rate high. An in or eq clause fires when the level enters the set; a worse level (low or unknown, then elevated, then high) or a new liquidity pull fires at once even inside the watch cooldown. Inside the cooldown the level is compared with the level at the last fire, so a fall and a return to it does not fire again; after the cooldown it is compared with the last level seen.",
+ "type": "string"
+ },
+ "op": {
+ "const": "in",
+ "description": "in: the field is one of the values.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The values the field may be. One or more of low, elevated, high, unknown.",
+ "items": {
+ "enum": [
+ "low",
+ "elevated",
+ "high",
+ "unknown"
+ ],
+ "type": "string"
+ },
+ "maxItems": 4,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "exit_risk in",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's launch state is one value.",
+ "properties": {
+ "field": {
+ "const": "launch_state",
+ "description": "The token's launch state. Follows the index stream.",
+ "type": "string"
+ },
+ "op": {
+ "const": "eq",
+ "description": "eq: the field is exactly the value.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The value the field must be. One of curve, graduated, pool_only, unsupported.",
+ "enum": [
+ "curve",
+ "graduated",
+ "pool_only",
+ "unsupported"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "launch_state eq",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's launch state is one of several values.",
+ "properties": {
+ "field": {
+ "const": "launch_state",
+ "description": "The token's launch state. Follows the index stream.",
+ "type": "string"
+ },
+ "op": {
+ "const": "in",
+ "description": "in: the field is one of the values.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The values the field may be. One or more of curve, graduated, pool_only, unsupported.",
+ "items": {
+ "enum": [
+ "curve",
+ "graduated",
+ "pool_only",
+ "unsupported"
+ ],
+ "type": "string"
+ },
+ "maxItems": 4,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "launch_state in",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's launchpad is one value.",
+ "properties": {
+ "field": {
+ "const": "launchpad",
+ "description": "The token's launchpad. Follows the index stream. A registry id, direct (deployed without a launchpad, either because Etherscan's creation record shows an externally owned account deployed the token itself, or because arcgate recorded it so before attribution, as it did USDC and the other pinned assets) or unknown (a contract no registry entry names deployed it, or no creation record arrived in time). A token arcgate has not attributed yet reads null, which never matches: a new token reaches watches once it is attributed, and an older token attributed later by a correction is evaluated at its next trade or verdict change.",
+ "type": "string"
+ },
+ "op": {
+ "const": "eq",
+ "description": "eq: the field is exactly the value.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The value the field must be. One of argus, tolly, minara, o1, foci, feel-cash, doppler, wonk-fun, bulllaunch, ubi-fun, bonker, long-supply, lift, aka-fun, memespad, archemist, ramppad, arklis, bozo-fun, based-bid, ripples, basestonk, peach, spawn, radardex, dyor-fun, load-fun, ark-launch, pools-fun, moonarc, pools-xyz, bigshort, virtuals, ctrl-finance, tsukipad, arcstockpad, arcade, packed, coocoo, enso-pool, arcfun, frenlaunch, lunya, openlaunch, arch, arcpad, flipt, faze, noxa-fun, mercurifi, arclaunch, bullcheese, tokenlaunchpad-0xa790, curvehook-0x9270, solonpad, parabolarc, synthra-launchpad, bot-0x43d8, direct, unknown.",
+ "enum": [
+ "argus",
+ "tolly",
+ "minara",
+ "o1",
+ "foci",
+ "feel-cash",
+ "doppler",
+ "wonk-fun",
+ "bulllaunch",
+ "ubi-fun",
+ "bonker",
+ "long-supply",
+ "lift",
+ "aka-fun",
+ "memespad",
+ "archemist",
+ "ramppad",
+ "arklis",
+ "bozo-fun",
+ "based-bid",
+ "ripples",
+ "basestonk",
+ "peach",
+ "spawn",
+ "radardex",
+ "dyor-fun",
+ "load-fun",
+ "ark-launch",
+ "pools-fun",
+ "moonarc",
+ "pools-xyz",
+ "bigshort",
+ "virtuals",
+ "ctrl-finance",
+ "tsukipad",
+ "arcstockpad",
+ "arcade",
+ "packed",
+ "coocoo",
+ "enso-pool",
+ "arcfun",
+ "frenlaunch",
+ "lunya",
+ "openlaunch",
+ "arch",
+ "arcpad",
+ "flipt",
+ "faze",
+ "noxa-fun",
+ "mercurifi",
+ "arclaunch",
+ "bullcheese",
+ "tokenlaunchpad-0xa790",
+ "curvehook-0x9270",
+ "solonpad",
+ "parabolarc",
+ "synthra-launchpad",
+ "bot-0x43d8",
+ "direct",
+ "unknown"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "launchpad eq",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's launchpad is one of several values.",
+ "properties": {
+ "field": {
+ "const": "launchpad",
+ "description": "The token's launchpad. Follows the index stream. A registry id, direct (deployed without a launchpad, either because Etherscan's creation record shows an externally owned account deployed the token itself, or because arcgate recorded it so before attribution, as it did USDC and the other pinned assets) or unknown (a contract no registry entry names deployed it, or no creation record arrived in time). A token arcgate has not attributed yet reads null, which never matches: a new token reaches watches once it is attributed, and an older token attributed later by a correction is evaluated at its next trade or verdict change.",
+ "type": "string"
+ },
+ "op": {
+ "const": "in",
+ "description": "in: the field is one of the values.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The values the field may be. One or more of argus, tolly, minara, o1, foci, feel-cash, doppler, wonk-fun, bulllaunch, ubi-fun, bonker, long-supply, lift, aka-fun, memespad, archemist, ramppad, arklis, bozo-fun, based-bid, ripples, basestonk, peach, spawn, radardex, dyor-fun, load-fun, ark-launch, pools-fun, moonarc, pools-xyz, bigshort, virtuals, ctrl-finance, tsukipad, arcstockpad, arcade, packed, coocoo, enso-pool, arcfun, frenlaunch, lunya, openlaunch, arch, arcpad, flipt, faze, noxa-fun, mercurifi, arclaunch, bullcheese, tokenlaunchpad-0xa790, curvehook-0x9270, solonpad, parabolarc, synthra-launchpad, bot-0x43d8, direct, unknown.",
+ "items": {
+ "enum": [
+ "argus",
+ "tolly",
+ "minara",
+ "o1",
+ "foci",
+ "feel-cash",
+ "doppler",
+ "wonk-fun",
+ "bulllaunch",
+ "ubi-fun",
+ "bonker",
+ "long-supply",
+ "lift",
+ "aka-fun",
+ "memespad",
+ "archemist",
+ "ramppad",
+ "arklis",
+ "bozo-fun",
+ "based-bid",
+ "ripples",
+ "basestonk",
+ "peach",
+ "spawn",
+ "radardex",
+ "dyor-fun",
+ "load-fun",
+ "ark-launch",
+ "pools-fun",
+ "moonarc",
+ "pools-xyz",
+ "bigshort",
+ "virtuals",
+ "ctrl-finance",
+ "tsukipad",
+ "arcstockpad",
+ "arcade",
+ "packed",
+ "coocoo",
+ "enso-pool",
+ "arcfun",
+ "frenlaunch",
+ "lunya",
+ "openlaunch",
+ "arch",
+ "arcpad",
+ "flipt",
+ "faze",
+ "noxa-fun",
+ "mercurifi",
+ "arclaunch",
+ "bullcheese",
+ "tokenlaunchpad-0xa790",
+ "curvehook-0x9270",
+ "solonpad",
+ "parabolarc",
+ "synthra-launchpad",
+ "bot-0x43d8",
+ "direct",
+ "unknown"
+ ],
+ "type": "string"
+ },
+ "maxItems": 60,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "launchpad in",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's launchpad kind is one value.",
+ "properties": {
+ "field": {
+ "const": "launchpad_kind",
+ "description": "The token's launchpad kind. Follows the index stream. The kind of the token's launchpad: launchpad, bot (a deployer of copies) or protocol, or direct or unknown as its launchpad is. A token not attributed yet reads null, which never matches.",
+ "type": "string"
+ },
+ "op": {
+ "const": "eq",
+ "description": "eq: the field is exactly the value.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The value the field must be. One of launchpad, bot, protocol, direct, unknown.",
+ "enum": [
+ "launchpad",
+ "bot",
+ "protocol",
+ "direct",
+ "unknown"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "launchpad_kind eq",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the token's launchpad kind is one of several values.",
+ "properties": {
+ "field": {
+ "const": "launchpad_kind",
+ "description": "The token's launchpad kind. Follows the index stream. The kind of the token's launchpad: launchpad, bot (a deployer of copies) or protocol, or direct or unknown as its launchpad is. A token not attributed yet reads null, which never matches.",
+ "type": "string"
+ },
+ "op": {
+ "const": "in",
+ "description": "in: the field is one of the values.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The values the field may be. One or more of launchpad, bot, protocol, direct, unknown.",
+ "items": {
+ "enum": [
+ "launchpad",
+ "bot",
+ "protocol",
+ "direct",
+ "unknown"
+ ],
+ "type": "string"
+ },
+ "maxItems": 5,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "launchpad_kind in",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that holds on the evaluation where the token's pool count moved from its baseline (the count went up). The first reading records the baseline and does not fire, and a null reading is no observation. On a screen it needs a state clause beside it, a baseline is kept only for a token meeting the state clauses, and a token that enters them and changes in the same batch is seen at its next change. A pinned asset (USDC, EURC, ...) never changes: its pools are not reported as changes.",
+ "properties": {
+ "field": {
+ "const": "pools",
+ "description": "The token's pool count. Follows the index stream: the number of pools the token trades in.",
+ "type": "string"
+ },
+ "op": {
+ "const": "changes",
+ "description": "changes: the field moved from its baseline (the count went up). It takes no value.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op"
+ ],
+ "title": "pools changes",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that holds on the evaluation where the token's count of lookalikes of its ticker group moved from its baseline (the count went up). The first reading records the baseline and does not fire, and a null reading is no observation. On a screen it needs a state clause beside it, a baseline is kept only for a token meeting the state clauses, and a token that enters them and changes in the same batch is seen at its next change. Token watch only, and the only clause of its watch. The token must be one whose ticker group has a verification at trust 3 or better (circle_docs, project_site, manual or launchpad_official), the only groups lookalikes are found for: a token that is not verified, or whose group has no such verification, is refused.",
+ "properties": {
+ "field": {
+ "const": "lookalikes",
+ "description": "The token's count of lookalikes of its ticker group. Follows the index stream: the number of tokens that imitate the token's verified ticker group.",
+ "type": "string"
+ },
+ "op": {
+ "const": "changes",
+ "description": "changes: the field moved from its baseline (the count went up). It takes no value.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op"
+ ],
+ "title": "lookalikes changes",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that holds on the evaluation where the token's primary-route sell-check verdict moved from its baseline (the verdict differs). The first reading records the baseline and does not fire, and a null reading is no observation. On a screen it needs a state clause beside it, a baseline is kept only for a token meeting the state clauses, and a token that enters them and changes in the same batch is seen at its next change.",
+ "properties": {
+ "field": {
+ "const": "safety_verdict",
+ "description": "The token's primary-route sell-check verdict. Measured before a watch sees a new token that has a USDC pool, and again when a search or quote measures the token. A token with no USDC pool, or whose check did not answer within its window, reads null, which never matches. Launchpad meme coins usually carry a fixed buy and sell tax, so a sellable one is most often taxed, not ok: use in [ok, taxed] to keep them, and eq ok only to leave every taxed token out.",
+ "type": "string"
+ },
+ "op": {
+ "const": "changes",
+ "description": "changes: the field moved from its baseline (the verdict differs). It takes no value.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op"
+ ],
+ "title": "safety_verdict changes",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that holds on the evaluation where the token's exit risk level moved from its baseline (the level differs or a new liquidity pull appears). The first reading records the baseline and does not fire, and a null reading is no observation. On a screen it needs a state clause beside it, a baseline is kept only for a token meeting the state clauses, and a token that enters them and changes in the same batch is seen at its next change. A move to a worse level, or a new liquidity pull, fires at once, inside the cooldown; any other move waits for it.",
+ "properties": {
+ "field": {
+ "const": "exit_risk",
+ "description": "The token's exit risk level. Announced from live and search work only: the rating exists once the exit-risk stage has rated the token. A token it has not rated yet reads null, which never matches; null is not unknown, a stored level a rating can carry. Separate from the sell-check verdict: a token can sell today and still rate high. An in or eq clause fires when the level enters the set; a worse level (low or unknown, then elevated, then high) or a new liquidity pull fires at once even inside the watch cooldown. Inside the cooldown the level is compared with the level at the last fire, so a fall and a return to it does not fire again; after the cooldown it is compared with the last level seen.",
+ "type": "string"
+ },
+ "op": {
+ "const": "changes",
+ "description": "changes: the field moved from its baseline (the level differs or a new liquidity pull appears). It takes no value.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op"
+ ],
+ "title": "exit_risk changes",
+ "type": "object"
+ }
+ ],
+ "description": "One typed clause on a token field."
+ },
+ "maxItems": 8,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "kind",
+ "where"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "An agent screen: names no agent. It watches every agent of the chain's directory and fires for each one that is registered after the watch was made, or changes, and meets every `where` clause.",
+ "properties": {
+ "chainId": {
+ "description": "The chain whose directory to watch: the one chain this deployment serves (5042, Arc mainnet). Any other is refused.",
+ "exclusiveMinimum": 0,
+ "maximum": 9007199254740991,
+ "type": "integer"
+ },
+ "kind": {
+ "const": "agents",
+ "description": "Fires for any agent of the chain's directory that is registered or changes, not for one named agent.",
+ "type": "string"
+ },
+ "on": {
+ "description": "What fires the watch, one or more of registered (an agent registered after this watch was made) and updated (an agent's data changed). Omitted: both.",
+ "items": {
+ "enum": [
+ "registered",
+ "updated"
+ ],
+ "type": "string"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "where": {
+ "description": "Up to eight clauses, all of which must hold (AND only), the directory search's own filters. At most one query clause and one fetchStatus clause. Omitted or empty: every agent.",
+ "items": {
+ "anyOf": [
+ {
+ "additionalProperties": false,
+ "description": "A clause that the agent declares one capability. Several of them all must hold.",
+ "properties": {
+ "field": {
+ "const": "capabilities",
+ "description": "The agent's declared capabilities, from its last good registration file.",
+ "type": "string"
+ },
+ "op": {
+ "const": "has",
+ "description": "has: the agent declares this capability.",
+ "type": "string"
+ },
+ "value": {
+ "additionalProperties": false,
+ "description": "The capability the agent must declare: its kind and its name, matched case-insensitively and exactly, as the directory search takes it.",
+ "properties": {
+ "kind": {
+ "description": "What the registration file declares: an MCP tool, an A2A skill, an OASF skill or an OASF domain.",
+ "enum": [
+ "mcp_tool",
+ "a2a_skill",
+ "oasf_skill",
+ "oasf_domain"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "The tool, skill or domain name, matched case-insensitively and exactly.",
+ "maxLength": 200,
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "value"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "capabilities has",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the agent declares one protocol. Several of them all must hold. x402 support is `protocols has x402`.",
+ "properties": {
+ "field": {
+ "const": "protocols",
+ "description": "The protocols the agent declares: MCP or A2A as a service of its registration file, x402 as its x402Support flag.",
+ "type": "string"
+ },
+ "op": {
+ "const": "has",
+ "description": "has: the agent declares this protocol.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The protocol the agent must declare. One of MCP, A2A, x402.",
+ "enum": [
+ "MCP",
+ "A2A",
+ "x402"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "protocols has",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the registration file's fetch state is one value. At most one per screen.",
+ "properties": {
+ "field": {
+ "const": "fetchStatus",
+ "description": "The state of the agent's registration file fetch.",
+ "type": "string"
+ },
+ "op": {
+ "const": "eq",
+ "description": "eq: the fetch state is exactly the value.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The fetch state the agent must be in. One of fetched, failed, never_fetched.",
+ "enum": [
+ "fetched",
+ "failed",
+ "never_fetched"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "fetchStatus eq",
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "A clause that the agent's name or description contains some text. At most one per screen.",
+ "properties": {
+ "field": {
+ "const": "query",
+ "description": "The name and description of the agent's last good registration file.",
+ "type": "string"
+ },
+ "op": {
+ "const": "contains",
+ "description": "contains: the text is a case-insensitive substring of the name or the description, no wildcards.",
+ "type": "string"
+ },
+ "value": {
+ "description": "The text to look for.",
+ "maxLength": 200,
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "field",
+ "op",
+ "value"
+ ],
+ "title": "query contains",
+ "type": "object"
+ }
+ ],
+ "description": "One typed clause on an agent, the same filters the directory search takes."
+ },
+ "maxItems": 8,
+ "type": "array"
+ }
+ },
+ "required": [
+ "kind",
+ "chainId"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "An agent watch: it names one agent and fires when one of the `on` kinds happens to it: its data changes, its owner or payment wallet changes, its registration file URI changes, it receives feedback, or its registration file is fetched or fails to be.",
+ "properties": {
+ "agentId": {
+ "description": "The agent's token id in the chain's IdentityRegistry. An agent the directory does not hold is refused as agent_not_found.",
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "chainId": {
+ "description": "The chain the agent is registered on: the one chain this deployment serves (5042, Arc mainnet). Any other is refused.",
+ "exclusiveMinimum": 0,
+ "maximum": 9007199254740991,
+ "type": "integer"
+ },
+ "kind": {
+ "const": "agent",
+ "description": "Fires when the named agent changes.",
+ "type": "string"
+ },
+ "on": {
+ "description": "What fires the watch, one or more of updated, owner_changed, wallet_changed, uri_changed, feedback, fetch_failed, fetch_ok. Omitted: every kind.",
+ "items": {
+ "enum": [
+ "updated",
+ "owner_changed",
+ "wallet_changed",
+ "uri_changed",
+ "feedback",
+ "fetch_failed",
+ "fetch_ok"
+ ],
+ "type": "string"
+ },
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "kind",
+ "chainId",
+ "agentId"
+ ],
+ "type": "object"
+ }
+]