Skip to content
StockSync
Docs · Canonical verification

Concepts

Canonical verification

A contract is a canonical Robinhood Stock Token deployment only if the Robinhood Stock Token registry lists that address for that chain. StockSync checks exactly that, and nothing else.

A matching ticker, token name or logo proves nothing: anyone can deploy a contract that copies them.

What StockSync checks

  1. The address is 0x followed by 40 hexadecimal characters. Mixed-case addresses must carry a valid EIP-55 checksum; all-lowercase addresses are accepted.
  2. The registry is searched for a deployment with that address on the requested chain.
  3. If you pass an expected ticker, the matched token is compared with it.

Verdicts

StatusMeaning
canonicalThe registry lists the address as a deployment of the token on this chain
symbol-mismatchThe address is a registered deployment, but of a different token than expected
not-canonicalThe registry does not list the address on this chain

A not-canonical verdict carries a reason:

  • address-not-in-registry: no chain in the registry lists the address.
  • registered-on-other-chain: the address is a Stock Token deployment on a different chain. registeredChainIds says which.

Inactive tokens remain canonical. Check the token’s status separately.

Not verified is not malicious

not-canonical means StockSync cannot confirm the address is a Robinhood Stock Token. It is not a finding that the contract is malicious, and no StockSync surface describes it that way. Treat it as “do not use this address as a Stock Token”, not as a security verdict about the contract.

From the CLI

bash
stocksync verify 0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC --symbol NVDA

Without --strict, the command exits 0 whenever the check completes. With --strict, it exits 6 unless the address is canonical for the expected ticker, which makes it safe to use as a gate in deployment scripts.

From an agent

The MCP tool verify_stock_token takes address, an optional expectedSymbol and an optional chain. Its result includes status, a boolean canonical, the matched token, and an explanation written for the model to relay. The server’s instructions tell agents that only this tool establishes canonical status.

From the SDK

ts
const { data: verdict, freshness } = await stocksync.verifyCanonicalAddress({
  address: '0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC',
  chainId: 4663,
  expectedSymbol: 'NVDA',
});

freshness is the registry response the verdict was based on. Verdicts are only as current as that response, which StockSync reuses for up to one minute.