Penrose docs.

A triangle is one coin launched on flap (BNB Chain), Pons (Robinhood Chain) and pump.fun (Solana) in the same minute. The engine keeps stock of the coin on every chain. When one chain trades more than 3% above another, it sells there and buys on the cheap chain, then spends the profit buying the corner with the smallest market cap. No bridging per trade; stock is rebalanced across chains from time to time through Relay.

Launch and trading costs are shown in the flow before you sign. Your keys stay in your wallets: one EVM wallet for BNB Chain and Robinhood Chain, one Solana wallet for the third corner.

API

JSON over HTTPS at https://api.penrose-triangle.xyz. Reads are open; launches are signed by the creator's wallet.

GET/triangles

Every triangle with its three legs, combined cap and spread. ?sort=cap|spread|profit|new

GET/triangles/:id

One triangle: price, cap and CA on each chain, the spread, the weakest corner.

GET/triangles/:id/arbs

The arb log: dear corner, cheap corner, size, profit and the buyback.

GET/quote

A trade quote on one corner. ?triangle=tess&chain=sol&side=buy&amount=0.5

POST/launch

A signed launch: name, ticker, image, socials, pay chain. Returns the payment to sign.

GET/stream

Server-sent events: prices on all three chains and every arb as it lands.

GET/contracts

Launchpads, Penrose contracts and maker wallets, per chain.

section A, one triangle
1
2
3
4
5
6
7
8
9
10
11
curl https://api.penrose-triangle.xyz/triangles/tess

{
  "id": "tess", "ticker": "TESS", "spread": 2.6, "band": 3,
  "legs": {
    "bsc": { "pad": "flap",     "price": 0.001652, "mcap": 1652000 },
    "rh":  { "pad": "pons",     "price": 0.001611, "mcap": 1611000 },
    "sol": { "pad": "pump.fun", "price": 0.001598, "mcap": 1598000 }
  },
  "weakest": "sol"
}
PENROSE · curlscale 1:3copy

MCP

Give any agent the triangle. Add the server, then ask in plain words: "launch Tess on all three chains" or "which corner is cheapest right now".

section B, the agent
1
2
3
4
5
6
7
8
{
  "mcpServers": {
    "penrose": { "url": "https://api.penrose-triangle.xyz/mcp" }
  }
}

tools: list_triangles, get_triangle, quote,
       launch_triangle, list_arbs, list_contracts
PENROSE · mcpscale 1:3copy

SDK

One file, no install. Works in Node and the browser.

section C, the stream
1
2
3
4
5
6
7
8
import { penrose } from 'https://api.penrose-triangle.xyz/sdk.mjs';

const t = await penrose.triangle('tess');
console.log(t.spread, t.weakest);       // 2.6 'sol'

for await (const arb of penrose.arbs('tess')) {
  console.log(arb.sell, '->', arb.buy, arb.profit);
}
PENROSE · sdkscale 1:3copy

Launchpads

Every triangle is three real launches on these public contracts. Nothing is wrapped or bridged; each leg is a native coin on its chain.

flap Portal · BNB Chain

Creates the BNB Chain leg on flap, quoted in BNB.

0xe2cE…9De0
Pons V2 factory · Robinhood Chain

Creates the Robinhood Chain leg as a Pons V2 bonding curve, quoted in ETH.

0x7eD5…EC7e
pump.fun program · Solana

Creates the Solana leg on the pump.fun bonding curve, quoted in SOL.

6EF8…wF6P

Penrose contracts and maker wallets

The launchers, the three maker wallets that hold stock on each chain, and the buyback vault. Every address goes here the day mainnet opens, with its full history on the explorer.

Launcher · BNB Chain

Calls the flap Portal for every triangle launch and records the three CAs.

published with mainnet
Launcher · Robinhood Chain

Calls the Pons V2 factory with the same name, ticker and image.

published with mainnet
Launcher · Solana

Creates the pump.fun coin in the same minute.

published with mainnet
Maker wallet · BNB Chain

Holds stock on BSC. Sells when BSC is dear, buys when it is cheap.

published with mainnet
Maker wallet · Robinhood Chain

Holds stock on Robinhood Chain. Same rule, same band.

published with mainnet
Maker wallet · Solana

Holds stock on Solana. Same rule, same band.

published with mainnet
Buyback vault · Solana

Arb profit lands here, then buys the weakest corner.

published with mainnet