Yield Markets
mackinac connects to Pendle and Spectra across Arbitrum, Base, and Ethereum mainnet. Every active PT market is tracked live — implied fixed APY, underlying floating rate, and on-chain swap flow — in the same normalized format as perp and AMM venues.
Finding Markets — Rate Widget
Open the Rate Widget from the header (Rate button). It lists every active PT market across both protocols:
| Column | Description |
|---|---|
| Protocol | Pendle or Spectra |
| Market | PT name and underlying |
| Implied APY | Current fixed rate implied by the PT price |
| Bid APY / Ask APY | APY locked in by buying or selling PT at small size |
| Spread (bps) | Ask APY minus bid APY — the cost of transacting |
| Days to expiry | Calendar days until maturity |
| Chain | Arbitrum, Base, or Ethereum mainnet |
Use the venue filter to narrow to Pendle or Spectra only. Click Track on any row to add that PT to your workspace.
Rate Depth Widget
Once a PT is in your workspace, click the RD button on its product row. Rate Depth shows available liquidity at each APY level.
Header Metrics
| Metric | Description |
|---|---|
| Mid APY | Current implied fixed rate (annualized) |
| Underlying APY | The floating reference rate the PT is priced against |
| Spread | Mid APY minus underlying APY in basis points |
| Days to expiry | Calendar days until maturity |
| Age | Seconds since last on-chain data update |
Depth Table
| Column | Description |
|---|---|
| Size (USD) | Notional you want to trade |
| Buy APY | Fixed rate locked in by buying PT at this size |
| Sell APY | Fixed rate implied if you sell PT at this size |
| Spread | Difference between buy and sell APY at this level (bps) |
Footer
| Metric | Description |
|---|---|
| PT price | Price of one PT in terms of the underlying asset |
| Pool fee | The AMM pool fee (bps) |
| TVL | Total value locked in the pool |
Reading Rate Depth
The buy APY at a given size is the guaranteed annualized return if you buy PTs and hold to maturity. Compare it against the underlying APY to assess relative value: a fixed rate above the expected floating rate represents a premium to lock in.
Wide spreads (> 50 bps) at small sizes indicate thin liquidity. Large sizes will receive significantly worse rates — always check how APY degrades across the depth table before sizing.
To convert annualized APY to a total return over the remaining period:
total_return ≈ APY × (days_to_expiry / 365)T&S and Vitals on Yield Markets
T&S and Vitals work on Pendle and Spectra markets the same way they do on perps. Every on-chain swap through the pool appears as a trade print with full microstructure annotations.
T&S side convention: green = buying PT (paying the underlying, receiving the fixed rate); red = selling PT.
Vitals tracks directional flow metrics on PT buying versus selling pressure — the same Hawkes intensity, LOB imbalance, and volume imbalance signals that apply to perp markets work here for detecting momentum in rate positioning.
Basis with Yield Markets
Add a PT alongside any correlated underlying — for example, hl:ETH alongside pendle:PT-weETH-... — and enable Basis on either product. The basis widget computes the spread in basis points net of round-trip fees, giving a live view of the implied fixed-rate premium relative to the corresponding perp.
Typical Workflow
- Open the Rate Widget scanner from the header
- Filter by protocol and chain; identify markets with the spread and duration you want
- Click Track to add to your workspace
- Enable Rate Depth (
RDbutton) to see available liquidity at each APY level - Enable T&S to watch the live swap stream
- Enable Vitals to see whether buyers or sellers are dominating flow
Venue Quirks
Spectra Base chain — Pool discovery for Spectra markets on Base uses an eth_getLogs scan. The public Base RPC endpoint sometimes rate-limits these scans, causing specific markets to show stale or missing data. Spectra Arbitrum markets are unaffected.
Pendle / Spectra on Ethereum mainnet — Market data for mainnet yield pools uses the public https://eth.llamarpc.com RPC (~100 req/min limit). Under normal polling cadences this is rarely hit, but initial pool discovery can cause brief delays on first load.