Release notes

Protocol v1.8.2

Aave and Aerodrome on Base, Mallow perps, and Bazaar examples vet402 can pay

Date: 27 September 2026

Protocol 1.8.2. Aave V3 lending and Aerodrome basic-pool farms join the Base catalog next to Morpho. A Base 0x address on GET /positions now includes Aave supply and variable debt, plus staked Aerodrome LP. Mallow ALGO/USD and BTC/USD limit orders compile as unsigned Algorand groups, with take-profit and stop-loss as return on margin. The examples on paid 402 responses are real requests, so vet402 probes the published input instead of a placeholder. Canix still never holds keys or submits transactions.

What shipped

Aave V3 (Base)

Discovery is Aave GraphQL (https://api.v3.aave.com/graphql), chainId 8453, Pool 0xA238Dd80C259a72e81d7e4664a9801593F98d1c5. One lending row per reserve. Supply APY and borrow APR are published as percents. Frozen, paused, zero-TVL, and native ETH reserves are dropped.

GET /positions for a Base address reads aToken and variable-debt balances. Health factor comes from Pool getUserAccountData and is omitted when the account has no debt.

Execution shapes:

Stable-rate borrow, eMode, flash loans, isolation-mode ceilings, credit delegation, and Permit are out of scope.

See protocol/docs/data-sources/aave.md.

Aerodrome basic pools (Base)

Discovery is on-chain LpSugar (0x69dD9db6d8f8E7d83887A704f447b1a584b599A1), voter-whitelisted volatile and stable pools with a live gauge. Headline APY is emissions APR on staked liquidity. Trading fees go to voters and are not added. Pools below AERODROME_MIN_TVL_USD (default $50,000) are dropped. The catalog is cached in-process because a full Sugar scan is many heavy eth_calls.

GET /positions for a Base address reads staked LP via Gauge.balanceOf. Unclaimed AERO and unstaked LP are omitted.

Execution shapes:

Slipstream, swaps, veAERO, bribes, and reward claims are out of scope. Broadcast a deposit group in order: the stake leg follows add-liquidity.

See protocol/docs/data-sources/aerodrome.md.

Quotes for both venues are unsigned Base calldata. identity.network is base. encodedTransactions are hex. Structured { to, data, value, chainId } is on transactions[].evmCall and metadata.evmCalls.

Mallow perps (Algorand)

Mallow is the public name. Orders settle on People’s Exchange. Canix reads markets and quotes through the Mallow API proxy, then builds the group with the PEX SDK. It does not ask Mallow to assemble or submit the group.

GET /protocols/mallow/markets is free. One row each for ALGO/USD and BTC/USD: index, max leverage, USDC collateral (31566704), and the 3 bps builder fee. A missing pair fails that row only.

Execution shapes:

collateralUsd is USDC margin. Notional is collateralUsd × leverage. takeProfitPct and stopLossPct are return on that margin: pass 20 and 25 for +20% and −25%, not a 20% price move. stopLossPct is a positive number. market is ALGO or BTC. side is long or short. Leverage above the market maximum is rejected. A limit already through the index is rejected and is not rewritten as a market order.

Every quote and group includes Mallow’s 3 bps builder fee. Production refuses to compile when MALLOW_BUILDER_ADDRESS is missing. Close, cancel, position reads, other markets, and market orders are out of scope.

See protocol/docs/execution-shapes/mallow-open-limit.md.

Bazaar examples vet402 can send

vet402 pays the example on PAYMENT-REQUIRED extensions.bazaar. Those examples live in the Caddy plugin (protocol/caddy/bazaar_profiles.go), not in OpenAPI.

Wallet examples use the Brownie Bot treasury KPEZM2DSFHOOHG7RPDECCBTD6FRN2LPSSRJMMFVCFSIHGES4BXBJHPUBVQ, except paid position reads. GET /positions and GET /positions/claimable use the nf.algo owner 5YCWR662A5HIOFYYS2CTIHHYBCIXESVLAOVLZ7CL27PK5SKBROCSRFIJMA, because GET /public/agents/brownie/positions is the free showcase of the Brownie wallet.

POST /execution/quotes advertises mainnet:tinyman:v2:addLiquidity:flexible with a full input (userAddress, both asset ids and amounts, maxSlippageBps). That replaces the placeholder shape key tinyman-v2:lp:add:flexible and empty input.

POST /swaps/transactions advertises address, quote, and slippage. The previous example was a quote-shaped stub and failed validation before any swap work. A static quote still expires in about 30 seconds, so a probe of that body can 400 on freshness. shapeKey plus input on /execution/quotes does not have that limit: the compiler builds a fresh group.

Production 402s change only after the Caddy x402 plugin is rebuilt and redeployed.

Pricing

No new SKUs. Merchant rail remains Algorand USDC, with optional Base USDC at the same price when X402_PAY_TO_BASE is set.

StepRoute / toolPrice
Aave / Aerodrome catalogGET /opportunities*, GET /protocols/aave/opportunities, GET /protocols/aerodrome/opportunities0.01 USDC (existing catalog)
Base positionsGET /positions?address=0x…0.005 USDC (existing positions)
Mallow market readGET /protocols/mallow/marketsFree
Aave / Aerodrome / Mallow compilePOST /execution/quotes / canix_get_execution_quote0.10 USDC flat per request

Optional protocol env: AAVE_GRAPHQL_URL, AERODROME_SUGAR_ADDRESS, AERODROME_SUGAR_PAGE_SIZE, AERODROME_MIN_TVL_USD, AERODROME_CATALOG_TTL_SEC, AERODROME_PRICE_URL, BASE_RPC_URL (quotes and Base positions; default https://mainnet.base.org), MALLOW_PDEX_PROXY_URL, MALLOW_PDEX_ARTIFACT_URL, and MALLOW_BUILDER_ADDRESS (required in production).

Agent loop

  1. GET /protocols/aave/opportunities or GET /protocols/aerodrome/opportunities / canix_get_protocol_opportunities. Read chain: "base", assetAddresses, and inputHints.poolId (Aave underlying, or Aerodrome pool).
  2. For a book, GET /positions with a Base 0x address. An Algorand address still returns Algorand protocols only.
  3. For a Mallow order, GET /protocols/mallow/markets, then POST /execution/quotes with mainnet:mallow:v1:openLimit:attached. Ask for collateralUsd. Pass market ALGO or BTC. If the quote returns not-opted-in, compile mainnet:mallow:v1:optIn:usdc first.
  4. POST /execution/quotes / canix_get_execution_quote with one of the shape keys above. Base shapes take a Base 0x userAddress and return calldata. Mallow takes an Algorand address and returns an unsigned group. Amounts on Base are ERC-20 base units.
  5. Sign the returned calldata on Base (metadata.evmCalls), or sign the Algorand group locally. Submit locally. Canix never holds keys and does not broadcast.
  6. Pay the x402 access charge on Algorand or Base. Algorand USDC is the first accept and a complete payment. A Base 0x address is required only for Aave or Aerodrome quotes, or for a payment signed against the Base accept. Paying for a quote does not execute the quote.