sms

Proof

The engine works.

SendMeSol is a work in progress, built in public. Every payment below is a real transaction on Solana devnet, the test network. Open any of them. Texting comes next.

146/146tests passed
8transfers on chain, refund included, 0 failed
~2sfrom PIN to landed

What we tested

Every command, start to finish.

  1. 59
    Command readerEvery command, typo, amount format and phone format, and every error
  2. 55
    Engine on devnetEvery flow and edge case against the real backend and database
  3. 4
    Claim-window refundUnclaimed SOL really comes back, on chain
  4. 14
    SecurityPIN and key-page bursts, one-time links, webhook locked to a token
  5. 8
    On-chain checkEvery transaction re-read from Solana: finalized, no error
  6. 6
    Site demoThe phone on the home page answers like the real thing
  1. 01
    A new number gets its own wallet, JOIN sets a PIN✓ Wallet created, test SOL landed
  2. 02
    SEND 0.01 SOL to a saved contact, then the PIN✓ Landed; balance down exactly 0.01 SOL + 5,000 lamports
    7XKo…WNx7 ↗
  3. 03
    They reply CLAIM and pick a PIN✓ The SOL is theirs; a second CLAIM finds nothing
  4. 04
    REQUEST $0.50, the other side replies PAY✓ Paid, and the requester got told
    5dJ4…qdhz ↗
  5. 05
    Pay someone already on SendMeSol✓ Straight into their wallet, no claim step
    2Bpn…7rnH ↗
  6. 06
    WITHDRAW 0.003 SOL to a Solana address✓ Part of the balance moved out
    5CrM…ehGe ↗
  7. 07
    NEW PIN, then pay with the old PIN✓ Old PIN refused, new PIN works
    4TqH…7PxF ↗
  8. 08
    iMessage mode: pay a new number✓ Nobody texted cold; the sender gets a tap-to-tell link
    4Gnw…swqh ↗
  9. 09
    Send to someone who never claims✓ Sent, then left unclaimed
    C8sk…yqu1 ↗
  10. 10
    After the claim window, the refund✓ The SOL came back on chain; the late CLAIM finds nothing
    3TTU…rXNg ↗
  11. 11
    Under the minimum, over the balance, own number, $200/day✓ All refused with a clear reply
  12. 12
    3 wrong PINs, then a payment older than 10 minutes✓ Payments locked; the stale payment expired
  13. 13
    EXPORT: bad link, wrong PIN, right PIN, reuse, expired✓ Refused, refused, key matches the wallet, dead, dead

Security

Your PIN guards every payment.

3 tries, then a 15-minute lockWe fired 10 wrong PINs at the same instant. Only 3 were checked, the rest were refused, and the payment was cancelled. Same test on the key page: the key was revealed at most once.
Keys encrypted, PINs hashedEvery wallet key is encrypted (AES-GCM). PINs are stored only as salted hashes. The database holds no phone numbers in plain text.
Your key, whenever you want itText EXPORT for a one-time link. It asks your PIN, shows the key once, and dies after 10 minutes.
Limits by text$200 a day by text. Unclaimed SOL comes back to the sender after 48 hours.

How the tests ran

Same engine, test numbers.

The tests texted the engine through the site's test line, from made-up +1 555 numbers, on Solana devnet. It's the same engine the real iMessage number will talk to. The one piece not live yet is the number itself.

What's live, what's next

Built in public, step by step.

  1. The engineWallet per number, PIN, SEND, CLAIM, REQUEST and PAY, contacts, NEW PIN, WITHDRAW, BALANCE, HISTORY, EXPORT. Running on Solana devnet.
    Live on devnet
  2. Mainnet, small caps firstReal SOL, with low limits per number while it grows.
    Later
  3. CASHOUT to Cash AppSOL becomes USDC and lands as dollars in your Cash App.
    Later
  4. 0.5% of every send buys $SMSHolders send free, with a higher daily limit.
    Later

← Back to SendMeSol