Skip to main content
The Guard is one engine shared by every surface. The app, the MCP server and the agent all call it, so a verdict means the same thing everywhere.
NVIDIA with the Guard: market closed, fair price, -0.08% vs exchange

NVIDIA with the Guard: market closed, fair price, -0.08% vs exchange

The four checks

1

Market window

Reads the US session (open, pre, after, closed) and any issuer halt (dividend, split, earnings) from the Binance RWA Data API. A halted stock is always BLOCK.
2

Fair price

Compares the on-chain price per share with the exchange reference price and expresses the gap in basis points (1 bps = 0.01%).
3

Best issuer

Ondo, bStocks and xStocks list the same stock with different multipliers, halts and staleness. Portir puts halted issuers last, then stale-looking ones (a discount deeper than 1%), and picks the cheapest on-chain price among the rest. The app shows what it compared.
4

Minimum output

The swap is built with a 0.5% minimum output. If the pool moves further before your transaction lands, it reverts instead of filling badly.
Every issuer compared: bStocks used, Ondo and xStocks shown

Every issuer compared: bStocks used, Ondo and xStocks shown

Verdicts

Thresholds live in THRESHOLDS = { warnBps: 50, blockBps: 100 }.
Per-share price is token price / multiplier. Ondo tokens do not rebase; their multiplier (shares per token) grows with reinvested dividends. Portir always shows and compares per-share prices.

Every verdict has a sentence

The Guard never answers with a bare color. Examples it produces:
  • “The market is closed and the on-chain price is 1.40% above the exchange price, so it is better to wait.”
  • “The market is open and you would pay 0.72% more than the exchange price.”
  • “The market is closed and the price is at or below the exchange price.”
The agent writes these same sentences into PlanRegistry with each run.

When the exchange price is missing

The Binance RWA Data API sometimes returns no exchange price for a stock. Portir does not invent one: the app shows “exchange price unavailable”, and the agent treats the stock as BLOCK with the reason “The exchange price is not available right now, so the price cannot be checked.”