MASQUE
Launch app

Build on the same reads.

Everything the Masque terminal shows comes from public contracts on Robinhood Chain. These are the addresses, events and calls it uses, so you can check them or build your own.

Network

Chain
Robinhood Chain, id 4663
RPC
https://rpc.mainnet.chain.robinhood.com
Explorer
robinhoodchain.blockscout.com
Native gas
ETH

The official RPC answers log queries. Public mirrors may refuse eth_getLogs without a key, so read events from the official endpoint.

Contracts

Uniswap v3 on Robinhood Chain. Router and quoter were checked on chain: both return the same factory() and WETH9() as the live pools.

ContractAddressUsed for
UniswapV3Factory0x1f7d7550b1b028f7571e69a784071f0205fd2efagetPool for a pair and fee
SwapRouter020xcaf681a66d020601342297493863e78c959e5cb2exactInputSingle via multicall
QuoterV20x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7quotes, called with eth_call
WETH0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73ETH side of pools
USDG0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168dollar side, 6 decimals
Pons factory0x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7elaunch and curve events

Stock tokens

Each token pairs with a Chainlink feed for the same stock. The terminal compares the two to show the gap.

TickerTokenChainlink feed

Read a price

Quote one share against USDG on every fee tier that has a pool, and keep the best. Run with viem in Node or the browser.

import { createPublicClient, http, parseAbi, parseUnits, formatUnits } from "viem";

const client = createPublicClient({ transport: http("https://rpc.mainnet.chain.robinhood.com") });
const FACTORY = "0x1f7d7550b1b028f7571e69a784071f0205fd2efa", QUOTER = "0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7";
const USDG = "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168", NVDA = "0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC";

const F = parseAbi(["function getPool(address,address,uint24) view returns (address)"]);
const Q = parseAbi(["function quoteExactInputSingle((address tokenIn,address tokenOut,uint256 amountIn,uint24 fee,uint160 sqrtPriceLimitX96)) returns (uint256,uint160,uint32,uint256)"]);

let best = 0n;
for (const fee of [100, 500, 3000, 10000]) {
  const pool = await client.readContract({ address: FACTORY, abi: F, functionName: "getPool", args: [NVDA, USDG, fee] });
  if (/^0x0+$/.test(pool)) continue;           // no pool at this fee
  const { result } = await client.simulateContract({ address: QUOTER, abi: Q, functionName: "quoteExactInputSingle",
    args: [{ tokenIn: NVDA, tokenOut: USDG, amountIn: parseUnits("1", 18), fee, sqrtPriceLimitX96: 0n }] });
  if (result[0] > best) best = result[0];
}
console.log("1 NVDA =", formatUnits(best, 6), "USDG");

Read the token's decimals() instead of assuming 18 when you adapt this.

Build a swap

The terminal wraps one exactInputSingle in multicall(deadline, data), sets the minimum out from a fresh quote and the user's slippage, and simulates before asking the wallet to sign. When paying with ETH, send the amount as value; the router wraps it.

const R = parseAbi([
  "function exactInputSingle((address tokenIn,address tokenOut,uint24 fee,address recipient,uint256 amountIn,uint256 amountOutMinimum,uint160 sqrtPriceLimitX96)) payable returns (uint256)",
  "function multicall(uint256 deadline,bytes[] data) payable returns (bytes[])",
]);
const min = quoteOut * (10000n - 50n) / 10000n;          // 0.5% slippage
const swap = encodeFunctionData({ abi: R, functionName: "exactInputSingle",
  args: [{ tokenIn: WETH, tokenOut: NVDA, fee, recipient: account, amountIn, amountOutMinimum: min, sqrtPriceLimitX96: 0n }] });
const req = { address: ROUTER, abi: R, functionName: "multicall",
  args: [BigInt(Math.floor(Date.now() / 1000) + 600), [swap]], account, value: amountIn };
await publicClient.simulateContract(req);              // fails here, not in the wallet
const hash = await walletClient.writeContract(req);

Pons events

The Launches tab filters the Pons factory by the launch topic. Topic 1 is the new token, topic 2 the creator.

EventTopic 0
TokenLaunched0x8d4aad4953d0ca700d468f3753aa14432d1b35b43ec6409f051fb6aa43a89607
CurveBuy0xec36bf571f136799e8dc0b0b8bea4b04d8bd3d43de838aab0d5fc21d4cbfc455
CurveSell0x8113d738abdcb6b38357e9d53a54a7157861a09031b453651f0fe7fe151f59df

Addresses above were read from Robinhood Chain on 8 November 2026. Check them on the explorer before you send value. Not affiliated with Robinhood, Uniswap or Pons.