---
title: "ICM Quorum Forgery Classifier"
method: POST
path: "/v1/tools/check_icm_quorum_forgery_risk"
tags: ["TODO_TAGS_REVIEW", "TODO_AP2_EXPORT_REVIEW"]
---

# ICM Quorum Forgery Classifier

`POST /v1/tools/check_icm_quorum_forgery_risk`

## Request

- Base URL: `https://ainumbers.co`
- URL: `https://ainumbers.co/v1/tools/check_icm_quorum_forgery_risk`
- Auth: none declared

Computes the smallest set of a source Avalanche L1's validators that could jointly sign an Interchain Messaging (ICM / Avalanche Warp Messaging) message the receiving L1 would accept: sorts the caller-transcribed stake weights descending, prefix-sums them, and returns the count at which the receiving chain's accepted stake-weight quorum is first satisfied, alongside that group's cumulative share, an HHI-style stake concentration figure, and a verdict against a caller-declared minimum-colluding floor. Quorum semantics follow avalanchego's Warp signature check (signed weight times 100 greater than or equal to total weight times the quorum percentage), evaluated cross-multiplied so no division rounding moves the boundary. The accepted quorum is a caller input with no baked-in default threshold, because it is the receiving chain's own acceptance policy for that source rather than a statutory number, following the precedent art-445 sets by refusing to bake in a concentration limit. Avalanche finality is sub-second with no reorg window, so the challenge-window arithmetic that applies to optimistic bridges does not transfer; this node picks up where that risk relocates, namely who signed the cross-chain message. Borrows only the art-445 helper pattern (fixed-point 2dp rounding, share-of-total, finite gate, NaN-safe coercion); art-445 computes top-N and per-sector rollups and does not compute a minimum-colluding set. Observes no chain: no RPC call and no P-Chain query, with the validator set transcribed by the caller as opaque identifiers. Zero network, zero PII.

**Tool URL:** https://ainumbers.co/chaingraph/art-494-icm-quorum-forgery-classifier.html

## Request body

- object
  - `message_class` unknown, required
  - `min_colluding_floor` unknown, required
  - `quorum_pct` unknown, required
  - `source_l1_label` unknown, required
  - `validator_weights` unknown[], required
    - unknown

## Response `200`

Successful tool execution result

- object
  - `colluding_share_pct` integer
  - `colluding_stake_weight` integer
  - `meets_floor` boolean
  - `message_class` string
  - `min_colluding_floor` integer
  - `min_colluding_validators` integer
  - `quorum_pct` integer
  - `quorum_pct_valid` boolean
  - `quorum_reachable` boolean
  - `rationale` string[]
  - `source_l1_label` string
  - `stake_hhi` integer
  - `total_stake_weight` integer
  - `total_validators` integer

---

[API](https://skmtc.dev/ainumbers/apis/ainumbers-co-fintech-intelligence-suite.md) · [All operations](https://skmtc.dev/ainumbers/apis/ainumbers-co-fintech-intelligence-suite/llms.txt) · [OpenAPI document](https://skmtc.dev/ainumbers/apis/ainumbers-co-fintech-intelligence-suite/revisions/b462e4f5bb28?raw)
