{"service":"ChainVerdict","methodologyVersion":"cv-2.1.0","published":"2026-10-02T17:06:47.424Z","principle":"Every paid response states what was checked, when, from which source, how the answer was produced, and what it does not mean. Signals are designed to be verifiable by the buyer rather than trusted on assertion.","evidenceModel":{"assurance":"assurance.level is an ordinal label describing HOW an answer was produced (deterministic / structural / observed / exact-list-match / heuristic). It is deliberately NOT a numeric score, because a number implies calibration that ChainVerdict has not performed. No level should be read as a probability that a subject is safe, legitimate or correct.","calibration":"ChainVerdict does NOT currently publish precision, recall or calibration metrics for its heuristic checks, and does not claim they are calibrated. Heuristic levels are labelled as such precisely so that a buyer does not mistake them for validated statistical estimates.","integrityVsTruth":"Signing proves provenance and integrity: this response came from ChainVerdict and was not altered. It does not prove the conclusion is correct. A signed wrong answer is still wrong, and is still signed.","freshness":"freshness.basis states how the answer ages. 'deterministic' never goes stale. 'live-chain', 'live-dns' and 'live-tls' are point-in-time observations. 'daily-refresh' depends on an upstream list and carries a stale-data risk that is stated explicitly.","limitations":"Every response carries the specific limitations of that check plus service-wide limitations. These are part of the product, not a disclaimer footer.","signature":"Responses carry an Ed25519 signature in an x-signature header, computed over canonical JSON (keys sorted recursively, UTF-8) concatenated with '|' and the x-signed-at timestamp. The public key is published as base64 SPKI at /.well-known/signing-key.json, which states the exact verification recipe. This is not the compact-JWS form used by TradeRails and x402pulse; the browser verifier at https://pulse.chainverdict.xyz/verify checks both forms — paste the JSON body plus the x-signature and x-signed-at header values. See integrityVsTruth above for what a valid signature does not establish."},"globalLimitations":["ChainVerdict returns informational signals for automated decision support. It is not regulated financial, legal, tax or compliance advice, and it does not discharge any legal or regulatory obligation you may have.","No result should be treated as a guarantee. Absence of a negative signal is not a positive assurance."],"endpoints":[{"pathPrefix":"/v1/token/verdict","decision":"token_risk","subject":"ERC-20 contract","checksPerformed":["Bytecode capability scan (risk-bearing functions)","Ownership / privileged-role presence","Token metadata consistency","Composite 0-100 score → hold / caution / avoid"],"dataSources":[{"name":"Base mainnet RPC (contract bytecode + metadata)","refresh":"per-request"}],"freshness":{"basis":"live-chain","maxUsefulAgeSeconds":60},"assurance":{"level":"heuristic","basis":"heuristic static analysis; no execution, no audit, no liquidity or market analysis; not validated against a labelled dataset"},"humanApprovalRecommended":"unless_hold","limitations":["Heuristic static analysis — NOT a security audit and not a substitute for one.","A proxy contract can change its implementation after this check; the result describes the contract as observed at the stated block only.","Does not analyse liquidity, holder distribution, market manipulation, wash trading, or off-chain claims about the project.","'hold' is the absence of detected red flags, not a judgement that the token is a sound holding. Nothing here is investment advice."]},{"pathPrefix":"/v1/wallet/dossier","decision":"address_profile","subject":"Base address","checksPerformed":["EOA vs contract detection","Native balance","Activity band","Heuristic flags"],"dataSources":[{"name":"Base mainnet RPC","refresh":"per-request"}],"freshness":{"basis":"live-chain","maxUsefulAgeSeconds":60},"assurance":{"level":"observed-with-heuristics","basis":"balances and code presence are direct chain reads; behavioural flags are heuristic"},"humanApprovalRecommended":"no","limitations":["Describes on-chain state at the stated block. It does not identify the owner of the address.","Flags are behavioural heuristics, not accusations. 'unused_address' is common in legitimate first-time payments."]},{"pathPrefix":"/v1/verify/payment","decision":"payment_verification","subject":"transaction hash","checksPerformed":["Transaction receipt lookup","ERC-20 Transfer log decoding","Counterparties and amounts","Confirmation depth"],"dataSources":[{"name":"Base mainnet RPC","refresh":"per-request"}],"freshness":{"basis":"live-chain","maxUsefulAgeSeconds":30},"assurance":{"level":"observed","basis":"direct receipt and log decoding; deterministic given the chain state at the stated block"},"humanApprovalRecommended":"no","limitations":["Reports what the chain records. Low confirmation counts remain theoretically reorg-exposed; check the confirmations field before treating a payment as final.","Does not verify that the payment settles any particular off-chain obligation."]},{"pathPrefix":"/v1/verify/token","decision":"canonical_token_check","subject":"token address or symbol","checksPerformed":["Match against ChainVerdict's curated canonical Base token list (USDC, EURC, WETH, cbBTC, USDT)"],"dataSources":[{"name":"ChainVerdict curated canonical token list","refresh":"manual"}],"freshness":{"basis":"curated","maxUsefulAgeSeconds":null},"assurance":{"level":"exact-list-match","basis":"exact match against a small hand-maintained allowlist; the list is not exhaustive"},"humanApprovalRecommended":"on_mismatch","limitations":["Covers a small curated set of major Base tokens. 'Not canonical' means 'not on this list' — it is not a claim that the token is fraudulent.","The list is maintained manually and may lag new canonical deployments."]},{"pathPrefix":"/v1/security/email","decision":"email_spoofing_posture","subject":"domain","checksPerformed":["SPF record lookup","DMARC policy lookup","DKIM selector lookup (when supplied)"],"dataSources":[{"name":"Live public DNS","refresh":"per-request"}],"freshness":{"basis":"live-dns","maxUsefulAgeSeconds":3600},"assurance":{"level":"observed","basis":"direct DNS observation at request time; subject to resolver caching"},"humanApprovalRecommended":"no","limitations":["Describes published DNS policy, not whether a specific message was authentic.","DNS caching means a very recent record change may not yet be visible.","Absence of DKIM at the probed selector does not prove DKIM is unconfigured; selectors are arbitrary."]},{"pathPrefix":"/v1/security/tls","decision":"tls_posture","subject":"hostname","checksPerformed":["TLS handshake","Certificate validity window","Issuer","Expiry countdown"],"dataSources":[{"name":"Live TLS handshake, port 443","refresh":"per-request"}],"freshness":{"basis":"live-tls","maxUsefulAgeSeconds":3600},"assurance":{"level":"observed","basis":"direct observation of the certificate presented to this server at this moment"},"humanApprovalRecommended":"no","limitations":["Observes the certificate presented to this server at this moment; a different client, SNI or geography may be served a different certificate.","A valid certificate proves control of the hostname, not the honesty of its operator."]},{"pathPrefix":"/v1/security/typosquat","decision":"brand_impersonation_signal","subject":"domain","checksPerformed":["Homoglyph substitution detection","Edit-distance comparison against a brand list"],"dataSources":[{"name":"ChainVerdict curated brand list + string analysis","refresh":"manual"}],"freshness":{"basis":"deterministic","maxUsefulAgeSeconds":null},"assurance":{"level":"heuristic","basis":"string-similarity heuristic; brand list is not exhaustive; not validated against a labelled dataset"},"humanApprovalRecommended":"on_match","limitations":["Similarity to a brand is a signal, not proof of malicious intent; legitimate domains can resemble brands.","The brand list is finite — a non-match does not mean the domain is not impersonating something.","Does not inspect site content, registration data, or reputation."]},{"pathPrefix":"/v1/data/","decision":"chain_data","subject":"chain object","checksPerformed":["Direct Base mainnet read"],"dataSources":[{"name":"Base mainnet RPC","refresh":"per-request"}],"freshness":{"basis":"live-chain","maxUsefulAgeSeconds":30},"assurance":{"level":"observed","basis":"direct chain read at the stated block"},"humanApprovalRecommended":"no","limitations":["Point-in-time chain state. Values change every block (~2s on Base); treat as immediately perishable."]},{"pathPrefix":"/v1/validate/iban","decision":"identifier_validation","subject":"IBAN","checksPerformed":["ISO 13616 structure","Country-specific length rule","MOD-97-10 check digits"],"dataSources":[{"name":"ISO 13616 / ECBS country register (bundled rules)","refresh":"with releases"}],"freshness":{"basis":"deterministic","maxUsefulAgeSeconds":null},"assurance":{"level":"deterministic","basis":"the checksum arithmetic is certain; this says nothing about real-world existence or status"},"humanApprovalRecommended":"no","limitations":["Validates structure and check digits only. A structurally valid identifier is NOT proof that the account, entity or instrument exists, is active, or belongs to the party you are transacting with.","Does not confirm the account is open, the holder's identity, or that the bank will accept a transfer."]},{"pathPrefix":"/v1/validate/vat","decision":"identifier_validation","subject":"EU VAT number","checksPerformed":["Country prefix and format","Deterministic checksum where defined (DE, IT, LU, PL, SI)"],"dataSources":[{"name":"Published national VAT checksum rules (bundled)","refresh":"with releases"}],"freshness":{"basis":"deterministic","maxUsefulAgeSeconds":null},"assurance":{"level":"deterministic-partial","basis":"checksum arithmetic is certain where implemented; format-only for other member states"},"humanApprovalRecommended":"no","limitations":["Validates structure and check digits only. A structurally valid identifier is NOT proof that the account, entity or instrument exists, is active, or belongs to the party you are transacting with.","Checksums are implemented for a subset of member states; others are format-checked only.","This is NOT a VIES registration check. It does not confirm the number is currently registered or valid for intra-EU supply."]},{"pathPrefix":"/v1/validate/bic","decision":"identifier_validation","subject":"BIC/SWIFT","checksPerformed":["ISO 9362 structure","Component decomposition (institution, country, location, branch)"],"dataSources":[{"name":"ISO 9362 structural rules (bundled)","refresh":"with releases"}],"freshness":{"basis":"deterministic","maxUsefulAgeSeconds":null},"assurance":{"level":"structural","basis":"structure is certain; BIC carries no check digit and no registry lookup is performed"},"humanApprovalRecommended":"no","limitations":["Validates structure and check digits only. A structurally valid identifier is NOT proof that the account, entity or instrument exists, is active, or belongs to the party you are transacting with.","BIC has no check digit. Structural validity does not confirm the code is assigned to an operating institution — that requires the SWIFT registry."]},{"pathPrefix":"/v1/validate/lei","decision":"identifier_validation","subject":"LEI","checksPerformed":["ISO 17442 format","MOD-97-10 check digits"],"dataSources":[{"name":"ISO 17442 (bundled)","refresh":"with releases"}],"freshness":{"basis":"deterministic","maxUsefulAgeSeconds":null},"assurance":{"level":"deterministic","basis":"the checksum arithmetic is certain; this says nothing about real-world existence or status"},"humanApprovalRecommended":"no","limitations":["Validates structure and check digits only. A structurally valid identifier is NOT proof that the account, entity or instrument exists, is active, or belongs to the party you are transacting with.","Does not query GLEIF. It cannot tell you the entity name or whether the LEI registration is Issued, Lapsed or Retired."]},{"pathPrefix":"/v1/validate/isin","decision":"identifier_validation","subject":"ISIN","checksPerformed":["ISO 6166 format","Luhn check digit"],"dataSources":[{"name":"ISO 6166 (bundled)","refresh":"with releases"}],"freshness":{"basis":"deterministic","maxUsefulAgeSeconds":null},"assurance":{"level":"deterministic","basis":"the checksum arithmetic is certain; this says nothing about real-world existence or status"},"humanApprovalRecommended":"no","limitations":["Validates structure and check digits only. A structurally valid identifier is NOT proof that the account, entity or instrument exists, is active, or belongs to the party you are transacting with.","Does not confirm the security exists, is listed, or is tradeable. No reference-data lookup is performed."]},{"pathPrefix":"/v1/batch/validate","decision":"identifier_validation","subject":"identifier batch","checksPerformed":["Per-item structural and checksum validation (iban, vat, bic, lei, isin)"],"dataSources":[{"name":"Bundled standards rules","refresh":"with releases"}],"freshness":{"basis":"deterministic","maxUsefulAgeSeconds":null},"assurance":{"level":"deterministic","basis":"per-item checksum arithmetic is certain; see each item type's limitations"},"humanApprovalRecommended":"no","limitations":["Validates structure and check digits only. A structurally valid identifier is NOT proof that the account, entity or instrument exists, is active, or belongs to the party you are transacting with."]},{"pathPrefix":"/v1/doc/","decision":"transformation","subject":"document","checksPerformed":["Deterministic text transformation"],"dataSources":[{"name":"Request payload only","refresh":"n/a"}],"freshness":{"basis":"deterministic","maxUsefulAgeSeconds":null},"assurance":{"level":"deterministic","basis":"deterministic transformation of the supplied input"},"humanApprovalRecommended":"no","limitations":["Operates only on the text you supplied. No external data is consulted and no claim is made about its accuracy."]}],"corrections":"Errors, false positives and false negatives can be reported to contact@chainverdict.xyz. Material methodology changes increment methodologyVersion and are reflected in this document."}