A deterministic risk layer for autonomous trading agents.
Collar Guardrail provides deterministic, advisory pre-trade risk evaluation for autonomous agents operating on Robinhood Chain.
allow response as a stop condition until
its own policy says otherwise.
Quickstart
The script below authenticates a wallet and runs a pre-trade risk check in four steps. It is complete and runnable as-is.
import requests
from eth_account import Account
from eth_account.messages import encode_defunct
BASE_URL = "https://api.collarguardrail.com"
PRIVATE_KEY = "0x..." # your agent's private key
account = Account.from_key(PRIVATE_KEY)
wallet_address = account.address
# 1. Request a one-time nonce (returns the exact message to sign)
res = requests.get(
f"{BASE_URL}/api/v1/auth/nonce",
params={"address": wallet_address},
)
res.raise_for_status()
message_to_sign = res.json()["message"]
# 2. Sign the returned message (EIP-191)
signature = Account.sign_message(
encode_defunct(text=message_to_sign),
private_key=PRIVATE_KEY,
).signature.hex()
# 3. Exchange signature for a JWT
auth = requests.post(
f"{BASE_URL}/api/v1/auth/wallet",
json={"address": wallet_address, "signature": signature},
)
auth.raise_for_status()
token = auth.json()["access_token"]
# 4. Evaluate a proposed trade before signing it
verdict = requests.post(
f"{BASE_URL}/api/v1/analyze/trade",
headers={"Authorization": f"Bearer {token}"},
json={
"wallet": wallet_address,
"asset": "NVDA",
"side": "buy",
"amount": 10.0,
"contract_address": "0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC",
"request_id": "quickstart-test-001",
},
)
print(verdict.json())
message field from step 1 is the exact string
that must be signed. It contains a fresh nonce and specific
whitespace. A locally-constructed variant will fail signature
verification. See Authentication.
Why the examples use NVDA
Robinhood Chain's distinguishing feature is tokenized US
equities. NVDA is the canonical example
throughout this document because it is a registered asset on
the official registry, has a live Chainlink oracle, and
exercises every stock-specific check (market hours,
oraclePaused(), staleness windows). Using a
generic ERC-20 would make the stock-token behavior invisible.
The address shown is the real canonical contract — if you are
integrating a different token, resolve its address from
/api/v1/assets rather than
copying this one.
Why Collar exists
Robinhood Chain is a blockchain built for autonomous trading agents. Those agents are fast, tireless, and increasingly handling real capital.
They are also probabilistic. An LLM-based agent can hallucinate a contract address, drift from its own risk rules under pressure, or be steered by a prompt injection embedded in data it happened to read. When that happens, the agent does not pause. It executes.
Existing risk tooling was not built for this. Most platforms use machine learning to monitor activity across many chains — the right model for institutional security, but not for an independent agent developer who needs a deterministic second opinion in one HTTP call.
Collar does not try to be smarter than the agent. It tries to be predictable in a way the agent cannot be. It sits outside the agent's runtime, at the last point before a trade is signed, and returns one of three verdicts.
| Verdict | Meaning |
|---|---|
| allow | No configured rule was violated. |
| warn | A soft condition was detected — elevated risk score, nearing a limit, unusual frequency. The integrating agent decides its own policy. |
| deny | A policy rule was violated. Do not submit the trade. The reason is included in the response. |
When to use Collar
Autonomous trading agents
Insert one HTTP call before signing each trade. A deny is a stop signal; the agent does not proceed.
Trading frontends and bots
Evaluate a user's trade before submission and surface the verdict in the UI. A deny becomes a stop button.
DeFi protocols
Use Collar as an independent second opinion before liquidations or large position changes. Deterministic verdicts are auditable.
Evaluation and testing
The unauthenticated free endpoint and the MCP tools are available without a COLR balance for smoke tests and demos.
Design choices
Several tools already watch on-chain activity — most are excellent for their intended audience. Collar is built around five specific choices.
| Choice | What it means |
|---|---|
| REST-first, MCP-optional | Most guardrails ship as MCP servers only, which work only for MCP-capable clients. Collar exposes both a plain HTTP REST API and an MCP endpoint at /mcp-http/mcp. |
| Deterministic, not ML | The policy engine is a fixed rule set. Same input, same output, with a reason attached. No probabilistic scoring, no drift, no prompt surface. |
| Advisory, not enforced | Collar returns a verdict; it does not block a transaction at the sequencer. The integrating agent is responsible for honoring a deny. Stated plainly so no integrator assumes a guarantee that is not yet there. |
| Stock-token aware | Tokenized equities have failure modes generic tools do not model: corporate actions that pause the oracle, weekend staleness, dividend and split multipliers. Collar reads oraclePaused() and applies stock-specific staleness windows including the US holiday calendar. |
| Cluster-aware | Runaway and daily-loss checks are enforced per wallet cluster, not per address. Deriving a fresh wallet funded from the same source does not reset either counter. |
Overview
Network
| Parameter | Value |
|---|---|
| Chain | Robinhood Chain (mainnet) |
| Chain ID | 4663 |
| CAIP-2 identifier | eip155:4663 |
| Gas token | ETH |
| Public RPC | https://rpc.mainnet.chain.robinhood.com |
| Block explorer | https://explorer.mainnet.chain.robinhood.com |
| USDG contract | 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 |
| WETH contract | 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73 |
What is evaluated
Each request is checked against the following dimensions in a fixed order:
- USD notional limit for the caller's access tier.
- Real-time Chainlink oracle price for the asset.
- Uniswap V4 pool price as a fallback when the oracle is unavailable.
- Corporate-action pause state (
oraclePaused()) for tokenized equities. - Feed staleness relative to the current market session.
- Oracle-vs-pool divergence (slippage / MEV guard).
- Per-wallet blocked-asset configuration.
- Cluster request frequency (runaway-agent detection).
- Cluster 24-hour realized P&L (daily-loss guard).
- Contract-address match against the official registry.
- Token safety heuristics for unregistered contracts.
Token safety heuristics are advisory-only. They surface findings
as ADVISORY: reasons and do not by themselves
produce a deny. The dedicated
token-safety
endpoint exposes the raw check on demand.
COLR and access tiers
COLR is an access and tier-gating token, not the trade currency. Trades may involve any supported asset (ETH, USDG, tokenized equities). The wallet's COLR balance determines the maximum notional per trade.
| Tier | COLR balance | Max trade notional | Also unlocked by |
|---|---|---|---|
| TIER 1 | 1,000+ COLR | $5,000 USD | Default for the free endpoint, MCP, and preview mode |
| TIER 2 | 2,500+ COLR | $25,000 USD | An x402-settled call — no COLR balance required |
| TIER 3 | 5,000+ COLR | $100,000 USD | — |
COLR is an 18-decimal ERC-20. Tier minimums above are expressed in whole COLR, not base units.
X-Preview-Tier header on an authenticated request
— see Rate Limiting. This header is
retired automatically once the token is deployed.
Verdicts
| Decision | Meaning |
|---|---|
| allow | No configured rule violation was detected. The integrating agent may proceed. |
| warn | A soft condition was detected. The integrating agent decides its own policy: log, slow down, alert, or block. |
| deny | One or more policy rules were violated. Do not submit the trade. Reasons are always included. |
Verdicts are advisory. Collar does not currently enforce the decision at the blockchain or sequencer level.
Price resolution
Prices are resolved in a strict order. The first source that produces a valid value wins:
-
Chainlink oracle — primary source. A feed
is rejected if
oraclePaused()is true, if the answer is zero or negative, or if it is older than the freshness window (120 s during US market hours). - Uniswap V4 pool — fallback. If the oracle is unavailable, Collar reads the token's V4 pool directly. For registered assets the contract address has already been validated against the registry, so the pool queried is for the canonical token.
-
Refusal — if neither source produces a
price, the verdict is
deny. Collar does not substitute a hardcoded number; a fabricated price would make the notional check meaningless.
The price_source field identifies which path was taken:
| Value | Meaning | Trusted |
|---|---|---|
oracle | Chainlink oracle mark. | yes |
uniswap_v4 | Live Uniswap V4 pool spot. | yes |
unavailable | No price could be produced; the verdict is deny. | deny |
Unregistered tokens
Contracts that are not on the official Robinhood RWA registry
are evaluated under a stricter policy. By default, a trade on
an unregistered contract is deny. The caller can
opt in per request with allow_unregistered: true.
| Constraint | Value |
|---|---|
| Max notional for unregistered assets | $500 USD |
| Baseline risk score contribution | +50 |
| Hard ceiling on risk score | 95 / 100 |
Token intelligence for unregistered contracts is sourced from
an external security provider and cached for five minutes.
Contracts that fail both the registry check and the external
intelligence check are deny.
Slippage and MEV guard
When the reference price comes from the oracle, Collar also reads the live V4 pool spot and compares the two.
| Divergence | Outcome |
|---|---|
≤ half of max_slippage_bps | Allow (silent) |
> half but ≤ max_slippage_bps | Allow with an advisory note |
> max_slippage_bps | Deny — trade would likely execute outside the caller's tolerance |
| > 500 bps | Deny regardless of the caller's tolerance — the pool may be illiquid or manipulated |
Set max_slippage_bps in the request body to
declare a tolerance. Default is 100 bps; maximum is 1000. The
500 bps floor overrides any wider tolerance.
Asset registry
Returns every supported symbol and its canonical contract address. Robinhood adds tokens over time — refresh periodically rather than caching indefinitely.
[
{
"symbol": "NVDA",
"contract_address": "0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC",
"is_native": false
},
{
"symbol": "ETH",
"contract_address": "NATIVE",
"is_native": true
}
]
Blocked-asset policy (Tier 2 and above)
Returns the caller's current policy configuration.
{
"blocked_assets": ["MEME", "XYZ"],
"editable": true
}
Replaces the blocked-asset list. Editable only for Tier 2 and Tier 3 wallets.
{ "blocked_assets": ["MEME", "XYZ"] }
Any trade request against a blocked asset receives a deny verdict.
Rate limiting and runaway-agent detection
Collar enforces two independent categories of rate limiting. The first governs API access. The second governs trade behavior.
API access limits (per client IP)
| Endpoint group | Limit | Window |
|---|---|---|
Auth (/auth/nonce, /auth/wallet) | 20 requests | 60 s |
Free analyze (/analyze/free) | 60 requests | 60 s |
| Public endpoints (token safety, simulation, audit) | 10–30 requests, by cost | 60 s |
A 429 response includes Retry-After
and X-RateLimit-* headers so clients can back off
correctly.
Runaway-agent detection (per wallet cluster)
Trade evaluation frequency is tracked on a rolling 60-second window, keyed on the wallet's funding cluster rather than its address. A cluster is derived from the EOA addresses that funded the wallet in the previous seven days. Deriving a fresh wallet funded from the same source does not reset the counter.
| Tier | Warn above | Deny above |
|---|---|---|
| Tier 1 | 5 trades/min | 15 trades/min |
| Tier 2 | 10 trades/min | 25 trades/min |
| Tier 3 | 20 trades/min | 50 trades/min |
There is no separate per-endpoint limit on
/analyze/trade beyond this table — the cluster
check is the runaway protection.
While COLR has not launched, every authenticated wallet is
evaluated at Tier 1. To exercise Tier 2 or Tier 3 rate limits
before launch, send the X-Preview-Tier: 2 (or
3) header on an authenticated request. This header
is honored only on requests carrying a valid JWT and is ignored
on the free and x402 endpoints. It is retired automatically
once COLR is deployed.
Daily-loss guard
Collar reads the wallet cluster's on-chain net flow over the previous 24 hours and compares it against two thresholds.
| Condition | Outcome |
|---|---|
| Net flow ≤ −$1,000 | deny — hard daily-loss limit reached |
| Net flow ≤ −$200 | warn — the trade is allowed with an advisory note |
Like the runaway check, this runs on the wallet cluster rather than the individual address. If cluster resolution fails, the check falls back to the individual wallet's P&L rather than skipping — a resolution failure is never a path to reset the counter.
Market hours
US equity markets are open Monday–Friday, 14:30–21:00 UTC. Collar adjusts staleness tolerance accordingly and applies early-close windows.
- Weekends: fully closed.
- Full-day holidays: New Year, MLK Day, Presidents Day, Memorial Day, Juneteenth, Independence Day, Labor Day, Thanksgiving, and Christmas — with the standard observed-on-Friday / observed-on-Monday shift.
- Early close: the day after Thanksgiving and Christmas Eve (weekday) — the market closes at 18:00 UTC instead of 21:00 UTC.
Outside market hours the staleness bound widens from 120 seconds to five days: the last oracle mark is still correct when the underlying exchange is closed.
Authentication
Authentication uses wallet signatures rather than API keys. The same private key the agent uses to sign trades is used to sign a one-time login challenge. No gas, no on-chain transaction, no approvals.
Returns a one-time nonce and the exact message to sign. The nonce expires in five minutes and is single-use — deleted atomically on the first verification attempt, so a second attempt against the same nonce always fails.
The message that must be signed
message field of the nonce
response. The server reconstructs the same string during
verification, so any whitespace, line-ending, or casing
difference causes signature recovery to fail.
The message has the following shape (line endings are \n):
Sign in to the AI Trading Guardrail SaaS. Wallet: 0x1234567890123456789012345678901234567890 Nonce: 3f9c1a2b4d5e6f708192a3b4c5d6e7f8 This request will not trigger a blockchain transaction or cost gas.
The wallet address in the message is always lowercase.
Submit the address and an EIP-191 signature of the message.
{
"address": "0x1234567890123456789012345678901234567890",
"signature": "0x..."
}
{
"access_token": "eyJ...",
"expires_in_seconds": 3600,
"preview_mode": true
}
preview_mode: true indicates COLR has not launched
and the balance gate is disabled. This becomes
false after deployment.
Use the token on every subsequent request as:
Authorization: Bearer <access_token>
Immediately invalidates the caller's current token. Calling
revoke with an already-expired or malformed token returns
{"revoked": true} — the caller's goal (this token
no longer works) is satisfied either way.
Analyze a trade
Evaluates a proposed trade under the caller's access tier. Requires authentication.
Request
{
"wallet": "0x1234567890123456789012345678901234567890",
"asset": "NVDA",
"side": "buy",
"amount": 12.5,
"contract_address": "0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC",
"max_slippage_bps": 100,
"request_id": "a1b2c3d4-..."
}
Fields
| Field | Type | Description |
|---|---|---|
wallet | string | Must match the wallet in the JWT. |
asset | string | Token symbol (e.g. NVDA, ETH, USDG). |
side | string | buy or sell. |
amount | number | Quantity of the asset — not a pre-computed USD value. |
contract_address | string | Must exactly match the canonical contract for the symbol. |
max_slippage_bps | int, optional | Tolerance for oracle-to-pool divergence, in basis points. Default 100, max 1000. The 500 bps floor overrides wider values. |
request_id | string, optional | Idempotency key. Reusing one within five minutes replays the cached verdict. |
Response
{
"decision": "allow",
"reasons": ["All guardrail checks passed"],
"tier": 1,
"max_trade_usd": 5000.0,
"calculated_notional_usd": 2728.72,
"price_usd": 218.298,
"price_source": "oracle",
"risk_score": 18,
"timestamp": 1757520000,
"daily_pnl_usd": 0.0,
"request_id": "a1b2c3d4-...",
"audit_hash": "0x...",
"audit_seq": 4821
}
Reason format
Advisory notes are prefixed with ADVISORY:. Any
other entry contributed to the decision. When the verdict is
deny, surface the first non-advisory reason as
the cause.
Free endpoint
Accepts the same request body as
/api/v1/analyze/trade but requires no JWT.
Intended for the demo terminal, smoke tests, and the fallback
path used by MCP and by agents that hold no wallet identity.
- Evaluated at a fixed Tier 1 ceiling ($5,000 notional).
- The
X-Preview-Tierheader is ignored on this endpoint. - Returns the same response shape as the authenticated endpoint.
- Subject to a per-IP rate limit (see Rate Limiting).
-
The
request_ididempotency cache is shared with the authenticated endpoint. A repeated(wallet, request_id)pair within five minutes returns the cached verdict regardless of which endpoint produced it.
- Agent with a wallet key →
/v1/analyze/trade(JWT) — full tier gating. - Agent with no wallet identity →
/api/x402/analyze— pays $0.10 USDG, receives Tier 2 limits. - Demo or smoke test →
/v1/analyze/free— Tier 1, no auth. - MCP client →
/mcp-http/mcp— Tier 1 ceiling.
Public endpoints
The following endpoints are unauthenticated and rate-limited per IP. Each mirrors an MCP tool of the same name. All are evaluated under a Tier 1 ceiling and do not themselves unlock higher tiers.
Honeypot and contract-safety check for an ERC-20 contract. Combines a bytecode scan with a simulated sell. Rate limit: 20 requests / 60 s / IP.
// Request
{ "contract_address": "0x..." }
// Response
{
"severity": "safe" | "warn" | "danger",
"risk_factors": [ ... ]
}
Simulates an ERC-20 balance after a hypothetical trade using
eth_call state override. No transaction is sent.
Rate limit: 30 requests / 60 s / IP.
// Request
{
"token_address": "0x...",
"holder": "0x...",
"delta": -12.5,
"balance_slot": 3, // optional; auto-discovered if omitted
"decimals": 18
}
// Response
{
"token_address": "0x...",
"holder": "0x...",
"balance_slot": 3,
"current": 100.0,
"delta": -12.5,
"post_trade": 87.5
}
balanceOf slot cannot be determined and
none was supplied, the request fails with 422
rather than returning a silently incorrect simulated balance.
Audit trail
Every decision is appended to a tamper-evident hash chain. Each record's SHA-256 hash includes the previous record's hash, so editing, deleting, or reordering any entry breaks the chain for every subsequent entry.
| Endpoint | Purpose | Rate limit |
|---|---|---|
GET /api/v1/audit/wallet/{wallet} |
Decision history for a single wallet, newest first. | 30 / 60 s / IP |
GET /api/v1/audit/global |
System-wide decision stream. | 10 / 60 s / IP |
GET /api/v1/audit/verify/{wallet} |
Recomputes every stored hash for a wallet and verifies chain links. | 10 / 60 s / IP |
GET /api/v1/audit/verify |
System-wide integrity check across the global stream. | 10 / 60 s / IP |
All four accept a ?limit=N parameter (1–1000).
Verify endpoints return a summary
{ total, tampered, healthy } alongside per-record
results.
x402 — agent-native payments
Agents that do not hold a wallet identity can pay per call using the x402 protocol. Instead of signing a JWT, the agent settles a small USDG payment on Robinhood Chain and receives the verdict in the same round trip.
Same request body as /v1/analyze/trade. No JWT
required. The endpoint enforces a $0.10 USDG
payment on Robinhood Chain (chain ID 4663).
- Price:
$0.10 USDGper verified call - Asset: USDG,
0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 - Pay-to:
0xdD3596F3eE3BE02d4C6AFd23dC9E1833aDc47934 - Network:
eip155:4663 - Transfer method: EIP-3009
transferWithAuthorization(gasless) - EIP-712 domain:
{"name": "Global Dollar", "version": "1"}
Flow
- Send the trade request without a payment header. The server responds
402 Payment Requiredwith the accepted payment options. - Sign an EIP-3009
transferWithAuthorizationfor $0.10 USDG to the pay-to address. - Resend the same request with the signed payload in the
X-PAYMENTheader. - The facilitator verifies the signature, settles on-chain, and the endpoint returns the verdict at Tier 2 limits.
Client example
from decimal import Decimal
from uvd_x402_sdk import X402Client
client = X402Client(recipient_address="0xYourWallet...")
header = client.create_authorization(
pay_to="0xdD3596F3eE3BE02d4C6AFd23dC9E1833aDc47934",
amount_usd=Decimal("0.10"),
chain_name="robinhood",
token_type="usdg",
valid_duration=300,
)
# POST to /api/x402/analyze with X-PAYMENT: header
The uvd-x402-sdk handles the EIP-712 domain for
the robinhood network automatically. Integrators
do not need to construct it by hand.
GET probe
Some x402 discovery tools issue a bare GET to a
resource before they know it expects a POST body. Collar
exposes GET /api/x402/analyze that still enforces
the payment challenge, so an unpaid probe sees the standard
402 rather than a bare 405. A paid
GET returns a method_not_supported error, not a
verdict — the analysis requires POST.
MCP server
Collar speaks Model Context Protocol natively, so any MCP-compatible agent — Claude Desktop, Cursor, Cline, Windsurf, or a custom client — can call the guardrail without writing integration code.
Streamable HTTP transport, MCP protocol version 2025-06-18. The root endpoint reports MCP status:
{ "status": "ok", "mcp_enabled": true, "mcp_http_endpoint": "/mcp-http" }
Tools
| Tool | Purpose |
|---|---|
evaluate_trade |
Pre-trade risk check. Returns allow / warn / deny, the reasons, the notional value, the price and its source, a 0–100 risk score, and a tamper-evident audit hash. |
check_token_safety |
Honeypot and contract safety check for an ERC-20. Returns a severity (safe, warn, danger) and specific risk factors. |
simulate_balance |
Simulates an ERC-20 balance after a hypothetical trade via eth_call state override. Read-only; no transaction is ever sent. |
get_supported_assets |
Returns the canonical asset registry. Call before evaluate_trade to resolve symbols correctly. |
verify_audit_trail |
Recomputes every past decision's SHA-256 hash and verifies the chain links. |
Authentication model
MCP carries no per-user wallet signature, so MCP callers are evaluated at a fixed Tier 1 ceiling ($5,000 notional), regardless of COLR balance. To reach higher tier limits, use either:
-
the REST API with wallet-signature
authentication (
/v1/analyze/trade), which enforces the wallet's real tier, or -
the x402 paid endpoint
(
/api/x402/analyze), which grants Tier 2 limits per settled call.
Client configuration
Most MCP clients accept a JSON config. Point them at the Streamable HTTP endpoint:
{
"mcpServers": {
"collar": {
"url": "https://api.collarguardrail.com/mcp-http/mcp"
}
}
}
A machine-readable summary of every tool is available at /llms.txt.
"error" key, no verdict
was produced — treat that as a hard stop.
Agent discovery
Collar exposes machine-readable discovery files so autonomous agents can find, understand, and call the guardrail without manual integration.
| File | Purpose |
|---|---|
/llms.txt |
Plain-text API summary written for LLM-based agents: endpoints, auth flow, tier rules, MCP tools, x402 details, decision semantics. |
/.well-known/llms.txt |
Identical content at the standard well-known path; some frameworks only probe this location. |
/robots.txt |
Explicitly allows AI crawlers to index the API. |
/sitemap.xml |
Lists every public page for crawler and agent discovery. |
/.well-known/agent-card.json |
A2A agent card describing skills and accepted auth schemes. |
/.well-known/mcp/server-card.json |
Static MCP server card with tool definitions, schemas, and annotations. |
How an agent discovers Collar
- The crawler reaches
api.collarguardrail.com. - Checks
/robots.txt— allowed. - Reads
/sitemap.xmlfor the page set. - Reads
/llms.txtor/.well-known/llms.txtfor the full contract. - Reads
/.well-known/agent-card.jsonfor A2A skills. - If MCP-native, connects to
/mcp-http/mcpand lists tools. - If using x402, discovers Collar through the x402 Bazaar catalog and pays per call.
Verifying discovery
curl -s https://api.collarguardrail.com/llms.txt | head -20
curl -s https://api.collarguardrail.com/.well-known/llms.txt | head -5
curl -s https://api.collarguardrail.com/robots.txt
curl -s https://api.collarguardrail.com/sitemap.xml | head -20
curl -s https://api.collarguardrail.com/.well-known/agent-card.json
curl -s https://api.collarguardrail.com/.well-known/mcp/server-card.json
Health
Returns {"status": "ok"} when the service and its
datastore are reachable, 503 otherwise. Use as a
liveness probe.
Returns the service name, version, and MCP endpoint URLs. Useful for agents that hit the bare domain first.
Error responses
| Status | Meaning |
|---|---|
| 400 | Malformed request (bad address format, invalid trade fields). |
| 401 | Missing, expired, or invalid token — re-authenticate. |
| 402 | Payment required (only on /x402/analyze). |
| 403 | Wallet does not meet the tier threshold, or wallet does not match the JWT. |
| 422 | Request body failed validation. |
| 429 | Rate limit reached. Retry-After and X-RateLimit-* headers are set. |
| 5xx | Backend error — retry with backoff; do not assume allow. |
Roadmap
| Item | Why it matters |
|---|---|
| COLR launch on PONS v2 | 16 Oct, 3 PM ET. After launch, real balance checks replace the default Tier 1, and the preview-tier header is retired. |
| Transfer-tax detection | Catch 100% sell tax and hidden requires in transfer() bodies. |
| Proxy and liquidity checks | Detect upgradeable proxy patterns and unlocked liquidity. |
| Holder concentration | Flag tokens where a single wallet holds more than 80% of supply. |
| Agent SDK (Python and JS) | Thin client libraries for auth, retry, and x402 payment construction. |
| On-chain enforcement | Move from advisory to enforceable at the sequencer level. |
Verification
The oracle path has been exercised end-to-end against live
Chainlink feeds on Robinhood Chain. Stock-token prices,
oraclePaused() state, and staleness windows have
all been validated against real mainnet data.
The V4 fallback, slippage guard, cluster rate limiting, and daily-loss guard are covered by the repository's automated test suite, which runs before every deployment.
Independence
Collar Guardrail is an independent third-party application built to provide a risk layer for autonomous trading workflows.
It is not built, operated, sponsored, or endorsed by Robinhood.
Robinhood Chain is the underlying network referenced by the integration. COLR is a separate token used for access and tier gating, launched on PONS v2.