Built for Robinhood Chain

Banking should feel
like a conversation.

Corvane is an AI agent on top of a non-custodial wallet for Robinhood Chain. Hold crypto and tokenized stocks, ask for what you want in plain language, and confirm every transaction before it signs.

Just ask. Plain language in, structured intent out.
CHAT NATURALLY
You confirm. Every transaction runs from your Confirm.
YOU STAY IN CONTROL
Your keys. Yours from login. No seed phrase, no extension.
NON-CUSTODIAL BY DESIGN
One wallet. ETH, USDG and tokenized stocks.
CRYPTO + EQUITIES

// PRODUCT

A wallet you can talk to,
and keys only you can use.

Say what you want in plain language. The agent turns it into a structured request, code checks it against the address checksum, the pinned asset list and your balance, and the same validated object builds both the confirmation card and the transaction you sign. Reads answer instantly: balance, history, price.

  ┌────────────────────────┐
  │ send 50 USDG to 0x…   ▍│
  └────────────────────────┘
     text in, JSON out

Chat-native transactions

Send, swap, buy, sell. Say it the way you would say it. The agent reads your intent and returns structured parameters, ready for you to review.

  ┌────┬────┬────┐
  │ETH │USDG│NVDA│
  └────┴────┴────┘
   one chain, one wallet

Crypto and stocks, one place

ETH, WETH and USDG sit beside NVDA, TSLA and SPY. On Robinhood Chain they settle on the same rails, so one wallet holds both.

   ╔═══╗
   ║ ◈ ║
  ┌╨───╨┐
  │░░░░░│
  └─────┘

Non-custodial by construction

An embedded wallet, created at login. No seed phrase, no extension. The keys are yours, and yours is the only signature that moves anything.

  ┌───┐    ┌───┐
  │ ai├───►│you│
  └───┘    └─┬─┘
           ┌─▼──┐
           │sign│
           └────┘

You hold the last step

The agent drafts; you approve. Execution is reachable only from the Confirm button. That rule is enforced in code, not requested in a prompt.

  0x4b6F…a1C3      ✗
  ──────────────────────
  0x4b6F2c9d1E7a3B58C0dF
  41927aA6E5D3B2c8a1C3▏

Full addresses, never truncated

You see the whole recipient address, in monospace, at the moment you confirm. Nothing is hidden behind an ellipsis.

  ┌ pinned 27 ─── | ┐
  │ USDG   pinned ✓ │
  │ NVDA   pinned ✓ │
  │ USDG   fake   ✗ │
  └─────────────────┘

Every asset pinned in code

27 contract addresses taken from the official Robinhood Chain list and verified on-chain. Corvane resolves a symbol to a pinned address. It never discovers a token by searching.

// HOW IT WORKS

Three steps to
a signed transaction.

you.txt
1// however you would normally say it
2send 50 USDG to
30x4A8f2Cb91e6D7053aB19cE44f0821Db7C3e5A902
Nothing signed yet

That’s all the model ever emits. It never writes calldata, and it never signs. The confirmation card and the signed transaction are both built by code, from that same validated object.

// THE NETWORK

Built on Robinhood Chain.

Robinhood Chain is a permissionless, EVM-compatible Ethereum L2 on the Arbitrum stack. Crypto and tokenized equities settle on the same rails, so a single chat box reaches both.

{}

EVM-compatible

The same bytecode, addresses, and signatures you already know

Permissionless

Anyone can deploy and transact. The chain is open by design

Ξ

ETH for gas

Fees are paid in ETH, the same gas token as Ethereum

One set of rails

Stocks and crypto settle on the same chain, so one sentence can move either

Chain ID

46630
Testnet. Mainnet is 4663.

  ┌───┐
  │ ◉ │
  └─┬─┘
    │

Gas token

ETH
The same gas token as Ethereum.

  ┌───┐
  │ ◉ │
  └─┬─┘
    │

Stack

Arbitrum
An Ethereum L2.

  ┌───┐
  │ ◉ │
  └─┬─┘
    │

Execution

EVM
Standard EVM bytecode and tooling.

  ┌───┐
  │ ◉ │
  └─┬─┘
    │

Access

Permissionless
Open to deploy and transact.

  ┌───┐
  │ ◉ │
  └─┬─┘
    │

Custody

Yours
Keys are created in your wallet and stay there.

  ┌───┐
  │ ◉ │
  └─┬─┘
    │
27
Pinned contracts
USDG
Chain stablecoin
0
Keys we hold

Corvane is an independent project. It is not affiliated with, endorsed by, or sponsored by Robinhood Markets, Inc.

// THE ALLOWLIST

28 assets.
Every address pinned.

Corvane builds transactions against a fixed set of assets. A symbol resolves to a contract address taken from Robinhood’s official list and verified on-chain. It never resolves to one found by searching.

Robinhood Chain|testnet · chain 46630
0
Crypto
ETH · WETH · USDG
0
Tokenized equities
AAPL · AMD · AMZN · BABA · BE · COIN · CRCL · CRWV · GOOGL · INTC · META · MSFT · MU · NVDA · ORCL · PLTR · SNDK · SPCX · TSLA · USAR
0
Tokenized funds
SPY · QQQ · SLV · SGOV · USO
0
Discovered by search
Every symbol resolves to an address pinned in code.
How the list was verified
01pull docs.robinhood.com/chain/contractsofficial docs27 addressespinned
02cross-check every addressblockscoutmatch27/27
03read decimals() symbol() name()rpcmatch27/27
04USDG is 6 decimalsrpcconfirmedothers 18

// WHAT YOU CAN SAY

Say it plainly.
Confirm what spends.

Say what you want in your own words. The agent turns it into structured parameters, never calldata. Reads answer on the spot. Anything that spends waits for your confirmation.

  ╭─╮
  │◦│
  ╰─╯

what’s my balance?

Reads. Answers instantly.

instant
  ╭─╮
  │◦│
  ╰─╯

show my transaction history

Reads. Answers instantly.

instant
  ╭─╮
  │◦│
  ╰─╯

what’s NVDA trading at?

Reads. Answers instantly.

instant
  ╭─╮
  │◦│
  ╰─╯

how much USDG do I hold?

Reads. Answers instantly.

instant
  ┌─┐
  │▲│
  └─┘

send 50 USDG to 0x4A8f2Cb9…

Drafts a transfer. Stops at Confirm.

you sign
  ┌─┐
  │▲│
  └─┘

buy 100 USDG of NVDA

Drafts a swap. Stops at Confirm.

you sign
  ┌─┐
  │▲│
  └─┘

swap 0.1 ETH to USDG

Drafts a swap. Stops at Confirm.

you sign
  ┌─┐
  │▲│
  └─┘

sell my TSLA for USDG

Drafts a swap. Stops at Confirm.

you sign

It asks instead of assuming.

A missing amount, an unspecified asset, or an unfamiliar address gets a question, not a guess. The confirmation card and the signed calldata are built from the same validated parameters, never from the model’s prose. The address you see in full is the address that gets signed.

Open the app
// Example exchange
you› what’s my balance?
corvane› 1,240.00 USDG · 0.42 ETH [read · instant]
you› send 50 USDG to 0x4A8f2Cb9…
corvane› drafted. confirm to sign:
to 0x4A8f2Cb9E1d7B3a05C6e8F41d92B7c3A0e5D18Fb
send 50 USDG
[ Confirm ] [ Cancel ]

// THE HARD RULE

The agent can draft. Only you can sign.

Corvane separates intent from authority. The model reads your words and drafts a transaction. The keys stay with you, and the signer answers to one thing only: your tap on Confirm.

  ╔═══╗
  ║ ✗ ║
  ╚═══╝

The model never signs

The agent returns a structured intent, never calldata. Signing happens in your wallet, after your tap. Execution is reachable from the Confirm button and nowhere else.

  ┌───┐
  │ = │
  └───┘

One object, two uses

The card you read and the calldata you sign are built from the same validated object. What you approve is exactly what executes.

  ╭───╮
  │ 0x│
  ╰───╯

Full addresses, always

Recipients are shown in full, in monospace, at confirmation. No truncation, no ellipsis. You approve an address you can actually read.

  [===]
  [===]

A pinned allowlist

Assets resolve to contract addresses fixed in code and verified over RPC against the official docs. Symbols are pinned, never discovered at runtime.

  ◉─?─◉
  │ │ │

Ambiguity becomes a question

Corvane asks instead of assuming. A missing amount or an unfamiliar address gets a question, not a guess.

  ▪ ▪ ▪
  ▪ ▪ ▪

Your keys stay yours

The wallet is embedded and non-custodial. Corvane holds no custody and cannot sign on your behalf, which is exactly why nobody else can either.

Pinned, not discovered

Every asset Corvane can touch resolves to an address fixed in code and read back over RPC. Symbols are resolved by pin, never by search.

4663Mainnet chain ID
46630Testnet chain ID
27Pinned contracts
ETHGas token

A name can be copied. A contract address cannot.

Search the explorer for USDG and a second token appears, also named “Global Dollar”, same ticker, different address. Alongside it sit impostors calling themselves “unstable degen” and “Upside Down Gorilla” under the same symbol. This is why Corvane pins every contract address in code and verifies it over RPC. The real one is the only one it can reach.Check it yourself →

// UNDER THE HOOD

The model proposes.
Code disposes.

You type a sentence. The model turns it into structured JSON. It is an intent, not a transaction. Code takes it from there: it checks the address, resolves the asset against a pinned allowlist, weighs the amount against your balance, and builds your confirmation card from the exact object it will sign. Three things the model is structurally incapable of doing, and one answer it is always free to give:

It cannot write calldata

The model returns JSON. The transaction is assembled by code, from fields that already passed validation.

It cannot invent an asset

Every symbol resolves to one of 27 contract addresses pinned in code from the official chain docs. Corvane never finds a token by searching.

It cannot sign

Keys stay in your embedded non-custodial wallet. The signature is yours, and it happens on your tap.

Refusal is a first-class result

An address that fails checksum, a ticker outside the allowlist, an amount above your balance: each comes back with a reason, never a best guess.

1// the model returns an intent, never calldata
2const intent = await parseIntent(message, walletContext)
3
4// { action: 'transfer',
5// asset: 'USDG',
6// recipient: '0x...',
7// amount: '50' }
$cast rpc eth_chainId
0xb626 (chain 46630, Robinhood Chain testnet)

Say it. Confirm it. Done.

Speak plainly. The agent reads your intent and fills out the transaction; you read the full address and sign it. Nothing moves without your tap.

Built for Robinhood Chain. Non-custodial, your keys, no seed phrase to write down.