Five commands, one phone number
Everything SMStocks does is a text message. There is no app to install, no SDK to import and no dashboard you are required to log into. This page is the whole interface.
How it works
When you buy, the protocol takes your USDC, opens a hedged position against the underlying, and mints you a synthetic share that settles on Robinhood Chain. Because every synthetic is backed by that hedge, the protocol never takes a view on price, and your position tracks the instrument rather than our balance sheet.
When you send, that synthetic moves to another phone number. The account behind a number is derived deterministically, so it exists before its owner has ever heard of us. That is the part which makes a transfer to someone with no wallet possible at all.
Robinhood's own tokenized shares are transfer restricted and can only move between whitelisted addresses, which is why SMStocks issues its own hedged synthetics instead of wrapping them.
Getting started
Text START to your regional number. The reply gives you an account, asks you
to choose a four digit PIN, and tells you where to fund it. Any command that moves value carries that PIN
at the end, and reading your own balance never needs one.
If someone sends you shares before you have an account, you get a message explaining what arrived and what to reply. Claiming it creates the account for you, so the first thing you ever do can be receiving rather than signing up.
Commands
Case does not matter and extra spaces are ignored. Every command that moves value ends with your PIN.
Move shares to any phone number on earth.
> SEND 5 sTSLA TO +14155550182 Sent. 5.0000 TSLA held for +1 415 555 0182. They reply CLAIM to take custody. Unclaimed transfers return to you in 7 days.
The recipient needs no wallet and no app. Their account is derived from the number itself and comes into existence the moment they reply. If nobody claims the transfer within seven days the position returns to you automatically, and you are told when that happens.
Open a position against your USDC balance.
> BUY 100 sAAPL Filled. 0.4658 AAPL at 214.62 USDC. Hedge opened in the same block as the mint. USDC balance 892.31.
Sizing is denominated in dollars rather than shares, because fractional quantities are easier to reason about that way. The desk contract reads the mark from the oracle and does the arithmetic itself, so a fill is something you can check rather than something we assert.
Close all of a position or part of it.
> SELL 0.5 sAAPL
Filled. Sold 1.2500 NVDA at 441.08.
Realised +182.40. Hedge unwound in the same tx.
USDC balance 1,443.81.
Selling moves the position back to the desk and credits you the proceeds in the same transaction, so there is never a half-finished trade. Proceeds are spendable immediately, with no withdrawal window.
Return the whole book in one reply.
> BAL AAPL 0.4658 cost 214.62 now 221.28 TSLA 5.0000 cost 443.00 now 441.08 NVDA 1.2500 cost 402.10 now 441.08 ------------------------------------------ USDC 892.31 Book $1,204.88
No PIN is needed to read your own balance. The reply is deliberately built to survive a narrow screen, so it stays readable on a feature phone with a twenty character display.
Take custody of a transfer sent to your number.
> CLAIM Done. 5.0000 TSLA is yours. PIN set. Reply OUT <address> to self-custody.
The first CLAIM also creates your account and sets your PIN. From that point the balance is yours, and you can move it to a wallet you control at any time. Gas is sponsored, so you never have to acquire ETH to receive or claim anything.
Utility commands
| Command | Syntax | What it does |
|---|---|---|
HIST | HIST [days] | Recent activity, read from the vault's event log. Live |
LIMIT | LIMIT | What is left of your transfer ceiling before you hit it. Live |
OUT | OUT <address> | Move a claimed balance out to a wallet you control. Live, signed by you |
PIN | PIN <old> <new> | Rotate the code that authorises value-moving commands. Planned |
BLOCK | BLOCK <number> | Stop a number from sending to you. Planned |
HELP | HELP [command] | The command list, or the syntax for one command. Live |
Security
A phone number is a weak identity on its own, and we treat it that way. Sender ID is trivial to spoof, so it can never be sufficient by itself.
What is enforced today: possession of a number is proven with a one-time code before it can be bound to a wallet, and once bound, withdrawal is signed by that wallet rather than by us. Transfer size and rate are capped at the relayer.
What is designed but not enforced yet: the per-command PIN and the carrier-change freeze described below. They belong to the version that carries real money, and pretending they are live today would be worse than saying this.
The attack we design against most carefully is the SIM swap. If the carrier reports that your number moved to a new SIM, withdrawals freeze for twenty four hours while ordinary transfers keep working. That window belongs to you rather than to whoever took the number, and every command during it is reported to your recovery contact.
You can also cap what a single message is allowed to move. Anything above your ceiling needs a second confirmation sent from the same handset.
Fees
Today a fill executes at the published mark with no spread taken, transfers between numbers are free, and gas on Robinhood Chain is paid by us, which is why a recipient never has to hold ETH. A spread will exist once positions are hedged, because someone has to carry that cost, and it will be quoted in the confirmation rather than buried in a schedule.
Exact numbers are not published yet, because publishing a fee we have not finished testing would be worse than saying nothing.
Limits
Every account has an hourly and a daily ceiling. Text LIMIT and the reply
tells you what is left instead of making you discover it by hitting a wall. Ceilings rise as an account
ages, and you can lower your own at any time, which is useful if the handset is shared.
What is live
Five contracts are deployed and verified on Robinhood Chain. Transfers, buys, sells, claiming a number and withdrawing to a wallet all execute on chain, and every one of them produces a transaction you can open in the explorer. Prices come from the market and are published to an oracle contract that halts trading when it goes stale.
Two things are not live, and both matter. The synthetics are not hedged, so they track the published price without a position standing behind them. Delivery over SMS is not connected, so the product currently speaks through this site rather than through your inbox.
| Contract | Address |
|---|---|
| PhoneVault | 0xEdDbF875…987b |
| Desk | 0xE38A8cF5…cdFb |
| PriceOracle | 0x3Cd37d4D…C1FA |
| sAAPL | 0x259bEe7a…078d |
| sTSLA | 0xbC22b9Fb…287F |
| sUSD | 0x91a0CFE3…2E3E |
When something fails
A failed command replies in plain words and prints the exact message that would have worked, because retyping a command on a numeric keypad is expensive. Duplicate messages are safe: every command carries an implicit nonce, so a carrier retry comes back flagged and free rather than doubling your position.
> BUY AAPL 100 Could not read that. Amount comes before the ticker. Try: BUY 100 sAAPL